This commit was manufactured by cvs2svn to create tag 'v200708210000'.
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 abb0c88..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/feature.properties
+++ /dev/null
@@ -1,145 +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 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 API (JPA) 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\
-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.sdk/feature.xml b/assembly/features/org.eclipse.jpt.sdk/feature.xml
deleted file mode 100644
index 4b10e05..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/feature.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jpt.sdk"
-      label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName"
-      plugin="org.eclipse.jpt"
-      image="eclipse_update_120.jpg">
-
-   <description>
-      %description
-   </description>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <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"/>
-
-   <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 76abfb4..0000000
--- a/assembly/features/org.eclipse.jpt.sdk/license.html
+++ /dev/null
@@ -1,98 +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>June 06, 2007</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>
-   
-  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
-  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.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.tests/.cvsignore b/assembly/features/org.eclipse.jpt.tests/.cvsignore
deleted file mode 100644
index d9e4340..0000000
--- a/assembly/features/org.eclipse.jpt.tests/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.bin.dist.zip
-build.xml
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 6b58fe6..0000000
--- a/assembly/features/org.eclipse.jpt.tests/feature.properties
+++ /dev/null
@@ -1,145 +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\
-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.tests/feature.xml b/assembly/features/org.eclipse.jpt.tests/feature.xml
deleted file mode 100644
index e445c4c..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="1.0.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <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 5644598..0000000
--- a/assembly/features/org.eclipse.jpt.tests/license.html
+++ /dev/null
@@ -1,98 +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>June 06, 2007</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>
-    
-  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
-  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.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/.cvsignore b/assembly/features/org.eclipse.jpt/.cvsignore
index d9e4340..de8b73f 100644
--- a/assembly/features/org.eclipse.jpt/.cvsignore
+++ b/assembly/features/org.eclipse.jpt/.cvsignore
@@ -1,2 +1,2 @@
-*.bin.dist.zip
 build.xml
+org.eclipse.jpt_1.0.0.*
diff --git a/assembly/plugins/org.eclipse.jpt/.cvsignore b/assembly/plugins/org.eclipse.jpt/.cvsignore
deleted file mode 100644
index e4254b1..0000000
--- a/assembly/plugins/org.eclipse.jpt/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-temp.folder
-build.xml
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 5ac613e..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: 1.0.0.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 159bfce..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=Java Persistence API 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 f45a08d..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 = Java Persistence API Tools
-providerName = Eclipse.org
diff --git a/jpa/features/org.eclipse.jpt.feature/.project b/jpa/features/org.eclipse.jpt.feature/.project
deleted file mode 100644
index c8eb2f0..0000000
--- a/jpa/features/org.eclipse.jpt.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.feature</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/jpa/features/org.eclipse.jpt.feature/.settings/org.eclipse.core.resources.prefs b/jpa/features/org.eclipse.jpt.feature/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index dab5837..0000000
--- a/jpa/features/org.eclipse.jpt.feature/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:10:47 EDT 2007
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/features/org.eclipse.jpt.feature/build.properties b/jpa/features/org.eclipse.jpt.feature/build.properties
deleted file mode 100644
index 7200939..0000000
--- a/jpa/features/org.eclipse.jpt.feature/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/jpa/features/org.eclipse.jpt.feature/eclipse_update_120.jpg b/jpa/features/org.eclipse.jpt.feature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/jpa/features/org.eclipse.jpt.feature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/jpa/features/org.eclipse.jpt.feature/epl-v10.html b/jpa/features/org.eclipse.jpt.feature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/jpa/features/org.eclipse.jpt.feature/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/jpa/features/org.eclipse.jpt.feature/feature.properties b/jpa/features/org.eclipse.jpt.feature/feature.properties
deleted file mode 100644
index a2b39f3..0000000
--- a/jpa/features/org.eclipse.jpt.feature/feature.properties
+++ /dev/null
@@ -1,140 +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 API Tools
-
-# "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=Java Persistence API (JPA) Tools
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006-07 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/jpa/features/org.eclipse.jpt.feature/feature.xml b/jpa/features/org.eclipse.jpt.feature/feature.xml
deleted file mode 100644
index a6e8a54..0000000
--- a/jpa/features/org.eclipse.jpt.feature/feature.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jpt.feature"
-      label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName"
-      image="eclipse_update_120.jpg">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <url>
-      <update label="Web Tools Platform (WTP) Updates" url="http://download.eclipse.org/webtools/updates"/>
-      <discovery label="Web Tools Platform (WTP) Updates" url="http://download.eclipse.org/webtools/updates"/>
-      <discovery label="Dali Java Persistence API Tools (JPA) Updates" url="http://download.eclipse.org/webtools/updates/"/>
-   </url>
-
-   <requires>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.ui"/>
-      <import feature="org.eclipse.datatools.connectivity.feature"/>
-      <import feature="org.eclipse.datatools.modelbase.feature"/>
-      <import feature="org.eclipse.datatools.sqldevtools.feature"/>
-      <import feature="org.eclipse.datatools.enablement.feature"/>
-      <import plugin="org.eclipse.datatools.connectivity.db.generic.ui"/>
-      <import plugin="org.eclipse.datatools.connectivity.db.generic"/>  
-      <import plugin="org.eclipse.datatools.doc.user"/>
-      <import plugin="org.eclipse.jdt.core"/>
-      <import plugin="org.eclipse.core.commands"/>
-      <import plugin="org.eclipse.core.expressions"/>
-      <import plugin="org.eclipse.core.filebuffers"/>
-      <import plugin="org.eclipse.core.resources"/>
-      <import plugin="org.eclipse.emf.ecore"/>
-      <import plugin="org.eclipse.emf.ecore.xmi"/>
-      <import plugin="org.eclipse.jem"/>
-      <import plugin="org.eclipse.jem.util"/>
-      <import plugin="org.eclipse.jem.workbench"/>
-      <import plugin="org.eclipse.jst.j2ee"/>
-      <import plugin="org.eclipse.jst.j2ee.core"/>
-      <import plugin="org.eclipse.text"/>
-      <import plugin="org.eclipse.wst.common.emf"/>
-      <import plugin="org.eclipse.wst.common.frameworks"/>
-      <import plugin="org.eclipse.wst.common.modulecore"/>
-      <import plugin="org.eclipse.wst.common.project.facet.core"/>
-      <import plugin="org.eclipse.wst.sse.core"/>
-      <import plugin="org.eclipse.wst.validation"/>
-      <import plugin="org.eclipse.wst.xml.core"/>
-      <import plugin="org.eclipse.xsd"/>
-      <import plugin="org.eclipse.draw2d"/>
-      <import plugin="org.eclipse.emf.edit.ui"/>
-      <import plugin="org.eclipse.jdt.ui"/>
-      <import plugin="org.eclipse.jface.text"/>
-      <import plugin="org.eclipse.jst.j2ee.ui"/>
-      <import plugin="org.eclipse.ui.ide"/>
-      <import plugin="org.eclipse.ui.views.properties.tabbed"/>
-      <import plugin="org.eclipse.ui.workbench.texteditor"/>
-      <import plugin="org.eclipse.wst.common.frameworks.ui"/>
-      <import plugin="org.eclipse.wst.common.project.facet.ui"/>
-      <import plugin="org.eclipse.wst.sse.ui"/>
-      <import plugin="org.eclipse.wst.web.ui"/>
-   </requires>
-
-   <plugin
-         id="org.eclipse.jpt.utility"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.jpt.db"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.jpt.db.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.jpt.gen"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.jpt.core"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.jpt.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.jpt.doc.user"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/jpa/features/org.eclipse.jpt.feature/license.html b/jpa/features/org.eclipse.jpt.feature/license.html
deleted file mode 100644
index fc77372..0000000
--- a/jpa/features/org.eclipse.jpt.feature/license.html
+++ /dev/null
@@ -1,98 +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>June 06, 2007</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>
-  
-  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
-  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.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/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/build.properties b/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/build.properties
deleted file mode 100644
index 997dd3f..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/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
-###############################################################################
-bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
-feature.xml,\
-feature.properties,\
-license.html
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/eclipse_update_120.jpg b/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/epl-v10.html b/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index 022ad29..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/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>
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/feature.properties b/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/feature.properties
deleted file mode 100644
index 0c1da15..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/feature.properties
+++ /dev/null
@@ -1,145 +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) Tools
-
-# "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) Tools
-
-# "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\
-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/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/feature.xml b/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/feature.xml
deleted file mode 100644
index 12e267e..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/feature.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jpt.feature.source"
-      label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <plugin
-         id="org.eclipse.jpt.feature.source"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"/>
-
-</feature>
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/license.html b/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/license.html
deleted file mode 100644
index fec4a48..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<title>Eclipse.org Software User Agreement</title>
-</head>
-
-<body lang="EN-US" link=blue vlink=purple>
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>June 06, 2007</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.org CVS repository (&quot;Repository&quot;) in CVS
-   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 Eclipse Update Manager, 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>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>	
-	<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>
-  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
-  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.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>
-   
-<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
-</body>
-</html>
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.html b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.html
deleted file mode 100644
index d4916df..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.html
+++ /dev/null
@@ -1,27 +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>June 06, 2007</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content 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 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>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) 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.</p>
-
-<h3>Source Code</h3>
-<p>This plug-in contains source code zip files (&quot;Source Zips&quot;) that correspond to binary content in other plug-ins. These Source Zips may be distributed under different license
-agreements and/or notices. Details about these license agreements and notices are contained in &quot;about.html&quot; files (&quot;Abouts&quot;) located in sub-directories in the
-src/ directory of this plug-in. Such Abouts govern your use of the Source Zips in that directory, not the EPL.</p>
-
-</body>
-</html>
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.ini b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.ini
deleted file mode 100644
index 2dee36a..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.ini
+++ /dev/null
@@ -1,31 +0,0 @@
-# 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 (not 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
-
-
-
-
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.mappings b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.mappings
deleted file mode 100644
index a28390a..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/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@
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.properties b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.properties
deleted file mode 100644
index 5e52cb2..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/about.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - 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.
-#
-# Do not translate any values surrounded by {}
-
-blurb=JavaServer Faces Tooling Source\n\
-\n\
-Version: {featureVersion}\n\
-Build id: {0}\n\
-\n\
-(c) Copyright Eclipse contributors and others 2005.  All rights reserved.\n\
-Visit http://www.eclipse.org/webtools
-
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/build.properties b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/build.properties
deleted file mode 100644
index e3098b3..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-bin.includes =\
-               about.html,\
-               about.ini,\
-               about.mappings,\
-               about.properties,\
-               eclipse32.gif,\
-               plugin.properties,\
-               plugin.xml,\
-               src/**,\
-               META-INF/
-sourcePlugin = true
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/eclipse32.gif b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/eclipse32.gif
deleted file mode 100644
index e6ad7cc..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/eclipse32.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/eclipse32.png b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/eclipse32.png
deleted file mode 100644
index 50ae49d..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/eclipse32.png
+++ /dev/null
Binary files differ
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/eclipse_update_120.jpg b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/epl-v10.html b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/epl-v10.html
deleted file mode 100644
index 022ad29..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/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>
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/license.html b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/license.html
deleted file mode 100644
index 14b1d50..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/license.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<title>Eclipse.org Software User Agreement</title>
-</head>
-
-<body lang="EN-US" link=blue vlink=purple>
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>June 06, 2007</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.org CVS repository (&quot;Repository&quot;) in CVS
-   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 Eclipse Update Manager, 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>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>	
-	<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>
-  
-  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
-  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.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>
-   
-<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
-</body>
-</html>
diff --git a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/plugin.properties b/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/plugin.properties
deleted file mode 100644
index 088161f..0000000
--- a/jpa/features/org.eclipse.jpt.feature/sourceTemplatePlugin/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 API (JPA) Tools
-providerName = Eclipse.org
diff --git a/jpa/features/org.eclipse.jpt.tests.feature/.cvsignore b/jpa/features/org.eclipse.jpt.tests.feature/.cvsignore
new file mode 100644
index 0000000..c14487c
--- /dev/null
+++ b/jpa/features/org.eclipse.jpt.tests.feature/.cvsignore
@@ -0,0 +1 @@
+build.xml
diff --git a/jpa/features/org.eclipse.jpt.tests.feature/feature.xml b/jpa/features/org.eclipse.jpt.tests.feature/feature.xml
index 2034cac..d0d4b11 100644
--- a/jpa/features/org.eclipse.jpt.tests.feature/feature.xml
+++ b/jpa/features/org.eclipse.jpt.tests.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jpt.tests.feature"
       label="Dali Java Persistence API Tools (JPA) JUnit Tests"
-      version="1.0.0.qualifier"
+      version="2.0.0.qualifier"
       provider-name="Eclipse.org">
 
    <description>
@@ -29,4 +29,10 @@
          install-size="0"
          version="0.0.0" />
 
+   <plugin
+         id="testPlugin"
+         download-size="0"
+         install-size="0"
+         version="0.0.0" />
+
 </feature>
diff --git a/jpa/features/org.eclipse.jpt_sdk.feature/.project b/jpa/features/org.eclipse.jpt_sdk.feature/.project
deleted file mode 100644
index 33da750..0000000
--- a/jpa/features/org.eclipse.jpt_sdk.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt_sdk.feature</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/jpa/features/org.eclipse.jpt_sdk.feature/.settings/org.eclipse.core.resources.prefs b/jpa/features/org.eclipse.jpt_sdk.feature/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 6cc7d4b..0000000
--- a/jpa/features/org.eclipse.jpt_sdk.feature/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:09:59 EDT 2007
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/features/org.eclipse.jpt_sdk.feature/build.properties b/jpa/features/org.eclipse.jpt_sdk.feature/build.properties
deleted file mode 100644
index 28724c6..0000000
--- a/jpa/features/org.eclipse.jpt_sdk.feature/build.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-bin.includes = feature.xml,\
-               license.html,\
-               feature.properties,\
-               epl-v10.html,\
-               eclipse_update_120.jpg
-               
-src.includes = build.properties
-
-generate.feature@org.eclipse.jpt.feature.source=org.eclipse.jpt.feature
diff --git a/jpa/features/org.eclipse.jpt_sdk.feature/eclipse_update_120.jpg b/jpa/features/org.eclipse.jpt_sdk.feature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/jpa/features/org.eclipse.jpt_sdk.feature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/jpa/features/org.eclipse.jpt_sdk.feature/epl-v10.html b/jpa/features/org.eclipse.jpt_sdk.feature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/jpa/features/org.eclipse.jpt_sdk.feature/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/jpa/features/org.eclipse.jpt_sdk.feature/feature.properties b/jpa/features/org.eclipse.jpt_sdk.feature/feature.properties
deleted file mode 100644
index a14204a..0000000
--- a/jpa/features/org.eclipse.jpt_sdk.feature/feature.properties
+++ /dev/null
@@ -1,140 +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 API Tools Plug-in 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=Source code zips for JPA Tools
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006-07 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/jpa/features/org.eclipse.jpt_sdk.feature/feature.xml b/jpa/features/org.eclipse.jpt_sdk.feature/feature.xml
deleted file mode 100644
index 78f3de1..0000000
--- a/jpa/features/org.eclipse.jpt_sdk.feature/feature.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jpt_sdk.feature"
-      label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <includes
-         id="org.eclipse.jpt.feature"
-         version="0.0.0"/>
-
-   <includes
-         id="org.eclipse.jpt.feature.source"
-         version="0.0.0"/>
-
-</feature>
diff --git a/jpa/features/org.eclipse.jpt_sdk.feature/license.html b/jpa/features/org.eclipse.jpt_sdk.feature/license.html
deleted file mode 100644
index fc77372..0000000
--- a/jpa/features/org.eclipse.jpt_sdk.feature/license.html
+++ /dev/null
@@ -1,98 +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>June 06, 2007</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>
-  
-  <LI>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
-  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.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/jpa/plugins/org.eclipse.jpt.core/.cvsignore b/jpa/plugins/org.eclipse.jpt.core/.cvsignore
index 60463af..a196dd7 100644
--- a/jpa/plugins/org.eclipse.jpt.core/.cvsignore
+++ b/jpa/plugins/org.eclipse.jpt.core/.cvsignore
@@ -1,2 +1,6 @@
 bin
+@dot
+temp.folder
 build.xml
+javaCompiler...args
+javaCompiler...args.*
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF
index 3a5fa1a..60f0091 100644
--- a/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF
+++ b/jpa/plugins/org.eclipse.jpt.core/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.jpt.core;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 2.0.0.qualifier
 Bundle-Activator: org.eclipse.jpt.core.internal.JptCorePlugin
 Bundle-ClassPath: .
 Bundle-Localization: plugin
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/core.ecore b/jpa/plugins/org.eclipse.jpt.core/model/core.ecore
index eaf0f0e..9f78292 100644
--- a/jpa/plugins/org.eclipse.jpt.core/model/core.ecore
+++ b/jpa/plugins/org.eclipse.jpt.core/model/core.ecore
@@ -231,10 +231,21 @@
     </eClassifiers>
     <eClassifiers xsi:type="ecore:EClass" name="IColumn" abstract="true" interface="true"
         eSuperTypes="#//mappings/IAbstractColumn">
+      <eOperations name="getDefaultLength" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+      <eOperations name="getDefaultPrecision" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+      <eOperations name="getDefaultScale" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
       <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
-          defaultValueLiteral="255"/>
-      <eStructuralFeatures xsi:type="ecore:EAttribute" name="precision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eStructuralFeatures xsi:type="ecore:EAttribute" name="scale" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedLength" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="precision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedPrecision" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="scale" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedScale" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
     </eClassifiers>
     <eClassifiers xsi:type="ecore:EClass" name="IColumnMapping" abstract="true" interface="true">
       <eOperations name="getColumn" eType="#//mappings/IColumn"/>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/coreModels.genmodel b/jpa/plugins/org.eclipse.jpt.core/model/coreModels.genmodel
index 13b24dc..2298138 100644
--- a/jpa/plugins/org.eclipse.jpt.core/model/coreModels.genmodel
+++ b/jpa/plugins/org.eclipse.jpt.core/model/coreModels.genmodel
@@ -225,8 +225,14 @@
       </genClasses>
       <genClasses ecoreClass="core.ecore#//mappings/IColumn">
         <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/length"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/specifiedLength"/>
         <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/precision"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/specifiedPrecision"/>
         <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/scale"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute core.ecore#//mappings/IColumn/specifiedScale"/>
+        <genOperations ecoreOperation="core.ecore#//mappings/IColumn/getDefaultLength"/>
+        <genOperations ecoreOperation="core.ecore#//mappings/IColumn/getDefaultPrecision"/>
+        <genOperations ecoreOperation="core.ecore#//mappings/IColumn/getDefaultScale"/>
       </genClasses>
       <genClasses ecoreClass="core.ecore#//mappings/IColumnMapping">
         <genOperations ecoreOperation="core.ecore#//mappings/IColumnMapping/getColumn"/>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/jptResourceModels.genmodel b/jpa/plugins/org.eclipse.jpt.core/model/jptResourceModels.genmodel
new file mode 100644
index 0000000..cd94528
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/model/jptResourceModels.genmodel
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.jpt.core/src"
+    creationCommands="false" creationIcons="false" editDirectory="" editorDirectory=""
+    modelPluginID="org.eclipse.jpt.core" modelName="Core" editPluginClass="" editorPluginClass=""
+    suppressInterfaces="true" testsDirectory="" testSuiteClass="" importerID="org.eclipse.emf.importer.ecore"
+    complianceLevel="5.0" copyrightFields="false" usedGenPackages="platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore">
+  <foreignModel>persistence.ecore</foreignModel>
+  <genPackages prefix="Persistence" basePackage="org.eclipse.jpt.core.internal.resource"
+      disposableProviderFactory="true" ecorePackage="persistence.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="persistence.ecore#//PersistenceUnitTransactionType">
+      <genEnumLiterals ecoreEnumLiteral="persistence.ecore#//PersistenceUnitTransactionType/JTA"/>
+      <genEnumLiterals ecoreEnumLiteral="persistence.ecore#//PersistenceUnitTransactionType/RESOURCE_LOCAL"/>
+    </genEnums>
+    <genDataTypes ecoreDataType="persistence.ecore#//PersistenceUnitTransactionTypeObject"/>
+    <genDataTypes ecoreDataType="persistence.ecore#//Version"/>
+    <genClasses ecoreClass="persistence.ecore#//Persistence">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference persistence.ecore#//Persistence/persistenceUnits"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//Persistence/version"/>
+    </genClasses>
+    <genClasses ecoreClass="persistence.ecore#//PersistenceUnit">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//PersistenceUnit/description"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//PersistenceUnit/provider"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//PersistenceUnit/jtaDataSource"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//PersistenceUnit/nonJtaDataSource"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference persistence.ecore#//PersistenceUnit/mappingFiles"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//PersistenceUnit/jarFiles"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference persistence.ecore#//PersistenceUnit/classes"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//PersistenceUnit/excludeUnlistedClasses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference persistence.ecore#//PersistenceUnit/properties"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//PersistenceUnit/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//PersistenceUnit/transactionType"/>
+    </genClasses>
+    <genClasses ecoreClass="persistence.ecore#//MappingFileRef">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//MappingFileRef/fileName"/>
+    </genClasses>
+    <genClasses ecoreClass="persistence.ecore#//JavaClassRef">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//JavaClassRef/javaClass"/>
+    </genClasses>
+    <genClasses ecoreClass="persistence.ecore#//Properties">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference persistence.ecore#//Properties/properties"/>
+    </genClasses>
+    <genClasses ecoreClass="persistence.ecore#//Property">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//Property/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute persistence.ecore#//Property/value"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/old_core.ecore b/jpa/plugins/org.eclipse.jpt.core/model/old_core.ecore
new file mode 100644
index 0000000..9f78292
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/model/old_core.ecore
@@ -0,0 +1,588 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="internal"
+    nsURI="jpt.core.xmi" nsPrefix="jpt.core">
+  <eClassifiers xsi:type="ecore:EClass" name="IJpaModel" abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="JpaModel" eSuperTypes="#//JpaEObject #//IJpaModel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="projects" upperBound="-1"
+        eType="#//IJpaProject" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IJpaEObject" abstract="true" interface="true">
+    <eOperations name="getJpaProject" eType="#//IJpaProject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="JpaEObject" abstract="true" eSuperTypes="#//IJpaEObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IJpaProject" abstract="true" interface="true"
+      eSuperTypes="#//IJpaEObject">
+    <eOperations name="getModel" lowerBound="1" eType="#//IJpaModel"/>
+    <eOperations name="getPlatform" ordered="false" unique="false" lowerBound="1"
+        eType="#//IJpaPlatform"/>
+    <eOperations name="setPlatform">
+      <eParameters name="platformId" ordered="false" lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eOperations>
+    <eOperations name="getDataSource" lowerBound="1" eType="#//IJpaDataSource"/>
+    <eOperations name="setDataSource" ordered="false" unique="false" lowerBound="1">
+      <eParameters name="connectionProfileName" ordered="false" unique="false" lowerBound="1"
+          eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eOperations>
+    <eOperations name="isDiscoverAnnotatedClasses" lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+    <eOperations name="setDiscoverAnnotatedClasses" ordered="false" unique="false"
+        lowerBound="1">
+      <eParameters name="discoverAnnotatedClasses" ordered="false" unique="false"
+          lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+    </eOperations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="JpaProject" eSuperTypes="#//JpaEObject #//IJpaProject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="platform" ordered="false"
+        unique="false" lowerBound="1" eType="#//IJpaPlatform" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataSource" ordered="false"
+        unique="false" eType="#//IJpaDataSource" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="discoverAnnotatedClasses"
+        ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"
+        defaultValueLiteral="false" unsettable="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="files" upperBound="-1"
+        eType="#//IJpaFile" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IJpaPlatform" abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IJpaDataSource" abstract="true" interface="true"
+      eSuperTypes="#//IJpaEObject">
+    <eOperations name="getConnectionProfileName" ordered="false" unique="false" lowerBound="1"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="JpaDataSource" eSuperTypes="#//JpaEObject #//IJpaDataSource">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="connectionProfileName"
+        ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IJpaFile" abstract="true" interface="true"
+      eSuperTypes="#//IJpaEObject">
+    <eOperations name="getContentId" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eOperations name="getContent" eType="#//IJpaRootContentNode"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="JpaFile" eSuperTypes="#//JpaEObject #//IJpaFile">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="contentId" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="content" eType="#//IJpaRootContentNode"
+        containment="true" eOpposite="#//IJpaRootContentNode/jpaFile"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IJpaSourceObject" abstract="true" interface="true"
+      eSuperTypes="#//IJpaEObject">
+    <eOperations name="getJpaFile" eType="#//IJpaFile"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IXmlEObject" abstract="true" interface="true"
+      eSuperTypes="#//IJpaEObject #//IJpaSourceObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlEObject" abstract="true" eSuperTypes="#//JpaEObject #//IXmlEObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IJpaContentNode" abstract="true" interface="true"
+      eSuperTypes="#//IJpaSourceObject">
+    <eOperations name="getJpaFile" lowerBound="1" eType="#//IJpaFile"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IJpaRootContentNode" abstract="true"
+      interface="true" eSuperTypes="#//IJpaContentNode">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="jpaFile" eType="#//IJpaFile"
+        changeable="false" eOpposite="#//JpaFile/content"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IPersistentType" abstract="true" interface="true"
+      eSuperTypes="#//IJpaContentNode">
+    <eOperations name="getMapping" lowerBound="1" eType="#//ITypeMapping"/>
+    <eOperations name="parentPersistentType" eType="#//IPersistentType"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mappingKey" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ITypeMapping" abstract="true" interface="true"
+      eSuperTypes="#//IJpaSourceObject">
+    <eOperations name="getPersistentType" lowerBound="1" eType="#//IPersistentType"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        changeable="false" volatile="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="tableName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        changeable="false" volatile="true" derived="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NullTypeMapping" eSuperTypes="#//JpaEObject #//ITypeMapping #//IJpaSourceObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IPersistentAttribute" abstract="true"
+      interface="true" eSuperTypes="#//IJpaContentNode">
+    <eOperations name="typeMapping" lowerBound="1" eType="#//ITypeMapping"/>
+    <eOperations name="getName" lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eOperations name="mappingKey" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eOperations name="defaultMappingKey" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mapping" lowerBound="1"
+        eType="#//IAttributeMapping" changeable="false" volatile="true" transient="true"
+        derived="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IAttributeMapping" abstract="true" interface="true"
+      eSuperTypes="#//IJpaSourceObject">
+    <eOperations name="getPersistentAttribute" lowerBound="1" eType="#//IPersistentAttribute"/>
+    <eOperations name="isDefault" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="AccessType">
+    <eLiterals name="Default" literal="Default"/>
+    <eLiterals name="PROPERTY" value="1" literal="Property"/>
+    <eLiterals name="FIELD" value="2" literal="Field"/>
+  </eClassifiers>
+  <eSubpackages name="mappings" nsURI="jpt.core.mappings.xmi" nsPrefix="jpt.core.mappings">
+    <eClassifiers xsi:type="ecore:EClass" name="IMappedSuperclass" abstract="true"
+        interface="true" eSuperTypes="#//ITypeMapping">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="idClass" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IEntity" abstract="true" interface="true"
+        eSuperTypes="#//ITypeMapping">
+      <eOperations name="discriminatorValueIsAllowed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+      <eOperations name="getSecondaryTables" upperBound="-1" eType="#//mappings/ISecondaryTable"/>
+      <eOperations name="parentEntity" eType="#//mappings/IEntity"/>
+      <eOperations name="rootEntity" eType="#//mappings/IEntity"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="table" lowerBound="1"
+          eType="#//mappings/ITable" changeable="false" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedSecondaryTables"
+          upperBound="-1" eType="#//mappings/ISecondaryTable" containment="true" resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="primaryKeyJoinColumns"
+          upperBound="-1" eType="#//mappings/IPrimaryKeyJoinColumn" changeable="false"
+          volatile="true" transient="true" containment="true" resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedPrimaryKeyJoinColumns"
+          upperBound="-1" eType="#//mappings/IPrimaryKeyJoinColumn" containment="true"
+          resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultPrimaryKeyJoinColumns"
+          upperBound="-1" eType="#//mappings/IPrimaryKeyJoinColumn" containment="true"
+          resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="inheritanceStrategy"
+          eType="#//mappings/InheritanceType"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultDiscriminatorValue"
+          eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedDiscriminatorValue"
+          eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="discriminatorValue" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"
+          changeable="false" volatile="true" transient="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="discriminatorColumn"
+          eType="#//mappings/IDiscriminatorColumn" changeable="false" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="sequenceGenerator" eType="#//mappings/ISequenceGenerator"
+          containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="tableGenerator" eType="#//mappings/ITableGenerator"
+          containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="attributeOverrides" upperBound="-1"
+          eType="#//mappings/IAttributeOverride" changeable="false" volatile="true"
+          transient="true" containment="true" resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedAttributeOverrides"
+          upperBound="-1" eType="#//mappings/IAttributeOverride" containment="true"
+          resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultAttributeOverrides"
+          upperBound="-1" eType="#//mappings/IAttributeOverride" containment="true"
+          resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="associationOverrides"
+          upperBound="-1" eType="#//mappings/IAssociationOverride" changeable="false"
+          volatile="true" transient="true" containment="true" resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedAssociationOverrides"
+          upperBound="-1" eType="#//mappings/IAssociationOverride" containment="true"
+          resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultAssociationOverrides"
+          upperBound="-1" eType="#//mappings/IAssociationOverride" containment="true"
+          resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="namedQueries" upperBound="-1"
+          eType="#//mappings/INamedQuery" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="namedNativeQueries" upperBound="-1"
+          eType="#//mappings/INamedNativeQuery" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="idClass" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IEmbeddable" abstract="true" interface="true"
+        eSuperTypes="#//ITypeMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="ITable" abstract="true" interface="true"
+        eSuperTypes="#//IJpaSourceObject">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="catalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedCatalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultCatalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="schema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedSchema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultSchema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="uniqueConstraints" upperBound="-1"
+          eType="#//mappings/IUniqueConstraint" containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IUniqueConstraint" abstract="true"
+        interface="true" eSuperTypes="#//IJpaSourceObject">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="columnNames" unique="false"
+          upperBound="-1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="INamedColumn" abstract="true" interface="true"
+        eSuperTypes="#//IJpaSourceObject">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="columnDefinition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IAbstractColumn" abstract="true" interface="true"
+        eSuperTypes="#//mappings/INamedColumn">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="unique" eType="#//mappings/DefaultFalseBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="nullable" eType="#//mappings/DefaultTrueBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="insertable" eType="#//mappings/DefaultTrueBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="updatable" eType="#//mappings/DefaultTrueBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="table" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedTable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultTable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IColumn" abstract="true" interface="true"
+        eSuperTypes="#//mappings/IAbstractColumn">
+      <eOperations name="getDefaultLength" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+      <eOperations name="getDefaultPrecision" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+      <eOperations name="getDefaultScale" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedLength" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="precision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedPrecision" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="scale" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedScale" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IColumnMapping" abstract="true" interface="true">
+      <eOperations name="getColumn" eType="#//mappings/IColumn"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IBasic" abstract="true" interface="true"
+        eSuperTypes="#//IAttributeMapping #//mappings/IColumnMapping">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="fetch" eType="#//mappings/DefaultEagerFetchType"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="#//mappings/DefaultTrueBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="column" lowerBound="1"
+          eType="#//mappings/IColumn" changeable="false" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="lob" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="temporal" eType="#//mappings/TemporalType"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="enumerated" eType="#//mappings/EnumType"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IId" abstract="true" interface="true"
+        eSuperTypes="#//IAttributeMapping #//mappings/IColumnMapping">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="column" lowerBound="1"
+          eType="#//mappings/IColumn" changeable="false" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="generatedValue" eType="#//mappings/IGeneratedValue"
+          containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="temporal" eType="#//mappings/TemporalType"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="tableGenerator" eType="#//mappings/ITableGenerator"
+          containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="sequenceGenerator" eType="#//mappings/ISequenceGenerator"
+          containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ITransient" abstract="true" interface="true"
+        eSuperTypes="#//IAttributeMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IVersion" abstract="true" interface="true"
+        eSuperTypes="#//IAttributeMapping #//mappings/IColumnMapping">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="column" lowerBound="1"
+          eType="#//mappings/IColumn" changeable="false" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="temporal" eType="#//mappings/TemporalType"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IEmbeddedId" abstract="true" interface="true"
+        eSuperTypes="#//IAttributeMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IEmbedded" abstract="true" interface="true"
+        eSuperTypes="#//IAttributeMapping">
+      <eOperations name="embeddable" eType="#//mappings/IEmbeddable"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="attributeOverrides" upperBound="-1"
+          eType="#//mappings/IAttributeOverride" changeable="false" volatile="true"
+          transient="true" containment="true" resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedAttributeOverrides"
+          upperBound="-1" eType="#//mappings/IAttributeOverride" containment="true"
+          resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultAttributeOverrides"
+          upperBound="-1" eType="#//mappings/IAttributeOverride" containment="true"
+          resolveProxies="false"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IRelationshipMapping" abstract="true"
+        interface="true" eSuperTypes="#//IAttributeMapping">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="targetEntity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedTargetEntity"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultTargetEntity"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="resolvedTargetEntity"
+          eType="#//mappings/IEntity"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="cascade" eType="#//mappings/ICascade"
+          containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="INonOwningMapping" abstract="true"
+        interface="true" eSuperTypes="#//mappings/IRelationshipMapping">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="mappedBy" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IMultiRelationshipMapping" abstract="true"
+        interface="true" eSuperTypes="#//mappings/INonOwningMapping">
+      <eOperations name="isNoOrdering" ordered="false" unique="false" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+      <eOperations name="setNoOrdering" ordered="false" unique="false"/>
+      <eOperations name="isOrderByPk" ordered="false" unique="false" lowerBound="1"
+          eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+      <eOperations name="setOrderByPk" ordered="false" unique="false"/>
+      <eOperations name="isCustomOrdering" ordered="false" unique="false" lowerBound="1"
+          eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="orderBy" ordered="false"
+          unique="false" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="fetch" eType="#//mappings/DefaultLazyFetchType"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="joinTable" lowerBound="1"
+          eType="#//mappings/IJoinTable" changeable="false" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="mapKey" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IOneToMany" abstract="true" interface="true"
+        eSuperTypes="#//mappings/IMultiRelationshipMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IManyToMany" abstract="true" interface="true"
+        eSuperTypes="#//mappings/IMultiRelationshipMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="ISingleRelationshipMapping" abstract="true"
+        interface="true" eSuperTypes="#//mappings/IRelationshipMapping">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="fetch" eType="#//mappings/DefaultEagerFetchType"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="joinColumns" upperBound="-1"
+          eType="#//mappings/IJoinColumn" changeable="false" volatile="true" transient="true"
+          containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedJoinColumns"
+          upperBound="-1" eType="#//mappings/IJoinColumn" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultJoinColumns" upperBound="-1"
+          eType="#//mappings/IJoinColumn" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="#//mappings/DefaultTrueBoolean"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IManyToOne" abstract="true" interface="true"
+        eSuperTypes="#//mappings/ISingleRelationshipMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IOneToOne" abstract="true" interface="true"
+        eSuperTypes="#//mappings/ISingleRelationshipMapping #//mappings/INonOwningMapping"/>
+    <eClassifiers xsi:type="ecore:EEnum" name="DefaultEagerFetchType">
+      <eLiterals name="Default" literal="Default (Eager)"/>
+      <eLiterals name="EAGER" value="1" literal="Eager"/>
+      <eLiterals name="LAZY" value="2" literal="Lazy"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="DefaultLazyFetchType">
+      <eLiterals name="Default" literal="Default (Lazy)"/>
+      <eLiterals name="LAZY" value="1" literal="Lazy"/>
+      <eLiterals name="EAGER" value="2" literal="Eager"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="DefaultFalseBoolean">
+      <eLiterals name="Default" literal="Default (False)"/>
+      <eLiterals name="false" value="1" literal="False"/>
+      <eLiterals name="true" value="2" literal="True"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="DefaultTrueBoolean">
+      <eLiterals name="Default" literal="Default (True)"/>
+      <eLiterals name="true" value="1" literal="True"/>
+      <eLiterals name="false" value="2" literal="False"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="TemporalType">
+      <eLiterals name="Null" literal=""/>
+      <eLiterals name="DATE" value="1" literal="Date"/>
+      <eLiterals name="TIME" value="2" literal="Time"/>
+      <eLiterals name="TIMESTAMP" value="3" literal="Timestamp"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IJoinTable" abstract="true" interface="true"
+        eSuperTypes="#//mappings/ITable">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="joinColumns" upperBound="-1"
+          eType="#//mappings/IJoinColumn" changeable="false" volatile="true" transient="true"
+          containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedJoinColumns"
+          upperBound="-1" eType="#//mappings/IJoinColumn" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultJoinColumns" upperBound="-1"
+          eType="#//mappings/IJoinColumn" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="inverseJoinColumns" upperBound="-1"
+          eType="#//mappings/IJoinColumn" changeable="false" volatile="true" transient="true"
+          containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedInverseJoinColumns"
+          upperBound="-1" eType="#//mappings/IJoinColumn" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultInverseJoinColumns"
+          upperBound="-1" eType="#//mappings/IJoinColumn" containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IAbstractJoinColumn" abstract="true"
+        interface="true" eSuperTypes="#//mappings/INamedColumn">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="referencedColumnName"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedReferencedColumnName"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultReferencedColumnName"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IJoinColumn" abstract="true" interface="true"
+        eSuperTypes="#//mappings/IAbstractColumn #//mappings/IAbstractJoinColumn"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IOverride" abstract="true" interface="true"
+        eSuperTypes="#//IJpaSourceObject">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IAttributeOverride" abstract="true"
+        interface="true" eSuperTypes="#//mappings/IOverride #//mappings/IColumnMapping">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="column" lowerBound="1"
+          eType="#//mappings/IColumn" changeable="false" containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IAssociationOverride" abstract="true"
+        interface="true" eSuperTypes="#//mappings/IOverride">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="joinColumns" upperBound="-1"
+          eType="#//mappings/IJoinColumn" changeable="false" volatile="true" transient="true"
+          containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedJoinColumns"
+          upperBound="-1" eType="#//mappings/IJoinColumn" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultJoinColumns" upperBound="-1"
+          eType="#//mappings/IJoinColumn" containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IDiscriminatorColumn" abstract="true"
+        interface="true" eSuperTypes="#//mappings/INamedColumn">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="discriminatorType" eType="#//mappings/DiscriminatorType"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultLength" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="31"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedLength" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          changeable="false" volatile="true" transient="true" derived="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="InheritanceType">
+      <eLiterals name="Default" literal="Default (Single Table)"/>
+      <eLiterals name="SINGLE_TABLE" value="1" literal="Single Table"/>
+      <eLiterals name="JOINED" value="2" literal="Joined"/>
+      <eLiterals name="TABLE_PER_CLASS" value="3" literal="Table per Class"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="DiscriminatorType">
+      <eLiterals name="Default" literal="Default (String)"/>
+      <eLiterals name="STRING" value="1" literal="String"/>
+      <eLiterals name="CHAR" value="2" literal="Char"/>
+      <eLiterals name="INTEGER" value="3" literal="Integer"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ISecondaryTable" abstract="true" interface="true"
+        eSuperTypes="#//mappings/ITable">
+      <eOperations name="typeMapping" eType="#//ITypeMapping"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="primaryKeyJoinColumns"
+          upperBound="-1" eType="#//mappings/IPrimaryKeyJoinColumn" changeable="false"
+          volatile="true" transient="true" containment="true" resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedPrimaryKeyJoinColumns"
+          upperBound="-1" eType="#//mappings/IPrimaryKeyJoinColumn" containment="true"
+          resolveProxies="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultPrimaryKeyJoinColumns"
+          upperBound="-1" eType="#//mappings/IPrimaryKeyJoinColumn" containment="true"
+          resolveProxies="false"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IPrimaryKeyJoinColumn" abstract="true"
+        interface="true" eSuperTypes="#//mappings/IAbstractJoinColumn"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IGenerator" abstract="true" interface="true"
+        eSuperTypes="#//IJpaSourceObject">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="initialValue" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedInitialValue"
+          eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultInitialValue"
+          eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="allocationSize" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedAllocationSize"
+          eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          defaultValueLiteral="-1"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultAllocationSize"
+          eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+          changeable="false"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ITableGenerator" abstract="true" interface="true"
+        eSuperTypes="#//mappings/IGenerator">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="table" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedTable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultTable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="catalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedCatalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultCatalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="schema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedSchema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultSchema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="pkColumnName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedPkColumnName"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultPkColumnName"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="valueColumnName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedValueColumnName"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValueColumnName"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="pkColumnValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedPkColumnValue"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultPkColumnValue"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="uniqueConstraints" upperBound="-1"
+          eType="#//mappings/IUniqueConstraint" containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ISequenceGenerator" abstract="true"
+        interface="true" eSuperTypes="#//mappings/IGenerator">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="sequenceName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false" volatile="true" derived="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedSequenceName"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultSequenceName"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          changeable="false"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IGeneratedValue" abstract="true" interface="true"
+        eSuperTypes="#//IJpaSourceObject">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="strategy" eType="#//mappings/GenerationType"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="generator" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="GenerationType">
+      <eLiterals name="Default" literal="Default (Auto)"/>
+      <eLiterals name="AUTO" value="1" literal="Auto"/>
+      <eLiterals name="IDENTITY" value="2" literal="Identity"/>
+      <eLiterals name="SEQUENCE" value="3" literal="Sequence"/>
+      <eLiterals name="TABLE" value="4" literal="Table"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="EnumType">
+      <eLiterals name="Default" literal="Default (Ordinal)"/>
+      <eLiterals name="ORDINAL" value="1" literal="Ordinal"/>
+      <eLiterals name="STRING" value="2" literal="String"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IQuery" abstract="true" interface="true"
+        eSuperTypes="#//IJpaSourceObject">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="query" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="hints" upperBound="-1"
+          eType="#//mappings/IQueryHint" containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="INamedQuery" abstract="true" interface="true"
+        eSuperTypes="#//IJpaSourceObject #//mappings/IQuery"/>
+    <eClassifiers xsi:type="ecore:EClass" name="INamedNativeQuery" abstract="true"
+        interface="true" eSuperTypes="#//IJpaSourceObject #//mappings/IQuery">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="resultClass" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="resultSetMapping" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IQueryHint" abstract="true" interface="true"
+        eSuperTypes="#//IJpaSourceObject">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="CascadeType">
+      <eLiterals name="ALL" literal="All"/>
+      <eLiterals name="PERSIST" value="1" literal="Persist"/>
+      <eLiterals name="MERGE" value="2" literal="Merge"/>
+      <eLiterals name="REMOVE" value="3" literal="Remove"/>
+      <eLiterals name="REFRESH" value="4" literal="Refresh"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ICascade" abstract="true" interface="true"
+        eSuperTypes="#//IJpaSourceObject">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="all" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="persist" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="merge" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="remove" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="refresh" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+    </eClassifiers>
+  </eSubpackages>
+</ecore:EPackage>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/old_coreModels.genmodel b/jpa/plugins/org.eclipse.jpt.core/model/old_coreModels.genmodel
new file mode 100644
index 0000000..abf3828
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/model/old_coreModels.genmodel
@@ -0,0 +1,710 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.jpt.core/src"
+    creationCommands="false" creationIcons="false" editDirectory="" editorDirectory=""
+    modelPluginID="org.eclipse.jpt.core" modelName="Core" editPluginClass="" editorPluginClass=""
+    suppressInterfaces="true" codeFormatting="true" testsDirectory="" testSuiteClass=""
+    importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0" copyrightFields="false"
+    usedGenPackages="platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore">
+  <foreignModel>old_core.ecore</foreignModel>
+  <foreignModel>old_java.ecore</foreignModel>
+  <foreignModel>old_orm.ecore</foreignModel>
+  <foreignModel>old_persistence.ecore</foreignModel>
+  <genPackages prefix="JpaCore" basePackage="org.eclipse.jpt.core" disposableProviderFactory="true"
+      ecorePackage="old_core.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//AccessType">
+      <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//AccessType/Default"/>
+      <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//AccessType/PROPERTY"/>
+      <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//AccessType/FIELD"/>
+    </genEnums>
+    <genClasses ecoreClass="old_core.ecore#//IJpaModel"/>
+    <genClasses ecoreClass="old_core.ecore#//JpaModel">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//JpaModel/projects"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//IJpaEObject">
+      <genOperations ecoreOperation="old_core.ecore#//IJpaEObject/getJpaProject"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="old_core.ecore#//JpaEObject"/>
+    <genClasses ecoreClass="old_core.ecore#//IJpaProject">
+      <genOperations ecoreOperation="old_core.ecore#//IJpaProject/getModel"/>
+      <genOperations ecoreOperation="old_core.ecore#//IJpaProject/getPlatform"/>
+      <genOperations ecoreOperation="old_core.ecore#//IJpaProject/setPlatform">
+        <genParameters ecoreParameter="old_core.ecore#//IJpaProject/setPlatform/platformId"/>
+      </genOperations>
+      <genOperations ecoreOperation="old_core.ecore#//IJpaProject/getDataSource"/>
+      <genOperations ecoreOperation="old_core.ecore#//IJpaProject/setDataSource">
+        <genParameters ecoreParameter="old_core.ecore#//IJpaProject/setDataSource/connectionProfileName"/>
+      </genOperations>
+      <genOperations ecoreOperation="old_core.ecore#//IJpaProject/isDiscoverAnnotatedClasses"/>
+      <genOperations ecoreOperation="old_core.ecore#//IJpaProject/setDiscoverAnnotatedClasses">
+        <genParameters ecoreParameter="old_core.ecore#//IJpaProject/setDiscoverAnnotatedClasses/discoverAnnotatedClasses"/>
+      </genOperations>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//JpaProject">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_core.ecore#//JpaProject/platform"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//JpaProject/dataSource"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//JpaProject/discoverAnnotatedClasses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//JpaProject/files"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//IJpaPlatform"/>
+    <genClasses ecoreClass="old_core.ecore#//IJpaDataSource">
+      <genOperations ecoreOperation="old_core.ecore#//IJpaDataSource/getConnectionProfileName"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//JpaDataSource">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//JpaDataSource/connectionProfileName"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//IJpaFile">
+      <genOperations ecoreOperation="old_core.ecore#//IJpaFile/getContentId"/>
+      <genOperations ecoreOperation="old_core.ecore#//IJpaFile/getContent"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//JpaFile">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//JpaFile/contentId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//JpaFile/content"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//IJpaSourceObject">
+      <genOperations ecoreOperation="old_core.ecore#//IJpaSourceObject/getJpaFile"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="old_core.ecore#//IXmlEObject"/>
+    <genClasses image="false" ecoreClass="old_core.ecore#//XmlEObject"/>
+    <genClasses ecoreClass="old_core.ecore#//IJpaContentNode">
+      <genOperations ecoreOperation="old_core.ecore#//IJpaContentNode/getJpaFile"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//IJpaRootContentNode">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_core.ecore#//IJpaRootContentNode/jpaFile"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//IPersistentType">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//IPersistentType/mappingKey"/>
+      <genOperations ecoreOperation="old_core.ecore#//IPersistentType/getMapping"/>
+      <genOperations ecoreOperation="old_core.ecore#//IPersistentType/parentPersistentType"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//ITypeMapping">
+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//ITypeMapping/name"/>
+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//ITypeMapping/tableName"/>
+      <genOperations ecoreOperation="old_core.ecore#//ITypeMapping/getPersistentType"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//NullTypeMapping"/>
+    <genClasses ecoreClass="old_core.ecore#//IPersistentAttribute">
+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//IPersistentAttribute/mapping"/>
+      <genOperations ecoreOperation="old_core.ecore#//IPersistentAttribute/typeMapping"/>
+      <genOperations ecoreOperation="old_core.ecore#//IPersistentAttribute/getName"/>
+      <genOperations ecoreOperation="old_core.ecore#//IPersistentAttribute/mappingKey"/>
+      <genOperations ecoreOperation="old_core.ecore#//IPersistentAttribute/defaultMappingKey"/>
+    </genClasses>
+    <genClasses ecoreClass="old_core.ecore#//IAttributeMapping">
+      <genOperations ecoreOperation="old_core.ecore#//IAttributeMapping/getPersistentAttribute"/>
+      <genOperations ecoreOperation="old_core.ecore#//IAttributeMapping/isDefault"/>
+    </genClasses>
+    <nestedGenPackages prefix="JpaCoreMappings" basePackage="org.eclipse.jpt.core.internal"
+        disposableProviderFactory="true" ecorePackage="old_core.ecore#//mappings">
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/DefaultEagerFetchType">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultEagerFetchType/Default"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultEagerFetchType/EAGER"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultEagerFetchType/LAZY"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/DefaultLazyFetchType">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultLazyFetchType/Default"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultLazyFetchType/LAZY"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultLazyFetchType/EAGER"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/DefaultFalseBoolean">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultFalseBoolean/Default"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultFalseBoolean/false"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultFalseBoolean/true"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/DefaultTrueBoolean">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultTrueBoolean/Default"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultTrueBoolean/true"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DefaultTrueBoolean/false"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/TemporalType">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/TemporalType/Null"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/TemporalType/DATE"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/TemporalType/TIME"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/TemporalType/TIMESTAMP"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/InheritanceType">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/InheritanceType/Default"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/InheritanceType/SINGLE_TABLE"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/InheritanceType/JOINED"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/InheritanceType/TABLE_PER_CLASS"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/DiscriminatorType">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DiscriminatorType/Default"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DiscriminatorType/STRING"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DiscriminatorType/CHAR"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/DiscriminatorType/INTEGER"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/GenerationType">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/GenerationType/Default"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/GenerationType/AUTO"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/GenerationType/IDENTITY"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/GenerationType/SEQUENCE"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/GenerationType/TABLE"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/EnumType">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/EnumType/Default"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/EnumType/ORDINAL"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/EnumType/STRING"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_core.ecore#//mappings/CascadeType">
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/CascadeType/ALL"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/CascadeType/PERSIST"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/CascadeType/MERGE"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/CascadeType/REMOVE"/>
+        <genEnumLiterals ecoreEnumLiteral="old_core.ecore#//mappings/CascadeType/REFRESH"/>
+      </genEnums>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IMappedSuperclass">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IMappedSuperclass/idClass"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IEntity">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IEntity/specifiedName"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IEntity/defaultName"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/table"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/specifiedSecondaryTables"/>
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/primaryKeyJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/specifiedPrimaryKeyJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/defaultPrimaryKeyJoinColumns"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IEntity/inheritanceStrategy"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IEntity/defaultDiscriminatorValue"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IEntity/specifiedDiscriminatorValue"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IEntity/discriminatorValue"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/discriminatorColumn"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/sequenceGenerator"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/tableGenerator"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/attributeOverrides"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/specifiedAttributeOverrides"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/defaultAttributeOverrides"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/associationOverrides"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/specifiedAssociationOverrides"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/defaultAssociationOverrides"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/namedQueries"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEntity/namedNativeQueries"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IEntity/idClass"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IEntity/discriminatorValueIsAllowed"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IEntity/getSecondaryTables"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IEntity/parentEntity"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IEntity/rootEntity"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IEmbeddable"/>
+      <genClasses ecoreClass="old_core.ecore#//mappings/ITable">
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITable/name"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITable/specifiedName"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITable/defaultName"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITable/catalog"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITable/specifiedCatalog"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITable/defaultCatalog"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITable/schema"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITable/specifiedSchema"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITable/defaultSchema"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/ITable/uniqueConstraints"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IUniqueConstraint">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IUniqueConstraint/columnNames"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/INamedColumn">
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/INamedColumn/name"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/INamedColumn/specifiedName"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/INamedColumn/defaultName"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/INamedColumn/columnDefinition"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IAbstractColumn">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractColumn/unique"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractColumn/nullable"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractColumn/insertable"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractColumn/updatable"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractColumn/table"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractColumn/specifiedTable"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractColumn/defaultTable"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IColumn">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IColumn/length"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IColumn/specifiedLength"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IColumn/precision"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IColumn/specifiedPrecision"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IColumn/scale"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IColumn/specifiedScale"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IColumn/getDefaultLength"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IColumn/getDefaultPrecision"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IColumn/getDefaultScale"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IColumnMapping">
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IColumnMapping/getColumn"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IBasic">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IBasic/fetch"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IBasic/optional"/>
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IBasic/column"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IBasic/lob"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IBasic/temporal"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IBasic/enumerated"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IId">
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IId/column"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IId/generatedValue"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IId/temporal"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IId/tableGenerator"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IId/sequenceGenerator"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/ITransient"/>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IVersion">
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IVersion/column"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IVersion/temporal"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IEmbeddedId"/>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IEmbedded">
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEmbedded/attributeOverrides"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEmbedded/specifiedAttributeOverrides"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IEmbedded/defaultAttributeOverrides"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IEmbedded/embeddable"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IRelationshipMapping">
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IRelationshipMapping/targetEntity"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IRelationshipMapping/specifiedTargetEntity"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IRelationshipMapping/defaultTargetEntity"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference old_core.ecore#//mappings/IRelationshipMapping/resolvedTargetEntity"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IRelationshipMapping/cascade"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/INonOwningMapping">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/INonOwningMapping/mappedBy"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IMultiRelationshipMapping">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IMultiRelationshipMapping/orderBy"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IMultiRelationshipMapping/fetch"/>
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IMultiRelationshipMapping/joinTable"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IMultiRelationshipMapping/mapKey"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IMultiRelationshipMapping/isNoOrdering"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IMultiRelationshipMapping/setNoOrdering"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IMultiRelationshipMapping/isOrderByPk"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IMultiRelationshipMapping/setOrderByPk"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/IMultiRelationshipMapping/isCustomOrdering"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IOneToMany"/>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IManyToMany"/>
+      <genClasses ecoreClass="old_core.ecore#//mappings/ISingleRelationshipMapping">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ISingleRelationshipMapping/fetch"/>
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/ISingleRelationshipMapping/joinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/ISingleRelationshipMapping/specifiedJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/ISingleRelationshipMapping/defaultJoinColumns"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ISingleRelationshipMapping/optional"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IManyToOne"/>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IOneToOne"/>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IJoinTable">
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IJoinTable/joinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IJoinTable/specifiedJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IJoinTable/defaultJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IJoinTable/inverseJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IJoinTable/specifiedInverseJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IJoinTable/defaultInverseJoinColumns"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IAbstractJoinColumn">
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractJoinColumn/referencedColumnName"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractJoinColumn/specifiedReferencedColumnName"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IAbstractJoinColumn/defaultReferencedColumnName"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IJoinColumn"/>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IOverride">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IOverride/name"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IAttributeOverride">
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IAttributeOverride/column"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IAssociationOverride">
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IAssociationOverride/joinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IAssociationOverride/specifiedJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IAssociationOverride/defaultJoinColumns"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/IDiscriminatorColumn">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IDiscriminatorColumn/discriminatorType"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IDiscriminatorColumn/defaultLength"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IDiscriminatorColumn/specifiedLength"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IDiscriminatorColumn/length"/>
+      </genClasses>
+      <genClasses ecoreClass="old_core.ecore#//mappings/ISecondaryTable">
+        <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_core.ecore#//mappings/ISecondaryTable/primaryKeyJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/ISecondaryTable/specifiedPrimaryKeyJoinColumns"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/ISecondaryTable/defaultPrimaryKeyJoinColumns"/>
+        <genOperations ecoreOperation="old_core.ecore#//mappings/ISecondaryTable/typeMapping"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IPrimaryKeyJoinColumn"/>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IGenerator">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IGenerator/name"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IGenerator/initialValue"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IGenerator/specifiedInitialValue"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IGenerator/defaultInitialValue"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IGenerator/allocationSize"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IGenerator/specifiedAllocationSize"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IGenerator/defaultAllocationSize"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/ITableGenerator">
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/table"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/specifiedTable"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/defaultTable"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/catalog"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/specifiedCatalog"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/defaultCatalog"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/schema"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/specifiedSchema"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/defaultSchema"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/pkColumnName"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/specifiedPkColumnName"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/defaultPkColumnName"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/valueColumnName"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/specifiedValueColumnName"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/defaultValueColumnName"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/pkColumnValue"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/specifiedPkColumnValue"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ITableGenerator/defaultPkColumnValue"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/ITableGenerator/uniqueConstraints"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/ISequenceGenerator">
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ISequenceGenerator/sequenceName"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ISequenceGenerator/specifiedSequenceName"/>
+        <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ISequenceGenerator/defaultSequenceName"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IGeneratedValue">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IGeneratedValue/strategy"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IGeneratedValue/generator"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IQuery">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IQuery/name"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IQuery/query"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_core.ecore#//mappings/IQuery/hints"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/INamedQuery"/>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/INamedNativeQuery">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/INamedNativeQuery/resultClass"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/INamedNativeQuery/resultSetMapping"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/IQueryHint">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IQueryHint/name"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/IQueryHint/value"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="old_core.ecore#//mappings/ICascade">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ICascade/all"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ICascade/persist"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ICascade/merge"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ICascade/remove"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_core.ecore#//mappings/ICascade/refresh"/>
+      </genClasses>
+    </nestedGenPackages>
+  </genPackages>
+  <genPackages prefix="JpaJava" basePackage="org.eclipse.jpt.core.internal.content"
+      disposableProviderFactory="true" ecorePackage="old_java.ecore#/">
+    <genClasses image="false" ecoreClass="old_java.ecore#//JavaEObject">
+      <genOperations ecoreOperation="old_java.ecore#//JavaEObject/getJpaFile"/>
+      <genOperations ecoreOperation="old_java.ecore#//JavaEObject/getRoot"/>
+    </genClasses>
+    <genClasses ecoreClass="old_java.ecore#//JpaCompilationUnit">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_java.ecore#//JpaCompilationUnit/types"/>
+    </genClasses>
+    <genClasses ecoreClass="old_java.ecore#//JavaPersistentType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_java.ecore#//JavaPersistentType/mapping"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_java.ecore#//JavaPersistentType/attributes"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_java.ecore#//JavaPersistentType/access"/>
+    </genClasses>
+    <genClasses ecoreClass="old_java.ecore#//JavaPersistentAttribute">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_java.ecore#//JavaPersistentAttribute/defaultMapping"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_java.ecore#//JavaPersistentAttribute/specifiedMapping"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="old_java.ecore#//IJavaTypeMapping"/>
+    <genClasses image="false" ecoreClass="old_java.ecore#//IJavaAttributeMapping"/>
+    <nestedGenPackages prefix="JpaJavaMappings" basePackage="org.eclipse.jpt.core.internal.content.java"
+        disposableProviderFactory="true" ecorePackage="old_java.ecore#//mappings">
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaEntity"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaEmbeddable"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaMappedSuperclass"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaBasic"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaEmbedded"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaEmbeddedId"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaId"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaManyToMany"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaManyToOne"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaOneToMany"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaOneToOne"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaTransient"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/IJavaVersion"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/JavaTypeMapping"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaEntity"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaMappedSuperclass"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaEmbeddable"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaNullTypeMapping"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/JavaAttributeMapping"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaBasic"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaId"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaTransient"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaVersion"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaEmbeddedId"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaEmbedded"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/JavaRelationshipMapping"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/JavaSingleRelationshipMapping"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaManyToOne"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaOneToOne"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/JavaMultiRelationshipMapping"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaOneToMany"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaManyToMany"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaNullAttributeMapping"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/AbstractJavaTable"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaTable"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaSecondaryTable"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaJoinTable"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/JavaNamedColumn"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/AbstractJavaColumn"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaColumn"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaJoinColumn"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaOverride"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaAttributeOverride"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaAssociationOverride"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaDiscriminatorColumn"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaPrimaryKeyJoinColumn"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaGeneratedValue"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaGenerator"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaTableGenerator"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaSequenceGenerator"/>
+      <genClasses image="false" ecoreClass="old_java.ecore#//mappings/JavaAbstractQuery"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaNamedQuery"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaNamedNativeQuery"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaQueryHint"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaUniqueConstraint"/>
+      <genClasses ecoreClass="old_java.ecore#//mappings/JavaCascade"/>
+    </nestedGenPackages>
+  </genPackages>
+  <genPackages prefix="Orm" basePackage="org.eclipse.jpt.core.internal.content" disposableProviderFactory="true"
+      ecorePackage="old_orm.ecore#/">
+    <genClasses ecoreClass="old_orm.ecore#//XmlRootContentNode">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlRootContentNode/entityMappings"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//EntityMappingsInternal">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappingsInternal/root"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/version"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/description"/>
+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappingsInternal/persistenceUnitMetadataInternal"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/packageInternal"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/defaultSchema"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/specifiedSchema"/>
+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/schema"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/defaultCatalog"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/specifiedCatalog"/>
+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/catalog"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/defaultAccess"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/specifiedAccess"/>
+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsInternal/access"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappingsInternal/typeMappings"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappingsInternal/persistentTypes"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappingsInternal/sequenceGenerators"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappingsInternal/tableGenerators"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappingsInternal/namedQueries"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappingsInternal/namedNativeQueries"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//EntityMappings">
+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappings/persistenceUnitMetadata"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappings/package"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//EntityMappingsForXml">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//EntityMappingsForXml/persistenceUnitMetadataForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//EntityMappingsForXml/packageForXml"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//XmlTypeMapping">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlTypeMapping/defaultAccess"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlTypeMapping/specifiedAccess"/>
+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlTypeMapping/access"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlTypeMapping/metadataComplete"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlTypeMapping/persistentType"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlPersistentType">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlPersistentType/class"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlPersistentType/attributeMappings"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlPersistentType/specifiedAttributeMappings"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlPersistentType/virtualAttributeMappings"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlPersistentType/persistentAttributes"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlPersistentType/specifiedPersistentAttributes"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlPersistentType/virtualPersistentAttributes"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlMappedSuperclass">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlMappedSuperclass/idClassForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlEntityInternal"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlEntityForXml">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlEntityForXml/tableForXml"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlEntityForXml/discriminatorColumnForXml"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlEntityForXml/idClassForXml"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlEntityForXml/inheritanceForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlEntity">
+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_orm.ecore#//XmlEntity/secondaryTables"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlEntity/virtualSecondaryTables"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlEmbeddable"/>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//XmlAttributeMapping">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlAttributeMapping/persistentAttribute"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlNullAttributeMapping"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlBasic"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlId"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlTransient"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlEmbedded"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlEmbeddedId"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlVersion"/>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//XmlMultiRelationshipMappingInternal"/>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//XmlMultiRelationshipMappingForXml">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlMultiRelationshipMappingForXml/joinTableForXml"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//XmlMultiRelationshipMappingForXml/mapKeyForXml"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//XmlMultiRelationshipMapping"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlOneToMany"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlManyToMany"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlPersistentAttribute">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlPersistentAttribute/name"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//PersistenceUnitMetadataInternal">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitMetadataInternal/xmlMappingMetadataCompleteInternal"/>
+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference old_orm.ecore#//PersistenceUnitMetadataInternal/persistenceUnitDefaultsInternal"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//PersistenceUnitMetadata">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitMetadata/xmlMappingMetadataComplete"/>
+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference old_orm.ecore#//PersistenceUnitMetadata/persistenceUnitDefaults"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//PersistenceUnitMetadataForXml">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitMetadataForXml/xmlMappingMetadataCompleteForXml"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//PersistenceUnitMetadataForXml/persistenceUnitDefaultsForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//PersistenceUnitDefaultsInternal">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaultsInternal/schemaInternal"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaultsInternal/catalogInternal"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaultsInternal/accessInternal"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaultsInternal/cascadePersistInternal"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//PersistenceUnitDefaults">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaults/schema"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaults/catalog"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaults/access"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaults/cascadePersist"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//PersistenceUnitDefaultsForXml">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaultsForXml/schemaForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaultsForXml/catalogForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaultsForXml/accessForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//PersistenceUnitDefaultsForXml/cascadePersistForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlTable"/>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//AbstractXmlNamedColumn">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlNamedColumn/specifiedNameForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlNamedColumn/columnDefinitionForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//AbstractXmlColumn">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlColumn/uniqueForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlColumn/nullableForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlColumn/insertableForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlColumn/updatableForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlColumn/specifiedTableForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlColumn">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlColumn/lengthForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlColumn/precisionForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlColumn/scaleForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlJoinColumn">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlJoinColumn/specifiedReferencedColumnNameForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//IXmlColumnMapping">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_orm.ecore#//IXmlColumnMapping/columnForXml"/>
+      <genOperations ecoreOperation="old_orm.ecore#//IXmlColumnMapping/makeColumnForXmlNonNull"/>
+      <genOperations ecoreOperation="old_orm.ecore#//IXmlColumnMapping/makeColumnForXmlNull"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlManyToOne"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlOneToOne"/>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//XmlSingleRelationshipMapping"/>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//XmlRelationshipMapping"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlJoinTable"/>
+    <genClasses ecoreClass="old_orm.ecore#//AbstractXmlTable">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlTable/specifiedNameForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlTable/specifiedCatalogForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//AbstractXmlTable/specifiedSchemaForXml"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//XmlOverride"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlAttributeOverride"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlAssociationOverride"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlDiscriminatorColumn">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlDiscriminatorColumn/discriminatorTypeForXml"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlDiscriminatorColumn/specifiedLengthForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlSecondaryTable"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlPrimaryKeyJoinColumn">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlPrimaryKeyJoinColumn/specifiedReferencedColumnNameForXml"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlGeneratedValue"/>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//XmlGenerator"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlSequenceGenerator"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlTableGenerator"/>
+    <genClasses image="false" ecoreClass="old_orm.ecore#//AbstractXmlQuery"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlNamedQuery"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlNamedNativeQuery"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlQueryHint"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlUniqueConstraint"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlCascade"/>
+    <genClasses ecoreClass="old_orm.ecore#//XmlIdClass">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlIdClass/value"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlInheritance">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlInheritance/strategy"/>
+    </genClasses>
+    <genClasses ecoreClass="old_orm.ecore#//XmlMapKey">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_orm.ecore#//XmlMapKey/name"/>
+    </genClasses>
+  </genPackages>
+  <genPackages prefix="Persistence" basePackage="org.eclipse.jpt.core.internal.content"
+      disposableProviderFactory="true" ecorePackage="old_persistence.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="old_persistence.ecore#//PersistenceUnitTransactionType">
+      <genEnumLiterals ecoreEnumLiteral="old_persistence.ecore#//PersistenceUnitTransactionType/JTA"/>
+      <genEnumLiterals ecoreEnumLiteral="old_persistence.ecore#//PersistenceUnitTransactionType/RESOURCE_LOCAL"/>
+    </genEnums>
+    <genDataTypes ecoreDataType="old_persistence.ecore#//PersistenceUnitTransactionTypeObject"/>
+    <genDataTypes ecoreDataType="old_persistence.ecore#//Version"/>
+    <genClasses ecoreClass="old_persistence.ecore#//PersistenceXmlRootContentNode">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_persistence.ecore#//PersistenceXmlRootContentNode/persistence"/>
+    </genClasses>
+    <genClasses ecoreClass="old_persistence.ecore#//Persistence">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_persistence.ecore#//Persistence/persistenceUnits"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//Persistence/version"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference old_persistence.ecore#//Persistence/root"/>
+    </genClasses>
+    <genClasses ecoreClass="old_persistence.ecore#//PersistenceUnit">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//PersistenceUnit/description"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//PersistenceUnit/provider"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//PersistenceUnit/jtaDataSource"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//PersistenceUnit/nonJtaDataSource"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EReference old_persistence.ecore#//PersistenceUnit/mappingFiles"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//PersistenceUnit/jarFiles"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EReference old_persistence.ecore#//PersistenceUnit/classes"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//PersistenceUnit/excludeUnlistedClasses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_persistence.ecore#//PersistenceUnit/properties"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//PersistenceUnit/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//PersistenceUnit/transactionType"/>
+    </genClasses>
+    <genClasses ecoreClass="old_persistence.ecore#//MappingFileRef">
+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//MappingFileRef/fileName"/>
+    </genClasses>
+    <genClasses ecoreClass="old_persistence.ecore#//JavaClassRef">
+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//JavaClassRef/javaClass"/>
+    </genClasses>
+    <genClasses ecoreClass="old_persistence.ecore#//Properties">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference old_persistence.ecore#//Properties/properties"/>
+    </genClasses>
+    <genClasses ecoreClass="old_persistence.ecore#//Property">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//Property/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute old_persistence.ecore#//Property/value"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/old_java.ecore b/jpa/plugins/org.eclipse.jpt.core/model/old_java.ecore
new file mode 100644
index 0000000..f1310c0
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/model/old_java.ecore
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="java"
+    nsURI="http://org.eclipse.jpt.core/old_java.ecore" nsPrefix="org.eclipse.jpt.core.content.java">
+  <eClassifiers xsi:type="ecore:EClass" name="JavaEObject" abstract="true" eSuperTypes="old_core.ecore#//JpaEObject old_core.ecore#//IJpaSourceObject">
+    <eOperations name="getJpaFile" eType="ecore:EClass old_core.ecore#//IJpaFile"/>
+    <eOperations name="getRoot" eType="ecore:EClass old_core.ecore#//IJpaRootContentNode"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="JpaCompilationUnit" eSuperTypes="#//JavaEObject old_core.ecore#//IJpaRootContentNode">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
+        eType="#//JavaPersistentType" containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="JavaPersistentType" eSuperTypes="#//JavaEObject old_core.ecore#//IPersistentType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mapping" lowerBound="1"
+        eType="#//IJavaTypeMapping" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" upperBound="-1"
+        eType="#//JavaPersistentAttribute" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="access" eType="ecore:EEnum old_core.ecore#//AccessType"
+        changeable="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="JavaPersistentAttribute" eSuperTypes="#//JavaEObject old_core.ecore#//IPersistentAttribute">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="defaultMapping" lowerBound="1"
+        eType="#//IJavaAttributeMapping" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedMapping" lowerBound="1"
+        eType="#//IJavaAttributeMapping" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IJavaTypeMapping" abstract="true" interface="true"
+      eSuperTypes="old_core.ecore#//ITypeMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IJavaAttributeMapping" abstract="true"
+      interface="true" eSuperTypes="old_core.ecore#//IAttributeMapping"/>
+  <eSubpackages name="mappings" nsURI="jpt.core.java.mappings.xmi" nsPrefix="jpt.core.java.mappings">
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaEntity" abstract="true" interface="true"
+        eSuperTypes="#//IJavaTypeMapping old_core.ecore#//mappings/IEntity"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaEmbeddable" abstract="true" interface="true"
+        eSuperTypes="#//IJavaTypeMapping old_core.ecore#//mappings/IEmbeddable"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaMappedSuperclass" abstract="true"
+        interface="true" eSuperTypes="#//IJavaTypeMapping old_core.ecore#//mappings/IMappedSuperclass"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaBasic" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/IBasic"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaEmbedded" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/IEmbedded"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaEmbeddedId" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/IEmbeddedId"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaId" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/IId"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaManyToMany" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/IManyToMany"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaManyToOne" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/IManyToOne"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaOneToMany" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/IOneToMany"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaOneToOne" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/IOneToOne"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaTransient" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/ITransient"/>
+    <eClassifiers xsi:type="ecore:EClass" name="IJavaVersion" abstract="true" interface="true"
+        eSuperTypes="#//IJavaAttributeMapping old_core.ecore#//mappings/IVersion"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaTypeMapping" abstract="true" eSuperTypes="#//JavaEObject #//IJavaTypeMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaEntity" eSuperTypes="#//mappings/JavaTypeMapping #//mappings/IJavaEntity"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaMappedSuperclass" eSuperTypes="#//mappings/JavaTypeMapping #//mappings/IJavaMappedSuperclass"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaEmbeddable" eSuperTypes="#//mappings/JavaTypeMapping #//mappings/IJavaEmbeddable"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaNullTypeMapping" eSuperTypes="#//mappings/JavaTypeMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaAttributeMapping" abstract="true"
+        eSuperTypes="#//JavaEObject #//IJavaAttributeMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaBasic" eSuperTypes="#//mappings/JavaAttributeMapping #//mappings/IJavaBasic"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaId" eSuperTypes="#//mappings/JavaAttributeMapping #//mappings/IJavaId"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaTransient" eSuperTypes="#//mappings/JavaAttributeMapping #//mappings/IJavaTransient"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaVersion" eSuperTypes="#//mappings/JavaAttributeMapping #//mappings/IJavaVersion"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaEmbeddedId" eSuperTypes="#//mappings/JavaAttributeMapping #//mappings/IJavaEmbeddedId"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaEmbedded" eSuperTypes="#//mappings/JavaAttributeMapping #//mappings/IJavaEmbedded"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaRelationshipMapping" abstract="true"
+        eSuperTypes="#//mappings/JavaAttributeMapping old_core.ecore#//mappings/IRelationshipMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaSingleRelationshipMapping" abstract="true"
+        eSuperTypes="#//mappings/JavaRelationshipMapping old_core.ecore#//mappings/ISingleRelationshipMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaManyToOne" eSuperTypes="#//mappings/JavaSingleRelationshipMapping #//mappings/IJavaManyToOne"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaOneToOne" eSuperTypes="#//mappings/JavaSingleRelationshipMapping #//mappings/IJavaOneToOne"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaMultiRelationshipMapping" abstract="true"
+        eSuperTypes="#//mappings/JavaRelationshipMapping old_core.ecore#//mappings/IMultiRelationshipMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaOneToMany" eSuperTypes="#//mappings/JavaMultiRelationshipMapping #//mappings/IJavaOneToMany"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaManyToMany" eSuperTypes="#//mappings/JavaMultiRelationshipMapping #//mappings/IJavaManyToMany"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaNullAttributeMapping" eSuperTypes="#//mappings/JavaAttributeMapping"/>
+    <eClassifiers xsi:type="ecore:EClass" name="AbstractJavaTable" abstract="true"
+        eSuperTypes="#//JavaEObject old_core.ecore#//mappings/ITable"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaTable" eSuperTypes="#//mappings/AbstractJavaTable"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaSecondaryTable" eSuperTypes="#//mappings/AbstractJavaTable old_core.ecore#//mappings/ISecondaryTable"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaJoinTable" eSuperTypes="#//mappings/AbstractJavaTable old_core.ecore#//mappings/IJoinTable"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaNamedColumn" abstract="true" eSuperTypes="#//JavaEObject old_core.ecore#//mappings/INamedColumn"/>
+    <eClassifiers xsi:type="ecore:EClass" name="AbstractJavaColumn" abstract="true"
+        eSuperTypes="#//mappings/JavaNamedColumn old_core.ecore#//mappings/IAbstractColumn"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaColumn" eSuperTypes="#//mappings/AbstractJavaColumn old_core.ecore#//mappings/IColumn"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaJoinColumn" eSuperTypes="#//mappings/AbstractJavaColumn old_core.ecore#//mappings/IJoinColumn"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaOverride" abstract="true" eSuperTypes="#//JavaEObject old_core.ecore#//mappings/IOverride"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaAttributeOverride" eSuperTypes="#//mappings/JavaOverride old_core.ecore#//mappings/IAttributeOverride"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaAssociationOverride" eSuperTypes="#//mappings/JavaOverride old_core.ecore#//mappings/IAssociationOverride"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaDiscriminatorColumn" eSuperTypes="#//mappings/JavaNamedColumn old_core.ecore#//mappings/IDiscriminatorColumn"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaPrimaryKeyJoinColumn" eSuperTypes="#//mappings/JavaNamedColumn old_core.ecore#//mappings/IPrimaryKeyJoinColumn"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaGeneratedValue" eSuperTypes="#//JavaEObject old_core.ecore#//mappings/IGeneratedValue"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaGenerator" abstract="true" eSuperTypes="#//JavaEObject old_core.ecore#//mappings/IGenerator"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaTableGenerator" eSuperTypes="#//mappings/JavaGenerator old_core.ecore#//mappings/ITableGenerator"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaSequenceGenerator" eSuperTypes="#//mappings/JavaGenerator old_core.ecore#//mappings/ISequenceGenerator"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaAbstractQuery" abstract="true"
+        eSuperTypes="#//JavaEObject old_core.ecore#//mappings/IQuery"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaNamedQuery" eSuperTypes="#//mappings/JavaAbstractQuery old_core.ecore#//mappings/INamedQuery"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaNamedNativeQuery" eSuperTypes="#//mappings/JavaAbstractQuery old_core.ecore#//mappings/INamedNativeQuery"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaQueryHint" eSuperTypes="#//JavaEObject old_core.ecore#//mappings/IQueryHint"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaUniqueConstraint" eSuperTypes="#//JavaEObject old_core.ecore#//mappings/IUniqueConstraint"/>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaCascade" eSuperTypes="#//JavaEObject old_core.ecore#//mappings/ICascade"/>
+  </eSubpackages>
+</ecore:EPackage>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/old_orm.ecore b/jpa/plugins/org.eclipse.jpt.core/model/old_orm.ecore
new file mode 100644
index 0000000..030f176
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/model/old_orm.ecore
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="orm"
+    nsURI="jpt.orm.xmi" nsPrefix="org.eclipse.jpt.core.content.orm">
+  <eClassifiers xsi:type="ecore:EClass" name="XmlRootContentNode" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//IJpaRootContentNode">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="entityMappings" ordered="false"
+        unique="false" lowerBound="1" eType="#//EntityMappingsInternal" resolveProxies="false"
+        eOpposite="#//EntityMappingsInternal/root"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EntityMappingsInternal" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//IJpaContentNode #//EntityMappingsForXml #//EntityMappings">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="root" ordered="false" unique="false"
+        lowerBound="1" eType="#//XmlRootContentNode" resolveProxies="false" eOpposite="#//XmlRootContentNode/entityMappings"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistenceUnitMetadataInternal"
+        lowerBound="1" eType="#//PersistenceUnitMetadataInternal" changeable="false"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="packageInternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultSchema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedSchema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="schema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultCatalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedCatalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="catalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultAccess" eType="ecore:EEnum old_core.ecore#//AccessType"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedAccess" eType="ecore:EEnum old_core.ecore#//AccessType"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="access" eType="ecore:EEnum old_core.ecore#//AccessType"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeMappings" upperBound="-1"
+        eType="#//XmlTypeMapping" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistentTypes" upperBound="-1"
+        eType="#//XmlPersistentType" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sequenceGenerators" upperBound="-1"
+        eType="#//XmlSequenceGenerator" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="tableGenerators" upperBound="-1"
+        eType="#//XmlTableGenerator" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="namedQueries" upperBound="-1"
+        eType="#//XmlNamedQuery" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="namedNativeQueries" upperBound="-1"
+        eType="#//XmlNamedNativeQuery" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EntityMappings" abstract="true" interface="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistenceUnitMetadata"
+        eType="#//PersistenceUnitMetadata" changeable="false" volatile="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="package" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EntityMappingsForXml" abstract="true"
+      interface="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistenceUnitMetadataForXml"
+        eType="#//PersistenceUnitMetadataForXml" volatile="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="packageForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlTypeMapping" abstract="true" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//ITypeMapping">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultAccess" eType="ecore:EEnum old_core.ecore#//AccessType"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedAccess" eType="ecore:EEnum old_core.ecore#//AccessType"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="access" eType="ecore:EEnum old_core.ecore#//AccessType"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="metadataComplete" eType="ecore:EEnum old_core.ecore#//mappings/DefaultFalseBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistentType" lowerBound="1"
+        eType="#//XmlPersistentType" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlPersistentType" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//IPersistentType">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="class" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="attributeMappings" upperBound="-1"
+        eType="#//XmlAttributeMapping" changeable="false" volatile="true" transient="true"
+        containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedAttributeMappings"
+        upperBound="-1" eType="#//XmlAttributeMapping" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="virtualAttributeMappings"
+        upperBound="-1" eType="#//XmlAttributeMapping" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistentAttributes" upperBound="-1"
+        eType="#//XmlPersistentAttribute" changeable="false" volatile="true" transient="true"
+        resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="specifiedPersistentAttributes"
+        upperBound="-1" eType="#//XmlPersistentAttribute" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="virtualPersistentAttributes"
+        upperBound="-1" eType="#//XmlPersistentAttribute" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlMappedSuperclass" eSuperTypes="#//XmlTypeMapping old_core.ecore#//mappings/IMappedSuperclass">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idClassForXml" eType="#//XmlIdClass"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlEntityInternal" eSuperTypes="#//XmlTypeMapping #//XmlEntityForXml #//XmlEntity"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlEntityForXml" abstract="true" interface="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="tableForXml" eType="#//XmlTable"
+        volatile="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="discriminatorColumnForXml"
+        eType="#//XmlDiscriminatorColumn" volatile="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idClassForXml" eType="#//XmlIdClass"
+        containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="inheritanceForXml" eType="#//XmlInheritance"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlEntity" abstract="true" interface="true"
+      eSuperTypes="old_core.ecore#//mappings/IEntity">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="secondaryTables" upperBound="-1"
+        eType="ecore:EClass old_core.ecore#//mappings/ISecondaryTable" changeable="false"
+        volatile="true" transient="true" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="virtualSecondaryTables"
+        upperBound="-1" eType="ecore:EClass old_core.ecore#//mappings/ISecondaryTable"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlEmbeddable" eSuperTypes="#//XmlTypeMapping old_core.ecore#//mappings/IEmbeddable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlAttributeMapping" abstract="true"
+      eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//IAttributeMapping">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistentAttribute" lowerBound="1"
+        eType="#//XmlPersistentAttribute" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlNullAttributeMapping" eSuperTypes="#//XmlAttributeMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlBasic" eSuperTypes="#//XmlAttributeMapping old_core.ecore#//mappings/IBasic #//IXmlColumnMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlId" eSuperTypes="#//XmlAttributeMapping old_core.ecore#//mappings/IId #//IXmlColumnMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlTransient" eSuperTypes="#//XmlAttributeMapping old_core.ecore#//mappings/ITransient"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlEmbedded" eSuperTypes="#//XmlAttributeMapping old_core.ecore#//mappings/IEmbedded"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlEmbeddedId" eSuperTypes="#//XmlAttributeMapping old_core.ecore#//mappings/IEmbeddedId"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlVersion" eSuperTypes="#//XmlAttributeMapping old_core.ecore#//mappings/IVersion #//IXmlColumnMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlMultiRelationshipMappingInternal"
+      abstract="true" eSuperTypes="#//XmlRelationshipMapping old_core.ecore#//mappings/IMultiRelationshipMapping #//XmlMultiRelationshipMappingForXml #//XmlMultiRelationshipMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlMultiRelationshipMappingForXml" abstract="true"
+      interface="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="joinTableForXml" eType="#//XmlJoinTable"
+        volatile="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mapKeyForXml" eType="#//XmlMapKey"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlMultiRelationshipMapping" abstract="true"
+      interface="true" eSuperTypes="old_core.ecore#//mappings/IMultiRelationshipMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlOneToMany" eSuperTypes="#//XmlMultiRelationshipMappingInternal old_core.ecore#//mappings/IOneToMany"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlManyToMany" eSuperTypes="#//XmlMultiRelationshipMappingInternal old_core.ecore#//mappings/IManyToMany"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlPersistentAttribute" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//IPersistentAttribute">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PersistenceUnitMetadataInternal" eSuperTypes="old_core.ecore#//XmlEObject #//PersistenceUnitMetadataForXml #//PersistenceUnitMetadata">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="xmlMappingMetadataCompleteInternal"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistenceUnitDefaultsInternal"
+        lowerBound="1" eType="#//PersistenceUnitDefaultsInternal" changeable="false"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PersistenceUnitMetadata" abstract="true"
+      interface="true" eSuperTypes="old_core.ecore#//IXmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="xmlMappingMetadataComplete"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistenceUnitDefaults"
+        eType="#//PersistenceUnitDefaults" changeable="false" volatile="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PersistenceUnitMetadataForXml" abstract="true"
+      interface="true" eSuperTypes="old_core.ecore#//IXmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="xmlMappingMetadataCompleteForXml"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistenceUnitDefaultsForXml"
+        eType="#//PersistenceUnitDefaultsForXml" volatile="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PersistenceUnitDefaultsInternal" eSuperTypes="old_core.ecore#//XmlEObject #//PersistenceUnitDefaults #//PersistenceUnitDefaultsForXml">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="schemaInternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="catalogInternal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="accessInternal" eType="ecore:EEnum old_core.ecore#//AccessType"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cascadePersistInternal"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PersistenceUnitDefaults" abstract="true"
+      interface="true" eSuperTypes="old_core.ecore#//IXmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="schema" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="catalog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="access" eType="ecore:EEnum old_core.ecore#//AccessType"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cascadePersist" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PersistenceUnitDefaultsForXml" abstract="true"
+      interface="true" eSuperTypes="old_core.ecore#//IXmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="schemaForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="catalogForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="accessForXml" eType="ecore:EEnum old_core.ecore#//AccessType"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cascadePersistForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlTable" eSuperTypes="#//AbstractXmlTable old_core.ecore#//mappings/ITable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AbstractXmlNamedColumn" abstract="true"
+      eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//mappings/INamedColumn">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedNameForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="columnDefinitionForXml"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AbstractXmlColumn" abstract="true" eSuperTypes="#//AbstractXmlNamedColumn old_core.ecore#//mappings/IAbstractColumn">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="uniqueForXml" eType="ecore:EEnum old_core.ecore#//mappings/DefaultFalseBoolean"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nullableForXml" eType="ecore:EEnum old_core.ecore#//mappings/DefaultTrueBoolean"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="insertableForXml" eType="ecore:EEnum old_core.ecore#//mappings/DefaultTrueBoolean"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="updatableForXml" eType="ecore:EEnum old_core.ecore#//mappings/DefaultTrueBoolean"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedTableForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlColumn" eSuperTypes="#//AbstractXmlColumn old_core.ecore#//mappings/IColumn">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lengthForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        volatile="true" defaultValueLiteral="255"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="precisionForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="scaleForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlJoinColumn" eSuperTypes="#//AbstractXmlColumn old_core.ecore#//mappings/IJoinColumn">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedReferencedColumnNameForXml"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IXmlColumnMapping" abstract="true" interface="true"
+      eSuperTypes="old_core.ecore#//mappings/IColumnMapping">
+    <eOperations name="makeColumnForXmlNonNull"/>
+    <eOperations name="makeColumnForXmlNull"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="columnForXml" eType="#//XmlColumn"
+        volatile="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlManyToOne" eSuperTypes="#//XmlSingleRelationshipMapping old_core.ecore#//mappings/IManyToOne"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlOneToOne" eSuperTypes="#//XmlSingleRelationshipMapping old_core.ecore#//mappings/IOneToOne"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlSingleRelationshipMapping" abstract="true"
+      eSuperTypes="#//XmlRelationshipMapping old_core.ecore#//mappings/ISingleRelationshipMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlRelationshipMapping" abstract="true"
+      eSuperTypes="#//XmlAttributeMapping old_core.ecore#//mappings/IRelationshipMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlJoinTable" eSuperTypes="#//AbstractXmlTable old_core.ecore#//mappings/IJoinTable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AbstractXmlTable" abstract="true" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//mappings/ITable">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedNameForXml" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedCatalogForXml"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedSchemaForXml"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlOverride" abstract="true" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//mappings/IOverride"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlAttributeOverride" eSuperTypes="#//XmlOverride old_core.ecore#//mappings/IAttributeOverride #//IXmlColumnMapping"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlAssociationOverride" eSuperTypes="#//XmlOverride old_core.ecore#//mappings/IAssociationOverride"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlDiscriminatorColumn" eSuperTypes="#//AbstractXmlNamedColumn old_core.ecore#//mappings/IDiscriminatorColumn">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="discriminatorTypeForXml"
+        eType="ecore:EEnum old_core.ecore#//mappings/DiscriminatorType" volatile="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedLengthForXml"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+        volatile="true" defaultValueLiteral="-1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlSecondaryTable" eSuperTypes="#//AbstractXmlTable old_core.ecore#//mappings/ISecondaryTable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlPrimaryKeyJoinColumn" eSuperTypes="#//AbstractXmlNamedColumn old_core.ecore#//mappings/IPrimaryKeyJoinColumn">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specifiedReferencedColumnNameForXml"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" volatile="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlGeneratedValue" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//mappings/IGeneratedValue"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlGenerator" abstract="true" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//mappings/IGenerator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlSequenceGenerator" eSuperTypes="#//XmlGenerator old_core.ecore#//mappings/ISequenceGenerator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlTableGenerator" eSuperTypes="#//XmlGenerator old_core.ecore#//mappings/ITableGenerator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AbstractXmlQuery" abstract="true" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//mappings/IQuery"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlNamedQuery" eSuperTypes="#//AbstractXmlQuery old_core.ecore#//mappings/INamedQuery"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlNamedNativeQuery" eSuperTypes="#//AbstractXmlQuery old_core.ecore#//mappings/INamedNativeQuery"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlQueryHint" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//mappings/IQueryHint"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlUniqueConstraint" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//mappings/IUniqueConstraint"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlCascade" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//mappings/ICascade"/>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlIdClass" eSuperTypes="old_core.ecore#//XmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlInheritance" eSuperTypes="old_core.ecore#//XmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="strategy" eType="ecore:EEnum old_core.ecore#//mappings/InheritanceType"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="XmlMapKey" eSuperTypes="old_core.ecore#//XmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/old_persistence.ecore b/jpa/plugins/org.eclipse.jpt.core/model/old_persistence.ecore
new file mode 100644
index 0000000..4deccb1
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/model/old_persistence.ecore
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="persistence"
+    nsURI="persistence.xmi" nsPrefix="org.eclipse.jpt.core.content.persistence">
+  <eClassifiers xsi:type="ecore:EClass" name="PersistenceXmlRootContentNode" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//IJpaRootContentNode">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistence" eType="#//Persistence"
+        eOpposite="#//Persistence/root"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Persistence" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//IJpaContentNode">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="persistenceUnits" upperBound="-1"
+        eType="#//PersistenceUnit" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" unique="false"
+        lowerBound="1" eType="#//Version"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="root" ordered="false" unique="false"
+        lowerBound="1" eType="#//PersistenceXmlRootContentNode" resolveProxies="false"
+        eOpposite="#//PersistenceXmlRootContentNode/persistence"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PersistenceUnit" eSuperTypes="old_core.ecore#//XmlEObject old_core.ecore#//IJpaContentNode">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" unique="false"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="provider" unique="false"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="jtaDataSource" unique="false"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nonJtaDataSource" unique="false"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mappingFiles" unique="false"
+        upperBound="-1" eType="#//MappingFileRef" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="jarFiles" unique="false"
+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="classes" unique="false"
+        upperBound="-1" eType="#//JavaClassRef" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="excludeUnlistedClasses"
+        unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
+        defaultValueLiteral="false" unsettable="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="properties" eType="#//Properties"
+        containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="transactionType" unique="false"
+        eType="#//PersistenceUnitTransactionType" defaultValueLiteral="JTA" unsettable="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MappingFileRef" eSuperTypes="old_core.ecore#//XmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fileName" ordered="false"
+        unique="false" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"
+        defaultValueLiteral=""/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="JavaClassRef" eSuperTypes="old_core.ecore#//XmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="javaClass" ordered="false"
+        unique="false" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Properties" eSuperTypes="old_core.ecore#//XmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="properties" upperBound="-1"
+        eType="#//Property" containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Property" eSuperTypes="old_core.ecore#//XmlEObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" unique="false" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="PersistenceUnitTransactionType">
+    <eLiterals name="JTA"/>
+    <eLiterals name="RESOURCE_LOCAL" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="PersistenceUnitTransactionTypeObject"
+      instanceClassName="org.eclipse.emf.common.util.Enumerator"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="Version" instanceClassName="java.lang.String"/>
+</ecore:EPackage>
diff --git a/jpa/plugins/org.eclipse.jpt.core/model/persistence.ecore b/jpa/plugins/org.eclipse.jpt.core/model/persistence.ecore
index b26c367..9ff4d1e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/model/persistence.ecore
+++ b/jpa/plugins/org.eclipse.jpt.core/model/persistence.ecore
@@ -2,21 +2,14 @@
 <ecore:EPackage xmi:version="2.0"
     xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="persistence"
-    nsURI="persistence.xmi" nsPrefix="org.eclipse.jpt.core.content.persistence">
-  <eClassifiers xsi:type="ecore:EClass" name="PersistenceXmlRootContentNode" eSuperTypes="core.ecore#//XmlEObject core.ecore#//IJpaRootContentNode">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="persistence" eType="#//Persistence"
-        eOpposite="#//Persistence/root"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Persistence" eSuperTypes="core.ecore#//XmlEObject">
+    nsURI="jpt.persistence.xmi" nsPrefix="org.eclipse.jpt.core.resource.persistence">
+  <eClassifiers xsi:type="ecore:EClass" name="Persistence">
     <eStructuralFeatures xsi:type="ecore:EReference" name="persistenceUnits" upperBound="-1"
         eType="#//PersistenceUnit" containment="true" resolveProxies="false"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" unique="false"
         lowerBound="1" eType="#//Version"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="root" ordered="false" unique="false"
-        lowerBound="1" eType="#//PersistenceXmlRootContentNode" resolveProxies="false"
-        eOpposite="#//PersistenceXmlRootContentNode/persistence"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="PersistenceUnit" eSuperTypes="core.ecore#//XmlEObject">
+  <eClassifiers xsi:type="ecore:EClass" name="PersistenceUnit">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" unique="false"
         eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="provider" unique="false"
@@ -41,20 +34,20 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="transactionType" unique="false"
         eType="#//PersistenceUnitTransactionType" defaultValueLiteral="JTA" unsettable="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="MappingFileRef" eSuperTypes="core.ecore#//XmlEObject">
+  <eClassifiers xsi:type="ecore:EClass" name="MappingFileRef">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="fileName" ordered="false"
         unique="false" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"
         defaultValueLiteral=""/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="JavaClassRef" eSuperTypes="core.ecore#//XmlEObject">
+  <eClassifiers xsi:type="ecore:EClass" name="JavaClassRef">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="javaClass" ordered="false"
         unique="false" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Properties" eSuperTypes="core.ecore#//XmlEObject">
+  <eClassifiers xsi:type="ecore:EClass" name="Properties">
     <eStructuralFeatures xsi:type="ecore:EReference" name="properties" upperBound="-1"
         eType="#//Property" containment="true" resolveProxies="false"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Property" eSuperTypes="core.ecore#//XmlEObject">
+  <eClassifiers xsi:type="ecore:EClass" name="Property">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" lowerBound="1"
         eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" unique="false" lowerBound="1"
diff --git a/jpa/plugins/org.eclipse.jpt.core/plugin.xml b/jpa/plugins/org.eclipse.jpt.core/plugin.xml
index 8531a3d..f645a59 100644
--- a/jpa/plugins/org.eclipse.jpt.core/plugin.xml
+++ b/jpa/plugins/org.eclipse.jpt.core/plugin.xml
@@ -181,6 +181,14 @@
 		</validator>
 		
 	</extension>
+ <extension
+       point="org.eclipse.emf.ecore.generated_package">
+    <package
+          class="org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage"
+          genModel="model/old_coreModels.genmodel"
+          uri="http://org.eclipse.jpt.core/old_java.ecore">
+    </package>
+ </extension>
 	
 	
 </plugin>
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaContentNode.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaContentNode.java
index 5d83c12..5676d2e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaContentNode.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaContentNode.java
@@ -1,8 +1,8 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
  * 
  * Contributors:
  *     Oracle - initial API and implementation
@@ -35,12 +35,6 @@
 	Object getId();
 
 	/**
-	 * Return the text range for this contentNode.  This is the all-inclusive
-	 * text range to be used for finding a particular content node given a source location.
-	 */
-	ITextRange fullTextRange();
-
-	/**
 	 * Return the text range to be used for selection. This is the text you want selected
 	 * when selecting the object in the editor. StructureView uses this for selection
 	 * from the structure to the source editor.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaDataSource.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaDataSource.java
index a267a8f..4aae51c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaDataSource.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaDataSource.java
@@ -9,8 +9,6 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal;
 
-import org.eclipse.jpt.db.internal.Connection;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IJpa Data Source</b></em>'.
@@ -33,5 +31,7 @@
 
 	void setConnectionProfileName(String newConnectionProfileName);
 
-	Connection getConnection();
+	boolean isConnected();
+
+	boolean hasAConnection();
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaEObject.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaEObject.java
index 80a2aaa..ee0c810 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaEObject.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaEObject.java
@@ -36,4 +36,8 @@
 	 * Return the resource that most directly contains this object
 	 */
 	IResource getResource();
+
+	IJpaFactory jpaFactory();
+
+	IJpaPlatform jpaPlatform();
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFactory.java
new file mode 100644
index 0000000..57d388e
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFactory.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * 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.core.internal;
+
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaId;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion;
+import org.eclipse.jpt.core.internal.jdtutility.Attribute;
+import org.eclipse.jpt.core.internal.jdtutility.Type;
+import org.eclipse.jpt.core.internal.platform.BaseJpaFactory;
+
+/**
+ * Use IJpaFactory to create any IJavaTypeMapping or IJavaAttributeMappings.  This is necessary
+ * so that platforms can extend the java model with their own annotations. 
+ * IJavaTypeMappingProvider and IJavaAttributeMappingProvider use this factory.
+ * See IJpaPlatform.javaTypeMappingProviders() and IJpaPlatform.javaAttributeMappingProviders()
+ * for creating new mappings types.
+ * @see BaseJpaFactory
+ */
+public interface IJpaFactory
+{
+	IJavaEntity createJavaEntity(Type type);
+	
+	IJavaEmbeddable createJavaEmbeddable(Type type);
+	
+	IJavaMappedSuperclass createJavaMappedSuperclass(Type type);
+		
+	IJavaBasic createJavaBasic(Attribute attribute);
+	
+	IJavaEmbedded createJavaEmbedded(Attribute attribute);
+	
+	IJavaEmbeddedId createJavaEmbeddedId(Attribute attribute);
+	
+	IJavaId createJavaId(Attribute attribute);
+	
+	IJavaManyToMany createJavaManyToMany(Attribute attribute);
+	
+	IJavaManyToOne createJavaManyToOne(Attribute attribute);
+	
+	IJavaOneToMany createJavaOneToMany(Attribute attribute);
+	
+	IJavaOneToOne createJavaOneToOne(Attribute attribute);
+	
+	IJavaTransient createJavaTransient(Attribute attribute);
+	
+	IJavaVersion createJavaVersion(Attribute attribute);
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFile.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFile.java
index f55343b..f74845a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFile.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFile.java
@@ -1,8 +1,8 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
  * 
  * Contributors:
  *     Oracle - initial API and implementation
@@ -35,6 +35,8 @@
 	 */
 	IJpaRootContentNode getContent();
 
+	void setContent(IJpaRootContentNode content);
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFileContentProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFileContentProvider.java
index 75b5650..c6e6c48 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFileContentProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaFileContentProvider.java
@@ -1,15 +1,14 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies 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.internal;
 
-import org.eclipse.core.resources.IFile;
 
 /**
  * A JpaProject corresponds to an IProject and containts of JpaFiles.
@@ -28,7 +27,7 @@
 	 * The file passed in will have a contentType that matches
 	 * the one returned by the contentType() method.
 	 */
-	IJpaRootContentNode buildRootContent(IFile file);
+	IJpaRootContentNode buildRootContent(IJpaFile jpaFile);
 	
 	/**
 	 * Return the contentType of the file to be included in the JpaProject.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaPlatform.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaPlatform.java
index bb58e2c..1f6cd7e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaPlatform.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaPlatform.java
@@ -9,11 +9,14 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal;
 
-import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.ListIterator;
+import org.eclipse.jpt.core.internal.content.java.IDefaultJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
+import org.eclipse.jpt.core.internal.content.java.IJavaTypeMappingProvider;
 import org.eclipse.jpt.core.internal.content.persistence.PersistenceUnit;
 import org.eclipse.jpt.core.internal.platform.IContext;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
@@ -55,6 +58,8 @@
 	 */
 	void setProject(IJpaProject jpaProject);
 
+	IJpaFactory getJpaFactory();
+
 	// ********** Persistence Unit ********************************************
 	boolean containsPersistenceUnitNamed(String name);
 
@@ -77,12 +82,35 @@
 	Iterator<IJpaFile> validPersistenceXmlFiles();
 
 	/**
-	 * Return a collection of IJpaFileContentProviders.  These will be used to 
+	 * Return an Iterator of IJpaFileContentProviders.  These will be used to 
 	 * determine which files will be read from an IProject based on contentType.
 	 * These contentProviders should have unique contentTypes. 
-	 * @return
 	 */
-	Collection<IJpaFileContentProvider> jpaFileContentProviders();
+	Iterator<IJpaFileContentProvider> jpaFileContentProviders();
+
+	IJpaFileContentProvider fileContentProvider(String contentTypeId);
+
+	/**
+	 * Return an Iterator of IJavaTypeMappingProviders.  These define which
+	 * IJavaTypeMappings are supported and which annotation applies. 
+	 */
+	Iterator<IJavaTypeMappingProvider> javaTypeMappingProviders();
+
+	IJavaTypeMappingProvider javaTypeMappingProvider(String typeMappingKey);
+
+	/**
+	 * Return an Iterator of IJavaAttributeMappingProviders.  These define which
+	 * IJavaAttributeMappings are supported and which annotation applies. 
+	 */
+	Iterator<IJavaAttributeMappingProvider> javaAttributeMappingProviders();
+
+	IJavaAttributeMappingProvider javaAttributeMappingProvider(String attributeMappingKey);
+
+	/**
+	 * Return a ListIterator of IDefaultJavaAttributeMappingProvider.  This is a List
+	 * because the defaults are checked in order.
+	 */
+	ListIterator<IDefaultJavaAttributeMappingProvider> defaultJavaAttributeMappingProviders();
 
 	/**
 	 * Build a project context to be used when resynching the intra-model
@@ -93,7 +121,6 @@
 	 * and the mapping files and classes it contains.
 	 * 
 	 * @see refreshDefaults(Object)
-	 * @return
 	 */
 	IContext buildProjectContext();
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaProject.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaProject.java
index ca0c6db..c7ffb1d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaProject.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IJpaProject.java
@@ -1,8 +1,8 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
  * 
  * Contributors:
  *     Oracle - initial API and implementation
@@ -18,6 +18,8 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentType;
 import org.eclipse.jpt.db.internal.ConnectionProfile;
+import org.eclipse.jpt.utility.internal.CommandExecutor;
+import org.eclipse.jpt.utility.internal.CommandExecutorProvider;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 
 /**
@@ -134,4 +136,21 @@
 	Iterator<IMessage> validationMessages();
 
 	ConnectionProfile connectionProfile();
+
+	/**
+	 * Return a thread-specific implementation of the CommandExecutor
+	 * interface that will be used to execute a command to modify a shared
+	 * document.
+	 */
+	CommandExecutor getThreadLocalModifySharedDocumentCommandExecutor();
+
+	/**
+	 * Set a thread-specific implementation of the CommandExecutor
+	 * interface that will be used to execute a command to modify a shared
+	 * document. This allows background clients to modify documents that are
+	 * already present in the UI.
+	 */
+	void setThreadLocalModifySharedDocumentCommandExecutor(CommandExecutor commandExecutor);
+
+	CommandExecutorProvider modifySharedDocumentCommandExecutorProvider();
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentAttribute.java
index 88bbd80..a9c3a8e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentAttribute.java
@@ -9,7 +9,6 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal;
 
-import java.util.Iterator;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 
 /**
@@ -85,11 +84,6 @@
 	void setSpecifiedMappingKey(String key);
 
 	/**
-	 * Return all the attribute's mapping keys.
-	 */
-	Iterator<String> candidateMappingKeys();
-
-	/**
 	 * Return the attribute's Java attribute.
 	 */
 	Attribute getAttribute();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentType.java
index 1b8cfb5..0faa13e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentType.java
@@ -57,11 +57,6 @@
 	void setMappingKey(String value);
 
 	/**
-	 * Returns an iterator on all mapping keys that are available for this type.
-	 */
-	Iterator<String> candidateMappingKeys();
-
-	/**
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Mapping</em>' containment reference isn't clear,
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaCoreFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaCoreFactory.java
index d5c3782..35c47a1 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaCoreFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaCoreFactory.java
@@ -1,14 +1,15 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies 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.internal;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EDataType;
 import org.eclipse.emf.ecore.EObject;
@@ -136,6 +137,11 @@
 		return jpaProject;
 	}
 
+	public JpaProject createJpaProject(IProject project) {
+		JpaProject jpaProject = new JpaProject(project);
+		return jpaProject;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaDataSource.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaDataSource.java
index 39f3e91..0859ee2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaDataSource.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaDataSource.java
@@ -12,7 +12,6 @@
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jpt.db.internal.Connection;
 import org.eclipse.jpt.db.internal.ConnectionListener;
 import org.eclipse.jpt.db.internal.ConnectionProfile;
 import org.eclipse.jpt.db.internal.ConnectionProfileRepository;
@@ -101,27 +100,27 @@
 
 	private ConnectionListener buildConnectionListener() {
 		return new ConnectionListener() {
-			public void opened(Connection connection) {
+			public void opened(ConnectionProfile profile) {
 				getProject().resynch();
 			}
 
-			public void aboutToClose(Connection connection) {}
+			public void aboutToClose(ConnectionProfile profile) {}
 
-			public boolean okToClose(Connection connection) {
+			public boolean okToClose(ConnectionProfile profile) {
 				return true;
 			}
 
-			public void closed(Connection connection) {
+			public void closed(ConnectionProfile profile) {
 				getProject().resynch();
 			}
 
-			public void modified(Connection connection) {}
+			public void modified(ConnectionProfile profile) {}
 
-			public void databaseChanged(Connection connection, Database database) {}
+			public void databaseChanged(ConnectionProfile profile, Database database) {}
 
-			public void schemaChanged(Connection connection, Schema schema) {}
+			public void schemaChanged(ConnectionProfile profile, Schema schema) {}
 
-			public void tableChanged(Connection connection, Table table) {}
+			public void tableChanged(ConnectionProfile profile, Table table) {}
 		};
 	}
 
@@ -196,8 +195,14 @@
 		getProject().resynch();
 	}
 
-	public Connection getConnection() {
-		return ConnectionProfileRepository.instance().getConnectionWithProfileNamed(getConnectionProfileName());
+	public boolean isConnected() {
+		ConnectionProfile profile = ConnectionProfileRepository.instance().profileNamed(getConnectionProfileName());
+		return profile.isConnected();
+	}
+
+	public boolean hasAConnection() {
+		ConnectionProfile profile = ConnectionProfileRepository.instance().profileNamed(getConnectionProfileName());
+		return !profile.isNull();
 	}
 
 	/**
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaEObject.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaEObject.java
index 76fbadc..d7822fe 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaEObject.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaEObject.java
@@ -65,6 +65,14 @@
 		return this.getJpaProject().getProject();
 	}
 
+	public IJpaPlatform jpaPlatform() {
+		return getJpaProject().getPlatform();
+	}
+
+	public IJpaFactory jpaFactory() {
+		return jpaPlatform().getJpaFactory();
+	}
+
 	public ConnectionProfile connectionProfile() {
 		return this.getJpaProject().connectionProfile();
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaFile.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaFile.java
index 6e7da34..ef56460 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaFile.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaFile.java
@@ -202,6 +202,7 @@
 	 */
 	void dispose() {
 		getContent().dispose();
+		((JpaProject) getJpaProject()).getFiles().remove(this);
 	}
 
 	/**
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModel.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModel.java
index 5245e26..b968016 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModel.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModel.java
@@ -165,21 +165,12 @@
 	 */
 	void dispose() {
 		for (Iterator<IJpaProject> stream = new CloneIterator<IJpaProject>(getProjects()); stream.hasNext();) {
-			disposeProject((JpaProject) stream.next());
+			((JpaProject) stream.next()).dispose();
 		}
 	}
 
 	/**
 	 * INTERNAL ONLY
-	 * Dispose project and remove it
-	 */
-	void disposeProject(JpaProject jpaProject) {
-		jpaProject.dispose();
-		getProjects().remove(jpaProject);
-	}
-
-	/**
-	 * INTERNAL ONLY
 	 * Handle java element change event.
 	 */
 	void handleEvent(ElementChangedEvent event) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModelManager.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModelManager.java
index a92adec..f69d462 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModelManager.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModelManager.java
@@ -33,11 +33,23 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jpt.core.internal.prefs.JpaPreferenceConstants;
 import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
 
 public class JpaModelManager
 {
-	private static JpaModelManager INSTANCE;
+	final JpaModel model;
 	
+	private final IResourceChangeListener resourceChangeListener;
+	
+	private final IFacetedProjectListener facetedProjectListener;
+	
+	private final IElementChangedListener elementChangeListener;
+	
+	private final IPropertyChangeListener preferencesListener;
+	
+
+	private static JpaModelManager INSTANCE;
 	
 	/**
 	 * Returns the singleton JpaModelManager
@@ -50,49 +62,30 @@
 	}
 	
 	
-	/**
-	 * Unique handle onto the JpaModel
-	 */
-	JpaModel model;
-	
-	/**
-	 * Processes resource changes
-	 */
-	private IResourceChangeListener resourceChangeListener;
-	
-	/**
-	 * Process element changes
-	 */
-	private IElementChangedListener elementChangeListener;
-	
-	/**
-	 * Process changes to preferences
-	 */
-	private IPropertyChangeListener preferencesListener;
-	
-	
 	private JpaModelManager() {
 		super();
 		model = JpaCoreFactory.eINSTANCE.createJpaModel();
 		resourceChangeListener = new ResourceChangeListener();
+		facetedProjectListener = new FacetedProjectListener();
 		elementChangeListener = new ElementChangeListener();
 		preferencesListener = new PreferencesListener();
 	}
 	
-	public void startup() {
+	void start() {
 		try {
-			buildWorkspace();
+			this.buildWorkspace();
 			ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener);
+			FacetedProjectFramework.addListener(facetedProjectListener, IFacetedProjectEvent.Type.values());
 			JavaCore.addElementChangedListener(elementChangeListener);
 			JptCorePlugin.getPlugin().getPluginPreferences().addPropertyChangeListener(preferencesListener);
 		}
-		catch (RuntimeException re) {
-			JptCorePlugin.log(re);
-			shutdown();
+		catch (RuntimeException ex) {
+			JptCorePlugin.log(ex);
+			this.stop();
 		}
 	}
 	
-	public void shutdown() {
+	void stop() {
 		JptCorePlugin.getPlugin().getPluginPreferences().removePropertyChangeListener(preferencesListener);
 		JavaCore.removeElementChangedListener(elementChangeListener);
 		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
@@ -145,7 +138,7 @@
 			return null;
 		}
 		
-		return model.getJpaProject(project);
+		return this.model.getJpaProject(project);
 	}
 	
 	/**
@@ -188,8 +181,7 @@
 	public synchronized IJpaProject createJpaProject(IProject project) 
 			throws CoreException {
 		if (FacetedProjectFramework.hasProjectFacet(project, JptCorePlugin.FACET_ID)) {
-			JpaProject jpaProject = JpaCoreFactory.eINSTANCE.createJpaProject();
-			jpaProject.setProject(project);
+			JpaProject jpaProject = JpaCoreFactory.eINSTANCE.createJpaProject(project);
 			model.getProjects().add(jpaProject);
 			return jpaProject;
 		}
@@ -216,7 +208,7 @@
 	 * Dispose the IJpaProject
 	 */
 	public void disposeJpaProject(IJpaProject jpaProject) {
-		model.disposeProject((JpaProject) jpaProject);
+		((JpaProject) jpaProject).dispose();
 	}
 	
 	/**
@@ -230,7 +222,7 @@
 		}
 		
 		IProject project = file.getProject();
-		JpaProject jpaProject = (JpaProject) getJpaProject(project);
+		JpaProject jpaProject = (JpaProject) this.getJpaProject(project);
 		if (jpaProject == null) {
 			return null;
 		}
@@ -310,6 +302,7 @@
 				
 				switch (event.getType()){
 					case IResourceChangeEvent.PRE_DELETE :
+					case IResourceChangeEvent.PRE_CLOSE :
 						try {
 							if ((resource.getType() == IResource.PROJECT)
 									&& (FacetedProjectFramework.hasProjectFacet(
@@ -328,9 +321,6 @@
 							checkForFilesBeingAddedOrRemoved(delta);
 						}
 						return;
-						
-					case IResourceChangeEvent.PRE_CLOSE :
-						return;
 				}
 			}
 		}
@@ -417,19 +407,7 @@
 											JptCorePlugin.log(ce);
 										}
 									}
-								} 
-								else {
-									// project has been closed.  dispose jpa project if it exists.
-									if (jpaProject != null) {
-										model.disposeProject(jpaProject);
-									}
 								}
-							}
-							else if ((delta.getFlags() & IResourceDelta.DESCRIPTION) != 0) {
-								// again, not sure ...
-							} 
-							else {
-								// ...
 							}		
 							break;
 					}
@@ -449,7 +427,7 @@
 		private void projectBeingDeleted(IProject project) {
 			// could be problems here ...
 			JpaProject jpaProject = (JpaProject) model.getJpaProject(project);
-			model.disposeProject(jpaProject);
+			jpaProject.dispose();
 		}
 		
 		/**
@@ -495,42 +473,106 @@
 	}
 	
 	
-	private static class ElementChangeListener 
-		implements IElementChangedListener
+	// **************** faceted project listener ******************************
+	
+	private static class FacetedProjectListener 
+		implements IFacetedProjectListener
 	{
-		ThreadLocal<ElementChangeProcessor> elementChangeProcessors = new ThreadLocal<ElementChangeProcessor>();
+		ThreadLocal<FacetedProjectChangeProcessor> processors = 
+				new ThreadLocal<FacetedProjectChangeProcessor>();
 		
-		ElementChangeListener() {
+		FacetedProjectListener() {
 			super();
 		}
 		
-		public void elementChanged(ElementChangedEvent event) {
-			getElementChangeProcessor().elementChanged(event);
+		public void handleEvent(IFacetedProjectEvent event) {
+			getProcessor().handleEvent(event);
 		}
 		
-		public ElementChangeProcessor getElementChangeProcessor() {
-			ElementChangeProcessor processor = this.elementChangeProcessors.get();
-			if (processor == null) {
-				processor = new ElementChangeProcessor();
-				this.elementChangeProcessors.set(processor);
+		public FacetedProjectChangeProcessor getProcessor() {
+			FacetedProjectChangeProcessor processor = processors.get();
+			if (processor == null) { 
+				processor = new FacetedProjectChangeProcessor();
+				processors.set(processor);
 			}
 			return processor;
 		}
 	}
 	
 	
-	private static class ElementChangeProcessor
+	private static class FacetedProjectChangeProcessor
 	{
-		ElementChangeProcessor() {
-			super();
+		private JpaModel model;
+		
+		FacetedProjectChangeProcessor() {
+			model = JpaModelManager.instance().model;
 		}
 		
-		public void elementChanged(ElementChangedEvent event) {
-			JpaModelManager.instance().model.handleEvent(event);
+		protected void handleEvent(IFacetedProjectEvent event) {
+			IProject project = event.getProject().getProject();
+			JpaProject jpaProject = (JpaProject) model.getJpaProject(project);
+			boolean jpaFacetExists = false;
+			try {
+				jpaFacetExists = FacetedProjectFramework.hasProjectFacet(project, JptCorePlugin.FACET_ID);
+			}
+			catch (CoreException ce) {
+				// nothing to do, assume facet doesn't exist
+				JptCorePlugin.log(ce);
+			}
+			
+			if (jpaFacetExists && jpaProject == null) {
+				try {
+					JpaModelManager.instance().createFilledJpaProject(project);
+				}
+				catch (CoreException ce) {
+				// nothing to do, nothing we *can* do
+				JptCorePlugin.log(ce);
+				}
+			}
+			else if (jpaProject != null && ! jpaFacetExists) {
+				jpaProject.dispose();
+			}
 		}
 	}
 	
 	
+	// **************** element change listener *******************************
+
+	private static class ElementChangeListener 
+		implements IElementChangedListener
+	{
+		ThreadLocal<ElementChangeProcessor> elementChangeProcessor = new ThreadLocal<ElementChangeProcessor>();
+		
+		ElementChangeListener() {
+			super();
+		}
+		
+		public void elementChanged(ElementChangedEvent event) {
+			this.getElementChangeProcessor().elementChanged(event);
+		}
+		
+		public ElementChangeProcessor getElementChangeProcessor() {
+			ElementChangeProcessor processor = this.elementChangeProcessor.get();
+			if (processor == null) {
+				processor = new ElementChangeProcessor();
+				this.elementChangeProcessor.set(processor);
+			}
+			return processor;
+		}
+
+		private static class ElementChangeProcessor {
+			ElementChangeProcessor() {
+				super();
+			}
+			public void elementChanged(ElementChangedEvent event) {
+				JpaModelManager.instance().model.handleEvent(event);
+			}
+		}
+	}
+	
+	
+	// ********** preferences listener **********	
+
 	private static class PreferencesListener
 		implements IPropertyChangeListener
 	{
@@ -542,10 +584,11 @@
 				try {
 					JavaCore.setClasspathVariable("DEFAULT_JPA_LIB", new Path((String) event.getNewValue()), null);
 				}
-				catch (JavaModelException jme) {
-					JptCorePlugin.log(jme);
+				catch (JavaModelException ex) {
+					JptCorePlugin.log(ex);
 				}
 			}
 		}
 	}
+
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaPlatformRegistry.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaPlatformRegistry.java
index 7e396d8..a0818cd 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaPlatformRegistry.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaPlatformRegistry.java
@@ -25,8 +25,16 @@
 
 public class JpaPlatformRegistry 
 {
-	public static final JpaPlatformRegistry INSTANCE = new JpaPlatformRegistry();
+	// singleton
+	private static final JpaPlatformRegistry INSTANCE = new JpaPlatformRegistry();
 	
+	/**
+	 * Return the singleton.
+	 */
+	public static JpaPlatformRegistry instance() {
+		return INSTANCE;
+	}
+
 	private static final String EXTENSION_ID = 
 		"jpaPlatform"; //$NON-NLS-1$
 	
@@ -98,7 +106,7 @@
 	 *     IJpaProject, either when creating the project, or when changing the 
 	 *     platform.
 	 */
-	public IJpaPlatform getJpaPlatform(String id) {
+	public IJpaPlatform jpaPlatform(String id) {
 		IConfigurationElement registeredConfigElement = this.jpaPlatforms.get(id);
 		
 		if (registeredConfigElement == null) {
@@ -129,7 +137,7 @@
 	 * Return the label for the platform with the given id.
 	 * This does not load the platform's plugin classes.
 	 */
-	public String getJpaPlatformLabel(String id) {
+	public String jpaPlatformLabel(String id) {
 		return jpaPlatforms.get(id).getAttribute(AT_LABEL);
 	}
 	
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java
index 5eadeb8..6276876 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java
@@ -1,14 +1,15 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies 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.internal;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
@@ -23,7 +24,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.content.IContentType;
 import org.eclipse.core.runtime.jobs.IJobChangeEvent;
 import org.eclipse.core.runtime.jobs.IJobChangeListener;
 import org.eclipse.core.runtime.jobs.Job;
@@ -46,6 +49,9 @@
 import org.eclipse.jpt.core.internal.platform.IContext;
 import org.eclipse.jpt.db.internal.ConnectionProfile;
 import org.eclipse.jpt.db.internal.JptDbPlugin;
+import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.CommandExecutor;
+import org.eclipse.jpt.utility.internal.CommandExecutorProvider;
 import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
 import org.eclipse.jst.j2ee.internal.J2EEConstants;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
@@ -144,6 +150,12 @@
 	boolean resynching = false;
 
 	/**
+	 * Flag to indicate that the disposing job has been scheduled or is running
+	 * (or has been run, in some cases)
+	 */
+	boolean disposing = false;
+
+	/**
 	 * Flag to indicate that the resynchJob needs to be run.  This is
 	 * set to true if resynching = true so that the next time the job completes
 	 * it will be run again. 
@@ -158,27 +170,36 @@
 
 	private IJobChangeListener resynchJobListener;
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated NOT
-	 */
-	protected JpaProject() {
+	private CommandExecutorProvider modifySharedDocumentCommandExecutorProvider;
+
+	private ThreadLocal<CommandExecutor> threadLocalModifySharedDocumentCommandExecutor = new ThreadLocal<CommandExecutor>();
+
+	JpaProject() {
 		super();
+	}
+
+	protected JpaProject(IProject project) {
+		this();
+		this.project = project;
 		this.resynchJob = buildResynchJob();
 		this.resynchJobListener = buildResynchJobListener();
 		Job.getJobManager().addJobChangeListener(this.resynchJobListener);
 	}
 
 	private Job buildResynchJob() {
-		return new Job("Resynching JPA model ...") {
+		Job job = new Job("Resynching JPA model ...") {
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				IContext contextHierarchy = getPlatform().buildProjectContext();
+				long start = System.currentTimeMillis();
 				getPlatform().resynch(contextHierarchy);
+				long end = System.currentTimeMillis();
+				System.out.println((end - start) + " ms - resynch");
 				return Status.OK_STATUS;
 			}
 		};
+		job.setRule(project);
+		return job;
 	}
 
 	private IJobChangeListener buildResynchJobListener() {
@@ -187,8 +208,11 @@
 			public void done(IJobChangeEvent event) {
 				super.done(event);
 				if (event.getJob() == JpaProject.this.resynchJob) {
-					JpaProject.this.resynching = false;
-					if (JpaProject.this.needsToResynch) {
+					resynching = false;
+					if (event.getResult().matches(IStatus.CANCEL)) {
+						needsToResynch = false;
+					}
+					else if (needsToResynch) {
 						resynch();
 					}
 				}
@@ -213,10 +237,6 @@
 		return project;
 	}
 
-	void setProject(IProject theProject) {
-		project = theProject;
-	}
-
 	public IJavaProject getJavaProject() {
 		return JavaCore.create(getProject());
 	}
@@ -277,7 +297,7 @@
 	 * @see IJpaProject#setPlatform(String)
 	 */
 	public void setPlatform(String platformId) {
-		setPlatform(JpaPlatformRegistry.INSTANCE.getJpaPlatform(platformId));
+		setPlatform(JpaPlatformRegistry.instance().jpaPlatform(platformId));
 	}
 
 	/**
@@ -484,6 +504,7 @@
 		if (filled) {
 			return;
 		}
+		long start = System.currentTimeMillis();
 		IResourceProxyVisitor visitor = new IResourceProxyVisitor() {
 			public boolean visit(IResourceProxy resource) throws CoreException {
 				switch (resource.getType()) {
@@ -501,24 +522,21 @@
 			}
 		};
 		getProject().accept(visitor, IResource.NONE);
-		resynch();
+		long end = System.currentTimeMillis();
+		System.out.println(end - start + " ms - fill");
 		filled = true;
+		resynch();
 	}
 
 	/**
 	 * @see IJpaProject#getJpaFile(IFile)
 	 */
 	public synchronized IJpaFile getJpaFile(IFile file) {
-		IJpaFile jpaFile = getJpaFileInternal(file);
-		if (jpaFile != null) {
+		IJpaFile jpaFile = this.getJpaFileInternal(file);
+		if (this.filled) {
 			return jpaFile;
 		}
-		else if (!filled) {
-			return createJpaFile(file);
-		}
-		else {
-			return null;
-		}
+		return (jpaFile != null) ? jpaFile : this.createJpaFile(file);
 	}
 
 	synchronized IJpaFile getJpaFileInternal(IFile file) {
@@ -563,22 +581,29 @@
 
 	/**
 	 * INTERNAL ONLY
-	 * Dispose of project before it is removed
+	 * Dispose and remove project
 	 */
 	void dispose() {
-		for (Iterator<IJpaFile> stream = new CloneIterator<IJpaFile>(getFiles()); stream.hasNext();) {
-			disposeFile((JpaFile) stream.next());
-		}
-		Job.getJobManager().removeJobChangeListener(this.resynchJobListener);
+		if (disposing)
+			return;
+		disposing = true;
+		Job job = new Job("Disposing JPA project ...") {
+			@Override
+			protected IStatus run(IProgressMonitor monitor) {
+				dispose_();
+				return Status.OK_STATUS;
+			}
+		};
+		job.setRule(project);
+		job.schedule();
 	}
 
-	/**
-	 * INTERNAL ONLY
-	 * Dispose file and remove it
-	 */
-	void disposeFile(JpaFile jpaFile) {
-		jpaFile.dispose();
-		getFiles().remove(jpaFile);
+	private void dispose_() {
+		Job.getJobManager().removeJobChangeListener(resynchJobListener);
+		for (IJpaFile jpaFile : CollectionTools.collection(getFiles())) {
+			((JpaFile) jpaFile).dispose();
+		}
+		((JpaModel) getModel()).getProjects().remove(this);
 	}
 
 	/**
@@ -609,7 +634,7 @@
 						case IResourceDelta.REMOVED :
 							JpaFile jpaFile = (JpaFile) getJpaFile(file);
 							if (jpaFile != null) {
-								disposeFile(jpaFile);
+								jpaFile.dispose();
 								JpaProject.this.resynch();//TODO different api for this?
 							}
 							break;
@@ -622,16 +647,41 @@
 		};
 	}
 
+	// PWFTODO 
+	// Return a NullPersistenceFile if no content found?
 	synchronized IJpaFile createJpaFile(IFile file) {
-		if (!JavaCore.create(getProject()).isOnClasspath(file)) {
+		if (!JavaCore.create(this.project).isOnClasspath(file)) {
 			return null;
 		}
-		IJpaFile jpaFile = JpaFileContentRegistry.getFile(this, file);
-		// PWFTODO 
-		// Return a NullPersistenceFile if no content found?
-		if (jpaFile != null) {
-			getFiles().add(jpaFile);
-			return jpaFile;
+		IContentType contentType = this.contentType(file);
+		if (contentType == null) {
+			return null;
+		}
+		String contentTypeId = contentType.getId();
+		IJpaFileContentProvider provider = this.getPlatform().fileContentProvider(contentTypeId);
+		if (provider == null) {
+			return null;
+		}
+		JpaFile jpaFile = JpaCoreFactory.eINSTANCE.createJpaFile();
+		this.getFiles().add(jpaFile);
+		jpaFile.setFile(file);
+		jpaFile.setContentId(contentTypeId);
+		provider.buildRootContent(jpaFile);
+		return jpaFile;
+	}
+
+	//attempting to get the contentType based on the file contents.
+	//have to check the file contents instead of just the file name
+	//because for xml we base it on the rootElement name
+	private IContentType contentType(IFile file) {
+		try {
+			return Platform.getContentTypeManager().findContentTypeFor(file.getContents(), file.getName());
+		}
+		catch (IOException ex) {
+			JptCorePlugin.log(ex);
+		}
+		catch (CoreException ex) {
+			JptCorePlugin.log(ex);
 		}
 		return null;
 	}
@@ -659,6 +709,9 @@
 	//passing it on to the JpaModel.  We don't currently support
 	//multiple projects having cross-references
 	public void resynch() {
+		//don't resynch until the project is filled
+		if (disposing || !filled)
+			return;
 		if (!this.resynching) {
 			this.resynching = true;
 			this.needsToResynch = false;
@@ -775,9 +828,6 @@
 		return super.eIsSet(featureID);
 	}
 
-	/**
-	 * @generated NOT
-	 */
 	@Override
 	public String toString() {
 		StringBuffer result = new StringBuffer(super.toString());
@@ -785,8 +835,39 @@
 		return result.toString();
 	}
 
+	@Override
 	public ConnectionProfile connectionProfile() {
 		String profileName = getDataSource().getConnectionProfileName();
 		return JptDbPlugin.getDefault().getConnectionProfileRepository().profileNamed(profileName);
 	}
+
+	public CommandExecutor getThreadLocalModifySharedDocumentCommandExecutor() {
+		CommandExecutor commandExecutor = this.threadLocalModifySharedDocumentCommandExecutor.get();
+		return (commandExecutor != null) ? commandExecutor : CommandExecutor.Default.instance();
+	}
+
+	public void setThreadLocalModifySharedDocumentCommandExecutor(CommandExecutor commandExecutor) {
+		this.threadLocalModifySharedDocumentCommandExecutor.set(commandExecutor);
+	}
+
+	public CommandExecutorProvider modifySharedDocumentCommandExecutorProvider() {
+		if (this.modifySharedDocumentCommandExecutorProvider == null) {
+			this.modifySharedDocumentCommandExecutorProvider = new ModifySharedDocumentCommandExecutorProvider();
+		}
+		return this.modifySharedDocumentCommandExecutorProvider;
+	}
+
+
+	// ********** member class **********
+	private class ModifySharedDocumentCommandExecutorProvider
+		implements CommandExecutorProvider
+	{
+		ModifySharedDocumentCommandExecutorProvider() {
+			super();
+		}
+
+		public CommandExecutor commandExecutor() {
+			return JpaProject.this.getThreadLocalModifySharedDocumentCommandExecutor();
+		}
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCorePlugin.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCorePlugin.java
index 2db5675..38c4298 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCorePlugin.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JptCorePlugin.java
@@ -27,19 +27,19 @@
 	 * The plug-in identifier of the persistence support
 	 * (value <code>"org.eclipse.jpt.core"</code>).
 	 */
-	public final static String PLUGIN_ID = "org.eclipse.jpt.core";  //$NON-NLS-1$
+	public static final String PLUGIN_ID = "org.eclipse.jpt.core";  //$NON-NLS-1$
 	
 	/**
 	 * The identifier for the JPA facet
 	 * (value <code>"jpt.jpa"</code>).
 	 */
-	public final static String FACET_ID = "jpt.jpa";  //$NON-NLS-1$
+	public static final String FACET_ID = "jpt.jpa";  //$NON-NLS-1$
 	
 	/**
 	 * The identifier for the JPA validation marker
 	 * (value <code>"org.eclipse.jpt.core.jpaProblemMarker"</code>).
 	 */
-	public final static String VALIDATION_MARKER_ID = PLUGIN_ID + ".jpaProblemMarker";
+	public static final String VALIDATION_MARKER_ID = PLUGIN_ID + ".jpaProblemMarker";
 	
 	/**
 	 * Value of the content-type for orm.xml mappings files. Use this value to retrieve 
@@ -53,6 +53,13 @@
 	public static final String PERSISTENCE_XML_CONTENT_TYPE = PLUGIN_ID + ".content.persistence"; //$NON-NLS-1$
 
 	public static final String JAVA_CONTENT_TYPE = JavaCore.JAVA_SOURCE_CONTENT_TYPE;
+
+	/**
+	 * Return the current workspace's model manager.
+	 */
+	private static JpaModelManager modelManager() {
+		return JpaModelManager.instance();
+	}
 	
 	/**
 	 * Returns the singular IJpaModel corresponding to the current workspace.
@@ -60,7 +67,7 @@
 	 * @return the singular IJpaModel corresponding to the current workspace.
 	 */
 	public static IJpaModel getJpaModel() {
-		return JpaModelManager.instance().getJpaModel();
+		return modelManager().getJpaModel();
 	}
 	
 	/**
@@ -74,7 +81,7 @@
 	 * IJpaProject
 	 */
 	public static IJpaProject getJpaProject(IProject project) {
-		return JpaModelManager.instance().getJpaProject(project);
+		return modelManager().getJpaProject(project);
 	}
 	
 	/**
@@ -88,7 +95,7 @@
 	 * IJpaFile
 	 */
 	public static IJpaFile getJpaFile(IFile file) {
-		return JpaModelManager.instance().getJpaFile(file);
+		return modelManager().getJpaFile(file);
 	}
 	
 	/**
@@ -109,10 +116,15 @@
 	public static void log(Throwable throwable) {
 		log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, throwable.getLocalizedMessage(), throwable));
 	}
-	
-	
+
+
+	// ********** plug-in implementation **********
+
 	public JptCorePlugin() {
 		super();
+		if (INSTANCE != null) {
+			throw new IllegalStateException();
+		}
 		INSTANCE = this;
 	}
 	
@@ -120,7 +132,7 @@
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
-		JpaModelManager.instance().startup();
+		modelManager().start();
 		OrmInit.init();
 		PersistenceInit.init();
 	}
@@ -128,7 +140,7 @@
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		try {
-			JpaModelManager.instance().shutdown();
+			modelManager().stop();
 		}
 		finally {
 			super.stop(context);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/NullTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/NullTypeMapping.java
index 01dbd3b..c60025b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/NullTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/NullTypeMapping.java
@@ -13,6 +13,7 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.jdt.core.ElementChangedEvent;
+import org.eclipse.jpt.core.internal.mappings.ITable;
 import org.eclipse.jpt.db.internal.Schema;
 import org.eclipse.jpt.db.internal.Table;
 import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
@@ -213,15 +214,15 @@
 
 	public void javaElementChanged(ElementChangedEvent event) {}
 
-	public Iterator associatedTableNamesIncludingInherited() {
+	public Iterator<String> associatedTableNamesIncludingInherited() {
 		return EmptyIterator.instance();
 	}
 
-	public Iterator associatedTables() {
+	public Iterator<ITable> associatedTables() {
 		return EmptyIterator.instance();
 	}
 
-	public Iterator associatedTablesIncludingInherited() {
+	public Iterator<ITable> associatedTablesIncludingInherited() {
 		return EmptyIterator.instance();
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IDefaultJavaAttributeMappingProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IDefaultJavaAttributeMappingProvider.java
new file mode 100644
index 0000000..017fbd6
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IDefaultJavaAttributeMappingProvider.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * 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
+ ******************************************************************************/
+package org.eclipse.jpt.core.internal.content.java;
+
+import org.eclipse.jpt.core.internal.jdtutility.Attribute;
+import org.eclipse.jpt.core.internal.platform.DefaultsContext;
+
+/**
+ * Map a string key to an attribute mapping and its corresponding
+ * Java annotation adapter.  
+ */
+public interface IDefaultJavaAttributeMappingProvider extends IJavaAttributeMappingProvider {
+
+	/**
+	 * Given the Attribute and DefaultContext return whether the default mapping applies.
+	 * This will be used to determine the default mapping in the case where no 
+	 * mapping has been specified.
+	 * @param attribute
+	 * @param defaultsContext
+	 * @return
+	 */
+	boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext);
+
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaAttributeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaAttributeMapping.java
index 918f77c..5b2f5ca 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaAttributeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaAttributeMapping.java
@@ -27,18 +27,6 @@
  */
 public interface IJavaAttributeMapping extends IAttributeMapping
 {
-	/**
-	 * <!-- begin-user-doc -->
-	 * Initialize the model after the AttributeMapping has been
-	 * created and added to its container.  Some things
-	 * can't be accessed.  Build anything that doesn't depend
-	 * on resources throughout the model being built.
-	 * <!-- end-user-doc -->
-	 * @model
-	 * @generated
-	 */
-	void initialize();
-
 	void updateFromJava(CompilationUnit astRoot);
 
 	/**
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaAttributeMappingProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaAttributeMappingProvider.java
index ff71764..16ad84e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaAttributeMappingProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaAttributeMappingProvider.java
@@ -9,9 +9,9 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * Map a string key to an attribute mapping and its corresponding
@@ -19,11 +19,19 @@
  */
 public interface IJavaAttributeMappingProvider {
 
+	/**
+	 * A unique String that corresponds to the IJavaAttributeMapping key 
+	 */
 	String key();
 
-	boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext);
-
-	IJavaAttributeMapping buildMapping(Attribute attribute);
+	/**
+	 * Create an IJavaAttributeMapping for the given attribute.  Use the IJpaFactory
+	 * for creation so that extenders can create their own IJpaFactory instead of 
+	 * creating their own attributeMappingProvider.
+	 * @param attribute
+	 * @param jpaFactory
+	 */
+	IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory jpaFactory);
 
 	DeclarationAnnotationAdapter declarationAnnotationAdapter();
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaTypeMapping.java
index 4a96464..8b99b4f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaTypeMapping.java
@@ -26,14 +26,6 @@
  */
 public interface IJavaTypeMapping extends ITypeMapping
 {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model
-	 * @generated
-	 */
-	void initialize();
-
 	void updateFromJava(CompilationUnit astRoot);
 
 	/**
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaTypeMappingProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaTypeMappingProvider.java
index 9f34675..b214120 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaTypeMappingProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/IJavaTypeMappingProvider.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.Type;
 
@@ -18,9 +19,19 @@
  */
 public interface IJavaTypeMappingProvider {
 
+	/**
+	 * A unique String that corresponds to the IJavaTypeMapping key 
+	 */
 	String key();
 
-	IJavaTypeMapping buildMapping(Type type);
+	/**
+	 * Create an IJavaTypeMapping for the given attribute.  Use the IJpaFactory
+	 * for creation so that extenders can create their own IJpaFactory instead of 
+	 * creating their own typeMappingProvider.
+	 * @param type
+	 * @param jpaFactory
+	 */
+	IJavaTypeMapping buildMapping(Type type, IJpaFactory factory);
 
 	DeclarationAnnotationAdapter declarationAnnotationAdapter();
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaJpaFileContentProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaJpaFileContentProvider.java
index 27c561b..3aaed9b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaJpaFileContentProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaJpaFileContentProvider.java
@@ -1,33 +1,42 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies 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.internal.content.java;
 
-import org.eclipse.core.resources.IFile;
+import org.eclipse.jpt.core.internal.IJpaFile;
 import org.eclipse.jpt.core.internal.IJpaFileContentProvider;
 import org.eclipse.jpt.core.internal.IJpaRootContentNode;
 import org.eclipse.jpt.core.internal.JptCorePlugin;
 
 public class JavaJpaFileContentProvider implements IJpaFileContentProvider
 {
-	public static JavaJpaFileContentProvider INSTANCE = new JavaJpaFileContentProvider();
+	//singleton
+	private static final JavaJpaFileContentProvider INSTANCE = new JavaJpaFileContentProvider();
 	
 	/**
+	 * Return the singleton.
+	 */
+	public static IJpaFileContentProvider instance() {
+		return INSTANCE;
+	}
+
+	/**
 	 * Restrict access
 	 */
 	private JavaJpaFileContentProvider() {
 		super();
 	}
 	
-	public IJpaRootContentNode buildRootContent(IFile resourceFile) {
+	public IJpaRootContentNode buildRootContent(IJpaFile jpaFile) {
 		JpaCompilationUnit content = JpaJavaFactory.eINSTANCE.createJpaCompilationUnit();
-		content.setFile(resourceFile);
+		jpaFile.setContent(content);
+		content.setFile(jpaFile.getFile());
 		return content;
 	}
 	
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentAttribute.java
index 073e2d8..25596bf 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentAttribute.java
@@ -9,9 +9,8 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java;
 
-import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.List;
+import java.util.ListIterator;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
@@ -25,23 +24,11 @@
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.ITypeMapping;
 import org.eclipse.jpt.core.internal.JpaCorePackage;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaBasicProvider;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbeddedIdProvider;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbeddedProvider;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaIdProvider;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaManyToManyProvider;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaManyToOneProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaNullAttributeMappingProvider;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaOneToManyProvider;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaOneToOneProvider;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaTransientProvider;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaVersionProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 import org.eclipse.jpt.utility.internal.Filter;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
 
 /**
  * <!-- begin-user-doc -->
@@ -85,16 +72,6 @@
 
 	private Attribute attribute;
 
-	// TODO move these to the platform
-	private IJavaAttributeMappingProvider[] attributeMappingProviders;
-
-	/**
-	 * the "null" attribute mapping is used when the attribute is neither
-	 * modified with a mapping annotation nor mapped by a "default" mapping
-	 */
-	// TODO move this to the platform
-	private IJavaAttributeMappingProvider nullAttributeMappingProvider;
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -107,36 +84,23 @@
 	protected JavaPersistentAttribute(Attribute attribute) {
 		super();
 		this.attribute = attribute;
-		this.attributeMappingProviders = this.buildAttributeMappingProviders();
-		this.nullAttributeMappingProvider = this.buildNullAttributeMappingProvider();
-		this.setDefaultMapping(this.nullAttributeMappingProvider.buildMapping(this.attribute));
+		//no access to the jpaFactory() in the constructor because the parent is not set yet
+		this.setDefaultMapping(this.nullAttributeMappingProvider().buildMapping(this.attribute, null));
 	}
 
-	private IJavaAttributeMappingProvider[] buildAttributeMappingProviders() {
-		List<IJavaAttributeMappingProvider> providers = new ArrayList<IJavaAttributeMappingProvider>();
-		this.addAttributeMappingProvidersTo(providers);
-		return providers.toArray(new IJavaAttributeMappingProvider[providers.size()]);
+	private Iterator<IJavaAttributeMappingProvider> attributeMappingProviders() {
+		return jpaPlatform().javaAttributeMappingProviders();
+	}
+
+	private ListIterator<IDefaultJavaAttributeMappingProvider> defaultAttributeMappingProviders() {
+		return jpaPlatform().defaultJavaAttributeMappingProviders();
 	}
 
 	/**
-	 * Override this to specify more or different attribute mapping providers.
-	 * The default includes the JPA spec-defined type mappings of 
-	 * Basic, Id, OneToOne, OneToMany, ManyToOne, ManyToMany, Embeddable, EmbeddedId.
+	 * the "null" attribute mapping is used when the attribute is neither
+	 * modified with a mapping annotation nor mapped by a "default" mapping
 	 */
-	protected void addAttributeMappingProvidersTo(List<IJavaAttributeMappingProvider> providers) {
-		providers.add(JavaEmbeddedProvider.instance()); //bug 190344 need to test default embedded before basic
-		providers.add(JavaBasicProvider.instance());
-		providers.add(JavaIdProvider.instance());
-		providers.add(JavaTransientProvider.instance());
-		providers.add(JavaOneToManyProvider.instance());
-		providers.add(JavaManyToOneProvider.instance());
-		providers.add(JavaManyToManyProvider.instance());
-		providers.add(JavaOneToOneProvider.instance());
-		providers.add(JavaEmbeddedIdProvider.instance());
-		providers.add(JavaVersionProvider.instance());
-	}
-
-	protected IJavaAttributeMappingProvider buildNullAttributeMappingProvider() {
+	protected IJavaAttributeMappingProvider nullAttributeMappingProvider() {
 		return JavaNullAttributeMappingProvider.instance();
 	}
 
@@ -471,12 +435,12 @@
 		}
 		else {
 			// add or replace mapping annotation
-			this.setSpecifiedMapping(this.attributeMappingProviderFor(newKey).buildMapping(this.attribute));
+			this.setSpecifiedMapping(this.attributeMappingProvider(newKey).buildMapping(this.attribute, jpaFactory()));
 			if (oldKey != null) {
 				this.attribute.removeAnnotation(this.declarationAnnotationAdapterForAttributeMappingKey(oldKey));
 			}
 			this.attribute.newMarkerAnnotation(this.declarationAnnotationAdapterForAttributeMappingKey(newKey));
-			this.specifiedMapping.initialize();
+			this.specifiedMapping.updateFromJava(getAttribute().astRoot());
 		}
 		if (this.eNotificationRequired()) {
 			this.eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaPackage.JAVA_PERSISTENT_ATTRIBUTE__MAPPING, old, this.getMapping()));
@@ -484,28 +448,14 @@
 	}
 
 	private DeclarationAnnotationAdapter declarationAnnotationAdapterForAttributeMappingKey(String attributeMappingKey) {
-		return this.attributeMappingProviderFor(attributeMappingKey).declarationAnnotationAdapter();
+		return this.attributeMappingProvider(attributeMappingKey).declarationAnnotationAdapter();
 	}
 
 	/**
 	 * throw an exception if the provider is not found
 	 */
-	private IJavaAttributeMappingProvider attributeMappingProviderFor(String attributeMappingKey) {
-		for (IJavaAttributeMappingProvider provider : this.attributeMappingProviders) {
-			if (provider.key() == attributeMappingKey) {
-				return provider;
-			}
-		}
-		throw new IllegalArgumentException("Unsupported attribute mapping key: " + attributeMappingKey);
-	}
-
-	public Iterator<String> candidateMappingKeys() {
-		return new TransformationIterator<IJavaAttributeMappingProvider, String>(new ArrayIterator<IJavaAttributeMappingProvider>(this.attributeMappingProviders)) {
-			@Override
-			protected String transform(IJavaAttributeMappingProvider provider) {
-				return provider.key();
-			}
-		};
+	private IJavaAttributeMappingProvider attributeMappingProvider(String attributeMappingKey) {
+		return jpaPlatform().javaAttributeMappingProvider(attributeMappingKey);
 	}
 
 	public Object getId() {
@@ -559,8 +509,7 @@
 			}
 			else {
 				// the mapping has changed
-				this.setSpecifiedMapping(javaProvider.buildMapping(this.attribute));
-				this.specifiedMapping.initialize();
+				this.setSpecifiedMapping(javaProvider.buildMapping(this.attribute, jpaFactory()));
 			}
 			if (this.eNotificationRequired()) {
 				this.eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaPackage.JAVA_PERSISTENT_ATTRIBUTE__MAPPING, old, this.getMapping()));
@@ -575,7 +524,8 @@
 	 * return null if we can't find a mapping annotation on the attribute
 	 */
 	private IJavaAttributeMappingProvider javaAttributeMappingProvider(CompilationUnit astRoot) {
-		for (IJavaAttributeMappingProvider provider : this.attributeMappingProviders) {
+		for (Iterator<IJavaAttributeMappingProvider> i = this.attributeMappingProviders(); i.hasNext();) {
+			IJavaAttributeMappingProvider provider = i.next();
 			if (this.attribute.containsAnnotation(provider.declarationAnnotationAdapter(), astRoot)) {
 				return provider;
 			}
@@ -614,8 +564,8 @@
 		}
 		// the "default" mapping has changed
 		IJavaAttributeMapping old = this.getMapping();
-		this.setDefaultMapping(defaultProvider.buildMapping(this.attribute));
-		this.defaultMapping.updateFromJava(this.attribute.astRoot());
+		this.setDefaultMapping(defaultProvider.buildMapping(this.attribute, jpaFactory()));
+		this.defaultMapping.updateFromJava(defaultsContext.astRoot());
 		if (this.eNotificationRequired()) {
 			this.eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaPackage.JAVA_PERSISTENT_ATTRIBUTE__MAPPING, old, this.getMapping()));
 		}
@@ -626,12 +576,13 @@
 	 * return the null provider if we can't find a provider
 	 */
 	private IJavaAttributeMappingProvider defaultAttributeMappingProvider(DefaultsContext defaultsContext) {
-		for (IJavaAttributeMappingProvider provider : this.attributeMappingProviders) {
+		for (Iterator<IDefaultJavaAttributeMappingProvider> i = this.defaultAttributeMappingProviders(); i.hasNext();) {
+			IDefaultJavaAttributeMappingProvider provider = i.next();
 			if (provider.defaultApplies(this.attribute, defaultsContext)) {
 				return provider;
 			}
 		}
-		return this.nullAttributeMappingProvider;
+		return this.nullAttributeMappingProvider();
 	}
 
 	public boolean isOverridableAttribute() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentType.java
index 7d8620d..8266ee9 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentType.java
@@ -27,6 +27,7 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jpt.core.internal.AccessType;
 import org.eclipse.jpt.core.internal.IJpaContentNode;
 import org.eclipse.jpt.core.internal.IPersistentAttribute;
@@ -37,19 +38,15 @@
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaAttributeOverride;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaBasic;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbeddableProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbedded;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbeddedId;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaEntityProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaGeneratedValue;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaId;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaJoinColumn;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaJoinTable;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaManyToMany;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaManyToOne;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaMappedSuperclassProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaMultiRelationshipMapping;
-import org.eclipse.jpt.core.internal.content.java.mappings.JavaNullTypeMappingProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaOneToMany;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaOneToOne;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaPrimaryKeyJoinColumn;
@@ -61,12 +58,11 @@
 import org.eclipse.jpt.core.internal.jdtutility.AttributeAnnotationTools;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.FieldAttribute;
-import org.eclipse.jpt.core.internal.jdtutility.JDTTools;
 import org.eclipse.jpt.core.internal.jdtutility.MethodAttribute;
 import org.eclipse.jpt.core.internal.jdtutility.Type;
 import org.eclipse.jpt.core.internal.platform.DefaultsContext;
+import org.eclipse.jpt.utility.internal.CommandExecutorProvider;
 import org.eclipse.jpt.utility.internal.Filter;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
 import org.eclipse.jpt.utility.internal.iterators.ChainIterator;
 import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
 import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
@@ -155,8 +151,6 @@
 
 	private Type type;
 
-	private IJavaTypeMappingProvider[] typeMappingProviders;
-
 	private DeclarationAnnotationAdapter[] attributeMappingAnnotationAdapters;
 
 	/**
@@ -178,28 +172,9 @@
 
 	protected JavaPersistentType() {
 		super();
-		this.typeMappingProviders = this.buildTypeMappingProviders();
 		this.attributeMappingAnnotationAdapters = this.buildAttributeMappingAnnotationAdapters();
 	}
 
-	private IJavaTypeMappingProvider[] buildTypeMappingProviders() {
-		ArrayList<IJavaTypeMappingProvider> providers = new ArrayList<IJavaTypeMappingProvider>();
-		this.addTypeMappingProvidersTo(providers);
-		return providers.toArray(new IJavaTypeMappingProvider[providers.size()]);
-	}
-
-	/**
-	 * Override this to specify more or different type mapping providers.
-	 * The default includes the JPA spec-defined type mappings of 
-	 * Entity, MappedSuperclass, and Embeddable
-	 */
-	protected void addTypeMappingProvidersTo(Collection<IJavaTypeMappingProvider> providers) {
-		providers.add(JavaNullTypeMappingProvider.instance());
-		providers.add(JavaEntityProvider.instance());
-		providers.add(JavaMappedSuperclassProvider.instance());
-		providers.add(JavaEmbeddableProvider.instance());
-	}
-
 	private DeclarationAnnotationAdapter[] buildAttributeMappingAnnotationAdapters() {
 		ArrayList<DeclarationAnnotationAdapter> adapters = new ArrayList<DeclarationAnnotationAdapter>();
 		this.addAttributeMappingAnnotationAdaptersTo(adapters);
@@ -369,16 +344,15 @@
 	}
 
 	private DeclarationAnnotationAdapter annotationAdapterForTypeMappingKey(String typeMappingKey) {
-		return this.typeMappingProviderFor(typeMappingKey).declarationAnnotationAdapter();
+		return this.typeMappingProvider(typeMappingKey).declarationAnnotationAdapter();
 	}
 
-	private IJavaTypeMappingProvider typeMappingProviderFor(String typeMappingKey) {
-		for (IJavaTypeMappingProvider provider : this.typeMappingProviders) {
-			if (provider.key() == typeMappingKey) {
-				return provider;
-			}
-		}
-		throw new IllegalArgumentException("Unsupported type mapping key: " + typeMappingKey);
+	protected Iterator<IJavaTypeMappingProvider> typeMappingProviders() {
+		return jpaPlatform().javaTypeMappingProviders();
+	}
+
+	private IJavaTypeMappingProvider typeMappingProvider(String typeMappingKey) {
+		return jpaPlatform().javaTypeMappingProvider(typeMappingKey);
 	}
 
 	/**
@@ -599,8 +573,15 @@
 		return result.toString();
 	}
 
+	/**
+	 * delegate to the type's project (there is one provider per project)
+	 */
+	private CommandExecutorProvider modifySharedDocumentCommandExecutorProvider() {
+		return this.getJpaProject().modifySharedDocumentCommandExecutorProvider();
+	}
+
 	public void setJdtType(IType iType, CompilationUnit astRoot) {
-		this.type = new Type(iType);
+		this.type = new Type(iType, this.modifySharedDocumentCommandExecutorProvider());
 		this.setAccess(this.javaAccessType(astRoot));
 		this.createAndSetPersistentTypeMappingFromJava(this.javaTypeMappingKey(astRoot));
 	}
@@ -614,10 +595,10 @@
 	public JavaPersistentAttribute createJavaPersistentAttribute(IMember member) {
 		Attribute attribute = null;
 		if (member instanceof IField) {
-			attribute = new FieldAttribute((IField) member);
+			attribute = new FieldAttribute((IField) member, this.modifySharedDocumentCommandExecutorProvider());
 		}
 		else if (member instanceof IMethod) {
-			attribute = new MethodAttribute((IMethod) member);
+			attribute = new MethodAttribute((IMethod) member, this.modifySharedDocumentCommandExecutorProvider());
 		}
 		else {
 			throw new IllegalArgumentException();
@@ -631,7 +612,7 @@
 	}
 
 	private IJavaTypeMapping buildJavaTypeMapping(String key) {
-		return this.typeMappingProviderFor(key).buildMapping(this.type);
+		return this.typeMappingProvider(key).buildMapping(this.type, this.jpaFactory());
 	}
 
 	public Type getType() {
@@ -715,7 +696,8 @@
 	}
 
 	private String javaTypeMappingKey(CompilationUnit astRoot) {
-		for (IJavaTypeMappingProvider provider : this.typeMappingProviders) {
+		for (Iterator<IJavaTypeMappingProvider> i = this.typeMappingProviders(); i.hasNext();) {
+			IJavaTypeMappingProvider provider = i.next();
 			if (this.type.containsAnnotation(provider.declarationAnnotationAdapter(), astRoot)) {
 				return provider.key();
 			}
@@ -723,15 +705,6 @@
 		return null;
 	}
 
-	public Iterator<String> candidateMappingKeys() {
-		return new TransformationIterator<IJavaTypeMappingProvider, String>(new ArrayIterator<IJavaTypeMappingProvider>(this.typeMappingProviders)) {
-			@Override
-			protected String transform(IJavaTypeMappingProvider p) {
-				return p.key();
-			}
-		};
-	}
-
 	protected Iterator<JavaPersistentAttribute> attributesNamed(final String attributeName) {
 		return new FilteringIterator<JavaPersistentAttribute>(attributes()) {
 			@Override
@@ -814,7 +787,6 @@
 		return null;
 	}
 
-	//TODO CloneIterator
 	public Iterator<JavaPersistentAttribute> attributes() {
 		return new CloneIterator<JavaPersistentAttribute>(getAttributes());
 	}
@@ -885,7 +857,7 @@
 		boolean hasPersistableProperties = false;
 		for (IField field : AttributeAnnotationTools.persistableFields(jdtType)) {
 			hasPersistableFields = true;
-			FieldAttribute fa = new FieldAttribute(field);
+			FieldAttribute fa = new FieldAttribute(field, null); // a bit hacky...
 			if (fa.containsAnyAnnotation(this.attributeMappingAnnotationAdapters, astRoot)) {
 				// any field is annotated => FIELD
 				return AccessType.FIELD;
@@ -893,7 +865,7 @@
 		}
 		for (IMethod method : AttributeAnnotationTools.persistablePropertyGetters(jdtType)) {
 			hasPersistableProperties = true;
-			MethodAttribute ma = new MethodAttribute(method);
+			MethodAttribute ma = new MethodAttribute(method, null); // a bit hacky...
 			if (ma.containsAnyAnnotation(this.attributeMappingAnnotationAdapters, astRoot)) {
 				// none of the fields are annotated and a getter is annotated => PROPERTY
 				return AccessType.PROPERTY;
@@ -911,27 +883,27 @@
 	}
 
 	private void refreshParentPersistentType(DefaultsContext context) {
-		String superclassTypeSignature = this.superclassTypeSignature();
-		if (superclassTypeSignature == null) {
-			this.parentPersistentType = null;
-			return;
+		ITypeBinding typeBinding = getType().typeBinding(context.astRoot());
+		this.parentPersistentType = parentPersistentType(context, typeBinding);
+	}
+
+	public static IPersistentType parentPersistentType(DefaultsContext context, ITypeBinding typeBinding) {
+		if (typeBinding == null) {
+			return null;
 		}
-		String fullyQualifiedTypeName = JDTTools.resolveSignature(superclassTypeSignature, this.jdtType());
-		if (fullyQualifiedTypeName == null) {
-			this.parentPersistentType = null;
-			return;
+		ITypeBinding superClassTypeBinding = typeBinding.getSuperclass();
+		if (superClassTypeBinding == null) {
+			return null;
 		}
+		String fullyQualifiedTypeName = superClassTypeBinding.getQualifiedName();
 		IPersistentType possibleParent = context.persistentType(fullyQualifiedTypeName);
 		if (possibleParent == null) {
 			//TODO look to superclass
-			this.parentPersistentType = null;
-			return;
+			return null;
 		}
 		if (possibleParent.getMappingKey() != null) {
-			this.parentPersistentType = possibleParent;
+			return possibleParent;
 		}
-		else {
-			this.parentPersistentType = possibleParent.parentPersistentType();
-		}
+		return possibleParent.parentPersistentType();
 	}
 }
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaCompilationUnit.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaCompilationUnit.java
index 1d8bdbc..11ce9ea 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaCompilationUnit.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaCompilationUnit.java
@@ -34,9 +34,9 @@
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.JpaCorePackage;
 import org.eclipse.jpt.core.internal.JpaFile;
-import org.eclipse.jpt.core.internal.jdtutility.ASTNodeTextRange;
 import org.eclipse.jpt.core.internal.jdtutility.AttributeAnnotationTools;
 import org.eclipse.jpt.core.internal.jdtutility.JDTTools;
+import org.eclipse.jpt.utility.internal.BitTools;
 import org.eclipse.jpt.utility.internal.Filter;
 import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
 
@@ -288,10 +288,6 @@
 		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
 	}
 
-	public ITextRange fullTextRange() {
-		return new ASTNodeTextRange(this.astRoot());
-	}
-
 	public ITextRange validationTextRange() {
 		return this.selectionTextRange();
 	}
@@ -378,8 +374,10 @@
 	}
 
 	private void synchCompilationUnitWithJavaDelta(IJavaElementDelta delta) {
-		// ignore changes to/from primary working copy - no content has changed
-		if ((delta.getFlags() & IJavaElementDelta.F_PRIMARY_WORKING_COPY) != 0) {
+		// ignore changes to/from primary working copy - no content has changed;
+		// and make sure there are no other flags set that indicate both a change to/from
+		// primary working copy AND content has changed
+		if (BitTools.onlyFlagIsSet(delta.getFlags(), IJavaElementDelta.F_PRIMARY_WORKING_COPY)) {
 			return;
 		}
 		// synchronize if the change is for this compilation unit
@@ -443,8 +441,8 @@
 		return EmptyIterator.instance();
 	}
 
-	public CompilationUnit astRoot() {
-		return JDTTools.createASTRoot(this.compilationUnit);
+	private CompilationUnit astRoot() {
+		return JDTTools.buildASTRoot(this.compilationUnit);
 	}
 
 	public void dispose() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaJavaFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaJavaFactory.java
index ff55bf5..240fbba 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaJavaFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaJavaFactory.java
@@ -42,7 +42,7 @@
 	 */
 	public static JpaJavaFactory init() {
 		try {
-			JpaJavaFactory theJpaJavaFactory = (JpaJavaFactory) EPackage.Registry.INSTANCE.getEFactory("jpt.java.xmi");
+			JpaJavaFactory theJpaJavaFactory = (JpaJavaFactory) EPackage.Registry.INSTANCE.getEFactory("http://org.eclipse.jpt.core/old_java.ecore");
 			if (theJpaJavaFactory != null) {
 				return theJpaJavaFactory;
 			}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaJavaPackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaJavaPackage.java
index d624b57..539f07f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaJavaPackage.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JpaJavaPackage.java
@@ -52,7 +52,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public static final String eNS_URI = "jpt.java.xmi";
+	public static final String eNS_URI = "http://org.eclipse.jpt.core/old_java.ecore";
 
 	/**
 	 * The package namespace name.
@@ -654,9 +654,7 @@
 		initEReference(getJavaPersistentAttribute_DefaultMapping(), this.getIJavaAttributeMapping(), null, "defaultMapping", null, 1, 1, JavaPersistentAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getJavaPersistentAttribute_SpecifiedMapping(), this.getIJavaAttributeMapping(), null, "specifiedMapping", null, 1, 1, JavaPersistentAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEClass(iJavaTypeMappingEClass, IJavaTypeMapping.class, "IJavaTypeMapping", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		addEOperation(iJavaTypeMappingEClass, null, "initialize", 0, 1, IS_UNIQUE, IS_ORDERED);
 		initEClass(iJavaAttributeMappingEClass, IJavaAttributeMapping.class, "IJavaAttributeMapping", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		addEOperation(iJavaAttributeMappingEClass, null, "initialize", 0, 1, IS_UNIQUE, IS_ORDERED);
 		// Create resource
 		createResource(eNS_URI);
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaBasic.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaBasic.java
new file mode 100644
index 0000000..5076220
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaBasic.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.IBasic;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Basic</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaBasic()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaBasic extends IJavaAttributeMapping, IBasic
+{} // IJavaBasic
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEmbeddable.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEmbeddable.java
new file mode 100644
index 0000000..46da23c
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEmbeddable.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
+import org.eclipse.jpt.core.internal.mappings.IEmbeddable;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Embeddable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEmbeddable()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaEmbeddable extends IJavaTypeMapping, IEmbeddable
+{} // IJavaEmbeddable
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEmbedded.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEmbedded.java
new file mode 100644
index 0000000..f92b980
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEmbedded.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.IEmbedded;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Embedded</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEmbedded()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaEmbedded extends IJavaAttributeMapping, IEmbedded
+{} // IJavaEmbedded
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEmbeddedId.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEmbeddedId.java
new file mode 100644
index 0000000..f1f53c9
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEmbeddedId.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.IEmbeddedId;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Embedded Id</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEmbeddedId()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaEmbeddedId extends IJavaAttributeMapping, IEmbeddedId
+{} // IJavaEmbeddedId
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEntity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEntity.java
new file mode 100644
index 0000000..ed775f7
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaEntity.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
+import org.eclipse.jpt.core.internal.mappings.IEntity;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Entity</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEntity()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaEntity extends IJavaTypeMapping, IEntity
+{} // IJavaEntity
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaId.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaId.java
new file mode 100644
index 0000000..1cf5cb0
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaId.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.IId;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Id</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaId()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaId extends IJavaAttributeMapping, IId
+{} // IJavaId
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaManyToMany.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaManyToMany.java
new file mode 100644
index 0000000..321f9bf
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaManyToMany.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.IManyToMany;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Many To Many</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaManyToMany()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaManyToMany extends IJavaAttributeMapping, IManyToMany
+{} // IJavaManyToMany
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaManyToOne.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaManyToOne.java
new file mode 100644
index 0000000..094266e
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaManyToOne.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.IManyToOne;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Many To One</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaManyToOne()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaManyToOne extends IJavaAttributeMapping, IManyToOne
+{} // IJavaManyToOne
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaMappedSuperclass.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaMappedSuperclass.java
new file mode 100644
index 0000000..3229645
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaMappedSuperclass.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
+import org.eclipse.jpt.core.internal.mappings.IMappedSuperclass;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Mapped Superclass</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaMappedSuperclass()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaMappedSuperclass
+	extends IJavaTypeMapping, IMappedSuperclass
+{} // IJavaMappedSuperclass
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaOneToMany.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaOneToMany.java
new file mode 100644
index 0000000..8f3496d
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaOneToMany.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.IOneToMany;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava One To Many</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaOneToMany()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaOneToMany extends IJavaAttributeMapping, IOneToMany
+{} // IJavaOneToMany
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaOneToOne.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaOneToOne.java
new file mode 100644
index 0000000..43daf73
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaOneToOne.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.IOneToOne;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava One To One</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaOneToOne()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaOneToOne extends IJavaAttributeMapping, IOneToOne
+{} // IJavaOneToOne
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaTransient.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaTransient.java
new file mode 100644
index 0000000..02df56e
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaTransient.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.ITransient;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Transient</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaTransient()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaTransient extends IJavaAttributeMapping, ITransient
+{} // IJavaTransient
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaVersion.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaVersion.java
new file mode 100644
index 0000000..e5e9e68
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/IJavaVersion.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.core.internal.content.java.mappings;
+
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.mappings.IVersion;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IJava Version</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaVersion()
+ * @model kind="class" interface="true" abstract="true"
+ * @generated
+ */
+public interface IJavaVersion extends IJavaAttributeMapping, IVersion
+{} // IJavaVersion
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaAttributeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaAttributeMapping.java
index a12eeea..541cefb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaAttributeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaAttributeMapping.java
@@ -76,10 +76,6 @@
 		return JpaJavaMappingsPackage.Literals.JAVA_ATTRIBUTE_MAPPING;
 	}
 
-	public void initialize() {
-		this.updateFromJava(this.attribute.astRoot());
-	}
-
 	public JavaPersistentAttribute getPersistentAttribute() {
 		return (JavaPersistentAttribute) this.eContainer();
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaBasic.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaBasic.java
index 7ab0f41..94c40f9 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaBasic.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaBasic.java
@@ -15,13 +15,6 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.WorkingCopyOwner;
-import org.eclipse.jdt.core.dom.BooleanLiteral;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.jdtutility.AnnotationAdapter;
@@ -33,7 +26,6 @@
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.EnumDeclarationAnnotationElementAdapter;
-import org.eclipse.jpt.core.internal.jdtutility.JDTTools;
 import org.eclipse.jpt.core.internal.jdtutility.MemberAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.ShortCircuitAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleBooleanAnnotationAdapter;
@@ -46,7 +38,6 @@
 import org.eclipse.jpt.core.internal.mappings.IColumnMapping;
 import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
 import org.eclipse.jpt.core.internal.mappings.TemporalType;
-import org.eclipse.jpt.utility.internal.CollectionTools;
 import org.eclipse.jpt.utility.internal.Filter;
 
 /**
@@ -59,7 +50,7 @@
  * @model kind="class"
  * @generated
  */
-public class JavaBasic extends JavaAttributeMapping implements IBasic
+public class JavaBasic extends JavaAttributeMapping implements IJavaBasic
 {
 	private final AnnotationElementAdapter<String> optionalAdapter;
 
@@ -628,6 +619,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaBasic.class) {
+			switch (derivedFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
 	}
 
@@ -662,6 +659,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaBasic.class) {
+			switch (baseFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
 	}
 
@@ -740,175 +743,13 @@
 
 	// ********** static methods **********
 	private static DeclarationAnnotationElementAdapter<String> buildOptionalAdapter() {
-		return new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(DECLARATION_ANNOTATION_ADAPTER, JPA.BASIC__OPTIONAL, false, BooleanStringExpressionConverter.instance());
+		return new ConversionDeclarationAnnotationElementAdapter<String>(DECLARATION_ANNOTATION_ADAPTER, JPA.BASIC__OPTIONAL, false, BooleanStringExpressionConverter.instance());
 	}
 
 	private static DeclarationAnnotationElementAdapter<String> buildFetchAdapter() {
 		return new EnumDeclarationAnnotationElementAdapter(DECLARATION_ANNOTATION_ADAPTER, JPA.BASIC__FETCH, false);
 	}
 
-	/**
-	 * From the JPA spec, when the basic mapping applies:
-	 * If the type of the attribute (field or property) is one of the following
-	 * it must be mapped as @Basic:
-	 *     primitive types
-	 *     byte[]
-	 *     Byte[]
-	 *     char[]
-	 *     Character[]
-	 *     primitive wrappers
-	 *     java.lang.String
-	 *     java.math.BigInteger
-	 *     java.math.BigDecimal
-	 *     java.util.Date
-	 *     java.util.Calendar
-	 *     java.sql.Date
-	 *     java.sql.Time
-	 *     java.sql.Timestamp
-	 *     enums
-	 *     any other type that implements java.io.Serializable
-	 */
-	public static boolean signatureIsBasic(String signature, IType scope) {
-		if (JDTTools.signatureIsPrimitive(signature)) {
-			return true;
-		}
-		int arrayCount = Signature.getArrayCount(signature);
-		if (arrayCount > 1) {
-			return false; // multi-dimensional arrays are not supported
-		}
-		signature = Signature.getElementType(signature);
-		String typeName = JDTTools.resolveSignature(signature, scope);
-		if (typeName == null) {
-			return false; // unable to resolve the type
-		}
-		if (arrayCount == 1) {
-			return elementTypeIsValid(typeName);
-		}
-		if (typeIsPrimitiveWrapper(typeName)) {
-			return true;
-		}
-		if (typeIsOtherSupportedType(typeName)) {
-			return true;
-		}
-		IType type = findType(scope.getCompilationUnit().getJavaProject(), typeName);
-		if (type == null) {
-			return false; // type not found
-		}
-		if (typeIsEnum(type)) {
-			return true;
-		}
-		if (typeImplementsSerializable(type)) {
-			return true;
-		}
-		return false;
-	}
-
-	private static IType findType(IJavaProject javaProject, String typeName) {
-		try {
-			return javaProject.findType(typeName);
-		}
-		catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	/**
-	 * Return whether the specified type is a valid element type for
-	 * a one-dimensional array:
-	 *     byte
-	 *     char
-	 *     java.lang.Byte
-	 *     java.lang.Character
-	 */
-	private static boolean elementTypeIsValid(String elementTypeName) {
-		return CollectionTools.contains(VALID_ELEMENT_TYPE_NAMES, elementTypeName);
-	}
-
-	private static final String[] VALID_ELEMENT_TYPE_NAMES = {
-		byte.class.getName(),
-		char.class.getName(),
-		java.lang.Byte.class.getName(),
-		java.lang.Character.class.getName()
-	};
-
-	/**
-	 * Return whether the specified type is a primitive wrapper.
-	 */
-	private static boolean typeIsPrimitiveWrapper(String typeName) {
-		return CollectionTools.contains(PRIMITIVE_WRAPPER_TYPE_NAMES, typeName);
-	}
-
-	private static final String[] PRIMITIVE_WRAPPER_TYPE_NAMES = {
-		java.lang.Byte.class.getName(),
-		java.lang.Character.class.getName(),
-		java.lang.Double.class.getName(),
-		java.lang.Float.class.getName(),
-		java.lang.Integer.class.getName(),
-		java.lang.Long.class.getName(),
-		java.lang.Short.class.getName(),
-		java.lang.Boolean.class.getName(),
-	};
-
-	/**
-	 * Return whether the specified type is among the various other types
-	 * that default to a Basic mapping.
-	 */
-	private static boolean typeIsOtherSupportedType(String typeName) {
-		return CollectionTools.contains(OTHER_SUPPORTED_TYPE_NAMES, typeName);
-	}
-
-	private static final String[] OTHER_SUPPORTED_TYPE_NAMES = {
-		java.lang.String.class.getName(),
-		java.math.BigInteger.class.getName(),
-		java.math.BigDecimal.class.getName(),
-		java.util.Date.class.getName(),
-		java.util.Calendar.class.getName(),
-		java.sql.Date.class.getName(),
-		java.sql.Time.class.getName(),
-		java.sql.Timestamp.class.getName(),
-	};
-
-	/**
-	 * Return whether the specified type is an enum.
-	 */
-	private static boolean typeIsEnum(IType type) {
-		try {
-			return type.isEnum();
-		}
-		catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	/**
-	 * Return whether the specified type implements java.io.Serializable.
-	 */
-	// TODO should we be using IType.getSuperInterfaceTypeSignatures() instead?
-	// would this be less of a performance hog??
-	private static boolean typeImplementsSerializable(IType type) {
-		ITypeHierarchy hierarchy = typeHierarchy(type);
-		IType[] interfaces = hierarchy.getAllSuperInterfaces(type);
-		for (int i = interfaces.length; i-- > 0;) {
-			if (interfaces[i].getFullyQualifiedName().equals(SERIALIZABLE_TYPE_NAME)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	private static final String SERIALIZABLE_TYPE_NAME = java.io.Serializable.class.getName();
-
-	private static ITypeHierarchy typeHierarchy(IType type) {
-		// TODO hmm... what to do about the working copy, probably shouldn't pass in null;
-		// also, this looks like a performance hog, other ways to do this?
-		try {
-			return type.newSupertypeHierarchy((WorkingCopyOwner) null, null);
-		}
-		catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
 	@Override
 	public boolean isOverridableAttributeMapping() {
 		return true;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaBasicProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaBasicProvider.java
index e08673b..444c947 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaBasicProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaBasicProvider.java
@@ -9,18 +9,15 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.WorkingCopyOwner;
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
+import org.eclipse.jpt.core.internal.content.java.IDefaultJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
-import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.jdtutility.JDTTools;
 import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 import org.eclipse.jpt.utility.internal.CollectionTools;
 
@@ -28,7 +25,7 @@
  * 
  */
 public class JavaBasicProvider
-	implements IJavaAttributeMappingProvider
+	implements IDefaultJavaAttributeMappingProvider
 {
 
 	// singleton
@@ -37,7 +34,7 @@
 	/**
 	 * Return the singleton.
 	 */
-	public static IJavaAttributeMappingProvider instance() {
+	public static IDefaultJavaAttributeMappingProvider instance() {
 		return INSTANCE;
 	}
 
@@ -53,11 +50,12 @@
 	}
 
 	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return signatureIsBasic(attribute.typeSignature(), attribute.getDeclaringType().getJdtMember());
+		CompilationUnit astRoot = defaultsContext.astRoot();
+		return typeIsBasic(attribute.typeBinding(astRoot), astRoot.getAST());
 	}
 
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaBasic(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaBasic(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
@@ -87,49 +85,39 @@
 	 *     enums
 	 *     any other type that implements java.io.Serializable
 	 */
-	public static boolean signatureIsBasic(String signature, IType scope) {
-		if (JDTTools.signatureIsPrimitive(signature)) {
+	public static boolean typeIsBasic(ITypeBinding typeBinding, AST ast) {
+		if (typeBinding == null) {
+			return false; // type not found
+		}
+		if (typeBinding.isPrimitive()) {
 			return true;
 		}
-		int arrayCount = Signature.getArrayCount(signature);
-		if (arrayCount > 1) {
-			return false;  // multi-dimensional arrays are not supported
+		if (typeBinding.isArray()) {
+			if (typeBinding.getDimensions() > 1) {
+				return false; // multi-dimensional arrays are not supported
+			}
+			ITypeBinding elementTypeBinding = typeBinding.getElementType();
+			if (elementTypeBinding == null) {
+				return false;// unable to resolve the type
+			}
+			return elementTypeIsValid(elementTypeBinding.getQualifiedName());
 		}
-		signature = Signature.getElementType(signature);
-		String typeName = JDTTools.resolveSignature(signature, scope);
-		if (typeName == null) {
-			return false;  // unable to resolve the type
-		}
-		if (arrayCount == 1) {
-			return elementTypeIsValid(typeName);
-		}
+		String typeName = typeBinding.getQualifiedName();
 		if (typeIsPrimitiveWrapper(typeName)) {
 			return true;
 		}
 		if (typeIsOtherSupportedType(typeName)) {
 			return true;
 		}
-		IType type = findType(scope.getCompilationUnit().getJavaProject(), typeName);
-		if (type == null) {
-			return false;  // type not found
-		}
-		if (typeIsEnum(type)) {
+		if (typeBinding.isEnum()) {
 			return true;
 		}
-		if (typeImplementsSerializable(type)) {
+		if (typeImplementsSerializable(typeBinding, ast)) {
 			return true;
 		}
 		return false;
 	}
 
-	private static IType findType(IJavaProject javaProject, String typeName) {
-		try {
-			return javaProject.findType(typeName);
-		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
 	/**
 	 * Return whether the specified type is a valid element type for
 	 * a one-dimensional array:
@@ -185,44 +173,14 @@
 		java.sql.Time.class.getName(),
 		java.sql.Timestamp.class.getName(),
 	};
-
-	/**
-	 * Return whether the specified type is an enum.
-	 */
-	private static boolean typeIsEnum(IType type) {
-		try {
-			return type.isEnum();
-		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
 	
 	/**
 	 * Return whether the specified type implements java.io.Serializable.
 	 */
-	// TODO should we be using IType.getSuperInterfaceTypeSignatures() instead?
-	// would this be less of a performance hog??
-	private static boolean typeImplementsSerializable(IType type) {
-		ITypeHierarchy hierarchy = typeHierarchy(type);
-		IType[] interfaces = hierarchy.getAllSuperInterfaces(type);
-		for (int i = interfaces.length; i-- > 0; ) {
-			if (interfaces[i].getFullyQualifiedName().equals(SERIALIZABLE_TYPE_NAME)) {
-				return true;
-			}
-		}
-		return false;
+	private static boolean typeImplementsSerializable(ITypeBinding typeBinding, AST ast) {
+		ITypeBinding serializableTypeBinding = ast.resolveWellKnownType(SERIALIZABLE_TYPE_NAME);
+		return typeBinding.isAssignmentCompatible(serializableTypeBinding);
 	}
 
 	private static final String SERIALIZABLE_TYPE_NAME = java.io.Serializable.class.getName();
-
-	private static ITypeHierarchy typeHierarchy(IType type) {
-		// TODO hmm... what to do about the working copy, probably shouldn't pass in null;
-		// also, this looks like a performance hog, other ways to do this?
-		try {
-			return type.newSupertypeHierarchy((WorkingCopyOwner) null, null);
-		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaColumn.java
index 6fd3bdb..b353416 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaColumn.java
@@ -42,17 +42,27 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected static final int LENGTH_EDEFAULT = 255;
+	protected static final int LENGTH_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getLength() <em>Length</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedLength() <em>Specified Length</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getLength()
+	 * @see #getSpecifiedLength()
 	 * @generated
 	 * @ordered
 	 */
-	protected int length = LENGTH_EDEFAULT;
+	protected static final int SPECIFIED_LENGTH_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedLength() <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedLength = SPECIFIED_LENGTH_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
@@ -65,14 +75,24 @@
 	protected static final int PRECISION_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedPrecision() <em>Specified Precision</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getPrecision()
+	 * @see #getSpecifiedPrecision()
 	 * @generated
 	 * @ordered
 	 */
-	protected int precision = PRECISION_EDEFAULT;
+	protected static final int SPECIFIED_PRECISION_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedPrecision() <em>Specified Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedPrecision()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedPrecision = SPECIFIED_PRECISION_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getScale() <em>Scale</em>}' attribute.
@@ -85,14 +105,24 @@
 	protected static final int SCALE_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getScale() <em>Scale</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedScale() <em>Specified Scale</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getScale()
+	 * @see #getSpecifiedScale()
 	 * @generated
 	 * @ordered
 	 */
-	protected int scale = SCALE_EDEFAULT;
+	protected static final int SPECIFIED_SCALE_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedScale() <em>Specified Scale</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedScale()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedScale = SPECIFIED_SCALE_EDEFAULT;
 
 	private final IntAnnotationElementAdapter lengthAdapter;
 
@@ -178,104 +208,130 @@
 		return JpaJavaMappingsPackage.Literals.JAVA_COLUMN;
 	}
 
-	/**
-	 * Returns the value of the '<em><b>Length</b></em>' attribute.
-	 * The default value is <code>"255"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Length</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Length</em>' attribute.
-	 * @see #setLength(int)
-	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_Length()
-	 * @model default="255"
-	 * @generated
-	 */
 	public int getLength() {
-		return length;
+		return (this.getSpecifiedLength() == SPECIFIED_LENGTH_EDEFAULT) ? getDefaultLength() : this.getSpecifiedLength();
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getLength <em>Length</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Length</em>' attribute.
-	 * @see #getLength()
-	 * @generated
-	 */
-	public void setLength(int newLength) {
-		int oldLength = length;
-		length = newLength;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH, oldLength, length));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Precision</b></em>' attribute.
+	 * Returns the value of the '<em><b>Specified Length</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Precision</em>' attribute isn't clear,
+	 * If the meaning of the '<em>Specified Length</em>' attribute isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Precision</em>' attribute.
-	 * @see #setPrecision(int)
-	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_Precision()
-	 * @model
+	 * @return the value of the '<em>Specified Length</em>' attribute.
+	 * @see #setSpecifiedLength(int)
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_SpecifiedLength()
+	 * @model default="-1"
 	 * @generated
 	 */
+	public int getSpecifiedLength() {
+		return specifiedLength;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getSpecifiedLength <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Length</em>' attribute.
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 */
+	public void setSpecifiedLength(int newSpecifiedLength) {
+		int oldSpecifiedLength = specifiedLength;
+		specifiedLength = newSpecifiedLength;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH, oldSpecifiedLength, specifiedLength));
+	}
+
 	public int getPrecision() {
-		return precision;
+		return (this.getSpecifiedPrecision() == SPECIFIED_PRECISION_EDEFAULT) ? getDefaultPrecision() : this.getSpecifiedPrecision();
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getPrecision <em>Precision</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Precision</em>' attribute.
-	 * @see #getPrecision()
-	 * @generated
-	 */
-	public void setPrecision(int newPrecision) {
-		int oldPrecision = precision;
-		precision = newPrecision;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION, oldPrecision, precision));
-	}
-
-	/**
-	 * Returns the value of the '<em><b>Scale</b></em>' attribute.
+	 * Returns the value of the '<em><b>Specified Precision</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Scale</em>' attribute isn't clear,
+	 * If the meaning of the '<em>Specified Precision</em>' attribute isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Scale</em>' attribute.
-	 * @see #setScale(int)
-	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_Scale()
-	 * @model
+	 * @return the value of the '<em>Specified Precision</em>' attribute.
+	 * @see #setSpecifiedPrecision(int)
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_SpecifiedPrecision()
+	 * @model default="-1"
 	 * @generated
 	 */
-	public int getScale() {
-		return scale;
+	public int getSpecifiedPrecision() {
+		return specifiedPrecision;
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getScale <em>Scale</em>}' attribute.
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getSpecifiedPrecision <em>Specified Precision</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Scale</em>' attribute.
-	 * @see #getScale()
+	 * @param value the new value of the '<em>Specified Precision</em>' attribute.
+	 * @see #getSpecifiedPrecision()
 	 * @generated
 	 */
-	public void setScale(int newScale) {
-		int oldScale = scale;
-		scale = newScale;
+	public void setSpecifiedPrecision(int newSpecifiedPrecision) {
+		int oldSpecifiedPrecision = specifiedPrecision;
+		specifiedPrecision = newSpecifiedPrecision;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__SCALE, oldScale, scale));
+			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION, oldSpecifiedPrecision, specifiedPrecision));
+	}
+
+	public int getScale() {
+		return (this.getSpecifiedScale() == SPECIFIED_SCALE_EDEFAULT) ? getDefaultScale() : this.getSpecifiedScale();
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Specified Scale</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Scale</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Specified Scale</em>' attribute.
+	 * @see #setSpecifiedScale(int)
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIColumn_SpecifiedScale()
+	 * @model default="-1"
+	 * @generated
+	 */
+	public int getSpecifiedScale() {
+		return specifiedScale;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn#getSpecifiedScale <em>Specified Scale</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Scale</em>' attribute.
+	 * @see #getSpecifiedScale()
+	 * @generated
+	 */
+	public void setSpecifiedScale(int newSpecifiedScale) {
+		int oldSpecifiedScale = specifiedScale;
+		specifiedScale = newSpecifiedScale;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE, oldSpecifiedScale, specifiedScale));
+	}
+
+	public int getDefaultLength() {
+		return DEFAULT_LENGTH;
+	}
+
+	public int getDefaultPrecision() {
+		return DEFAULT_PRECISION;
+	}
+
+	public int getDefaultScale() {
+		return DEFAULT_SCALE;
 	}
 
 	/**
@@ -288,10 +344,16 @@
 		switch (featureID) {
 			case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
 				return new Integer(getLength());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+				return new Integer(getSpecifiedLength());
 			case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
 				return new Integer(getPrecision());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+				return new Integer(getSpecifiedPrecision());
 			case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
 				return new Integer(getScale());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+				return new Integer(getSpecifiedScale());
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -304,14 +366,14 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
-				setLength(((Integer) newValue).intValue());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+				setSpecifiedLength(((Integer) newValue).intValue());
 				return;
-			case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
-				setPrecision(((Integer) newValue).intValue());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+				setSpecifiedPrecision(((Integer) newValue).intValue());
 				return;
-			case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
-				setScale(((Integer) newValue).intValue());
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+				setSpecifiedScale(((Integer) newValue).intValue());
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -325,14 +387,14 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
-				setLength(LENGTH_EDEFAULT);
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+				setSpecifiedLength(SPECIFIED_LENGTH_EDEFAULT);
 				return;
-			case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
-				setPrecision(PRECISION_EDEFAULT);
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+				setSpecifiedPrecision(SPECIFIED_PRECISION_EDEFAULT);
 				return;
-			case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
-				setScale(SCALE_EDEFAULT);
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+				setSpecifiedScale(SPECIFIED_SCALE_EDEFAULT);
 				return;
 		}
 		super.eUnset(featureID);
@@ -347,11 +409,17 @@
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 			case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
-				return length != LENGTH_EDEFAULT;
+				return getLength() != LENGTH_EDEFAULT;
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+				return specifiedLength != SPECIFIED_LENGTH_EDEFAULT;
 			case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
-				return precision != PRECISION_EDEFAULT;
+				return getPrecision() != PRECISION_EDEFAULT;
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+				return specifiedPrecision != SPECIFIED_PRECISION_EDEFAULT;
 			case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
-				return scale != SCALE_EDEFAULT;
+				return getScale() != SCALE_EDEFAULT;
+			case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+				return specifiedScale != SPECIFIED_SCALE_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -367,10 +435,16 @@
 			switch (derivedFeatureID) {
 				case JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH :
 					return JpaCoreMappingsPackage.ICOLUMN__LENGTH;
+				case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_LENGTH;
 				case JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION :
 					return JpaCoreMappingsPackage.ICOLUMN__PRECISION;
+				case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_PRECISION;
 				case JpaJavaMappingsPackage.JAVA_COLUMN__SCALE :
 					return JpaCoreMappingsPackage.ICOLUMN__SCALE;
+				case JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_SCALE;
 				default :
 					return -1;
 			}
@@ -389,10 +463,16 @@
 			switch (baseFeatureID) {
 				case JpaCoreMappingsPackage.ICOLUMN__LENGTH :
 					return JpaJavaMappingsPackage.JAVA_COLUMN__LENGTH;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_LENGTH :
+					return JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_LENGTH;
 				case JpaCoreMappingsPackage.ICOLUMN__PRECISION :
 					return JpaJavaMappingsPackage.JAVA_COLUMN__PRECISION;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_PRECISION :
+					return JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_PRECISION;
 				case JpaCoreMappingsPackage.ICOLUMN__SCALE :
 					return JpaJavaMappingsPackage.JAVA_COLUMN__SCALE;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_SCALE :
+					return JpaJavaMappingsPackage.JAVA_COLUMN__SPECIFIED_SCALE;
 				default :
 					return -1;
 			}
@@ -410,12 +490,12 @@
 		if (eIsProxy())
 			return super.toString();
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (length: ");
-		result.append(length);
-		result.append(", precision: ");
-		result.append(precision);
-		result.append(", scale: ");
-		result.append(scale);
+		result.append(" (specifiedLength: ");
+		result.append(specifiedLength);
+		result.append(", specifiedPrecision: ");
+		result.append(specifiedPrecision);
+		result.append(", specifiedScale: ");
+		result.append(specifiedScale);
 		result.append(')');
 		return result.toString();
 	}
@@ -428,9 +508,9 @@
 	@Override
 	public void updateFromJava(CompilationUnit astRoot) {
 		super.updateFromJava(astRoot);
-		this.setLength(this.lengthAdapter.getValue(astRoot));
-		this.setPrecision(this.precisionAdapter.getValue(astRoot));
-		this.setScale(this.scaleAdapter.getValue(astRoot));
+		this.setSpecifiedLength(this.lengthAdapter.getValue(astRoot));
+		this.setSpecifiedPrecision(this.precisionAdapter.getValue(astRoot));
+		this.setSpecifiedScale(this.scaleAdapter.getValue(astRoot));
 	}
 
 	public void refreshDefaults(DefaultsContext defaultsContext) {
@@ -439,7 +519,7 @@
 	}
 
 	// ********** static methods **********
-	static JavaColumn createColumnMappingColumn(Owner owner, Member member) {
+	public static JavaColumn createColumnMappingColumn(Owner owner, Member member) {
 		return JpaJavaMappingsFactory.eINSTANCE.createJavaColumn(owner, member, MAPPING_DECLARATION_ANNOTATION_ADAPTER);
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddable.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddable.java
index 08b8a3c..add7155 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddable.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddable.java
@@ -14,7 +14,6 @@
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleDeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.Type;
-import org.eclipse.jpt.core.internal.mappings.IEmbeddable;
 
 /**
  * <!-- begin-user-doc -->
@@ -26,7 +25,7 @@
  * @model kind="class"
  * @generated
  */
-public class JavaEmbeddable extends JavaTypeMapping implements IEmbeddable
+public class JavaEmbeddable extends JavaTypeMapping implements IJavaEmbeddable
 {
 	public static final DeclarationAnnotationAdapter DECLARATION_ANNOTATION_ADAPTER = new SimpleDeclarationAnnotationAdapter(JPA.EMBEDDABLE);
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddableProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddableProvider.java
index 714a815..2bddab0 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddableProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddableProvider.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMappingProvider;
@@ -43,8 +44,8 @@
 		return IMappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY;
 	}
 
-	public IJavaTypeMapping buildMapping(Type type) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaEmbeddable(type);
+	public IJavaTypeMapping buildMapping(Type type, IJpaFactory factory) {
+		return factory.createJavaEmbeddable(type);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbedded.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbedded.java
index b69f111..a66613a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbedded.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbedded.java
@@ -49,7 +49,7 @@
  * @model kind="class"
  * @generated
  */
-public class JavaEmbedded extends JavaAttributeMapping implements IEmbedded
+public class JavaEmbedded extends JavaAttributeMapping implements IJavaEmbedded
 {
 	/**
 	 * The cached value of the '{@link #getSpecifiedAttributeOverrides() <em>Specified Attribute Overrides</em>}' containment reference list.
@@ -395,6 +395,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaEmbedded.class) {
+			switch (derivedFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
 	}
 
@@ -417,6 +423,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaEmbedded.class) {
+			switch (baseFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
 	}
 
@@ -562,13 +574,14 @@
 
 	//******* static methods *********
 	public static IEmbeddable embeddableFor(Attribute attribute, DefaultsContext defaultsContext) {
-		String resolvedTypeName = attribute.resolvedTypeName();
+		CompilationUnit astRoot = defaultsContext.astRoot();
+		String resolvedTypeName = attribute.resolvedTypeName(astRoot);
 		if (resolvedTypeName == null) {
 			return null;
 		}
 		IPersistentType persistentType = defaultsContext.persistentType(resolvedTypeName);
 		if (persistentType != null) {
-			if (persistentType.getMapping() instanceof IEmbeddable) {
+			if (persistentType.getMappingKey() == IMappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY) {
 				return (IEmbeddable) persistentType.getMapping();
 			}
 		}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedId.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedId.java
index a904f93..0f16e5d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedId.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedId.java
@@ -14,7 +14,6 @@
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleDeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.mappings.IEmbeddedId;
 
 /**
  * <!-- begin-user-doc -->
@@ -26,7 +25,8 @@
  * @model kind="class"
  * @generated
  */
-public class JavaEmbeddedId extends JavaAttributeMapping implements IEmbeddedId
+public class JavaEmbeddedId extends JavaAttributeMapping
+	implements IJavaEmbeddedId
 {
 	public static final DeclarationAnnotationAdapter DECLARATION_ANNOTATION_ADAPTER = new SimpleDeclarationAnnotationAdapter(JPA.EMBEDDED_ID);
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedIdProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedIdProvider.java
index 470cc40..b3b602d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedIdProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedIdProvider.java
@@ -9,12 +9,12 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * 
@@ -44,12 +44,8 @@
 		return IMappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY;
 	}
 	
-	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return false;
-	}
-
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaEmbeddedId(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaEmbeddedId(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedProvider.java
index 6e39f23..6fa7b07 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEmbeddedProvider.java
@@ -9,10 +9,10 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.core.internal.IPersistentType;
+import org.eclipse.jpt.core.internal.content.java.IDefaultJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
-import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.mappings.IEmbeddable;
@@ -22,7 +22,7 @@
  * 
  */
 public class JavaEmbeddedProvider
-	implements IJavaAttributeMappingProvider
+	implements IDefaultJavaAttributeMappingProvider
 {
 
 	// singleton
@@ -31,7 +31,7 @@
 	/**
 	 * Return the singleton.
 	 */
-	public static IJavaAttributeMappingProvider instance() {
+	public static IDefaultJavaAttributeMappingProvider instance() {
 		return INSTANCE;
 	}
 
@@ -51,19 +51,11 @@
 	}
 	
 	private IEmbeddable embeddableFor(Attribute attribute, DefaultsContext defaultsContext) {
-		String resolvedTypeName = attribute.resolvedTypeName();
-		if (resolvedTypeName == null) {
-			return null;
-		}
-		IPersistentType persistentType = defaultsContext.persistentType(resolvedTypeName);
-		if (persistentType != null && persistentType.getMappingKey() == IMappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY) {
-			return (IEmbeddable) persistentType.getMapping();
-		}
-		return null;
+		return JavaEmbedded.embeddableFor(attribute, defaultsContext);
 	}
 
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaEmbedded(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaEmbedded(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEntity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEntity.java
index a648186..f96ea4c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEntity.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEntity.java
@@ -23,7 +23,6 @@
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.jdt.core.dom.Annotation;
 import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.TypeLiteral;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.IPersistentAttribute;
 import org.eclipse.jpt.core.internal.IPersistentType;
@@ -74,7 +73,7 @@
  * @model kind="class"
  * @generated
  */
-public class JavaEntity extends JavaTypeMapping implements IEntity
+public class JavaEntity extends JavaTypeMapping implements IJavaEntity
 {
 	/**
 	 * The default value of the '{@link #getSpecifiedName() <em>Specified Name</em>}' attribute.
@@ -2246,6 +2245,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaEntity.class) {
+			switch (derivedFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
 	}
 
@@ -2308,6 +2313,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaEntity.class) {
+			switch (baseFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
 	}
 
@@ -2994,6 +3005,6 @@
 
 	// ********** static methods **********
 	private static DeclarationAnnotationElementAdapter<String> buildIdClassValueAdapter() {
-		return new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(ID_CLASS_ADAPTER, JPA.ID_CLASS__VALUE, false, SimpleTypeStringExpressionConverter.instance());
+		return new ConversionDeclarationAnnotationElementAdapter<String>(ID_CLASS_ADAPTER, JPA.ID_CLASS__VALUE, false, SimpleTypeStringExpressionConverter.instance());
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEntityProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEntityProvider.java
index fe3796d..fd83986 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEntityProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaEntityProvider.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMappingProvider;
@@ -43,8 +44,8 @@
 		return IMappingKeys.ENTITY_TYPE_MAPPING_KEY;
 	}
 
-	public IJavaTypeMapping buildMapping(Type type) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaEntity(type);
+	public IJavaTypeMapping buildMapping(Type type, IJpaFactory factory) {
+		return factory.createJavaEntity(type);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaGenerator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaGenerator.java
index 8066e53..25c53ac 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaGenerator.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaGenerator.java
@@ -13,7 +13,6 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.NumberLiteral;
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.content.java.JavaEObject;
 import org.eclipse.jpt.core.internal.jdtutility.AnnotationElementAdapter;
@@ -565,6 +564,6 @@
 	}
 
 	protected static DeclarationAnnotationElementAdapter<String> buildNumberAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
-		return new ConversionDeclarationAnnotationElementAdapter<String, NumberLiteral>(annotationAdapter, elementName, NumberStringExpressionConverter.instance());
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, NumberStringExpressionConverter.instance());
 	}
 } // JavaGenerator
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaId.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaId.java
index f0b7e4e..56e732d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaId.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaId.java
@@ -47,7 +47,7 @@
  * @model kind="class"
  * @generated
  */
-public class JavaId extends JavaAttributeMapping implements IId
+public class JavaId extends JavaAttributeMapping implements IJavaId
 {
 	private AnnotationAdapter generatedValueAnnotationAdapter;
 
@@ -588,6 +588,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaId.class) {
+			switch (derivedFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
 	}
 
@@ -620,6 +626,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaId.class) {
+			switch (baseFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaIdProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaIdProvider.java
index 7b77578..2fcaa12 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaIdProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaIdProvider.java
@@ -9,12 +9,12 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * 
@@ -44,12 +44,8 @@
 		return IMappingKeys.ID_ATTRIBUTE_MAPPING_KEY;
 	}
 	
-	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return false;
-	}
-
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaId(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaId(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToMany.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToMany.java
index 28f5a1e..ac016dd 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToMany.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToMany.java
@@ -16,7 +16,6 @@
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleDeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.mappings.IManyToMany;
 
 /**
  * <!-- begin-user-doc -->
@@ -29,7 +28,7 @@
  * @generated
  */
 public class JavaManyToMany extends JavaMultiRelationshipMapping
-	implements IManyToMany
+	implements IJavaManyToMany
 {
 	public static final DeclarationAnnotationAdapter DECLARATION_ANNOTATION_ADAPTER = new SimpleDeclarationAnnotationAdapter(JPA.MANY_TO_MANY);
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToManyProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToManyProvider.java
index 783f54e..3d77937 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToManyProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToManyProvider.java
@@ -9,12 +9,12 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * 
@@ -43,13 +43,9 @@
 	public String key() {
 		return IMappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY;
 	}
-	
-	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return false;
-	}
 
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaManyToMany(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaManyToMany(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToOne.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToOne.java
index e54bf3f..5ba5e9e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToOne.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToOne.java
@@ -15,7 +15,6 @@
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleDeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.mappings.IManyToOne;
 
 /**
  * <!-- begin-user-doc -->
@@ -28,7 +27,7 @@
  * @generated
  */
 public class JavaManyToOne extends JavaSingleRelationshipMapping
-	implements IManyToOne
+	implements IJavaManyToOne
 {
 	public static final DeclarationAnnotationAdapter DECLARATION_ANNOTATION_ADAPTER = new SimpleDeclarationAnnotationAdapter(JPA.MANY_TO_ONE);
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToOneProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToOneProvider.java
index 52e0ab4..9d9af3e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToOneProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaManyToOneProvider.java
@@ -9,12 +9,12 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * 
@@ -43,13 +43,9 @@
 	public String key() {
 		return IMappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY;
 	}
-	
-	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return false;
-	}
 
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaManyToOne(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaManyToOne(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMappedSuperclass.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMappedSuperclass.java
index ec505b2..86b4ad7 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMappedSuperclass.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMappedSuperclass.java
@@ -14,7 +14,6 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.TypeLiteral;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.IPersistentAttribute;
 import org.eclipse.jpt.core.internal.jdtutility.AnnotationAdapter;
@@ -43,7 +42,7 @@
  * @generated
  */
 public class JavaMappedSuperclass extends JavaTypeMapping
-	implements IMappedSuperclass
+	implements IJavaMappedSuperclass
 {
 	/**
 	 * The default value of the '{@link #getIdClass() <em>Id Class</em>}' attribute.
@@ -230,6 +229,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaMappedSuperclass.class) {
+			switch (derivedFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
 	}
 
@@ -248,6 +253,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaMappedSuperclass.class) {
+			switch (baseFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
 	}
 
@@ -325,6 +336,6 @@
 
 	// ********** static methods **********
 	private static DeclarationAnnotationElementAdapter<String> buildIdClassValueAdapter() {
-		return new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(ID_CLASS_ADAPTER, JPA.ID_CLASS__VALUE, false, SimpleTypeStringExpressionConverter.instance());
+		return new ConversionDeclarationAnnotationElementAdapter<String>(ID_CLASS_ADAPTER, JPA.ID_CLASS__VALUE, false, SimpleTypeStringExpressionConverter.instance());
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMappedSuperclassProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMappedSuperclassProvider.java
index b149fca..c15fb71 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMappedSuperclassProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMappedSuperclassProvider.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMappingProvider;
@@ -43,8 +44,8 @@
 		return IMappingKeys.MAPPED_SUPERCLASS_TYPE_MAPPING_KEY;
 	}
 
-	public IJavaTypeMapping buildMapping(Type type) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaMappedSuperclass(type);
+	public IJavaTypeMapping buildMapping(Type type, IJpaFactory factory) {
+		return factory.createJavaMappedSuperclass(type);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMultiRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMultiRelationshipMapping.java
index 51e93a8..9ab22db 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMultiRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaMultiRelationshipMapping.java
@@ -15,9 +15,9 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.dom.Annotation;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.ITypeMapping;
 import org.eclipse.jpt.core.internal.jdtutility.AnnotationAdapter;
@@ -785,18 +785,18 @@
 	 * another container or an array or a primitive or other Basic type)
 	 */
 	@Override
-	protected String javaDefaultTargetEntity(String signature) {
-		String typeName = super.javaDefaultTargetEntity(signature);
-		return typeNamedIsContainer(typeName) ? this.javaDefaultTargetEntityFromContainer(signature) : null;
+	protected String javaDefaultTargetEntity(ITypeBinding typeBinding) {
+		String typeName = super.javaDefaultTargetEntity(typeBinding);
+		return typeNamedIsContainer(typeName) ? javaDefaultTargetEntityFromContainer(typeBinding) : null;
 	}
 
-	protected String javaDefaultTargetEntityFromContainer(String signature) {
-		String[] parmSignatures = Signature.getTypeArguments(signature);
-		if ((parmSignatures == null) || (parmSignatures.length != 1)) {
+	public static String javaDefaultTargetEntityFromContainer(ITypeBinding typeBinding) {
+		ITypeBinding[] typeArguments = typeBinding.getTypeArguments();
+		if (typeArguments.length != 1) {
 			return null;
 		}
-		String elementSignature = parmSignatures[0];
-		String elementTypeName = buildReferenceEntityTypeName(elementSignature, jdtType());
+		ITypeBinding elementTypeBinding = typeArguments[0];
+		String elementTypeName = buildReferenceEntityTypeName(elementTypeBinding);
 		return typeNamedIsContainer(elementTypeName) ? null : elementTypeName;
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java
index 61b7da6..3702360 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNamedColumn.java
@@ -13,9 +13,7 @@
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jdt.core.dom.BooleanLiteral;
 import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.NumberLiteral;
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.content.java.JavaEObject;
 import org.eclipse.jpt.core.internal.jdtutility.AnnotationElementAdapter;
@@ -152,11 +150,11 @@
 	}
 
 	protected DeclarationAnnotationElementAdapter<String> buildBooleanElementAdapter(String elementName) {
-		return new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(this.daa, elementName, BooleanStringExpressionConverter.instance());
+		return new ConversionDeclarationAnnotationElementAdapter<String>(this.daa, elementName, BooleanStringExpressionConverter.instance());
 	}
 
 	protected DeclarationAnnotationElementAdapter<String> buildIntElementAdapter(String elementName) {
-		return new ConversionDeclarationAnnotationElementAdapter<String, NumberLiteral>(this.daa, elementName, NumberStringExpressionConverter.instance());
+		return new ConversionDeclarationAnnotationElementAdapter<String>(this.daa, elementName, NumberStringExpressionConverter.instance());
 	}
 
 	protected AnnotationElementAdapter<String> buildShortCircuitElementAdapter(DeclarationAnnotationElementAdapter<String> daea) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullAttributeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullAttributeMapping.java
index b9552c7..7aed51f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullAttributeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullAttributeMapping.java
@@ -32,7 +32,7 @@
 		throw new UnsupportedOperationException("Use JavaNullAttributeMapping(Attribute) instead");
 	}
 
-	protected JavaNullAttributeMapping(Attribute attribute) {
+	public JavaNullAttributeMapping(Attribute attribute) {
 		super(attribute);
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullAttributeMappingProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullAttributeMappingProvider.java
index 0c35b5f..37d8d24 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullAttributeMappingProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullAttributeMappingProvider.java
@@ -9,11 +9,11 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * This mapping provider implementation is used to create a JavaNullAttributeMapping.
@@ -44,12 +44,12 @@
 	public String key() {
 		return null;
 	}
-	
-	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return false;
-	}
 
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
+	//Do not use the IJpaFactory for building this mapping, see constructor for JavaPersistentAttribute
+	//where we do no have access to the factory during constrution.  This is not a mapping that
+	//needs to be extensible, but it is easier to have a mappingProvider for it so we don't have 
+	//to handle null provider separately
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
 		return JpaJavaMappingsFactory.eINSTANCE.createJavaNullAttributeMapping(attribute);
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullTypeMappingProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullTypeMappingProvider.java
index 3e12a96..ac7a9eb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullTypeMappingProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaNullTypeMappingProvider.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
@@ -44,7 +45,7 @@
 		return null;
 	}
 
-	public IJavaTypeMapping buildMapping(Type type) {
+	public IJavaTypeMapping buildMapping(Type type, IJpaFactory factory) {
 		return JpaJavaMappingsFactory.eINSTANCE.createJavaNullTypeMapping(type);
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToMany.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToMany.java
index 83359ca..aa37d96 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToMany.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToMany.java
@@ -16,7 +16,6 @@
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleDeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.mappings.IOneToMany;
 
 /**
  * <!-- begin-user-doc -->
@@ -29,7 +28,7 @@
  * @generated
  */
 public class JavaOneToMany extends JavaMultiRelationshipMapping
-	implements IOneToMany
+	implements IJavaOneToMany
 {
 	public static final DeclarationAnnotationAdapter DECLARATION_ANNOTATION_ADAPTER = new SimpleDeclarationAnnotationAdapter(JPA.ONE_TO_MANY);
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToManyProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToManyProvider.java
index c817ce8..7f18d75 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToManyProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToManyProvider.java
@@ -9,12 +9,12 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * 
@@ -43,13 +43,9 @@
 	public String key() {
 		return IMappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY;
 	}
-	
-	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return false;
-	}
 
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaOneToMany(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaOneToMany(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToOne.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToOne.java
index 7c21f6d..a91635c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToOne.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToOne.java
@@ -38,7 +38,7 @@
  * @generated
  */
 public class JavaOneToOne extends JavaSingleRelationshipMapping
-	implements IOneToOne
+	implements IJavaOneToOne
 {
 	/**
 	 * The default value of the '{@link #getMappedBy() <em>Mapped By</em>}' attribute.
@@ -252,6 +252,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaOneToOne.class) {
+			switch (derivedFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
 	}
 
@@ -276,6 +282,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaOneToOne.class) {
+			switch (baseFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToOneProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToOneProvider.java
index e6ddbd7..d6c24a3 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToOneProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaOneToOneProvider.java
@@ -9,12 +9,12 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * 
@@ -44,12 +44,8 @@
 		return IMappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY;
 	}
 	
-	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return false;
-	}
-
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaOneToOne(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaOneToOne(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java
index 9deacff..53a16b2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java
@@ -15,10 +15,11 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.Signature;
+import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.dom.TypeLiteral;
 import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.ITypeMapping;
 import org.eclipse.jpt.core.internal.jdtutility.AnnotationElementAdapter;
@@ -29,7 +30,6 @@
 import org.eclipse.jpt.core.internal.jdtutility.EnumArrayDeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.EnumDeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.ExpressionConverter;
-import org.eclipse.jpt.core.internal.jdtutility.JDTTools;
 import org.eclipse.jpt.core.internal.jdtutility.ShortCircuitAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleTypeStringExpressionConverter;
 import org.eclipse.jpt.core.internal.jdtutility.StringExpressionConverter;
@@ -549,25 +549,46 @@
 		return result.toString();
 	}
 
-	public String fullyQualifiedTargetEntity() {
-		return (getTargetEntity() == null) ? null : JDTTools.resolve(getTargetEntity(), this.jdtType());
+	public String fullyQualifiedTargetEntity(CompilationUnit astRoot) {
+		if (getSpecifiedTargetEntity() == null) {
+			return getDefaultTargetEntity(); //already fully qualified, or null which is fine
+		}
+		//not positive this is the right way to handle this
+		Expression expression = this.targetEntityAdapter.expression(astRoot);
+		if (expression.getNodeType() == ASTNode.TYPE_LITERAL) {
+			ITypeBinding resolvedTypeBinding = ((TypeLiteral) expression).getType().resolveBinding();
+			if (resolvedTypeBinding != null) {
+				return resolvedTypeBinding.getQualifiedName();
+			}
+		}
+		return null;
 	}
 
 	@Override
 	public void updateFromJava(CompilationUnit astRoot) {
 		super.updateFromJava(astRoot);
-		setDefaultTargetEntity(this.javaDefaultTargetEntity());
+		updateDefaultTargetEntityFromJava(astRoot);
 		setSpecifiedTargetEntity(this.targetEntityAdapter.getValue(astRoot));
 		this.updateFetchFromJava(astRoot);
 		if (this.cascade != null) {
 			((JavaCascade) this.cascade).updateFromJava(astRoot);
 		}
-		else if (cascadeAdapter().expression(getAttribute().modifiedDeclaration()) != null) {
+		else if (cascadeAdapter().expression(getAttribute().modifiedDeclaration(astRoot)) != null) {
 			setCascade(createCascade());
 			((JavaCascade) this.cascade).updateFromJava(astRoot);
 		}
 	}
 
+	private void updateDefaultTargetEntityFromJava(CompilationUnit astRoot) {
+		ITypeBinding typeBinding = getAttribute().typeBinding(astRoot);
+		if (typeBinding != null) {
+			setDefaultTargetEntity(javaDefaultTargetEntity(typeBinding));
+		}
+		else {
+			setDefaultTargetEntity(null);
+		}
+	}
+
 	/**
 	 * delegate to subclasses because there are different 'fetch'
 	 * defaults across the subclasses
@@ -578,20 +599,16 @@
 	 * the default 'targetEntity' is calculated from the attribute type;
 	 * return null if the attribute type cannot possibly be an entity
 	 */
-	protected String javaDefaultTargetEntity() {
-		return this.javaDefaultTargetEntity(this.getAttribute().typeSignature());
+	protected String javaDefaultTargetEntity(ITypeBinding typeBinding) {
+		return buildReferenceEntityTypeName(typeBinding);
 	}
 
-	protected String javaDefaultTargetEntity(String signature) {
-		return buildReferenceEntityTypeName(signature, jdtType());
-	}
-
-	// TODO Embeddable???
-	public static String buildReferenceEntityTypeName(String signature, IType jdtType) {
-		if (Signature.getArrayCount(signature) > 0) {
-			return null; // arrays cannot be entities
+	//	// TODO Embeddable???
+	public static String buildReferenceEntityTypeName(ITypeBinding typeBinding) {
+		if (!typeBinding.isArray()) { // arrays cannot be entities
+			return typeBinding.getQualifiedName();
 		}
-		return JDTTools.resolve(Signature.toString(signature), jdtType);
+		return null;
 	}
 
 	public IEntity getEntity() {
@@ -605,7 +622,7 @@
 	@Override
 	public void refreshDefaults(DefaultsContext defaultsContext) {
 		super.refreshDefaults(defaultsContext);
-		String targetEntityName = fullyQualifiedTargetEntity();
+		String targetEntityName = fullyQualifiedTargetEntity(defaultsContext.astRoot());
 		if (targetEntityName != null) {
 			IPersistentType persistentType = defaultsContext.persistentType(targetEntityName);
 			if (persistentType != null) {
@@ -654,8 +671,8 @@
 		return buildAnnotationElementAdapter(annotationAdapter, elementName, StringExpressionConverter.instance());
 	}
 
-	protected static <T extends Expression> DeclarationAnnotationElementAdapter<String> buildAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, ExpressionConverter<String, T> converter) {
-		return new ConversionDeclarationAnnotationElementAdapter<String, T>(annotationAdapter, elementName, false, converter);
+	protected static DeclarationAnnotationElementAdapter<String> buildAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, ExpressionConverter<String> converter) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, false, converter);
 	}
 
 	protected static DeclarationAnnotationElementAdapter<String> buildEnumAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java
index 73dd74f..0d325cb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaSingleRelationshipMapping.java
@@ -1,8 +1,8 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
  * 
  * Contributors:
  *     Oracle - initial API and implementation
@@ -20,8 +20,8 @@
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
-import org.eclipse.jdt.core.dom.BooleanLiteral;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jpt.core.internal.jdtutility.AnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.BooleanStringExpressionConverter;
@@ -49,8 +49,6 @@
 public abstract class JavaSingleRelationshipMapping
 	extends JavaRelationshipMapping implements ISingleRelationshipMapping
 {
-	private AnnotationElementAdapter<String> optionalAdapter;
-
 	/**
 	 * The default value of the '{@link #getFetch() <em>Fetch</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -111,6 +109,8 @@
 	 */
 	protected DefaultTrueBoolean optional = OPTIONAL_EDEFAULT;
 
+	private AnnotationElementAdapter<String> optionalAdapter;
+
 	protected JavaSingleRelationshipMapping() {
 		throw new UnsupportedOperationException("Use JavaSingleRelationshipMapping(Attribute) instead");
 	}
@@ -646,8 +646,8 @@
 	 * extend to eliminate any "container" types
 	 */
 	@Override
-	protected String javaDefaultTargetEntity() {
-		String typeName = super.javaDefaultTargetEntity();
+	protected String javaDefaultTargetEntity(ITypeBinding typeBinding) {
+		String typeName = super.javaDefaultTargetEntity(typeBinding);
 		// if the attribute is a container, don't use it
 		return typeNamedIsContainer(typeName) ? null : typeName;
 	}
@@ -681,6 +681,6 @@
 
 	// ********** static methods **********
 	protected static DeclarationAnnotationElementAdapter<String> buildOptionalAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
-		return new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(annotationAdapter, elementName, false, BooleanStringExpressionConverter.instance());
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, false, BooleanStringExpressionConverter.instance());
 	}
 } // JavaSingleRelationshipMapping
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTransient.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTransient.java
index da9c650..61c6a14 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTransient.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTransient.java
@@ -14,7 +14,6 @@
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleDeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.mappings.ITransient;
 
 /**
  * <!-- begin-user-doc -->
@@ -26,7 +25,8 @@
  * @model kind="class"
  * @generated
  */
-public class JavaTransient extends JavaAttributeMapping implements ITransient
+public class JavaTransient extends JavaAttributeMapping
+	implements IJavaTransient
 {
 	public static final DeclarationAnnotationAdapter DECLARATION_ANNOTATION_ADAPTER = new SimpleDeclarationAnnotationAdapter(JPA.TRANSIENT);
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTransientProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTransientProvider.java
index 79b7de8..4e889a4 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTransientProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTransientProvider.java
@@ -9,12 +9,12 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * 
@@ -43,13 +43,9 @@
 	public String key() {
 		return IMappingKeys.TRANSIENT_ATTRIBUTE_MAPPING_KEY;
 	}
-	
-	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return false;
-	}
 
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaTransient(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaTransient(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTypeMapping.java
index ed2ae48..9b62165 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaTypeMapping.java
@@ -101,18 +101,6 @@
 		return this.getType().getName();
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model
-	 * @generated
-	 */
-	public void initialize() {
-		// TODO: implement this method
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
 	public IPersistentType getPersistentType() {
 		return (IPersistentType) this.eContainer();
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaUniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaUniqueConstraint.java
index 2e8165f..51ec6ee 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaUniqueConstraint.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaUniqueConstraint.java
@@ -16,11 +16,11 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.util.EDataTypeEList;
 import org.eclipse.jdt.core.dom.Annotation;
-import org.eclipse.jdt.core.dom.ArrayInitializer;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.content.java.JavaEObject;
 import org.eclipse.jpt.core.internal.jdtutility.AnnotationElementAdapter;
+import org.eclipse.jpt.core.internal.jdtutility.AnnotationStringArrayExpressionConverter;
 import org.eclipse.jpt.core.internal.jdtutility.ConversionDeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationElementAdapter;
@@ -32,7 +32,6 @@
 import org.eclipse.jpt.core.internal.jdtutility.NestedIndexedDeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.ShortCircuitArrayAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleDeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.jdtutility.StringArrayExpressionConverter;
 import org.eclipse.jpt.core.internal.mappings.IUniqueConstraint;
 import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
 import org.eclipse.jpt.utility.internal.CollectionTools;
@@ -97,11 +96,11 @@
 	}
 
 	protected static DeclarationAnnotationElementAdapter<String[]> buildArrayAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
-		return buildArrayAnnotationElementAdapter(annotationAdapter, elementName, StringArrayExpressionConverter.forStringLiterals());
+		return buildArrayAnnotationElementAdapter(annotationAdapter, elementName, AnnotationStringArrayExpressionConverter.forStrings());
 	}
 
-	protected static DeclarationAnnotationElementAdapter<String[]> buildArrayAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, ExpressionConverter<String[], ArrayInitializer> converter) {
-		return new ConversionDeclarationAnnotationElementAdapter<String[], ArrayInitializer>(annotationAdapter, elementName, false, converter);
+	protected static DeclarationAnnotationElementAdapter<String[]> buildArrayAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, ExpressionConverter<String[]> converter) {
+		return new ConversionDeclarationAnnotationElementAdapter<String[]>(annotationAdapter, elementName, false, converter);
 	}
 
 	@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaVersion.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaVersion.java
index 4153281..032081d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaVersion.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaVersion.java
@@ -43,7 +43,7 @@
  * @model kind="class"
  * @generated
  */
-public class JavaVersion extends JavaAttributeMapping implements IVersion
+public class JavaVersion extends JavaAttributeMapping implements IJavaVersion
 {
 	private final AnnotationAdapter temporalAnnotationAdapter;
 
@@ -290,6 +290,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaVersion.class) {
+			switch (derivedFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
 	}
 
@@ -316,6 +322,12 @@
 					return -1;
 			}
 		}
+		if (baseClass == IJavaVersion.class) {
+			switch (baseFeatureID) {
+				default :
+					return -1;
+			}
+		}
 		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaVersionProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaVersionProvider.java
index cd556bb..3cd7167 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaVersionProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaVersionProvider.java
@@ -9,12 +9,12 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.java.mappings;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
-import org.eclipse.jpt.core.internal.platform.DefaultsContext;
 
 /**
  * 
@@ -44,12 +44,8 @@
 		return IMappingKeys.VERSION_ATTRIBUTE_MAPPING_KEY;
 	}
 	
-	public boolean defaultApplies(Attribute attribute, DefaultsContext defaultsContext) {
-		return false;
-	}
-
-	public IJavaAttributeMapping buildMapping(Attribute attribute) {
-		return JpaJavaMappingsFactory.eINSTANCE.createJavaVersion(attribute);
+	public IJavaAttributeMapping buildMapping(Attribute attribute, IJpaFactory factory) {
+		return factory.createJavaVersion(attribute);
 	}
 
 	public DeclarationAnnotationAdapter declarationAnnotationAdapter() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JpaJavaMappingsPackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JpaJavaMappingsPackage.java
index da4c646..0bc3cea 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JpaJavaMappingsPackage.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JpaJavaMappingsPackage.java
@@ -69,6 +69,1036 @@
 	public static final JpaJavaMappingsPackage eINSTANCE = org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage.init();
 
 	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity <em>IJava Entity</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEntity()
+	 * @generated
+	 */
+	public static final int IJAVA_ENTITY = 0;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__NAME = JpaJavaPackage.IJAVA_TYPE_MAPPING__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Table Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__TABLE_NAME = JpaJavaPackage.IJAVA_TYPE_MAPPING__TABLE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Specified Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__SPECIFIED_NAME = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Default Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__DEFAULT_NAME = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Table</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__TABLE = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Specified Secondary Tables</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__SPECIFIED_SECONDARY_TABLES = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Primary Key Join Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__PRIMARY_KEY_JOIN_COLUMNS = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Specified Primary Key Join Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__SPECIFIED_PRIMARY_KEY_JOIN_COLUMNS = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Default Primary Key Join Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__DEFAULT_PRIMARY_KEY_JOIN_COLUMNS = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Inheritance Strategy</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__INHERITANCE_STRATEGY = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Default Discriminator Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__DEFAULT_DISCRIMINATOR_VALUE = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Specified Discriminator Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__SPECIFIED_DISCRIMINATOR_VALUE = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Discriminator Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__DISCRIMINATOR_VALUE = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Discriminator Column</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__DISCRIMINATOR_COLUMN = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Sequence Generator</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__SEQUENCE_GENERATOR = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 12;
+
+	/**
+	 * The feature id for the '<em><b>Table Generator</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__TABLE_GENERATOR = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 13;
+
+	/**
+	 * The feature id for the '<em><b>Attribute Overrides</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__ATTRIBUTE_OVERRIDES = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 14;
+
+	/**
+	 * The feature id for the '<em><b>Specified Attribute Overrides</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__SPECIFIED_ATTRIBUTE_OVERRIDES = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 15;
+
+	/**
+	 * The feature id for the '<em><b>Default Attribute Overrides</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__DEFAULT_ATTRIBUTE_OVERRIDES = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 16;
+
+	/**
+	 * The feature id for the '<em><b>Association Overrides</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__ASSOCIATION_OVERRIDES = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 17;
+
+	/**
+	 * The feature id for the '<em><b>Specified Association Overrides</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__SPECIFIED_ASSOCIATION_OVERRIDES = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 18;
+
+	/**
+	 * The feature id for the '<em><b>Default Association Overrides</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__DEFAULT_ASSOCIATION_OVERRIDES = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 19;
+
+	/**
+	 * The feature id for the '<em><b>Named Queries</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__NAMED_QUERIES = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 20;
+
+	/**
+	 * The feature id for the '<em><b>Named Native Queries</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__NAMED_NATIVE_QUERIES = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 21;
+
+	/**
+	 * The feature id for the '<em><b>Id Class</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY__ID_CLASS = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 22;
+
+	/**
+	 * The number of structural features of the '<em>IJava Entity</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ENTITY_FEATURE_COUNT = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 23;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable <em>IJava Embeddable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEmbeddable()
+	 * @generated
+	 */
+	public static final int IJAVA_EMBEDDABLE = 1;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_EMBEDDABLE__NAME = JpaJavaPackage.IJAVA_TYPE_MAPPING__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Table Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_EMBEDDABLE__TABLE_NAME = JpaJavaPackage.IJAVA_TYPE_MAPPING__TABLE_NAME;
+
+	/**
+	 * The number of structural features of the '<em>IJava Embeddable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_EMBEDDABLE_FEATURE_COUNT = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass <em>IJava Mapped Superclass</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaMappedSuperclass()
+	 * @generated
+	 */
+	public static final int IJAVA_MAPPED_SUPERCLASS = 2;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MAPPED_SUPERCLASS__NAME = JpaJavaPackage.IJAVA_TYPE_MAPPING__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Table Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MAPPED_SUPERCLASS__TABLE_NAME = JpaJavaPackage.IJAVA_TYPE_MAPPING__TABLE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Id Class</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MAPPED_SUPERCLASS__ID_CLASS = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>IJava Mapped Superclass</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MAPPED_SUPERCLASS_FEATURE_COUNT = JpaJavaPackage.IJAVA_TYPE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic <em>IJava Basic</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaBasic()
+	 * @generated
+	 */
+	public static final int IJAVA_BASIC = 3;
+
+	/**
+	 * The feature id for the '<em><b>Fetch</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_BASIC__FETCH = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Optional</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_BASIC__OPTIONAL = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Column</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_BASIC__COLUMN = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Lob</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_BASIC__LOB = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Temporal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_BASIC__TEMPORAL = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Enumerated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_BASIC__ENUMERATED = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>IJava Basic</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_BASIC_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded <em>IJava Embedded</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEmbedded()
+	 * @generated
+	 */
+	public static final int IJAVA_EMBEDDED = 4;
+
+	/**
+	 * The feature id for the '<em><b>Attribute Overrides</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_EMBEDDED__ATTRIBUTE_OVERRIDES = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Specified Attribute Overrides</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_EMBEDDED__SPECIFIED_ATTRIBUTE_OVERRIDES = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Default Attribute Overrides</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_EMBEDDED__DEFAULT_ATTRIBUTE_OVERRIDES = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>IJava Embedded</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_EMBEDDED_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId <em>IJava Embedded Id</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEmbeddedId()
+	 * @generated
+	 */
+	public static final int IJAVA_EMBEDDED_ID = 5;
+
+	/**
+	 * The number of structural features of the '<em>IJava Embedded Id</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_EMBEDDED_ID_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaId <em>IJava Id</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaId
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaId()
+	 * @generated
+	 */
+	public static final int IJAVA_ID = 6;
+
+	/**
+	 * The feature id for the '<em><b>Column</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ID__COLUMN = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Generated Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ID__GENERATED_VALUE = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Temporal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ID__TEMPORAL = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Table Generator</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ID__TABLE_GENERATOR = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Sequence Generator</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ID__SEQUENCE_GENERATOR = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>IJava Id</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ID_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany <em>IJava Many To Many</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaManyToMany()
+	 * @generated
+	 */
+	public static final int IJAVA_MANY_TO_MANY = 7;
+
+	/**
+	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Specified Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__SPECIFIED_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Default Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__DEFAULT_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Resolved Target Entity</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__RESOLVED_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Cascade</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__CASCADE = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Mapped By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__MAPPED_BY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Order By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__ORDER_BY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Fetch</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__FETCH = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Join Table</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__JOIN_TABLE = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Map Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY__MAP_KEY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 9;
+
+	/**
+	 * The number of structural features of the '<em>IJava Many To Many</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_MANY_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 10;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne <em>IJava Many To One</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaManyToOne()
+	 * @generated
+	 */
+	public static final int IJAVA_MANY_TO_ONE = 8;
+
+	/**
+	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Specified Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__SPECIFIED_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Default Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__DEFAULT_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Resolved Target Entity</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__RESOLVED_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Cascade</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__CASCADE = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Fetch</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__FETCH = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Join Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__JOIN_COLUMNS = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Specified Join Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__SPECIFIED_JOIN_COLUMNS = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Default Join Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__DEFAULT_JOIN_COLUMNS = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Optional</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE__OPTIONAL = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 9;
+
+	/**
+	 * The number of structural features of the '<em>IJava Many To One</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_MANY_TO_ONE_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 10;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany <em>IJava One To Many</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaOneToMany()
+	 * @generated
+	 */
+	public static final int IJAVA_ONE_TO_MANY = 9;
+
+	/**
+	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Specified Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__SPECIFIED_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Default Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__DEFAULT_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Resolved Target Entity</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__RESOLVED_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Cascade</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__CASCADE = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Mapped By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__MAPPED_BY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Order By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__ORDER_BY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Fetch</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__FETCH = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Join Table</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__JOIN_TABLE = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Map Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY__MAP_KEY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 9;
+
+	/**
+	 * The number of structural features of the '<em>IJava One To Many</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_MANY_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 10;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne <em>IJava One To One</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaOneToOne()
+	 * @generated
+	 */
+	public static final int IJAVA_ONE_TO_ONE = 10;
+
+	/**
+	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Specified Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__SPECIFIED_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Default Target Entity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__DEFAULT_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Resolved Target Entity</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__RESOLVED_TARGET_ENTITY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Cascade</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__CASCADE = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Fetch</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__FETCH = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Join Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__JOIN_COLUMNS = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Specified Join Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__SPECIFIED_JOIN_COLUMNS = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Default Join Columns</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__DEFAULT_JOIN_COLUMNS = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Optional</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__OPTIONAL = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Mapped By</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE__MAPPED_BY = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 10;
+
+	/**
+	 * The number of structural features of the '<em>IJava One To One</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_ONE_TO_ONE_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 11;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient <em>IJava Transient</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaTransient()
+	 * @generated
+	 */
+	public static final int IJAVA_TRANSIENT = 11;
+
+	/**
+	 * The number of structural features of the '<em>IJava Transient</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_TRANSIENT_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion <em>IJava Version</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaVersion()
+	 * @generated
+	 */
+	public static final int IJAVA_VERSION = 12;
+
+	/**
+	 * The feature id for the '<em><b>Column</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_VERSION__COLUMN = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Temporal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_VERSION__TEMPORAL = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>IJava Version</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int IJAVA_VERSION_FEATURE_COUNT = JpaJavaPackage.IJAVA_ATTRIBUTE_MAPPING_FEATURE_COUNT + 2;
+
+	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaTypeMapping <em>Java Type Mapping</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -76,7 +1106,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaTypeMapping()
 	 * @generated
 	 */
-	public static final int JAVA_TYPE_MAPPING = 0;
+	public static final int JAVA_TYPE_MAPPING = 13;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -113,7 +1143,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaEntity()
 	 * @generated
 	 */
-	public static final int JAVA_ENTITY = 1;
+	public static final int JAVA_ENTITY = 14;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -357,7 +1387,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaMappedSuperclass()
 	 * @generated
 	 */
-	public static final int JAVA_MAPPED_SUPERCLASS = 2;
+	public static final int JAVA_MAPPED_SUPERCLASS = 15;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -403,7 +1433,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaEmbeddable()
 	 * @generated
 	 */
-	public static final int JAVA_EMBEDDABLE = 3;
+	public static final int JAVA_EMBEDDABLE = 16;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -440,7 +1470,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaNullTypeMapping()
 	 * @generated
 	 */
-	public static final int JAVA_NULL_TYPE_MAPPING = 4;
+	public static final int JAVA_NULL_TYPE_MAPPING = 17;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -477,7 +1507,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaAttributeMapping()
 	 * @generated
 	 */
-	public static final int JAVA_ATTRIBUTE_MAPPING = 5;
+	public static final int JAVA_ATTRIBUTE_MAPPING = 18;
 
 	/**
 	 * The number of structural features of the '<em>Java Attribute Mapping</em>' class.
@@ -496,7 +1526,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaNullAttributeMapping()
 	 * @generated
 	 */
-	public static final int JAVA_NULL_ATTRIBUTE_MAPPING = 19;
+	public static final int JAVA_NULL_ATTRIBUTE_MAPPING = 32;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaBasic <em>Java Basic</em>}' class.
@@ -506,7 +1536,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaBasic()
 	 * @generated
 	 */
-	public static final int JAVA_BASIC = 6;
+	public static final int JAVA_BASIC = 19;
 
 	/**
 	 * The feature id for the '<em><b>Fetch</b></em>' attribute.
@@ -579,7 +1609,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaId()
 	 * @generated
 	 */
-	public static final int JAVA_ID = 7;
+	public static final int JAVA_ID = 20;
 
 	/**
 	 * The feature id for the '<em><b>Column</b></em>' containment reference.
@@ -643,7 +1673,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaTransient()
 	 * @generated
 	 */
-	public static final int JAVA_TRANSIENT = 8;
+	public static final int JAVA_TRANSIENT = 21;
 
 	/**
 	 * The number of structural features of the '<em>Java Transient</em>' class.
@@ -662,7 +1692,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaVersion()
 	 * @generated
 	 */
-	public static final int JAVA_VERSION = 9;
+	public static final int JAVA_VERSION = 22;
 
 	/**
 	 * The feature id for the '<em><b>Column</b></em>' containment reference.
@@ -699,7 +1729,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaEmbeddedId()
 	 * @generated
 	 */
-	public static final int JAVA_EMBEDDED_ID = 10;
+	public static final int JAVA_EMBEDDED_ID = 23;
 
 	/**
 	 * The number of structural features of the '<em>Java Embedded Id</em>' class.
@@ -718,7 +1748,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaEmbedded()
 	 * @generated
 	 */
-	public static final int JAVA_EMBEDDED = 11;
+	public static final int JAVA_EMBEDDED = 24;
 
 	/**
 	 * The feature id for the '<em><b>Attribute Overrides</b></em>' containment reference list.
@@ -764,7 +1794,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaRelationshipMapping()
 	 * @generated
 	 */
-	public static final int JAVA_RELATIONSHIP_MAPPING = 12;
+	public static final int JAVA_RELATIONSHIP_MAPPING = 25;
 
 	/**
 	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
@@ -828,7 +1858,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaSingleRelationshipMapping()
 	 * @generated
 	 */
-	public static final int JAVA_SINGLE_RELATIONSHIP_MAPPING = 13;
+	public static final int JAVA_SINGLE_RELATIONSHIP_MAPPING = 26;
 
 	/**
 	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
@@ -937,7 +1967,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaManyToOne()
 	 * @generated
 	 */
-	public static final int JAVA_MANY_TO_ONE = 14;
+	public static final int JAVA_MANY_TO_ONE = 27;
 
 	/**
 	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
@@ -1046,7 +2076,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaOneToOne()
 	 * @generated
 	 */
-	public static final int JAVA_ONE_TO_ONE = 15;
+	public static final int JAVA_ONE_TO_ONE = 28;
 
 	/**
 	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
@@ -1164,7 +2194,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaMultiRelationshipMapping()
 	 * @generated
 	 */
-	public static final int JAVA_MULTI_RELATIONSHIP_MAPPING = 16;
+	public static final int JAVA_MULTI_RELATIONSHIP_MAPPING = 29;
 
 	/**
 	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
@@ -1273,7 +2303,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaOneToMany()
 	 * @generated
 	 */
-	public static final int JAVA_ONE_TO_MANY = 17;
+	public static final int JAVA_ONE_TO_MANY = 30;
 
 	/**
 	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
@@ -1382,7 +2412,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaManyToMany()
 	 * @generated
 	 */
-	public static final int JAVA_MANY_TO_MANY = 18;
+	public static final int JAVA_MANY_TO_MANY = 31;
 
 	/**
 	 * The feature id for the '<em><b>Target Entity</b></em>' attribute.
@@ -1500,7 +2530,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getAbstractJavaTable()
 	 * @generated
 	 */
-	public static final int ABSTRACT_JAVA_TABLE = 20;
+	public static final int ABSTRACT_JAVA_TABLE = 33;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -1609,7 +2639,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaTable()
 	 * @generated
 	 */
-	public static final int JAVA_TABLE = 21;
+	public static final int JAVA_TABLE = 34;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -1718,7 +2748,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaJoinTable()
 	 * @generated
 	 */
-	public static final int JAVA_JOIN_TABLE = 23;
+	public static final int JAVA_JOIN_TABLE = 36;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaColumn <em>Java Column</em>}' class.
@@ -1728,7 +2758,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaColumn()
 	 * @generated
 	 */
-	public static final int JAVA_COLUMN = 26;
+	public static final int JAVA_COLUMN = 39;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaJoinColumn <em>Java Join Column</em>}' class.
@@ -1738,7 +2768,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaJoinColumn()
 	 * @generated
 	 */
-	public static final int JAVA_JOIN_COLUMN = 27;
+	public static final int JAVA_JOIN_COLUMN = 40;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaAttributeOverride <em>Java Attribute Override</em>}' class.
@@ -1748,7 +2778,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaAttributeOverride()
 	 * @generated
 	 */
-	public static final int JAVA_ATTRIBUTE_OVERRIDE = 29;
+	public static final int JAVA_ATTRIBUTE_OVERRIDE = 42;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaAssociationOverride <em>Java Association Override</em>}' class.
@@ -1758,7 +2788,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaAssociationOverride()
 	 * @generated
 	 */
-	public static final int JAVA_ASSOCIATION_OVERRIDE = 30;
+	public static final int JAVA_ASSOCIATION_OVERRIDE = 43;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaDiscriminatorColumn <em>Java Discriminator Column</em>}' class.
@@ -1768,7 +2798,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaDiscriminatorColumn()
 	 * @generated
 	 */
-	public static final int JAVA_DISCRIMINATOR_COLUMN = 31;
+	public static final int JAVA_DISCRIMINATOR_COLUMN = 44;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaPrimaryKeyJoinColumn <em>Java Primary Key Join Column</em>}' class.
@@ -1778,7 +2808,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaPrimaryKeyJoinColumn()
 	 * @generated
 	 */
-	public static final int JAVA_PRIMARY_KEY_JOIN_COLUMN = 32;
+	public static final int JAVA_PRIMARY_KEY_JOIN_COLUMN = 45;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaGeneratedValue <em>Java Generated Value</em>}' class.
@@ -1788,7 +2818,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaGeneratedValue()
 	 * @generated
 	 */
-	public static final int JAVA_GENERATED_VALUE = 33;
+	public static final int JAVA_GENERATED_VALUE = 46;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaGenerator <em>Java Generator</em>}' class.
@@ -1798,7 +2828,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaGenerator()
 	 * @generated
 	 */
-	public static final int JAVA_GENERATOR = 34;
+	public static final int JAVA_GENERATOR = 47;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaTableGenerator <em>Java Table Generator</em>}' class.
@@ -1808,7 +2838,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaTableGenerator()
 	 * @generated
 	 */
-	public static final int JAVA_TABLE_GENERATOR = 35;
+	public static final int JAVA_TABLE_GENERATOR = 48;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaSequenceGenerator <em>Java Sequence Generator</em>}' class.
@@ -1818,7 +2848,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaSequenceGenerator()
 	 * @generated
 	 */
-	public static final int JAVA_SEQUENCE_GENERATOR = 36;
+	public static final int JAVA_SEQUENCE_GENERATOR = 49;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaSecondaryTable <em>Java Secondary Table</em>}' class.
@@ -1828,7 +2858,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaSecondaryTable()
 	 * @generated
 	 */
-	public static final int JAVA_SECONDARY_TABLE = 22;
+	public static final int JAVA_SECONDARY_TABLE = 35;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -2117,7 +3147,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaNamedColumn()
 	 * @generated
 	 */
-	public static final int JAVA_NAMED_COLUMN = 24;
+	public static final int JAVA_NAMED_COLUMN = 37;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -2172,7 +3202,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getAbstractJavaColumn()
 	 * @generated
 	 */
-	public static final int ABSTRACT_JAVA_COLUMN = 25;
+	public static final int ABSTRACT_JAVA_COLUMN = 38;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -2391,13 +3421,31 @@
 	public static final int JAVA_COLUMN__LENGTH = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Specified Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int JAVA_COLUMN__SPECIFIED_LENGTH = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 1;
+
+	/**
 	 * The feature id for the '<em><b>Precision</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JAVA_COLUMN__PRECISION = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 1;
+	public static final int JAVA_COLUMN__PRECISION = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Specified Precision</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int JAVA_COLUMN__SPECIFIED_PRECISION = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Scale</b></em>' attribute.
@@ -2406,7 +3454,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JAVA_COLUMN__SCALE = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 2;
+	public static final int JAVA_COLUMN__SCALE = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Specified Scale</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int JAVA_COLUMN__SPECIFIED_SCALE = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 5;
 
 	/**
 	 * The number of structural features of the '<em>Java Column</em>' class.
@@ -2415,7 +3472,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int JAVA_COLUMN_FEATURE_COUNT = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 3;
+	public static final int JAVA_COLUMN_FEATURE_COUNT = ABSTRACT_JAVA_COLUMN_FEATURE_COUNT + 6;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -2560,7 +3617,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaOverride()
 	 * @generated
 	 */
-	public static final int JAVA_OVERRIDE = 28;
+	public static final int JAVA_OVERRIDE = 41;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3254,7 +4311,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaAbstractQuery()
 	 * @generated
 	 */
-	public static final int JAVA_ABSTRACT_QUERY = 37;
+	public static final int JAVA_ABSTRACT_QUERY = 50;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3300,7 +4357,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaNamedQuery()
 	 * @generated
 	 */
-	public static final int JAVA_NAMED_QUERY = 38;
+	public static final int JAVA_NAMED_QUERY = 51;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3346,7 +4403,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaNamedNativeQuery()
 	 * @generated
 	 */
-	public static final int JAVA_NAMED_NATIVE_QUERY = 39;
+	public static final int JAVA_NAMED_NATIVE_QUERY = 52;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3410,7 +4467,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaQueryHint()
 	 * @generated
 	 */
-	public static final int JAVA_QUERY_HINT = 40;
+	public static final int JAVA_QUERY_HINT = 53;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3447,7 +4504,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaUniqueConstraint()
 	 * @generated
 	 */
-	public static final int JAVA_UNIQUE_CONSTRAINT = 41;
+	public static final int JAVA_UNIQUE_CONSTRAINT = 54;
 
 	/**
 	 * The feature id for the '<em><b>Column Names</b></em>' attribute list.
@@ -3475,7 +4532,7 @@
 	 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaCascade()
 	 * @generated
 	 */
-	public static final int JAVA_CASCADE = 42;
+	public static final int JAVA_CASCADE = 55;
 
 	/**
 	 * The feature id for the '<em><b>All</b></em>' attribute.
@@ -3536,6 +4593,97 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EClass iJavaEntityEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaEmbeddableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaMappedSuperclassEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaBasicEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaEmbeddedEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaEmbeddedIdEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaIdEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaManyToManyEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaManyToOneEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaOneToManyEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaOneToOneEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaTransientEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass iJavaVersionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EClass javaEntityEClass = null;
 
 	/**
@@ -3914,6 +5062,162 @@
 	}
 
 	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity <em>IJava Entity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Entity</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity
+	 * @generated
+	 */
+	public EClass getIJavaEntity() {
+		return iJavaEntityEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable <em>IJava Embeddable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Embeddable</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable
+	 * @generated
+	 */
+	public EClass getIJavaEmbeddable() {
+		return iJavaEmbeddableEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass <em>IJava Mapped Superclass</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Mapped Superclass</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass
+	 * @generated
+	 */
+	public EClass getIJavaMappedSuperclass() {
+		return iJavaMappedSuperclassEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic <em>IJava Basic</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Basic</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic
+	 * @generated
+	 */
+	public EClass getIJavaBasic() {
+		return iJavaBasicEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded <em>IJava Embedded</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Embedded</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded
+	 * @generated
+	 */
+	public EClass getIJavaEmbedded() {
+		return iJavaEmbeddedEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId <em>IJava Embedded Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Embedded Id</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId
+	 * @generated
+	 */
+	public EClass getIJavaEmbeddedId() {
+		return iJavaEmbeddedIdEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaId <em>IJava Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Id</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaId
+	 * @generated
+	 */
+	public EClass getIJavaId() {
+		return iJavaIdEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany <em>IJava Many To Many</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Many To Many</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany
+	 * @generated
+	 */
+	public EClass getIJavaManyToMany() {
+		return iJavaManyToManyEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne <em>IJava Many To One</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Many To One</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne
+	 * @generated
+	 */
+	public EClass getIJavaManyToOne() {
+		return iJavaManyToOneEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany <em>IJava One To Many</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava One To Many</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany
+	 * @generated
+	 */
+	public EClass getIJavaOneToMany() {
+		return iJavaOneToManyEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne <em>IJava One To One</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava One To One</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne
+	 * @generated
+	 */
+	public EClass getIJavaOneToOne() {
+		return iJavaOneToOneEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient <em>IJava Transient</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Transient</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient
+	 * @generated
+	 */
+	public EClass getIJavaTransient() {
+		return iJavaTransientEClass;
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion <em>IJava Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>IJava Version</em>'.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion
+	 * @generated
+	 */
+	public EClass getIJavaVersion() {
+		return iJavaVersionEClass;
+	}
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaEntity <em>Java Entity</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4459,6 +5763,19 @@
 			return;
 		isCreated = true;
 		// Create classes and their features
+		iJavaEntityEClass = createEClass(IJAVA_ENTITY);
+		iJavaEmbeddableEClass = createEClass(IJAVA_EMBEDDABLE);
+		iJavaMappedSuperclassEClass = createEClass(IJAVA_MAPPED_SUPERCLASS);
+		iJavaBasicEClass = createEClass(IJAVA_BASIC);
+		iJavaEmbeddedEClass = createEClass(IJAVA_EMBEDDED);
+		iJavaEmbeddedIdEClass = createEClass(IJAVA_EMBEDDED_ID);
+		iJavaIdEClass = createEClass(IJAVA_ID);
+		iJavaManyToManyEClass = createEClass(IJAVA_MANY_TO_MANY);
+		iJavaManyToOneEClass = createEClass(IJAVA_MANY_TO_ONE);
+		iJavaOneToManyEClass = createEClass(IJAVA_ONE_TO_MANY);
+		iJavaOneToOneEClass = createEClass(IJAVA_ONE_TO_ONE);
+		iJavaTransientEClass = createEClass(IJAVA_TRANSIENT);
+		iJavaVersionEClass = createEClass(IJAVA_VERSION);
 		javaTypeMappingEClass = createEClass(JAVA_TYPE_MAPPING);
 		javaEntityEClass = createEClass(JAVA_ENTITY);
 		javaMappedSuperclassEClass = createEClass(JAVA_MAPPED_SUPERCLASS);
@@ -4532,43 +5849,69 @@
 		// Create type parameters
 		// Set bounds for type parameters
 		// Add supertypes to classes
+		iJavaEntityEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaTypeMapping());
+		iJavaEntityEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIEntity());
+		iJavaEmbeddableEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaTypeMapping());
+		iJavaEmbeddableEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIEmbeddable());
+		iJavaMappedSuperclassEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaTypeMapping());
+		iJavaMappedSuperclassEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIMappedSuperclass());
+		iJavaBasicEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaBasicEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIBasic());
+		iJavaEmbeddedEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaEmbeddedEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIEmbedded());
+		iJavaEmbeddedIdEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaEmbeddedIdEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIEmbeddedId());
+		iJavaIdEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaIdEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIId());
+		iJavaManyToManyEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaManyToManyEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIManyToMany());
+		iJavaManyToOneEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaManyToOneEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIManyToOne());
+		iJavaOneToManyEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaOneToManyEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIOneToMany());
+		iJavaOneToOneEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaOneToOneEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIOneToOne());
+		iJavaTransientEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaTransientEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getITransient());
+		iJavaVersionEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
+		iJavaVersionEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIVersion());
 		javaTypeMappingEClass.getESuperTypes().add(theJpaJavaPackage.getJavaEObject());
 		javaTypeMappingEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaTypeMapping());
 		javaEntityEClass.getESuperTypes().add(this.getJavaTypeMapping());
-		javaEntityEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIEntity());
+		javaEntityEClass.getESuperTypes().add(this.getIJavaEntity());
 		javaMappedSuperclassEClass.getESuperTypes().add(this.getJavaTypeMapping());
-		javaMappedSuperclassEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIMappedSuperclass());
+		javaMappedSuperclassEClass.getESuperTypes().add(this.getIJavaMappedSuperclass());
 		javaEmbeddableEClass.getESuperTypes().add(this.getJavaTypeMapping());
-		javaEmbeddableEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIEmbeddable());
+		javaEmbeddableEClass.getESuperTypes().add(this.getIJavaEmbeddable());
 		javaNullTypeMappingEClass.getESuperTypes().add(this.getJavaTypeMapping());
 		javaAttributeMappingEClass.getESuperTypes().add(theJpaJavaPackage.getJavaEObject());
 		javaAttributeMappingEClass.getESuperTypes().add(theJpaJavaPackage.getIJavaAttributeMapping());
 		javaBasicEClass.getESuperTypes().add(this.getJavaAttributeMapping());
-		javaBasicEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIBasic());
+		javaBasicEClass.getESuperTypes().add(this.getIJavaBasic());
 		javaIdEClass.getESuperTypes().add(this.getJavaAttributeMapping());
-		javaIdEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIId());
+		javaIdEClass.getESuperTypes().add(this.getIJavaId());
 		javaTransientEClass.getESuperTypes().add(this.getJavaAttributeMapping());
-		javaTransientEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getITransient());
+		javaTransientEClass.getESuperTypes().add(this.getIJavaTransient());
 		javaVersionEClass.getESuperTypes().add(this.getJavaAttributeMapping());
-		javaVersionEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIVersion());
+		javaVersionEClass.getESuperTypes().add(this.getIJavaVersion());
 		javaEmbeddedIdEClass.getESuperTypes().add(this.getJavaAttributeMapping());
-		javaEmbeddedIdEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIEmbeddedId());
+		javaEmbeddedIdEClass.getESuperTypes().add(this.getIJavaEmbeddedId());
 		javaEmbeddedEClass.getESuperTypes().add(this.getJavaAttributeMapping());
-		javaEmbeddedEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIEmbedded());
+		javaEmbeddedEClass.getESuperTypes().add(this.getIJavaEmbedded());
 		javaRelationshipMappingEClass.getESuperTypes().add(this.getJavaAttributeMapping());
 		javaRelationshipMappingEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIRelationshipMapping());
 		javaSingleRelationshipMappingEClass.getESuperTypes().add(this.getJavaRelationshipMapping());
 		javaSingleRelationshipMappingEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getISingleRelationshipMapping());
 		javaManyToOneEClass.getESuperTypes().add(this.getJavaSingleRelationshipMapping());
-		javaManyToOneEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIManyToOne());
+		javaManyToOneEClass.getESuperTypes().add(this.getIJavaManyToOne());
 		javaOneToOneEClass.getESuperTypes().add(this.getJavaSingleRelationshipMapping());
-		javaOneToOneEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIOneToOne());
+		javaOneToOneEClass.getESuperTypes().add(this.getIJavaOneToOne());
 		javaMultiRelationshipMappingEClass.getESuperTypes().add(this.getJavaRelationshipMapping());
 		javaMultiRelationshipMappingEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIMultiRelationshipMapping());
 		javaOneToManyEClass.getESuperTypes().add(this.getJavaMultiRelationshipMapping());
-		javaOneToManyEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIOneToMany());
+		javaOneToManyEClass.getESuperTypes().add(this.getIJavaOneToMany());
 		javaManyToManyEClass.getESuperTypes().add(this.getJavaMultiRelationshipMapping());
-		javaManyToManyEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getIManyToMany());
+		javaManyToManyEClass.getESuperTypes().add(this.getIJavaManyToMany());
 		javaNullAttributeMappingEClass.getESuperTypes().add(this.getJavaAttributeMapping());
 		abstractJavaTableEClass.getESuperTypes().add(theJpaJavaPackage.getJavaEObject());
 		abstractJavaTableEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getITable());
@@ -4616,6 +5959,19 @@
 		javaCascadeEClass.getESuperTypes().add(theJpaJavaPackage.getJavaEObject());
 		javaCascadeEClass.getESuperTypes().add(theJpaCoreMappingsPackage.getICascade());
 		// Initialize classes and features; add operations and parameters
+		initEClass(iJavaEntityEClass, IJavaEntity.class, "IJavaEntity", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaEmbeddableEClass, IJavaEmbeddable.class, "IJavaEmbeddable", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaMappedSuperclassEClass, IJavaMappedSuperclass.class, "IJavaMappedSuperclass", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaBasicEClass, IJavaBasic.class, "IJavaBasic", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaEmbeddedEClass, IJavaEmbedded.class, "IJavaEmbedded", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaEmbeddedIdEClass, IJavaEmbeddedId.class, "IJavaEmbeddedId", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaIdEClass, IJavaId.class, "IJavaId", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaManyToManyEClass, IJavaManyToMany.class, "IJavaManyToMany", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaManyToOneEClass, IJavaManyToOne.class, "IJavaManyToOne", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaOneToManyEClass, IJavaOneToMany.class, "IJavaOneToMany", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaOneToOneEClass, IJavaOneToOne.class, "IJavaOneToOne", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaTransientEClass, IJavaTransient.class, "IJavaTransient", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEClass(iJavaVersionEClass, IJavaVersion.class, "IJavaVersion", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEClass(javaTypeMappingEClass, JavaTypeMapping.class, "JavaTypeMapping", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEClass(javaEntityEClass, JavaEntity.class, "JavaEntity", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEClass(javaMappedSuperclassEClass, JavaMappedSuperclass.class, "JavaMappedSuperclass", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -4677,6 +6033,136 @@
 	public interface Literals
 	{
 		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity <em>IJava Entity</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEntity()
+		 * @generated
+		 */
+		public static final EClass IJAVA_ENTITY = eINSTANCE.getIJavaEntity();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable <em>IJava Embeddable</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEmbeddable()
+		 * @generated
+		 */
+		public static final EClass IJAVA_EMBEDDABLE = eINSTANCE.getIJavaEmbeddable();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass <em>IJava Mapped Superclass</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaMappedSuperclass()
+		 * @generated
+		 */
+		public static final EClass IJAVA_MAPPED_SUPERCLASS = eINSTANCE.getIJavaMappedSuperclass();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic <em>IJava Basic</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaBasic()
+		 * @generated
+		 */
+		public static final EClass IJAVA_BASIC = eINSTANCE.getIJavaBasic();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded <em>IJava Embedded</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEmbedded()
+		 * @generated
+		 */
+		public static final EClass IJAVA_EMBEDDED = eINSTANCE.getIJavaEmbedded();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId <em>IJava Embedded Id</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaEmbeddedId()
+		 * @generated
+		 */
+		public static final EClass IJAVA_EMBEDDED_ID = eINSTANCE.getIJavaEmbeddedId();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaId <em>IJava Id</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaId
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaId()
+		 * @generated
+		 */
+		public static final EClass IJAVA_ID = eINSTANCE.getIJavaId();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany <em>IJava Many To Many</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaManyToMany()
+		 * @generated
+		 */
+		public static final EClass IJAVA_MANY_TO_MANY = eINSTANCE.getIJavaManyToMany();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne <em>IJava Many To One</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaManyToOne()
+		 * @generated
+		 */
+		public static final EClass IJAVA_MANY_TO_ONE = eINSTANCE.getIJavaManyToOne();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany <em>IJava One To Many</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaOneToMany()
+		 * @generated
+		 */
+		public static final EClass IJAVA_ONE_TO_MANY = eINSTANCE.getIJavaOneToMany();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne <em>IJava One To One</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaOneToOne()
+		 * @generated
+		 */
+		public static final EClass IJAVA_ONE_TO_ONE = eINSTANCE.getIJavaOneToOne();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient <em>IJava Transient</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaTransient()
+		 * @generated
+		 */
+		public static final EClass IJAVA_TRANSIENT = eINSTANCE.getIJavaTransient();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion <em>IJava Version</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion
+		 * @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getIJavaVersion()
+		 * @generated
+		 */
+		public static final EClass IJAVA_VERSION = eINSTANCE.getIJavaVersion();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaEntity <em>Java Entity</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/util/JpaJavaMappingsAdapterFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/util/JpaJavaMappingsAdapterFactory.java
index e4df5bf..5b7ceea 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/util/JpaJavaMappingsAdapterFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/util/JpaJavaMappingsAdapterFactory.java
@@ -23,6 +23,19 @@
 import org.eclipse.jpt.core.internal.content.java.JavaEObject;
 import org.eclipse.jpt.core.internal.content.java.mappings.AbstractJavaColumn;
 import org.eclipse.jpt.core.internal.content.java.mappings.AbstractJavaTable;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaId;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaAbstractQuery;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaAssociationOverride;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaAttributeMapping;
@@ -164,6 +177,71 @@
 	 */
 	protected JpaJavaMappingsSwitch<Adapter> modelSwitch = new JpaJavaMappingsSwitch<Adapter>() {
 		@Override
+		public Adapter caseIJavaEntity(IJavaEntity object) {
+			return createIJavaEntityAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaEmbeddable(IJavaEmbeddable object) {
+			return createIJavaEmbeddableAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaMappedSuperclass(IJavaMappedSuperclass object) {
+			return createIJavaMappedSuperclassAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaBasic(IJavaBasic object) {
+			return createIJavaBasicAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaEmbedded(IJavaEmbedded object) {
+			return createIJavaEmbeddedAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaEmbeddedId(IJavaEmbeddedId object) {
+			return createIJavaEmbeddedIdAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaId(IJavaId object) {
+			return createIJavaIdAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaManyToMany(IJavaManyToMany object) {
+			return createIJavaManyToManyAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaManyToOne(IJavaManyToOne object) {
+			return createIJavaManyToOneAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaOneToMany(IJavaOneToMany object) {
+			return createIJavaOneToManyAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaOneToOne(IJavaOneToOne object) {
+			return createIJavaOneToOneAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaTransient(IJavaTransient object) {
+			return createIJavaTransientAdapter();
+		}
+
+		@Override
+		public Adapter caseIJavaVersion(IJavaVersion object) {
+			return createIJavaVersionAdapter();
+		}
+
+		@Override
 		public Adapter caseJavaTypeMapping(JavaTypeMapping object) {
 			return createJavaTypeMappingAdapter();
 		}
@@ -384,21 +462,11 @@
 		}
 
 		@Override
-		public Adapter caseJpaEObject(JpaEObject object) {
-			return createJpaEObjectAdapter();
-		}
-
-		@Override
 		public Adapter caseIJpaSourceObject(IJpaSourceObject object) {
 			return createIJpaSourceObjectAdapter();
 		}
 
 		@Override
-		public Adapter caseJavaEObject(JavaEObject object) {
-			return createJavaEObjectAdapter();
-		}
-
-		@Override
 		public Adapter caseITypeMapping(ITypeMapping object) {
 			return createITypeMappingAdapter();
 		}
@@ -414,13 +482,13 @@
 		}
 
 		@Override
-		public Adapter caseIMappedSuperclass(IMappedSuperclass object) {
-			return createIMappedSuperclassAdapter();
+		public Adapter caseIEmbeddable(IEmbeddable object) {
+			return createIEmbeddableAdapter();
 		}
 
 		@Override
-		public Adapter caseIEmbeddable(IEmbeddable object) {
-			return createIEmbeddableAdapter();
+		public Adapter caseIMappedSuperclass(IMappedSuperclass object) {
+			return createIMappedSuperclassAdapter();
 		}
 
 		@Override
@@ -444,18 +512,8 @@
 		}
 
 		@Override
-		public Adapter caseIId(IId object) {
-			return createIIdAdapter();
-		}
-
-		@Override
-		public Adapter caseITransient(ITransient object) {
-			return createITransientAdapter();
-		}
-
-		@Override
-		public Adapter caseIVersion(IVersion object) {
-			return createIVersionAdapter();
+		public Adapter caseIEmbedded(IEmbedded object) {
+			return createIEmbeddedAdapter();
 		}
 
 		@Override
@@ -464,8 +522,8 @@
 		}
 
 		@Override
-		public Adapter caseIEmbedded(IEmbedded object) {
-			return createIEmbeddedAdapter();
+		public Adapter caseIId(IId object) {
+			return createIIdAdapter();
 		}
 
 		@Override
@@ -474,6 +532,21 @@
 		}
 
 		@Override
+		public Adapter caseINonOwningMapping(INonOwningMapping object) {
+			return createINonOwningMappingAdapter();
+		}
+
+		@Override
+		public Adapter caseIMultiRelationshipMapping(IMultiRelationshipMapping object) {
+			return createIMultiRelationshipMappingAdapter();
+		}
+
+		@Override
+		public Adapter caseIManyToMany(IManyToMany object) {
+			return createIManyToManyAdapter();
+		}
+
+		@Override
 		public Adapter caseISingleRelationshipMapping(ISingleRelationshipMapping object) {
 			return createISingleRelationshipMappingAdapter();
 		}
@@ -484,8 +557,8 @@
 		}
 
 		@Override
-		public Adapter caseINonOwningMapping(INonOwningMapping object) {
-			return createINonOwningMappingAdapter();
+		public Adapter caseIOneToMany(IOneToMany object) {
+			return createIOneToManyAdapter();
 		}
 
 		@Override
@@ -494,18 +567,23 @@
 		}
 
 		@Override
-		public Adapter caseIMultiRelationshipMapping(IMultiRelationshipMapping object) {
-			return createIMultiRelationshipMappingAdapter();
+		public Adapter caseITransient(ITransient object) {
+			return createITransientAdapter();
 		}
 
 		@Override
-		public Adapter caseIOneToMany(IOneToMany object) {
-			return createIOneToManyAdapter();
+		public Adapter caseIVersion(IVersion object) {
+			return createIVersionAdapter();
 		}
 
 		@Override
-		public Adapter caseIManyToMany(IManyToMany object) {
-			return createIManyToManyAdapter();
+		public Adapter caseJpaEObject(JpaEObject object) {
+			return createJpaEObjectAdapter();
+		}
+
+		@Override
+		public Adapter caseJavaEObject(JavaEObject object) {
+			return createJavaEObjectAdapter();
 		}
 
 		@Override
@@ -643,6 +721,188 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity <em>IJava Entity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity
+	 * @generated
+	 */
+	public Adapter createIJavaEntityAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable <em>IJava Embeddable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable
+	 * @generated
+	 */
+	public Adapter createIJavaEmbeddableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass <em>IJava Mapped Superclass</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass
+	 * @generated
+	 */
+	public Adapter createIJavaMappedSuperclassAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic <em>IJava Basic</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic
+	 * @generated
+	 */
+	public Adapter createIJavaBasicAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded <em>IJava Embedded</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded
+	 * @generated
+	 */
+	public Adapter createIJavaEmbeddedAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId <em>IJava Embedded Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId
+	 * @generated
+	 */
+	public Adapter createIJavaEmbeddedIdAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaId <em>IJava Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaId
+	 * @generated
+	 */
+	public Adapter createIJavaIdAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany <em>IJava Many To Many</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany
+	 * @generated
+	 */
+	public Adapter createIJavaManyToManyAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne <em>IJava Many To One</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne
+	 * @generated
+	 */
+	public Adapter createIJavaManyToOneAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany <em>IJava One To Many</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany
+	 * @generated
+	 */
+	public Adapter createIJavaOneToManyAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne <em>IJava One To One</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne
+	 * @generated
+	 */
+	public Adapter createIJavaOneToOneAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient <em>IJava Transient</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient
+	 * @generated
+	 */
+	public Adapter createIJavaTransientAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion <em>IJava Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion
+	 * @generated
+	 */
+	public Adapter createIJavaVersionAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaEntity <em>Java Entity</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/util/JpaJavaMappingsSwitch.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/util/JpaJavaMappingsSwitch.java
index d6052b4..a0c485a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/util/JpaJavaMappingsSwitch.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/util/JpaJavaMappingsSwitch.java
@@ -22,6 +22,19 @@
 import org.eclipse.jpt.core.internal.content.java.JavaEObject;
 import org.eclipse.jpt.core.internal.content.java.mappings.AbstractJavaColumn;
 import org.eclipse.jpt.core.internal.content.java.mappings.AbstractJavaTable;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaId;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaAbstractQuery;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaAssociationOverride;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaAttributeMapping;
@@ -178,6 +191,255 @@
 	 */
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
+			case JpaJavaMappingsPackage.IJAVA_ENTITY : {
+				IJavaEntity iJavaEntity = (IJavaEntity) theEObject;
+				T result = caseIJavaEntity(iJavaEntity);
+				if (result == null)
+					result = caseIJavaTypeMapping(iJavaEntity);
+				if (result == null)
+					result = caseIEntity(iJavaEntity);
+				if (result == null)
+					result = caseITypeMapping(iJavaEntity);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaEntity);
+				if (result == null)
+					result = caseIJpaEObject(iJavaEntity);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_EMBEDDABLE : {
+				IJavaEmbeddable iJavaEmbeddable = (IJavaEmbeddable) theEObject;
+				T result = caseIJavaEmbeddable(iJavaEmbeddable);
+				if (result == null)
+					result = caseIJavaTypeMapping(iJavaEmbeddable);
+				if (result == null)
+					result = caseIEmbeddable(iJavaEmbeddable);
+				if (result == null)
+					result = caseITypeMapping(iJavaEmbeddable);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaEmbeddable);
+				if (result == null)
+					result = caseIJpaEObject(iJavaEmbeddable);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_MAPPED_SUPERCLASS : {
+				IJavaMappedSuperclass iJavaMappedSuperclass = (IJavaMappedSuperclass) theEObject;
+				T result = caseIJavaMappedSuperclass(iJavaMappedSuperclass);
+				if (result == null)
+					result = caseIJavaTypeMapping(iJavaMappedSuperclass);
+				if (result == null)
+					result = caseIMappedSuperclass(iJavaMappedSuperclass);
+				if (result == null)
+					result = caseITypeMapping(iJavaMappedSuperclass);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaMappedSuperclass);
+				if (result == null)
+					result = caseIJpaEObject(iJavaMappedSuperclass);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_BASIC : {
+				IJavaBasic iJavaBasic = (IJavaBasic) theEObject;
+				T result = caseIJavaBasic(iJavaBasic);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaBasic);
+				if (result == null)
+					result = caseIBasic(iJavaBasic);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaBasic);
+				if (result == null)
+					result = caseIColumnMapping(iJavaBasic);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaBasic);
+				if (result == null)
+					result = caseIJpaEObject(iJavaBasic);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_EMBEDDED : {
+				IJavaEmbedded iJavaEmbedded = (IJavaEmbedded) theEObject;
+				T result = caseIJavaEmbedded(iJavaEmbedded);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaEmbedded);
+				if (result == null)
+					result = caseIEmbedded(iJavaEmbedded);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaEmbedded);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaEmbedded);
+				if (result == null)
+					result = caseIJpaEObject(iJavaEmbedded);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_EMBEDDED_ID : {
+				IJavaEmbeddedId iJavaEmbeddedId = (IJavaEmbeddedId) theEObject;
+				T result = caseIJavaEmbeddedId(iJavaEmbeddedId);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaEmbeddedId);
+				if (result == null)
+					result = caseIEmbeddedId(iJavaEmbeddedId);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaEmbeddedId);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaEmbeddedId);
+				if (result == null)
+					result = caseIJpaEObject(iJavaEmbeddedId);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_ID : {
+				IJavaId iJavaId = (IJavaId) theEObject;
+				T result = caseIJavaId(iJavaId);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaId);
+				if (result == null)
+					result = caseIId(iJavaId);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaId);
+				if (result == null)
+					result = caseIColumnMapping(iJavaId);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaId);
+				if (result == null)
+					result = caseIJpaEObject(iJavaId);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_MANY_TO_MANY : {
+				IJavaManyToMany iJavaManyToMany = (IJavaManyToMany) theEObject;
+				T result = caseIJavaManyToMany(iJavaManyToMany);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaManyToMany);
+				if (result == null)
+					result = caseIManyToMany(iJavaManyToMany);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaManyToMany);
+				if (result == null)
+					result = caseIMultiRelationshipMapping(iJavaManyToMany);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaManyToMany);
+				if (result == null)
+					result = caseINonOwningMapping(iJavaManyToMany);
+				if (result == null)
+					result = caseIJpaEObject(iJavaManyToMany);
+				if (result == null)
+					result = caseIRelationshipMapping(iJavaManyToMany);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_MANY_TO_ONE : {
+				IJavaManyToOne iJavaManyToOne = (IJavaManyToOne) theEObject;
+				T result = caseIJavaManyToOne(iJavaManyToOne);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaManyToOne);
+				if (result == null)
+					result = caseIManyToOne(iJavaManyToOne);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaManyToOne);
+				if (result == null)
+					result = caseISingleRelationshipMapping(iJavaManyToOne);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaManyToOne);
+				if (result == null)
+					result = caseIRelationshipMapping(iJavaManyToOne);
+				if (result == null)
+					result = caseIJpaEObject(iJavaManyToOne);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_ONE_TO_MANY : {
+				IJavaOneToMany iJavaOneToMany = (IJavaOneToMany) theEObject;
+				T result = caseIJavaOneToMany(iJavaOneToMany);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaOneToMany);
+				if (result == null)
+					result = caseIOneToMany(iJavaOneToMany);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaOneToMany);
+				if (result == null)
+					result = caseIMultiRelationshipMapping(iJavaOneToMany);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaOneToMany);
+				if (result == null)
+					result = caseINonOwningMapping(iJavaOneToMany);
+				if (result == null)
+					result = caseIJpaEObject(iJavaOneToMany);
+				if (result == null)
+					result = caseIRelationshipMapping(iJavaOneToMany);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_ONE_TO_ONE : {
+				IJavaOneToOne iJavaOneToOne = (IJavaOneToOne) theEObject;
+				T result = caseIJavaOneToOne(iJavaOneToOne);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaOneToOne);
+				if (result == null)
+					result = caseIOneToOne(iJavaOneToOne);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaOneToOne);
+				if (result == null)
+					result = caseISingleRelationshipMapping(iJavaOneToOne);
+				if (result == null)
+					result = caseINonOwningMapping(iJavaOneToOne);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaOneToOne);
+				if (result == null)
+					result = caseIRelationshipMapping(iJavaOneToOne);
+				if (result == null)
+					result = caseIJpaEObject(iJavaOneToOne);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_TRANSIENT : {
+				IJavaTransient iJavaTransient = (IJavaTransient) theEObject;
+				T result = caseIJavaTransient(iJavaTransient);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaTransient);
+				if (result == null)
+					result = caseITransient(iJavaTransient);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaTransient);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaTransient);
+				if (result == null)
+					result = caseIJpaEObject(iJavaTransient);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case JpaJavaMappingsPackage.IJAVA_VERSION : {
+				IJavaVersion iJavaVersion = (IJavaVersion) theEObject;
+				T result = caseIJavaVersion(iJavaVersion);
+				if (result == null)
+					result = caseIJavaAttributeMapping(iJavaVersion);
+				if (result == null)
+					result = caseIVersion(iJavaVersion);
+				if (result == null)
+					result = caseIAttributeMapping(iJavaVersion);
+				if (result == null)
+					result = caseIColumnMapping(iJavaVersion);
+				if (result == null)
+					result = caseIJpaSourceObject(iJavaVersion);
+				if (result == null)
+					result = caseIJpaEObject(iJavaVersion);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
 			case JpaJavaMappingsPackage.JAVA_TYPE_MAPPING : {
 				JavaTypeMapping javaTypeMapping = (JavaTypeMapping) theEObject;
 				T result = caseJavaTypeMapping(javaTypeMapping);
@@ -203,18 +465,20 @@
 				if (result == null)
 					result = caseJavaTypeMapping(javaEntity);
 				if (result == null)
-					result = caseIEntity(javaEntity);
+					result = caseIJavaEntity(javaEntity);
 				if (result == null)
 					result = caseJavaEObject(javaEntity);
 				if (result == null)
 					result = caseIJavaTypeMapping(javaEntity);
 				if (result == null)
-					result = caseITypeMapping(javaEntity);
+					result = caseIEntity(javaEntity);
 				if (result == null)
 					result = caseJpaEObject(javaEntity);
 				if (result == null)
 					result = caseIJpaSourceObject(javaEntity);
 				if (result == null)
+					result = caseITypeMapping(javaEntity);
+				if (result == null)
 					result = caseIJpaEObject(javaEntity);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -226,18 +490,20 @@
 				if (result == null)
 					result = caseJavaTypeMapping(javaMappedSuperclass);
 				if (result == null)
-					result = caseIMappedSuperclass(javaMappedSuperclass);
+					result = caseIJavaMappedSuperclass(javaMappedSuperclass);
 				if (result == null)
 					result = caseJavaEObject(javaMappedSuperclass);
 				if (result == null)
 					result = caseIJavaTypeMapping(javaMappedSuperclass);
 				if (result == null)
-					result = caseITypeMapping(javaMappedSuperclass);
+					result = caseIMappedSuperclass(javaMappedSuperclass);
 				if (result == null)
 					result = caseJpaEObject(javaMappedSuperclass);
 				if (result == null)
 					result = caseIJpaSourceObject(javaMappedSuperclass);
 				if (result == null)
+					result = caseITypeMapping(javaMappedSuperclass);
+				if (result == null)
 					result = caseIJpaEObject(javaMappedSuperclass);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -249,18 +515,20 @@
 				if (result == null)
 					result = caseJavaTypeMapping(javaEmbeddable);
 				if (result == null)
-					result = caseIEmbeddable(javaEmbeddable);
+					result = caseIJavaEmbeddable(javaEmbeddable);
 				if (result == null)
 					result = caseJavaEObject(javaEmbeddable);
 				if (result == null)
 					result = caseIJavaTypeMapping(javaEmbeddable);
 				if (result == null)
-					result = caseITypeMapping(javaEmbeddable);
+					result = caseIEmbeddable(javaEmbeddable);
 				if (result == null)
 					result = caseJpaEObject(javaEmbeddable);
 				if (result == null)
 					result = caseIJpaSourceObject(javaEmbeddable);
 				if (result == null)
+					result = caseITypeMapping(javaEmbeddable);
+				if (result == null)
 					result = caseIJpaEObject(javaEmbeddable);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -312,20 +580,22 @@
 				if (result == null)
 					result = caseJavaAttributeMapping(javaBasic);
 				if (result == null)
-					result = caseIBasic(javaBasic);
+					result = caseIJavaBasic(javaBasic);
 				if (result == null)
 					result = caseJavaEObject(javaBasic);
 				if (result == null)
 					result = caseIJavaAttributeMapping(javaBasic);
 				if (result == null)
-					result = caseIAttributeMapping(javaBasic);
-				if (result == null)
-					result = caseIColumnMapping(javaBasic);
+					result = caseIBasic(javaBasic);
 				if (result == null)
 					result = caseJpaEObject(javaBasic);
 				if (result == null)
 					result = caseIJpaSourceObject(javaBasic);
 				if (result == null)
+					result = caseIAttributeMapping(javaBasic);
+				if (result == null)
+					result = caseIColumnMapping(javaBasic);
+				if (result == null)
 					result = caseIJpaEObject(javaBasic);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -337,20 +607,22 @@
 				if (result == null)
 					result = caseJavaAttributeMapping(javaId);
 				if (result == null)
-					result = caseIId(javaId);
+					result = caseIJavaId(javaId);
 				if (result == null)
 					result = caseJavaEObject(javaId);
 				if (result == null)
 					result = caseIJavaAttributeMapping(javaId);
 				if (result == null)
-					result = caseIAttributeMapping(javaId);
-				if (result == null)
-					result = caseIColumnMapping(javaId);
+					result = caseIId(javaId);
 				if (result == null)
 					result = caseJpaEObject(javaId);
 				if (result == null)
 					result = caseIJpaSourceObject(javaId);
 				if (result == null)
+					result = caseIAttributeMapping(javaId);
+				if (result == null)
+					result = caseIColumnMapping(javaId);
+				if (result == null)
 					result = caseIJpaEObject(javaId);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -362,18 +634,20 @@
 				if (result == null)
 					result = caseJavaAttributeMapping(javaTransient);
 				if (result == null)
-					result = caseITransient(javaTransient);
+					result = caseIJavaTransient(javaTransient);
 				if (result == null)
 					result = caseJavaEObject(javaTransient);
 				if (result == null)
 					result = caseIJavaAttributeMapping(javaTransient);
 				if (result == null)
-					result = caseIAttributeMapping(javaTransient);
+					result = caseITransient(javaTransient);
 				if (result == null)
 					result = caseJpaEObject(javaTransient);
 				if (result == null)
 					result = caseIJpaSourceObject(javaTransient);
 				if (result == null)
+					result = caseIAttributeMapping(javaTransient);
+				if (result == null)
 					result = caseIJpaEObject(javaTransient);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -385,20 +659,22 @@
 				if (result == null)
 					result = caseJavaAttributeMapping(javaVersion);
 				if (result == null)
-					result = caseIVersion(javaVersion);
+					result = caseIJavaVersion(javaVersion);
 				if (result == null)
 					result = caseJavaEObject(javaVersion);
 				if (result == null)
 					result = caseIJavaAttributeMapping(javaVersion);
 				if (result == null)
-					result = caseIAttributeMapping(javaVersion);
-				if (result == null)
-					result = caseIColumnMapping(javaVersion);
+					result = caseIVersion(javaVersion);
 				if (result == null)
 					result = caseJpaEObject(javaVersion);
 				if (result == null)
 					result = caseIJpaSourceObject(javaVersion);
 				if (result == null)
+					result = caseIAttributeMapping(javaVersion);
+				if (result == null)
+					result = caseIColumnMapping(javaVersion);
+				if (result == null)
 					result = caseIJpaEObject(javaVersion);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -410,18 +686,20 @@
 				if (result == null)
 					result = caseJavaAttributeMapping(javaEmbeddedId);
 				if (result == null)
-					result = caseIEmbeddedId(javaEmbeddedId);
+					result = caseIJavaEmbeddedId(javaEmbeddedId);
 				if (result == null)
 					result = caseJavaEObject(javaEmbeddedId);
 				if (result == null)
 					result = caseIJavaAttributeMapping(javaEmbeddedId);
 				if (result == null)
-					result = caseIAttributeMapping(javaEmbeddedId);
+					result = caseIEmbeddedId(javaEmbeddedId);
 				if (result == null)
 					result = caseJpaEObject(javaEmbeddedId);
 				if (result == null)
 					result = caseIJpaSourceObject(javaEmbeddedId);
 				if (result == null)
+					result = caseIAttributeMapping(javaEmbeddedId);
+				if (result == null)
 					result = caseIJpaEObject(javaEmbeddedId);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -433,18 +711,20 @@
 				if (result == null)
 					result = caseJavaAttributeMapping(javaEmbedded);
 				if (result == null)
-					result = caseIEmbedded(javaEmbedded);
+					result = caseIJavaEmbedded(javaEmbedded);
 				if (result == null)
 					result = caseJavaEObject(javaEmbedded);
 				if (result == null)
 					result = caseIJavaAttributeMapping(javaEmbedded);
 				if (result == null)
-					result = caseIAttributeMapping(javaEmbedded);
+					result = caseIEmbedded(javaEmbedded);
 				if (result == null)
 					result = caseJpaEObject(javaEmbedded);
 				if (result == null)
 					result = caseIJpaSourceObject(javaEmbedded);
 				if (result == null)
+					result = caseIAttributeMapping(javaEmbedded);
+				if (result == null)
 					result = caseIJpaEObject(javaEmbedded);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -506,26 +786,28 @@
 				if (result == null)
 					result = caseJavaSingleRelationshipMapping(javaManyToOne);
 				if (result == null)
-					result = caseIManyToOne(javaManyToOne);
+					result = caseIJavaManyToOne(javaManyToOne);
 				if (result == null)
 					result = caseJavaRelationshipMapping(javaManyToOne);
 				if (result == null)
 					result = caseISingleRelationshipMapping(javaManyToOne);
 				if (result == null)
+					result = caseIJavaAttributeMapping(javaManyToOne);
+				if (result == null)
+					result = caseIManyToOne(javaManyToOne);
+				if (result == null)
 					result = caseJavaAttributeMapping(javaManyToOne);
 				if (result == null)
 					result = caseIRelationshipMapping(javaManyToOne);
 				if (result == null)
-					result = caseJavaEObject(javaManyToOne);
-				if (result == null)
-					result = caseIJavaAttributeMapping(javaManyToOne);
-				if (result == null)
 					result = caseIAttributeMapping(javaManyToOne);
 				if (result == null)
-					result = caseJpaEObject(javaManyToOne);
+					result = caseJavaEObject(javaManyToOne);
 				if (result == null)
 					result = caseIJpaSourceObject(javaManyToOne);
 				if (result == null)
+					result = caseJpaEObject(javaManyToOne);
+				if (result == null)
 					result = caseIJpaEObject(javaManyToOne);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -537,28 +819,30 @@
 				if (result == null)
 					result = caseJavaSingleRelationshipMapping(javaOneToOne);
 				if (result == null)
-					result = caseIOneToOne(javaOneToOne);
+					result = caseIJavaOneToOne(javaOneToOne);
 				if (result == null)
 					result = caseJavaRelationshipMapping(javaOneToOne);
 				if (result == null)
 					result = caseISingleRelationshipMapping(javaOneToOne);
 				if (result == null)
-					result = caseINonOwningMapping(javaOneToOne);
+					result = caseIJavaAttributeMapping(javaOneToOne);
+				if (result == null)
+					result = caseIOneToOne(javaOneToOne);
 				if (result == null)
 					result = caseJavaAttributeMapping(javaOneToOne);
 				if (result == null)
 					result = caseIRelationshipMapping(javaOneToOne);
 				if (result == null)
-					result = caseJavaEObject(javaOneToOne);
-				if (result == null)
-					result = caseIJavaAttributeMapping(javaOneToOne);
-				if (result == null)
 					result = caseIAttributeMapping(javaOneToOne);
 				if (result == null)
-					result = caseJpaEObject(javaOneToOne);
+					result = caseINonOwningMapping(javaOneToOne);
+				if (result == null)
+					result = caseJavaEObject(javaOneToOne);
 				if (result == null)
 					result = caseIJpaSourceObject(javaOneToOne);
 				if (result == null)
+					result = caseJpaEObject(javaOneToOne);
+				if (result == null)
 					result = caseIJpaEObject(javaOneToOne);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -599,28 +883,30 @@
 				if (result == null)
 					result = caseJavaMultiRelationshipMapping(javaOneToMany);
 				if (result == null)
-					result = caseIOneToMany(javaOneToMany);
+					result = caseIJavaOneToMany(javaOneToMany);
 				if (result == null)
 					result = caseJavaRelationshipMapping(javaOneToMany);
 				if (result == null)
 					result = caseIMultiRelationshipMapping(javaOneToMany);
 				if (result == null)
+					result = caseIJavaAttributeMapping(javaOneToMany);
+				if (result == null)
+					result = caseIOneToMany(javaOneToMany);
+				if (result == null)
 					result = caseJavaAttributeMapping(javaOneToMany);
 				if (result == null)
 					result = caseIRelationshipMapping(javaOneToMany);
 				if (result == null)
 					result = caseINonOwningMapping(javaOneToMany);
 				if (result == null)
-					result = caseJavaEObject(javaOneToMany);
-				if (result == null)
-					result = caseIJavaAttributeMapping(javaOneToMany);
-				if (result == null)
 					result = caseIAttributeMapping(javaOneToMany);
 				if (result == null)
-					result = caseJpaEObject(javaOneToMany);
+					result = caseJavaEObject(javaOneToMany);
 				if (result == null)
 					result = caseIJpaSourceObject(javaOneToMany);
 				if (result == null)
+					result = caseJpaEObject(javaOneToMany);
+				if (result == null)
 					result = caseIJpaEObject(javaOneToMany);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -632,28 +918,30 @@
 				if (result == null)
 					result = caseJavaMultiRelationshipMapping(javaManyToMany);
 				if (result == null)
-					result = caseIManyToMany(javaManyToMany);
+					result = caseIJavaManyToMany(javaManyToMany);
 				if (result == null)
 					result = caseJavaRelationshipMapping(javaManyToMany);
 				if (result == null)
 					result = caseIMultiRelationshipMapping(javaManyToMany);
 				if (result == null)
+					result = caseIJavaAttributeMapping(javaManyToMany);
+				if (result == null)
+					result = caseIManyToMany(javaManyToMany);
+				if (result == null)
 					result = caseJavaAttributeMapping(javaManyToMany);
 				if (result == null)
 					result = caseIRelationshipMapping(javaManyToMany);
 				if (result == null)
 					result = caseINonOwningMapping(javaManyToMany);
 				if (result == null)
-					result = caseJavaEObject(javaManyToMany);
-				if (result == null)
-					result = caseIJavaAttributeMapping(javaManyToMany);
-				if (result == null)
 					result = caseIAttributeMapping(javaManyToMany);
 				if (result == null)
-					result = caseJpaEObject(javaManyToMany);
+					result = caseJavaEObject(javaManyToMany);
 				if (result == null)
 					result = caseIJpaSourceObject(javaManyToMany);
 				if (result == null)
+					result = caseJpaEObject(javaManyToMany);
+				if (result == null)
 					result = caseIJpaEObject(javaManyToMany);
 				if (result == null)
 					result = defaultCase(theEObject);
@@ -1145,6 +1433,201 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Entity</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Entity</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaEntity(IJavaEntity object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Embeddable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Embeddable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaEmbeddable(IJavaEmbeddable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Mapped Superclass</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Mapped Superclass</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaMappedSuperclass(IJavaMappedSuperclass object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Basic</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Basic</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaBasic(IJavaBasic object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Embedded</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Embedded</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaEmbedded(IJavaEmbedded object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Embedded Id</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Embedded Id</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaEmbeddedId(IJavaEmbeddedId object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Id</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Id</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaId(IJavaId object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Many To Many</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Many To Many</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaManyToMany(IJavaManyToMany object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Many To One</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Many To One</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaManyToOne(IJavaManyToOne object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava One To Many</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava One To Many</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaOneToMany(IJavaOneToMany object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava One To One</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava One To One</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaOneToOne(IJavaOneToOne object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Transient</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Transient</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaTransient(IJavaTransient object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>IJava Version</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>IJava Version</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIJavaVersion(IJavaVersion object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Java Entity</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmPackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmPackage.java
index 6494a6e..10e5d2d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmPackage.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmPackage.java
@@ -3582,13 +3582,31 @@
 	public static final int XML_COLUMN__LENGTH = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Specified Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XML_COLUMN__SPECIFIED_LENGTH = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 1;
+
+	/**
 	 * The feature id for the '<em><b>Precision</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__PRECISION = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 1;
+	public static final int XML_COLUMN__PRECISION = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Specified Precision</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XML_COLUMN__SPECIFIED_PRECISION = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Scale</b></em>' attribute.
@@ -3597,7 +3615,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__SCALE = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 2;
+	public static final int XML_COLUMN__SCALE = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Specified Scale</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int XML_COLUMN__SPECIFIED_SCALE = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 5;
 
 	/**
 	 * The feature id for the '<em><b>Length For Xml</b></em>' attribute.
@@ -3606,7 +3633,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__LENGTH_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 3;
+	public static final int XML_COLUMN__LENGTH_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 6;
 
 	/**
 	 * The feature id for the '<em><b>Precision For Xml</b></em>' attribute.
@@ -3615,7 +3642,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__PRECISION_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 4;
+	public static final int XML_COLUMN__PRECISION_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 7;
 
 	/**
 	 * The feature id for the '<em><b>Scale For Xml</b></em>' attribute.
@@ -3624,7 +3651,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN__SCALE_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 5;
+	public static final int XML_COLUMN__SCALE_FOR_XML = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 8;
 
 	/**
 	 * The number of structural features of the '<em>Xml Column</em>' class.
@@ -3633,7 +3660,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int XML_COLUMN_FEATURE_COUNT = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 6;
+	public static final int XML_COLUMN_FEATURE_COUNT = ABSTRACT_XML_COLUMN_FEATURE_COUNT + 9;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.content.orm.XmlJoinColumn <em>Xml Join Column</em>}' class.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java
index bc1aeef..c85ec9c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/OrmXmlJpaFileContentProvider.java
@@ -1,8 +1,8 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
  * 
  * Contributors:
  *     Oracle - initial API and implementation
@@ -11,6 +11,7 @@
 
 import java.io.IOException;
 import java.util.Collections;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notification;
@@ -19,6 +20,7 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
+import org.eclipse.jpt.core.internal.IJpaFile;
 import org.eclipse.jpt.core.internal.IJpaFileContentProvider;
 import org.eclipse.jpt.core.internal.IJpaRootContentNode;
 import org.eclipse.jpt.core.internal.JptCorePlugin;
@@ -26,32 +28,38 @@
 
 public class OrmXmlJpaFileContentProvider implements IJpaFileContentProvider
 {
-	public static OrmXmlJpaFileContentProvider INSTANCE = new OrmXmlJpaFileContentProvider();
+	//singleton
+	private static final OrmXmlJpaFileContentProvider INSTANCE = new OrmXmlJpaFileContentProvider();
 	
-	
-	private IFile resourceFile;
+	/**
+	 * Return the singleton.
+	 */
+	public static IJpaFileContentProvider instance() {
+		return INSTANCE;
+	}
 	
 	
 	/**
 	 * Restrict access
 	 */
 	private OrmXmlJpaFileContentProvider() {
-		
+		super();
 	}
 
-	public IJpaRootContentNode buildRootContent(IFile resourceFile) {
+	public IJpaRootContentNode buildRootContent(IJpaFile jpaFile) {
+		IFile resourceFile = jpaFile.getFile();
 		OrmXmlResourceFactory.register();
-		this.resourceFile = resourceFile;
-		URI fileURI = URI.createPlatformResourceURI(resourceFile.getFullPath().toString());
+		URI fileURI = URI.createPlatformResourceURI(resourceFile.getFullPath().toString(), true);
 		OrmXmlResource resource = (OrmXmlResource) getResourceSet(resourceFile).getResource(fileURI, true);
 		XmlRootContentNode root = OrmFactory.eINSTANCE.createXmlRootContentNode();
+		jpaFile.setContent(root);
 		root.setEntityMappings(resource.getXmlFileContent());
-		resource.eAdapters().add(buildRootNodeListener(root));
+		resource.eAdapters().add(buildRootNodeListener(resourceFile, root));
 		return root;
 	}
 	
-	private Adapter buildRootNodeListener(XmlRootContentNode root) {
-		return new RootAdapter(root);
+	private Adapter buildRootNodeListener(IFile resourceFile, XmlRootContentNode root) {
+		return new RootAdapter(resourceFile, root);
 	}
 
 	protected ResourceSet getResourceSet(IFile file) {
@@ -65,23 +73,26 @@
 	
 	private class RootAdapter extends AdapterImpl 
 	{
-		XmlRootContentNode root;
+		final IFile resourceFile;
+		final XmlRootContentNode rootContentNode;
 		
-		private RootAdapter(XmlRootContentNode rootContentNode) {
+		RootAdapter(IFile resourceFile, XmlRootContentNode rootContentNode) {
 			super();
-			root = rootContentNode;
+			this.resourceFile = resourceFile;
+			this.rootContentNode = rootContentNode;
 		}
+		@Override
 		public void notifyChanged(Notification notification) {
 			int featureId = notification.getFeatureID(Resource.class);
 			if (featureId == Resource.RESOURCE__CONTENTS) {
 				if (notification.getEventType() == Notification.ADD
 						|| notification.getEventType() == Notification.REMOVE) {
 					OrmXmlResource resource = (OrmXmlResource) notification.getNotifier();
-					root.setEntityMappings(resource.getXmlFileContent());
+					this.rootContentNode.setEntityMappings(resource.getXmlFileContent());
 				}
 			}
 			else if (featureId == Resource.RESOURCE__IS_LOADED) {
-				if (resourceFile.exists()) {
+				if (this.resourceFile.exists()) {
 					// dumb translator is unloading my resource, reload it
 					if (notification.getNewBooleanValue() == false) {
 						OrmXmlResource resource = (OrmXmlResource) notification.getNotifier();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlAttributeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlAttributeMapping.java
index f548a58..234a8b0 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlAttributeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlAttributeMapping.java
@@ -314,10 +314,6 @@
 	 */
 	public abstract int xmlSequence();
 
-	public void initialize() {
-	//do nothing as this will be handle by the Xml Translators
-	}
-
 	public void refreshDefaults(DefaultsContext defaultsContext) {
 	// do nothing
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlColumn.java
index 009f658..fae6f91 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlColumn.java
@@ -47,17 +47,27 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected static final int LENGTH_EDEFAULT = 255;
+	protected static final int LENGTH_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getLength() <em>Length</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedLength() <em>Specified Length</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getLength()
+	 * @see #getSpecifiedLength()
 	 * @generated
 	 * @ordered
 	 */
-	protected int length = LENGTH_EDEFAULT;
+	protected static final int SPECIFIED_LENGTH_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedLength() <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedLength = SPECIFIED_LENGTH_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
@@ -70,14 +80,24 @@
 	protected static final int PRECISION_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getPrecision() <em>Precision</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedPrecision() <em>Specified Precision</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getPrecision()
+	 * @see #getSpecifiedPrecision()
 	 * @generated
 	 * @ordered
 	 */
-	protected int precision = PRECISION_EDEFAULT;
+	protected static final int SPECIFIED_PRECISION_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedPrecision() <em>Specified Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedPrecision()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedPrecision = SPECIFIED_PRECISION_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getScale() <em>Scale</em>}' attribute.
@@ -90,14 +110,24 @@
 	protected static final int SCALE_EDEFAULT = 0;
 
 	/**
-	 * The cached value of the '{@link #getScale() <em>Scale</em>}' attribute.
+	 * The default value of the '{@link #getSpecifiedScale() <em>Specified Scale</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getScale()
+	 * @see #getSpecifiedScale()
 	 * @generated
 	 * @ordered
 	 */
-	protected int scale = SCALE_EDEFAULT;
+	protected static final int SPECIFIED_SCALE_EDEFAULT = -1;
+
+	/**
+	 * The cached value of the '{@link #getSpecifiedScale() <em>Specified Scale</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSpecifiedScale()
+	 * @generated
+	 * @ordered
+	 */
+	protected int specifiedScale = SPECIFIED_SCALE_EDEFAULT;
 
 	/**
 	 * The default value of the '{@link #getLengthForXml() <em>Length For Xml</em>}' attribute.
@@ -152,134 +182,148 @@
 		return OrmPackage.Literals.XML_COLUMN;
 	}
 
-	/**
-	 * Returns the value of the '<em><b>Length</b></em>' attribute.
-	 * The default value is <code>"255"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Length</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Length</em>' attribute.
-	 * @see #setLength(int)
-	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_Length()
-	 * @model default="255"
-	 * @generated
-	 */
 	public int getLength() {
-		return length;
+		return (this.getSpecifiedLength() == SPECIFIED_LENGTH_EDEFAULT) ? getDefaultLength() : this.getSpecifiedLength();
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getLength <em>Length</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Length</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Length</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Length</em>' attribute.
-	 * @see #getLength()
+	 * @return the value of the '<em>Specified Length</em>' attribute.
+	 * @see #setSpecifiedLength(int)
+	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_SpecifiedLength()
+	 * @model default="-1"
 	 * @generated
 	 */
-	public void setLengthGen(int newLength) {
-		int oldLength = length;
-		length = newLength;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__LENGTH, oldLength, length));
+	public int getSpecifiedLength() {
+		return specifiedLength;
 	}
 
-	public void setLength(int newLength) {
-		setLengthGen(newLength);
-		if (newLength != LENGTH_EDEFAULT) {
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getSpecifiedLength <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Length</em>' attribute.
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 */
+	public void setSpecifiedLengthGen(int newSpecifiedLength) {
+		int oldSpecifiedLength = specifiedLength;
+		specifiedLength = newSpecifiedLength;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SPECIFIED_LENGTH, oldSpecifiedLength, specifiedLength));
+	}
+
+	public void setSpecifiedLength(int newSpecifiedLength) {
+		setSpecifiedLengthGen(newSpecifiedLength);
+		if (newSpecifiedLength != LENGTH_EDEFAULT) {
 			getColumnMapping().makeColumnForXmlNonNull();
 		}
-		setLengthForXml(newLength);
+		setLengthForXml(newSpecifiedLength);
 		if (isAllFeaturesUnset()) {
 			getColumnMapping().makeColumnForXmlNull();
 		}
 	}
 
-	/**
-	 * Returns the value of the '<em><b>Precision</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Precision</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Precision</em>' attribute.
-	 * @see #setPrecision(int)
-	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_Precision()
-	 * @model
-	 * @generated
-	 */
 	public int getPrecision() {
-		return precision;
+		return (this.getSpecifiedPrecision() == SPECIFIED_PRECISION_EDEFAULT) ? getDefaultPrecision() : this.getSpecifiedPrecision();
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getPrecision <em>Precision</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Precision</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Precision</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Precision</em>' attribute.
-	 * @see #getPrecision()
+	 * @return the value of the '<em>Specified Precision</em>' attribute.
+	 * @see #setSpecifiedPrecision(int)
+	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_SpecifiedPrecision()
+	 * @model default="-1"
 	 * @generated
 	 */
-	public void setPrecisionGen(int newPrecision) {
-		int oldPrecision = precision;
-		precision = newPrecision;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__PRECISION, oldPrecision, precision));
+	public int getSpecifiedPrecision() {
+		return specifiedPrecision;
 	}
 
-	public void setPrecision(int newPrecision) {
-		setPrecisionGen(newPrecision);
-		if (newPrecision != PRECISION_EDEFAULT) {
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getSpecifiedPrecision <em>Specified Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Precision</em>' attribute.
+	 * @see #getSpecifiedPrecision()
+	 * @generated
+	 */
+	public void setSpecifiedPrecisionGen(int newSpecifiedPrecision) {
+		int oldSpecifiedPrecision = specifiedPrecision;
+		specifiedPrecision = newSpecifiedPrecision;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SPECIFIED_PRECISION, oldSpecifiedPrecision, specifiedPrecision));
+	}
+
+	public void setSpecifiedPrecision(int newSpecifiedPrecision) {
+		setSpecifiedPrecisionGen(newSpecifiedPrecision);
+		if (newSpecifiedPrecision != PRECISION_EDEFAULT) {
 			getColumnMapping().makeColumnForXmlNonNull();
 		}
-		setPrecisionForXml(newPrecision);
+		setPrecisionForXml(newSpecifiedPrecision);
 		if (isAllFeaturesUnset()) {
 			getColumnMapping().makeColumnForXmlNull();
 		}
 	}
 
+	public int getScale() {
+		return (this.getSpecifiedScale() == SPECIFIED_SCALE_EDEFAULT) ? getDefaultScale() : this.getSpecifiedScale();
+	}
+
 	/**
-	 * Returns the value of the '<em><b>Scale</b></em>' attribute.
+	 * Returns the value of the '<em><b>Specified Scale</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Scale</em>' attribute isn't clear,
+	 * If the meaning of the '<em>Specified Scale</em>' attribute isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Scale</em>' attribute.
-	 * @see #setScale(int)
-	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_Scale()
-	 * @model
+	 * @return the value of the '<em>Specified Scale</em>' attribute.
+	 * @see #setSpecifiedScale(int)
+	 * @see org.eclipse.jpt.core.internal.content.orm.OrmPackage#getIColumn_SpecifiedScale()
+	 * @model default="-1"
 	 * @generated
 	 */
-	public int getScale() {
-		return scale;
+	public int getSpecifiedScale() {
+		return specifiedScale;
 	}
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getScale <em>Scale</em>}' attribute.
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.content.orm.XmlColumn#getSpecifiedScale <em>Specified Scale</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Scale</em>' attribute.
-	 * @see #getScale()
+	 * @param value the new value of the '<em>Specified Scale</em>' attribute.
+	 * @see #getSpecifiedScale()
 	 * @generated
 	 */
-	public void setScaleGen(int newScale) {
-		int oldScale = scale;
-		scale = newScale;
+	public void setSpecifiedScaleGen(int newSpecifiedScale) {
+		int oldSpecifiedScale = specifiedScale;
+		specifiedScale = newSpecifiedScale;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SCALE, oldScale, scale));
+			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SPECIFIED_SCALE, oldSpecifiedScale, specifiedScale));
 	}
 
-	public void setScale(int newScale) {
-		setScaleGen(newScale);
-		if (newScale != SCALE_EDEFAULT) {
+	public void setSpecifiedScale(int newSpecifiedScale) {
+		setSpecifiedScaleGen(newSpecifiedScale);
+		if (newSpecifiedScale != SCALE_EDEFAULT) {
 			getColumnMapping().makeColumnForXmlNonNull();
 		}
-		setScaleForXml(newScale);
+		setScaleForXml(newSpecifiedScale);
 		if (isAllFeaturesUnset()) {
 			getColumnMapping().makeColumnForXmlNull();
 		}
@@ -313,7 +357,7 @@
 	 * @generated NOT
 	 */
 	public void setLengthForXml(int newLengthForXml) {
-		setLengthGen(newLengthForXml);
+		setSpecifiedLengthGen(newLengthForXml);
 		if (eNotificationRequired())
 			//pass in oldValue of null because we don't store the value from the xml, see super.eNotify()
 			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__LENGTH_FOR_XML, null, newLengthForXml));
@@ -346,7 +390,7 @@
 	 * @generated NOT
 	 */
 	public void setPrecisionForXml(int newPrecisionForXml) {
-		setPrecisionGen(newPrecisionForXml);
+		setSpecifiedPrecisionGen(newPrecisionForXml);
 		if (eNotificationRequired())
 			//pass in oldValue of null because we don't store the value from the xml, see super.eNotify()
 			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__PRECISION_FOR_XML, null, newPrecisionForXml));
@@ -379,12 +423,24 @@
 	 * @generated NOT
 	 */
 	public void setScaleForXml(int newScaleForXml) {
-		setScaleGen(newScaleForXml);
+		setSpecifiedScaleGen(newScaleForXml);
 		if (eNotificationRequired())
 			//pass in oldValue of null because we don't store the value from the xml, see super.eNotify()
 			eNotify(new ENotificationImpl(this, Notification.SET, OrmPackage.XML_COLUMN__SCALE_FOR_XML, null, newScaleForXml));
 	}
 
+	public int getDefaultLength() {
+		return DEFAULT_LENGTH;
+	}
+
+	public int getDefaultPrecision() {
+		return DEFAULT_PRECISION;
+	}
+
+	public int getDefaultScale() {
+		return DEFAULT_SCALE;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -395,10 +451,16 @@
 		switch (featureID) {
 			case OrmPackage.XML_COLUMN__LENGTH :
 				return new Integer(getLength());
+			case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+				return new Integer(getSpecifiedLength());
 			case OrmPackage.XML_COLUMN__PRECISION :
 				return new Integer(getPrecision());
+			case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+				return new Integer(getSpecifiedPrecision());
 			case OrmPackage.XML_COLUMN__SCALE :
 				return new Integer(getScale());
+			case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+				return new Integer(getSpecifiedScale());
 			case OrmPackage.XML_COLUMN__LENGTH_FOR_XML :
 				return new Integer(getLengthForXml());
 			case OrmPackage.XML_COLUMN__PRECISION_FOR_XML :
@@ -417,14 +479,14 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case OrmPackage.XML_COLUMN__LENGTH :
-				setLength(((Integer) newValue).intValue());
+			case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+				setSpecifiedLength(((Integer) newValue).intValue());
 				return;
-			case OrmPackage.XML_COLUMN__PRECISION :
-				setPrecision(((Integer) newValue).intValue());
+			case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+				setSpecifiedPrecision(((Integer) newValue).intValue());
 				return;
-			case OrmPackage.XML_COLUMN__SCALE :
-				setScale(((Integer) newValue).intValue());
+			case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+				setSpecifiedScale(((Integer) newValue).intValue());
 				return;
 			case OrmPackage.XML_COLUMN__LENGTH_FOR_XML :
 				setLengthForXml(((Integer) newValue).intValue());
@@ -447,14 +509,14 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case OrmPackage.XML_COLUMN__LENGTH :
-				setLength(LENGTH_EDEFAULT);
+			case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+				setSpecifiedLength(SPECIFIED_LENGTH_EDEFAULT);
 				return;
-			case OrmPackage.XML_COLUMN__PRECISION :
-				setPrecision(PRECISION_EDEFAULT);
+			case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+				setSpecifiedPrecision(SPECIFIED_PRECISION_EDEFAULT);
 				return;
-			case OrmPackage.XML_COLUMN__SCALE :
-				setScale(SCALE_EDEFAULT);
+			case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+				setSpecifiedScale(SPECIFIED_SCALE_EDEFAULT);
 				return;
 			case OrmPackage.XML_COLUMN__LENGTH_FOR_XML :
 				setLengthForXml(LENGTH_FOR_XML_EDEFAULT);
@@ -478,11 +540,17 @@
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
 			case OrmPackage.XML_COLUMN__LENGTH :
-				return length != LENGTH_EDEFAULT;
+				return getLength() != LENGTH_EDEFAULT;
+			case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+				return specifiedLength != SPECIFIED_LENGTH_EDEFAULT;
 			case OrmPackage.XML_COLUMN__PRECISION :
-				return precision != PRECISION_EDEFAULT;
+				return getPrecision() != PRECISION_EDEFAULT;
+			case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+				return specifiedPrecision != SPECIFIED_PRECISION_EDEFAULT;
 			case OrmPackage.XML_COLUMN__SCALE :
-				return scale != SCALE_EDEFAULT;
+				return getScale() != SCALE_EDEFAULT;
+			case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+				return specifiedScale != SPECIFIED_SCALE_EDEFAULT;
 			case OrmPackage.XML_COLUMN__LENGTH_FOR_XML :
 				return getLengthForXml() != LENGTH_FOR_XML_EDEFAULT;
 			case OrmPackage.XML_COLUMN__PRECISION_FOR_XML :
@@ -504,10 +572,16 @@
 			switch (derivedFeatureID) {
 				case OrmPackage.XML_COLUMN__LENGTH :
 					return JpaCoreMappingsPackage.ICOLUMN__LENGTH;
+				case OrmPackage.XML_COLUMN__SPECIFIED_LENGTH :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_LENGTH;
 				case OrmPackage.XML_COLUMN__PRECISION :
 					return JpaCoreMappingsPackage.ICOLUMN__PRECISION;
+				case OrmPackage.XML_COLUMN__SPECIFIED_PRECISION :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_PRECISION;
 				case OrmPackage.XML_COLUMN__SCALE :
 					return JpaCoreMappingsPackage.ICOLUMN__SCALE;
+				case OrmPackage.XML_COLUMN__SPECIFIED_SCALE :
+					return JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_SCALE;
 				default :
 					return -1;
 			}
@@ -526,10 +600,16 @@
 			switch (baseFeatureID) {
 				case JpaCoreMappingsPackage.ICOLUMN__LENGTH :
 					return OrmPackage.XML_COLUMN__LENGTH;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_LENGTH :
+					return OrmPackage.XML_COLUMN__SPECIFIED_LENGTH;
 				case JpaCoreMappingsPackage.ICOLUMN__PRECISION :
 					return OrmPackage.XML_COLUMN__PRECISION;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_PRECISION :
+					return OrmPackage.XML_COLUMN__SPECIFIED_PRECISION;
 				case JpaCoreMappingsPackage.ICOLUMN__SCALE :
 					return OrmPackage.XML_COLUMN__SCALE;
+				case JpaCoreMappingsPackage.ICOLUMN__SPECIFIED_SCALE :
+					return OrmPackage.XML_COLUMN__SPECIFIED_SCALE;
 				default :
 					return -1;
 			}
@@ -547,12 +627,12 @@
 		if (eIsProxy())
 			return super.toString();
 		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (length: ");
-		result.append(length);
-		result.append(", precision: ");
-		result.append(precision);
-		result.append(", scale: ");
-		result.append(scale);
+		result.append(" (specifiedLength: ");
+		result.append(specifiedLength);
+		result.append(", specifiedPrecision: ");
+		result.append(specifiedPrecision);
+		result.append(", specifiedScale: ");
+		result.append(specifiedScale);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlEmbedded.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlEmbedded.java
index 844d79e..02b874b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlEmbedded.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlEmbedded.java
@@ -22,7 +22,7 @@
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.IPersistentAttribute;
-import org.eclipse.jpt.core.internal.IPersistentType;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbedded;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
 import org.eclipse.jpt.core.internal.mappings.IAttributeOverride;
 import org.eclipse.jpt.core.internal.mappings.IEmbeddable;
@@ -366,16 +366,6 @@
 		if (attribute == null) {
 			return null;
 		}
-		String resolvedTypeName = attribute.resolvedTypeName();
-		if (resolvedTypeName == null) {
-			return null;
-		}
-		IPersistentType persistentType = defaultsContext.persistentType(resolvedTypeName);
-		if (persistentType != null) {
-			if (persistentType.getMapping() instanceof IEmbeddable) {
-				return (IEmbeddable) persistentType.getMapping();
-			}
-		}
-		return null;
+		return JavaEmbedded.embeddableFor(attribute, defaultsContext);
 	}
 } // XmlEmbedded
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlMultiRelationshipMappingInternal.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlMultiRelationshipMappingInternal.java
index 91bba67..6e0eb00 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlMultiRelationshipMappingInternal.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlMultiRelationshipMappingInternal.java
@@ -16,10 +16,10 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.Signature;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.ITypeMapping;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaMultiRelationshipMapping;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaRelationshipMapping;
 import org.eclipse.jpt.core.internal.content.orm.resource.OrmXmlMapper;
 import org.eclipse.jpt.core.internal.emfutility.DOMUtilities;
@@ -825,22 +825,12 @@
 	 * another container or an array or a primitive or other Basic type)
 	 */
 	@Override
-	public String javaDefaultTargetEntity(String signature) {
-		String typeName = super.javaDefaultTargetEntity(signature);
-		return JavaRelationshipMapping.typeNamedIsContainer(typeName) ? this.javaDefaultTargetEntityFromContainer(signature) : null;
+	protected String javaDefaultTargetEntity(ITypeBinding typeBinding) {
+		String typeName = super.javaDefaultTargetEntity(typeBinding);
+		return JavaRelationshipMapping.typeNamedIsContainer(typeName) ? this.javaDefaultTargetEntityFromContainer(typeBinding) : null;
 	}
 
-	protected String javaDefaultTargetEntityFromContainer(String signature) {
-		String[] parmSignatures = Signature.getTypeArguments(signature);
-		if ((parmSignatures == null) || (parmSignatures.length != 1)) {
-			return null;
-		}
-		IType iType = getPersistentType().findJdtType();
-		if (iType == null) {
-			return null;
-		}
-		String elementSignature = parmSignatures[0];
-		String elementTypeName = buildReferenceEntityTypeName(elementSignature, iType);
-		return JavaRelationshipMapping.typeNamedIsContainer(elementTypeName) ? null : elementTypeName;
+	protected String javaDefaultTargetEntityFromContainer(ITypeBinding typeBinding) {
+		return JavaMultiRelationshipMapping.javaDefaultTargetEntityFromContainer(typeBinding);
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentAttribute.java
index b17c583..2bf4687 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentAttribute.java
@@ -24,7 +24,6 @@
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentAttribute;
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentType;
 import org.eclipse.jpt.core.internal.jdtutility.Attribute;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
 
 /**
  * <!-- begin-user-doc -->
@@ -285,15 +284,6 @@
 		return IXmlContentNodes.PERSISTENT_ATTRIBUTE_ID;
 	}
 
-	public Iterator<String> candidateMappingKeys() {
-		return new TransformationIterator<IXmlAttributeMappingProvider, String>(this.attributeMappingProviders.iterator()) {
-			@Override
-			protected String transform(IXmlAttributeMappingProvider provider) {
-				return provider.key();
-			}
-		};
-	}
-
 	public Collection<IXmlAttributeMappingProvider> attributeMappingProviders() {
 		return this.attributeMappingProviders;
 	}
@@ -315,7 +305,7 @@
 	}
 
 	public Attribute getAttribute() {
-		JavaPersistentType javaPersistentType = ((XmlPersistentType) typeMapping().getPersistentType()).findJavaPersistentType();
+		JavaPersistentType javaPersistentType = typeMapping().getPersistentType().findJavaPersistentType();
 		if (javaPersistentType == null) {
 			return null;
 		}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentType.java
index 7358f22..82fc48a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentType.java
@@ -1,11 +1,12 @@
 /*******************************************************************************
- * 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
+ * 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
- *******************************************************************************/
+ * Contributors:
+ *     Oracle - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.jpt.core.internal.content.orm;
 
 import java.util.ArrayList;
@@ -24,7 +25,7 @@
 import org.eclipse.emf.ecore.util.EObjectEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jpt.core.internal.IJpaContentNode;
 import org.eclipse.jpt.core.internal.IJpaFile;
 import org.eclipse.jpt.core.internal.IPersistentAttribute;
@@ -514,14 +515,6 @@
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
 
-	public Iterator candidateMappingKeys() {
-		Collection mappingKeys = new ArrayList();
-		for (IXmlTypeMappingProvider provider : typeMappingProviders()) {
-			mappingKeys.add(provider.key());
-		}
-		return mappingKeys.iterator();
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -824,9 +817,10 @@
 
 	public Iterator<IPersistentType> inheritanceHierarchy() {
 		// using a chain iterator to traverse up the inheritance tree
-		return new ChainIterator(this) {
-			protected Object nextLink(Object currentLink) {
-				return ((IPersistentType) currentLink).parentPersistentType();
+		return new ChainIterator<IPersistentType>(this) {
+			@Override
+			protected IPersistentType nextLink(IPersistentType pt) {
+				return pt.parentPersistentType();
 			}
 		};
 	}
@@ -835,22 +829,8 @@
 		return this.parentPersistentType;
 	}
 
-	private String superclassTypeSignature() {
-		IType javaType = this.findJdtType();
-		if (javaType == null) {
-			return null;
-		}
-		try {
-			return javaType.getSuperclassTypeSignature();
-		}
-		catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
 	public IJpaContentNode getContentNode(int offset) {
-		for (Iterator i = getSpecifiedAttributeMappings().iterator(); i.hasNext();) {
-			XmlAttributeMapping mapping = (XmlAttributeMapping) i.next();
+		for (XmlAttributeMapping mapping : this.getSpecifiedAttributeMappings()) {
 			if (mapping.getNode().contains(offset)) {
 				return mapping.getContentNode(offset);
 			}
@@ -863,33 +843,15 @@
 	}
 
 	private void refreshParentPersistentType(DefaultsContext context) {
-		String superclassTypeSignature = this.superclassTypeSignature();
-		if (superclassTypeSignature == null) {
+		JavaPersistentType javaPersistentType = findJavaPersistentType();
+		if (javaPersistentType == null) {
 			this.parentPersistentType = null;
 			return;
 		}
-		IType jdtType = this.findJdtType();
-		if (jdtType == null) {
-			this.parentPersistentType = null;
-			return;
-		}
-		String fullyQualifiedTypeName = JDTTools.resolveSignature(superclassTypeSignature, jdtType);
-		if (fullyQualifiedTypeName == null) {
-			this.parentPersistentType = null;
-			return;
-		}
-		IPersistentType possibleParent = context.persistentType(fullyQualifiedTypeName);
-		if (possibleParent != null) {
-			if (possibleParent.getMappingKey() != null) {
-				this.parentPersistentType = possibleParent;
-			}
-			else {
-				this.parentPersistentType = possibleParent.parentPersistentType();
-			}
-		}
-		else {
-			this.parentPersistentType = null;
-		}
+		ITypeBinding typeBinding = javaPersistentType.getType().typeBinding(context.astRoot());
+		IPersistentType parentPersistentType = JavaPersistentType.parentPersistentType(context, typeBinding);
+		this.parentPersistentType = parentPersistentType;
+		return;
 	}
 
 	protected Iterator<XmlPersistentAttribute> attributesNamed(final String attributeName) {
@@ -903,25 +865,14 @@
 
 	public XmlPersistentAttribute attributeNamed(String attributeName) {
 		Iterator<XmlPersistentAttribute> attributes = attributesNamed(attributeName);
-		if (attributes.hasNext()) {
-			return attributes.next();
-		}
-		else {
-			return null;
-		}
+		return attributes.hasNext() ? attributes.next() : null;
 	}
 
 	public IPersistentAttribute resolveAttribute(String attributeName) {
 		Iterator<XmlPersistentAttribute> attributes = attributesNamed(attributeName);
 		if (attributes.hasNext()) {
 			XmlPersistentAttribute attribute = attributes.next();
-			if (attributes.hasNext()) {
-				// more than one
-				return null;
-			}
-			else {
-				return attribute;
-			}
+			return attributes.hasNext() ? null /* more than one */: attribute;
 		}
 		else if (parentPersistentType() != null) {
 			return parentPersistentType().resolveAttribute(attributeName);
@@ -953,7 +904,7 @@
 	private abstract class AttributeMappingsList<E>
 		extends EObjectContainmentEList<XmlAttributeMapping>
 	{
-		private AttributeMappingsList(int feature) {
+		AttributeMappingsList(int feature) {
 			super(XmlAttributeMapping.class, XmlPersistentType.this, feature);
 		}
 
@@ -974,7 +925,7 @@
 		}
 
 		@Override
-		protected void didClear(int size, Object[] oldObjects) {
+		protected void didClear(int len, Object[] oldObjects) {
 			persistentAttributes().clear();
 		}
 
@@ -998,7 +949,7 @@
 	private class SpecifiedAttributeMappingsList<E>
 		extends AttributeMappingsList<XmlAttributeMapping>
 	{
-		private SpecifiedAttributeMappingsList() {
+		SpecifiedAttributeMappingsList() {
 			super(OrmPackage.XML_PERSISTENT_TYPE__SPECIFIED_ATTRIBUTE_MAPPINGS);
 		}
 
@@ -1012,7 +963,7 @@
 	private class VirtualAttributeMappingsList<E>
 		extends AttributeMappingsList<XmlAttributeMapping>
 	{
-		private VirtualAttributeMappingsList() {
+		VirtualAttributeMappingsList() {
 			super(OrmPackage.XML_PERSISTENT_TYPE__VIRTUAL_ATTRIBUTE_MAPPINGS);
 		}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRelationshipMapping.java
index 2f52b03..96debff 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRelationshipMapping.java
@@ -14,11 +14,11 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.Signature;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.ITypeMapping;
-import org.eclipse.jpt.core.internal.jdtutility.JDTTools;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaRelationshipMapping;
 import org.eclipse.jpt.core.internal.mappings.ICascade;
 import org.eclipse.jpt.core.internal.mappings.IEntity;
 import org.eclipse.jpt.core.internal.mappings.IRelationshipMapping;
@@ -511,7 +511,7 @@
 		return null;
 	}
 
-	public String fullyQualifiedTargetEntity() {
+	public String fullyQualifiedTargetEntity(CompilationUnit astRoot) {
 		if (getTargetEntity() == null) {
 			return null;
 		}
@@ -542,7 +542,7 @@
 	public void refreshDefaults(DefaultsContext defaultsContext) {
 		super.refreshDefaults(defaultsContext);
 		setDefaultTargetEntity((String) defaultsContext.getDefault(BaseJpaPlatform.DEFAULT_TARGET_ENTITY_KEY));
-		String targetEntity = fullyQualifiedTargetEntity();
+		String targetEntity = fullyQualifiedTargetEntity(defaultsContext.astRoot());
 		if (targetEntity != null) {
 			IPersistentType persistentType = defaultsContext.persistentType(targetEntity);
 			if (persistentType != null) {
@@ -559,23 +559,19 @@
 	 * the default 'targetEntity' is calculated from the attribute type;
 	 * return null if the attribute type cannot possibly be an entity
 	 */
-	public String javaDefaultTargetEntity() {
-		return this.javaDefaultTargetEntity(this.getPersistentAttribute().getAttribute().typeSignature());
-	}
-
-	protected String javaDefaultTargetEntity(String signature) {
-		IType iType = getPersistentType().findJdtType();
-		if (iType != null) {
-			return buildReferenceEntityTypeName(signature, iType);
+	public String javaDefaultTargetEntity(CompilationUnit astRoot) {
+		ITypeBinding typeBinding = this.getPersistentAttribute().getAttribute().typeBinding(astRoot);
+		if (typeBinding != null) {
+			return this.javaDefaultTargetEntity(typeBinding);
 		}
 		return null;
 	}
 
-	// TODO Embeddable???
-	public static String buildReferenceEntityTypeName(String signature, IType jdtType) {
-		if (Signature.getArrayCount(signature) > 0) {
-			return null; // arrays cannot be entities
-		}
-		return JDTTools.resolve(Signature.toString(signature), jdtType);
+	protected String javaDefaultTargetEntity(ITypeBinding typeBinding) {
+		return buildReferenceEntityTypeName(typeBinding);
+	}
+
+	protected String buildReferenceEntityTypeName(ITypeBinding typeBinding) {
+		return JavaRelationshipMapping.buildReferenceEntityTypeName(typeBinding);
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlTypeMapping.java
index 35a78f1..0a58ca3 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlTypeMapping.java
@@ -593,10 +593,6 @@
 		return result.toString();
 	}
 
-	public void initialize() {
-	//do nothing as this will be handle by the Xml Translators
-	}
-
 	/**
 	 * ITypeMapping is changed and various ITypeMappings may have
 	 * common settings.  In this method initialize the new ITypeMapping (this)
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/Persistence.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/Persistence.java
index da6e457..f78bb27 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/Persistence.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/Persistence.java
@@ -9,6 +9,7 @@
 package org.eclipse.jpt.core.internal.content.persistence;
 
 import java.util.Collection;
+import java.util.Iterator;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
@@ -17,9 +18,11 @@
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.jpt.core.internal.IJpaContentNode;
 import org.eclipse.jpt.core.internal.IJpaFile;
 import org.eclipse.jpt.core.internal.IJpaProject;
 import org.eclipse.jpt.core.internal.XmlEObject;
+import org.eclipse.jpt.core.internal.content.persistence.resource.IPersistenceXmlContentNodes;
 
 /**
  * <!-- begin-user-doc -->
@@ -39,7 +42,7 @@
  * @model kind="class"
  * @generated
  */
-public class Persistence extends XmlEObject
+public class Persistence extends XmlEObject implements IJpaContentNode
 {
 	/**
 	 * The cached value of the '{@link #getPersistenceUnits() <em>Persistence Units</em>}' containment reference list.
@@ -345,4 +348,18 @@
 		IJpaFile file = getJpaFile();
 		return (file == null) ? null : file.getJpaProject();
 	}
+
+	public IJpaContentNode getContentNode(int offset) {
+		for (Iterator<PersistenceUnit> i = getPersistenceUnits().iterator(); i.hasNext();) {
+			PersistenceUnit persistenceUnit = i.next();
+			if (persistenceUnit.getNode().contains(offset)) {
+				return persistenceUnit;
+			}
+		}
+		return this;
+	}
+
+	public Object getId() {
+		return IPersistenceXmlContentNodes.PERSISTENCEXML_ROOT_ID;
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistencePackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistencePackage.java
index 92f9870..6c9dea2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistencePackage.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistencePackage.java
@@ -1056,7 +1056,9 @@
 		persistenceXmlRootContentNodeEClass.getESuperTypes().add(theJpaCorePackage.getXmlEObject());
 		persistenceXmlRootContentNodeEClass.getESuperTypes().add(theJpaCorePackage.getIJpaRootContentNode());
 		persistenceEClass.getESuperTypes().add(theJpaCorePackage.getXmlEObject());
+		persistenceEClass.getESuperTypes().add(theJpaCorePackage.getIJpaContentNode());
 		persistenceUnitEClass.getESuperTypes().add(theJpaCorePackage.getXmlEObject());
+		persistenceUnitEClass.getESuperTypes().add(theJpaCorePackage.getIJpaContentNode());
 		mappingFileRefEClass.getESuperTypes().add(theJpaCorePackage.getXmlEObject());
 		javaClassRefEClass.getESuperTypes().add(theJpaCorePackage.getXmlEObject());
 		propertiesEClass.getESuperTypes().add(theJpaCorePackage.getXmlEObject());
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceUnit.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceUnit.java
index b0e2df6..e4bb36c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceUnit.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceUnit.java
@@ -18,7 +18,9 @@
 import org.eclipse.emf.ecore.util.EDataTypeEList;
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.jpt.core.internal.IJpaContentNode;
 import org.eclipse.jpt.core.internal.XmlEObject;
+import org.eclipse.jpt.core.internal.content.persistence.resource.IPersistenceXmlContentNodes;
 
 /**
  * <!-- begin-user-doc -->
@@ -46,7 +48,7 @@
  * @model kind="class"
  * @generated
  */
-public class PersistenceUnit extends XmlEObject
+public class PersistenceUnit extends XmlEObject implements IJpaContentNode
 {
 	/**
 	 * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
@@ -874,4 +876,8 @@
 		result.append(')');
 		return result.toString();
 	}
+
+	public Object getId() {
+		return IPersistenceXmlContentNodes.PERSISTENCE_UNIT_ID;
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java
index c5e5322..8757acb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlJpaFileContentProvider.java
@@ -1,8 +1,8 @@
 /*******************************************************************************
  * 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.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
  * 
  * Contributors:
  *     Oracle - initial API and implementation
@@ -11,6 +11,7 @@
 
 import java.io.IOException;
 import java.util.Collections;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notification;
@@ -19,6 +20,7 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
+import org.eclipse.jpt.core.internal.IJpaFile;
 import org.eclipse.jpt.core.internal.IJpaFileContentProvider;
 import org.eclipse.jpt.core.internal.IJpaRootContentNode;
 import org.eclipse.jpt.core.internal.JptCorePlugin;
@@ -27,32 +29,38 @@
 
 public class PersistenceXmlJpaFileContentProvider implements IJpaFileContentProvider
 {
-	public static PersistenceXmlJpaFileContentProvider INSTANCE = new PersistenceXmlJpaFileContentProvider();
+	//singleton
+	private static final PersistenceXmlJpaFileContentProvider INSTANCE = new PersistenceXmlJpaFileContentProvider();
 	
-	
-	private IFile resourceFile;
+	/**
+	 * Return the singleton.
+	 */
+	public static IJpaFileContentProvider instance() {
+		return INSTANCE;
+	}
 	
 	
 	/**
 	 * Restrict access
 	 */
 	private PersistenceXmlJpaFileContentProvider() {
-		
+		super();
 	}
 
-	public IJpaRootContentNode buildRootContent(IFile resourceFile) {
+	public IJpaRootContentNode buildRootContent(IJpaFile jpaFile) {
+		IFile resourceFile = jpaFile.getFile();
 		PersistenceXmlResourceFactory.register();
-		this.resourceFile = resourceFile;
-		URI fileURI = URI.createPlatformResourceURI(resourceFile.getFullPath().toString());
+		URI fileURI = URI.createPlatformResourceURI(resourceFile.getFullPath().toString(), true);
 		PersistenceResource resource = (PersistenceResource) getResourceSet(resourceFile).getResource(fileURI, true);
 		PersistenceXmlRootContentNode root = PersistenceFactory.eINSTANCE.createPersistenceXmlRootContentNode();
+		jpaFile.setContent(root);
 		root.setPersistence(resource.getPersistence());
-		resource.eAdapters().add(buildRootNodeListener(root));
+		resource.eAdapters().add(buildRootNodeListener(resourceFile, root));
 		return root;
 	}
 	
-	private Adapter buildRootNodeListener(PersistenceXmlRootContentNode root) {
-		return new RootAdapter(root);
+	private Adapter buildRootNodeListener(IFile resourceFile, PersistenceXmlRootContentNode rootContentNode) {
+		return new RootAdapter(resourceFile, rootContentNode);
 	}
 
 	protected ResourceSet getResourceSet(IFile file) {
@@ -66,24 +74,27 @@
 	
 	private class RootAdapter extends AdapterImpl 
 	{
-		PersistenceXmlRootContentNode root;
+		final IFile resourceFile;
+		final PersistenceXmlRootContentNode rootContentNode;
 		
-		private RootAdapter(PersistenceXmlRootContentNode rootContentNode) {
+		RootAdapter(IFile resourceFile, PersistenceXmlRootContentNode rootContentNode) {
 			super();
-			root = rootContentNode;
+			this.resourceFile = resourceFile;
+			this.rootContentNode = rootContentNode;
 		}
 		
+		@Override
 		public void notifyChanged(Notification notification) {
 			int featureId = notification.getFeatureID(Resource.class);
 			if (featureId == Resource.RESOURCE__CONTENTS) {
 				if (notification.getEventType() == Notification.ADD
 						|| notification.getEventType() == Notification.REMOVE) {
 					PersistenceResource resource = (PersistenceResource) notification.getNotifier();
-					root.setPersistence(resource.getPersistence());
+					this.rootContentNode.setPersistence(resource.getPersistence());
 				}
 			}
 			else if (featureId == Resource.RESOURCE__IS_LOADED) {
-				if (resourceFile.exists()) {
+				if (this.resourceFile.exists()) {
 					// dumb translator is unloading my resource, reload it
 					if (notification.getNewBooleanValue() == false) {
 						PersistenceResource resource = (PersistenceResource) notification.getNotifier();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java
index 77bd8ad..f19b729 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/PersistenceXmlRootContentNode.java
@@ -346,8 +346,10 @@
 	}
 
 	public IJpaContentNode getContentNode(int offset) {
-		// TODO Auto-generated method stub
-		return null;
+		if (getPersistence() == null || !getPersistence().getNode().contains(offset)) {
+			return this;
+		}
+		return getPersistence().getContentNode(offset);
 	}
 
 	public Object getId() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/IPersistenceXmlContentNodes.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/IPersistenceXmlContentNodes.java
index 699518b..3c389ad 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/IPersistenceXmlContentNodes.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/IPersistenceXmlContentNodes.java
@@ -14,4 +14,6 @@
 {
 	String PERSISTENCEXML_ROOT_ID = JptCorePlugin.PLUGIN_ID + ".persistencexml.Root";
 	
+	String PERSISTENCE_UNIT_ID = JptCorePlugin.PLUGIN_ID + ".persistencexml.PersistenceUnit";
+	
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceTranslator.java
index 123d181..1e8e0b9 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceTranslator.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/resource/PersistenceTranslator.java
@@ -123,7 +123,7 @@
 	}
 	
 	private static Translator createPropertyTranslator() {
-		GenericTranslator translator = new GenericTranslator(PROPERTY, PERSISTENCE_PKG.getProperties_Properties());
+		GenericTranslator translator = new GenericTranslator(PROPERTY, PERSISTENCE_PKG.getProperties_Properties(), END_TAG_NO_INDENT);
 		translator.setChildren(
 			new Translator[] {
 				createPropertyNameTranslator(),
@@ -134,10 +134,10 @@
 	}
 	
 	private static Translator createPropertyNameTranslator() {
-		return new Translator(PROPERTY_NAME, PERSISTENCE_PKG.getProperty_Name());
+		return new Translator(PROPERTY_NAME, PERSISTENCE_PKG.getProperty_Name(), DOM_ATTRIBUTE);
 	}
 	
 	private static Translator createPropertyValueTranslator() {
-		return new Translator(PROPERTY_VALUE, PERSISTENCE_PKG.getProperty_Value());
+		return new Translator(PROPERTY_VALUE, PERSISTENCE_PKG.getProperty_Value(), DOM_ATTRIBUTE);
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/util/PersistenceSwitch.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/util/PersistenceSwitch.java
index 0d2cb56..d115ee5 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/util/PersistenceSwitch.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/persistence/util/PersistenceSwitch.java
@@ -127,14 +127,16 @@
 				if (result == null)
 					result = caseXmlEObject(persistence);
 				if (result == null)
+					result = caseIJpaContentNode(persistence);
+				if (result == null)
 					result = caseJpaEObject(persistence);
 				if (result == null)
 					result = caseIXmlEObject(persistence);
 				if (result == null)
-					result = caseIJpaEObject(persistence);
-				if (result == null)
 					result = caseIJpaSourceObject(persistence);
 				if (result == null)
+					result = caseIJpaEObject(persistence);
+				if (result == null)
 					result = defaultCase(theEObject);
 				return result;
 			}
@@ -144,14 +146,16 @@
 				if (result == null)
 					result = caseXmlEObject(persistenceUnit);
 				if (result == null)
+					result = caseIJpaContentNode(persistenceUnit);
+				if (result == null)
 					result = caseJpaEObject(persistenceUnit);
 				if (result == null)
 					result = caseIXmlEObject(persistenceUnit);
 				if (result == null)
-					result = caseIJpaEObject(persistenceUnit);
-				if (result == null)
 					result = caseIJpaSourceObject(persistenceUnit);
 				if (result == null)
+					result = caseIJpaEObject(persistenceUnit);
+				if (result == null)
 					result = defaultCase(theEObject);
 				return result;
 			}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetDataModelProvider.java
index 5703ecb..4180fb0 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetDataModelProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetDataModelProvider.java
@@ -10,8 +10,8 @@
 package org.eclipse.jpt.core.internal.facet;
 
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.Set;
+
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.core.JavaCore;
@@ -99,25 +99,15 @@
 	public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
 		if (JPA_LIBRARY.equals(propertyName)) {
 			String[] libraries = JavaCore.getUserLibraryNames();
+			Arrays.sort(libraries);
 			DataModelPropertyDescriptor[] descriptors = new DataModelPropertyDescriptor[libraries.length + 1];
 			
-			for (int i = 0; i < libraries.length ; i ++) {
-				descriptors[i + 1] = new DataModelPropertyDescriptor(libraries[i], libraries[i]);
-			}
-			
-			if(descriptors.length > 2){
-				Arrays.sort(descriptors, 0, descriptors.length - 2, 
-						new Comparator() {
-							public int compare(Object arg0, Object arg1) {
-								DataModelPropertyDescriptor d1 = (DataModelPropertyDescriptor)arg0;
-								DataModelPropertyDescriptor d2 = (DataModelPropertyDescriptor)arg1;
-								return d1.getPropertyDescription().compareTo(d2.getPropertyDescription());
-							}
-						}
-					);
-			}
-			
 			descriptors[0] = new DataModelPropertyDescriptor("", WTPCommonPlugin.getResourceString(WTPCommonMessages.RUNTIME_NONE, null));
+			
+			int i = 1;
+			for (String library : libraries) {
+				descriptors[i++] = new DataModelPropertyDescriptor(library, library);
+			}	
 			return descriptors;
 		}
 		
@@ -162,7 +152,7 @@
 	}
 	
 	private IStatus validateConnection(String connectionName) {
-		if (connectionName == null || connectionName.equals("") || ! ConnectionProfileRepository.instance().getConnectionWithProfileNamed(connectionName).isConnected()) {
+		if (connectionName == null || connectionName.equals("") || ! ConnectionProfileRepository.instance().profileNamed(connectionName).isConnected()) {
 			return new Status(IStatus.INFO, JptCorePlugin.PLUGIN_ID, JptCoreMessages.VALIDATE_CONNECTION_NOT_CONNECTED);
 		}
 		else {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java
index eea3c14..e4cd4cb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetPostInstallDelegate.java
@@ -25,7 +25,6 @@
 import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
 import org.eclipse.jpt.core.internal.content.orm.OrmFactory;
 import org.eclipse.jpt.core.internal.content.orm.OrmXmlResource;
-import org.eclipse.jpt.core.internal.content.persistence.MappingFileRef;
 import org.eclipse.jpt.core.internal.content.persistence.Persistence;
 import org.eclipse.jpt.core.internal.content.persistence.PersistenceFactory;
 import org.eclipse.jpt.core.internal.content.persistence.PersistenceUnit;
@@ -79,13 +78,6 @@
 		persistence.setVersion("1.0");
 		PersistenceUnit pUnit = PersistenceFactory.eINSTANCE.createPersistenceUnit();
 		pUnit.setName(project.getName());
-		
-		if (dataModel.getBooleanProperty(CREATE_ORM_XML)) {
-			MappingFileRef mappingFile = PersistenceFactory.eINSTANCE.createMappingFileRef();
-			mappingFile.setFileName(ORM_XML_FILE_PATH);
-			pUnit.getMappingFiles().add(mappingFile);
-		}
-		
 		persistence.getPersistenceUnits().add(pUnit);
 		
 		try {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetUtils.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetUtils.java
index 9368188..c48c2b5 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetUtils.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/facet/JpaFacetUtils.java
@@ -20,7 +20,6 @@
 import org.eclipse.jpt.core.internal.JpaProject;
 import org.eclipse.jpt.core.internal.JptCorePlugin;
 import org.eclipse.jpt.core.internal.platform.generic.GenericPlatform;
-import org.eclipse.jpt.db.internal.ConnectionProfileRepository;
 import org.osgi.service.prefs.BackingStoreException;
 
 public class JpaFacetUtils
@@ -66,7 +65,7 @@
 			throw new IllegalArgumentException(project.getName());
 		}
 		
-		if (JpaPlatformRegistry.INSTANCE.getJpaPlatform(jpaPlatformId) == null) {
+		if (JpaPlatformRegistry.instance().jpaPlatform(jpaPlatformId) == null) {
 			throw new IllegalArgumentException(jpaPlatformId);
 		}
 		
@@ -99,10 +98,6 @@
 			throw new IllegalArgumentException(project.getName());
 		}
 		
-		if (ConnectionProfileRepository.instance().getConnectionWithProfileNamed(connectionName) == null) {
-			throw new IllegalArgumentException(connectionName);
-		}
-		
 		jpaProject.setDataSource(connectionName);
 		project.setPersistentProperty(CONNECTION_KEY, connectionName);
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AbstractExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AbstractExpressionConverter.java
index c299099..11f4ad3 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AbstractExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AbstractExpressionConverter.java
@@ -14,37 +14,64 @@
 import org.eclipse.jpt.utility.internal.StringTools;
 
 /**
- * Gather together just the tiniest bit of common behavior.
- * E is the expression type.
+ * Gather together the common implementation behavior.
  * T is the type of the object to be converted to and from an expression.
+ * 
+ * We're still figuring out Java Generics here.... The methods in this abstract
+ * class work fine with any subclass of Expression E; but a ClassCastException
+ * will occur as soon as we call any method implemented by a subclass
+ * (e.g. StringExpressionConverter) that expects a particular subclass of
+ * Expression (e.g. StringLiteral).
  */
-public abstract class AbstractExpressionConverter<T, E extends Expression>
-	implements ExpressionConverter<T, E>
+public abstract class AbstractExpressionConverter<T>
+	implements ExpressionConverter<T>
 {
 
 	protected AbstractExpressionConverter() {
 		super();
 	}
 
-	public E convert(T object, AST ast) {
-		return (object == null) ? null : this.convert_(object, ast);
+
+	// ********** object -> expression **********
+
+	public Expression convert(T object, AST ast) {
+		return (object == null) ? this.convertNull(ast) : this.convertObject(object, ast);
+	}
+
+	/**
+	 * Return the expression for a null object. By default, a null object will
+	 * be converted into a null expression.
+	 */
+	protected Expression convertNull(AST ast) {
+		return null;
 	}
 
 	/**
 	 * The specified object is not null.
 	 * @see #convert(T, AST)
 	 */
-	protected abstract E convert_(T object, AST ast);
+	protected abstract Expression convertObject(T object, AST ast);
 
-	public T convert(E expression) {
-		return (expression == null) ? null : this.convert_(expression);
+
+	// ********** expression -> object **********
+
+	public T convert(Expression expression) {
+		return (expression == null) ? this.convertNull() : this.convertExpression(expression);
+	}
+
+	/**
+	 * Return the object for a null expression. By default, a null expression will
+	 * be converted into a null object.
+	 */
+	protected T convertNull() {
+		return null;
 	}
 
 	/**
 	 * The specified expression is not null.
 	 * @see #convert(Expression)
 	 */
-	protected abstract T convert_(E expression);
+	protected abstract T convertExpression(Expression expression);
 
 	@Override
 	public String toString() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AnnotationEditFormatter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AnnotationEditFormatter.java
index 8819d01..91eb53c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AnnotationEditFormatter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AnnotationEditFormatter.java
@@ -1,155 +1,24 @@
 /*******************************************************************************
- * 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
+ * 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
- ******************************************************************************/        
+ * Contributors:
+ *     Oracle - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.jpt.core.internal.jdtutility;
 
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
-import org.eclipse.text.edits.InsertEdit;
 import org.eclipse.text.edits.MalformedTreeException;
-import org.eclipse.text.edits.MultiTextEdit;
-import org.eclipse.text.edits.ReplaceEdit;
 import org.eclipse.text.edits.TextEdit;
 
-/**
- * This will apply TextEdit's to a doc and do some extra work to cleanup some
- * of the nasty Eclipse annotation formatting (e.g. arrays of annotations).
- */
-public class AnnotationEditFormatter {
-	
-	protected IDocument doc;
-
-	public AnnotationEditFormatter(IDocument doc) {
-		this.doc = doc;
-	}
-	
-	/**
-	 * Apply the edits to our doc doing extra formatting as needed. 
-	 */
-	public void apply(TextEdit edits) throws MalformedTreeException, 
-			BadLocationException {
-		edits.apply(doc, TextEdit.UPDATE_REGIONS);
-		MultiTextEdit extra = new MultiTextEdit();
-		TextEdit[] all = edits.getChildren();
-		for (int i = 0; i < all.length; i++) {
-			if (all[i] instanceof InsertEdit) {
-				InsertEdit a = (InsertEdit)all[i];
-				if (i + 1 < all.length && all[i + 1] instanceof InsertEdit) {
-					InsertEdit b = (InsertEdit)all[i + 1];
-					if (" ".equals(b.getText()) && isAnnotation(a)) {
-						// Annotation being inserted before something on the same line.
-						// Insert a newline and indent after the annotation.
-						ReplaceEdit re = new ReplaceEdit(b.getOffset(), 1, 
-								getNewlineAndIdent(b.getOffset()));
-						extra.addChild(re);
-						i++;
-						continue;
-					}
-					if (", ".equals(a.getText()) && isAnnotation(b)) {
-						// Annotation being inserted in an array initializer on the
-						// same line as the previous array element.
-						// Insert a newline and indent before the annotation.
-						ReplaceEdit re = new ReplaceEdit(a.getOffset() + 1, 1, 
-								getNewlineAndIdent(a.getOffset()));
-						extra.addChild(re);
-						i++;
-						continue;
-					}
-				}
-				if (formatArrayInit(a, extra)) {
-					continue;
-				}
-			}
-		}
-		extra.apply(doc, 0);
-	}
-	
-	/**
-	 * Create a String containing a line delimeter and indenting characters 
-	 * matching the indent level of the line containing character offset.
-	 */
-	protected String getNewlineAndIdent(int offset) throws BadLocationException {
-		int line = doc.getLineOfOffset(offset);
-		offset = doc.getLineOffset(line);
-		StringBuffer s = new StringBuffer();
-		s.append(doc.getLineDelimiter(line));
-		for (;;) {
-			char c = doc.getChar(offset++);
-			if (c == ' ' || c == '\t') {
-				s.append(c);
-			} else {
-				break;
-			}
-		}
-		return s.toString();
-	}
-	
-	/**
-	 * Is e inserting an annotation? 
-	 */
-	protected boolean isAnnotation(InsertEdit e) {
-		String s = e.getText();
-		return s.length() > 1 && s.charAt(0) == '@';
-	}
+public interface AnnotationEditFormatter {
 
 	/**
-	 * If a is inserting an annotation containing an array of annotations as
-	 * its value then format them nicely and return true.
+	 * Review the specified edits and format the specified document as needed.
 	 */
-	protected boolean formatArrayInit(InsertEdit a, MultiTextEdit extra) 
-			throws BadLocationException {
-		String s = a.getText();
-		int n = s.length();
-		if (n < 6 || s.charAt(0) != '@') {
-			return false;
-		}
-		int pos;
-		for (pos = 1; pos < n && s.charAt(pos++) != '('; ) {/* just move 'pos' */}
-		if (pos == n) {
-			return false;
-		}
-		for (; pos < n; ) {
-			char c = s.charAt(pos++);
-			if (c == '{') {
-				break;
-			}
-			if (c != ' ') {
-				return false;
-			}
-		}
-		if (pos == n) {
-			return false;
-		}
-		// now look for @ not inside parenthesis and put in 
-		// line delimeter and indent string before each
-		int offset = a.getOffset();
-		String indent = null;
-		int parenCount = 0;
-		for (; pos < n; pos++) {
-			char c = s.charAt(pos);
-			switch (c) {
-			case '(':
-				++parenCount;
-				break;
-			case ')':
-				--parenCount;
-				break;
-			case '@':
-				if (parenCount == 0) {
-					if (indent == null) {
-						indent = getNewlineAndIdent(offset) + "\t";
-					}
-					InsertEdit ie = new InsertEdit(offset + pos, indent);
-					extra.addChild(ie);
-				}
-			}
-		}
-		return indent != null;
-	}
-	
+	void format(IDocument doc, TextEdit editTree) throws MalformedTreeException, BadLocationException;
+
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AnnotationStringArrayExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AnnotationStringArrayExpressionConverter.java
new file mode 100644
index 0000000..21557f6
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/AnnotationStringArrayExpressionConverter.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * 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.core.internal.jdtutility;
+
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ArrayInitializer;
+import org.eclipse.jdt.core.dom.Expression;
+
+/**
+ * Convert an array initializer or single expression to/from an array of
+ * strings (e.g. {"text0", "text1"}).
+ * E is the type of the expressions to be found either standalone or
+ * as elements in the array initializer.
+ */
+public class AnnotationStringArrayExpressionConverter
+	extends AbstractExpressionConverter<String[]>
+{
+	private final ExpressionConverter<String> elementConverter;
+	private final StringArrayExpressionConverter arrayConverter;
+
+
+	/**
+	 * The default behavior is to remove the array initializer if it is empty.
+	 */
+	public AnnotationStringArrayExpressionConverter(ExpressionConverter<String> elementConverter) {
+		this(elementConverter, true);
+	}
+
+	public AnnotationStringArrayExpressionConverter(ExpressionConverter<String> elementConverter, boolean removeArrayInitializerWhenEmpty) {
+		super();
+		this.elementConverter = elementConverter;
+		this.arrayConverter = new StringArrayExpressionConverter(elementConverter, removeArrayInitializerWhenEmpty);
+	}
+
+	/**
+	 * if we only have a single string in the array return the single expression,
+	 * without braces, instead of an array initializer
+	 */
+	@Override
+	protected Expression convertObject(String[] strings, AST ast) {
+		return (strings.length == 1) ?
+				this.elementConverter.convert(strings[0], ast)
+			:
+				this.arrayConverter.convertObject(strings, ast);
+	}
+
+	@Override
+	protected String[] convertNull() {
+		return this.arrayConverter.convertNull();
+	}
+
+	/**
+	 * check for a single expression with no surrounding braces, implying a
+	 * single-entry array
+	 */
+	@Override
+	protected String[] convertExpression(Expression expression) {
+		return (expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) ?
+				this.arrayConverter.convertArrayInitializer((ArrayInitializer) expression)
+			:
+				new String[] {this.elementConverter.convert(expression)};
+	}
+
+
+	// ********** factory methods **********
+
+	/**
+	 * Build an expression converter for an annotation element of type String[].
+	 *     @Foo(bar={"text0", "text1"})
+	 * or
+	 *     @Foo(bar="text0")
+	 */
+	public static AnnotationStringArrayExpressionConverter forStrings() {
+		return new AnnotationStringArrayExpressionConverter(StringExpressionConverter.instance());
+	}
+
+	/**
+	 * Build an expression converter for an annotation element of type <enum>[].
+	 *     @Foo(bar={BAZ, BAT})
+	 * or
+	 *     @Foo(bar=BAZ)
+	 */
+	public static AnnotationStringArrayExpressionConverter forNames() {
+		return new AnnotationStringArrayExpressionConverter(NameStringExpressionConverter.instance());
+	}
+
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Attribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Attribute.java
index bb46008..60dc958 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Attribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Attribute.java
@@ -10,14 +10,17 @@
 package org.eclipse.jpt.core.internal.jdtutility;
 
 import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jpt.utility.internal.CommandExecutorProvider;
 
 /**
  * Combine behavior common to FieldAttribute and MethodAttribute.
  */
 public abstract class Attribute extends Member {
 
-	Attribute(IMember jdtMember) {
-		super(jdtMember);
+	Attribute(IMember jdtMember, CommandExecutorProvider modifySharedDocumentCommandExecutorProvider) {
+		super(jdtMember, modifySharedDocumentCommandExecutorProvider);
 	}
 
 	public boolean isField() {
@@ -30,14 +33,8 @@
 
 	public abstract String attributeName();
 
-	public abstract String typeSignature();
-
-	public boolean isPrimitiveType() {
-		return JDTTools.signatureIsPrimitive(this.typeSignature());
-	}
-
-	public boolean typeIs(String fullyQualifiedTypeName) {
-		return fullyQualifiedTypeName.equals(this.resolvedTypeName());
+	public boolean typeIs(String fullyQualifiedTypeName, CompilationUnit astRoot) {
+		return fullyQualifiedTypeName.equals(this.resolvedTypeName(astRoot));
 	}
 
 	/**
@@ -45,8 +42,14 @@
 	 * Return the fully-qualified type name or return null if it cannot be
 	 * resolved unambiguously.
 	 */
-	public String resolvedTypeName() {
-		return JDTTools.resolveSignature(this.typeSignature(), this.getJdtMember().getDeclaringType());
+	public String resolvedTypeName(CompilationUnit astRoot) {
+		ITypeBinding typeBinding = typeBinding(astRoot);
+		if (typeBinding != null) {
+			return typeBinding.getQualifiedName();
+		}
+		return null;
 	}
 
+
+	public abstract ITypeBinding typeBinding(CompilationUnit astRoot);
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/BooleanStringExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/BooleanStringExpressionConverter.java
index 0f5854e..f7bf5d6 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/BooleanStringExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/BooleanStringExpressionConverter.java
@@ -10,22 +10,22 @@
 package org.eclipse.jpt.core.internal.jdtutility;
 
 import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.BooleanLiteral;
+import org.eclipse.jdt.core.dom.Expression;
 
 /**
  * Convert a boolean literal to/from a string representation of a boolean
  * (e.g. "true").
  */
 public final class BooleanStringExpressionConverter
-	extends AbstractExpressionConverter<String, BooleanLiteral>
+	extends AbstractExpressionConverter<String>
 {
-	private static ExpressionConverter<String, BooleanLiteral> INSTANCE;
+	private static ExpressionConverter<String> INSTANCE;
 
 	/**
 	 * Return the singleton.
 	 */
-	public static ExpressionConverter<String, BooleanLiteral> instance() {
+	public static ExpressionConverter<String> instance() {
 		if (INSTANCE == null) {
 			INSTANCE = new BooleanStringExpressionConverter();
 		}
@@ -40,16 +40,14 @@
 	}
 
 	@Override
-	protected BooleanLiteral convert_(String string, AST ast) {
+	protected BooleanLiteral convertObject(String string, AST ast) {
 		return ast.newBooleanLiteral(Boolean.valueOf(string).booleanValue());
 	}
 
 	@Override
-	protected String convert_(BooleanLiteral booleanLiteral) {
-		return (booleanLiteral.getNodeType() == ASTNode.BOOLEAN_LITERAL) ?
-			Boolean.toString(booleanLiteral.booleanValue())
-		:
-			null;
+	protected String convertExpression(Expression expression) {
+		Object value = expression.resolveConstantExpressionValue();
+		return (value instanceof Boolean) ? ((Boolean) value).toString() : null;
 	}
 
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/CharacterStringExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/CharacterStringExpressionConverter.java
index 1fa055d..dfc2fdc 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/CharacterStringExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/CharacterStringExpressionConverter.java
@@ -10,22 +10,22 @@
 package org.eclipse.jpt.core.internal.jdtutility;
 
 import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.CharacterLiteral;
+import org.eclipse.jdt.core.dom.Expression;
 
 /**
  * Convert a character literal to/from a string representation of a character
  * (e.g. "A").
  */
 public final class CharacterStringExpressionConverter
-	extends AbstractExpressionConverter<String, CharacterLiteral>
+	extends AbstractExpressionConverter<String>
 {
-	private static ExpressionConverter<String, CharacterLiteral> INSTANCE;
+	private static ExpressionConverter<String> INSTANCE;
 
 	/**
 	 * Return the singleton.
 	 */
-	public static ExpressionConverter<String, CharacterLiteral> instance() {
+	public static ExpressionConverter<String> instance() {
 		if (INSTANCE == null) {
 			INSTANCE = new CharacterStringExpressionConverter();
 		}
@@ -40,18 +40,16 @@
 	}
 	
 	@Override
-	protected CharacterLiteral convert_(String string, AST ast) {
+	protected CharacterLiteral convertObject(String string, AST ast) {
 		CharacterLiteral characterLiteral = ast.newCharacterLiteral();
 		characterLiteral.setCharValue(string.charAt(0));
 		return characterLiteral;
 	}
 
 	@Override
-	protected String convert_(CharacterLiteral characterLiteral) {
-		return (characterLiteral.getNodeType() == ASTNode.CHARACTER_LITERAL) ?
-			Character.toString(characterLiteral.charValue())
-		:
-			null;
+	protected String convertExpression(Expression expression) {
+		Object value = expression.resolveConstantExpressionValue();
+		return (value instanceof Character) ? ((Character) value).toString() : null;
 	}
 
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ConversionDeclarationAnnotationElementAdapter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ConversionDeclarationAnnotationElementAdapter.java
index 11ead9d..f6cf010 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ConversionDeclarationAnnotationElementAdapter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ConversionDeclarationAnnotationElementAdapter.java
@@ -11,78 +11,51 @@
 
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.Expression;
-import org.eclipse.jdt.core.dom.StringLiteral;
 import org.eclipse.jpt.utility.internal.StringTools;
 
 /**
  * Wrap a declaration annotation element adapter that deals with AST
  * expressions, converting them to/from various other objects.
  * T is the type of the object to be passed to and returned by the adapter.
- * E is the type of the expression to be converted by the converter.
  */
-public class ConversionDeclarationAnnotationElementAdapter<T, E extends Expression>
+public class ConversionDeclarationAnnotationElementAdapter<T>
 	implements DeclarationAnnotationElementAdapter<T>
 {
 	/**
 	 * The wrapped adapter that returns and takes AST expressions.
 	 */
-	private final DeclarationAnnotationElementAdapter<E> adapter;
+	private final DeclarationAnnotationElementAdapter<Expression> adapter;
 
 	/**
 	 * The converter that converts AST expressions to other objects
 	 * (e.g. Strings).
 	 */
-	private final ExpressionConverter<T, E> converter;
+	private final ExpressionConverter<T> converter;
 
 
 	// ********** constructors **********
 
 	/**
 	 * The default element name is "value"; the default behavior is to
-	 * remove the annotation when the last element is removed;
-	 * the default expression converter expects string literals.
-	 */
-	public static ConversionDeclarationAnnotationElementAdapter<String, StringLiteral> forStrings(DeclarationAnnotationAdapter annotationAdapter) {
-		return new ConversionDeclarationAnnotationElementAdapter<String, StringLiteral>(annotationAdapter, StringExpressionConverter.instance());
-	}
-
-	/**
-	 * The default element name is "value"; the default behavior is to
 	 * remove the annotation when the last element is removed.
 	 */
-	public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, ExpressionConverter<T, E> converter) {
-		this(new ExpressionDeclarationAnnotationElementAdapter<E>(annotationAdapter), converter);
-	}
-
-	/**
-	 * The default behavior is to remove the annotation when the last
-	 * element is removed; the default expression converter expects
-	 * string literals.
-	 */
-	public static ConversionDeclarationAnnotationElementAdapter<String, StringLiteral> forStrings(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
-		return new ConversionDeclarationAnnotationElementAdapter<String, StringLiteral>(annotationAdapter, elementName, StringExpressionConverter.instance());
+	public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, ExpressionConverter<T> converter) {
+		this(new ExpressionDeclarationAnnotationElementAdapter<Expression>(annotationAdapter), converter);
 	}
 
 	/**
 	 * The default behavior is to remove the annotation when the last
 	 * element is removed.
 	 */
-	public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, ExpressionConverter<T, E> converter) {
-		this(new ExpressionDeclarationAnnotationElementAdapter<E>(annotationAdapter, elementName), converter);
+	public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, ExpressionConverter<T> converter) {
+		this(new ExpressionDeclarationAnnotationElementAdapter<Expression>(annotationAdapter, elementName), converter);
 	}
 
-	/**
-	 * The default expression converter expects string literals.
-	 */
-	public static ConversionDeclarationAnnotationElementAdapter<String, StringLiteral> forStrings(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty) {
-		return new ConversionDeclarationAnnotationElementAdapter<String, StringLiteral>(annotationAdapter, elementName, removeAnnotationWhenEmpty, StringExpressionConverter.instance());
+	public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty, ExpressionConverter<T> converter) {
+		this(new ExpressionDeclarationAnnotationElementAdapter<Expression>(annotationAdapter, elementName, removeAnnotationWhenEmpty), converter);
 	}
 
-	public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty, ExpressionConverter<T, E> converter) {
-		this(new ExpressionDeclarationAnnotationElementAdapter<E>(annotationAdapter, elementName, removeAnnotationWhenEmpty), converter);
-	}
-
-	public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationElementAdapter<E> adapter, ExpressionConverter<T, E> converter) {
+	public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationElementAdapter<Expression> adapter, ExpressionConverter<T> converter) {
 		super();
 		this.adapter = adapter;
 		this.converter = converter;
@@ -96,7 +69,7 @@
 	}
 
 	public void setValue(T value, ModifiedDeclaration declaration) {
-		this.adapter.setValue(this.converter.convert(value, this.adapter.astNode(declaration).getAST()), declaration);
+		this.adapter.setValue(this.converter.convert(value, declaration.getAST()), declaration);
 	}
 
 	public Expression expression(ModifiedDeclaration declaration) {
@@ -112,4 +85,107 @@
 		return StringTools.buildToStringFor(this, this.adapter);
 	}
 
+
+	// ********** factory static methods **********
+
+	/**
+	 * The default element name is "value"; the default behavior is to
+	 * remove the annotation when the last element is removed;
+	 * the default expression converter expects string constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forStrings(DeclarationAnnotationAdapter annotationAdapter) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, StringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default behavior is to remove the annotation when the last
+	 * element is removed; the default expression converter expects
+	 * string constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forStrings(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, StringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default expression converter expects string constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forStrings(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, removeAnnotationWhenEmpty, StringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default element name is "value"; the default behavior is to
+	 * remove the annotation when the last element is removed;
+	 * the default expression converter expects number constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forNumbers(DeclarationAnnotationAdapter annotationAdapter) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, NumberStringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default behavior is to remove the annotation when the last
+	 * element is removed; the default expression converter expects
+	 * number constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forNumbers(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, NumberStringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default expression converter expects number constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forNumbers(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, removeAnnotationWhenEmpty, NumberStringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default element name is "value"; the default behavior is to
+	 * remove the annotation when the last element is removed;
+	 * the default expression converter expects boolean constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forBooleans(DeclarationAnnotationAdapter annotationAdapter) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, BooleanStringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default behavior is to remove the annotation when the last
+	 * element is removed; the default expression converter expects
+	 * boolean constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forBooleans(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, BooleanStringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default expression converter expects boolean constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forBooleans(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, removeAnnotationWhenEmpty, BooleanStringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default element name is "value"; the default behavior is to
+	 * remove the annotation when the last element is removed;
+	 * the default expression converter expects character constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forCharacters(DeclarationAnnotationAdapter annotationAdapter) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, CharacterStringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default behavior is to remove the annotation when the last
+	 * element is removed; the default expression converter expects
+	 * character constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forCharacters(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, CharacterStringExpressionConverter.instance());
+	}
+
+	/**
+	 * The default expression converter expects character constant expressions.
+	 */
+	public static ConversionDeclarationAnnotationElementAdapter<String> forCharacters(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty) {
+		return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, removeAnnotationWhenEmpty, CharacterStringExpressionConverter.instance());
+	}
+
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/DeclarationAnnotationElementAdapter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/DeclarationAnnotationElementAdapter.java
index 3d08445..c8a1be2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/DeclarationAnnotationElementAdapter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/DeclarationAnnotationElementAdapter.java
@@ -21,7 +21,8 @@
 
 	/**
 	 * Given the specified declaration, return the value of the
-	 * annotation element. Return null if the element is not present.
+	 * annotation element. Return null or an empty array
+	 * if the element is not present.
 	 */
 	T getValue(ModifiedDeclaration declaration);
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/DefaultAnnotationEditFormatter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/DefaultAnnotationEditFormatter.java
new file mode 100644
index 0000000..ff2e215
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/DefaultAnnotationEditFormatter.java
@@ -0,0 +1,218 @@
+/*******************************************************************************
+ * 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.core.internal.jdtutility;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.text.edits.InsertEdit;
+import org.eclipse.text.edits.MalformedTreeException;
+import org.eclipse.text.edits.MultiTextEdit;
+import org.eclipse.text.edits.ReplaceEdit;
+import org.eclipse.text.edits.TextEdit;
+
+/**
+ * This implementation will clean up some of the nasty Eclipse annotation
+ * formatting (or lack thereof); e.g. arrays of annotations.
+ */
+public final class DefaultAnnotationEditFormatter
+	implements AnnotationEditFormatter
+{
+	private static DefaultAnnotationEditFormatter INSTANCE = new DefaultAnnotationEditFormatter();
+
+	/**
+	 * Return the singleton.
+	 */
+	public static DefaultAnnotationEditFormatter instance() {
+		return INSTANCE;
+	}
+
+	/**
+	 * Ensure single instance.
+	 */
+	private DefaultAnnotationEditFormatter() {
+		super();
+	}
+
+	/**
+	 * TODO
+	 */
+	public void format(IDocument doc, TextEdit editTree) throws MalformedTreeException, BadLocationException {
+		TextEdit[] edits = editTree.getChildren();
+		int len = edits.length;
+		if (len == 0) {
+			return;
+		}
+
+		MultiTextEdit extraEdits = new MultiTextEdit();
+		for (int i = 0; i < len; i++) {
+			TextEdit edit1 = edits[i];
+			if ( ! (edit1 instanceof InsertEdit)) {
+				continue;  // if the edit is not an insert, skip to the next edit
+			}
+			InsertEdit insert1 = (InsertEdit) edit1;
+			int j = i + 1;
+			if (j < len) {
+				TextEdit edit2 = edits[j];
+				if (edit2 instanceof InsertEdit) {
+					InsertEdit insert2 = (InsertEdit) edit2;
+					String text1 = insert1.getText();
+					String text2 = insert2.getText();
+					int offset1 = insert1.getOffset();
+					int offset2 = insert2.getOffset();
+					if (this.stringIsAnnotation(text1) && text2.equals(" ")) {
+						// an annotation was inserted before something on the same line;
+						// replace the trailing space with a newline and appropriate indent
+						extraEdits.addChild(new ReplaceEdit(offset2, 1, this.buildCR(doc, offset2)));
+						i++;  // jump the index past 'edit2'
+						continue;  // go to the next edit
+					}
+					int comma1Length = this.commaLength(text1);
+					if ((comma1Length != 0) && this.stringIsAnnotation(text2)) {
+						// an annotation was inserted in an array initializer on the
+						// same line as the previous array element;
+						// replace the preceding space with a newline and appropriate indent
+						extraEdits.addChild(new ReplaceEdit(offset1 + comma1Length, text1.length() - comma1Length, this.buildCR(doc, offset1)));
+						i++;  // jump the index past 'edit2'
+						continue;  // go to the next edit
+					}
+				}
+			}
+			this.formatArrayInitializer(doc, insert1, extraEdits);
+		}
+		extraEdits.apply(doc, TextEdit.NONE);
+	}
+
+	/**
+	 * If the insert edit is inserting an annotation containing an array of annotations as
+	 * its value then format them nicely.
+	 */
+	private void formatArrayInitializer(IDocument doc, InsertEdit insertEdit, MultiTextEdit extraEdits) throws BadLocationException {
+		String s = insertEdit.getText();
+		if ( ! this.stringIsAnnotation(s)) {
+			return;
+		}
+		int len = s.length();
+		int pos = 1;  // skip '@'
+		while (pos < len) {
+			char c = s.charAt(pos);
+			pos++;  // bump to just past first '('
+			if (c == '(') {
+				break;
+			}
+		}
+		if (pos == len) {
+			return;  // reached end of string
+		}
+		while (pos < len) {
+			char c = s.charAt(pos);
+			pos++;  // bump to just past first '{'
+			if (c == '{') {
+				break;
+			}
+			if (c != ' ') {
+				return;
+			}
+		}
+		if (pos == len) {
+			return;  // reached end of string
+		}
+		// now look for '@' not inside parentheses and put in 
+		// line delimeter and indent string before each
+		int offset = insertEdit.getOffset();
+		String indent = null;
+		int parenDepth = 0;
+		while (pos < len) {
+			switch (s.charAt(pos)) {
+				case '(' :
+					parenDepth++;
+					break;
+				case ')' :
+					parenDepth--;
+					break;
+				case '@' :
+					if (parenDepth == 0) {
+						if (indent == null) {
+							indent = this.buildCR(doc, offset, "\t");  // TODO use tab preference?
+						}
+						extraEdits.addChild(new InsertEdit(offset + pos, indent));
+					}
+					break;
+				case '}' :
+					if (parenDepth == 0) {
+						extraEdits.addChild(new InsertEdit(offset + pos, this.buildCR(doc, offset)));
+					}
+					break;
+			}
+			pos++;
+		}
+	}
+
+	/**
+	 * Build a string containing a line delimeter and indenting characters 
+	 * matching the indent level of the line containing the character offset
+	 * (i.e. the new line's indent matches the current line).
+	 */
+	private String buildCR(IDocument doc, int offset) throws BadLocationException {
+		return this.buildCR(doc, offset, "");
+	}
+
+	private String buildCR(IDocument doc, int offset, String suffix) throws BadLocationException {
+		int line = doc.getLineOfOffset(offset);
+		StringBuffer sb = new StringBuffer();
+		sb.append(doc.getLineDelimiter(line));  // use same CR as current line
+
+		int o = doc.getLineOffset(line);  // match the whitespace of the current line
+		char c = doc.getChar(o++);
+		while ((c == ' ') || (c == '\t')) {
+			sb.append(c);
+			c = doc.getChar(o++);
+		}
+		sb.append(suffix);
+		return sb.toString();
+	}
+
+	/**
+	 * Return whether the specified string is an annotation.
+	 */
+	private boolean stringIsAnnotation(String string) {
+		return (string.length() > 1) && string.charAt(0) == '@';
+	}
+
+	/**
+	 * If the specified string is a single comma, possibly surrounded by
+	 * spaces, return the length of the substring containing the
+	 * initial spaces and the comma.
+	 */
+	private int commaLength(String string) {
+		boolean comma = false;
+		int len = string.length();
+		int result = 0;
+		for (int i = 0; i < len; i++) {
+			switch (string.charAt(i)) {
+				case ' ' :
+					if ( ! comma) {
+						result++;  // space preceding comma
+					}
+					break;
+				case ',' :
+					if (comma) {
+						return 0;  // second comma!
+					}
+					comma = true;
+					result++;
+					break;
+				default:
+					return 0;  // non-comma, non-space char
+			}
+		}
+		return result;
+	}
+
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumArrayDeclarationAnnotationElementAdapter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumArrayDeclarationAnnotationElementAdapter.java
index 7d153b9b..6330885 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumArrayDeclarationAnnotationElementAdapter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumArrayDeclarationAnnotationElementAdapter.java
@@ -10,10 +10,10 @@
 package org.eclipse.jpt.core.internal.jdtutility;
 
 import java.util.List;
+
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ArrayInitializer;
 import org.eclipse.jdt.core.dom.Expression;
-import org.eclipse.jdt.core.dom.Name;
 
 /**
  * Wrap a declaration annotation element adapter and simply
@@ -25,7 +25,9 @@
 	/**
 	 * The wrapped adapter that returns and takes name strings (enums).
 	 */
-	private final ConversionDeclarationAnnotationElementAdapter<String[], ArrayInitializer> adapter;
+	private final ConversionDeclarationAnnotationElementAdapter<String[]> adapter;
+
+	private static final String[] EMPTY_STRING_ARRAY = new String[0];
 
 
 	// ********** constructors **********
@@ -40,21 +42,28 @@
 
 	/**
 	 * The default behavior is to remove the annotation when the last
-	 * element is removed.
+	 * element is removed and remove the array initializer if it is empty.
 	 */
 	public EnumArrayDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
 		this(annotationAdapter, elementName, true);
 	}
 
+	/**
+	 * The default behavior is to remove the array initializer if it is empty.
+	 */
 	public EnumArrayDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty) {
-		this(new ConversionDeclarationAnnotationElementAdapter<String[], ArrayInitializer>(annotationAdapter, elementName, removeAnnotationWhenEmpty, buildExpressionConverter()));
+		this(annotationAdapter, elementName, removeAnnotationWhenEmpty, true);
 	}
 
-	private static ExpressionConverter<String[], ArrayInitializer> buildExpressionConverter() {
-		return new StringArrayExpressionConverter<Name>(NameStringExpressionConverter.instance());
+	public EnumArrayDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty, boolean removeArrayInitializerWhenEmpty) {
+		this(new ConversionDeclarationAnnotationElementAdapter<String[]>(annotationAdapter, elementName, removeAnnotationWhenEmpty, buildExpressionConverter(removeArrayInitializerWhenEmpty)));
 	}
 
-	protected EnumArrayDeclarationAnnotationElementAdapter(ConversionDeclarationAnnotationElementAdapter<String[], ArrayInitializer> adapter) {
+	private static ExpressionConverter<String[]> buildExpressionConverter(boolean removeArrayInitializerWhenEmpty) {
+		return new AnnotationStringArrayExpressionConverter(NameStringExpressionConverter.instance(), removeArrayInitializerWhenEmpty);
+	}
+
+	protected EnumArrayDeclarationAnnotationElementAdapter(ConversionDeclarationAnnotationElementAdapter<String[]> adapter) {
 		super();
 		this.adapter = adapter;
 	}
@@ -63,6 +72,7 @@
 	// ********** DeclarationAnnotationElementAdapter implementation **********
 
 	public String[] getValue(ModifiedDeclaration declaration) {
+		// ignore the adapter's getValue() - we want the expression
 		return this.resolve(this.adapter.expression(declaration), declaration);
 	}
 
@@ -82,29 +92,49 @@
 	// ********** internal methods **********
 
 	/**
-	 * resolve the enums
+	 * resolve the enums, which can be
+	 *     null
+	 * or
+	 *     {FOO, BAR, BAZ}
+	 * or
+	 *     FOO
 	 */
-	protected String[] resolve(Expression enumsExpression, ModifiedDeclaration declaration) {
-		if (enumsExpression == null) {
-			return null;
+	protected String[] resolve(Expression expression, ModifiedDeclaration declaration) {
+		if (expression == null) {
+			return EMPTY_STRING_ARRAY;
+		} else if (expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) {
+			return this.resolveArray((ArrayInitializer) expression, declaration);
+		} else {
+			return this.resolveSingleElement(expression, declaration);
 		}
-		ArrayInitializer ai = (ArrayInitializer) enumsExpression;
+	}
+
+	protected String[] resolveArray(ArrayInitializer ai, ModifiedDeclaration declaration) {
 		List<Expression> expressions = this.expressions(ai);
 		int len = expressions.size();
 		String[] enums = new String[len];
 		for (int i = len; i-- > 0; ) {
-			enums[i] = JDTTools.resolveEnum(declaration.iCompilationUnit(), expressions.get(i));
+			enums[i] = this.resolveEnum(expressions.get(i));
 		}
 		return enums;
 	}
 
+	protected String[] resolveSingleElement(Expression enumExpression, ModifiedDeclaration declaration) {
+		return new String[] {this.resolveEnum(enumExpression)};
+	}
+
+	protected String resolveEnum(Expression expression) {
+		return JDTTools.resolveEnum(expression);
+	}
+
 	@SuppressWarnings("unchecked")
 	private List<Expression> expressions(ArrayInitializer arrayInitializer) {
 		return arrayInitializer.expressions();
 	}
 
 	/**
-	 * convert the fully-qualified enums to static imports and short names
+	 * convert the fully-qualified enums to static imports and short names;
+	 * NB: the imports are added as a side-effect :-(
 	 */
 	protected String[] convertToShortNames(String[] enums, ModifiedDeclaration declaration) {
 		if (enums == null) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumDeclarationAnnotationElementAdapter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumDeclarationAnnotationElementAdapter.java
index 838860f..eda5853 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumDeclarationAnnotationElementAdapter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/EnumDeclarationAnnotationElementAdapter.java
@@ -11,7 +11,6 @@
 
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.Expression;
-import org.eclipse.jdt.core.dom.Name;
 
 /**
  * Wrap a declaration annotation element adapter and simply
@@ -23,7 +22,7 @@
 	/**
 	 * The wrapped adapter that returns and takes name strings (enums).
 	 */
-	private final ConversionDeclarationAnnotationElementAdapter<String, Name> adapter;
+	private final ConversionDeclarationAnnotationElementAdapter<String> adapter;
 
 
 	// ********** constructors **********
@@ -45,10 +44,10 @@
 	}
 
 	public EnumDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeAnnotationWhenEmpty) {
-		this(new ConversionDeclarationAnnotationElementAdapter<String, Name>(annotationAdapter, elementName, removeAnnotationWhenEmpty, NameStringExpressionConverter.instance()));
+		this(new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, removeAnnotationWhenEmpty, NameStringExpressionConverter.instance()));
 	}
 
-	protected EnumDeclarationAnnotationElementAdapter(ConversionDeclarationAnnotationElementAdapter<String, Name> adapter) {
+	protected EnumDeclarationAnnotationElementAdapter(ConversionDeclarationAnnotationElementAdapter<String> adapter) {
 		super();
 		this.adapter = adapter;
 	}
@@ -57,7 +56,7 @@
 	// ********** DeclarationAnnotationElementAdapter implementation **********
 
 	public String getValue(ModifiedDeclaration declaration) {
-		return this.resolve(this.adapter.expression(declaration), declaration);
+		return this.resolve(this.adapter.expression(declaration));
 	}
 
 	public void setValue(String value, ModifiedDeclaration declaration) {
@@ -78,8 +77,8 @@
 	/**
 	 * resolve the enum
 	 */
-	protected String resolve(Expression enumExpression, ModifiedDeclaration declaration) {
-		return (enumExpression == null) ? null : JDTTools.resolveEnum(declaration.iCompilationUnit(), enumExpression);
+	protected String resolve(Expression expression) {
+		return JDTTools.resolveEnum(expression);
 	}
 
 	/**
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ExpressionConverter.java
index 4bce434..fce8284 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ExpressionConverter.java
@@ -15,10 +15,9 @@
 /**
  * Define the protocol for converting an AST expression back and forth
  * from an arbitrary type (e.g. StringLiteral <=> String).
- * E is the expression type.
  * T is the type of the object to be converted to and from an expression.
  */
-public interface ExpressionConverter<T, E extends Expression> {
+public interface ExpressionConverter<T> {
 
 	/**
 	 * Convert the specified object to an
@@ -26,12 +25,12 @@
 	 * The type of the object is determined by the
 	 * contract specified by the client.
 	 */
-	E convert(T object, AST ast);
+	Expression convert(T object, AST ast);
 
 	/**
 	 * Convert the specified expression to an object of some
 	 * pre-determined type.
 	 */
-	T convert(E expression);
+	T convert(Expression expression);
 
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/FieldAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/FieldAttribute.java
index fe343b4..62f6360 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/FieldAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/FieldAttribute.java
@@ -11,10 +11,11 @@
 
 import java.util.List;
 import org.eclipse.jdt.core.IField;
-import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
+import org.eclipse.jpt.utility.internal.CommandExecutorProvider;
 
 /**
  * Adapt and extend a jdt field.
@@ -23,8 +24,8 @@
  */
 public class FieldAttribute extends Attribute {
 
-	public FieldAttribute(IField field) {
-		super(field);
+	public FieldAttribute(IField field, CommandExecutorProvider modifySharedDocumentCommandExecutorProvider) {
+		super(field, modifySharedDocumentCommandExecutorProvider);
 	}
 
 	@Override
@@ -32,11 +33,6 @@
 		return (IField) super.getJdtMember();
 	}
 
-	@Override
-	public FieldDeclaration bodyDeclaration() {
-		return (FieldDeclaration) super.bodyDeclaration();
-	}
-
 
 	// ********** Member implementation **********
 
@@ -69,15 +65,10 @@
 	}
 
 	@Override
-	public String typeSignature() {
-		try {
-			return this.getJdtMember().getTypeSignature();
-		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
+	public ITypeBinding typeBinding(CompilationUnit astRoot) {
+		return bodyDeclaration(astRoot).getType().resolveBinding();
 	}
 
-
 	// ********** miscellaneous **********
 
 	@SuppressWarnings("unchecked")
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/JDTTools.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/JDTTools.java
index 3491df0..cf1b284 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/JDTTools.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/JDTTools.java
@@ -9,211 +9,109 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.jdtutility;
 
-import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IClassFile;
 import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IImportDeclaration;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.compiler.CategorizedProblem;
 import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
-import org.eclipse.jdt.internal.codeassist.ISelectionRequestor;
-import org.eclipse.jdt.internal.codeassist.SelectionEngine;
-import org.eclipse.jdt.internal.core.DefaultWorkingCopyOwner;
-import org.eclipse.jdt.internal.core.JavaProject;
-import org.eclipse.jdt.internal.core.SearchableEnvironment;
+import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IVariableBinding;
+import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jpt.core.internal.JptCorePlugin;
 
 public class JDTTools {
 
+	// TODO get rid of the "lightweight" methods after reworking how
+	// ValidationMessages determine line numbers
 	/**
-	 * add a "normal" import, as opposed to a "static" import
+	 * Build an AST for the specified member's compilation unit or
+	 * (source-attached) class file. Build the AST without its bindings
+	 * resolved.
 	 */
-	public static IImportDeclaration addImport(ICompilationUnit compilationUnit, String importElement) {
-		return addImport(compilationUnit, importElement, Flags.AccDefault);
+	public static CompilationUnit buildLightweightASTRoot(IMember member) {
+		return buildASTRoot(member, false);
 	}
 
 	/**
-	 * this doesn't work yet... see eclipse bugzilla 143684
+	 * Build an AST for the specified member's compilation unit or
+	 * (source-attached) class file. Build the AST with its bindings
+	 * resolved (and the resultant performance hit).
 	 */
-	public static IImportDeclaration addStaticImport(ICompilationUnit compilationUnit, String importElement) {
-		return addImport(compilationUnit, importElement, Flags.AccStatic);
-	}
-
-	public static IImportDeclaration addImport(ICompilationUnit compilationUnit, String importElement, int flags) {
-		try {
-			return compilationUnit.createImport(importElement, null, flags, null);  // null = place at end of import list; null = no progress monitor
-		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
+	public static CompilationUnit buildASTRoot(IMember member) {
+		return buildASTRoot(member, true);
 	}
 
 	/**
-	 * Build an AST for the specified member's compilation unit or class file.
+	 * Build an AST for the specified member's compilation unit or
+	 * (source-attached) class file.
 	 */
-	public static CompilationUnit createASTRoot(IMember member) {
+	private static CompilationUnit buildASTRoot(IMember member, boolean resolveBindings) {
 		return (member.isBinary()) ?
-			createASTRoot(member.getClassFile())  // the class file must have a source attachment
+			buildASTRoot(member.getClassFile(), resolveBindings)  // the class file must have a source attachment
 		:
-			createASTRoot(member.getCompilationUnit());
+			buildASTRoot(member.getCompilationUnit(), resolveBindings);
 	}
 	
-	public static CompilationUnit createASTRoot(IClassFile classFile) {
+	public static CompilationUnit buildASTRoot(IClassFile classFile) {
+		return buildASTRoot(classFile, true);
+	}
+	
+	private static CompilationUnit buildASTRoot(IClassFile classFile, boolean resolveBindings) {
 		ASTParser parser = ASTParser.newParser(AST.JLS3);
 		parser.setSource(classFile);
+		parser.setResolveBindings(resolveBindings);
 		return (CompilationUnit) parser.createAST(null);
-		
 	}
 	
-	public static CompilationUnit createASTRoot(ICompilationUnit compilationUnit) {
+	public static CompilationUnit buildASTRoot(ICompilationUnit compilationUnit) {
+		return buildASTRoot(compilationUnit, true);
+	}
+	
+	private static CompilationUnit buildASTRoot(ICompilationUnit compilationUnit, boolean resolveBindings) {
 		ASTParser parser = ASTParser.newParser(AST.JLS3);
 		parser.setSource(compilationUnit);
+		parser.setResolveBindings(resolveBindings);
 		return (CompilationUnit) parser.createAST(null);
 	}
 	
 	public static IType findType(String packageName, String qualifiedTypeName, IJavaProject javaProject) {
 		try {
-			if (javaProject != null) {
-				return javaProject.findType(packageName, qualifiedTypeName.replace('$', '.'));
-			}
-		} 
-		catch (JavaModelException jme) {
-			JptCorePlugin.log(jme);
-		}
-		return null;
-	}
-
-	/**
-	 * Resolve the specified signature in the scope of the specified jdt type.
-	 * Return the fully-qualified type name or return null if it cannot be
-	 * resolved unambiguously.
-	 */
-	public static String resolveSignature(String signature, IType type) {
-		String elementSignature = Signature.getElementType(signature);
-		if (signatureIsPrimitive(elementSignature)) {
-			return Signature.toString(signature);  // no need to resolve primitives
-		}
-		String elementTypeName = Signature.toString(elementSignature);
-		elementTypeName = resolve(elementTypeName, type);
-		if (elementTypeName == null) {
-			return null;  // unable to resolve type
-		}
-		int arrayCount = Signature.getArrayCount(signature);
-		if (arrayCount == 0) {
-			return elementTypeName;
-		}
-		StringBuffer sb = new StringBuffer(elementTypeName.length() + 2*arrayCount);
-		sb.append(elementTypeName);
-		for (int i = arrayCount; i-- > 0; ) {
-			sb.append('[').append(']');
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * Resolve the specified type name in the scope of the specified jdt type.
-	 * Return the fully-qualified type name or return null if it cannot be
-	 * resolved unambiguously.
-	 */
-	public static String resolve(String typeName, IType type) {
-		try {
-			return resolve_(typeName, type);
+			return javaProject.findType(packageName, qualifiedTypeName.replace('$', '.'));
 		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private static String resolve_(String typeName, IType type) throws JavaModelException {
-		String[][] resolvedTypes = type.resolveType(typeName);
-		// if more than one resolved type is returned, the type name is ambiguous
-		if (resolvedTypes == null) {
+			JptCorePlugin.log(ex);
 			return null;
 		}
-		if (resolvedTypes.length > 1) {
+	}
+
+	public static String resolveEnum(Expression expression) {
+		if (expression == null) {
 			return null;
 		}
-		if (resolvedTypes[0][0].length() == 0) {
-			//handle Default package case - bug #193618
-			return resolvedTypes[0][1];
-		}
-		return resolvedTypes[0][0] + "." + resolvedTypes[0][1];
-	}
-
-	public static boolean signatureIsPrimitive(String signature) {
-		return Signature.getTypeSignatureKind(signature) == Signature.BASE_TYPE_SIGNATURE;
-	}
-
-	public static String resolveEnum(ICompilationUnit sourceUnit, Expression enumExpression) {
-		return resolveEnum(sourceUnit, enumExpression.getStartPosition(), enumExpression.getStartPosition() + enumExpression.getLength() - 1);
-	}
-
-	public static String resolveEnum(ICompilationUnit sourceUnit, int enumSourceStart, int enumSourceEnd) {
-		try {
-			return resolveEnum_(sourceUnit, enumSourceStart, enumSourceEnd);
-		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
+		switch (expression.getNodeType()) {
+			case ASTNode.QUALIFIED_NAME:
+			case ASTNode.SIMPLE_NAME:
+				return resolveEnum((Name) expression);
+			default:
+				return null;
 		}
 	}
 
-	private static String resolveEnum_(ICompilationUnit sourceUnit, int enumSourceStart, int enumSourceEnd) throws JavaModelException {
-		String[][] resolvedEnums = resolveField_((org.eclipse.jdt.internal.core.CompilationUnit) sourceUnit, enumSourceStart, enumSourceEnd);
-		// if more than one resolved enum is returned, the enum name is ambiguous
-		if (resolvedEnums == null) {
+	public static String resolveEnum(Name enumExpression) {
+		IBinding binding = enumExpression.resolveBinding();
+		if (binding == null) {
+			return null;  // TODO figure why this is null sometimes
+		}
+		if (binding.getKind() != IBinding.VARIABLE) {
 			return null;
 		}
-		if (resolvedEnums.length > 1) {
-			return null;
-		}
-		return resolvedEnums[0][0] + "." + resolvedEnums[0][1] + "." + resolvedEnums[0][2];
+		IVariableBinding variableBinding = (IVariableBinding) binding;
+		return variableBinding.getType().getQualifiedName() + "." + variableBinding.getName();
 	}
 
-	// code lifted from SourceType.resolveType(String, WorkingCopyOwner)
-	private static String[][] resolveField_(org.eclipse.jdt.internal.core.CompilationUnit sourceUnit, int selectionSourceStart, int selectionSourceEnd) throws JavaModelException {
-		class TypeResolveRequestor implements ISelectionRequestor {
-			String[][] answers = null;
-			public void acceptType(char[] packageName, char[] tName, int modifiers, boolean isDeclaration, char[] uniqueKey, int start, int end) {
-				// ignore
-			}
-			public void acceptError(CategorizedProblem error) {
-				// ignore
-			}
-			public void acceptField(char[] declaringTypePackageName, char[] declaringTypeName, char[] fieldName, boolean isDeclaration, char[] uniqueKey, int start, int end) {
-				String[] answer = new String[]  {new String(declaringTypePackageName), new String(declaringTypeName), new String(fieldName) };
-				if (this.answers == null) {
-					this.answers = new String[][]{ answer };
-				} else {
-					int len = this.answers.length;
-					System.arraycopy(this.answers, 0, this.answers = new String[len+1][], 0, len);
-					this.answers[len] = answer;
-				}
-			}
-			public void acceptMethod(char[] declaringTypePackageName, char[] declaringTypeName, String enclosingDeclaringTypeSignature, char[] selector, char[][] parameterPackageNames, char[][] parameterTypeNames, String[] parameterSignatures, char[][] typeParameterNames, char[][][] typeParameterBoundNames, boolean isConstructor, boolean isDeclaration, char[] uniqueKey, int start, int end) {
-				// ignore
-			}
-			public void acceptPackage(char[] packageName){
-				// ignore
-			}
-			public void acceptTypeParameter(char[] declaringTypePackageName, char[] declaringTypeName, char[] typeParameterName, boolean isDeclaration, int start, int end) {
-				// ignore
-			}
-			public void acceptMethodTypeParameter(char[] declaringTypePackageName, char[] declaringTypeName, char[] selector, int selectorStart, int selcetorEnd, char[] typeParameterName, boolean isDeclaration, int start, int end) {
-				// ignore
-			}
-	
-		}
-		TypeResolveRequestor requestor = new TypeResolveRequestor();
-		JavaProject project = (JavaProject) sourceUnit.getJavaProject();
-		SearchableEnvironment environment = project.newSearchableNameEnvironment(DefaultWorkingCopyOwner.PRIMARY);
-	
-		SelectionEngine engine = new SelectionEngine(environment, requestor, project.getOptions(true));
-			
-		engine.select(sourceUnit, selectionSourceStart, selectionSourceEnd);
-		return requestor.answers;
-	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Member.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Member.java
index e76927b..fca7ebd 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Member.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Member.java
@@ -11,6 +11,7 @@
 
 import org.eclipse.core.filebuffers.FileBuffers;
 import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.LocationKind;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.ISourceRange;
@@ -27,7 +28,11 @@
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.SimpleTextRange;
+import org.eclipse.jpt.utility.internal.Command;
+import org.eclipse.jpt.utility.internal.CommandExecutor;
+import org.eclipse.jpt.utility.internal.CommandExecutorProvider;
 import org.eclipse.jpt.utility.internal.StringTools;
+import org.eclipse.text.edits.MalformedTreeException;
 import org.eclipse.text.edits.TextEdit;
 
 /**
@@ -40,14 +45,17 @@
 	/** this will be null for a top-level type */
 	private final Type declaringType;
 
+	private final CommandExecutorProvider modifySharedDocumentCommandExecutorProvider;
+
 
 	// ********** constructor **********
 
-	Member(IMember jdtMember) {
+	Member(IMember jdtMember, CommandExecutorProvider modifySharedDocumentCommandExecutorProvider) {
 		super();
 		this.jdtMember = jdtMember;
 		IType jdtDeclaringType = jdtMember.getDeclaringType();
-		this.declaringType = (jdtDeclaringType == null) ? null : new Type(jdtDeclaringType);
+		this.declaringType = (jdtDeclaringType == null) ? null : new Type(jdtDeclaringType, modifySharedDocumentCommandExecutorProvider);
+		this.modifySharedDocumentCommandExecutorProvider = modifySharedDocumentCommandExecutorProvider;
 	}
 
 
@@ -88,7 +96,14 @@
 	 * note: this creates a *new* AST
 	 */
 	public CompilationUnit astRoot() {
-		return JDTTools.createASTRoot(this.jdtMember);
+		return JDTTools.buildASTRoot(this.jdtMember);
+	}
+
+	/**
+	 * note: this creates a *new* AST
+	 */
+	private CompilationUnit lightweightASTRoot() {
+		return JDTTools.buildLightweightASTRoot(this.jdtMember);
 	}
 
 	public ModifiedDeclaration modifiedDeclaration() {
@@ -99,12 +114,8 @@
 		return new ModifiedDeclaration(this.bodyDeclaration(astRoot));
 	}
 
-	public BodyDeclaration bodyDeclaration() {
-		return this.bodyDeclaration(this.astRoot());
-	}
-
 	public ITextRange textRange() {
-		return this.textRange(this.astRoot());
+		return this.textRange(this.lightweightASTRoot());
 	}
 
 	public ITextRange textRange(CompilationUnit astRoot) {
@@ -116,23 +127,23 @@
 	}
 
 	public ITextRange nameTextRange() {
-		return this.nameTextRange(this.astRoot());
+		return this.nameTextRange(this.lightweightASTRoot());
 	}
 	
 	public ITextRange nameTextRange(CompilationUnit astRoot) {
 		ISourceRange sourceRange = this.nameSourceRange();
-		return 
+		return
 			new SimpleTextRange(
 				sourceRange.getOffset(), 
 				sourceRange.getLength(),
-				astRoot.getLineNumber(sourceRange.getOffset()));
+				astRoot.getLineNumber(sourceRange.getOffset())
+			);
 	}
 	
 	private ISourceRange nameSourceRange() {
 		try {
-			return getJdtMember().getNameRange();
-		}
-		catch (JavaModelException ex) {
+			return this.jdtMember.getNameRange();
+		} catch (JavaModelException ex) {
 			throw new RuntimeException(ex);
 		}
 	}
@@ -374,12 +385,12 @@
 			compilationUnit.becomeWorkingCopy(null);
 		}
 
-		ITextFileBuffer buffer = FileBuffers.getTextFileBufferManager().getTextFileBuffer(compilationUnit.getResource().getFullPath());
-		boolean textEditorPresent = (buffer != null);
-		IDocument doc = textEditorPresent ?
-			buffer.getDocument()
-		:
-			new Document(compilationUnit.getBuffer().getContents());
+		ITextFileBuffer buffer = FileBuffers.getTextFileBufferManager().getTextFileBuffer(compilationUnit.getResource().getFullPath(), LocationKind.NORMALIZE);
+		boolean sharedDocument = (buffer != null);  // documents are typically shared when they are already open in an editor
+		IDocument doc = sharedDocument ?
+				buffer.getDocument()
+			:
+				new Document(compilationUnit.getBuffer().getContents());
 
 		CompilationUnit astRoot = this.astRoot();
 		astRoot.recordModifications();
@@ -387,16 +398,36 @@
 		editor.edit(this.modifiedDeclaration(astRoot));
 
 		TextEdit edits = astRoot.rewrite(doc, compilationUnit.getJavaProject().getOptions(true));
-		AnnotationEditFormatter formatter = new AnnotationEditFormatter(doc);
-		formatter.apply(edits);
+		if (sharedDocument) {
+			this.modifySharedDocumentCommandExecutor().execute(new ModifySharedDocumentCommand(edits, doc));
+		} else {
+			this.applyEdits(edits, doc);
+		}
 
-		if ( ! textEditorPresent) {
+		if ( ! sharedDocument) {
 			compilationUnit.getBuffer().setContents(doc.get());
-			compilationUnit.commitWorkingCopy(true, null);
+			compilationUnit.commitWorkingCopy(true, null);  // true="force"
 			compilationUnit.discardWorkingCopy();
 		}
 	}
 
+	/**
+	 * apply the specified edits to the specified document,
+	 * reformatting the document if necessary
+	 */
+	void applyEdits(TextEdit edits, IDocument doc) throws MalformedTreeException, BadLocationException {
+		edits.apply(doc, TextEdit.UPDATE_REGIONS);
+		this.annotationEditFormatter().format(doc, edits);
+	}
+
+	private AnnotationEditFormatter annotationEditFormatter() {
+		return DefaultAnnotationEditFormatter.instance();
+	}
+
+	private CommandExecutor modifySharedDocumentCommandExecutor() {
+		return this.modifySharedDocumentCommandExecutorProvider.commandExecutor();
+	}
+
 
 	// ********** "editor" interface **********
 
@@ -413,4 +444,33 @@
 
 	}
 
+
+	// ********** modify shared document command class **********
+
+	/**
+	 * simple command that calls back to the member to apply the edits
+	 * in the same way as if the document were not shared
+	 */
+	class ModifySharedDocumentCommand implements Command {
+		private final TextEdit edits;
+		private final IDocument doc;
+
+		ModifySharedDocumentCommand(TextEdit edits, IDocument doc) {
+			super();
+			this.edits = edits;
+			this.doc = doc;
+		}
+
+		public void execute() {
+			try {
+				Member.this.applyEdits(this.edits, this.doc);
+			} catch (MalformedTreeException ex) {
+				throw new RuntimeException(ex);
+			} catch (BadLocationException ex) {
+				throw new RuntimeException(ex);
+			}
+		}
+
+	}
+
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/MethodAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/MethodAttribute.java
index b329798..f636ad6 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/MethodAttribute.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/MethodAttribute.java
@@ -11,9 +11,11 @@
 
 import java.beans.Introspector;
 import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.IMethodBinding;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jpt.utility.internal.CommandExecutorProvider;
 
 /**
  * Adapt and extend a jdt method.
@@ -30,8 +32,8 @@
  */
 public class MethodAttribute extends Attribute {
 
-	public MethodAttribute(IMethod getMethod) {
-		super(getMethod);
+	public MethodAttribute(IMethod getMethod, CommandExecutorProvider modifySharedDocumentCommandExecutorProvider) {
+		super(getMethod, modifySharedDocumentCommandExecutorProvider);
 	}
 
 	@Override
@@ -39,11 +41,6 @@
 		return (IMethod) super.getJdtMember();
 	}
 
-	@Override
-	public MethodDeclaration bodyDeclaration() {
-		return (MethodDeclaration) super.bodyDeclaration();
-	}
-
 
 	// ********** Member implementation **********
 
@@ -81,14 +78,13 @@
 		}
 		return Introspector.decapitalize(methodName.substring(beginIndex));
 	}
-
+	
 	@Override
-	public String typeSignature() {
-		try {
-			return this.getJdtMember().getReturnType();
-		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
+	public ITypeBinding typeBinding(CompilationUnit astRoot) {
+		IMethodBinding methodBinding = bodyDeclaration(astRoot).resolveBinding();
+		if (methodBinding != null) {
+			return methodBinding.getReturnType();
 		}
+		return null;
 	}
-
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ModifiedDeclaration.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ModifiedDeclaration.java
index 18c8520..9af69a2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ModifiedDeclaration.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ModifiedDeclaration.java
@@ -20,6 +20,7 @@
 import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.IExtendedModifier;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.ImportDeclaration;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
@@ -71,7 +72,7 @@
 	 * Return the "declaration" AST node.
 	 */
 	public ASTNode getDeclaration() {
-		return this.adapter.getDeclaration();
+		return this.adapter.declaration();
 	}
 
 	/**
@@ -277,19 +278,30 @@
 	}
 
 	private String qualifiedName(Annotation annotation) {
-		String name = annotation.getTypeName().getFullyQualifiedName();
-		if (name.indexOf('.') != -1) {
-			return name;  // name is already qualified
-		}
-		String resolvedName = JDTTools.resolve(name, this.type());
-		if (resolvedName != null) {
-			return resolvedName;
+		ITypeBinding typeBinding = annotation.resolveTypeBinding();
+		if (typeBinding != null) {
+			String resolvedName = typeBinding.getQualifiedName();
+			if (resolvedName != null) {
+				return resolvedName;
+			}
 		}
 		// hack(?): check for a matching import because when moving a stand-alone
 		// annotation to its container in CombinationIndexedDeclarationAnnotationAdapter
 		// the container's import is added but then it won't "resolve" upon
 		// subsequent lookups... :-(
-		return this.importFor(name);  // look for a matching import
+		return this.importFor(annotation.getTypeName().getFullyQualifiedName());  // look for a matching import
+
+		// OLD METHOD SOURCE:
+//		String name = annotation.getTypeName().getFullyQualifiedName();
+//		if (name.indexOf('.') != -1) {
+//			return name;  // name is already qualified
+//		}
+//		String resolvedName = JDTTools.resolve(name, this.type());
+//		// hack(?): check for a matching import because when moving a stand-alone
+//		// annotation to its container in CombinationIndexedDeclarationAnnotationAdapter
+//		// the container's import is added but then it won't "resolve" upon
+//		// subsequent lookups... :-(
+//		return this.importFor(name);  // look for a matching import
 	}
 
 	/**
@@ -353,7 +365,7 @@
 		/**
 		 * Return the adapted "declaration".
 		 */
-		ASTNode getDeclaration();
+		ASTNode declaration();
 
 		/**
 		 * Return the "declaration"'s list of modifiers.
@@ -369,7 +381,7 @@
 			super();
 			this.declaration = declaration;
 		}
-		public ASTNode getDeclaration() {
+		public ASTNode declaration() {
 			return this.declaration;
 		}
 		@SuppressWarnings("unchecked")
@@ -388,7 +400,7 @@
 			super();
 			this.declaration = declaration;
 		}
-		public ASTNode getDeclaration() {
+		public ASTNode declaration() {
 			return this.declaration;
 		}
 		@SuppressWarnings("unchecked")
@@ -407,7 +419,7 @@
 			super();
 			this.declaration = declaration;
 		}
-		public ASTNode getDeclaration() {
+		public ASTNode declaration() {
 			return this.declaration;
 		}
 		@SuppressWarnings("unchecked")
@@ -426,7 +438,7 @@
 			super();
 			this.declaration = declaration;
 		}
-		public ASTNode getDeclaration() {
+		public ASTNode declaration() {
 			return this.declaration;
 		}
 		@SuppressWarnings("unchecked")
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NameStringExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NameStringExpressionConverter.java
index 078835e..0aaa703 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NameStringExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NameStringExpressionConverter.java
@@ -11,6 +11,7 @@
 
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.Name;
 
 /**
@@ -18,14 +19,14 @@
  * (e.g. "com.xxx.Foo.VALUE1" or "value").
  */
 public final class NameStringExpressionConverter
-	extends AbstractExpressionConverter<String, Name>
+	extends AbstractExpressionConverter<String>
 {
-	private static ExpressionConverter<String, Name> INSTANCE;
+	private static ExpressionConverter<String> INSTANCE;
 
 	/**
 	 * Return the singleton.
 	 */
-	public static ExpressionConverter<String, Name> instance() {
+	public static ExpressionConverter<String> instance() {
 		if (INSTANCE == null) {
 			INSTANCE = new NameStringExpressionConverter();
 		}
@@ -40,16 +41,16 @@
 	}
 
 	@Override
-	protected Name convert_(String string, AST ast) {
+	protected Name convertObject(String string, AST ast) {
 		return ast.newName(string);
 	}
 
 	@Override
-	protected String convert_(Name name) {
-		switch (name.getNodeType()) {
+	protected String convertExpression(Expression expression) {
+		switch (expression.getNodeType()) {
 			case ASTNode.QUALIFIED_NAME:
 			case ASTNode.SIMPLE_NAME:
-				return name.getFullyQualifiedName();
+				return ((Name) expression).getFullyQualifiedName();
 			default:
 				return null;
 		}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NullAnnotationEditFormatter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NullAnnotationEditFormatter.java
new file mode 100644
index 0000000..06e831e
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NullAnnotationEditFormatter.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * 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.core.internal.jdtutility;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.text.edits.MalformedTreeException;
+import org.eclipse.text.edits.TextEdit;
+
+public final class NullAnnotationEditFormatter
+	implements AnnotationEditFormatter
+{
+
+	private static NullAnnotationEditFormatter INSTANCE = new NullAnnotationEditFormatter();
+
+	/**
+	 * Return the singleton.
+	 */
+	public static AnnotationEditFormatter instance() {
+		return INSTANCE;
+	}
+
+	/**
+	 * Ensure single instance.
+	 */
+	private NullAnnotationEditFormatter() {
+		super();
+	}
+
+	public void format(IDocument doc, TextEdit editTree) throws MalformedTreeException, BadLocationException {
+		// no formatting
+	}
+
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NullExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NullExpressionConverter.java
index e58f3af..b45c0ce 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NullExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NullExpressionConverter.java
@@ -17,16 +17,16 @@
  * No conversion.
  */
 public final class NullExpressionConverter
-	implements ExpressionConverter<Expression, Expression>
+	implements ExpressionConverter<Expression>
 {
 
 	// singleton
-	private static ExpressionConverter<Expression, Expression> INSTANCE = new NullExpressionConverter();
+	private static ExpressionConverter<Expression> INSTANCE = new NullExpressionConverter();
 
 	/**
 	 * Return the singleton.
 	 */
-	public static ExpressionConverter<Expression, Expression> instance() {
+	public static ExpressionConverter<Expression> instance() {
 		if (INSTANCE == null) {
 			INSTANCE = new NullExpressionConverter();
 		}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NumberStringExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NumberStringExpressionConverter.java
index 0b312fb..ead2da9 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NumberStringExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/NumberStringExpressionConverter.java
@@ -10,7 +10,7 @@
 package org.eclipse.jpt.core.internal.jdtutility;
 
 import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.NumberLiteral;
 
 /**
@@ -18,14 +18,14 @@
  * (e.g. "48").
  */
 public final class NumberStringExpressionConverter
-	extends AbstractExpressionConverter<String, NumberLiteral>
+	extends AbstractExpressionConverter<String>
 {
-	private static ExpressionConverter<String, NumberLiteral> INSTANCE;
+	private static ExpressionConverter<String> INSTANCE;
 
 	/**
 	 * Return the singleton.
 	 */
-	public static ExpressionConverter<String, NumberLiteral> instance() {
+	public static ExpressionConverter<String> instance() {
 		if (INSTANCE == null) {
 			INSTANCE = new NumberStringExpressionConverter();
 		}
@@ -40,16 +40,14 @@
 	}
 	
 	@Override
-	protected NumberLiteral convert_(String string, AST ast) {
+	protected NumberLiteral convertObject(String string, AST ast) {
 		return ast.newNumberLiteral(string);
 	}
 
 	@Override
-	protected String convert_(NumberLiteral numberLiteral) {
-		return (numberLiteral.getNodeType() == ASTNode.NUMBER_LITERAL) ?
-			numberLiteral.getToken()
-		:
-			null;
+	protected String convertExpression(Expression expression) {
+		Object value = expression.resolveConstantExpressionValue();
+		return (value instanceof Number) ? ((Number) value).toString() : null;
 	}
 
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/PrimitiveTypeStringExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/PrimitiveTypeStringExpressionConverter.java
index 49f6d99..910d735 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/PrimitiveTypeStringExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/PrimitiveTypeStringExpressionConverter.java
@@ -11,6 +11,7 @@
 
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.PrimitiveType;
 import org.eclipse.jdt.core.dom.TypeLiteral;
 
@@ -19,14 +20,14 @@
  * (e.g. "int").
  */
 public final class PrimitiveTypeStringExpressionConverter
-	extends AbstractExpressionConverter<String, TypeLiteral>
+	extends AbstractExpressionConverter<String>
 {
-	private static ExpressionConverter<String, TypeLiteral> INSTANCE;
+	private static ExpressionConverter<String> INSTANCE;
 
 	/**
 	 * Return the singleton.
 	 */
-	public static ExpressionConverter<String, TypeLiteral> instance() {
+	public static ExpressionConverter<String> instance() {
 		if (INSTANCE == null) {
 			INSTANCE = new PrimitiveTypeStringExpressionConverter();
 		}
@@ -41,7 +42,7 @@
 	}
 
 	@Override
-	protected TypeLiteral convert_(String string, AST ast) {
+	protected TypeLiteral convertObject(String string, AST ast) {
 		org.eclipse.jdt.core.dom.Type type = ast.newPrimitiveType(PrimitiveType.toCode(string));
 		TypeLiteral typeLiteral = ast.newTypeLiteral();
 		typeLiteral.setType(type);
@@ -49,9 +50,9 @@
 	}
 
 	@Override
-	protected String convert_(TypeLiteral typeLiteral) {
-		if (typeLiteral.getNodeType() == ASTNode.TYPE_LITERAL) {
-			org.eclipse.jdt.core.dom.Type type = typeLiteral.getType();
+	protected String convertExpression(Expression expression) {
+		if (expression.getNodeType() == ASTNode.TYPE_LITERAL) {
+			org.eclipse.jdt.core.dom.Type type = ((TypeLiteral) expression).getType();
 			if (type.getNodeType() == ASTNode.PRIMITIVE_TYPE) {
 				return ((PrimitiveType) type).getPrimitiveTypeCode().toString();
 			}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/SimpleTypeStringExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/SimpleTypeStringExpressionConverter.java
index 43566cb..e596a33 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/SimpleTypeStringExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/SimpleTypeStringExpressionConverter.java
@@ -11,6 +11,7 @@
 
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.SimpleType;
 import org.eclipse.jdt.core.dom.TypeLiteral;
@@ -20,14 +21,14 @@
  * (e.g. "java.lang.Object").
  */
 public final class SimpleTypeStringExpressionConverter
-	extends AbstractExpressionConverter<String, TypeLiteral>
+	extends AbstractExpressionConverter<String>
 {
-	private static ExpressionConverter<String, TypeLiteral> INSTANCE;
+	private static ExpressionConverter<String> INSTANCE;
 
 	/**
 	 * Return the singleton.
 	 */
-	public static ExpressionConverter<String, TypeLiteral> instance() {
+	public static ExpressionConverter<String> instance() {
 		if (INSTANCE == null) {
 			INSTANCE = new SimpleTypeStringExpressionConverter();
 		}
@@ -42,7 +43,7 @@
 	}
 
 	@Override
-	protected TypeLiteral convert_(String string, AST ast) {
+	protected TypeLiteral convertObject(String string, AST ast) {
 		Name name = ast.newName(string);
 		org.eclipse.jdt.core.dom.Type type = ast.newSimpleType(name);
 		TypeLiteral typeLiteral = ast.newTypeLiteral();
@@ -51,9 +52,9 @@
 	}
 
 	@Override
-	protected String convert_(TypeLiteral typeLiteral) {
-		if (typeLiteral.getNodeType() == ASTNode.TYPE_LITERAL) {
-			org.eclipse.jdt.core.dom.Type type = typeLiteral.getType();
+	protected String convertExpression(Expression expression) {
+		if (expression.getNodeType() == ASTNode.TYPE_LITERAL) {
+			org.eclipse.jdt.core.dom.Type type = ((TypeLiteral) expression).getType();
 			if (type.getNodeType() == ASTNode.SIMPLE_TYPE) {
 				return ((SimpleType) type).getName().getFullyQualifiedName();
 			}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/StringArrayExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/StringArrayExpressionConverter.java
index 08f9fe1..31d61ab 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/StringArrayExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/StringArrayExpressionConverter.java
@@ -10,27 +10,55 @@
 package org.eclipse.jpt.core.internal.jdtutility;
 
 import java.util.List;
+
 import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ArrayInitializer;
 import org.eclipse.jdt.core.dom.Expression;
-import org.eclipse.jdt.core.dom.StringLiteral;
 
 /**
  * Convert an array initializer to/from an array of strings (e.g. {"text0", "text1"}).
- * E is the type of the expressions to be found in the array initializer.
+ * 
+ * Do NOT use this class for converting array initializers in annotation elements.
+ * Java5 has a bit of syntactic sugar that allows a single-element array
+ * initializer to not have curly braces. This converter will return null if it encounters
+ * anything other than an array initializer.
+ * 
+ * Invalid entries in the array initializer will result in null elements in the
+ * resulting string array. This allows clients to manipulate elements at
+ * the appropriate index.
  */
-public class StringArrayExpressionConverter<E extends Expression>
-	extends AbstractExpressionConverter<String[], ArrayInitializer>
+public class StringArrayExpressionConverter
+	extends AbstractExpressionConverter<String[]>
 {
-	private final ExpressionConverter<String, E> elementConverter;
+	private final ExpressionConverter<String> elementConverter;
+	private final boolean removeArrayInitializerWhenEmpty;
 
-	public StringArrayExpressionConverter(ExpressionConverter<String, E> elementConverter) {
+	private static final String[] EMPTY_STRING_ARRAY = new String[0];
+
+
+	/**
+	 * The default behavior is to remove the array initializer if it is empty.
+	 */
+	public StringArrayExpressionConverter(ExpressionConverter<String> elementConverter) {
+		this(elementConverter, true);
+	}
+
+	public StringArrayExpressionConverter(ExpressionConverter<String> elementConverter, boolean removeArrayInitializerWhenEmpty) {
 		super();
 		this.elementConverter = elementConverter;
+		this.removeArrayInitializerWhenEmpty = removeArrayInitializerWhenEmpty;
 	}
 
 	@Override
-	protected ArrayInitializer convert_(String[] strings, AST ast) {
+	/*
+	 * this method is 'public' so it can be called by
+	 * AnnotationStringArrayExpressionConverter
+	 */
+	public ArrayInitializer convertObject(String[] strings, AST ast) {
+		if ((strings.length == 0) && this.removeArrayInitializerWhenEmpty) {
+			return null;
+		}
 		ArrayInitializer arrayInitializer = ast.newArrayInitializer();
 		List<Expression> expressions = this.expressions(arrayInitializer);
 		for (String string : strings) {
@@ -44,9 +72,29 @@
 		return arrayInitializer.expressions();
 	}
 
+	/*
+	 * this method is 'public' so it can be called by
+	 * AnnotationStringArrayExpressionConverter
+	 */
 	@Override
-	protected String[] convert_(ArrayInitializer arrayInitializer) {
-		List<E> expressions = this.downcastExpressions(arrayInitializer);
+	public String[] convertNull() {
+		return EMPTY_STRING_ARRAY;
+	}
+
+	@Override
+	protected String[] convertExpression(Expression expression) {
+		return (expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) ?
+				this.convertArrayInitializer((ArrayInitializer) expression)
+			:
+				EMPTY_STRING_ARRAY;
+	}
+
+	/*
+	 * this method is 'public' so it can be called by
+	 * AnnotationStringArrayExpressionConverter
+	 */
+	public String[] convertArrayInitializer(ArrayInitializer arrayInitializer) {
+		List<Expression> expressions = this.downcastExpressions(arrayInitializer);
 		int len = expressions.size();
 		String[] strings = new String[len];
 		for (int i = len; i-- > 0; ) {
@@ -56,16 +104,8 @@
 	}
 
 	@SuppressWarnings("unchecked")
-	private List<E> downcastExpressions(ArrayInitializer arrayInitializer) {
+	private List<Expression> downcastExpressions(ArrayInitializer arrayInitializer) {
 		return arrayInitializer.expressions();
 	}
 
-	/**
-	 * Build an expression converter for an annotation element of type String[].
-	 *     @Foo(bar={"text0", "text1"})
-	 */
-	public static StringArrayExpressionConverter<StringLiteral> forStringLiterals() {
-		return new StringArrayExpressionConverter<StringLiteral>(StringExpressionConverter.instance());
-	}
-
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/StringExpressionConverter.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/StringExpressionConverter.java
index 444650f..9560ca2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/StringExpressionConverter.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/StringExpressionConverter.java
@@ -10,21 +10,21 @@
 package org.eclipse.jpt.core.internal.jdtutility;
 
 import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.StringLiteral;
 
 /**
  * Convert a string literal to/from a string (e.g. "text").
  */
 public final class StringExpressionConverter
-	extends AbstractExpressionConverter<String, StringLiteral>
+	extends AbstractExpressionConverter<String>
 {
-	private static ExpressionConverter<String, StringLiteral> INSTANCE;
+	private static ExpressionConverter<String> INSTANCE;
 
 	/**
 	 * Return the singleton.
 	 */
-	public static ExpressionConverter<String, StringLiteral> instance() {
+	public static ExpressionConverter<String> instance() {
 		if (INSTANCE == null) {
 			INSTANCE = new StringExpressionConverter();
 		}
@@ -39,18 +39,16 @@
 	}
 
 	@Override
-	protected StringLiteral convert_(String string, AST ast) {
+	protected StringLiteral convertObject(String string, AST ast) {
 		StringLiteral stringLiteral = ast.newStringLiteral();
 		stringLiteral.setLiteralValue(string);
 		return stringLiteral;
 	}
 
 	@Override
-	protected String convert_(StringLiteral stringLiteral) {
-		return (stringLiteral.getNodeType() == ASTNode.STRING_LITERAL) ?
-			stringLiteral.getLiteralValue()
-		:
-			null;
+	protected String convertExpression(Expression expression) {
+		Object value = expression.resolveConstantExpressionValue();
+		return (value instanceof String) ? (String) value : null;
 	}
 
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Type.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Type.java
index 65f018e..b721f4f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Type.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/Type.java
@@ -10,17 +10,20 @@
 package org.eclipse.jpt.core.internal.jdtutility;
 
 import java.util.List;
+
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jpt.utility.internal.CommandExecutorProvider;
 
 public class Type extends Member {
 
-	public Type(IType type) {
-		super(type);
+	public Type(IType type, CommandExecutorProvider modifySharedDocumentCommandExecutorProvider) {
+		super(type, modifySharedDocumentCommandExecutorProvider);
 	}
 
 	@Override
@@ -28,11 +31,6 @@
 		return (IType) super.getJdtMember();
 	}
 
-	@Override
-	public TypeDeclaration bodyDeclaration() {
-		return (TypeDeclaration) super.bodyDeclaration();
-	}
-
 	public boolean isAbstract() {
 		try {
 			return Flags.isAbstract(this.getJdtMember().getFlags());
@@ -51,6 +49,10 @@
 	}
 
 
+	public ITypeBinding typeBinding(CompilationUnit astRoot) {
+		return bodyDeclaration(astRoot).resolveBinding();
+	}
+
 	// ********** Member implementation **********
 
 	@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IColumn.java
index aaf8467..9abbc8f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IColumn.java
@@ -20,8 +20,11 @@
  * The following features are supported:
  * <ul>
  *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getLength <em>Length</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedLength <em>Specified Length</em>}</li>
  *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getPrecision <em>Precision</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedPrecision <em>Specified Precision</em>}</li>
  *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getScale <em>Scale</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedScale <em>Specified Scale</em>}</li>
  * </ul>
  * </p>
  *
@@ -31,9 +34,14 @@
  */
 public interface IColumn extends IAbstractColumn
 {
+	int DEFAULT_LENGTH = 255;
+
+	int DEFAULT_PRECISION = 0;
+
+	int DEFAULT_SCALE = 0;
+
 	/**
 	 * Returns the value of the '<em><b>Length</b></em>' attribute.
-	 * The default value is <code>"255"</code>.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Length</em>' attribute isn't clear,
@@ -41,22 +49,38 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Length</em>' attribute.
-	 * @see #setLength(int)
 	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_Length()
-	 * @model default="255"
+	 * @model changeable="false" volatile="true" derived="true"
 	 * @generated
 	 */
 	int getLength();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getLength <em>Length</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Length</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Length</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Length</em>' attribute.
-	 * @see #getLength()
+	 * @return the value of the '<em>Specified Length</em>' attribute.
+	 * @see #setSpecifiedLength(int)
+	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_SpecifiedLength()
+	 * @model default="-1"
 	 * @generated
 	 */
-	void setLength(int value);
+	int getSpecifiedLength();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedLength <em>Specified Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Length</em>' attribute.
+	 * @see #getSpecifiedLength()
+	 * @generated
+	 */
+	void setSpecifiedLength(int value);
 
 	/**
 	 * Returns the value of the '<em><b>Precision</b></em>' attribute.
@@ -67,22 +91,38 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Precision</em>' attribute.
-	 * @see #setPrecision(int)
 	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_Precision()
-	 * @model
+	 * @model changeable="false" volatile="true" derived="true"
 	 * @generated
 	 */
 	int getPrecision();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getPrecision <em>Precision</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Precision</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Precision</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Precision</em>' attribute.
-	 * @see #getPrecision()
+	 * @return the value of the '<em>Specified Precision</em>' attribute.
+	 * @see #setSpecifiedPrecision(int)
+	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_SpecifiedPrecision()
+	 * @model default="-1"
 	 * @generated
 	 */
-	void setPrecision(int value);
+	int getSpecifiedPrecision();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedPrecision <em>Specified Precision</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Precision</em>' attribute.
+	 * @see #getSpecifiedPrecision()
+	 * @generated
+	 */
+	void setSpecifiedPrecision(int value);
 
 	/**
 	 * Returns the value of the '<em><b>Scale</b></em>' attribute.
@@ -93,22 +133,62 @@
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Scale</em>' attribute.
-	 * @see #setScale(int)
 	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_Scale()
-	 * @model
+	 * @model changeable="false" volatile="true" derived="true"
 	 * @generated
 	 */
 	int getScale();
 
 	/**
-	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getScale <em>Scale</em>}' attribute.
+	 * Returns the value of the '<em><b>Specified Scale</b></em>' attribute.
+	 * The default value is <code>"-1"</code>.
 	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Specified Scale</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Scale</em>' attribute.
-	 * @see #getScale()
+	 * @return the value of the '<em>Specified Scale</em>' attribute.
+	 * @see #setSpecifiedScale(int)
+	 * @see org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage#getIColumn_SpecifiedScale()
+	 * @model default="-1"
 	 * @generated
 	 */
-	void setScale(int value);
+	int getSpecifiedScale();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedScale <em>Specified Scale</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Specified Scale</em>' attribute.
+	 * @see #getSpecifiedScale()
+	 * @generated
+	 */
+	void setSpecifiedScale(int value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	int getDefaultLength();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	int getDefaultPrecision();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	int getDefaultScale();
 
 	void refreshDefaults(DefaultsContext defaultsContext);
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IRelationshipMapping.java
index 3b75797..f1da127 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/IRelationshipMapping.java
@@ -9,6 +9,7 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.mappings;
 
+import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.internal.IAttributeMapping;
 
 /**
@@ -151,7 +152,7 @@
 	 * as fully qualified then just return that.
 	 * @return
 	 */
-	String fullyQualifiedTargetEntity();
+	String fullyQualifiedTargetEntity(CompilationUnit astRoot);
 
 	/**
 	 * Return the Entity that owns this relationship mapping
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/JpaCoreMappingsPackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/JpaCoreMappingsPackage.java
index 35eb236..2cd8c08 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/JpaCoreMappingsPackage.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/mappings/JpaCoreMappingsPackage.java
@@ -827,13 +827,31 @@
 	public static final int ICOLUMN__LENGTH = IABSTRACT_COLUMN_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Specified Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ICOLUMN__SPECIFIED_LENGTH = IABSTRACT_COLUMN_FEATURE_COUNT + 1;
+
+	/**
 	 * The feature id for the '<em><b>Precision</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	public static final int ICOLUMN__PRECISION = IABSTRACT_COLUMN_FEATURE_COUNT + 1;
+	public static final int ICOLUMN__PRECISION = IABSTRACT_COLUMN_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Specified Precision</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ICOLUMN__SPECIFIED_PRECISION = IABSTRACT_COLUMN_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Scale</b></em>' attribute.
@@ -842,7 +860,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int ICOLUMN__SCALE = IABSTRACT_COLUMN_FEATURE_COUNT + 2;
+	public static final int ICOLUMN__SCALE = IABSTRACT_COLUMN_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Specified Scale</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ICOLUMN__SPECIFIED_SCALE = IABSTRACT_COLUMN_FEATURE_COUNT + 5;
 
 	/**
 	 * The number of structural features of the '<em>IColumn</em>' class.
@@ -851,7 +878,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	public static final int ICOLUMN_FEATURE_COUNT = IABSTRACT_COLUMN_FEATURE_COUNT + 3;
+	public static final int ICOLUMN_FEATURE_COUNT = IABSTRACT_COLUMN_FEATURE_COUNT + 6;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.mappings.IColumnMapping <em>IColumn Mapping</em>}' class.
@@ -4733,6 +4760,19 @@
 	}
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedLength <em>Specified Length</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Specified Length</em>'.
+	 * @see org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedLength()
+	 * @see #getIColumn()
+	 * @generated
+	 */
+	public EAttribute getIColumn_SpecifiedLength() {
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getPrecision <em>Precision</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4742,7 +4782,20 @@
 	 * @generated
 	 */
 	public EAttribute getIColumn_Precision() {
-		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(1);
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedPrecision <em>Specified Precision</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Specified Precision</em>'.
+	 * @see org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedPrecision()
+	 * @see #getIColumn()
+	 * @generated
+	 */
+	public EAttribute getIColumn_SpecifiedPrecision() {
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(3);
 	}
 
 	/**
@@ -4755,7 +4808,20 @@
 	 * @generated
 	 */
 	public EAttribute getIColumn_Scale() {
-		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(2);
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedScale <em>Specified Scale</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Specified Scale</em>'.
+	 * @see org.eclipse.jpt.core.internal.mappings.IColumn#getSpecifiedScale()
+	 * @see #getIColumn()
+	 * @generated
+	 */
+	public EAttribute getIColumn_SpecifiedScale() {
+		return (EAttribute) iColumnEClass.getEStructuralFeatures().get(5);
 	}
 
 	/**
@@ -6594,8 +6660,11 @@
 		createEAttribute(iAbstractColumnEClass, IABSTRACT_COLUMN__DEFAULT_TABLE);
 		iColumnEClass = createEClass(ICOLUMN);
 		createEAttribute(iColumnEClass, ICOLUMN__LENGTH);
+		createEAttribute(iColumnEClass, ICOLUMN__SPECIFIED_LENGTH);
 		createEAttribute(iColumnEClass, ICOLUMN__PRECISION);
+		createEAttribute(iColumnEClass, ICOLUMN__SPECIFIED_PRECISION);
 		createEAttribute(iColumnEClass, ICOLUMN__SCALE);
+		createEAttribute(iColumnEClass, ICOLUMN__SPECIFIED_SCALE);
 		iColumnMappingEClass = createEClass(ICOLUMN_MAPPING);
 		iBasicEClass = createEClass(IBASIC);
 		createEAttribute(iBasicEClass, IBASIC__FETCH);
@@ -6872,9 +6941,15 @@
 		initEAttribute(getIAbstractColumn_SpecifiedTable(), ecorePackage.getEString(), "specifiedTable", null, 0, 1, IAbstractColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getIAbstractColumn_DefaultTable(), ecorePackage.getEString(), "defaultTable", null, 0, 1, IAbstractColumn.class, !IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEClass(iColumnEClass, IColumn.class, "IColumn", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getIColumn_Length(), ecorePackage.getEInt(), "length", "255", 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getIColumn_Precision(), ecorePackage.getEInt(), "precision", null, 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getIColumn_Scale(), ecorePackage.getEInt(), "scale", null, 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_Length(), ecorePackage.getEInt(), "length", null, 0, 1, IColumn.class, !IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_SpecifiedLength(), theEcorePackage.getEInt(), "specifiedLength", "-1", 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_Precision(), ecorePackage.getEInt(), "precision", null, 0, 1, IColumn.class, !IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_SpecifiedPrecision(), theEcorePackage.getEInt(), "specifiedPrecision", "-1", 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_Scale(), ecorePackage.getEInt(), "scale", null, 0, 1, IColumn.class, !IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+		initEAttribute(getIColumn_SpecifiedScale(), theEcorePackage.getEInt(), "specifiedScale", "-1", 0, 1, IColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		addEOperation(iColumnEClass, theEcorePackage.getEInt(), "getDefaultLength", 0, 1, IS_UNIQUE, IS_ORDERED);
+		addEOperation(iColumnEClass, theEcorePackage.getEInt(), "getDefaultPrecision", 0, 1, IS_UNIQUE, IS_ORDERED);
+		addEOperation(iColumnEClass, theEcorePackage.getEInt(), "getDefaultScale", 0, 1, IS_UNIQUE, IS_ORDERED);
 		initEClass(iColumnMappingEClass, IColumnMapping.class, "IColumnMapping", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		addEOperation(iColumnMappingEClass, this.getIColumn(), "getColumn", 0, 1, IS_UNIQUE, IS_ORDERED);
 		initEClass(iBasicEClass, IBasic.class, "IBasic", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -7533,6 +7608,14 @@
 		public static final EAttribute ICOLUMN__LENGTH = eINSTANCE.getIColumn_Length();
 
 		/**
+		 * The meta object literal for the '<em><b>Specified Length</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute ICOLUMN__SPECIFIED_LENGTH = eINSTANCE.getIColumn_SpecifiedLength();
+
+		/**
 		 * The meta object literal for the '<em><b>Precision</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -7541,6 +7624,14 @@
 		public static final EAttribute ICOLUMN__PRECISION = eINSTANCE.getIColumn_Precision();
 
 		/**
+		 * The meta object literal for the '<em><b>Specified Precision</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute ICOLUMN__SPECIFIED_PRECISION = eINSTANCE.getIColumn_SpecifiedPrecision();
+
+		/**
 		 * The meta object literal for the '<em><b>Scale</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -7549,6 +7640,14 @@
 		public static final EAttribute ICOLUMN__SCALE = eINSTANCE.getIColumn_Scale();
 
 		/**
+		 * The meta object literal for the '<em><b>Specified Scale</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute ICOLUMN__SPECIFIED_SCALE = eINSTANCE.getIColumn_SpecifiedScale();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.mappings.IColumnMapping <em>IColumn Mapping</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/AbstractJoinColumnContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/AbstractJoinColumnContext.java
index 3f266f4..dae19b8 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/AbstractJoinColumnContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/AbstractJoinColumnContext.java
@@ -8,7 +8,6 @@
  *******************************************************************************/
 package org.eclipse.jpt.core.internal.platform;
 
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.mappings.IAbstractJoinColumn;
 
 public abstract class AbstractJoinColumnContext<E extends IAbstractJoinColumn> extends BaseContext
@@ -31,8 +30,8 @@
 		this.column.refreshDefaults(wrapDefaultsContext(defaultsContext));
 	}
 	
-	public DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	public DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
 				if (key.equals(BaseJpaPlatform.DEFAULT_JOIN_COLUMN_NAME_KEY)) {
 					return buildDefaultName();
@@ -40,11 +39,7 @@
 				if (key.equals(BaseJpaPlatform.DEFAULT_JOIN_COLUMN_REFERENCED_COLUMN_NAME_KEY)) {
 					return buildDefaultReferencedColumnName();
 				}
-				return defaultsContext.getDefault(key);
-			}
-		
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return super.getDefault(key);
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/AttributeOverrideContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/AttributeOverrideContext.java
index 8d15c03..02612bb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/AttributeOverrideContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/AttributeOverrideContext.java
@@ -9,7 +9,6 @@
 package org.eclipse.jpt.core.internal.platform;
 
 import java.util.List;
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.ITypeMapping;
 import org.eclipse.jpt.core.internal.mappings.IAttributeOverride;
 import org.eclipse.jpt.core.internal.mappings.IColumn;
@@ -37,12 +36,8 @@
 		return new ColumnContext(this, this.attributeOverride.getColumn());
 	}
 	
-	public DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
-			}
-		
+	public DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {	
 			public Object getDefault(String key) {
 				if (key.equals(BaseJpaPlatform.DEFAULT_COLUMN_NAME_KEY)) {
 					return buildDefaultColumnName();
@@ -54,7 +49,7 @@
 					}
 				
 				}
-				return defaultsContext.getDefault(key);
+				return super.getDefault(key);
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaFactory.java
new file mode 100644
index 0000000..447456b
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaFactory.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * 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.core.internal.platform;
+
+import org.eclipse.jpt.core.internal.IJpaFactory;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaBasic;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddable;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbedded;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEmbeddedId;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaEntity;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaId;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaManyToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaMappedSuperclass;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaOneToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaTransient;
+import org.eclipse.jpt.core.internal.content.java.mappings.IJavaVersion;
+import org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsFactory;
+import org.eclipse.jpt.core.internal.jdtutility.Attribute;
+import org.eclipse.jpt.core.internal.jdtutility.Type;
+
+public abstract class BaseJpaFactory implements IJpaFactory
+{
+	public IJavaEntity createJavaEntity(Type type) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaEntity(type);
+	}
+	
+	public IJavaEmbeddable createJavaEmbeddable(Type type) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaEmbeddable(type);
+	}
+	
+	public IJavaMappedSuperclass createJavaMappedSuperclass(Type type) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaMappedSuperclass(type);
+	}
+		
+	public IJavaBasic createJavaBasic(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaBasic(attribute);
+	}
+	
+	public IJavaEmbedded createJavaEmbedded(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaEmbedded(attribute);
+	}
+	
+	public IJavaEmbeddedId createJavaEmbeddedId(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaEmbeddedId(attribute);
+	}
+	
+	public IJavaId createJavaId(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaId(attribute);
+	}
+	
+	public IJavaManyToMany createJavaManyToMany(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaManyToMany(attribute);
+	}
+	
+	public IJavaManyToOne createJavaManyToOne(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaManyToOne(attribute);
+	}
+	
+	public IJavaOneToMany createJavaOneToMany(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaOneToMany(attribute);
+	}
+	
+	public IJavaOneToOne createJavaOneToOne(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaOneToOne(attribute);
+	}
+	
+	public IJavaTransient createJavaTransient(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaTransient(attribute);
+	}
+	
+	public IJavaVersion createJavaVersion(Attribute attribute) {
+		return JpaJavaMappingsFactory.eINSTANCE.createJavaVersion(attribute);
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaPlatform.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaPlatform.java
index 330a294..d51ae1d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaPlatform.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaPlatform.java
@@ -13,33 +13,55 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.ListIterator;
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.IJpaFile;
 import org.eclipse.jpt.core.internal.IJpaFileContentProvider;
 import org.eclipse.jpt.core.internal.IJpaPlatform;
 import org.eclipse.jpt.core.internal.IJpaProject;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.IPersistentType;
+import org.eclipse.jpt.core.internal.content.java.IDefaultJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
+import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMappingProvider;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
+import org.eclipse.jpt.core.internal.content.java.IJavaTypeMappingProvider;
 import org.eclipse.jpt.core.internal.content.java.JavaJpaFileContentProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaBasic;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaBasicProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbeddable;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbeddableProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbedded;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbeddedId;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbeddedIdProvider;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaEmbeddedProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaEntity;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaEntityProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaId;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaIdProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaManyToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaManyToManyProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaManyToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaManyToOneProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaMappedSuperclass;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaMappedSuperclassProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaNullAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaNullTypeMapping;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaNullTypeMappingProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaOneToMany;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaOneToManyProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaOneToOne;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaOneToOneProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaTransient;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaTransientProvider;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaVersion;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaVersionProvider;
 import org.eclipse.jpt.core.internal.content.orm.OrmXmlJpaFileContentProvider;
 import org.eclipse.jpt.core.internal.content.persistence.PersistenceUnit;
 import org.eclipse.jpt.core.internal.content.persistence.PersistenceXmlJpaFileContentProvider;
+import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
+import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
+import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 
 public abstract class BaseJpaPlatform implements IJpaPlatform
@@ -64,8 +86,23 @@
 	
 	private Collection<IJpaFileContentProvider> contentProviders;
 	
+	private Collection<IJavaAttributeMappingProvider> javaAttributeMappingProviders;
+	
+	private List<IDefaultJavaAttributeMappingProvider> defaultJavaAttributeMappingProviders;
+		
+	private Collection<IJavaTypeMappingProvider> javaTypeMappingProviders;
+	
+	private IJpaFactory jpaFactory;
+	
 	private IContext context;
 	
+	protected BaseJpaPlatform() {
+		super();
+		this.jpaFactory = createJpaFactory();
+	}
+	
+	protected abstract IJpaFactory createJpaFactory();
+	
 	public String getId() {
 		return this.id;
 	}
@@ -89,6 +126,10 @@
 		this.project = jpaProject;
 	}
 
+	public IJpaFactory getJpaFactory() {
+		return this.jpaFactory;
+	}
+	
 	// ********** Persistence Unit ********************************************
 
 	public boolean containsPersistenceUnitNamed(String name) {
@@ -113,22 +154,133 @@
 	public Iterator<IPersistentType> persistentTypes(String persistenceUnitName) {
 		PersistenceUnitContext puContext = 
 			((BaseJpaProjectContext) this.context).persistenceUnitContext(persistenceUnitName);
-		return (puContext == null) ? null : puContext.persistentTypes();
+		if (puContext == null) {
+			return EmptyIterator.instance();
+		}
+		return puContext.persistentTypes();
+		//hmm, compiler error with ternary operator
+//		return (puContext == null) ? EmptyIterator.instance() : puContext.persistentTypes();
 	}
 	
 	
 	// ************************************************************************
 	
-	public Collection<IJpaFileContentProvider> jpaFileContentProviders() {
+	public Iterator<IJpaFileContentProvider> jpaFileContentProviders() {
 		if (this.contentProviders == null) {
 			this.contentProviders = new ArrayList<IJpaFileContentProvider>();
-			this.contentProviders.add(PersistenceXmlJpaFileContentProvider.INSTANCE);
-			this.contentProviders.add(JavaJpaFileContentProvider.INSTANCE);
-			this.contentProviders.add(OrmXmlJpaFileContentProvider.INSTANCE);
+			addJpaFileContentProvidersTo(this.contentProviders);
 		}
-		return this.contentProviders;
+		return new CloneIterator<IJpaFileContentProvider>(this.contentProviders);
 	}
 	
+	public IJpaFileContentProvider fileContentProvider(String contentTypeId) {
+		for (Iterator<IJpaFileContentProvider> i = this.jpaFileContentProviders(); i.hasNext(); ) {
+			IJpaFileContentProvider provider = i.next();
+			if (provider.contentType().equals(contentTypeId)) {
+				return provider;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Override this to specify more or different JPA file content providers.
+	 * The default includes the JPA spec-defined content providers of
+	 * persistence.xml, orm.xml, and java files.
+	 */
+	protected void addJpaFileContentProvidersTo(Collection<IJpaFileContentProvider> providers) {
+		providers.add(PersistenceXmlJpaFileContentProvider.instance());
+		providers.add(JavaJpaFileContentProvider.instance());
+		providers.add(OrmXmlJpaFileContentProvider.instance());
+	}
+	
+	public Iterator<IJavaTypeMappingProvider> javaTypeMappingProviders() {
+		if (this.javaTypeMappingProviders == null) {
+			this.javaTypeMappingProviders = new ArrayList<IJavaTypeMappingProvider>();
+			this.addJavaTypeMappingProvidersTo(this.javaTypeMappingProviders);
+		}
+		return new CloneIterator<IJavaTypeMappingProvider>(this.javaTypeMappingProviders);
+	}
+
+	/**
+	 * Override this to specify more or different type mapping providers.
+	 * The default includes the JPA spec-defined type mappings of 
+	 * Entity, MappedSuperclass, and Embeddable
+	 */
+	protected void addJavaTypeMappingProvidersTo(Collection<IJavaTypeMappingProvider> providers) {
+		providers.add(JavaNullTypeMappingProvider.instance());
+		providers.add(JavaEntityProvider.instance());
+		providers.add(JavaMappedSuperclassProvider.instance());
+		providers.add(JavaEmbeddableProvider.instance());
+	}
+
+	public IJavaTypeMappingProvider javaTypeMappingProvider(String typeMappingKey) {
+		for (Iterator<IJavaTypeMappingProvider> i = this.javaTypeMappingProviders(); i.hasNext(); ) {
+			IJavaTypeMappingProvider provider = i.next();
+			if (provider.key() == typeMappingKey) {
+				return provider;
+			}
+		}
+		throw new IllegalArgumentException("Unsupported java type mapping key: " + typeMappingKey);
+	}
+	
+	public Iterator<IJavaAttributeMappingProvider> javaAttributeMappingProviders() {
+		if (this.javaAttributeMappingProviders == null) {
+			this.javaAttributeMappingProviders = new ArrayList<IJavaAttributeMappingProvider>();
+			this.addJavaAttributeMappingProvidersTo(this.javaAttributeMappingProviders);
+		}
+		return new CloneIterator<IJavaAttributeMappingProvider>(this.javaAttributeMappingProviders);
+	}
+	
+	/**
+	 * Override this to specify more or different attribute mapping providers.
+	 * The default includes the JPA spec-defined attribute mappings of 
+	 * Basic, Id, Transient OneToOne, OneToMany, ManyToOne, ManyToMany, Embeddable, EmbeddedId, Version.
+	 */
+	protected void addJavaAttributeMappingProvidersTo(Collection<IJavaAttributeMappingProvider> providers) {
+		providers.add(JavaBasicProvider.instance());
+		providers.add(JavaIdProvider.instance());
+		providers.add(JavaTransientProvider.instance());
+		providers.add(JavaOneToManyProvider.instance());
+		providers.add(JavaManyToOneProvider.instance());
+		providers.add(JavaManyToManyProvider.instance());
+		providers.add(JavaOneToOneProvider.instance());
+		providers.add(JavaEmbeddedProvider.instance());
+		providers.add(JavaEmbeddedIdProvider.instance());
+		providers.add(JavaVersionProvider.instance());
+	}
+	
+	/**
+	 * throw an exception if the provider is not found
+	 */
+	public IJavaAttributeMappingProvider javaAttributeMappingProvider(String attributeMappingKey) {
+		for (Iterator<IJavaAttributeMappingProvider> i = this.javaAttributeMappingProviders(); i.hasNext(); ) {
+			IJavaAttributeMappingProvider provider = i.next();
+			if (provider.key() == attributeMappingKey) {
+				return provider;
+			}
+		}
+		throw new IllegalArgumentException("Unsupported java attribute mapping key: " + attributeMappingKey);
+	}
+	
+	public ListIterator<IDefaultJavaAttributeMappingProvider> defaultJavaAttributeMappingProviders() {
+		if (this.defaultJavaAttributeMappingProviders == null) {
+			this.defaultJavaAttributeMappingProviders = new ArrayList<IDefaultJavaAttributeMappingProvider>();
+			this.addDefaultAttributeMappingProvidersTo(this.defaultJavaAttributeMappingProviders);
+		}
+		return new CloneListIterator<IDefaultJavaAttributeMappingProvider>(this.defaultJavaAttributeMappingProviders);
+	}
+	
+	/**
+	 * Override this to specify more or different default attribute mapping providers.
+	 * The default includes the JPA spec-defined attribute mappings of 
+	 * Embedded and Basic.
+	 */
+	protected void addDefaultAttributeMappingProvidersTo(List<IDefaultJavaAttributeMappingProvider> providers) {
+		providers.add(JavaEmbeddedProvider.instance()); //bug 190344 need to test default embedded before basic
+		providers.add(JavaBasicProvider.instance());
+	}
+
 	public IContext buildProjectContext() {
 		this.context = new BaseJpaProjectContext(getProject());
 		return this.context;
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaProjectContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaProjectContext.java
index dc70a87..5a6c077 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaProjectContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/BaseJpaProjectContext.java
@@ -12,9 +12,11 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.internal.IJpaFile;
 import org.eclipse.jpt.core.internal.IJpaPlatform;
 import org.eclipse.jpt.core.internal.IJpaProject;
@@ -28,7 +30,6 @@
 import org.eclipse.jpt.core.internal.content.persistence.PersistenceXmlRootContentNode;
 import org.eclipse.jpt.core.internal.validation.IJpaValidationMessages;
 import org.eclipse.jpt.core.internal.validation.JpaValidationMessages;
-import org.eclipse.jpt.db.internal.Connection;
 import org.eclipse.jpt.db.internal.ConnectionProfile;
 import org.eclipse.jpt.utility.internal.CollectionTools;
 import org.eclipse.jpt.utility.internal.StringTools;
@@ -164,6 +165,9 @@
 			public IPersistentType persistentType(String fullyQualifiedTypeName) {
 				return null;
 			}
+			public CompilationUnit astRoot() {
+				return null;
+			}
 		};
 	}
 	
@@ -275,8 +279,7 @@
 	protected boolean okToProceedForConnectionValidation = true;
 	
 	protected void addNoConnectionMessage(List<IMessage> messages) {
-		Connection connection = jpaProject.getDataSource().getConnection();
-		if (connection == null) {
+		if (! jpaProject.getDataSource().hasAConnection()) {
 			messages.add(
 					JpaValidationMessages.buildMessage(
 						IMessage.NORMAL_SEVERITY,
@@ -288,8 +291,7 @@
 	}
 	
 	protected void addInactiveConnectionMessage(List<IMessage> messages) {
-		Connection connection = jpaProject.getDataSource().getConnection();
-		if (okToProceedForConnectionValidation && ! connection.isConnected()) {
+		if (okToProceedForConnectionValidation && ! jpaProject.getDataSource().isConnected()) {
 			messages.add(
 					JpaValidationMessages.buildMessage(
 						IMessage.NORMAL_SEVERITY,
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/DefaultsContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/DefaultsContext.java
index 556917f..985cb52 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/DefaultsContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/DefaultsContext.java
@@ -8,6 +8,7 @@
  *******************************************************************************/
 package org.eclipse.jpt.core.internal.platform;
 
+import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.internal.IPersistentType;
 
 public interface DefaultsContext
@@ -27,4 +28,12 @@
 	 * @return
 	 */
 	IPersistentType persistentType(String fullyQualifiedTypeName);
+	
+	/**
+	 * Return null in instances where the scope is not within a PersistentType.
+	 * Otherwise return the CompilationUnit for the persistentType so that we
+	 * don't have to build this everything.  It is costly to build and resolve bindings.
+	 * @return
+	 */
+	CompilationUnit astRoot();
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/DefaultsContextWrapper.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/DefaultsContextWrapper.java
new file mode 100644
index 0000000..c38867f
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/DefaultsContextWrapper.java
@@ -0,0 +1,28 @@
+package org.eclipse.jpt.core.internal.platform;
+
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.core.internal.IPersistentType;
+
+public class DefaultsContextWrapper implements DefaultsContext
+{
+	private DefaultsContext wrappedDefaultsContext;
+	
+	public DefaultsContextWrapper(DefaultsContext wrappedDefaultsContext) {
+		this.wrappedDefaultsContext = wrappedDefaultsContext;
+	}
+	public CompilationUnit astRoot() {
+		return this.wrappedDefaultsContext.astRoot();
+	}
+
+	public Object getDefault(String key) {
+		return this.wrappedDefaultsContext.getDefault(key);
+	}
+
+	public IPersistentType persistentType(String fullyQualifiedTypeName) {
+		return this.wrappedDefaultsContext.persistentType(fullyQualifiedTypeName);
+	}
+	
+	protected DefaultsContext getWrappedDefaultsContext() {
+		return this.wrappedDefaultsContext;
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaAttributeContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaAttributeContext.java
index ef40e6a..bf75f63 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaAttributeContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaAttributeContext.java
@@ -13,7 +13,6 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jpt.core.internal.IAttributeMapping;
 import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.ITypeMapping;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentAttribute;
@@ -66,14 +65,10 @@
 		return this.attributeMapping;
 	}
 	
-	public final DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	public final DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
-				return JavaAttributeContext.this.getDefault(key, defaultsContext);
-			}
-		
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return JavaAttributeContext.this.getDefault(key, getWrappedDefaultsContext());
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaEntityContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaEntityContext.java
index a976dd9..97d5e89 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaEntityContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaEntityContext.java
@@ -13,6 +13,7 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.internal.IPersistentAttribute;
 import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaAssociationOverride;
@@ -139,7 +140,11 @@
 		}
 	}
 	
-	public DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
+	//TODO the relationship between this class and JavaTypeContext is very confused
+	//we end up wrapping the defaults context multiple times.  Maybe we should
+	//make this more like JavaAttributeContext.  or maybe we need a JavaPersistentTypeContext
+	//I tried to minimize the change so as not to break the defaults calculations
+	private DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
 		DefaultsContext wrappedDefaultsContext = new DefaultsContext() {
 			public Object getDefault(String key) {
 				if (key.equals(BaseJpaPlatform.DEFAULT_TABLE_NAME_KEY)) {
@@ -158,6 +163,9 @@
 			public IPersistentType persistentType(String fullyQualifiedTypeName) {
 				return defaultsContext.persistentType(fullyQualifiedTypeName);
 			}
+			public CompilationUnit astRoot() {
+				return getAstRoot();
+			}
 		};
 		if (this.tableContext != null) {
 			return this.tableContext.wrapDefaultsContext(wrappedDefaultsContext);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaPersistentAttributeContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaPersistentAttributeContext.java
index 573dab5..8bb4575 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaPersistentAttributeContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaPersistentAttributeContext.java
@@ -10,7 +10,6 @@
 
 import java.util.List;
 import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.content.java.IJavaAttributeMapping;
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentAttribute;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
@@ -83,14 +82,10 @@
 		return this.javaPersistentAttribute;
 	}
 	
-	public final DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	public final DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
-				return JavaPersistentAttributeContext.this.getDefault(key, defaultsContext);
-			}
-		
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return JavaPersistentAttributeContext.this.getDefault(key, getWrappedDefaultsContext());
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaRelationshipMappingContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaRelationshipMappingContext.java
index 8c5b1f4..1e0f8f5 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaRelationshipMappingContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaRelationshipMappingContext.java
@@ -25,7 +25,7 @@
 	}
 	
 	protected IEntity targetEntity(DefaultsContext defaultsContext) {
-		String targetEntity = getMapping().fullyQualifiedTargetEntity();
+		String targetEntity = getMapping().fullyQualifiedTargetEntity(defaultsContext.astRoot());
 		if (targetEntity == null) {
 			return null;
 		}
@@ -43,7 +43,7 @@
 	@Override
 	protected Object getDefault(String key, DefaultsContext defaultsContext) {
 		if (key.equals(BaseJpaPlatform.DEFAULT_TARGET_ENTITY_KEY)) {
-			return getMapping().fullyQualifiedTargetEntity();
+			return getMapping().fullyQualifiedTargetEntity(defaultsContext.astRoot());
 		}
 		return super.getDefault(key, defaultsContext);
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaSingleRelationshipMappingContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaSingleRelationshipMappingContext.java
index a952629..f2fa853 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaSingleRelationshipMappingContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaSingleRelationshipMappingContext.java
@@ -14,7 +14,6 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.ITypeMapping;
 import org.eclipse.jpt.core.internal.content.java.mappings.JavaSingleRelationshipMapping;
 import org.eclipse.jpt.core.internal.mappings.IEntity;
@@ -65,8 +64,8 @@
 		}
 	}
 	
-	protected DefaultsContext wrapDefaultsContextForJoinColumn(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	protected DefaultsContext wrapDefaultsContextForJoinColumn(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
 				if (key.equals(BaseJpaPlatform.DEFAULT_JOIN_COLUMN_TABLE_KEY)) {
 					ITable table = getTable();
@@ -75,11 +74,7 @@
 					}
 					return table.getName();
 				}
-				return defaultsContext.getDefault(key);
-			}
-			
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return super.getDefault(key);
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaTypeContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaTypeContext.java
index 12ce71d..43424f0 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaTypeContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JavaTypeContext.java
@@ -12,6 +12,7 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentAttribute;
@@ -27,6 +28,8 @@
 	
 	private boolean refreshed;
 	
+	private CompilationUnit astRoot;
+	
 	public JavaTypeContext(IContext parentContext, IJavaTypeMapping typeMapping) {
 		super(parentContext);
 		this.typeMapping = typeMapping;
@@ -54,12 +57,30 @@
 
 	public void refreshDefaults(DefaultsContext defaultsContext) {
 		this.refreshed = true;
-		this.getPersistentType().refreshDefaults(defaultsContext);
+		DefaultsContext wrappedDefaultsContext = wrapDefaultsContext(defaultsContext);
+		this.getPersistentType().refreshDefaults(wrappedDefaultsContext);
 		for (JavaPersistentAttributeContext context : this.javaPersistentAttributeContexts) {
-			context.refreshDefaults(defaultsContext);
+			context.refreshDefaults(wrappedDefaultsContext);
 		}
 	}
 	
+	private DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
+			@Override
+			public CompilationUnit astRoot() {
+				return JavaTypeContext.this.getAstRoot();
+			}
+		};
+	}
+	
+	protected CompilationUnit getAstRoot() {
+		if (this.astRoot == null) {
+			this.astRoot = getPersistentType().getType().astRoot();
+		}
+		return this.astRoot;
+		
+	}
+	
 	public JavaPersistentType getPersistentType() {
 		return (JavaPersistentType) typeMapping.getPersistentType();
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JoinTableContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JoinTableContext.java
index 2b73516..68905c1 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JoinTableContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/JoinTableContext.java
@@ -11,7 +11,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.content.orm.XmlRelationshipMapping;
 import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
 import org.eclipse.jpt.core.internal.mappings.IJoinTable;
@@ -70,8 +69,8 @@
 		}
 	}
 	
-	protected DefaultsContext wrapDefaultsContextForJoinColumn(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	protected DefaultsContext wrapDefaultsContextForJoinColumn(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
 				/**
 				 * by default, the join column is, obviously, in the join table;
@@ -80,26 +79,18 @@
 				if (key.equals(BaseJpaPlatform.DEFAULT_JOIN_COLUMN_TABLE_KEY)) {
 					return getTable().getName();
 				}
-				return defaultsContext.getDefault(key);
-			}
-			
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return super.getDefault(key);
 			}
 		};
 	}
 	
-	protected DefaultsContext wrapDefaultsContextForInverseJoinColumn(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	protected DefaultsContext wrapDefaultsContextForInverseJoinColumn(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
 				if (key.equals(BaseJpaPlatform.DEFAULT_JOIN_COLUMN_TABLE_KEY)) {
 					return getTable().getName();
 				}
-				return defaultsContext.getDefault(key);
-			}
-			
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return super.getDefault(key);
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/MappingFileContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/MappingFileContext.java
index 8817da2..d6d2d1c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/MappingFileContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/MappingFileContext.java
@@ -100,8 +100,8 @@
 		}
 	}
 	
-	private DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	private DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
 				if (key.equals(BaseJpaPlatform.DEFAULT_TABLE_SCHEMA_KEY)
 					||  key.equals(BaseJpaPlatform.DEFAULT_TABLE_GENERATOR_SCHEMA_KEY)) {
@@ -117,11 +117,7 @@
 					}
 				}
 				
-				return defaultsContext.getDefault(key);
-			}
-			
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return super.getDefault(key);
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/PersistenceUnitContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/PersistenceUnitContext.java
index bdecab4..d071f60 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/PersistenceUnitContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/PersistenceUnitContext.java
@@ -12,6 +12,8 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jpt.core.internal.AccessType;
 import org.eclipse.jpt.core.internal.IJpaFile;
@@ -36,10 +38,16 @@
 import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
 import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
 import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 
 public class PersistenceUnitContext extends BaseContext
 {	
+	protected final static String IMPLIED_MAPPING_FILE_LOCATION = "META-INF/orm.xml";
+	
 	private PersistenceUnit persistenceUnit;
 	
 	private List<PersistenceUnitMetadata> persistenceUnitMetadatas;  // datas ??  datae ??  datata ??
@@ -86,15 +94,31 @@
 	
 	protected List<MappingFileContext> buildMappingFileContexts() {
 		List<MappingFileContext> contexts = new ArrayList<MappingFileContext>();
-		for (MappingFileRef mappingFileRef : persistenceUnit.getMappingFiles()) {
-			XmlRootContentNode xmlRootContentNode = xmlRootContentNodeFor(mappingFileRef);
-			if (xmlRootContentNode != null && xmlRootContentNode.getEntityMappings() != null) {
-				contexts.add(new MappingFileContext(this, xmlRootContentNode));
-			}
+		for (XmlRootContentNode content : allUniqueMappingFileContents()) {
+			contexts.add(new MappingFileContext(this, content));
 		}
 		return contexts;
 	}
 	
+	protected List<XmlRootContentNode> allUniqueMappingFileContents() {
+		List<XmlRootContentNode> contents = new ArrayList<XmlRootContentNode>();
+		for (MappingFileRef mappingFileRef : persistenceUnit.getMappingFiles()) {
+			XmlRootContentNode xmlRootContentNode = xmlRootContentNodeFor(mappingFileRef);
+			if (xmlRootContentNode != null 
+					&& xmlRootContentNode.getEntityMappings() != null
+					&& ! contents.contains(xmlRootContentNode)) {
+				contents.add(xmlRootContentNode);
+			}
+		}
+		XmlRootContentNode impliedMappingFileContent = impliedMappingFileContent();
+		if (impliedMappingFileContent != null
+					&& impliedMappingFileContent.getEntityMappings() != null
+					&& ! contents.contains(impliedMappingFileContent)) {
+			contents.add(impliedMappingFileContent);
+		}
+		return contents;
+	}
+	
 	private XmlRootContentNode xmlRootContentNodeFor(MappingFileRef mappingFileRef) {
 		IJpaFile jpaFile = mappingFileRef.getMappingFile();
 		if (jpaFile != null) {
@@ -106,6 +130,33 @@
 		return null;
 	}
 	
+	protected XmlRootContentNode impliedMappingFileContent() {
+		// check flexible project structure
+		IVirtualComponent component = ComponentCore.createComponent(persistenceUnit.getJpaProject().getProject());
+		IVirtualFolder virtualRootFolder = component.getRootFolder();
+		IVirtualFile virtualMappingFile = virtualRootFolder.getFile(new Path(IMPLIED_MAPPING_FILE_LOCATION));
+		// keep track of whether one has been found so that we may know if multiple exist
+		IJpaFile mappingFile = null;
+		for (IFile underlyingFile : virtualMappingFile.getUnderlyingFiles()) {
+			IJpaFile jpaFile = JptCorePlugin.getJpaFile(underlyingFile);
+			if (jpaFile != null) {
+				if (mappingFile != null) {
+					return null; // multiple do exist
+				}
+				else {
+					mappingFile = jpaFile;
+				}
+			}
+		}
+		if (mappingFile != null) {
+			try {
+				return (XmlRootContentNode) mappingFile.getContent();
+			}
+			catch (ClassCastException cce) { /* do nothing, return null */ }
+		}
+		return null;
+	}
+	
 	protected List<JavaTypeContext> buildJavaClassesContexts() {
 		List<JavaTypeContext> javaPersistentTypeContexts = new ArrayList<JavaTypeContext>();
 		for (JavaPersistentType jpType : allIncludedJavaPersistentTypes()) {
@@ -249,11 +300,8 @@
 	}
 	
 	protected DefaultsContext wrapDefaultsContext(DefaultsContext defaults) {
-		final DefaultsContext puDefaults = buildPersistenceUnitDefaults(defaults);
-		return new DefaultsContext(){
-			public Object getDefault(String key) {
-				return puDefaults.getDefault(key);
-			}
+		DefaultsContext puDefaults = buildPersistenceUnitDefaults(defaults);
+		return new DefaultsContextWrapper(puDefaults){
 			public IPersistentType persistentType(String fullyQualifiedTypeName) {
 				for (Iterator<TypeContext> i = typeContexts(); i.hasNext(); ) {
 					TypeContext typeContext = i.next();
@@ -272,14 +320,14 @@
 		};
 	}
 	
-	protected DefaultsContext buildPersistenceUnitDefaults(final DefaultsContext defaults) {
+	protected DefaultsContext buildPersistenceUnitDefaults(DefaultsContext defaults) {
 		if (persistenceUnitMetadatas.size() == 1) {
 			final PersistenceUnitDefaults puDefaults = persistenceUnitMetadatas.get(0).getPersistenceUnitDefaults();
 			if (puDefaults.isAllFeaturesUnset()) {
 				return defaults;
 			}
 			
-			return new DefaultsContext() {
+			return new DefaultsContextWrapper(defaults) {
 				public Object getDefault(String key) {
 					if (key.equals(BaseJpaPlatform.DEFAULT_TABLE_SCHEMA_KEY)
 						|| key.equals(BaseJpaPlatform.DEFAULT_TABLE_GENERATOR_SCHEMA_KEY)) {
@@ -300,10 +348,7 @@
 							return access;
 						}
 					}
-					return defaults.getDefault(key);
-				}
-				public IPersistentType persistentType(String fullyQualifiedTypeName) {
-					return defaults.persistentType(fullyQualifiedTypeName);
+					return super.getDefault(key);
 				}
 			};
 		}
@@ -436,20 +481,27 @@
 			}
 		} 
 	}
-	
+
+	protected HashBag<String> mappingFileNameBag() {
+		List<MappingFileRef> refs = this.persistenceUnit.getMappingFiles();
+		HashBag<String> fileNameBag = new HashBag<String>(refs.size());
+		CollectionTools.addAll(fileNameBag, this.fileRefNames(refs.iterator()));
+		return fileNameBag;
+	}
+
+	protected Iterator<String> fileRefNames(Iterator<MappingFileRef> refs) {
+		return new TransformationIterator<MappingFileRef, String>(refs) {
+			@Override
+			protected String transform(MappingFileRef ref) {
+				return ref.getFileName();
+			}
+		};
+	}
+
 	protected void addDuplicateMappingFileMessages(List<IMessage> messages) {
-		HashBag fileBag = new HashBag(
-				CollectionTools.collection(
-						new TransformationIterator(persistenceUnit.getMappingFiles().iterator()) {
-							@Override
-							protected Object transform(Object next) {
-								return ((MappingFileRef) next).getFileName();
-							}
-						}
-				)
-		);
+		HashBag<String> fileNameBag = this.mappingFileNameBag();
 		for (MappingFileRef mappingFileRef : persistenceUnit.getMappingFiles()) {
-			if (fileBag.count(mappingFileRef.getFileName()) > 1) {
+			if (fileNameBag.count(mappingFileRef.getFileName()) > 1) {
 				messages.add(
 					JpaValidationMessages.buildMessage(
 						IMessage.HIGH_SEVERITY,
@@ -518,20 +570,27 @@
 		} 
 	}
 	
+	protected HashBag<String> classNameBag() {
+		List<JavaClassRef> refs = this.persistenceUnit.getClasses();
+		HashBag<String> classNameBag = new HashBag<String>(refs.size());
+		CollectionTools.addAll(classNameBag, this.classRefNames(refs.iterator()));
+		return classNameBag;
+	}
+
+	protected Iterator<String> classRefNames(Iterator<JavaClassRef> refs) {
+		return new TransformationIterator<JavaClassRef, String>(refs) {
+			@Override
+			protected String transform(JavaClassRef ref) {
+				return ref.getJavaClass();
+			}
+		};
+	}
+
 	protected void addDuplicateClassMessages(List<IMessage> messages) {
-		HashBag fileBag = new HashBag(
-				CollectionTools.collection(
-						new TransformationIterator(persistenceUnit.getClasses().iterator()) {
-							@Override
-							protected Object transform(Object next) {
-								return ((JavaClassRef) next).getJavaClass();
-							}
-						}
-				)
-		);
+		HashBag<String> classNameBag = this.classNameBag();
 		for (JavaClassRef javaClassRef : persistenceUnit.getClasses()) {
 			if (javaClassRef.getJavaClass() != null
-					&& fileBag.count(javaClassRef.getJavaClass()) > 1) {
+					&& classNameBag.count(javaClassRef.getJavaClass()) > 1) {
 				messages.add(
 					JpaValidationMessages.buildMessage(
 						IMessage.HIGH_SEVERITY,
@@ -543,6 +602,7 @@
 		}
 	}
 	
+	@Override
 	public String toString() {
 		return StringTools.buildToStringFor( this, this.persistenceUnit.getName());
 	}	
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/SecondaryTableContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/SecondaryTableContext.java
index dfc3d19..049b54c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/SecondaryTableContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/SecondaryTableContext.java
@@ -11,7 +11,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.mappings.IPrimaryKeyJoinColumn;
 import org.eclipse.jpt.core.internal.mappings.ISecondaryTable;
 import org.eclipse.jpt.core.internal.validation.IJpaValidationMessages;
@@ -53,17 +52,14 @@
 		}
 	}
 	
-	public DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	public DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
+				//TODO hmm, why is this commented out??? this wrapper is doing nothing - kfm 8/17/07
 //				if (key.equals(BaseJpaPlatform.DEFAULT_COLUMN_TABLE_KEY)) {
 //					return getTable().getName();
 //				}
-				return defaultsContext.getDefault(key);
-			}
-			
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return super.getDefault(key);
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/TableContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/TableContext.java
index 9949a8b..98d33b4 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/TableContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/TableContext.java
@@ -9,7 +9,6 @@
 package org.eclipse.jpt.core.internal.platform;
 
 import java.util.List;
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.mappings.ITable;
 import org.eclipse.jpt.core.internal.validation.IJpaValidationMessages;
 import org.eclipse.jpt.core.internal.validation.JpaValidationMessages;
@@ -35,17 +34,13 @@
 		this.table.refreshDefaults(defaultsContext);
 	}
 	
-	public DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	public DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
 				if (key.equals(BaseJpaPlatform.DEFAULT_COLUMN_TABLE_KEY)) {
 					return getTable().getName();
 				}
-				return defaultsContext.getDefault(key);
-			}
-			
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return super.getDefault(key);
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlAttributeContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlAttributeContext.java
index 11827c7..da1bac7 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlAttributeContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlAttributeContext.java
@@ -13,7 +13,6 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jpt.core.internal.IAttributeMapping;
 import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.ITypeMapping;
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentAttribute;
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentType;
@@ -76,14 +75,10 @@
 		return attributeMapping().typeMapping().getKey() == IMappingKeys.ENTITY_TYPE_MAPPING_KEY;
 	}
 	
-	public final DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	public final DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
-				return XmlAttributeContext.this.getDefault(key, defaultsContext);
-			}
-		
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+				return XmlAttributeContext.this.getDefault(key, getWrappedDefaultsContext());
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlRelationshipMappingContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlRelationshipMappingContext.java
index 2336412..2772ceb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlRelationshipMappingContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlRelationshipMappingContext.java
@@ -24,7 +24,7 @@
 	}
 	
 	protected IEntity targetEntity(DefaultsContext defaultsContext) {
-		String targetEntity = relationshipMapping().fullyQualifiedTargetEntity();
+		String targetEntity = relationshipMapping().fullyQualifiedTargetEntity(defaultsContext.astRoot());
 		if (targetEntity == null) {
 			return null;
 		}
@@ -70,7 +70,7 @@
 			if (attribute != null) {
 				IType iType = relationshipMapping().getPersistentType().findJdtType();
 				if (iType != null) {
-					return relationshipMapping().javaDefaultTargetEntity();
+					return relationshipMapping().javaDefaultTargetEntity(defaultsContext.astRoot());
 				}
 			}
 		}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlTypeContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlTypeContext.java
index 24c82d3..6fe458f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlTypeContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlTypeContext.java
@@ -13,9 +13,9 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.internal.IMappingKeys;
 import org.eclipse.jpt.core.internal.IPersistentAttribute;
-import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.content.java.IJavaTypeMapping;
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentAttribute;
 import org.eclipse.jpt.core.internal.content.java.JavaPersistentType;
@@ -174,14 +174,15 @@
 		this.javaTypeContext = null;
 	}
 	
-	public DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
-		return new DefaultsContext() {
+	public DefaultsContext wrapDefaultsContext(DefaultsContext defaultsContext) {
+		return new DefaultsContextWrapper(defaultsContext) {
 			public Object getDefault(String key) {
-				return XmlTypeContext.this.getDefault(key, defaultsContext);
+				return XmlTypeContext.this.getDefault(key, getWrappedDefaultsContext());
 			}
-			
-			public IPersistentType persistentType(String fullyQualifiedTypeName) {
-				return defaultsContext.persistentType(fullyQualifiedTypeName);
+			@Override
+			public CompilationUnit astRoot() {
+				//TODO need to somehow not build this astRoot every time.  can we store the JavaPersistentType we are finding?
+				return javaPersistentType().getType().astRoot();
 			}
 		};
 	}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/generic/GenericJpaFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/generic/GenericJpaFactory.java
new file mode 100644
index 0000000..31a2594
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/generic/GenericJpaFactory.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * 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.core.internal.platform.generic;
+
+import org.eclipse.jpt.core.internal.platform.BaseJpaFactory;
+
+public class GenericJpaFactory extends BaseJpaFactory
+{}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/generic/GenericPlatform.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/generic/GenericPlatform.java
index 5776081..e9343fe 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/generic/GenericPlatform.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/generic/GenericPlatform.java
@@ -9,10 +9,16 @@
  ******************************************************************************/
 package org.eclipse.jpt.core.internal.platform.generic;
 
+import org.eclipse.jpt.core.internal.IJpaFactory;
 import org.eclipse.jpt.core.internal.platform.BaseJpaPlatform;
 
 public class GenericPlatform 
 	extends BaseJpaPlatform
 {
 	public final static String ID = "generic";
+	
+	protected IJpaFactory createJpaFactory() {
+		return new GenericJpaFactory();
+	}
+
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/common/translators/BooleanTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/common/translators/BooleanTranslator.java
new file mode 100644
index 0000000..966e021
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/common/translators/BooleanTranslator.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal.resource.common.translators;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.wst.common.internal.emf.resource.Translator;
+
+public class BooleanTranslator extends Translator
+{
+	public BooleanTranslator(String domNameAndPath, EStructuralFeature aFeature) {
+		super(domNameAndPath, aFeature, BOOLEAN_FEATURE | BOOLEAN_LOWERCASE);
+	}
+	
+	public BooleanTranslator(String domNameAndPath, EStructuralFeature aFeature, int style) {
+		super(domNameAndPath, aFeature, BOOLEAN_FEATURE | BOOLEAN_LOWERCASE | style);
+	}
+		
+	public Object convertStringToValue(String strValue, EObject owner) {
+		return Boolean.valueOf(strValue);
+	}
+	
+	public String convertValueToString(Object value, EObject owner) {
+		return ((Boolean) value).toString();
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/JavaClassRef.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/JavaClassRef.java
new file mode 100644
index 0000000..155bde3
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/JavaClassRef.java
@@ -0,0 +1,194 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: JavaClassRef.java,v 1.1 2007/07/30 20:13:46 pfullbright Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Java Class Ref</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef#getJavaClass <em>Java Class</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getJavaClassRef()
+ * @model kind="class"
+ * @generated
+ */
+public class JavaClassRef extends EObjectImpl implements EObject
+{
+	/**
+	 * The default value of the '{@link #getJavaClass() <em>Java Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getJavaClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String JAVA_CLASS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getJavaClass() <em>Java Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getJavaClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected String javaClass = JAVA_CLASS_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected JavaClassRef()
+	{
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass()
+	{
+		return PersistencePackage.Literals.JAVA_CLASS_REF;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Java Class</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Java Class</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Java Class</em>' attribute.
+	 * @see #setJavaClass(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getJavaClassRef_JavaClass()
+	 * @model unique="false" ordered="false"
+	 * @generated
+	 */
+	public String getJavaClass()
+	{
+		return javaClass;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef#getJavaClass <em>Java Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Java Class</em>' attribute.
+	 * @see #getJavaClass()
+	 * @generated
+	 */
+	public void setJavaClass(String newJavaClass)
+	{
+		String oldJavaClass = javaClass;
+		javaClass = newJavaClass;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.JAVA_CLASS_REF__JAVA_CLASS, oldJavaClass, javaClass));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.JAVA_CLASS_REF__JAVA_CLASS:
+				return getJavaClass();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.JAVA_CLASS_REF__JAVA_CLASS:
+				setJavaClass((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.JAVA_CLASS_REF__JAVA_CLASS:
+				setJavaClass(JAVA_CLASS_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.JAVA_CLASS_REF__JAVA_CLASS:
+				return JAVA_CLASS_EDEFAULT == null ? javaClass != null : !JAVA_CLASS_EDEFAULT.equals(javaClass);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (javaClass: ");
+		result.append(javaClass);
+		result.append(')');
+		return result.toString();
+	}
+
+} // JavaClassRef
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/MappingFileRef.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/MappingFileRef.java
new file mode 100644
index 0000000..0cdb513
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/MappingFileRef.java
@@ -0,0 +1,195 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: MappingFileRef.java,v 1.1 2007/07/30 20:13:46 pfullbright Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Mapping File Ref</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef#getFileName <em>File Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getMappingFileRef()
+ * @model kind="class"
+ * @generated
+ */
+public class MappingFileRef extends EObjectImpl implements EObject
+{
+	/**
+	 * The default value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FILE_NAME_EDEFAULT = "";
+
+	/**
+	 * The cached value of the '{@link #getFileName() <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFileName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String fileName = FILE_NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MappingFileRef()
+	{
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass()
+	{
+		return PersistencePackage.Literals.MAPPING_FILE_REF;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>File Name</b></em>' attribute.
+	 * The default value is <code>""</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>File Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>File Name</em>' attribute.
+	 * @see #setFileName(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getMappingFileRef_FileName()
+	 * @model default="" unique="false" ordered="false"
+	 * @generated
+	 */
+	public String getFileName()
+	{
+		return fileName;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef#getFileName <em>File Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>File Name</em>' attribute.
+	 * @see #getFileName()
+	 * @generated
+	 */
+	public void setFileName(String newFileName)
+	{
+		String oldFileName = fileName;
+		fileName = newFileName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.MAPPING_FILE_REF__FILE_NAME, oldFileName, fileName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.MAPPING_FILE_REF__FILE_NAME:
+				return getFileName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.MAPPING_FILE_REF__FILE_NAME:
+				setFileName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.MAPPING_FILE_REF__FILE_NAME:
+				setFileName(FILE_NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.MAPPING_FILE_REF__FILE_NAME:
+				return FILE_NAME_EDEFAULT == null ? fileName != null : !FILE_NAME_EDEFAULT.equals(fileName);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (fileName: ");
+		result.append(fileName);
+		result.append(')');
+		return result.toString();
+	}
+
+} // MappingFileRef
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/Persistence.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/Persistence.java
new file mode 100644
index 0000000..65e959b
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/Persistence.java
@@ -0,0 +1,265 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: Persistence.java,v 1.1 2007/07/30 20:13:46 pfullbright Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Persistence</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.Persistence#getPersistenceUnits <em>Persistence Units</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.Persistence#getVersion <em>Version</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistence()
+ * @model kind="class"
+ * @generated
+ */
+public class Persistence extends EObjectImpl implements EObject
+{
+	/**
+	 * The cached value of the '{@link #getPersistenceUnits() <em>Persistence Units</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPersistenceUnits()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<PersistenceUnit> persistenceUnits;
+
+	/**
+	 * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VERSION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getVersion()
+	 * @generated
+	 * @ordered
+	 */
+	protected String version = VERSION_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Persistence()
+	{
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass()
+	{
+		return PersistencePackage.Literals.PERSISTENCE;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Version</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Version</em>' attribute.
+	 * @see #setVersion(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistence_Version()
+	 * @model unique="false" dataType="org.eclipse.jpt.core.internal.resource.persistence.Version" required="true"
+	 * @generated
+	 */
+	public String getVersion()
+	{
+		return version;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.Persistence#getVersion <em>Version</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Version</em>' attribute.
+	 * @see #getVersion()
+	 * @generated
+	 */
+	public void setVersion(String newVersion)
+	{
+		String oldVersion = version;
+		version = newVersion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE__VERSION, oldVersion, version));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Persistence Units</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Persistence Units</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Persistence Units</em>' containment reference list.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistence_PersistenceUnits()
+	 * @model containment="true"
+	 * @generated
+	 */
+	public EList<PersistenceUnit> getPersistenceUnits()
+	{
+		if (persistenceUnits == null)
+		{
+			persistenceUnits = new EObjectContainmentEList<PersistenceUnit>(PersistenceUnit.class, this, PersistencePackage.PERSISTENCE__PERSISTENCE_UNITS);
+		}
+		return persistenceUnits;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE__PERSISTENCE_UNITS:
+				return ((InternalEList<?>)getPersistenceUnits()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE__PERSISTENCE_UNITS:
+				return getPersistenceUnits();
+			case PersistencePackage.PERSISTENCE__VERSION:
+				return getVersion();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE__PERSISTENCE_UNITS:
+				getPersistenceUnits().clear();
+				getPersistenceUnits().addAll((Collection<? extends PersistenceUnit>)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE__VERSION:
+				setVersion((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE__PERSISTENCE_UNITS:
+				getPersistenceUnits().clear();
+				return;
+			case PersistencePackage.PERSISTENCE__VERSION:
+				setVersion(VERSION_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE__PERSISTENCE_UNITS:
+				return persistenceUnits != null && !persistenceUnits.isEmpty();
+			case PersistencePackage.PERSISTENCE__VERSION:
+				return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (version: ");
+		result.append(version);
+		result.append(')');
+		return result.toString();
+	}
+
+} // Persistence
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceFactory.java
new file mode 100644
index 0000000..fba283f
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceFactory.java
@@ -0,0 +1,285 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PersistenceFactory.java,v 1.1 2007/07/30 20:13:46 pfullbright Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage
+ * @generated
+ */
+public class PersistenceFactory extends EFactoryImpl
+{
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final PersistenceFactory eINSTANCE = init();
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PersistenceFactory init()
+	{
+		try
+		{
+			PersistenceFactory thePersistenceFactory = (PersistenceFactory)EPackage.Registry.INSTANCE.getEFactory("jpt.persistence.xmi"); 
+			if (thePersistenceFactory != null)
+			{
+				return thePersistenceFactory;
+			}
+		}
+		catch (Exception exception)
+		{
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new PersistenceFactory();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PersistenceFactory()
+	{
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass)
+	{
+		switch (eClass.getClassifierID())
+		{
+			case PersistencePackage.PERSISTENCE: return createPersistence();
+			case PersistencePackage.PERSISTENCE_UNIT: return createPersistenceUnit();
+			case PersistencePackage.MAPPING_FILE_REF: return createMappingFileRef();
+			case PersistencePackage.JAVA_CLASS_REF: return createJavaClassRef();
+			case PersistencePackage.PROPERTIES: return createProperties();
+			case PersistencePackage.PROPERTY: return createProperty();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue)
+	{
+		switch (eDataType.getClassifierID())
+		{
+			case PersistencePackage.PERSISTENCE_UNIT_TRANSACTION_TYPE:
+				return createPersistenceUnitTransactionTypeFromString(eDataType, initialValue);
+			case PersistencePackage.PERSISTENCE_UNIT_TRANSACTION_TYPE_OBJECT:
+				return createPersistenceUnitTransactionTypeObjectFromString(eDataType, initialValue);
+			case PersistencePackage.VERSION:
+				return createVersionFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue)
+	{
+		switch (eDataType.getClassifierID())
+		{
+			case PersistencePackage.PERSISTENCE_UNIT_TRANSACTION_TYPE:
+				return convertPersistenceUnitTransactionTypeToString(eDataType, instanceValue);
+			case PersistencePackage.PERSISTENCE_UNIT_TRANSACTION_TYPE_OBJECT:
+				return convertPersistenceUnitTransactionTypeObjectToString(eDataType, instanceValue);
+			case PersistencePackage.VERSION:
+				return convertVersionToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Persistence createPersistence()
+	{
+		Persistence persistence = new Persistence();
+		return persistence;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PersistenceUnit createPersistenceUnit()
+	{
+		PersistenceUnit persistenceUnit = new PersistenceUnit();
+		return persistenceUnit;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MappingFileRef createMappingFileRef()
+	{
+		MappingFileRef mappingFileRef = new MappingFileRef();
+		return mappingFileRef;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public JavaClassRef createJavaClassRef()
+	{
+		JavaClassRef javaClassRef = new JavaClassRef();
+		return javaClassRef;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Properties createProperties()
+	{
+		Properties properties = new Properties();
+		return properties;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Property createProperty()
+	{
+		Property property = new Property();
+		return property;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PersistenceUnitTransactionType createPersistenceUnitTransactionTypeFromString(EDataType eDataType, String initialValue)
+	{
+		PersistenceUnitTransactionType result = PersistenceUnitTransactionType.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertPersistenceUnitTransactionTypeToString(EDataType eDataType, Object instanceValue)
+	{
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Enumerator createPersistenceUnitTransactionTypeObjectFromString(EDataType eDataType, String initialValue)
+	{
+		return (Enumerator)super.createFromString(eDataType, initialValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertPersistenceUnitTransactionTypeObjectToString(EDataType eDataType, Object instanceValue)
+	{
+		return super.convertToString(eDataType, instanceValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String createVersionFromString(EDataType eDataType, String initialValue)
+	{
+		return (String)super.createFromString(eDataType, initialValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertVersionToString(EDataType eDataType, Object instanceValue)
+	{
+		return super.convertToString(eDataType, instanceValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PersistencePackage getPersistencePackage()
+	{
+		return (PersistencePackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static PersistencePackage getPackage()
+	{
+		return PersistencePackage.eINSTANCE;
+	}
+
+} //PersistenceFactory
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistencePackage.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistencePackage.java
new file mode 100644
index 0000000..50faf95
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistencePackage.java
@@ -0,0 +1,1285 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PersistencePackage.java,v 1.1 2007/07/30 20:13:46 pfullbright Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceFactory
+ * @model kind="package"
+ * @generated
+ */
+public class PersistencePackage extends EPackageImpl
+{
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String eNAME = "persistence";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String eNS_URI = "jpt.persistence.xmi";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String eNS_PREFIX = "org.eclipse.jpt.core.resource.persistence";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final PersistencePackage eINSTANCE = org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.resource.persistence.Persistence <em>Persistence</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Persistence
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistence()
+	 * @generated
+	 */
+	public static final int PERSISTENCE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Persistence Units</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE__PERSISTENCE_UNITS = 0;
+
+	/**
+	 * The feature id for the '<em><b>Version</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE__VERSION = 1;
+
+	/**
+	 * The number of structural features of the '<em>Persistence</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_FEATURE_COUNT = 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit <em>Unit</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit()
+	 * @generated
+	 */
+	public static final int PERSISTENCE_UNIT = 1;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__DESCRIPTION = 0;
+
+	/**
+	 * The feature id for the '<em><b>Provider</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__PROVIDER = 1;
+
+	/**
+	 * The feature id for the '<em><b>Jta Data Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__JTA_DATA_SOURCE = 2;
+
+	/**
+	 * The feature id for the '<em><b>Non Jta Data Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__NON_JTA_DATA_SOURCE = 3;
+
+	/**
+	 * The feature id for the '<em><b>Mapping Files</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__MAPPING_FILES = 4;
+
+	/**
+	 * The feature id for the '<em><b>Jar Files</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__JAR_FILES = 5;
+
+	/**
+	 * The feature id for the '<em><b>Classes</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__CLASSES = 6;
+
+	/**
+	 * The feature id for the '<em><b>Exclude Unlisted Classes</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__EXCLUDE_UNLISTED_CLASSES = 7;
+
+	/**
+	 * The feature id for the '<em><b>Properties</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__PROPERTIES = 8;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__NAME = 9;
+
+	/**
+	 * The feature id for the '<em><b>Transaction Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT__TRANSACTION_TYPE = 10;
+
+	/**
+	 * The number of structural features of the '<em>Unit</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PERSISTENCE_UNIT_FEATURE_COUNT = 11;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef <em>Mapping File Ref</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getMappingFileRef()
+	 * @generated
+	 */
+	public static final int MAPPING_FILE_REF = 2;
+
+	/**
+	 * The feature id for the '<em><b>File Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int MAPPING_FILE_REF__FILE_NAME = 0;
+
+	/**
+	 * The number of structural features of the '<em>Mapping File Ref</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int MAPPING_FILE_REF_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef <em>Java Class Ref</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getJavaClassRef()
+	 * @generated
+	 */
+	public static final int JAVA_CLASS_REF = 3;
+
+	/**
+	 * The feature id for the '<em><b>Java Class</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int JAVA_CLASS_REF__JAVA_CLASS = 0;
+
+	/**
+	 * The number of structural features of the '<em>Java Class Ref</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int JAVA_CLASS_REF_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.resource.persistence.Properties <em>Properties</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Properties
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getProperties()
+	 * @generated
+	 */
+	public static final int PROPERTIES = 4;
+
+	/**
+	 * The feature id for the '<em><b>Properties</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PROPERTIES__PROPERTIES = 0;
+
+	/**
+	 * The number of structural features of the '<em>Properties</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PROPERTIES_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.resource.persistence.Property <em>Property</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Property
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getProperty()
+	 * @generated
+	 */
+	public static final int PROPERTY = 5;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PROPERTY__NAME = 0;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PROPERTY__VALUE = 1;
+
+	/**
+	 * The number of structural features of the '<em>Property</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PROPERTY_FEATURE_COUNT = 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType <em>Unit Transaction Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnitTransactionType()
+	 * @generated
+	 */
+	public static final int PERSISTENCE_UNIT_TRANSACTION_TYPE = 6;
+
+	/**
+	 * The meta object id for the '<em>Unit Transaction Type Object</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.Enumerator
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnitTransactionTypeObject()
+	 * @generated
+	 */
+	public static final int PERSISTENCE_UNIT_TRANSACTION_TYPE_OBJECT = 7;
+
+	/**
+	 * The meta object id for the '<em>Version</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see java.lang.String
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getVersion()
+	 * @generated
+	 */
+	public static final int VERSION = 8;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass persistenceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass persistenceUnitEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass mappingFileRefEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass javaClassRefEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass propertiesEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass propertyEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum persistenceUnitTransactionTypeEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType persistenceUnitTransactionTypeObjectEDataType = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType versionEDataType = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private PersistencePackage()
+	{
+		super(eNS_URI, PersistenceFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static PersistencePackage init()
+	{
+		if (isInited) return (PersistencePackage)EPackage.Registry.INSTANCE.getEPackage(PersistencePackage.eNS_URI);
+
+		// Obtain or create and register package
+		PersistencePackage thePersistencePackage = (PersistencePackage)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof PersistencePackage ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new PersistencePackage());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+		XMLTypePackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		thePersistencePackage.createPackageContents();
+
+		// Initialize created meta-data
+		thePersistencePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		thePersistencePackage.freeze();
+
+		return thePersistencePackage;
+	}
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.resource.persistence.Persistence <em>Persistence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Persistence</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Persistence
+	 * @generated
+	 */
+	public EClass getPersistence()
+	{
+		return persistenceEClass;
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.Persistence#getVersion <em>Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Version</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Persistence#getVersion()
+	 * @see #getPersistence()
+	 * @generated
+	 */
+	public EAttribute getPersistence_Version()
+	{
+		return (EAttribute)persistenceEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.jpt.core.internal.resource.persistence.Persistence#getPersistenceUnits <em>Persistence Units</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Persistence Units</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Persistence#getPersistenceUnits()
+	 * @see #getPersistence()
+	 * @generated
+	 */
+	public EReference getPersistence_PersistenceUnits()
+	{
+		return (EReference)persistenceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit <em>Unit</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Unit</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit
+	 * @generated
+	 */
+	public EClass getPersistenceUnit()
+	{
+		return persistenceUnitEClass;
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getName()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EAttribute getPersistenceUnit_Name()
+	{
+		return (EAttribute)persistenceUnitEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getTransactionType <em>Transaction Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Transaction Type</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getTransactionType()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EAttribute getPersistenceUnit_TransactionType()
+	{
+		return (EAttribute)persistenceUnitEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getDescription <em>Description</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Description</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getDescription()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EAttribute getPersistenceUnit_Description()
+	{
+		return (EAttribute)persistenceUnitEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getProvider <em>Provider</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Provider</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getProvider()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EAttribute getPersistenceUnit_Provider()
+	{
+		return (EAttribute)persistenceUnitEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getJtaDataSource <em>Jta Data Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Jta Data Source</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getJtaDataSource()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EAttribute getPersistenceUnit_JtaDataSource()
+	{
+		return (EAttribute)persistenceUnitEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getNonJtaDataSource <em>Non Jta Data Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Non Jta Data Source</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getNonJtaDataSource()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EAttribute getPersistenceUnit_NonJtaDataSource()
+	{
+		return (EAttribute)persistenceUnitEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getMappingFiles <em>Mapping Files</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Mapping Files</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getMappingFiles()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EReference getPersistenceUnit_MappingFiles()
+	{
+		return (EReference)persistenceUnitEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * Returns the meta object for the attribute list '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getJarFiles <em>Jar Files</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute list '<em>Jar Files</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getJarFiles()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EAttribute getPersistenceUnit_JarFiles()
+	{
+		return (EAttribute)persistenceUnitEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getClasses <em>Classes</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Classes</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getClasses()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EReference getPersistenceUnit_Classes()
+	{
+		return (EReference)persistenceUnitEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#isExcludeUnlistedClasses <em>Exclude Unlisted Classes</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Exclude Unlisted Classes</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#isExcludeUnlistedClasses()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EAttribute getPersistenceUnit_ExcludeUnlistedClasses()
+	{
+		return (EAttribute)persistenceUnitEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getProperties <em>Properties</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Properties</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getProperties()
+	 * @see #getPersistenceUnit()
+	 * @generated
+	 */
+	public EReference getPersistenceUnit_Properties()
+	{
+		return (EReference)persistenceUnitEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef <em>Mapping File Ref</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Mapping File Ref</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef
+	 * @generated
+	 */
+	public EClass getMappingFileRef()
+	{
+		return mappingFileRefEClass;
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef#getFileName <em>File Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>File Name</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef#getFileName()
+	 * @see #getMappingFileRef()
+	 * @generated
+	 */
+	public EAttribute getMappingFileRef_FileName()
+	{
+		return (EAttribute)mappingFileRefEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef <em>Java Class Ref</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Java Class Ref</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef
+	 * @generated
+	 */
+	public EClass getJavaClassRef()
+	{
+		return javaClassRefEClass;
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef#getJavaClass <em>Java Class</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Java Class</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef#getJavaClass()
+	 * @see #getJavaClassRef()
+	 * @generated
+	 */
+	public EAttribute getJavaClassRef_JavaClass()
+	{
+		return (EAttribute)javaClassRefEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.resource.persistence.Properties <em>Properties</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Properties</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Properties
+	 * @generated
+	 */
+	public EClass getProperties()
+	{
+		return propertiesEClass;
+	}
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.jpt.core.internal.resource.persistence.Properties#getProperties <em>Properties</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Properties</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Properties#getProperties()
+	 * @see #getProperties()
+	 * @generated
+	 */
+	public EReference getProperties_Properties()
+	{
+		return (EReference)propertiesEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jpt.core.internal.resource.persistence.Property <em>Property</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Property</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Property
+	 * @generated
+	 */
+	public EClass getProperty()
+	{
+		return propertyEClass;
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.Property#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Property#getName()
+	 * @see #getProperty()
+	 * @generated
+	 */
+	public EAttribute getProperty_Name()
+	{
+		return (EAttribute)propertyEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jpt.core.internal.resource.persistence.Property#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Property#getValue()
+	 * @see #getProperty()
+	 * @generated
+	 */
+	public EAttribute getProperty_Value()
+	{
+		return (EAttribute)propertyEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType <em>Unit Transaction Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Unit Transaction Type</em>'.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType
+	 * @generated
+	 */
+	public EEnum getPersistenceUnitTransactionType()
+	{
+		return persistenceUnitTransactionTypeEEnum;
+	}
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.common.util.Enumerator <em>Unit Transaction Type Object</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>Unit Transaction Type Object</em>'.
+	 * @see org.eclipse.emf.common.util.Enumerator
+	 * @model instanceClass="org.eclipse.emf.common.util.Enumerator"
+	 * @generated
+	 */
+	public EDataType getPersistenceUnitTransactionTypeObject()
+	{
+		return persistenceUnitTransactionTypeObjectEDataType;
+	}
+
+	/**
+	 * Returns the meta object for data type '{@link java.lang.String <em>Version</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>Version</em>'.
+	 * @see java.lang.String
+	 * @model instanceClass="java.lang.String"
+	 * @generated
+	 */
+	public EDataType getVersion()
+	{
+		return versionEDataType;
+	}
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	public PersistenceFactory getPersistenceFactory()
+	{
+		return (PersistenceFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents()
+	{
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		persistenceEClass = createEClass(PERSISTENCE);
+		createEReference(persistenceEClass, PERSISTENCE__PERSISTENCE_UNITS);
+		createEAttribute(persistenceEClass, PERSISTENCE__VERSION);
+
+		persistenceUnitEClass = createEClass(PERSISTENCE_UNIT);
+		createEAttribute(persistenceUnitEClass, PERSISTENCE_UNIT__DESCRIPTION);
+		createEAttribute(persistenceUnitEClass, PERSISTENCE_UNIT__PROVIDER);
+		createEAttribute(persistenceUnitEClass, PERSISTENCE_UNIT__JTA_DATA_SOURCE);
+		createEAttribute(persistenceUnitEClass, PERSISTENCE_UNIT__NON_JTA_DATA_SOURCE);
+		createEReference(persistenceUnitEClass, PERSISTENCE_UNIT__MAPPING_FILES);
+		createEAttribute(persistenceUnitEClass, PERSISTENCE_UNIT__JAR_FILES);
+		createEReference(persistenceUnitEClass, PERSISTENCE_UNIT__CLASSES);
+		createEAttribute(persistenceUnitEClass, PERSISTENCE_UNIT__EXCLUDE_UNLISTED_CLASSES);
+		createEReference(persistenceUnitEClass, PERSISTENCE_UNIT__PROPERTIES);
+		createEAttribute(persistenceUnitEClass, PERSISTENCE_UNIT__NAME);
+		createEAttribute(persistenceUnitEClass, PERSISTENCE_UNIT__TRANSACTION_TYPE);
+
+		mappingFileRefEClass = createEClass(MAPPING_FILE_REF);
+		createEAttribute(mappingFileRefEClass, MAPPING_FILE_REF__FILE_NAME);
+
+		javaClassRefEClass = createEClass(JAVA_CLASS_REF);
+		createEAttribute(javaClassRefEClass, JAVA_CLASS_REF__JAVA_CLASS);
+
+		propertiesEClass = createEClass(PROPERTIES);
+		createEReference(propertiesEClass, PROPERTIES__PROPERTIES);
+
+		propertyEClass = createEClass(PROPERTY);
+		createEAttribute(propertyEClass, PROPERTY__NAME);
+		createEAttribute(propertyEClass, PROPERTY__VALUE);
+
+		// Create enums
+		persistenceUnitTransactionTypeEEnum = createEEnum(PERSISTENCE_UNIT_TRANSACTION_TYPE);
+
+		// Create data types
+		persistenceUnitTransactionTypeObjectEDataType = createEDataType(PERSISTENCE_UNIT_TRANSACTION_TYPE_OBJECT);
+		versionEDataType = createEDataType(VERSION);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents()
+	{
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		XMLTypePackage theXMLTypePackage = (XMLTypePackage)EPackage.Registry.INSTANCE.getEPackage(XMLTypePackage.eNS_URI);
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(persistenceEClass, Persistence.class, "Persistence", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getPersistence_PersistenceUnits(), this.getPersistenceUnit(), null, "persistenceUnits", null, 0, -1, Persistence.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPersistence_Version(), this.getVersion(), "version", null, 1, 1, Persistence.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(persistenceUnitEClass, PersistenceUnit.class, "PersistenceUnit", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getPersistenceUnit_Description(), theXMLTypePackage.getString(), "description", null, 0, 1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPersistenceUnit_Provider(), theXMLTypePackage.getString(), "provider", null, 0, 1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPersistenceUnit_JtaDataSource(), theXMLTypePackage.getString(), "jtaDataSource", null, 0, 1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPersistenceUnit_NonJtaDataSource(), theXMLTypePackage.getString(), "nonJtaDataSource", null, 0, 1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPersistenceUnit_MappingFiles(), this.getMappingFileRef(), null, "mappingFiles", null, 0, -1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPersistenceUnit_JarFiles(), theXMLTypePackage.getString(), "jarFiles", null, 0, -1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPersistenceUnit_Classes(), this.getJavaClassRef(), null, "classes", null, 0, -1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPersistenceUnit_ExcludeUnlistedClasses(), theXMLTypePackage.getBoolean(), "excludeUnlistedClasses", "false", 0, 1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPersistenceUnit_Properties(), this.getProperties(), null, "properties", null, 0, 1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPersistenceUnit_Name(), theXMLTypePackage.getString(), "name", null, 1, 1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPersistenceUnit_TransactionType(), this.getPersistenceUnitTransactionType(), "transactionType", "JTA", 0, 1, PersistenceUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(mappingFileRefEClass, MappingFileRef.class, "MappingFileRef", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getMappingFileRef_FileName(), theEcorePackage.getEString(), "fileName", "", 0, 1, MappingFileRef.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(javaClassRefEClass, JavaClassRef.class, "JavaClassRef", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getJavaClassRef_JavaClass(), theEcorePackage.getEString(), "javaClass", null, 0, 1, JavaClassRef.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(propertiesEClass, Properties.class, "Properties", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getProperties_Properties(), this.getProperty(), null, "properties", null, 0, -1, Properties.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(propertyEClass, Property.class, "Property", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getProperty_Name(), theXMLTypePackage.getString(), "name", null, 1, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getProperty_Value(), theXMLTypePackage.getString(), "value", null, 1, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Initialize enums and add enum literals
+		initEEnum(persistenceUnitTransactionTypeEEnum, PersistenceUnitTransactionType.class, "PersistenceUnitTransactionType");
+		addEEnumLiteral(persistenceUnitTransactionTypeEEnum, PersistenceUnitTransactionType.JTA);
+		addEEnumLiteral(persistenceUnitTransactionTypeEEnum, PersistenceUnitTransactionType.RESOURCE_LOCAL);
+
+		// Initialize data types
+		initEDataType(persistenceUnitTransactionTypeObjectEDataType, Enumerator.class, "PersistenceUnitTransactionTypeObject", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+		initEDataType(versionEDataType, String.class, "Version", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public interface Literals
+	{
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.resource.persistence.Persistence <em>Persistence</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.Persistence
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistence()
+		 * @generated
+		 */
+		public static final EClass PERSISTENCE = eINSTANCE.getPersistence();
+
+		/**
+		 * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PERSISTENCE__VERSION = eINSTANCE.getPersistence_Version();
+
+		/**
+		 * The meta object literal for the '<em><b>Persistence Units</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EReference PERSISTENCE__PERSISTENCE_UNITS = eINSTANCE.getPersistence_PersistenceUnits();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit <em>Unit</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit()
+		 * @generated
+		 */
+		public static final EClass PERSISTENCE_UNIT = eINSTANCE.getPersistenceUnit();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PERSISTENCE_UNIT__NAME = eINSTANCE.getPersistenceUnit_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Transaction Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PERSISTENCE_UNIT__TRANSACTION_TYPE = eINSTANCE.getPersistenceUnit_TransactionType();
+
+		/**
+		 * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PERSISTENCE_UNIT__DESCRIPTION = eINSTANCE.getPersistenceUnit_Description();
+
+		/**
+		 * The meta object literal for the '<em><b>Provider</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PERSISTENCE_UNIT__PROVIDER = eINSTANCE.getPersistenceUnit_Provider();
+
+		/**
+		 * The meta object literal for the '<em><b>Jta Data Source</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PERSISTENCE_UNIT__JTA_DATA_SOURCE = eINSTANCE.getPersistenceUnit_JtaDataSource();
+
+		/**
+		 * The meta object literal for the '<em><b>Non Jta Data Source</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PERSISTENCE_UNIT__NON_JTA_DATA_SOURCE = eINSTANCE.getPersistenceUnit_NonJtaDataSource();
+
+		/**
+		 * The meta object literal for the '<em><b>Mapping Files</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EReference PERSISTENCE_UNIT__MAPPING_FILES = eINSTANCE.getPersistenceUnit_MappingFiles();
+
+		/**
+		 * The meta object literal for the '<em><b>Jar Files</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PERSISTENCE_UNIT__JAR_FILES = eINSTANCE.getPersistenceUnit_JarFiles();
+
+		/**
+		 * The meta object literal for the '<em><b>Classes</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EReference PERSISTENCE_UNIT__CLASSES = eINSTANCE.getPersistenceUnit_Classes();
+
+		/**
+		 * The meta object literal for the '<em><b>Exclude Unlisted Classes</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PERSISTENCE_UNIT__EXCLUDE_UNLISTED_CLASSES = eINSTANCE.getPersistenceUnit_ExcludeUnlistedClasses();
+
+		/**
+		 * The meta object literal for the '<em><b>Properties</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EReference PERSISTENCE_UNIT__PROPERTIES = eINSTANCE.getPersistenceUnit_Properties();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef <em>Mapping File Ref</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getMappingFileRef()
+		 * @generated
+		 */
+		public static final EClass MAPPING_FILE_REF = eINSTANCE.getMappingFileRef();
+
+		/**
+		 * The meta object literal for the '<em><b>File Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute MAPPING_FILE_REF__FILE_NAME = eINSTANCE.getMappingFileRef_FileName();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef <em>Java Class Ref</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getJavaClassRef()
+		 * @generated
+		 */
+		public static final EClass JAVA_CLASS_REF = eINSTANCE.getJavaClassRef();
+
+		/**
+		 * The meta object literal for the '<em><b>Java Class</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute JAVA_CLASS_REF__JAVA_CLASS = eINSTANCE.getJavaClassRef_JavaClass();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.resource.persistence.Properties <em>Properties</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.Properties
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getProperties()
+		 * @generated
+		 */
+		public static final EClass PROPERTIES = eINSTANCE.getProperties();
+
+		/**
+		 * The meta object literal for the '<em><b>Properties</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EReference PROPERTIES__PROPERTIES = eINSTANCE.getProperties_Properties();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.resource.persistence.Property <em>Property</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.Property
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getProperty()
+		 * @generated
+		 */
+		public static final EClass PROPERTY = eINSTANCE.getProperty();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PROPERTY__NAME = eINSTANCE.getProperty_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final EAttribute PROPERTY__VALUE = eINSTANCE.getProperty_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType <em>Unit Transaction Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnitTransactionType()
+		 * @generated
+		 */
+		public static final EEnum PERSISTENCE_UNIT_TRANSACTION_TYPE = eINSTANCE.getPersistenceUnitTransactionType();
+
+		/**
+		 * The meta object literal for the '<em>Unit Transaction Type Object</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.Enumerator
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnitTransactionTypeObject()
+		 * @generated
+		 */
+		public static final EDataType PERSISTENCE_UNIT_TRANSACTION_TYPE_OBJECT = eINSTANCE.getPersistenceUnitTransactionTypeObject();
+
+		/**
+		 * The meta object literal for the '<em>Version</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see java.lang.String
+		 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getVersion()
+		 * @generated
+		 */
+		public static final EDataType VERSION = eINSTANCE.getVersion();
+
+	}
+
+} //PersistencePackage
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceResource.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceResource.java
new file mode 100644
index 0000000..a7b03da
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceResource.java
@@ -0,0 +1,66 @@
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jpt.core.internal.resource.persistence.translators.PersistenceTranslator;
+import org.eclipse.wst.common.internal.emf.resource.Renderer;
+import org.eclipse.wst.common.internal.emf.resource.Translator;
+import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
+import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl;
+
+public class PersistenceResource extends TranslatorResourceImpl
+{
+	public PersistenceResource(Renderer aRenderer) {
+		super(aRenderer);
+	}
+
+	public PersistenceResource(URI uri, Renderer aRenderer) {
+		super(uri, aRenderer);
+	}
+	
+	/**
+	 * @see TranslatorResourceImpl#getDefaultPublicId() 
+	 */
+	protected String getDefaultPublicId() {
+		return null;
+		// only applicable for DTD-based files
+	}
+	
+	/**
+	 * @see TranslatorResourceImpl#getDefaultSystemId() 
+	 */
+	protected String getDefaultSystemId() {
+		return null;
+		// only applicable for DTD-based files
+	}
+	
+	/**
+	 * @see TranslatorResourceImpl#getDefaultVersionId() 
+	 */
+	protected int getDefaultVersionID() {
+		return 10;
+		// this seems to be the default version of the spec for this doc
+		// and the id 10 maps to the version 1.0
+	}
+	
+	/**
+	 * @see TranslatorResource#getDoctype() 
+	 */
+	public String getDoctype() {
+		return null;
+		// only applicable for DTD-based files
+	}
+	
+	/**
+	 * @see TranslatorResource#getRootTranslator() 
+	 */
+	public Translator getRootTranslator() {
+		return PersistenceTranslator.INSTANCE;
+	}
+	
+	/**
+	 * @see PersistenceResource#getPersistence()
+	 */
+	public Persistence getPersistence() {
+		return (Persistence) getRootObject();
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceUnit.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceUnit.java
new file mode 100644
index 0000000..6ea871d
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceUnit.java
@@ -0,0 +1,954 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PersistenceUnit.java,v 1.1 2007/07/30 20:13:46 pfullbright Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Unit</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getDescription <em>Description</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getProvider <em>Provider</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getJtaDataSource <em>Jta Data Source</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getNonJtaDataSource <em>Non Jta Data Source</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getMappingFiles <em>Mapping Files</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getJarFiles <em>Jar Files</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getClasses <em>Classes</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#isExcludeUnlistedClasses <em>Exclude Unlisted Classes</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getProperties <em>Properties</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getTransactionType <em>Transaction Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit()
+ * @model kind="class"
+ * @generated
+ */
+public class PersistenceUnit extends EObjectImpl implements EObject
+{
+	/**
+	 * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDescription()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DESCRIPTION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDescription()
+	 * @generated
+	 * @ordered
+	 */
+	protected String description = DESCRIPTION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getProvider() <em>Provider</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProvider()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PROVIDER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getProvider() <em>Provider</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProvider()
+	 * @generated
+	 * @ordered
+	 */
+	protected String provider = PROVIDER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getJtaDataSource() <em>Jta Data Source</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getJtaDataSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String JTA_DATA_SOURCE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getJtaDataSource() <em>Jta Data Source</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getJtaDataSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected String jtaDataSource = JTA_DATA_SOURCE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNonJtaDataSource() <em>Non Jta Data Source</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNonJtaDataSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NON_JTA_DATA_SOURCE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getNonJtaDataSource() <em>Non Jta Data Source</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNonJtaDataSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected String nonJtaDataSource = NON_JTA_DATA_SOURCE_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getMappingFiles() <em>Mapping Files</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMappingFiles()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<MappingFileRef> mappingFiles;
+
+	/**
+	 * The cached value of the '{@link #getJarFiles() <em>Jar Files</em>}' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getJarFiles()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<String> jarFiles;
+
+	/**
+	 * The cached value of the '{@link #getClasses() <em>Classes</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getClasses()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<JavaClassRef> classes;
+
+	/**
+	 * The default value of the '{@link #isExcludeUnlistedClasses() <em>Exclude Unlisted Classes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExcludeUnlistedClasses()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXCLUDE_UNLISTED_CLASSES_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isExcludeUnlistedClasses() <em>Exclude Unlisted Classes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExcludeUnlistedClasses()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean excludeUnlistedClasses = EXCLUDE_UNLISTED_CLASSES_EDEFAULT;
+
+	/**
+	 * This is true if the Exclude Unlisted Classes attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean excludeUnlistedClassesESet;
+
+	/**
+	 * The cached value of the '{@link #getProperties() <em>Properties</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProperties()
+	 * @generated
+	 * @ordered
+	 */
+	protected Properties properties;
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTransactionType() <em>Transaction Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTransactionType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final PersistenceUnitTransactionType TRANSACTION_TYPE_EDEFAULT = PersistenceUnitTransactionType.JTA;
+
+	/**
+	 * The cached value of the '{@link #getTransactionType() <em>Transaction Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTransactionType()
+	 * @generated
+	 * @ordered
+	 */
+	protected PersistenceUnitTransactionType transactionType = TRANSACTION_TYPE_EDEFAULT;
+
+	/**
+	 * This is true if the Transaction Type attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean transactionTypeESet;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PersistenceUnit()
+	{
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass()
+	{
+		return PersistencePackage.Literals.PERSISTENCE_UNIT;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_Name()
+	 * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+	 * @generated
+	 */
+	public String getName()
+	{
+		return name;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	public void setName(String newName)
+	{
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE_UNIT__NAME, oldName, name));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Transaction Type</b></em>' attribute.
+	 * The default value is <code>"JTA"</code>.
+	 * The literals are from the enumeration {@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Transaction Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Transaction Type</em>' attribute.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType
+	 * @see #isSetTransactionType()
+	 * @see #unsetTransactionType()
+	 * @see #setTransactionType(PersistenceUnitTransactionType)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_TransactionType()
+	 * @model default="JTA" unique="false" unsettable="true"
+	 * @generated
+	 */
+	public PersistenceUnitTransactionType getTransactionType()
+	{
+		return transactionType;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getTransactionType <em>Transaction Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Transaction Type</em>' attribute.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType
+	 * @see #isSetTransactionType()
+	 * @see #unsetTransactionType()
+	 * @see #getTransactionType()
+	 * @generated
+	 */
+	public void setTransactionType(PersistenceUnitTransactionType newTransactionType)
+	{
+		PersistenceUnitTransactionType oldTransactionType = transactionType;
+		transactionType = newTransactionType == null ? TRANSACTION_TYPE_EDEFAULT : newTransactionType;
+		boolean oldTransactionTypeESet = transactionTypeESet;
+		transactionTypeESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE_UNIT__TRANSACTION_TYPE, oldTransactionType, transactionType, !oldTransactionTypeESet));
+	}
+
+	/**
+	 * Unsets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getTransactionType <em>Transaction Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSetTransactionType()
+	 * @see #getTransactionType()
+	 * @see #setTransactionType(PersistenceUnitTransactionType)
+	 * @generated
+	 */
+	public void unsetTransactionType()
+	{
+		PersistenceUnitTransactionType oldTransactionType = transactionType;
+		boolean oldTransactionTypeESet = transactionTypeESet;
+		transactionType = TRANSACTION_TYPE_EDEFAULT;
+		transactionTypeESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, PersistencePackage.PERSISTENCE_UNIT__TRANSACTION_TYPE, oldTransactionType, TRANSACTION_TYPE_EDEFAULT, oldTransactionTypeESet));
+	}
+
+	/**
+	 * Returns whether the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getTransactionType <em>Transaction Type</em>}' attribute is set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return whether the value of the '<em>Transaction Type</em>' attribute is set.
+	 * @see #unsetTransactionType()
+	 * @see #getTransactionType()
+	 * @see #setTransactionType(PersistenceUnitTransactionType)
+	 * @generated
+	 */
+	public boolean isSetTransactionType()
+	{
+		return transactionTypeESet;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Description</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Description</em>' attribute.
+	 * @see #setDescription(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_Description()
+	 * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+	 * @generated
+	 */
+	public String getDescription()
+	{
+		return description;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getDescription <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Description</em>' attribute.
+	 * @see #getDescription()
+	 * @generated
+	 */
+	public void setDescription(String newDescription)
+	{
+		String oldDescription = description;
+		description = newDescription;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE_UNIT__DESCRIPTION, oldDescription, description));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Provider</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Provider</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Provider</em>' attribute.
+	 * @see #setProvider(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_Provider()
+	 * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+	 * @generated
+	 */
+	public String getProvider()
+	{
+		return provider;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getProvider <em>Provider</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Provider</em>' attribute.
+	 * @see #getProvider()
+	 * @generated
+	 */
+	public void setProvider(String newProvider)
+	{
+		String oldProvider = provider;
+		provider = newProvider;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE_UNIT__PROVIDER, oldProvider, provider));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Jta Data Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Jta Data Source</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Jta Data Source</em>' attribute.
+	 * @see #setJtaDataSource(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_JtaDataSource()
+	 * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+	 * @generated
+	 */
+	public String getJtaDataSource()
+	{
+		return jtaDataSource;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getJtaDataSource <em>Jta Data Source</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Jta Data Source</em>' attribute.
+	 * @see #getJtaDataSource()
+	 * @generated
+	 */
+	public void setJtaDataSource(String newJtaDataSource)
+	{
+		String oldJtaDataSource = jtaDataSource;
+		jtaDataSource = newJtaDataSource;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE_UNIT__JTA_DATA_SOURCE, oldJtaDataSource, jtaDataSource));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Non Jta Data Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Non Jta Data Source</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Non Jta Data Source</em>' attribute.
+	 * @see #setNonJtaDataSource(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_NonJtaDataSource()
+	 * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+	 * @generated
+	 */
+	public String getNonJtaDataSource()
+	{
+		return nonJtaDataSource;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getNonJtaDataSource <em>Non Jta Data Source</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Non Jta Data Source</em>' attribute.
+	 * @see #getNonJtaDataSource()
+	 * @generated
+	 */
+	public void setNonJtaDataSource(String newNonJtaDataSource)
+	{
+		String oldNonJtaDataSource = nonJtaDataSource;
+		nonJtaDataSource = newNonJtaDataSource;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE_UNIT__NON_JTA_DATA_SOURCE, oldNonJtaDataSource, nonJtaDataSource));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Mapping Files</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Mapping Files</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Mapping Files</em>' containment reference list.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_MappingFiles()
+	 * @model containment="true"
+	 * @generated
+	 */
+	public EList<MappingFileRef> getMappingFiles()
+	{
+		if (mappingFiles == null)
+		{
+			mappingFiles = new EObjectContainmentEList<MappingFileRef>(MappingFileRef.class, this, PersistencePackage.PERSISTENCE_UNIT__MAPPING_FILES);
+		}
+		return mappingFiles;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Jar Files</b></em>' attribute list.
+	 * The list contents are of type {@link java.lang.String}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Jar Files</em>' attribute list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Jar Files</em>' attribute list.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_JarFiles()
+	 * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
+	 * @generated
+	 */
+	public EList<String> getJarFiles()
+	{
+		if (jarFiles == null)
+		{
+			jarFiles = new EDataTypeEList<String>(String.class, this, PersistencePackage.PERSISTENCE_UNIT__JAR_FILES);
+		}
+		return jarFiles;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Classes</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Classes</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Classes</em>' containment reference list.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_Classes()
+	 * @model containment="true"
+	 * @generated
+	 */
+	public EList<JavaClassRef> getClasses()
+	{
+		if (classes == null)
+		{
+			classes = new EObjectContainmentEList<JavaClassRef>(JavaClassRef.class, this, PersistencePackage.PERSISTENCE_UNIT__CLASSES);
+		}
+		return classes;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Exclude Unlisted Classes</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Exclude Unlisted Classes</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Exclude Unlisted Classes</em>' attribute.
+	 * @see #isSetExcludeUnlistedClasses()
+	 * @see #unsetExcludeUnlistedClasses()
+	 * @see #setExcludeUnlistedClasses(boolean)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_ExcludeUnlistedClasses()
+	 * @model default="false" unique="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
+	 * @generated
+	 */
+	public boolean isExcludeUnlistedClasses()
+	{
+		return excludeUnlistedClasses;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#isExcludeUnlistedClasses <em>Exclude Unlisted Classes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Exclude Unlisted Classes</em>' attribute.
+	 * @see #isSetExcludeUnlistedClasses()
+	 * @see #unsetExcludeUnlistedClasses()
+	 * @see #isExcludeUnlistedClasses()
+	 * @generated
+	 */
+	public void setExcludeUnlistedClasses(boolean newExcludeUnlistedClasses)
+	{
+		boolean oldExcludeUnlistedClasses = excludeUnlistedClasses;
+		excludeUnlistedClasses = newExcludeUnlistedClasses;
+		boolean oldExcludeUnlistedClassesESet = excludeUnlistedClassesESet;
+		excludeUnlistedClassesESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE_UNIT__EXCLUDE_UNLISTED_CLASSES, oldExcludeUnlistedClasses, excludeUnlistedClasses, !oldExcludeUnlistedClassesESet));
+	}
+
+	/**
+	 * Unsets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#isExcludeUnlistedClasses <em>Exclude Unlisted Classes</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isSetExcludeUnlistedClasses()
+	 * @see #isExcludeUnlistedClasses()
+	 * @see #setExcludeUnlistedClasses(boolean)
+	 * @generated
+	 */
+	public void unsetExcludeUnlistedClasses()
+	{
+		boolean oldExcludeUnlistedClasses = excludeUnlistedClasses;
+		boolean oldExcludeUnlistedClassesESet = excludeUnlistedClassesESet;
+		excludeUnlistedClasses = EXCLUDE_UNLISTED_CLASSES_EDEFAULT;
+		excludeUnlistedClassesESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, PersistencePackage.PERSISTENCE_UNIT__EXCLUDE_UNLISTED_CLASSES, oldExcludeUnlistedClasses, EXCLUDE_UNLISTED_CLASSES_EDEFAULT, oldExcludeUnlistedClassesESet));
+	}
+
+	/**
+	 * Returns whether the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#isExcludeUnlistedClasses <em>Exclude Unlisted Classes</em>}' attribute is set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return whether the value of the '<em>Exclude Unlisted Classes</em>' attribute is set.
+	 * @see #unsetExcludeUnlistedClasses()
+	 * @see #isExcludeUnlistedClasses()
+	 * @see #setExcludeUnlistedClasses(boolean)
+	 * @generated
+	 */
+	public boolean isSetExcludeUnlistedClasses()
+	{
+		return excludeUnlistedClassesESet;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Properties</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Properties</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Properties</em>' containment reference.
+	 * @see #setProperties(Properties)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnit_Properties()
+	 * @model containment="true"
+	 * @generated
+	 */
+	public Properties getProperties()
+	{
+		return properties;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetProperties(Properties newProperties, NotificationChain msgs)
+	{
+		Properties oldProperties = properties;
+		properties = newProperties;
+		if (eNotificationRequired())
+		{
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE_UNIT__PROPERTIES, oldProperties, newProperties);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit#getProperties <em>Properties</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Properties</em>' containment reference.
+	 * @see #getProperties()
+	 * @generated
+	 */
+	public void setProperties(Properties newProperties)
+	{
+		if (newProperties != properties)
+		{
+			NotificationChain msgs = null;
+			if (properties != null)
+				msgs = ((InternalEObject)properties).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - PersistencePackage.PERSISTENCE_UNIT__PROPERTIES, null, msgs);
+			if (newProperties != null)
+				msgs = ((InternalEObject)newProperties).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - PersistencePackage.PERSISTENCE_UNIT__PROPERTIES, null, msgs);
+			msgs = basicSetProperties(newProperties, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PERSISTENCE_UNIT__PROPERTIES, newProperties, newProperties));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE_UNIT__MAPPING_FILES:
+				return ((InternalEList<?>)getMappingFiles()).basicRemove(otherEnd, msgs);
+			case PersistencePackage.PERSISTENCE_UNIT__CLASSES:
+				return ((InternalEList<?>)getClasses()).basicRemove(otherEnd, msgs);
+			case PersistencePackage.PERSISTENCE_UNIT__PROPERTIES:
+				return basicSetProperties(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE_UNIT__DESCRIPTION:
+				return getDescription();
+			case PersistencePackage.PERSISTENCE_UNIT__PROVIDER:
+				return getProvider();
+			case PersistencePackage.PERSISTENCE_UNIT__JTA_DATA_SOURCE:
+				return getJtaDataSource();
+			case PersistencePackage.PERSISTENCE_UNIT__NON_JTA_DATA_SOURCE:
+				return getNonJtaDataSource();
+			case PersistencePackage.PERSISTENCE_UNIT__MAPPING_FILES:
+				return getMappingFiles();
+			case PersistencePackage.PERSISTENCE_UNIT__JAR_FILES:
+				return getJarFiles();
+			case PersistencePackage.PERSISTENCE_UNIT__CLASSES:
+				return getClasses();
+			case PersistencePackage.PERSISTENCE_UNIT__EXCLUDE_UNLISTED_CLASSES:
+				return isExcludeUnlistedClasses() ? Boolean.TRUE : Boolean.FALSE;
+			case PersistencePackage.PERSISTENCE_UNIT__PROPERTIES:
+				return getProperties();
+			case PersistencePackage.PERSISTENCE_UNIT__NAME:
+				return getName();
+			case PersistencePackage.PERSISTENCE_UNIT__TRANSACTION_TYPE:
+				return getTransactionType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE_UNIT__DESCRIPTION:
+				setDescription((String)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__PROVIDER:
+				setProvider((String)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__JTA_DATA_SOURCE:
+				setJtaDataSource((String)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__NON_JTA_DATA_SOURCE:
+				setNonJtaDataSource((String)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__MAPPING_FILES:
+				getMappingFiles().clear();
+				getMappingFiles().addAll((Collection<? extends MappingFileRef>)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__JAR_FILES:
+				getJarFiles().clear();
+				getJarFiles().addAll((Collection<? extends String>)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__CLASSES:
+				getClasses().clear();
+				getClasses().addAll((Collection<? extends JavaClassRef>)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__EXCLUDE_UNLISTED_CLASSES:
+				setExcludeUnlistedClasses(((Boolean)newValue).booleanValue());
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__PROPERTIES:
+				setProperties((Properties)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__NAME:
+				setName((String)newValue);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__TRANSACTION_TYPE:
+				setTransactionType((PersistenceUnitTransactionType)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE_UNIT__DESCRIPTION:
+				setDescription(DESCRIPTION_EDEFAULT);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__PROVIDER:
+				setProvider(PROVIDER_EDEFAULT);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__JTA_DATA_SOURCE:
+				setJtaDataSource(JTA_DATA_SOURCE_EDEFAULT);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__NON_JTA_DATA_SOURCE:
+				setNonJtaDataSource(NON_JTA_DATA_SOURCE_EDEFAULT);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__MAPPING_FILES:
+				getMappingFiles().clear();
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__JAR_FILES:
+				getJarFiles().clear();
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__CLASSES:
+				getClasses().clear();
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__EXCLUDE_UNLISTED_CLASSES:
+				unsetExcludeUnlistedClasses();
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__PROPERTIES:
+				setProperties((Properties)null);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+			case PersistencePackage.PERSISTENCE_UNIT__TRANSACTION_TYPE:
+				unsetTransactionType();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PERSISTENCE_UNIT__DESCRIPTION:
+				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case PersistencePackage.PERSISTENCE_UNIT__PROVIDER:
+				return PROVIDER_EDEFAULT == null ? provider != null : !PROVIDER_EDEFAULT.equals(provider);
+			case PersistencePackage.PERSISTENCE_UNIT__JTA_DATA_SOURCE:
+				return JTA_DATA_SOURCE_EDEFAULT == null ? jtaDataSource != null : !JTA_DATA_SOURCE_EDEFAULT.equals(jtaDataSource);
+			case PersistencePackage.PERSISTENCE_UNIT__NON_JTA_DATA_SOURCE:
+				return NON_JTA_DATA_SOURCE_EDEFAULT == null ? nonJtaDataSource != null : !NON_JTA_DATA_SOURCE_EDEFAULT.equals(nonJtaDataSource);
+			case PersistencePackage.PERSISTENCE_UNIT__MAPPING_FILES:
+				return mappingFiles != null && !mappingFiles.isEmpty();
+			case PersistencePackage.PERSISTENCE_UNIT__JAR_FILES:
+				return jarFiles != null && !jarFiles.isEmpty();
+			case PersistencePackage.PERSISTENCE_UNIT__CLASSES:
+				return classes != null && !classes.isEmpty();
+			case PersistencePackage.PERSISTENCE_UNIT__EXCLUDE_UNLISTED_CLASSES:
+				return isSetExcludeUnlistedClasses();
+			case PersistencePackage.PERSISTENCE_UNIT__PROPERTIES:
+				return properties != null;
+			case PersistencePackage.PERSISTENCE_UNIT__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case PersistencePackage.PERSISTENCE_UNIT__TRANSACTION_TYPE:
+				return isSetTransactionType();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (description: ");
+		result.append(description);
+		result.append(", provider: ");
+		result.append(provider);
+		result.append(", jtaDataSource: ");
+		result.append(jtaDataSource);
+		result.append(", nonJtaDataSource: ");
+		result.append(nonJtaDataSource);
+		result.append(", jarFiles: ");
+		result.append(jarFiles);
+		result.append(", excludeUnlistedClasses: ");
+		if (excludeUnlistedClassesESet) result.append(excludeUnlistedClasses); else result.append("<unset>");
+		result.append(", name: ");
+		result.append(name);
+		result.append(", transactionType: ");
+		if (transactionTypeESet) result.append(transactionType); else result.append("<unset>");
+		result.append(')');
+		return result.toString();
+	}
+
+} // PersistenceUnit
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceUnitTransactionType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceUnitTransactionType.java
new file mode 100644
index 0000000..625806e
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/PersistenceUnitTransactionType.java
@@ -0,0 +1,227 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PersistenceUnitTransactionType.java,v 1.1 2007/07/30 20:13:46 pfullbright Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Unit Transaction Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getPersistenceUnitTransactionType()
+ * @model
+ * @generated
+ */
+public enum PersistenceUnitTransactionType implements Enumerator
+{
+	/**
+	 * The '<em><b>JTA</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #JTA_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	JTA(0, "JTA", "JTA"),
+
+	/**
+	 * The '<em><b>RESOURCE LOCAL</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #RESOURCE_LOCAL_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	RESOURCE_LOCAL(1, "RESOURCE_LOCAL", "RESOURCE_LOCAL");
+
+	/**
+	 * The '<em><b>JTA</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>JTA</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #JTA
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int JTA_VALUE = 0;
+
+	/**
+	 * The '<em><b>RESOURCE LOCAL</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>RESOURCE LOCAL</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #RESOURCE_LOCAL
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int RESOURCE_LOCAL_VALUE = 1;
+
+	/**
+	 * An array of all the '<em><b>Unit Transaction Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final PersistenceUnitTransactionType[] VALUES_ARRAY =
+		new PersistenceUnitTransactionType[]
+		{
+			JTA,
+			RESOURCE_LOCAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Unit Transaction Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<PersistenceUnitTransactionType> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Unit Transaction Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PersistenceUnitTransactionType get(String literal)
+	{
+		for (int i = 0; i < VALUES_ARRAY.length; ++i)
+		{
+			PersistenceUnitTransactionType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal))
+			{
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Unit Transaction Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PersistenceUnitTransactionType getByName(String name)
+	{
+		for (int i = 0; i < VALUES_ARRAY.length; ++i)
+		{
+			PersistenceUnitTransactionType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name))
+			{
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Unit Transaction Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PersistenceUnitTransactionType get(int value)
+	{
+		switch (value)
+		{
+			case JTA_VALUE: return JTA;
+			case RESOURCE_LOCAL_VALUE: return RESOURCE_LOCAL;
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final int value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String name;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String literal;
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private PersistenceUnitTransactionType(int value, String name, String literal)
+	{
+		this.value = value;
+		this.name = name;
+		this.literal = literal;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue()
+	{
+	  return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName()
+	{
+	  return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLiteral()
+	{
+	  return literal;
+	}
+
+	/**
+	 * Returns the literal value of the enumerator, which is its string representation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		return literal;
+	}
+	
+} //PersistenceUnitTransactionType
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/Properties.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/Properties.java
new file mode 100644
index 0000000..96f128f
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/Properties.java
@@ -0,0 +1,180 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: Properties.java,v 1.1 2007/07/30 20:13:46 pfullbright Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Properties</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.Properties#getProperties <em>Properties</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getProperties()
+ * @model kind="class"
+ * @generated
+ */
+public class Properties extends EObjectImpl implements EObject
+{
+	/**
+	 * The cached value of the '{@link #getProperties() <em>Properties</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProperties()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Property> properties;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Properties()
+	{
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass()
+	{
+		return PersistencePackage.Literals.PROPERTIES;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Properties</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.jpt.core.internal.resource.persistence.Property}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Properties</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Properties</em>' containment reference list.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getProperties_Properties()
+	 * @model containment="true"
+	 * @generated
+	 */
+	public EList<Property> getProperties()
+	{
+		if (properties == null)
+		{
+			properties = new EObjectContainmentEList<Property>(Property.class, this, PersistencePackage.PROPERTIES__PROPERTIES);
+		}
+		return properties;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PROPERTIES__PROPERTIES:
+				return ((InternalEList<?>)getProperties()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PROPERTIES__PROPERTIES:
+				return getProperties();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PROPERTIES__PROPERTIES:
+				getProperties().clear();
+				getProperties().addAll((Collection<? extends Property>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PROPERTIES__PROPERTIES:
+				getProperties().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PROPERTIES__PROPERTIES:
+				return properties != null && !properties.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} // Properties
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/Property.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/Property.java
new file mode 100644
index 0000000..c95cab1
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/Property.java
@@ -0,0 +1,262 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: Property.java,v 1.1 2007/07/30 20:13:46 pfullbright Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Property</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.Property#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.jpt.core.internal.resource.persistence.Property#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getProperty()
+ * @model kind="class"
+ * @generated
+ */
+public class Property extends EObjectImpl implements EObject
+{
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected String value = VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Property()
+	{
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass()
+	{
+		return PersistencePackage.Literals.PROPERTY;
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getProperty_Name()
+	 * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+	 * @generated
+	 */
+	public String getName()
+	{
+		return name;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.Property#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	public void setName(String newName)
+	{
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PROPERTY__NAME, oldName, name));
+	}
+
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(String)
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage#getProperty_Value()
+	 * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
+	 * @generated
+	 */
+	public String getValue()
+	{
+		return value;
+	}
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jpt.core.internal.resource.persistence.Property#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	public void setValue(String newValue)
+	{
+		String oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PersistencePackage.PROPERTY__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PROPERTY__NAME:
+				return getName();
+			case PersistencePackage.PROPERTY__VALUE:
+				return getValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PROPERTY__NAME:
+				setName((String)newValue);
+				return;
+			case PersistencePackage.PROPERTY__VALUE:
+				setValue((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PROPERTY__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+			case PersistencePackage.PROPERTY__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID)
+	{
+		switch (featureID)
+		{
+			case PersistencePackage.PROPERTY__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case PersistencePackage.PROPERTY__VALUE:
+				return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString()
+	{
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(", value: ");
+		result.append(value);
+		result.append(')');
+		return result.toString();
+	}
+
+} // Property
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/JavaClassRefTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/JavaClassRefTranslator.java
new file mode 100644
index 0000000..68fe425
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/JavaClassRefTranslator.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ *  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.core.internal.resource.persistence.translators;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage;
+import org.eclipse.wst.common.internal.emf.resource.Translator;
+
+public class JavaClassRefTranslator extends Translator
+{
+	private static Translator[] children;
+	
+	
+	public JavaClassRefTranslator(String domNameAndPath, EStructuralFeature feature, int style) {
+		super(domNameAndPath, feature, style);
+	}
+	
+	public JavaClassRefTranslator(String domNameAndPath, EStructuralFeature feature) {
+		super(domNameAndPath, feature);
+	}
+	
+	
+	public Translator[] getChildren(Object target, int versionID) {
+		if (children == null) {
+			children = createChildren();
+		}
+		return children;
+	}
+	
+	private static Translator[] createChildren() {
+		return new Translator[] {
+			new Translator(TEXT_ATTRIBUTE_VALUE, PersistencePackage.eINSTANCE.getJavaClassRef_JavaClass())
+		};
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/MappingFileTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/MappingFileTranslator.java
new file mode 100644
index 0000000..5e67fb0
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/MappingFileTranslator.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ *  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.core.internal.resource.persistence.translators;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage;
+import org.eclipse.wst.common.internal.emf.resource.Translator;
+
+public class MappingFileTranslator extends Translator
+{
+	private static Translator[] children;
+	
+	
+	public MappingFileTranslator(String domNameAndPath, EStructuralFeature feature, int style) {
+		super(domNameAndPath, feature, style);
+	}
+
+	public MappingFileTranslator(String domNameAndPath, EStructuralFeature feature) {
+		super(domNameAndPath, feature);
+	}
+	
+	
+	public Translator[] getChildren(Object target, int versionID) {
+		if (children == null) {
+			children = createChildren();
+		}
+		return children;
+	}
+	
+	private static Translator[] createChildren() {
+		return new Translator[] {
+			new Translator(TEXT_ATTRIBUTE_VALUE, PersistencePackage.eINSTANCE.getMappingFileRef_FileName())
+		};
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/PersistenceTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/PersistenceTranslator.java
new file mode 100644
index 0000000..25ad387
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/PersistenceTranslator.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal.resource.persistence.translators;
+
+import org.eclipse.jpt.core.internal.resource.common.translators.BooleanTranslator;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage;
+import org.eclipse.wst.common.internal.emf.resource.ConstantAttributeTranslator;
+import org.eclipse.wst.common.internal.emf.resource.GenericTranslator;
+import org.eclipse.wst.common.internal.emf.resource.IDTranslator;
+import org.eclipse.wst.common.internal.emf.resource.RootTranslator;
+import org.eclipse.wst.common.internal.emf.resource.Translator;
+
+public class PersistenceTranslator extends RootTranslator
+	implements PersistenceXMLMapper
+{
+	public static PersistenceTranslator INSTANCE = new PersistenceTranslator();
+	
+	private static Translator[] children;
+	
+	private static PersistencePackage PERSISTENCE_PKG = PersistencePackage.eINSTANCE;
+	
+	
+	public PersistenceTranslator() {
+		super(PERSISTENCE, PERSISTENCE_PKG.eINSTANCE.getPersistence());
+	}
+	
+	public Translator[] getChildren(Object target, int versionID) {
+		if (children == null) {
+			children = createChildren();
+		}
+		return children;
+	}
+	
+	private static Translator[] createChildren() {
+		return new Translator[] {
+			IDTranslator.INSTANCE,
+			createVersionTranslator(),
+			new ConstantAttributeTranslator(XML_NS, PERSISTENCE_NS_URL),
+			new ConstantAttributeTranslator(XML_NS_XSI, XSI_NS_URL),
+			new ConstantAttributeTranslator(XSI_SCHEMA_LOCATION, PERSISTENCE_NS_URL + ' ' + PERSISTENCE_SCHEMA_LOC_1_0),
+			createPersistenceUnitTranslator()
+		};
+	}
+	
+	private static Translator createVersionTranslator() {
+		return new Translator(PERSISTENCE_VERSION, PERSISTENCE_PKG.getPersistence_Version(), DOM_ATTRIBUTE);
+	}
+	
+	private static Translator createPersistenceUnitTranslator() {
+		GenericTranslator translator = new GenericTranslator(PERSISTENCE_UNIT, PERSISTENCE_PKG.getPersistence_PersistenceUnits());
+		translator.setChildren(
+			new Translator[] {
+				IDTranslator.INSTANCE,
+				createPersistenceUnitNameTranslator(),
+				createTransactionTypeTranslator(),
+				createPersistenceUnitDescriptionTranslator(),
+				createPersistenceUnitProviderTranslator(),
+				createJtaDataSourceTranslator(),
+				createNonJtaDataSourceTranslator(),
+				createMappingFileTranslator(),
+				createJarFileTranslator(),
+				createClassTranslator(),
+				createExcludeUnlistedClassesTranslator(),
+				createPropertiesTranslator()
+			}
+		);
+		return translator;
+	}
+	
+	private static Translator createPersistenceUnitNameTranslator() {
+		return new Translator(PERSISTENCE_UNIT_NAME, PERSISTENCE_PKG.getPersistenceUnit_Name(), DOM_ATTRIBUTE);
+	}
+	
+	private static Translator createTransactionTypeTranslator() {
+		return new TransactionTypeTranslator();
+	}
+	
+	private static Translator createPersistenceUnitDescriptionTranslator() {
+		return new Translator(PERSISTENCE_UNIT_DESCRIPTION, PERSISTENCE_PKG.getPersistenceUnit_Description());
+	}
+	
+	private static Translator createPersistenceUnitProviderTranslator() {
+		return new Translator(PERSISTENCE_UNIT_PROVIDER, PERSISTENCE_PKG.getPersistenceUnit_Provider(), UNSET_IF_NULL);
+	}
+	
+	private static Translator createJtaDataSourceTranslator() {
+		return new Translator(JTA_DATA_SOURCE, PERSISTENCE_PKG.getPersistenceUnit_JtaDataSource());
+	}
+	
+	private static Translator createNonJtaDataSourceTranslator() {
+		return new Translator(NON_JTA_DATA_SOURCE, PERSISTENCE_PKG.getPersistenceUnit_NonJtaDataSource());
+	}
+	
+	private static Translator createMappingFileTranslator() {
+		return new MappingFileTranslator(MAPPING_FILE, PERSISTENCE_PKG.getPersistenceUnit_MappingFiles());
+	}
+	
+	private static Translator createJarFileTranslator() {
+		return new Translator(JAR_FILE, PERSISTENCE_PKG.getPersistenceUnit_JarFiles());
+	}
+	
+	private static Translator createClassTranslator() {
+		return new JavaClassRefTranslator(CLASS, PERSISTENCE_PKG.getPersistenceUnit_Classes());
+	}
+	
+	private static Translator createExcludeUnlistedClassesTranslator() {
+		return new BooleanTranslator(EXCLUDE_UNLISTED_CLASSES, PERSISTENCE_PKG.getPersistenceUnit_ExcludeUnlistedClasses(), UNSET_IF_NULL);
+	}
+	
+	private static Translator createPropertiesTranslator() {
+		GenericTranslator translator = new GenericTranslator(PROPERTIES, PERSISTENCE_PKG.getPersistenceUnit_Properties());
+		translator.setChildren(
+			new Translator[] {
+				createPropertyTranslator()
+			}
+		);
+		return translator;
+	}
+	
+	private static Translator createPropertyTranslator() {
+		GenericTranslator translator = new GenericTranslator(PROPERTY, PERSISTENCE_PKG.getProperties_Properties(), END_TAG_NO_INDENT);
+		translator.setChildren(
+			new Translator[] {
+				createPropertyNameTranslator(),
+				createPropertyValueTranslator()
+			}
+		);
+		return translator;
+	}
+	
+	private static Translator createPropertyNameTranslator() {
+		return new Translator(PROPERTY_NAME, PERSISTENCE_PKG.getProperty_Name(), DOM_ATTRIBUTE);
+	}
+	
+	private static Translator createPropertyValueTranslator() {
+		return new Translator(PROPERTY_VALUE, PERSISTENCE_PKG.getProperty_Value(), DOM_ATTRIBUTE);
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/PersistenceXMLMapper.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/PersistenceXMLMapper.java
new file mode 100644
index 0000000..d4b842c
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/PersistenceXMLMapper.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal.resource.persistence.translators;
+
+public interface PersistenceXMLMapper
+{
+	String XML_NS = "xmlns";  //$NON-NLS-1$
+	String XML_NS_XSI = "xmlns:xsi";  //$NON-NLS-1$
+	String XSI_SCHEMA_LOCATION = "xsi:schemaLocation";  //$NON-NLS-1$
+	String XSI_NS_URL = "http://www.w3.org/2001/XMLSchema-instance";  //$NON-NLS-1$
+	String PERSISTENCE_NS_URL = "http://java.sun.com/xml/ns/persistence";  //$NON-NLS-1$
+	String PERSISTENCE_SCHEMA_LOC_1_0 = "http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd";  //$NON-NLS-1$
+	
+	
+	String PERSISTENCE = "persistence";  //$NON-NLS-1$
+	String PERSISTENCE_VERSION = "version";  //$NON-NLS-1$
+	String PERSISTENCE_UNIT = "persistence-unit";  //$NON-NLS-1$
+	String PERSISTENCE_UNIT_NAME = "name";  //$NON-NLS-1$
+	String PERSISTENCE_UNIT_DESCRIPTION = "description";  //$NON-NLS-1$
+	String PERSISTENCE_UNIT_PROVIDER = "provider";  //$NON-NLS-1$
+	String JTA_DATA_SOURCE = "jta-data-source";  //$NON-NLS-1$
+	String NON_JTA_DATA_SOURCE = "non-jta-data-source";  //$NON-NLS-1$
+	String MAPPING_FILE = "mapping-file";  //$NON-NLS-1$
+	String JAR_FILE = "jar-file";  //$NON-NLS-1$
+	String CLASS = "class";  //$NON-NLS-1$
+	String EXCLUDE_UNLISTED_CLASSES = "exclude-unlisted-classes";  //$NON-NLS-1$
+	String PROPERTIES = "properties";  //$NON-NLS-1$
+	String PROPERTY = "property";  //$NON-NLS-1$
+	String PROPERTY_NAME = "name";  //$NON-NLS-1$
+	String PROPERTY_VALUE = "value";  //$NON-NLS-1$
+	String TRANSACTION_TYPE = "transaction-type";  //$NON-NLS-1$
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/TransactionTypeTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/TransactionTypeTranslator.java
new file mode 100644
index 0000000..9ad3c97
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/translators/TransactionTypeTranslator.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+package org.eclipse.jpt.core.internal.resource.persistence.translators;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnitTransactionType;
+import org.eclipse.wst.common.internal.emf.resource.Translator;
+
+public class TransactionTypeTranslator extends Translator
+	implements PersistenceXMLMapper
+{
+	public TransactionTypeTranslator() {
+		super(TRANSACTION_TYPE, PersistencePackage.eINSTANCE.getPersistenceUnit_TransactionType());
+	}
+	
+	public Object convertStringToValue(String strValue, EObject owner) {
+		String adjStrValue = strValue;
+		String jtaStrValue = PersistenceUnitTransactionType.JTA.getName();
+		String resourceLocalStrValue = PersistenceUnitTransactionType.RESOURCE_LOCAL.getName();
+		
+		if (jtaStrValue.equals(strValue.toUpperCase())) {  //$NON-NLS-1$
+			adjStrValue = jtaStrValue;
+		}
+		else if (resourceLocalStrValue.equals(strValue.toUpperCase())) {  //$NON-NLS-1$
+			adjStrValue = resourceLocalStrValue;
+		}
+		return super.convertStringToValue(adjStrValue, owner);
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/util/PersistenceAdapterFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/util/PersistenceAdapterFactory.java
new file mode 100644
index 0000000..ba8ea5d
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/util/PersistenceAdapterFactory.java
@@ -0,0 +1,239 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PersistenceAdapterFactory.java,v 1.2 2007/08/21 16:19:36 kmoore Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef;
+import org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef;
+import org.eclipse.jpt.core.internal.resource.persistence.Persistence;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit;
+import org.eclipse.jpt.core.internal.resource.persistence.Properties;
+import org.eclipse.jpt.core.internal.resource.persistence.Property;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage
+ * @generated
+ */
+public class PersistenceAdapterFactory extends AdapterFactoryImpl
+{
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static PersistencePackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PersistenceAdapterFactory()
+	{
+		if (modelPackage == null)
+		{
+			modelPackage = PersistencePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object)
+	{
+		if (object == modelPackage)
+		{
+			return true;
+		}
+		if (object instanceof EObject)
+		{
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch the delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PersistenceSwitch<Adapter> modelSwitch =
+		new PersistenceSwitch<Adapter>()
+		{
+			@Override
+			public Adapter casePersistence(Persistence object)
+			{
+				return createPersistenceAdapter();
+			}
+			@Override
+			public Adapter casePersistenceUnit(PersistenceUnit object)
+			{
+				return createPersistenceUnitAdapter();
+			}
+			@Override
+			public Adapter caseMappingFileRef(MappingFileRef object)
+			{
+				return createMappingFileRefAdapter();
+			}
+			@Override
+			public Adapter caseJavaClassRef(JavaClassRef object)
+			{
+				return createJavaClassRefAdapter();
+			}
+			@Override
+			public Adapter caseProperties(Properties object)
+			{
+				return createPropertiesAdapter();
+			}
+			@Override
+			public Adapter caseProperty(Property object)
+			{
+				return createPropertyAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object)
+			{
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target)
+	{
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.resource.persistence.Persistence <em>Persistence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Persistence
+	 * @generated
+	 */
+	public Adapter createPersistenceAdapter()
+	{
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit <em>Unit</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit
+	 * @generated
+	 */
+	public Adapter createPersistenceUnitAdapter()
+	{
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef <em>Mapping File Ref</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef
+	 * @generated
+	 */
+	public Adapter createMappingFileRefAdapter()
+	{
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef <em>Java Class Ref</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef
+	 * @generated
+	 */
+	public Adapter createJavaClassRefAdapter()
+	{
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.resource.persistence.Properties <em>Properties</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Properties
+	 * @generated
+	 */
+	public Adapter createPropertiesAdapter()
+	{
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jpt.core.internal.resource.persistence.Property <em>Property</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jpt.core.internal.resource.persistence.Property
+	 * @generated
+	 */
+	public Adapter createPropertyAdapter()
+	{
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter()
+	{
+		return null;
+	}
+
+} //PersistenceAdapterFactory
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/util/PersistenceSwitch.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/util/PersistenceSwitch.java
new file mode 100644
index 0000000..27f0363
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/resource/persistence/util/PersistenceSwitch.java
@@ -0,0 +1,261 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PersistenceSwitch.java,v 1.2 2007/08/21 16:19:36 kmoore Exp $
+ */
+package org.eclipse.jpt.core.internal.resource.persistence.util;
+
+import java.util.List;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jpt.core.internal.resource.persistence.JavaClassRef;
+import org.eclipse.jpt.core.internal.resource.persistence.MappingFileRef;
+import org.eclipse.jpt.core.internal.resource.persistence.Persistence;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistenceUnit;
+import org.eclipse.jpt.core.internal.resource.persistence.Properties;
+import org.eclipse.jpt.core.internal.resource.persistence.Property;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jpt.core.internal.resource.persistence.PersistencePackage
+ * @generated
+ */
+public class PersistenceSwitch<T>
+{
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static PersistencePackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PersistenceSwitch()
+	{
+		if (modelPackage == null)
+		{
+			modelPackage = PersistencePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T doSwitch(EObject theEObject)
+	{
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(EClass theEClass, EObject theEObject)
+	{
+		if (theEClass.eContainer() == modelPackage)
+		{
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else
+		{
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(int classifierID, EObject theEObject)
+	{
+		switch (classifierID)
+		{
+			case PersistencePackage.PERSISTENCE:
+			{
+				Persistence persistence = (Persistence)theEObject;
+				T result = casePersistence(persistence);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PersistencePackage.PERSISTENCE_UNIT:
+			{
+				PersistenceUnit persistenceUnit = (PersistenceUnit)theEObject;
+				T result = casePersistenceUnit(persistenceUnit);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PersistencePackage.MAPPING_FILE_REF:
+			{
+				MappingFileRef mappingFileRef = (MappingFileRef)theEObject;
+				T result = caseMappingFileRef(mappingFileRef);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PersistencePackage.JAVA_CLASS_REF:
+			{
+				JavaClassRef javaClassRef = (JavaClassRef)theEObject;
+				T result = caseJavaClassRef(javaClassRef);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PersistencePackage.PROPERTIES:
+			{
+				Properties properties = (Properties)theEObject;
+				T result = caseProperties(properties);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PersistencePackage.PROPERTY:
+			{
+				Property property = (Property)theEObject;
+				T result = caseProperty(property);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Persistence</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Persistence</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePersistence(Persistence object)
+	{
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Unit</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Unit</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePersistenceUnit(PersistenceUnit object)
+	{
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Mapping File Ref</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Mapping File Ref</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseMappingFileRef(MappingFileRef object)
+	{
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Java Class Ref</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Java Class Ref</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseJavaClassRef(JavaClassRef object)
+	{
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Properties</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Properties</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseProperties(Properties object)
+	{
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Property</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Property</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseProperty(Property object)
+	{
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T defaultCase(EObject object)
+	{
+		return null;
+	}
+
+} //PersistenceSwitch
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/synch/SynchronizeClassesJob.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/synch/SynchronizeClassesJob.java
index ff760c1..36cf145 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/synch/SynchronizeClassesJob.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/synch/SynchronizeClassesJob.java
@@ -92,10 +92,9 @@
 		PersistenceResource resource = (PersistenceResource) persistenceUnit.eResource();
 		
 		persistenceUnit.getClasses().clear();
-		for (Iterator<String> stream = mappedTypeNames(persistenceUnit); stream.hasNext(); ) {
-			String typeName = stream.next();
+		for (Iterator<String> stream = this.sortedMappedTypeNames(persistenceUnit); stream.hasNext(); ) {
 			JavaClassRef classRef = PersistenceFactory.eINSTANCE.createJavaClassRef();
-			classRef.setJavaClass(typeName);
+			classRef.setJavaClass(stream.next());
 			persistenceUnit.getClasses().add(classRef);
 		}
 		
@@ -111,15 +110,17 @@
 		return Status.OK_STATUS;
 	}
 	
+	private Iterator<String> sortedMappedTypeNames(PersistenceUnit persistenceUnit) {
+		return CollectionTools.sort(this.mappedTypeNames(persistenceUnit));
+	}
+	
 	private Iterator<String> mappedTypeNames(PersistenceUnit persistenceUnit) {
-		return CollectionTools.sort(
-			new TransformationIterator<IPersistentType, String>(mappedTypes(persistenceUnit)) {
-				@Override
-				protected String transform(IPersistentType next) {
-					return next.findJdtType().getFullyQualifiedName();
-				}
+		return new TransformationIterator<IPersistentType, String>(this.mappedTypes(persistenceUnit)) {
+			@Override
+			protected String transform(IPersistentType pType) {
+				return pType.findJdtType().getFullyQualifiedName();
 			}
-		);
+		};
 	}
 	
 	private Iterator<IPersistentType> mappedTypes(PersistenceUnit persistenceUnit) {
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 814c6a8..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-build.xml
-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 ee4b8c1..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:10:38 EDT 2007
-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 38a4d91..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/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.db.ui
-Bundle-Version: 1.0.0.qualifier
-Bundle-ClassPath: .
-Bundle-Localization: plugin
-Export-Package: org.eclipse.jpt.db.ui.internal; x-friends:="org.eclipse.jpt.ui"
-Require-Bundle: org.eclipse.ui,
- org.eclipse.jpt.db,
- org.eclipse.datatools.connectivity.ui,
- org.eclipse.datatools.sqltools.editor.core
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
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 9e73bda..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>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>
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 0d56981..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/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
-###############################################################################
-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 bf648aa..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/component.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><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 2b0e583..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/plugin.properties
+++ /dev/null
@@ -1,25 +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
-###############################################################################
-# ====================================================================
-# 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 Tools - DB UI
-providerName = Eclipse.org
-
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 632fe81..0000000
--- a/jpa/plugins/org.eclipse.jpt.db.ui/src/org/eclipse/jpt/db/ui/internal/DTPUiTools.java
+++ /dev/null
@@ -1,99 +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.db.ui.internal;
-
-import org.eclipse.datatools.connectivity.ICategory;
-import org.eclipse.datatools.connectivity.IConnectionProfile;
-import org.eclipse.datatools.connectivity.IProfileListener;
-import org.eclipse.datatools.connectivity.ProfileManager;
-import org.eclipse.datatools.connectivity.internal.ConnectionProfileManager;
-import org.eclipse.datatools.connectivity.internal.ui.wizards.CPWizardNode;
-import org.eclipse.datatools.connectivity.internal.ui.wizards.NewCPWizard;
-import org.eclipse.datatools.connectivity.internal.ui.wizards.ProfileWizardProvider;
-import org.eclipse.datatools.connectivity.ui.wizards.IWizardCategoryProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.jpt.db.internal.ConnectionProfileRepository;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- *  ConnectionProfileUiTools
- */
-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 is cancelled. ConnectionProfileRepository 
-	 * can be used to retrieve the added connection profile.
-	 */
-	public static String createNewProfile() {
-		NewCPWizard wizard;
-		WizardDialog wizardDialog;
-
-		// Filter datasource category
-	  	ViewerFilter viewerFilter = new ViewerFilter() {
-
-			public boolean select( Viewer viewer, Object parentElement, Object element) {
-				
-				CPWizardNode wizardNode = ( CPWizardNode) element;
-				if( !( wizardNode.getProvider() instanceof IWizardCategoryProvider)) {
-					ICategory cat = ConnectionProfileManager.getInstance().getProvider(
-									(( ProfileWizardProvider) wizardNode.getProvider()).getProfile()).getCategory();
-					
-					// Only display wizards belong to database category
-					while( cat != null) {
-						if( cat.getId().equals( ConnectionProfileRepository.DATABASE_CATEGORY_ID))
-							return true;
-						else
-							cat = cat.getParent();
-					}
-				}
-				return false;
-			}
-		};
-		wizard = new NewCPWizard( viewerFilter, null);
-		Shell currentShell = Display.getCurrent().getActiveShell();
-		wizardDialog = new WizardDialog( currentShell, wizard);
-		wizardDialog.setBlockOnOpen( true);
-		
-		LocalProfileListener listener = new LocalProfileListener();
-		ProfileManager.getInstance().addProfileListener( listener);
-		
-		if( wizardDialog.open() == Window.CANCEL) {
-			ProfileManager.getInstance().removeProfileListener( listener);
-			return null;
-		}
-		IConnectionProfile addedProfile = listener.addedProfile;
-		ProfileManager.getInstance().removeProfileListener( listener);
-		
-		return addedProfile.getName();
-	}
-
-	private static class LocalProfileListener implements IProfileListener {
-		IConnectionProfile addedProfile;
-		
-		public void profileAdded( IConnectionProfile profile) {
-			addedProfile = profile;
-		}
-	
-		public void profileChanged( IConnectionProfile profile) {
-			// do nothing
-		}
-	
-		public void profileDeleted( IConnectionProfile profile) {
-			// do nothing
-		}
-	}
-		  
-}
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 814c6a8..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-build.xml
-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 797ea02..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:10:29 EDT 2007
-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 a8da475..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/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
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.eclipse.jpt.db.internal.JptDbPlugin
-Bundle-ClassPath: .
-Bundle-Localization: plugin
-Eclipse-LazyStart: true
-Export-Package: org.eclipse.jpt.db.internal
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.datatools.sqltools.editor.core,
- org.eclipse.jpt.utility
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
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 9e73bda..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>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>
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 974eada..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/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
-###############################################################################
-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 644c396..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/component.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><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 e87a2d3..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/plugin.properties
+++ /dev/null
@@ -1,25 +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
-###############################################################################
-# ====================================================================
-# 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 Tools - DB
-providerName = Eclipse.org
-
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Catalog.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Catalog.java
deleted file mode 100644
index 0c4238e..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Catalog.java
+++ /dev/null
@@ -1,108 +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.db.internal;
-
-import java.text.Collator;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
-import org.eclipse.emf.common.util.EList;
-
-/**
- *  Wrap a DTP Catalogs
- */
-final class Catalog extends DTPWrapper implements Comparable<Catalog> {
-	private final Database database;
-	final org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog;
-	@SuppressWarnings("unused")
-	private ICatalogObjectListener catalogListener;		//TODO listen for change
-	
-	// ********** constructors **********
-
-	Catalog( Database database, org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog) {
-		super();
-		this.database = database;
-		this.dtpCatalog = dtpCatalog;
-	}
-
-	// ********** behavior **********
-	
-	@Override
-	protected boolean connectionIsOnline() {
-		return this.database.connectionIsOnline();
-	}
-
-	@SuppressWarnings("unused")
-	private ICatalogObjectListener buildCatalogListener() {
-       return new ICatalogObjectListener() {
-    	    public void notifyChanged( final ICatalogObject catalog, final int eventType) {     
-    			if( catalog == Catalog.this.dtpCatalog) {	
-//    				Catalog.this.refresh();
-//    				Catalog.this.database.catalogChanged( Catalog.this, eventType);
-    			}
-    	    }
-        };
-    }
-
-	@Override
-	protected void dispose() {
-//		this.removeCatalogObjectListener(( ICatalogObject) this.dtpCatalog, this.catalogListener);
-	}
-	
-	boolean wraps( org.eclipse.datatools.modelbase.sql.schema.Catalog catalog) {
-		return this.dtpCatalog == catalog;
-	}
-	
-	// ********** queries **********
-
-	@Override
-	public String getName() {
-		return this.dtpCatalog.getName();
-	}
-	
-	boolean isCaseSensitive() {
-		return this.database.isCaseSensitive();
-	}
-
-	Column column( org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		return this.database.column(dtpColumn);
-	}
-
-	// ***** schemata
-
-	synchronized Set<Schema> buildSchemata() {
-		EList<org.eclipse.datatools.modelbase.sql.schema.Schema> dtpSchemata = this.dtpSchemata();
-		
-		Set<Schema> result = new HashSet<Schema>( dtpSchemata.size());
-		for (org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema : dtpSchemata) {
-			result.add( this.wrap(dtpSchema));
-		}
-		return result;
-	}
-
-	@SuppressWarnings("unchecked")
-	private EList<org.eclipse.datatools.modelbase.sql.schema.Schema> dtpSchemata() {
-		return this.dtpCatalog.getSchemas();
-	}
-
-	private Schema wrap( org.eclipse.datatools.modelbase.sql.schema.Schema schema) {
-
-		return new Schema( this.database, schema);
-	}
-
-	// ********** Comparable implementation **********
-
-	public int compareTo( Catalog catalog) {
-		return Collator.getInstance().compare( this.getName(), catalog.getName());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Column.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Column.java
deleted file mode 100644
index 547ba01..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Column.java
+++ /dev/null
@@ -1,162 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.text.Collator;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
-import org.eclipse.datatools.modelbase.sql.datatypes.DataType;
-import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
-import org.eclipse.jpt.utility.internal.JavaType;
-import org.eclipse.jpt.utility.internal.NameTools;
-
-/**
- *  Wrap a DTP Column
- */
-public final class Column extends DTPWrapper implements Comparable<Column> {
-	private final Table table;
-	private final org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn;
-	private ICatalogObjectListener columnListener;
-
-	// TODO Object is the default?
-	private static final JavaType DEFAULT_JAVA_TYPE = new JavaType(java.lang.Object.class);
-
-	private static final JavaType BLOB_JAVA_TYPE = new JavaType(java.sql.Blob.class);
-	private static final JavaType BYTE_ARRAY_JAVA_TYPE = new JavaType(byte[].class);
-
-	private static final JavaType CLOB_JAVA_TYPE = new JavaType(java.sql.Clob.class);
-	private static final JavaType STRING_JAVA_TYPE = new JavaType(java.lang.String.class);
-
-
-	// ********** constructors **********
-
-	Column( Table table, org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		super();
-		this.table = table;
-		this.dtpColumn = dtpColumn;
-		this.initialize();
-	}
-
-	// ********** behavior **********
-
-	private void initialize() {
-		if( this.connectionIsOnline()) {
-			this.columnListener = this.buildColumnListener();
-			this.addCatalogObjectListener(( ICatalogObject) this.dtpColumn, this.columnListener);
-		}
-	}
-	
-	@Override
-	protected boolean connectionIsOnline() {
-		return this.table.connectionIsOnline();
-	}
-	
-	private ICatalogObjectListener buildColumnListener() {
-       return new ICatalogObjectListener() {
-    	    public void notifyChanged( final ICatalogObject column, final int eventType) { 
-//				TODO
-//    			if( column == Column.this.dtpColumn) {	    	    	
-//    				Column.this.table.columnChanged( Column.this, eventType);
-//    			}
-    	    }
-        };
-    }
-	
-	@Override
-	protected void dispose() {
-		
-		this.removeCatalogObjectListener(( ICatalogObject) this.dtpColumn, this.columnListener);
-	}
-	
-	// ********** queries **********
-
-	@Override
-	public String getName() {
-		return this.dtpColumn.getName();
-	}
-
-	boolean isCaseSensitive() {
-		return this.table.isCaseSensitive();
-	}
-
-	public String dataTypeName() {
-		DataType dataType = this.dtpColumn.getDataType();
-		return (dataType == null) ? null : dataType.getName();
-	}
-
-	public String javaFieldName() {
-		String jName = this.getName();
-		if ( ! this.isCaseSensitive()) {
-			jName = jName.toLowerCase();
-		}
-		return NameTools.convertToJavaIdentifier(jName);
-	}
-
-	public boolean matchesJavaFieldName(String javaFieldName) {
-		return this.isCaseSensitive() ?
-			this.getName().equals(javaFieldName)
-		:
-			this.getName().equalsIgnoreCase(javaFieldName);
-	}
-
-	/**
-	 * Return a Java type declaration that is reasonably
-	 * similar to the column's data type.
-	 */
-	public String javaTypeDeclaration() {
-		return this.javaType().declaration();
-	}
-
-	/**
-	 * Return a Java type that is reasonably
-	 * similar to the column's data type.
-	 */
-	public JavaType javaType() {
-		DataType dataType = this.dtpColumn.getDataType();
-		return (dataType instanceof PredefinedDataType) ?
-			this.jpaSpecCompliantJavaType(DTPTools.javaTypeFor(((PredefinedDataType) dataType).getPrimitiveType()))
-		:
-			DEFAULT_JAVA_TYPE;
-	}
-
-	/**
-	 * The JDBC spec says JDBC drivers should be able to map BLOBs and CLOBs
-	 * directly, but the JPA spec does not allow them.
-	 */
-	private JavaType jpaSpecCompliantJavaType(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;
-	}
-
-	public boolean isLob() {
-		DataType dataType = this.dtpColumn.getDataType();
-		return (dataType instanceof PredefinedDataType) ?
-			DTPTools.dataTypeIsLob(((PredefinedDataType) dataType).getPrimitiveType())
-		:
-			false;
-	}
-
-	boolean wraps( org.eclipse.datatools.modelbase.sql.tables.Column column) {
-		return this.dtpColumn == column;
-	}
-
-	// ********** Comparable implementation **********
-	
-	public int compareTo( Column column) {
-		return Collator.getInstance().compare( this.getName(), column.getName());
-	}
-}
-
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Connection.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Connection.java
deleted file mode 100644
index 3e1e736..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Connection.java
+++ /dev/null
@@ -1,66 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.text.Collator;
-
-
-/**
- *  Connection wrapper base class.
- */
-public abstract class Connection extends DTPWrapper implements Comparable<Connection> {
-
-	// ********** constructors **********
-
-	/**
-	 * Create a wrapper for the given IManagedConnection.
-	 */
-	static Connection createConnection( org.eclipse.datatools.connectivity.IManagedConnection dtpConnection) {
-		return ( dtpConnection == null) ? NullConnection.instance() : new DTPConnectionWrapper( dtpConnection);
-	}
-
-	Connection() {
-		super();
-	}
-
-	// ********** listeners **********
-
-	public abstract void addConnectionListener( ConnectionListener listener);
-
-	public abstract void removeConnectionListener( ConnectionListener listener);
-
-
-	// ********** behavior **********
-
-	abstract void databaseChanged( Database database, int eventType);
-
-	abstract void schemaChanged( Schema schema, Database database, int eventType);
-	
-	abstract void tableChanged( Table table, Schema schema, Database database, int eventType);
-	
-
-	// ********** queries **********
-	
-	public abstract boolean isConnected();
-	
-	public abstract String getFactoryId();
-
-	@Override
-	protected boolean connectionIsOnline() {
-		return this.isConnected();
-	}
-
-	// ********** Comparable implementation **********
-
-	public int compareTo(Connection connection) {
-		return Collator.getInstance().compare( this.getName(), connection.getName());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionListener.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionListener.java
deleted file mode 100644
index d778cbb..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionListener.java
+++ /dev/null
@@ -1,31 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-
-/**
- * ConnectionListener integrate th DTP IManagedConnectionListener listener.
- * This class purpose is to decouple from the DTP listeners by accepting wrappers as parameter.
- * 
- * @see org.eclipse.datatools.connectivity.IManagedConnectionListener
- */
-public interface ConnectionListener {
-    
-    public void opened( Connection connection);
-    public void modified( Connection connection);
-    public boolean okToClose( Connection connection);
-    public void aboutToClose( Connection connection);
-    public void closed( Connection connection);
-
-    public void databaseChanged( Connection connection, Database database);
-    public void schemaChanged( Connection connection, Schema schema);
-    public void tableChanged( Connection connection, Table table);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfile.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfile.java
deleted file mode 100644
index e0c38d3..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfile.java
+++ /dev/null
@@ -1,257 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.text.Collator;
-import java.util.NoSuchElementException;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
-
-/**
- *  ConnectionProfile wrapper base class.
- */
-public abstract class ConnectionProfile extends DTPWrapper implements Comparable<ConnectionProfile> {
-	
-	private Connection connection; // Lazy initialized
-	private Database database; // Lazy initialized
-	private String catalogName;  // Catalog used for this profile
-	
-	private ConnectionListener connectionListener;
-	
-	private ConnectionProfileRepository profileRepository;
-	
-	// ********** constructors **********
-
-	static ConnectionProfile createProfile( ConnectionProfileRepository profileRepository, org.eclipse.datatools.connectivity.IConnectionProfile dtpProfile) {
-		return ( dtpProfile == null) ? NullConnectionProfile.instance() : new DTPConnectionProfileWrapper( profileRepository, dtpProfile);
-	}
-
-	ConnectionProfile( ConnectionProfileRepository profileRepository) {
-		super();
-		this.profileRepository = profileRepository;
-		this.connectionListener = buildConnectionListener();
-		this.catalogName = "";
-	}
-	
-	// ********** behavior **********
-
-	public abstract void connect();
-	
-	public abstract void disconnect();
-	
-	protected abstract Connection buildConnection();
-	
-	protected abstract Database buildDatabase();
-	
-	abstract void databaseChanged( Database db, int eventType);
-	
-	abstract void catalogChanged( Catalog catalog, Database db, int eventType);
-	
-	abstract void schemaChanged( Schema schema, Database db, int eventType);
-	
-	abstract void tableChanged( Table table, Schema schema, Database db, int eventType);
-
-	protected void refreshDatabase() {
-		this.disposeDatabase();
-		this.database = null;
-    }
-    
-	@Override
-	protected void dispose() {
-		this.disengageConnectionListener();
-		
-		this.disposeConnection();
-		this.disposeDatabase();
-	}
-	
-	private void disposeConnection() {
-		if( this.connection != null) {
-			this.getConnection().dispose();
-		}
-	}
-	
-	private void disposeDatabase() {
-		if( this.database != null) {
-			this.getDatabase().dispose();
-		}
-	}
-
-	// ********** queries **********
-	
-	public Connection getConnection() {
-		
-		if( this.connection == null) {
-			this.connection = this.buildConnection();
-			this.engageConnectionListener();
-
-		}
-		return this.connection;
-	}
-
-	public Database getDatabase() {
-		
-		if( this.database == null) {
-			this.database = this.buildDatabase();
-			this.setDefaultCatalogName();
-		}
-		return this.database;
-	}
-	
-	public abstract String getDatabaseName();
-
-	public abstract String getDatabaseProduct();
-	
-	public abstract String getDatabaseVendor();
-	
-	public abstract String getDatabaseVersion();
-	
-	public abstract String getDriverClass();
-	
-	public abstract String getUrl();
-	
-	public abstract String getUserName();
-	
-	public abstract String getUserPassword();
-	
-	public abstract String getInstanceId();
-
-	public abstract String getProviderId();
-
-	public abstract String getDriverDefinitionId();
-	
-	public abstract String getDriverJarList();
-	
-	public abstract boolean isConnected();
-
-	@Override
-	protected boolean connectionIsOnline() {
-		return this.isConnected();
-	}
-	
-	abstract boolean wraps( org.eclipse.datatools.connectivity.IConnectionProfile dtpProfile);
-	
-	public boolean isNull() {
-		return true;
-	}
-	
-	ConnectionProfileRepository getProfileRepository() {
-		return this.profileRepository;
-	}
-	
-	public String getCatalogName() {
-		return this.catalogName;
-	}
-	
-	/**
-	 * Set the default catalog name for this profile.
-	 */
-	public void setDefaultCatalogName() {
-		this.setCatalogName( this.database.getDefaultCatalogName());
-	}
-
-	/**
-	 * Can only set the catalog to use for this profile, when the database supports catalogs.
-	 */
-	public void setCatalogName( String catalogName) {
-		if( this.catalogName == catalogName) {
-			return;
-		}
-		if( this.database.supportsCatalogs()) {
-			String name = ( catalogName != null) ? catalogName : this.database.getDefaultCatalogName();
-			
-			Catalog catalog = this.database.catalogNamed( name);
-			if( catalog == null) {
-				throw new NoSuchElementException();
-			}
-			this.catalogName = name;
-			this.database.refresh();
-			this.catalogChanged( catalog, this.database, ICatalogObjectListener.EventTypeEnumeration.ELEMENT_REFRESH);
-		}
-		else {
-			this.catalogName = "";
-			this.database.refresh();
-		}
-	}
-	
-	// ********** listeners **********
-
-	abstract public void addProfileListener( ProfileListener listener);
-
-	abstract public void removeProfileListener( ProfileListener listener);
-
-	abstract public void addConnectionListener( ConnectionListener listener);
-
-	abstract public void removeConnectionListener( ConnectionListener listener);
-
-    private ConnectionListener buildConnectionListener() {
-		return new ConnectionListener() {
-
-			public void aboutToClose(Connection c) {
-				// not interested to this event.
-			}
-
-			public void closed(Connection c) {
-				ConnectionProfile.this.refreshDatabase();
-			}
-
-			public void modified(Connection c) {
-				// not interested to this event.
-				return;
-			}
-
-			public boolean okToClose(Connection c) {
-				// not interested to this event.
-				return true;
-			}
-
-			public void opened(Connection c) {
-				ConnectionProfile.this.refreshDatabase();
-			}
-
-			public void databaseChanged(Connection c, final Database db) {
-				// not interested to this event.
-				return;
-			}
-			
-			public void schemaChanged(Connection c, final Schema schema) {
-				// not interested to this event.
-				return;
-			}
-
-			public void tableChanged(Connection c, final Table table) {
-				// not interested to this event.
-				return;
-			}
-		};
-    }
-    
-	protected void disengageConnectionListener() {
-		this.removeConnectionListener();
-	}
-
-	protected void engageConnectionListener() {
-		this.addConnectionListener();
-	}
-
-	private void addConnectionListener() {
-		this.addConnectionListener( this.connectionListener);
-	}
-	
-	private void removeConnectionListener() {
-		this.removeConnectionListener( this.connectionListener);
-	}
-	
-	// ********** Comparable implementation **********
-
-	public int compareTo( ConnectionProfile connectionProfile) {
-		return Collator.getInstance().compare( this.getName(), connectionProfile.getName());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfileRepository.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfileRepository.java
deleted file mode 100644
index 25e7ea7..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ConnectionProfileRepository.java
+++ /dev/null
@@ -1,253 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import org.eclipse.datatools.connectivity.IConnectionProfile;
-import org.eclipse.datatools.connectivity.IProfileListener;
-import org.eclipse.datatools.connectivity.ProfileManager;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- *  ConnectionProfileRepository is a mediator to the DTP ProfileManager.
- */
-public class ConnectionProfileRepository {
-	private ProfileManager dtpProfileManager;
-	
-	private LocalRepositoryListener repositoryListener;
-	private LocalProfileListener profileListener;
-	private Set<ConnectionProfile> profiles;
-
-	private static ConnectionProfileRepository INSTANCE;
-
-	public static final String DATABASE_CATEGORY_ID = "org.eclipse.datatools.connectivity.db.category"; //$NON-NLS-1$
-
-	/**
-	 * singleton support
-	 */
-	public static ConnectionProfileRepository instance() {
-		if (INSTANCE == null) {
-			INSTANCE = new ConnectionProfileRepository();
-		}
-		return INSTANCE;
-	}
-	
-	// ********** constructors **********
-
-	private ConnectionProfileRepository() {
-		super();
-		this.dtpProfileManager = ProfileManager.getInstance();
-	}
-
-	// ********** behavior **********
-	
-	public void initializeListeners() {
-
-		if( this.repositoryListener == null) {
-			this.repositoryListener = new LocalRepositoryListener();
-			this.dtpProfileManager.addProfileListener( this.repositoryListener);
-		}
-		if( this.profileListener == null) {
-			this.profileListener = new LocalProfileListener();
-			this.dtpProfileManager.addProfileListener( this.profileListener);	
-		}
-	}
-
-	public void disposeListeners() {
-		for( Iterator<ConnectionProfile> stream = this.profiles(); stream.hasNext(); ) {
-			stream.next().dispose();
-		}
-		if( this.repositoryListener != null) {
-			this.dtpProfileManager.removeProfileListener( this.repositoryListener);
-			this.repositoryListener = null;
-		}
-		if( this.profileListener != null) {
-			this.dtpProfileManager.removeProfileListener( this.profileListener);
-			this.profileListener = null;
-		}
-	}
-
-	public Connection getConnectionWithProfileNamed( String name) {
-		return this.profileNamed( name).getConnection();
-	}
-	
-	
-	@Override
-	public String toString() {
-		return this.profiles.toString();
-	}
-	
-	// ********** profiles
-
-	public Iterator<ConnectionProfile> profiles() {
-		return this.getProfiles().iterator();
-	}
-
-	public Iterator<String> profileNames() {
-		return new TransformationIterator<ConnectionProfile, String>( this.profiles()) {
-			@Override
-			protected String transform( ConnectionProfile profile) {
-				 return profile.getName();
-			}
-		};
-	}
-
-	public ConnectionProfile profileNamed( String name) {
-		for( Iterator<ConnectionProfile> stream = this.profiles(); stream.hasNext(); ) {
-			ConnectionProfile profile = stream.next();
-			if( profile.getName().equals( name)) {
-				return profile;
-			}
-		}
-		return NullConnectionProfile.instance();
-	}
-	
-	private Set<ConnectionProfile> getProfiles() {
-
-		if( this.profiles == null) {
-			this.profiles = this.buildProfiles();
-		}
-		return this.profiles;
-	}
-
-	private Set<ConnectionProfile> buildProfiles() {
-		IConnectionProfile[] dtpProfiles = this.dtpProfileManager.getProfiles();
-		Set<ConnectionProfile> result = new HashSet<ConnectionProfile>( dtpProfiles.length);
-		for (IConnectionProfile dtpProfile : dtpProfiles) {
-			result.add( ConnectionProfile.createProfile( this, dtpProfile));
-		}
-		return result;
-	}
-
-	void addProfile( IConnectionProfile dtpProfile) {
-		
-		if( !this.profileExists( dtpProfile)) {
-			ConnectionProfile newProfile = ConnectionProfile.createProfile( ConnectionProfileRepository.this, dtpProfile);
-			this.profiles.add( newProfile);
-		}
-	}
-	
-	void removeProfile( IConnectionProfile dtpProfile) {
-		
-		this.profiles.remove( this.getProfile( dtpProfile));
-	}
-	
-	private boolean profileExists( IConnectionProfile dtpProfile) {
-
-		return ( this.getProfile( dtpProfile) == null) ? false : true;
-	}
-
-	ConnectionProfile getProfile( IConnectionProfile dtpProfile) {
-		
-		for( Iterator<ConnectionProfile> stream = this.profiles(); stream.hasNext(); ) {
-			ConnectionProfile profile = stream.next();
-			if( profile.wraps( dtpProfile)) {
-				return profile;
-			}
-		}
-		return null;
-	}
-
-	// ********** listeners **********
-
-	public void addProfileListener( ProfileListener listener) {
-
-		this.profileListener.addProfileListener( listener);
-	}
-
-	public void removeProfileListener( ProfileListener listener) {
-		
-		this.profileListener.removeProfileListener( listener);
-	}
-
-	@SuppressWarnings("unused")
-	private void addInternalProfileListener( IProfileListener listener) {
-
-		this.dtpProfileManager.addProfileListener( listener);
-	}
-
-	@SuppressWarnings("unused")
-	private void removeInternalProfileListener( IProfileListener listener) {
-		
-		this.dtpProfileManager.removeProfileListener( listener);
-	}
-
-	// ********** member class **********
-	/**
-	 * Listens to ProfileManager events and updates the repository.
-	 */
-	private class LocalRepositoryListener implements IProfileListener {
-
-		LocalRepositoryListener() {
-			super();
-		}
-
-		public void profileAdded( IConnectionProfile connectionProfile) {
-			ConnectionProfileRepository.this.addProfile( connectionProfile);
-		}
-
-		public void profileChanged( IConnectionProfile connectionProfile) {
-			// do nothing
-		}
-
-		public void profileDeleted( IConnectionProfile connectionProfile) {
-			ConnectionProfileRepository.this.removeProfile( connectionProfile);
-		}
-	}
-	
-
-	/**
-	 * This listener translates and forwards IProfileListener events to ProfileListener.
-	 */
-	private class LocalProfileListener implements IProfileListener {
-		private Collection<ProfileListener> listeners = new ArrayList<ProfileListener>();
-
-		LocalProfileListener() {
-			super();
-		}
-
-		void addProfileListener( ProfileListener listener) {
-			this.listeners.add( listener);
-		}
-
-		void removeProfileListener( ProfileListener listener) {
-			this.listeners.remove( listener);
-		}
-		
-		// ********** behavior **********
-		
-		public void profileAdded( IConnectionProfile dtpProfile) {
-			ConnectionProfile profile = getProfile( dtpProfile);
-			for (ProfileListener listener : this.listeners) {
-				listener.profileAdded( profile);
-			}
-		}
-
-		public void profileChanged( IConnectionProfile dtpProfile) {
-			ConnectionProfile profile = getProfile( dtpProfile);
-			for (ProfileListener listener : this.listeners) {
-				listener.profileChanged( profile);
-			}
-		}
-
-		public void profileDeleted( IConnectionProfile dtpProfile) {
-			String profileName = dtpProfile.getName();
-			for (ProfileListener listener : this.listeners) {
-				listener.profileDeleted( profileName);
-			}
-		}
-	}
-}
-
-
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 9d62b48..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionProfileWrapper.java
+++ /dev/null
@@ -1,245 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.Properties;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.datatools.connectivity.IManagedConnection;
-import org.eclipse.datatools.connectivity.db.generic.IDBDriverDefinitionConstants;
-import org.eclipse.datatools.connectivity.drivers.DriverManager;
-import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
-import org.eclipse.datatools.sqltools.core.profile.ProfileUtil;
-
-/**
- *  Wrap a DTP ConnectionProfile
- */
-public final class DTPConnectionProfileWrapper extends ConnectionProfile {
-	
-	final private org.eclipse.datatools.connectivity.IConnectionProfile dtpConnectionProfile;
-	
-    public static final String CONNECTION_TYPE = "java.sql.Connection";  //$NON-NLS-1$
-    public static final String CONNECTION_PROFILE_TYPE = "org.eclipse.datatools.connectivity.db.generic.connectionProfile";  //$NON-NLS-1$
-    public static final String DATABASE_PRODUCT_PROPERTY = "org.eclipse.datatools.connectivity.server.version";  //$NON-NLS-1$
-	/**
-	 * This property is used in ConnectionProfile creation.
-	 */
-	public static final String DATABASE_SAVE_PWD_PROP_ID = IDBDriverDefinitionConstants.PROP_PREFIX + "savePWD"; //$NON-NLS-1$
-	/**
-	 * This property is used in ConnectionProfile creation.
-	 */
-	public static final String DRIVER_DEFINITION_PROP_ID = "org.eclipse.datatools.connectivity.driverDefinitionID"; //$NON-NLS-1$
-	/**
-	 * This property is used in DriverDefinition creation.
-	 */
-	public static final String DRIVER_DEFINITION_TYPE_PROP_ID = "org.eclipse.datatools.connectivity.drivers.defnType"; //$NON-NLS-1$
-	/**
-	 * This property is used in DriverDefinition creation.
-	 */
-	public static final String DRIVER_JAR_LIST_PROP_ID = "jarList"; //$NON-NLS-1$
-
-	// ********** constructors **********
-
-	DTPConnectionProfileWrapper( ConnectionProfileRepository profileRepository, org.eclipse.datatools.connectivity.IConnectionProfile dtpConnectionProfile) {
-		super( profileRepository);
-		this.dtpConnectionProfile = dtpConnectionProfile;
-	}
-	
-	// ********** listeners **********
-
-	@Override
-	public void addProfileListener( ProfileListener listener) {
-		
-		this.getProfileRepository().addProfileListener( listener);
-	}
-
-	@Override
-	public void removeProfileListener( ProfileListener listener) {
-		
-		this.getProfileRepository().removeProfileListener( listener);
-	}
-	
-	@Override
-	public void addConnectionListener( ConnectionListener listener) {
-		
-		this.getConnection().addConnectionListener( listener);
-	}
-
-	@Override
-	public void removeConnectionListener( ConnectionListener listener) {
-
-		this.getConnection().removeConnectionListener( listener);
-	}
-	
-	// ********** behavior **********
-	
-	private IManagedConnection buildDtpManagedConnection( org.eclipse.datatools.connectivity.IConnectionProfile dtpProfile) {
-		return dtpProfile.getManagedConnection( CONNECTION_TYPE);
-	}
-	/**
-	 * Connect using this profile.
-	 */
-	@Override
-	public void connect() {
-		if( !this.dtpConnectionProfile.isConnected()) {
-			
-			IStatus status = this.dtpConnectionProfile.connect();
-			if( !status.isOK()) {
-				if( status.isMultiStatus()) {
-					IStatus[] statusChildren = status.getChildren();
-					throw new RuntimeException( statusChildren[ 0].getMessage(), statusChildren[ 0].getException());
-				}
-				throw new RuntimeException( status.getMessage(), status.getException());
-			}
-		}
-	}
-	
-	@Override
-	public void disconnect() {
-		
-		IStatus status = this.dtpConnectionProfile.disconnect();
-		if( !status.isOK()) {
-			if( status.isMultiStatus()) {
-				IStatus[] statusChildren = status.getChildren();
-				throw new RuntimeException( statusChildren[ 0].getMessage(), statusChildren[ 0].getException());
-			}
-			throw new RuntimeException( status.getMessage(), status.getException());
-		}
-	}
-	
-	@Override
-	void databaseChanged( Database database, int eventType) {
-		this.getConnection().databaseChanged( database, eventType);
-		return;
-	}
-	
-	@Override
-	 void catalogChanged( Catalog catalog, Database database, int eventType) {
-		 //TODO
-//		this.getConnection().catalogChanged( catalog, eventType);
-		 return;
-	}
-	
-	@Override
-	void schemaChanged( Schema schema, Database database, int eventType) {
-		this.getConnection().schemaChanged( schema, database, eventType);
-	}
-		
-	@Override
-	void tableChanged( Table table, Schema schema, Database database, int eventType) {
-		this.getConnection().tableChanged( table, schema, database, eventType);
-	}
-		
-	// ********** queries **********
-
-	@Override
-	public boolean isConnected() {
-
-		return this.getConnection().isConnected();
-	}
-	
-	@Override
-	public boolean isNull() {
-		return false;
-	}
-	
-	@Override
-	public String getName() {
-
-		return this.dtpConnectionProfile.getName();
-	}
-	
-	@Override
-	public String getDatabaseName() {
-		return this.getProperties().getProperty( IDBDriverDefinitionConstants.DATABASE_NAME_PROP_ID);
-	}
-	
-	@Override
-	public String getDatabaseProduct() {
-		return this.getProperties().getProperty( DATABASE_PRODUCT_PROPERTY);
-	}
-	
-	@Override
-	public String getDatabaseVendor() {
-		return this.getProperties().getProperty( IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID);
-	}
-	
-	@Override
-	public String getDatabaseVersion() {
-		return this.getProperties().getProperty( IDBDriverDefinitionConstants.DATABASE_VERSION_PROP_ID);
-	}
-
-	@Override
-	public String getUserName() {
-		return this.getProperties().getProperty( IDBDriverDefinitionConstants.USERNAME_PROP_ID);
-	}
-
-	@Override
-	public String getUserPassword() {
-		return this.getProperties().getProperty( IDBDriverDefinitionConstants.PASSWORD_PROP_ID);
-	}
-
-	@Override
-	public String getDriverClass() {
-		return this.getProperties().getProperty( IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID);
-	}
-
-	@Override
-	public String getUrl() {
-		return this.getProperties().getProperty( IDBDriverDefinitionConstants.URL_PROP_ID);
-	}
-	
-	@Override
-	public String getInstanceId() {
-		return this.dtpConnectionProfile.getInstanceID();
-	}
-
-	@Override
-	public String getProviderId() {
-		return this.dtpConnectionProfile.getProviderId();
-	}
-
-	@Override
-	public String getDriverDefinitionId() {
-		return this.getProperties().getProperty( DTPConnectionProfileWrapper.DRIVER_DEFINITION_PROP_ID);
-	}
-
-	@Override
-	public String getDriverJarList() {
-		return DriverManager.getInstance().getDriverInstanceByID( this.getDriverDefinitionId()).getJarList();
-	}
-	
-	private Properties getProperties() {
-		return this.dtpConnectionProfile.getBaseProperties();
-	}
-	
-	@Override
-	protected Connection buildConnection() {
-
-		Connection connection = Connection.createConnection( this.buildDtpManagedConnection( this.dtpConnectionProfile));  //$NON-NLS-1$
-		return connection;
-	}
-
-	@Override
-	protected Database buildDatabase() {
-		
-		org.eclipse.datatools.modelbase.sql.schema.Database dtpDatabase;
-		if( this.isConnected()) {
-			dtpDatabase = ProfileUtil.getDatabase( new DatabaseIdentifier( this.getName(), this.getDatabaseName()), false);
-			return Database.createDatabase( this, dtpDatabase);
-		}
-		return NullDatabase.instance();
-	}
-	
-	@Override
-	boolean wraps( org.eclipse.datatools.connectivity.IConnectionProfile dtpProfile) {
-		return this.dtpConnectionProfile == dtpProfile;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionWrapper.java
deleted file mode 100644
index 5440b35..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPConnectionWrapper.java
+++ /dev/null
@@ -1,170 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.datatools.connectivity.ConnectEvent;
-import org.eclipse.datatools.connectivity.IManagedConnectionListener;
-
-/**
- *  Wrap a DTP Connection
- */
-public final class DTPConnectionWrapper extends Connection {
-	
-	final private org.eclipse.datatools.connectivity.IManagedConnection dtpConnection;
-	private LocalConnectionListener connectionListener;
-	
-	// ********** constructors **********
-
-	DTPConnectionWrapper( org.eclipse.datatools.connectivity.IManagedConnection dtpConnection) {
-		super();
-		this.dtpConnection = dtpConnection;
-		this.initialize();
-	}
-
-	// ********** behavior **********
-	
-	protected void initialize() {
-		this.connectionListener = new LocalConnectionListener();
-		this.dtpConnection.addConnectionListener( this.connectionListener);
-	}
-	
-	@Override
-	protected void dispose() {
-		this.dtpConnection.removeConnectionListener( this.connectionListener);
-	}
-
-	@Override
-	public String getName() {
-
-		return this.dtpConnection.getConnection().getConnectionProfile().getName();
-	}
-	
-	@Override
-	public boolean isConnected() {
-
-		return this.dtpConnection.isConnected();
-	}
-
-	@Override
-	public String getFactoryId() {
-		
-		return this.dtpConnection.getFactoryID();
-	}
-
-	@Override
-	void databaseChanged( Database database, int eventType) {
-		
-		this.connectionListener.databaseChanged( database, eventType);
-	}
-	
-	@Override
-	void schemaChanged( Schema schema, Database database, int eventType) {
-		
-		this.connectionListener.schemaChanged( schema, database, eventType);
-	}
-		
-	@Override
-	void tableChanged( Table table, Schema schema, Database database, int eventType) {
-		
-		this.connectionListener.tableChanged( table, schema, database, eventType);
-	}
-		
-	// ********** listeners **********
-
-	@Override
-	public void addConnectionListener( ConnectionListener listener) {
-		// hook up the specified listener to our intermediate listeners
-		this.connectionListener.addConnectionListener( listener);
-	}
-
-	@Override
-	public void removeConnectionListener( ConnectionListener listener) {
-
-		this.connectionListener.removeConnectionListener( listener);
-	}
-	
-	// ********** member classes **********
-
-	/**
-	 * This listener translates and forwards IManagedConnectionListener events to ConnectionListeners.
-	 */
-	private class LocalConnectionListener implements IManagedConnectionListener {
-		private Collection<ConnectionListener> listeners = new ArrayList<ConnectionListener>();
-
-		LocalConnectionListener() {
-			super();
-		}
-
-		void addConnectionListener( ConnectionListener listener) {
-			this.listeners.add( listener);
-		}
-
-		void removeConnectionListener( ConnectionListener listener) {
-			this.listeners.remove( listener);
-		}
-
-		// ********** behavior **********
-		
-		public void aboutToClose( ConnectEvent event) {
-			for (ConnectionListener listener : this.listeners) {
-				listener.aboutToClose( DTPConnectionWrapper.this);
-			}
-		}
-
-		public void closed( ConnectEvent event) {
-			for (ConnectionListener listener : this.listeners) {
-				listener.closed( DTPConnectionWrapper.this);
-			}
-		}
-
-		public void modified( ConnectEvent event) {
-			for (ConnectionListener listener : this.listeners) {
-				listener.modified( DTPConnectionWrapper.this);
-			}
-		}
-
-		public boolean okToClose( ConnectEvent event) {
-			for (ConnectionListener listener : this.listeners) {
-				if( !listener.okToClose( DTPConnectionWrapper.this)) {
-					return false;
-				}
-			}
-			return true;
-		}
-		
-		public void opened( ConnectEvent event) {
-			for (ConnectionListener listener : this.listeners) {
-				listener.opened( DTPConnectionWrapper.this);
-			}
-		}
-		
-		void databaseChanged( Database database, int eventType) {
-			for (ConnectionListener listener : this.listeners) {
-				listener.databaseChanged( DTPConnectionWrapper.this, database);
-			}
-		}
-		
-		void schemaChanged( Schema schema, Database database, int eventType) {
-			for (ConnectionListener listener : this.listeners) {
-				listener.schemaChanged( DTPConnectionWrapper.this, schema);
-			}
-		}
-		
-		void tableChanged( Table table, Schema schema, Database database, int eventType) {
-			for (ConnectionListener listener : this.listeners) {
-				listener.tableChanged( DTPConnectionWrapper.this, table);
-			}
-		}
-	}
-
-}
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 d8b1dad..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPDatabaseWrapper.java
+++ /dev/null
@@ -1,229 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
-import org.eclipse.emf.common.util.EList;
-
-/**
- *  Wrap a DTP Database
- */
-public final class DTPDatabaseWrapper extends Database {
-	
-	final ConnectionProfile profile;
-	final org.eclipse.datatools.modelbase.sql.schema.Database dtpDatabase;
-	private ICatalogObjectListener databaseListener;
-	
-	private Set<Catalog> catalogs;  // lazy-initialized
-	private Set<Schema> schemata;  // lazy-initialized
-
-	DTPDatabaseWrapper( ConnectionProfile profile, org.eclipse.datatools.modelbase.sql.schema.Database dtpDatabase) {
-		super();
-		this.dtpDatabase = dtpDatabase;
-		this.profile = profile;
-		this.initialize();
-	}
-
-	// ********** behavior **********
-
-	private void initialize() {
-		
-		if( this.connectionIsOnline()) {
-			this.databaseListener = this.buildDatabaseListener();
-			this.addCatalogObjectListener(( ICatalogObject) this.dtpDatabase, this.databaseListener);
-		}
-	}
-	
-	@Override
-	protected boolean connectionIsOnline() {
-		return this.profile.isConnected();
-	}
-	
-	private ICatalogObjectListener buildDatabaseListener() {
-	   return new ICatalogObjectListener() {
-		    public void notifyChanged( final ICatalogObject database, final int eventType) {     
-				if( database == DTPDatabaseWrapper.this.dtpDatabase) {	
-					DTPDatabaseWrapper.this.refresh();
-					DTPDatabaseWrapper.this.profile.databaseChanged( DTPDatabaseWrapper.this, eventType);
-				}
-		    }
-	    };
-	}
-
-	@Override
-	void refresh() {
-		this.disposeSchemata();
-		this.disposeCatalogs();
-		
-		this.schemata = null;
-		this.catalogs = null;
-	}
-	
-	@Override
-	void catalogChanged( Catalog catalog, int eventType) {
-		this.profile.catalogChanged( catalog, this, eventType);
-		return;
-	}	
-		
-	@Override
-	void schemaChanged( Schema schema, int eventType) {
-		this.profile.schemaChanged( schema, this, eventType);
-		return;
-	}
-
-	@Override
-	void tableChanged( Table table,  Schema schema, int eventType) {
-		this.profile.tableChanged( table, schema, this, eventType);
-		return;
-	}
-	
-	@Override
-	protected void dispose() {
-		this.removeCatalogObjectListener(( ICatalogObject) this.dtpDatabase, this.databaseListener);
-
-		this.disposeSchemata();
-		this.disposeCatalogs();
-	}
-
-	private void disposeSchemata() {
-		if( this.schemata != null) {
-			for( Iterator<Schema> stream = this.schemata(); stream.hasNext(); ) {
-				stream.next().dispose();
-			}
-		}
-	}
-	
-	private void disposeCatalogs() {
-		if( this.catalogs != null) {
-			for( Iterator<Catalog> stream = this.catalogs(); stream.hasNext(); ) {
-				stream.next().dispose();
-			}
-		}
-	}
-	
-	// ********** queries **********
-
-	@Override
-	public String getName() {
-
-		return this.dtpDatabase.getName();
-	}
-
-	@Override
-	public String getVendor() {
-		
-		return this.dtpDatabase.getVendor();
-	}
-	
-	@Override
-	public String getVersion() {
-		
-		return this.dtpDatabase.getVersion();
-	}
-	
-	
-	// ***** schemata
-
-	@Override
-	synchronized Set<Schema> getSchemata() {
-		if( this.schemata == null) {
-			this.schemata = this.buildSchemata();
-		}
-		return this.schemata;
-	}
-
-	@SuppressWarnings("unchecked")
-	private EList<org.eclipse.datatools.modelbase.sql.schema.Schema> dtpSchemata() {
-		return this.dtpDatabase.getSchemas();
-	}
-
-	private Set<Schema> buildSchemata() {
-		Set<Schema> result;
-		if( this.supportsCatalogs()) {
-			result = this.getSchemataForCatalogNamed( this.profile.getCatalogName());
-		}
-		else {
-			EList<org.eclipse.datatools.modelbase.sql.schema.Schema> dtpSchemata = this.dtpSchemata();
-			result = new HashSet<Schema>( dtpSchemata.size());
-			for (org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema : dtpSchemata) {
-				result.add( this.wrap(dtpSchema));
-			}
-		}
-		return result;
-	}
-	
-	// ***** catalogs
-
-	@Override
-	public boolean supportsCatalogs() {
-		EList<org.eclipse.datatools.modelbase.sql.schema.Schema> dtpSchemata = this.dtpSchemata();
-		return ( dtpSchemata == null || dtpSchemata.size() == 0);
-	}
-
-	@SuppressWarnings("unchecked")
-	private EList<org.eclipse.datatools.modelbase.sql.schema.Catalog> dtpCatalogs() {
-		return this.dtpDatabase.getCatalogs();
-	}
-
-	@Override
-	public String getDefaultCatalogName() {
-		
-		if( !this.supportsCatalogs()) {	// this database doesn't support catalogs
-			return "";
-		}
-		String userName = this.profile.getUserName();
-		for (org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog : this.dtpCatalogs()) {
-			if( dtpCatalog.getName().length() == 0) {	// special catalog that contains all schemata
-				return "";
-			}
-			else if( dtpCatalog.getName().equals( userName)) {
-				return userName;		// returns user name as default catalog
-			}
-			else if( dtpCatalog.getName().equals( this.getName())) {
-				return this.getName();		 // special catalog with same name as DB (PostgreSQL)
-			}
-		}
-		throw new NoSuchElementException();
-	}
-	
-	@Override
-	synchronized Set<Catalog> getCatalogs() {
-		if( this.catalogs == null) {
-			this.catalogs = this.buildCatalogs();
-		}
-		return this.catalogs;
-	}
-
-	private Set<Catalog> buildCatalogs() {
-		
-		EList<org.eclipse.datatools.modelbase.sql.schema.Catalog> dtpCatalogs = this.dtpCatalogs();
-		if( dtpCatalogs == null) {
-			return Collections.emptySet();
-		}
-		Set<Catalog> result = new HashSet<Catalog>( dtpCatalogs.size());
-		for (org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog : dtpCatalogs) {
-			result.add( this.wrap(dtpCatalog));
-		}
-		return result;
-	}
-	
-	private Set<Schema> getSchemataForCatalogNamed( String catalogName) {
-
-		Catalog catalog = this.catalogNamed( catalogName);
-		return ( catalog != null) ? catalog.buildSchemata() : Collections.<Schema>emptySet();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPTools.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPTools.java
deleted file mode 100644
index 1c46efd..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPTools.java
+++ /dev/null
@@ -1,212 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.sql.Types;
-import java.util.HashMap;
-import org.eclipse.datatools.modelbase.sql.datatypes.PrimitiveType;
-import org.eclipse.jpt.utility.internal.JDBCTools;
-import org.eclipse.jpt.utility.internal.JDBCType;
-import org.eclipse.jpt.utility.internal.JavaType;
-
-/**
- * Helper methods for dealing with Eclipse DTP.
- */
-public final class DTPTools {
-
-	/**
-	 * Return the JDBC type corresponding to the specified Primitive type.
-	 */
-	public static JDBCType jdbcTypeForPrimitiveTypeNamed(String primitiveTypeName) {
-		PrimitiveToJDBCTypeMapping mapping = primitiveToJDBCTypeMapping(primitiveTypeName);
-		return (mapping == null) ? DEFAULT_JDBC_TYPE : mapping.getJDBCType();
-	}
-
-	/**
-	 * Return the JDBC type corresponding to the specified Primitive type.
-	 */
-	public static JDBCType jdbcTypeFor(PrimitiveType primitiveType) {
-		return jdbcTypeForPrimitiveTypeNamed(primitiveType.getName());
-	}
-
-	/**
-	 * Return the JDBC type corresponding to the specified Primitive type.
-	 */
-	public static JDBCType jdbcTypeForPrimitiveTypeCode(int primitiveTypeCode) {
-		return jdbcTypeFor(PrimitiveType.get(primitiveTypeCode));
-	}
-
-	/**
-	 * Return the Java type corresponding to the specified Primitive type.
-	 */
-	public static JavaType javaTypeForPrimitiveTypeNamed(String primitiveTypeName) {
-		return JDBCTools.javaTypeFor(jdbcTypeForPrimitiveTypeNamed(primitiveTypeName));
-	}
-
-	/**
-	 * Return the Java type corresponding to the specified Primitive type.
-	 */
-	public static JavaType javaTypeFor(PrimitiveType primitiveType) {
-		return JDBCTools.javaTypeFor(jdbcTypeFor(primitiveType));
-	}
-
-	/**
-	 * Return the Java type corresponding to the specified Primitive type.
-	 */
-	public static JavaType javaTypeForPrimitiveTypeCode(int primitiveTypeCode) {
-		return JDBCTools.javaTypeFor(jdbcTypeForPrimitiveTypeCode(primitiveTypeCode));
-	}
-
-	/**
-	 * Return whether the specified Primitive type is a LOB
-	 * (i.e. a BLOB, CLOB, or NCLOB).
-	 */
-	public static boolean dataTypeIsLob(PrimitiveType primitiveType) {
-		return (primitiveType == PrimitiveType.BINARY_LARGE_OBJECT_LITERAL)
-				|| (primitiveType == PrimitiveType.CHARACTER_LARGE_OBJECT_LITERAL)
-				|| (primitiveType == PrimitiveType.NATIONAL_CHARACTER_LARGE_OBJECT_LITERAL);
-	}
-
-
-	// ********** internal stuff **********
-
-
-	// ********** DTP Primitive => JDBC **********
-
-	/**
-	 * Primitive => JDBC type mappings, keyed by Primitive type name (e.g. "CHARACTER_VARYING")
-	 */
-	private static HashMap<String, PrimitiveToJDBCTypeMapping> PRIMITIVE_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 PrimitiveToJDBCTypeMapping primitiveToJDBCTypeMapping(String primitiveTypeName) {
-		return primitiveToJDBCTypeMappings().get(primitiveTypeName);
-	}
-
-	private static synchronized HashMap<String, PrimitiveToJDBCTypeMapping> primitiveToJDBCTypeMappings() {
-		if (PRIMITIVE_TO_JDBC_TYPE_MAPPINGS == null) {
-			PRIMITIVE_TO_JDBC_TYPE_MAPPINGS = buildPrimitiveToJDBCTypeMappings();
-		}
-		return PRIMITIVE_TO_JDBC_TYPE_MAPPINGS;
-	}
-
-	private static HashMap<String, PrimitiveToJDBCTypeMapping> buildPrimitiveToJDBCTypeMappings() {
-		HashMap<String, PrimitiveToJDBCTypeMapping> mappings = new HashMap<String, PrimitiveToJDBCTypeMapping>();
-		addPrimitiveToJDBCTypeMappingsTo(mappings);
-		return mappings;
-	}
-
-	/**
-	 * hard code the default mappings from the DTP primitive types to the
-	 * appropriate JDBC types;
-	 * pretty much a straight one-to-one mapping based on similar names;
-	 * TODO some JDBC types are missing: INTERVAL, XML_TYPE
-	 */
-	private static void addPrimitiveToJDBCTypeMappingsTo(HashMap<String, PrimitiveToJDBCTypeMapping> mappings) {
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.BIGINT_LITERAL, Types.BIGINT, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.BINARY_LARGE_OBJECT_LITERAL, Types.BLOB, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.BINARY_LITERAL, Types.BINARY, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.BINARY_VARYING_LITERAL, Types.VARBINARY, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.BOOLEAN_LITERAL, Types.BOOLEAN, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.CHARACTER_LARGE_OBJECT_LITERAL, Types.CLOB, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.CHARACTER_LITERAL, Types.CHAR, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.CHARACTER_VARYING_LITERAL, Types.VARCHAR, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.DATALINK_LITERAL, Types.DATALINK, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.DATE_LITERAL, Types.DATE, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.DECIMAL_LITERAL, Types.DECIMAL, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.DOUBLE_PRECISION_LITERAL, Types.DOUBLE, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.FLOAT_LITERAL, Types.FLOAT, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.INTEGER_LITERAL, Types.INTEGER, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.INTERVAL_LITERAL, Types.OTHER, mappings);  // ???
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.NATIONAL_CHARACTER_LARGE_OBJECT_LITERAL, Types.CLOB, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.NATIONAL_CHARACTER_LITERAL, Types.CHAR, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.NATIONAL_CHARACTER_VARYING_LITERAL, Types.VARCHAR, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.NUMERIC_LITERAL, Types.NUMERIC, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.REAL_LITERAL, Types.REAL, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.SMALLINT_LITERAL, Types.SMALLINT, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.TIME_LITERAL, Types.TIME, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.TIMESTAMP_LITERAL, Types.TIMESTAMP, mappings);
-		addPrimitiveToJDBCTypeMappingTo(PrimitiveType.XML_TYPE_LITERAL, Types.OTHER, mappings);  // ???
-	}
-
-	private static void addPrimitiveToJDBCTypeMappingTo(PrimitiveType primitiveType, int jdbcTypeCode, HashMap<String, PrimitiveToJDBCTypeMapping> mappings) {
-		// check for duplicates
-		Object prev = mappings.put(primitiveType.getName(), buildPrimitiveToJDBCTypeMapping(primitiveType, jdbcTypeCode));
-		if (prev != null) {
-			throw new IllegalArgumentException("duplicate Java class: " + ((PrimitiveToJDBCTypeMapping) prev).getPrimitiveType().getName());
-		}
-	}
-
-	private static PrimitiveToJDBCTypeMapping buildPrimitiveToJDBCTypeMapping(PrimitiveType primitiveType, int jdbcTypeCode) {
-		return new PrimitiveToJDBCTypeMapping(primitiveType, JDBCType.type(jdbcTypeCode));
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private DTPTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-
-	// ********** member classes **********
-
-	/**
-	 * Primitive => JDBC
-	 */
-	private static class PrimitiveToJDBCTypeMapping {
-		private final PrimitiveType primitiveType;
-		private final JDBCType jdbcType;
-
-		PrimitiveToJDBCTypeMapping(PrimitiveType primitiveType, JDBCType jdbcType) {
-			super();
-			this.primitiveType = primitiveType;
-			this.jdbcType = jdbcType;
-		}
-
-		public PrimitiveType getPrimitiveType() {
-			return this.primitiveType;
-		}
-
-		public JDBCType getJDBCType() {
-			return this.jdbcType;
-		}
-
-		public boolean maps(PrimitiveType pt) {
-			return this.primitiveType.equals(pt);
-		}
-
-		public boolean maps(String primitiveTypeName) {
-			return this.primitiveType.getName().equals(primitiveTypeName);
-		}
-
-		public boolean maps(int primitiveTypeCode) {
-			return this.primitiveType.getValue() == primitiveTypeCode;
-		}
-
-		@Override
-		public String toString() {
-			StringBuffer sb = new StringBuffer();
-			this.appendTo(sb);
-			return sb.toString();
-		}
-
-		public void appendTo(StringBuffer sb) {
-			sb.append(this.primitiveType.getName());
-			sb.append(" => ");
-			this.jdbcType.appendTo(sb);
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPWrapper.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPWrapper.java
deleted file mode 100644
index 11e9808..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/DTPWrapper.java
+++ /dev/null
@@ -1,52 +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
- ******************************************************************************/
-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.utility.internal.StringTools;
-
-/**
- *  DataTools Wrapper base class.
- */
-public abstract class DTPWrapper {
-	
-	DTPWrapper() {
-		super();
-	}
-	
-	// ********** behavior **********
-	
-	protected abstract void dispose();
-	
-	protected abstract boolean connectionIsOnline();
-
-	protected void addCatalogObjectListener( ICatalogObject catalogObject, ICatalogObjectListener catalogObjectListener) {
-		if( this.connectionIsOnline()) {
-			RefreshManager.getInstance().AddListener( catalogObject, catalogObjectListener);
-		}
-	}
-
-	protected void removeCatalogObjectListener( ICatalogObject catalogObject, ICatalogObjectListener catalogObjectListener) {
-		if( this.connectionIsOnline()) {
-	        RefreshManager.getInstance().removeListener( catalogObject, catalogObjectListener);
-		}
-	}
-
-	// ********** queries **********
-
-	public abstract String getName();
-	
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor( this, this.getName());
-	}	
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Database.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Database.java
deleted file mode 100644
index ab7f565..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Database.java
+++ /dev/null
@@ -1,229 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.text.Collator;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- *  Database wrapper base class.
- */
-public abstract class Database extends DTPWrapper implements Comparable<Database> {
-	
-	private boolean caseSensitive = false;  // TODO allow user to configure
-
-	// ********** constructors **********
-
-	static Database createDatabase( ConnectionProfile profile, org.eclipse.datatools.modelbase.sql.schema.Database dtpDatabase) {
-		return ( dtpDatabase == null) ? NullDatabase.instance() : new DTPDatabaseWrapper( profile, dtpDatabase);
-	}
-
-	Database() {
-		super();
-	}
-
-	// ********** behavior **********
-
-	abstract void catalogChanged( Catalog catalog, int eventType);
-
-	abstract void schemaChanged( Schema schema, int eventType);
-
-	abstract void tableChanged( Table table,  Schema schema, int eventType);
-	
-	abstract void refresh();
-	
-	protected Schema wrap( org.eclipse.datatools.modelbase.sql.schema.Schema schema) {
-		return new Schema( this, schema);
-	}
-	
-	protected Catalog wrap( org.eclipse.datatools.modelbase.sql.schema.Catalog catalog) {
-		return new Catalog( this, catalog);
-	}
-	
-	// ********** queries **********
-
-	public abstract String getVendor();
-	
-	public abstract String getVersion();
-
-	/**
-	 * return the column for the specified dtp column
-	 */
-	Column column( org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		return this.table( dtpColumn.getTable()).column( dtpColumn);
-	}
-	
-	/**
-	 * return the table for the specified dtp table
-	 */
-	Table table( org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		return this.schema( dtpTable.getSchema()).table( dtpTable);
-	}
-
-	// ********** Comparable implementation **********
-
-	public int compareTo( Database database) {
-		return Collator.getInstance().compare( this.getName(), database.getName());
-	}
-
-	// ***** caseSensitive
-
-	public boolean isCaseSensitive() {
-		return this.caseSensitive;
-	}
-
-	public void setCaseSensitive( boolean caseSensitive) {
-		this.caseSensitive = caseSensitive;
-	}
-
-	// ***** catalogs
-
-	abstract Set<Catalog> getCatalogs();
-
-	/**
-	 * Returns true if this database accepts catalogs.
-	 */
-	public abstract boolean supportsCatalogs();
-	
-	/**
-	 * Returns the catalog to use by default.
-	 */
-	public abstract String getDefaultCatalogName();
-	
-	public Iterator<Catalog> catalogs() {
-		return this.getCatalogs().iterator();
-	}
-
-	public int catalogSize() {
-		return this.getCatalogs().size();
-	}
-
-	public Iterator<String> catalogNames() {
-		return new TransformationIterator<Catalog, String>( this.catalogs()) {
-			@Override
-			protected String transform( Catalog catalog) {
-				 return catalog.getName();
-			}
-		};
-	}
-
-	public boolean containsCatalogNamed( String name) {
-		return this.catalogNamed( name) != null;
-	}
-
-	public Catalog catalogNamed( String name) {
-		return this.isCaseSensitive() ? this.catalogNamedInternal( name) : this.catalogNamedIgnoreCase( name);
-	}
-	
-	private Catalog catalogNamedInternal( String name) {
-		for ( Iterator<Catalog> stream = this.catalogs(); stream.hasNext(); ) {
-			Catalog catalog = stream.next();
-			if ( catalog.getName().equals( name)) {
-				return catalog;
-			}
-		}
-		return null;
-	}
-	
-	private Catalog catalogNamedIgnoreCase( String name) {
-		for ( Iterator<Catalog> stream = this.catalogs(); stream.hasNext(); ) {
-			Catalog catalog = stream.next();
-			if ( StringTools.stringsAreEqualIgnoreCase( catalog.getName(), name)) {
-				return catalog;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * return the catalog for the specified dtp catalog
-	 */
-	Catalog catalog( org.eclipse.datatools.modelbase.sql.schema.Catalog dtpCatalog) {
-		for ( Iterator<Catalog> stream = this.catalogs(); stream.hasNext(); ) {
-			Catalog catalog = stream.next();
-			if (catalog.wraps( dtpCatalog)) {
-				return catalog;
-			}
-		}
-		throw new IllegalArgumentException( "invalid dtp catalog: " + dtpCatalog);
-	}
-
-
-	// ***** schemata
-
-	abstract Set<Schema> getSchemata();
-
-	public Iterator<Schema> schemata() {
-		return this.getSchemata().iterator();
-	}
-
-	public int schemataSize() {
-		return this.getSchemata().size();
-	}
-
-	public boolean schemataContains( Column column) {
-		return this.getSchemata().contains( column);
-	}
-
-	public Iterator<String> schemaNames() {
-		return new TransformationIterator<Schema, String>( this.schemata()) {
-			@Override
-			protected String transform( Schema schema) {
-				 return schema.getName();
-			}
-		};
-	}
-
-	public boolean containsSchemaNamed( String name) {
-		return this.schemaNamed( name) != null;
-	}
-
-	public Schema schemaNamed( String name) {
-		return this.isCaseSensitive() ? this.schemaNamedInternal( name) : this.schemaNamedIgnoreCase( name);
-	}
-	
-	private Schema schemaNamedInternal( String name) {
-		for ( Iterator<Schema> stream = this.schemata(); stream.hasNext(); ) {
-			Schema schema = stream.next();
-			if ( schema.getName().equals( name)) {
-				return schema;
-			}
-		}
-		return null;
-	}
-	
-	private Schema schemaNamedIgnoreCase( String name) {
-		for ( Iterator<Schema> stream = this.schemata(); stream.hasNext(); ) {
-			Schema schema = stream.next();
-			if ( StringTools.stringsAreEqualIgnoreCase( schema.getName(), name)) {
-				return schema;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * return the schema for the specified dtp schema
-	 */
-	Schema schema( org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema) {
-		for ( Iterator<Schema> stream = this.schemata(); stream.hasNext(); ) {
-			Schema schema = stream.next();
-			if ( schema.wraps( dtpSchema)) {
-				return schema;
-			}
-		}
-		throw new IllegalArgumentException( "invalid dtp schema: " + dtpSchema);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ForeignKey.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ForeignKey.java
deleted file mode 100644
index 6fc0501..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ForeignKey.java
+++ /dev/null
@@ -1,337 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.text.Collator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- *  Wrap a DTP ForeignKey
- */
-public final class ForeignKey extends DTPWrapper implements Comparable<ForeignKey> {
-	private final Table baseTable;
-	private final org.eclipse.datatools.modelbase.sql.constraints.ForeignKey dtpForeignKey;
-	private ICatalogObjectListener foreignKeyListener;
-
-	private Table referencedTable;  // lazy-initialized
-	private Set<ColumnPair> columnPairs;  // lazy-initialized
-	private String defaultEntityFieldName;  // lazy-initialized
-	private boolean defaultEntityFieldNameCalculated = false;
-
-
-	// ********** constructors **********
-
-	ForeignKey(Table baseTable, org.eclipse.datatools.modelbase.sql.constraints.ForeignKey dtpForeignKey) {
-		super();
-		this.baseTable = baseTable;
-		this.dtpForeignKey = dtpForeignKey;
-		this.initialize();
-	}
-
-	// ********** behavior **********
-
-	private void initialize() {
-		if( this.connectionIsOnline()) {
-			this.foreignKeyListener = this.buildForeignKeyListener();
-			this.addCatalogObjectListener(( ICatalogObject) this.dtpForeignKey, this.foreignKeyListener);
-		}
-	}
-	
-	@Override
-	protected boolean connectionIsOnline() {
-		return this.baseTable.connectionIsOnline();
-	}
-	
-	private ICatalogObjectListener buildForeignKeyListener() {
-       return new ICatalogObjectListener() {
-    	    public void notifyChanged( final ICatalogObject foreignKey, final int eventType) { 
-//				TODO
-//    			if( foreignKey == ForeignKey.this.dtpForeignKey) {	    	    	
-//    				ForeignKey.this.baseTable.foreignKeyChanged( ForeignKey.this, eventType);
-//    			}
-    	    }
-        };
-    }
-
-	@Override
-	protected void dispose() {
-		
-		this.removeCatalogObjectListener(( ICatalogObject) this.dtpForeignKey, this.foreignKeyListener);
-	}
-
-	// ********** queries **********
-
-	public Table getBaseTable() {
-		return this.baseTable;
-	}
-
-	@Override
-	public String getName() {
-		return this.dtpForeignKey.getName();
-	}
-
-	boolean isCaseSensitive() {
-		return this.baseTable.isCaseSensitive();
-	}
-
-	boolean wraps(org.eclipse.datatools.modelbase.sql.constraints.ForeignKey foreignKey) {
-		return this.dtpForeignKey == foreignKey;
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.getName() + ": " + this.getColumnPairs());
-	}
-
-	public Table getReferencedTable() {
-		if (this.referencedTable == null) {
-			this.referencedTable = this.baseTable.table(this.dtpForeignKey.getUniqueConstraint().getBaseTable());
-		}
-		return this.referencedTable;
-	}
-
-	/**
-	 * return the foreign key's "base" columns
-	 */
-	public Iterator<Column> baseColumns() {
-		return new TransformationIterator<ColumnPair, Column>(this.columnPairs()) {
-			@Override
-			protected Column transform(ColumnPair pair) {
-				return pair.getBaseColumn();
-			}
-		};
-	}
-
-	/**
-	 * return the foreign key's "base" columns that are not part of
-	 * the base table's primary key
-	 */
-	public Iterator<Column> nonPrimaryKeyBaseColumns() {
-		return new FilteringIterator<Column>(this.baseColumns()) {
-			@Override
-			protected boolean accept(Object o) {
-				return ! ForeignKey.this.getBaseTable().primaryKeyColumnsContains((Column) o);
-			}
-		};
-	}
-
-	/**
-	 * return the foreign key's "referenced" columns
-	 */
-	public Iterator<Column> referencedColumns() {
-		return new TransformationIterator<ColumnPair, Column>(this.columnPairs()) {
-			@Override
-			protected Column transform(ColumnPair columnPair) {
-				return columnPair.getReferencedColumn();
-			}
-		};
-	}
-
-	public String javaFieldName() {
-		String fieldName = this.getDefaultEntityFieldName();
-		return (fieldName == null) ?
-			this.nonDefaultEntityFieldName()
-		:
-			fieldName;
-	}
-
-	public boolean matchesJavaFieldName(String javaFieldName) {
-		return this.isCaseSensitive() ?
-			javaFieldName.equals(this.getDefaultEntityFieldName())
-		:
-			javaFieldName.equalsIgnoreCase(this.getDefaultEntityFieldName());
-	}
-
-	public boolean isDefaultFor(String javaFieldName) {
-		if (this.columnPairsSize() != 1) {
-			return false;
-		}
-
-		if (this.getReferencedTable().primaryKeyColumnsSize() != 1) {
-			return false;
-		}
-
-		ColumnPair columnPair = this.columnPairs().next();
-		Column pkColumn = this.getReferencedTable().primaryKeyColumns().next();
-		if (columnPair.getReferencedColumn() != pkColumn) {
-			return false;
-		}
-
-		return columnPair.getBaseColumn().matchesJavaFieldName(javaFieldName + "_" + pkColumn.getName());
-	}
-
-
-	// ***** column pairs
-
-	private synchronized Set<ColumnPair> getColumnPairs() {
-		if (this.columnPairs == null) {
-			this.columnPairs = this.buildColumnPairs();
-		}
-		return this.columnPairs;
-	}
-
-	@SuppressWarnings("unchecked")
-	private List<org.eclipse.datatools.modelbase.sql.tables.Column> dtpBaseColumns() {
-		return this.dtpForeignKey.getMembers();
-	}
-
-	@SuppressWarnings("unchecked")
-	private List<org.eclipse.datatools.modelbase.sql.tables.Column> dtpRefColumns() {
-		return this.dtpForeignKey.getUniqueConstraint().getMembers();
-	}
-
-	private Set<ColumnPair> buildColumnPairs() {
-		List<org.eclipse.datatools.modelbase.sql.tables.Column> baseColumns = this.dtpBaseColumns();
-		int size = baseColumns.size();
-		List<org.eclipse.datatools.modelbase.sql.tables.Column> refColumns = this.dtpRefColumns();
-		if (refColumns.size() != size) {
-			throw new IllegalStateException("mismatched sizes: " + size + " vs. " + refColumns.size());
-		}
-		Set<ColumnPair> result = new HashSet<ColumnPair>(baseColumns.size());
-		for (int i = baseColumns.size(); i-- > 0; ) {
-			Column baseColumn = this.baseTable.column(baseColumns.get(i));
-			Column refColumn = this.baseTable.column(refColumns.get(i));
-			result.add(new ColumnPair(baseColumn, refColumn));
-		}
-		return result;
-	}
-
-	public Iterator<ColumnPair> columnPairs() {
-		return this.getColumnPairs().iterator();
-	}
-
-	public int columnPairsSize() {
-		return this.getColumnPairs().size();
-	}
-
-
-	// ***** default entity field name
-
-	/**
-	 * If the name of the "base" column adheres to the EJB standard 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 entity field name:
-	 *     ForeignKey(EMP.CUBICLE_ID => CUBICLE.ID) => "CUBICLE"
-	 * Return a null if it does not adhere to the EJB standard:
-	 *     ForeignKey(EMP.CUBICLE_ID => CUBICLE.CUBICLE_ID) => null
-	 */
-	private String getDefaultEntityFieldName() {
-		if ( ! this.defaultEntityFieldNameCalculated) {
-			this.defaultEntityFieldNameCalculated = true;
-			this.defaultEntityFieldName = this.buildDefaultEntityFieldName();
-		}
-		return this.defaultEntityFieldName;
-	}
-
-	/**
-	 * @see #getDefaultEntityFieldName()
-	 */
-	private String buildDefaultEntityFieldName() {
-		if ( ! this.referencesSingleColumnPrimaryKey()) {
-			return null;
-		}
-		ColumnPair columnPair = this.columnPairs().next();
-		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;
-		}
-		String name = baseColName.substring(0, _index);
-		return this.isCaseSensitive() ? name : name.toLowerCase();
-	}
-
-	/**
-	 * Return whether the foreign key references the primary key of the
-	 * "referenced" table and that primary key has only a single column.
-	 */
-	public boolean referencesSingleColumnPrimaryKey() {
-		if (this.columnPairsSize() != 1) {
-			return false;
-		}
-		if (this.getReferencedTable().primaryKeyColumnsSize() != 1) {
-			return false;
-		}
-
-		ColumnPair columnPair = this.columnPairs().next();
-		return columnPair.getReferencedColumn() == this.getReferencedTable().primaryKeyColumns().next();
-	}
-
-	/**
-	 * If this is a simple (single-column) foreign key, return the java field
-	 * name of the single base column. If this is a compound foreign key,
-	 * return the java field 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?
-	// TODO if the FK column name ends with the PK column name, strip the PK column name?
-	private String nonDefaultEntityFieldName() {
-		return (this.columnPairsSize() == 1) ?
-			this.columnPairs().next().getBaseColumn().javaFieldName()
-		:
-			this.getReferencedTable().javaFieldName();
-	}
-
-
-	// ********** Comparable implementation **********
-
-	public int compareTo(ForeignKey foreignKey) {
-		return Collator.getInstance().compare(this.getName(), foreignKey.getName());
-	}
-
-
-	// ********** member class **********
-
-	public static class ColumnPair implements Comparable<ColumnPair> {
-		private final Column baseColumn;
-		private final Column referencedColumn;
-
-		ColumnPair(Column baseColumn, Column referencedColumn) {
-			super();
-			this.baseColumn = baseColumn;
-			this.referencedColumn = referencedColumn;
-		}
-
-		public Column getBaseColumn() {
-			return this.baseColumn;
-		}
-
-		public Column getReferencedColumn() {
-			return this.referencedColumn;
-		}
-
-		@Override
-		public String toString() {
-			return StringTools.buildToStringFor(this, baseColumn.getName() + "=>" + this.referencedColumn.getName());
-		}
-
-		public int compareTo(ColumnPair cp) {
-			return Collator.getInstance().compare(this.getBaseColumn().getName(), cp.getBaseColumn().getName());
-		}
-
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/JptDbPlugin.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/JptDbPlugin.java
deleted file mode 100644
index 0d9f217..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/JptDbPlugin.java
+++ /dev/null
@@ -1,64 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import org.eclipse.core.runtime.Plugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class JptDbPlugin extends Plugin {
-	private ConnectionProfileRepository connectionProfileRepository;
-
-	// The shared instance
-	private static JptDbPlugin plugin;
-
-	/**
-	 * Returns the shared instance
-	 */
-	public static JptDbPlugin getDefault() {
-		return plugin;
-	}
-	
-	/**
-	 * The constructor
-	 */
-	public JptDbPlugin() {
-		super();
-		plugin = this;
-	}
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		this.connectionProfileRepository = ConnectionProfileRepository.instance();
-        this.connectionProfileRepository.initializeListeners();
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		this.connectionProfileRepository.disposeListeners();
-		this.connectionProfileRepository = null;
-		plugin = null;
-		super.stop(context);
-	}
-
-
-	public ConnectionProfileRepository getConnectionProfileRepository() {
-		return this.connectionProfileRepository;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnection.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnection.java
deleted file mode 100644
index f095633..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnection.java
+++ /dev/null
@@ -1,81 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import org.eclipse.jpt.utility.internal.ClassTools;
-
-/**
- *  NullConnection
- */
-public final class NullConnection extends Connection {
-
-	private static NullConnection INSTANCE;
-
-	/**
-	 * singleton support
-	 */
-	static synchronized Connection instance() {
-		if( INSTANCE == null) {
-			INSTANCE = new NullConnection();
-		}
-		return INSTANCE;
-	}
-
-	private NullConnection() {
-		super();
-	}
-
-	// ********** behavior **********
-
-	@Override
-	protected void dispose() {
-		// do nothing
-	}
-
-	@Override
-	public String getName() {
-		return ClassTools.shortClassNameForObject( this);
-	}
-
-	@Override
-	void databaseChanged( Database database, int eventType) {
-		// do nothing
-	}
-	
-	@Override
-	 void schemaChanged( Schema schema, Database database, int eventType) {
-		// do nothing
-	}
-	
-	@Override
-	 void tableChanged( Table table, Schema schema, Database database, int eventType) {
-		// do nothing
-	}
-	
-	@Override
-	public boolean isConnected() {
-		return false;
-	}
-
-	@Override
-	public String getFactoryId() {
-		return "";
-	}
-
-	@Override
-	public void addConnectionListener( ConnectionListener listener) {
-		// do nothing
-	}
-
-	@Override
-	public void removeConnectionListener( ConnectionListener listener) {
-		// do nothing
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnectionProfile.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnectionProfile.java
deleted file mode 100644
index 09cd5e0..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullConnectionProfile.java
+++ /dev/null
@@ -1,187 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import org.eclipse.datatools.connectivity.drivers.DriverManager;
-import org.eclipse.jpt.utility.internal.ClassTools;
-
-/**
- *  NullConnectionProfile
- */
-public final class NullConnectionProfile extends ConnectionProfile {
-	
-	private static NullConnectionProfile INSTANCE;
-
-	/**
-	 * singleton support
-	 */
-	static synchronized ConnectionProfile instance() {
-		if( INSTANCE == null) {
-			INSTANCE = new NullConnectionProfile();
-		}
-		return INSTANCE;
-	}
-
-	private NullConnectionProfile() {
-		super( null);
-	}
-
-	// ********** behavior **********
-
-	@Override
-	protected Connection buildConnection() {
-		return NullConnection.instance();
-	}
-
-	@Override
-	protected Database buildDatabase() {
-		return NullDatabase.instance();
-	}
-	
-	@Override
-	public void connect() {
-		// do nothing
-	}
-
-	@Override
-	public void disconnect() {
-		// do nothing
-	}
-	
-	@Override
-	void databaseChanged( Database database, int eventType) {
-		// do nothing
-	}
-	
-	@Override
-	 void catalogChanged( Catalog catalog, Database database, int eventType) {
-		// do nothing
-	}
-	
-	@Override
-	 void schemaChanged( Schema schema, Database database, int eventType) {
-		// do nothing
-	}
-	
-	@Override
-	 void tableChanged( Table table, Schema schema, Database database, int eventType) {
-		// do nothing
-	}
-
-	// ********** queries **********
-	
-	@Override
-	public Connection getConnection() {
-		return NullConnection.instance();
-	}
-
-	@Override
-	public Database getDatabase() {
-		return NullDatabase.instance();
-	}
-	
-	@Override
-	public String getName() {
-		return ClassTools.shortClassNameForObject( this);
-	}
-
-	@Override
-	public String getDatabaseName() {
-		return "";
-	}
-
-	@Override
-	public String getDatabaseProduct() {
-		return "";
-	}
-
-	@Override
-	public String getDatabaseVendor() {
-		return "";
-	}
-
-	@Override
-	public String getDatabaseVersion() {
-		return "";
-	}
-
-	@Override
-	public String getUserName() {
-		return "";
-	}
-
-	@Override
-	public String getUserPassword() {
-		return "";
-	}
-
-	@Override
-	public String getDriverClass() {
-		return "";
-	}
-
-	@Override
-	public String getUrl() {
-		return "";
-	}
-	
-	@Override
-	public String getInstanceId() {
-		return "";
-	}
-
-	@Override
-	public String getProviderId() {
-		return "";
-	}
-
-	@Override
-	public String getDriverDefinitionId() {
-		return "";
-	}
-
-	@Override
-	public String getDriverJarList() {
-		return "";
-	}
-	
-	@Override
-	public boolean isConnected() {
-		return false;
-	}
-	
-	@Override
-	boolean wraps( org.eclipse.datatools.connectivity.IConnectionProfile dtpProfile) {
-		return false;
-	}
-	
-	// ********** listeners **********
-
-	@Override
-	public void addProfileListener( ProfileListener listener) {
-		// do nothing
-	}
-
-	@Override
-	public void removeProfileListener( ProfileListener listener) {
-		// do nothing
-	}
-	
-	@Override
-	public void addConnectionListener( ConnectionListener listener) {
-		// do nothing
-	}
-
-	@Override
-	public void removeConnectionListener( ConnectionListener listener) {
-		// do nothing
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullDatabase.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullDatabase.java
deleted file mode 100644
index fa316b8..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/NullDatabase.java
+++ /dev/null
@@ -1,109 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.util.Collections;
-import java.util.Set;
-import org.eclipse.jpt.utility.internal.ClassTools;
-
-/**
- *  NullDatabase
- */
-public final class NullDatabase extends Database {
-
-	private static NullDatabase INSTANCE;
-
-	/**
-	 * singleton support
-	 */
-	static synchronized Database instance() {
-		if( INSTANCE == null) {
-			INSTANCE = new NullDatabase();
-		}
-		return INSTANCE;
-	}
-
-	private NullDatabase() {
-		super();
-	}
-
-	// ********** behavior **********
-	
-	@Override
-	void catalogChanged( Catalog catalog, int eventType) {
-		// do nothing
-	}
-
-	@Override
-	void schemaChanged( Schema schema, int eventType) {
-		// do nothing
-	}
-
-	@Override
-	void tableChanged( Table table,  Schema schema,int eventType) {
-		// do nothing
-	}
-	
-	@Override
-	void refresh() {
-		// do nothing
-	}
-	
-	@Override
-	protected void dispose() {
-		// do nothing
-	}
-	
-	@Override
-	protected boolean connectionIsOnline() {
-		return false;
-	}
-
-	// ********** queries **********
-
-	@Override
-	public String getName() {
-		return ClassTools.shortClassNameForObject( this);
-	}
-
-	@Override
-	public String getVendor() {
-		return this.getName();
-	}
-	
-	@Override
-	public String getVersion() {
-		return "";
-	}
-
-	// ***** catalogs
-
-	@Override
-	public boolean supportsCatalogs() {
-		return false;
-	}
-
-	@Override
-	public String getDefaultCatalogName() {
-		return "";
-	}
-
-	@Override
-	Set<Catalog> getCatalogs() {
-		return Collections.emptySet();
-	}
-
-	// ***** schemata
-	
-	@Override
-	Set<Schema> getSchemata() {
-		return Collections.emptySet();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ProfileListener.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ProfileListener.java
deleted file mode 100644
index 677b38c..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/ProfileListener.java
+++ /dev/null
@@ -1,35 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-/**
- * ProfileListener integrate th DTP IProfileListener listener.
- * This class purpose is to decouple from the DTP listeners by accepting wrappers as parameter.
- * 
- * @see org.eclipse.datatools.connectivity.IProfileListener
- */
-public interface ProfileListener {
-	/**
-	 * The specified profile has been added.
-	 */
-	public void profileAdded( ConnectionProfile profile);
-
-	/**
-	 * The specified profile has been deleted.
-	 */
-	public void profileDeleted( String profileName);
-
-	/**
-	 * The specified profile has been modified.  Modification includes
-	 * changes to any properties, the name, auto-connect flag, etc.
-	 */
-	public void profileChanged( ConnectionProfile profile);
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Schema.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Schema.java
deleted file mode 100644
index 9ef2c7f..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Schema.java
+++ /dev/null
@@ -1,299 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.text.Collator;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- *  Wrap a DTP Schema
- */
-public final class Schema extends DTPWrapper implements Comparable<Schema> {
-	final Database database;
-	final org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema;
-	private ICatalogObjectListener schemaListener;
-	
-	private Set<Table> tables;  // lazy-initialized
-	private Set<Sequence> sequences;  // lazy-initialized
-	
-
-	// ********** constructors **********
-
-	Schema( Database database, org.eclipse.datatools.modelbase.sql.schema.Schema dtpSchema) {
-		super();
-		this.database = database;
-		this.dtpSchema = dtpSchema;
-		this.initialize();
-	}
-
-	// ********** behavior **********
-
-	private void initialize() {
-		if( this.connectionIsOnline()) {
-			this.schemaListener = this.buildSchemaListener();
-			this.addCatalogObjectListener(( ICatalogObject) this.dtpSchema, this.schemaListener);
-		}
-	}
-	
-	@Override
-	protected boolean connectionIsOnline() {
-		return this.database.connectionIsOnline();
-	}
-
-	private ICatalogObjectListener buildSchemaListener() {
-       return new ICatalogObjectListener() {
-    	    public void notifyChanged( final ICatalogObject schema, final int eventType) {     
-    			if( schema == Schema.this.dtpSchema) {	
-    				Schema.this.refresh();
-    				Schema.this.database.schemaChanged( Schema.this, eventType);
-    			}
-    	    }
-        };
-    }
-
-	void refresh() {
-		this.disposeTables();
-		this.disposeSequences();
-		
-		this.tables = null;
-		this.sequences = null;
-	}
-
-	void tableChanged( Table table, int eventType) {
-		this.database.tableChanged( table, this, eventType);
-	}
-	
-	protected Table wrap( org.eclipse.datatools.modelbase.sql.tables.Table table) {
-		return new Table( this, table);
-	}
-	
-	protected Sequence wrap(  org.eclipse.datatools.modelbase.sql.schema.Sequence sequence) {
-		return new Sequence( this, sequence);
-	}
-
-	@Override
-	protected void dispose() {
-		this.removeCatalogObjectListener(( ICatalogObject) this.dtpSchema, this.schemaListener);
-
-		this.disposeTables();
-		this.disposeSequences();
-	}
-
-	private void disposeTables() {
-		if( this.tables != null) {
-			for( Iterator<Table> stream = this.tables(); stream.hasNext(); ) {
-				stream.next().dispose();
-			}
-		}
-	}
-
-	private void disposeSequences() {
-		if( this.sequences != null) {
-			for( Iterator<Sequence> stream = this.sequences(); stream.hasNext(); ) {
-				stream.next().dispose();
-			}
-		}
-	}
-	
-	// ********** queries **********
-
-	@Override
-	public String getName() {
-		return this.dtpSchema.getName();
-	}
-	
-	boolean isCaseSensitive() {
-		return this.database.isCaseSensitive();
-	}
-
-	Column column( org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		return this.database.column(dtpColumn);
-	}
-
-
-	// ********** tables **********
-
-	private synchronized Collection<Table> getTables() {
-		if( this.tables == null) {
-			this.tables = this.buildTables();
-		}
-		return this.tables;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Collection<org.eclipse.datatools.modelbase.sql.tables.Table> dtpTables() {
-		return this.dtpSchema.getTables();
-	}
-
-	private Set<Table> buildTables() {
-		Collection<org.eclipse.datatools.modelbase.sql.tables.Table> dtpTables = this.dtpTables();
-		Set<Table> result = new HashSet<Table>( dtpTables.size());
-		for (org.eclipse.datatools.modelbase.sql.tables.Table dtpTable : dtpTables) {
-			result.add( this.wrap(dtpTable));
-		}
-		return result;
-	}
-	
-	public Iterator<Table> tables() {
-		return this.getTables().iterator();
-	}
-
-	public int tablesSize() {
-		return this.getTables().size();
-	}
-
-	public boolean tablesContains( Column column) {
-		return this.getTables().contains( column);
-	}
-
-	public Iterator<String> tableNames() {
-		return new TransformationIterator<Table, String>( this.tables()) {
-			@Override
-			protected String transform( Table table) {
-				 return table.getName();
-			}
-		};
-	}
-
-	public boolean containsTableNamed( String name) {
-		return this.tableNamed( name) != null;
-	}
-
-	public Table tableNamed( String name) {
-		return this.isCaseSensitive() ? this.tableNamedInternal( name) : this.tableNamedIgnoreCase( name);
-	}
-	
-	private Table tableNamedInternal( String name) {
-		for( Iterator<Table> stream = this.tables(); stream.hasNext(); ) {
-			Table table = stream.next();
-			if( table.getName().equals( name)) {
-				return table;
-			}
-		}
-		return null;
-	}
-	
-	private Table tableNamedIgnoreCase( String name) {
-		for( Iterator<Table> stream = this.tables(); stream.hasNext(); ) {
-			Table table = stream.next();
-			if( StringTools.stringsAreEqualIgnoreCase( table.getName(), name)) {
-				return table;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * return the table for the specified dtp table
-	 */
-	Table table( org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		if( dtpTable.getSchema() != this.dtpSchema) {
-			return this.database.table( dtpTable);
-		}
-		for( Iterator<Table> stream = this.tables(); stream.hasNext(); ) {
-			Table table = stream.next();
-			if( table.wraps( dtpTable)) {
-				return table;
-			}
-		}
-		throw new IllegalArgumentException( "invalid DTP table: " + dtpTable);
-	}
-
-	// ***** sequences
-
-	private synchronized Collection<Sequence> getSequences() {
-		if( this.sequences == null) {
-			this.sequences = this.buildSequences();
-		}
-		return this.sequences;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Collection<org.eclipse.datatools.modelbase.sql.schema.Sequence> dtpSequences() {
-		return this.dtpSchema.getSequences();
-	}
-
-	private Set<Sequence> buildSequences() {
-		Collection<org.eclipse.datatools.modelbase.sql.schema.Sequence> dtpSequences = this.dtpSequences();
-		Set<Sequence> result = new HashSet<Sequence>( dtpSequences.size());
-		for (org.eclipse.datatools.modelbase.sql.schema.Sequence dtpSequence : dtpSequences) {
-			result.add( this.wrap(dtpSequence));
-		}
-		return result;
-	}
-
-	public Iterator<Sequence> sequences() {
-		return this.getSequences().iterator();
-	}
-
-	public int sequencesSize() {
-		return this.getSequences().size();
-	}
-
-	public boolean sequencesContains( Column column) {
-		return this.getSequences().contains( column);
-	}
-
-	public Iterator<String> sequenceNames() {
-		return new TransformationIterator<Sequence, String>(this.sequences()) {
-			@Override
-			protected String transform( Sequence sequence) {
-				 return sequence.getName();
-			}
-		};
-	}
-
-	public boolean containsSequenceNamed( String name) {
-		return this.sequenceNamed( name) != null;
-	}
-
-	public Sequence sequenceNamed( String name) {
-		return this.isCaseSensitive() ? this.sequenceNamedInternal( name) : this.sequenceNamedIgnoreCase( name);
-	}
-	
-	private Sequence sequenceNamedInternal( String name) {
-		for( Iterator<Sequence> stream = this.sequences(); stream.hasNext(); ) {
-			Sequence sequence = stream.next();
-			if( sequence.getName().equals( name)) {
-				return sequence;
-			}
-		}
-		return null;
-	}
-
-	private Sequence sequenceNamedIgnoreCase( String name) {
-		for( Iterator<Sequence> stream = this.sequences(); stream.hasNext(); ) {
-			Sequence sequence = stream.next();
-			if( sequence.getName().equalsIgnoreCase( name)) {
-				return sequence;
-			}
-		}
-		return null;
-	}
-	
-	boolean wraps( org.eclipse.datatools.modelbase.sql.schema.Schema schema) {
-		return this.dtpSchema == schema;
-	}
-
-	// ********** Comparable implementation **********
-
-	public int compareTo( Schema schema) {
-		return Collator.getInstance().compare( this.getName(), schema.getName());
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Sequence.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Sequence.java
deleted file mode 100644
index 7cb68a4..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Sequence.java
+++ /dev/null
@@ -1,74 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.text.Collator;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
-
-/**
- *  Wrap a DTP Sequence
- */
-public final class Sequence extends DTPWrapper implements Comparable<Sequence> {
-	private final Schema schema;
-	private final org.eclipse.datatools.modelbase.sql.schema.Sequence dtpSequence;
-	private ICatalogObjectListener sequenceListener;
-
-	Sequence( Schema schema, org.eclipse.datatools.modelbase.sql.schema.Sequence dtpSequence) {
-		super();
-		this.schema = schema;
-		this.dtpSequence = dtpSequence;
-		this.initialize();
-	}
-
-	// ********** behavior **********
-
-	private void initialize() {
-		if( this.connectionIsOnline()) {
-			this.sequenceListener = this.buildSequenceListener();
-			this.addCatalogObjectListener(( ICatalogObject) this.dtpSequence, this.sequenceListener);
-		}
-	}
-	
-	@Override
-	protected boolean connectionIsOnline() {
-		return this.schema.connectionIsOnline();
-	}
-	
-	private ICatalogObjectListener buildSequenceListener() {
-       return new ICatalogObjectListener() {
-    	    public void notifyChanged( final ICatalogObject sequence, final int eventType) {
-//				TODO
-//    			if( sequence == Sequence.this.dtpSequence) {	    	    	
-//    				Sequence.this.schema.sequenceChanged( Sequence.this, eventType);
-//    			}
-    	    }
-        };
-    }
-
-
-	// ********** queries **********
-
-	@Override
-	protected void dispose() {
-		
-		this.removeCatalogObjectListener(( ICatalogObject) this.dtpSequence, this.sequenceListener);
-	}
-
-	@Override
-	public String getName() {
-		return this.dtpSequence.getName();
-	}
-
-	public int compareTo( Sequence sequence) {
-		return Collator.getInstance().compare( this.getName(), sequence.getName());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Table.java b/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Table.java
deleted file mode 100644
index 7b49b72..0000000
--- a/jpa/plugins/org.eclipse.jpt.db/src/org/eclipse/jpt/db/internal/Table.java
+++ /dev/null
@@ -1,359 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.internal;
-
-import java.text.Collator;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
-import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObjectListener;
-import org.eclipse.datatools.modelbase.sql.constraints.PrimaryKey;
-import org.eclipse.datatools.modelbase.sql.tables.BaseTable;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.NameTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- *  Wrap a DTP Table
- */
-public final class Table extends DTPWrapper implements Comparable<Table> {
-	final Schema schema;
-	final org.eclipse.datatools.modelbase.sql.tables.Table dtpTable;
-	private ICatalogObjectListener tableListener;
-	
-	private Set<Column> columns;  // lazy-initialized
-	private Set<Column> primaryKeyColumns;  // lazy-initialized
-	private Set<ForeignKey> foreignKeys;  // lazy-initialized
-	private Set<Column> foreignKeyColumns;  // lazy-initialized
-	
-	// ********** constructors **********
-
-	Table(Schema schema, org.eclipse.datatools.modelbase.sql.tables.Table dtpTable) {
-		super();
-		this.schema = schema;
-		this.dtpTable = dtpTable;
-		this.initialize();
-	}
-
-
-	// ********** behavior **********
-
-	private void initialize() {
-		if( this.connectionIsOnline()) {
-			this.tableListener = this.buildTableListener();
-			this.addCatalogObjectListener(( ICatalogObject) this.dtpTable, this.tableListener);
-		}
-	}
-	
-	@Override
-	protected boolean connectionIsOnline() {
-		return this.schema.connectionIsOnline();
-	}
-	
-	private ICatalogObjectListener buildTableListener() {
-       return new ICatalogObjectListener() {
-    	    public void notifyChanged( final ICatalogObject table, final int eventType) {     
-    			if( table == Table.this.dtpTable) {	    	    	
-    				Table.this.refresh();
-	    			Table.this.schema.tableChanged( Table.this, eventType);
-    			}
-    	    }
-        };
-    }
-
-    void refresh() {
-		this.disposeColumns();
-		
-    	this.columns = null;
-    	this.primaryKeyColumns = null;
-    	this.foreignKeys = null;
-    	this.foreignKeyColumns = null;
-    }
-
-	@Override
-	protected void dispose() {
-		this.removeCatalogObjectListener(( ICatalogObject) this.dtpTable, this.tableListener);
-		
-		this.disposeColumns();
-		this.disposeForeignKey();
-	}
-
-	private void disposeColumns() {
-		if( this.columns != null) {
-			for( Iterator<Column> stream = this.columns(); stream.hasNext(); ) {
-				stream.next().dispose();
-			}
-		}
-	}
-
-	private void disposeForeignKey() {
-		if( this.foreignKeys != null) {
-			for( Iterator<ForeignKey> stream = this.foreignKeys(); stream.hasNext(); ) {
-				stream.next().dispose();
-			}
-		}
-	}
-
-	// ********** queries **********
-
-	@Override
-	public String getName() {
-		return this.dtpTable.getName();
-	}
-	
-	boolean isCaseSensitive() {
-		return this.schema.isCaseSensitive();
-	}
-
-	public String shortJavaClassName() {
-		String jName = this.getName();
-		if ( ! this.isCaseSensitive()) {
-			jName = StringTools.capitalize(jName.toLowerCase());
-		}
-		return NameTools.convertToJavaIdentifier(jName);
-	}
-
-	public boolean matchesShortJavaClassName(String shortJavaClassName) {
-		return this.isCaseSensitive() ?
-			this.getName().equals(shortJavaClassName)
-		:
-			this.getName().equalsIgnoreCase(shortJavaClassName);
-	}
-
-	public String javaFieldName() {
-		String jName = this.getName();
-		if ( ! this.isCaseSensitive()) {
-			jName = jName.toLowerCase();
-		}
-		return NameTools.convertToJavaIdentifier(jName);
-	}
-
-	boolean wraps(org.eclipse.datatools.modelbase.sql.tables.Table table) {
-		return this.dtpTable == table;
-	}
-
-	/**
-	 * return the table for the specified DTP table
-	 */
-	Table table(org.eclipse.datatools.modelbase.sql.tables.Table table) {
-		return this.schema.table(table);
-	}
-
-	// ***** columns
-
-	private synchronized Set<Column> getColumns() {
-		if (this.columns == null) {
-			this.columns = this.buildColumns();
-		}
-		return this.columns;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Collection<org.eclipse.datatools.modelbase.sql.tables.Column> dtpColumns() {
-		return this.dtpTable.getColumns();
-	}
-
-	private Set<Column> buildColumns() {
-		Collection<org.eclipse.datatools.modelbase.sql.tables.Column> dtpColumns = this.dtpColumns();
-		Set<Column> result = new HashSet<Column>(dtpColumns.size());
-		for (org.eclipse.datatools.modelbase.sql.tables.Column c : dtpColumns) {
-			result.add(new Column(this, c));
-		}
-		return result;
-	}
-
-	public Iterator<Column> columns() {
-		return this.getColumns().iterator();
-	}
-
-	public int columnsSize() {
-		return this.getColumns().size();
-	}
-
-	public boolean columnsContains(Column column) {
-		return this.getColumns().contains(column);
-	}
-
-	public Iterator<String> columnNames() {
-		return new TransformationIterator<Column, String>(this.columns()) {
-			@Override
-			protected String transform(Column next) {
-				 return next.getName();
-			}
-		};
-	}
-
-	public boolean containsColumnNamed(String name) {
-		return this.columnNamed(name) != null;
-	}
-
-	public Column columnNamed(String name) {
-		return this.isCaseSensitive() ? this.columnNamedInternal(name) : this.columnNamedIgnoreCase(name);
-	}
-	
-	private Column columnNamedInternal(String name) {
-		for (Iterator<Column> stream = this.columns(); stream.hasNext(); ) {
-			Column column = stream.next();
-			if (column.getName().equals(name)) {
-				return column;
-			}
-		}
-		return null;
-	}
-
-	private Column columnNamedIgnoreCase(String name) {
-		for (Iterator<Column> stream = this.columns(); stream.hasNext(); ) {
-			Column column = stream.next();
-			if (StringTools.stringsAreEqualIgnoreCase(column.getName(), name)) {
-				return column;
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * return the column for the specified dtp column
-	 */
-	Column column(org.eclipse.datatools.modelbase.sql.tables.Column dtpColumn) {
-		if (dtpColumn.getTable() != this.dtpTable) {
-			return this.schema.column(dtpColumn);
-		}
-		for (Iterator<Column> stream = this.columns(); stream.hasNext(); ) {
-			Column column = stream.next();
-			if (column.wraps(dtpColumn)) {
-				return column;
-			}
-		}
-		throw new IllegalArgumentException("invalid dtp column: " + dtpColumn);
-	}
-
-
-	// ***** primaryKeyColumns
-
-	private synchronized Set<Column> getPrimaryKeyColumns() {
-		if (this.primaryKeyColumns == null) {
-			this.primaryKeyColumns = this.buildPrimaryKeyColumns();
-		}
-		return this.primaryKeyColumns;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Collection<org.eclipse.datatools.modelbase.sql.tables.Column> columns(PrimaryKey pk) {
-		return pk.getMembers();
-	}
-
-	private Set<Column> buildPrimaryKeyColumns() {
-		if ( ! (this.dtpTable instanceof BaseTable)) {
-			return Collections.emptySet();
-		}
-		PrimaryKey pk = ((BaseTable) this.dtpTable).getPrimaryKey();
-		if (pk == null) {
-			// no PK was defined
-			return Collections.emptySet();
-		}
-		Collection<org.eclipse.datatools.modelbase.sql.tables.Column> pkColumns = this.columns(pk);
-		Set<Column> result = new HashSet<Column>(pkColumns.size());
-		for (org.eclipse.datatools.modelbase.sql.tables.Column pkColumn : pkColumns) {
-			result.add(this.column(pkColumn));
-		}
-		return result;
-	}
-
-	public Iterator<Column> primaryKeyColumns() {
-		return this.getPrimaryKeyColumns().iterator();
-	}
-
-	public int primaryKeyColumnsSize() {
-		return this.getPrimaryKeyColumns().size();
-	}
-
-	public boolean primaryKeyColumnsContains(Column column) {
-		return this.getPrimaryKeyColumns().contains(column);
-	}
-
-
-	// ***** foreignKeys
-
-	private synchronized Set<ForeignKey> getForeignKeys() {
-		if (this.foreignKeys == null) {
-			this.foreignKeys = this.buildForeignKeys();
-		}
-		return this.foreignKeys;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Collection<org.eclipse.datatools.modelbase.sql.constraints.ForeignKey> dtpForeignKeys() {
-		return ((BaseTable) this.dtpTable).getForeignKeys();
-	}
-
-	private Set<ForeignKey> buildForeignKeys() {
-		if ( ! (this.dtpTable instanceof BaseTable)) {
-			return Collections.emptySet();
-		}
-		Collection<org.eclipse.datatools.modelbase.sql.constraints.ForeignKey> dtpForeignKeys = this.dtpForeignKeys();
-		Set<ForeignKey> result = new HashSet<ForeignKey>(dtpForeignKeys.size());
-		for (org.eclipse.datatools.modelbase.sql.constraints.ForeignKey dtpForeignKey : dtpForeignKeys) {
-			result.add(new ForeignKey(this, dtpForeignKey));
-		}
-		return result;
-	}
-
-	public Iterator<ForeignKey> foreignKeys() {
-		return this.getForeignKeys().iterator();
-	}
-
-	public int foreignKeysSize() {
-		return this.getForeignKeys().size();
-	}
-
-
-	// ***** foreignKeyColumns
-
-	private synchronized Set<Column> getForeignKeyColumns() {
-		if (this.foreignKeyColumns == null) {
-			this.foreignKeyColumns = this.buildForeignKeyColumns();
-		}
-		return this.foreignKeyColumns;
-	}
-
-	private Set<Column> buildForeignKeyColumns() {
-		if ( ! (this.dtpTable instanceof BaseTable)) {
-			return Collections.emptySet();
-		}
-		Set<Column> result = new HashSet<Column>(this.columnsSize());
-		for (Iterator<ForeignKey> stream = this.foreignKeys(); stream.hasNext(); ) {
-			CollectionTools.addAll(result, stream.next().baseColumns());
-		}
-		return result;
-	}
-
-	public Iterator<Column> foreignKeyColumns() {
-		return this.getForeignKeyColumns().iterator();
-	}
-
-	public int foreignKeyColumnsSize() {
-		return this.getForeignKeyColumns().size();
-	}
-
-	public boolean foreignKeyColumnsContains(Column column) {
-		return this.getForeignKeyColumns().contains(column);
-	}
-
-	// ********** Comparable implementation **********
-
-	public int compareTo( Table table) {
-		return Collator.getInstance().compare( this.getName(), table.getName());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/about.html b/jpa/plugins/org.eclipse.jpt.doc.user/about.html
index 794af75..8f21cb8 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/about.html
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/about.html
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:59 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>About this content</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>About this content</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/concept_mapping.htm b/jpa/plugins/org.eclipse.jpt.doc.user/concept_mapping.htm
index c17e916..1b826a5 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/concept_mapping.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/concept_mapping.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Understanding OR mappings</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Understanding OR mappings</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -29,7 +29,7 @@
 </td>
 </tr>
 </table>
-<p><a id="sthref44" name="sthref44"></a><a id="sthref45" name="sthref45"></a>The Dali OR (object-relational) Mapping Tool allows you to describe how your entity objects <span class="italic">map</span> to the data source (or other objects). This approach isolates persistence information from the object model&ndash;developers are free to design their ideal object model, and DBAs are free to design their ideal schema.</p>
+<p><a id="sthref44" name="sthref44"></a><a id="sthref45" name="sthref45"></a>The Dali OR (object-relational) Mapping Tool allows you to describe how your entity objects <span class="italic">map</span> to the data source (or other objects). This approach isolates persistence information from the object model. Developers are free to design their ideal object model, and DBAs are free to design their ideal schema.</p>
 <p>These mappings transform an object data member type to a corresponding relational database data source representation. These OR mappings can also transform object data members that reference other domain objects stored in other tables in the database and are related through foreign keys.</p>
 <p>You can use these mappings to map simple data types including primitives (such as <code>int</code>), JDK classes (such as <code>String</code>), and large object (LOB) values. You can also use them to transform object data members that reference other domain objects by way of association where data source representations require object identity maintenance (such as sequencing and back references) and possess various types of multiplicity and navigability. The appropriate mapping class is chosen primarily by the cardinality of the relationship.</p>
 <img src="img/ngrelt.png" alt="Related task" title="Related task" /><br />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/concept_persistence.htm b/jpa/plugins/org.eclipse.jpt.doc.user/concept_persistence.htm
index cf98416..8f339e5 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/concept_persistence.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/concept_persistence.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Understanding Java persistence</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Understanding Java persistence</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/concepts.htm b/jpa/plugins/org.eclipse.jpt.doc.user/concepts.htm
index e709730..38f63d8 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/concepts.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/concepts.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Concepts</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Concepts</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/concepts001.htm b/jpa/plugins/org.eclipse.jpt.doc.user/concepts001.htm
index c9ac9b2..9ad5cc1 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/concepts001.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/concepts001.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Understanding EJB 3.0 Java Persistence API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Understanding EJB 3.0 Java Persistence API</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/concepts002.htm b/jpa/plugins/org.eclipse.jpt.doc.user/concepts002.htm
index 2d86027..40716b5 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/concepts002.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/concepts002.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>The persistence.xml file</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>The persistence.xml file</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/concepts003.htm b/jpa/plugins/org.eclipse.jpt.doc.user/concepts003.htm
index 5f4bd90..80395b0 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/concepts003.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/concepts003.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>The orm.xml file</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>The orm.xml file</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/dcommon/html/cpyr.htm b/jpa/plugins/org.eclipse.jpt.doc.user/dcommon/html/cpyr.htm
index 382ec67..fe52e95 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/dcommon/html/cpyr.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/dcommon/html/cpyr.htm
@@ -3,6 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
 <head>
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
 <!--  <meta http-equiv="refresh" content="0;url=../../legal.htm"> -->
 </head>
 <body>
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started.htm
index c0f78f6..658022b 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Getting started</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Getting started</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started001.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started001.htm
index ffee83a..e17ea91 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started001.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started001.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Requirements and installation</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Requirements and installation</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started002.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started002.htm
index efba0eb..52f4e25 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started002.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started002.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Dali quick start</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Dali quick start</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started003.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started003.htm
index c0bc5e6..dc0cbed 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started003.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started003.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Creating a new project</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Creating a new project</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started004.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started004.htm
index da7900a..8bc6b26 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started004.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started004.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Creating a Java persistent entity</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Creating a Java persistent entity</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started005.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started005.htm
index f3e564e..53017e7 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started005.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started005.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Mapping an entity</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Mapping an entity</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started006.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started006.htm
index 28dc86e..2dde4a2 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started006.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started006.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Dali basic tutorial</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Dali basic tutorial</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started007.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started007.htm
index 909ad1f..654b0c9 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started007.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started007.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Generate the tutorial database schema</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Generate the tutorial database schema</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started008.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started008.htm
index 4e4585c..e277fed 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started008.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started008.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create a database connection</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create a database connection</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started009.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started009.htm
index c9190e5..fed0cfa 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started009.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started009.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create a JPA project</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create a JPA project</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started010.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started010.htm
index df685ef..69ec202 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started010.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started010.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create persistent Java entities</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create persistent Java entities</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started011.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started011.htm
index 55ab05f..0cd45a9 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started011.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started011.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Add fields to the entities</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Add fields to the entities</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started012.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started012.htm
index 3b08798..5f6950e 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started012.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started012.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Associate the entity with a database table</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Associate the entity with a database table</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started013.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started013.htm
index 785a659..d1928e6 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started013.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started013.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create OR mappings</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create OR mappings</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started014.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started014.htm
index de4447d..a4cda76 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started014.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started014.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create ID mappings</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create ID mappings</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started015.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started015.htm
index 63e9f80..3d5ff04 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started015.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started015.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:52 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create basic mappings</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create basic mappings</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started016.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started016.htm
index 0b21fc1..e57c4f5 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started016.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started016.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create one-to-one mappings</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create one-to-one mappings</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started017.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started017.htm
index d75a00d..3b69b34 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started017.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started017.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create one-to-many mappings</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create one-to-many mappings</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started018.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started018.htm
index f2627f0..2798be8 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started018.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started018.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create many-to-one mappings</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create many-to-one mappings</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started019.htm b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started019.htm
index 9223082..3b8c883 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/getting_started019.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/getting_started019.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create version mappings</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create version mappings</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/legal.htm b/jpa/plugins/org.eclipse.jpt.doc.user/legal.htm
index a36a216..12d8b69 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/legal.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/legal.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:59 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Legal</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Legal</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/plugin.xml b/jpa/plugins/org.eclipse.jpt.doc.user/plugin.xml
index e7d121a..a267bbc 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/plugin.xml
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/plugin.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
-<plugin name="JPA Documentation Plug-in" id="org.eclipse.jpt.doc.user" version="1.0.0" provider-name="Oracle">
+<plugin>
 	<!-- =========== -->
 	<!-- Define TOC  -->
 	<!-- =========== -->
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_details_orm.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_details_orm.htm
index 3e14b3e..32768d4 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_details_orm.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_details_orm.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>JPA Details view (for orm.xml)</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>JPA Details view (for orm.xml)</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_jpa_facet.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_jpa_facet.htm
index 305de4f..bdfd5fd 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_jpa_facet.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_jpa_facet.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>JPA Facet page</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>JPA Facet page</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_mapping_general.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_mapping_general.htm
index 85af149..400f242 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_mapping_general.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_mapping_general.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>General information</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>General information</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -72,10 +72,10 @@
 <td align="left" headers="r6c1-t6 r1c2-t6">Defines how data is loaded from the database:
 <ul>
 <li type="disc">
-<p>Eager &ndash; Data is loaded in before it is actually needed.</p>
+<p>Eager - Data is loaded in before it is actually needed.</p>
 </li>
 <li type="disc">
-<p>Lazy &ndash; Data is loaded only when required by the transaction.</p>
+<p>Lazy - Data is loaded only when required by the transaction.</p>
 </li>
 </ul>
 </td>
@@ -101,13 +101,13 @@
 <td align="left" headers="r9c1-t6 r1c2-t6">Specifies if this field is one of the following:
 <ul>
 <li type="disc">
-<p>Date &ndash; <code>java.sql.Date</code></p>
+<p>Date - <code>java.sql.Date</code></p>
 </li>
 <li type="disc">
-<p>Time &ndash; <code>java.sql.Time</code></p>
+<p>Time - <code>java.sql.Time</code></p>
 </li>
 <li type="disc">
-<p>Timestamp &ndash; <code>java.sql.Timestamp</code></p>
+<p>Timestamp - <code>java.sql.Timestamp</code></p>
 </li>
 </ul>
 <p>This field corresponds to the <code>@Temporal</code> annotation.</p>
@@ -142,7 +142,7 @@
 <td align="left" headers="r12c1-t6 r1c2-t6">Specify which operations are propagated throughout the entity.
 <ul>
 <li type="disc">
-<p>All &ndash; All operations</p>
+<p>All - All operations</p>
 </li>
 <li type="disc">
 <p>Persist</p>
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_new_jpa_project.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_new_jpa_project.htm
index 2a498d7..be37cfa 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_new_jpa_project.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_new_jpa_project.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>New JPA Project page</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>New JPA Project page</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_new_jpa_project_wizard.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_new_jpa_project_wizard.htm
index b68d3fe..4fcec9c 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_new_jpa_project_wizard.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_new_jpa_project_wizard.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create New JPA Project wizard</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create New JPA Project wizard</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_map_view.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_map_view.htm
index 12fffe6..b93ae33 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_map_view.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_map_view.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>JPA Details view (for attributes)</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>JPA Details view (for attributes)</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_outline.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_outline.htm
index 083c276..92cc34d 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_outline.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_outline.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>JPA Structure view</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>JPA Structure view</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_perspective.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_perspective.htm
index 92641ca..1dbc792 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_perspective.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_perspective.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>JPA Development perspective</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>JPA Development perspective</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_prop_view.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_prop_view.htm
index 83e0d10..a6ea107 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_prop_view.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_persistence_prop_view.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>JPA Details view (for entities)</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>JPA Details view (for entities)</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_primary_key.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_primary_key.htm
index 8875800..d5084e7 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_primary_key.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_primary_key.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Primary Key Generation information</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Primary Key Generation information</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -51,13 +51,13 @@
 <ul>
 <li type="disc">Auto</li>
 <li type="disc">
-<p>Identity &ndash; Values are assigned by the database's <span class="bold">Identity</span> column.</p>
+<p>Identity - Values are assigned by the database's <span class="bold">Identity</span> column.</p>
 </li>
 <li type="disc">
-<p>Sequence &ndash; Values are assigned by a sequence table (see <a href="#CACFFHEH">Sequence&nbsp;Generator</a>).</p>
+<p>Sequence - Values are assigned by a sequence table (see <a href="#CACFFHEH">Sequence&nbsp;Generator</a>).</p>
 </li>
 <li type="disc">
-<p>Table &ndash; Values are assigned by a database table (see <a href="#CACGFEAH">Table Generator</a>).</p>
+<p>Table - Values are assigned by a database table (see <a href="#CACGFEAH">Table Generator</a>).</p>
 </li>
 </ul>
 </td>
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/ref_project_properties.htm b/jpa/plugins/org.eclipse.jpt.doc.user/ref_project_properties.htm
index 9b7ac94..9fc5005 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/ref_project_properties.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/ref_project_properties.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Project Properties page - JPA Options</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Project Properties page - JPA Options</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -25,7 +25,7 @@
 <table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100%">
 <tr valign="bottom">
 <td align="left" width="86%">
-<h1>Project Properties page &ndash; JPA Options</h1>
+<h1>Project Properties page - JPA Options</h1>
 </td>
 </tr>
 </table>
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference.htm
index 7e82de0..5dc89a2 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Reference</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Reference</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference001.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference001.htm
index cc6300f..d0a856b8 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference001.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference001.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Wizards</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Wizards</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference002.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference002.htm
index 8a6374b..b5a99a9 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference002.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference002.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Property pages</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Property pages</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference003.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference003.htm
index 57d9770..58601b1 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference003.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference003.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>General information</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>General information</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference004.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference004.htm
index b695f68..74775a8 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference004.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference004.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Secondary table information</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Secondary table information</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference005.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference005.htm
index 6fa75a1..c905aae 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference005.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference005.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Inheritance information</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Inheritance information</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -45,13 +45,13 @@
 <td align="left" headers="r2c1-t5 r1c2-t5">Specify the strategy to use when mapping a class or class hierarchy:
 <ul>
 <li type="disc">
-<p>Single table &ndash; All classes in the hierarchy are mapped to a single table.</p>
+<p>Single table - All classes in the hierarchy are mapped to a single table.</p>
 </li>
 <li type="disc">
-<p>Joined &ndash; The root of the hierarchy is mapped to a single table; each child maps to its own table.</p>
+<p>Joined - The root of the hierarchy is mapped to a single table; each child maps to its own table.</p>
 </li>
 <li type="disc">
-<p>Table per class &ndash; Each class is mapped to a separate table.</p>
+<p>Table per class - Each class is mapped to a separate table.</p>
 </li>
 </ul>
 </td>
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference006.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference006.htm
index e6dee40..45b9c12 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference006.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference006.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Join Table Information</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Join Table Information</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference007.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference007.htm
index 9ca50cd..fb51f2e 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference007.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference007.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Join Columns Information</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Join Columns Information</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference008.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference008.htm
index ec9b54d..8e81971 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference008.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference008.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>General information</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>General information</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference009.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference009.htm
index efc2cf7..5a84da5 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference009.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference009.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Persistence Unit information</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Persistence Unit information</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference010.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference010.htm
index bf02a64..87bfc6b 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference010.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference010.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Preferences</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Preferences</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -32,7 +32,7 @@
 <p>This section includes information on the following preference pages:</p>
 <ul>
 <li type="disc">
-<p><a href="ref_project_properties.htm#BABJHBCI">Project Properties page &ndash; JPA Options</a></p>
+<p><a href="ref_project_properties.htm#BABJHBCI">Project Properties page - JPA Options</a></p>
 </li>
 </ul>
 <!-- Start Footer -->
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference011.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference011.htm
index ff0ec97..942eaf5 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference011.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference011.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Dialogs</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Dialogs</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference012.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference012.htm
index 6c01c65..510ecb3 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference012.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference012.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Edit Join Columns Dialog</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Edit Join Columns Dialog</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference013.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference013.htm
index 8f9da2f..08937e2 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference013.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference013.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Icons and buttons</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Icons and buttons</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference014.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference014.htm
index 22e9292..043d0a0 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference014.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference014.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Icons</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Icons</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference015.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference015.htm
index 40e1ef2..37531be 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference015.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference015.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Buttons</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Buttons</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference016.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference016.htm
index 7c7c527..7012743 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference016.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference016.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Javadoc</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Javadoc</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/reference017.htm b/jpa/plugins/org.eclipse.jpt.doc.user/reference017.htm
index 6761229..080d092 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/reference017.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/reference017.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Dali Developer Documentation</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Dali Developer Documentation</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/task_add_persistence.htm b/jpa/plugins/org.eclipse.jpt.doc.user/task_add_persistence.htm
index 9463c8b..fbb1ed0 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/task_add_persistence.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/task_add_persistence.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:54 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Adding persistence to a class</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Adding persistence to a class</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/task_additonal_tables.htm b/jpa/plugins/org.eclipse.jpt.doc.user/task_additonal_tables.htm
index 0674fcd..1416205 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/task_additonal_tables.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/task_additonal_tables.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:54 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Specifying additional tables</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Specifying additional tables</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/task_create_new_project.htm b/jpa/plugins/org.eclipse.jpt.doc.user/task_create_new_project.htm
index 6123956..b6d33fa 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/task_create_new_project.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/task_create_new_project.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Creating a new JPA project</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Creating a new JPA project</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/task_generate_entities.htm b/jpa/plugins/org.eclipse.jpt.doc.user/task_generate_entities.htm
index 4ac1b09..743ece1 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/task_generate_entities.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/task_generate_entities.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:57 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Generate Entities from Tables dialog</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Generate Entities from Tables dialog</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -50,7 +50,7 @@
 </tr>
 <tr align="left" valign="top">
 <td align="left" id="r4c1-t13" headers="r1c1-t13">Tables</td>
-<td align="left" headers="r4c1-t13 r1c2-t13">Select the tables from which to create Java persistent entities. The tables shown are determined by the database connection that you defined in the <a href="ref_project_properties.htm#BABJHBCI">Project Properties page &ndash; JPA Options</a>.</td>
+<td align="left" headers="r4c1-t13 r1c2-t13">Select the tables from which to create Java persistent entities. The tables shown are determined by the database connection that you defined in the <a href="ref_project_properties.htm#BABJHBCI">Project Properties page - JPA Options</a>.</td>
 </tr>
 </tbody>
 </table>
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/task_inheritance.htm b/jpa/plugins/org.eclipse.jpt.doc.user/task_inheritance.htm
index 9073764..42015c0 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/task_inheritance.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/task_inheritance.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:54 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Specifying entity inheritance</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Specifying entity inheritance</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/task_manage_orm.htm b/jpa/plugins/org.eclipse.jpt.doc.user/task_manage_orm.htm
index 5246efc..c749d97 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/task_manage_orm.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/task_manage_orm.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:54 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Managing the orm.xml file</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Managing the orm.xml file</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/task_manage_persistence.htm b/jpa/plugins/org.eclipse.jpt.doc.user/task_manage_persistence.htm
index 8150519..18bd864 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/task_manage_persistence.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/task_manage_persistence.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Managing the persistence.xml file</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Managing the persistence.xml file</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/task_mapping.htm b/jpa/plugins/org.eclipse.jpt.doc.user/task_mapping.htm
index e9bb1c3..8c1d6df 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/task_mapping.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/task_mapping.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:55 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Mapping an entity</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Mapping an entity</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks.htm
index 0e1b27c..7209833 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Tasks</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Tasks</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks001.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks001.htm
index 48e3c13..5b643a4 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks001.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks001.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:53 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Working with persistence.xml file</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Working with persistence.xml file</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks002.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks002.htm
index 13aa22b..2f1129c 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks002.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks002.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:54 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Synchronizing classes</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Synchronizing classes</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks003.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks003.htm
index 400091d..c652365 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks003.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks003.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:54 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Working with orm.xml file</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Working with orm.xml file</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks004.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks004.htm
index feddf4d..1330b04 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks004.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks004.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:54 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Entity</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Entity</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks005.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks005.htm
index 1d220dd..4fea3e0 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks005.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks005.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:54 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Embeddable</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Embeddable</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks006.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks006.htm
index 7486209..0012aa2 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks006.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks006.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:54 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Mapped superclass</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Mapped superclass</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks007.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks007.htm
index 10bb4cb..4ad3ef6 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks007.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks007.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:55 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Basic mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Basic mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -103,16 +103,16 @@
 <td align="left" headers="r3c1-t4 r1c2-t4">The database column mapped to the entity attribute. See <a href="ref_mapping_general.htm#CACGCBHB">"Column"</a> for details.
 <ul>
 <li type="disc">
-<p>Name &ndash; Name of the database column.</p>
+<p>Name - Name of the database column.</p>
 </li>
 <li type="disc">
-<p>Table &ndash; Name of the database table.</p>
+<p>Table - Name of the database table.</p>
 </li>
 <li type="disc">
-<p>Insertable &ndash; Specify if the column is always included in <code>SQL INSERT</code> statements.</p>
+<p>Insertable - Specify if the column is always included in <code>SQL INSERT</code> statements.</p>
 </li>
 <li type="disc">
-<p>Updatable &ndash; Specify if the column is always included in <code>SQL UPDATE</code> statements.</p>
+<p>Updatable - Specify if the column is always included in <code>SQL UPDATE</code> statements.</p>
 </li>
 </ul>
 </td>
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks008.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks008.htm
index f621a37..bdbba71 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks008.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks008.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:55 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Embedded mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Embedded mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -66,16 +66,16 @@
 <td align="left" headers="r4c1-t5 r1c2-t5">The database column (and its table) mapped to the entity attribute. See <a href="ref_mapping_general.htm#CACGCBHB">"Column"</a> for details.
 <ul>
 <li type="disc">
-<p>Name &ndash; Name of the database column.</p>
+<p>Name - Name of the database column.</p>
 </li>
 <li type="disc">
-<p>Table &ndash; Name of the database table.</p>
+<p>Table - Name of the database table.</p>
 </li>
 <li type="disc">
-<p>Insertable &ndash; Specify if the column is always included in <code>SQL INSERT</code> statements.</p>
+<p>Insertable - Specify if the column is always included in <code>SQL INSERT</code> statements.</p>
 </li>
 <li type="disc">
-<p>Updatable &ndash; Specify if the column is always included in <code>SQL UPDATE</code> statements.</p>
+<p>Updatable - Specify if the column is always included in <code>SQL UPDATE</code> statements.</p>
 </li>
 </ul>
 </td>
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks009.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks009.htm
index 1df9648..6999dd1 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks009.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks009.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:55 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Embedded ID mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Embedded ID mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks010.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks010.htm
index e8a4380..5472078 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks010.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks010.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:55 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>ID mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>ID mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks011.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks011.htm
index d8c2ff9..ae12cc0 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks011.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks011.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:55 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Many-to-many mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Many-to-many mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks012.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks012.htm
index 71bcf3d..82abc53 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks012.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks012.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:55 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Many-to-one mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Many-to-one mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks013.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks013.htm
index 61a72af..5c5ac09 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks013.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks013.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:55 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>One-to-many mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>One-to-many mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks014.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks014.htm
index 99d29fa..c67cbd6 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks014.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks014.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:56 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>One-to-one mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>One-to-one mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks015.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks015.htm
index 92643c4..acf9215 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks015.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks015.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:56 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Transient mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Transient mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks016.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks016.htm
index 3043de5..c1b4291 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks016.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks016.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:56 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Version mapping</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Version mapping</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks017.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks017.htm
index 571448f..7959ad3 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks017.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks017.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:56 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Generating entities from tables</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Generating entities from tables</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks018.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks018.htm
index e9cee0e..986b4fa 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks018.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks018.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:56 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Validating mappings and reporting problems</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Validating mappings and reporting problems</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks019.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks019.htm
index 060ae2d..1ea8850 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks019.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks019.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:56 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Error messages</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Error messages</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks020.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks020.htm
index 3cc8ed8..01861df 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks020.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks020.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:56 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Warning messages</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Warning messages</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tasks021.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tasks021.htm
index 16bd18b..f0956b7 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tasks021.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tasks021.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:56 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Modifying persistent project properties</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Modifying persistent project properties</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
@@ -35,11 +35,11 @@
 <li>
 <p>Right-click the project in the <span class="gui-object-title">Explorer</span> view and select <span class="gui-object-action">Properties</span>. The Properties page appears.</p>
 <div class="figure"><a id="sthref184" name="sthref184"></a>
-<p class="titleinfigure">Properties &ndash; Persistence Page</p>
+<p class="titleinfigure">Properties - Persistence Page</p>
 <img src="img/properties_persistence.png" alt="This figure shows the JPA options on the Properties dialog." title="This figure shows the JPA options on the Properties dialog." /><br /></div>
 <!-- class="figure" --></li>
 <li>
-<p>Use this table to complete the remaining fields on the Properties &ndash; JPA page and click <span class="bold">OK</span>.</p>
+<p>Use this table to complete the remaining fields on the Properties - JPA page and click <span class="bold">OK</span>.</p>
 <div class="inftblruleinformal">
 <table class="RuleInformal" title="This table lists the fields in the Properties - Java Persistence dialog." summary="This table lists the fields in the Properties - Java Persistence dialog." dir="ltr" border="1" width="100%" frame="border" rules="all" cellpadding="3" cellspacing="0">
 <thead>
@@ -70,7 +70,7 @@
 <p>&nbsp;</p>
 <img src="img/ngrelr.png" alt="Related reference" title="Related reference" /><br />
 <br />
-<a href="ref_project_properties.htm#BABJHBCI">Project Properties page &ndash; JPA Options</a>
+<a href="ref_project_properties.htm#BABJHBCI">Project Properties page - JPA Options</a>
 <p>&nbsp;</p>
 <img src="img/ngrelc.png" alt="Related concept" title="Related concept" /><br />
 <br />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/tips_and_tricks.htm b/jpa/plugins/org.eclipse.jpt.doc.user/tips_and_tricks.htm
index f417547..739ecbb 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/tips_and_tricks.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/tips_and_tricks.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Tips and tricks</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Tips and tricks</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/toc.xml b/jpa/plugins/org.eclipse.jpt.doc.user/toc.xml
index 0dc1abb..2bc9ee8 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/toc.xml
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/toc.xml
@@ -1,4 +1,5 @@
 <?xml version='1.0' encoding='iso-8859-1'?>
+<?NLS  TYPE="org.eclipse.help.toc"?>
 <!-- User Guide -->
   <toc label="Dali Java Persistence Tools User Guide"><topic label="Dali Java Persistence Tools User Guide">
     <topic href="getting_started.htm" label="Getting started">
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/whats_new.htm b/jpa/plugins/org.eclipse.jpt.doc.user/whats_new.htm
index 4d4da1e..8c777d1 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/whats_new.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/whats_new.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>What's new</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>What's new</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/whats_new001.htm b/jpa/plugins/org.eclipse.jpt.doc.user/whats_new001.htm
index 65fd8a9..26654ca 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/whats_new001.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/whats_new001.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Generate Persistent Entities from Tables wizard</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Generate Persistent Entities from Tables wizard</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/whats_new002.htm b/jpa/plugins/org.eclipse.jpt.doc.user/whats_new002.htm
index 4fd22af..455826b 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/whats_new002.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/whats_new002.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create and Manage the persistence.xml file</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create and Manage the persistence.xml file</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.doc.user/whats_new003.htm b/jpa/plugins/org.eclipse.jpt.doc.user/whats_new003.htm
index f02aba4..b75c0a9 100644
--- a/jpa/plugins/org.eclipse.jpt.doc.user/whats_new003.htm
+++ b/jpa/plugins/org.eclipse.jpt.doc.user/whats_new003.htm
@@ -4,8 +4,8 @@
 <head>
 <!-- Run date = May 21, 2007 6:35:58 -->
 <meta name="OAC_IGNORE_SKIP_NAV" content="true" />
-<title>Create and Manage the orm.xml file</title>
 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<title>Create and Manage the orm.xml file</title>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta name="generator" content="Oracle DARB XHTML Converter - Version 4.5.3 Build 02" />
diff --git a/jpa/plugins/org.eclipse.jpt.gen/.classpath b/jpa/plugins/org.eclipse.jpt.gen/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/.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.gen/.cvsignore b/jpa/plugins/org.eclipse.jpt.gen/.cvsignore
deleted file mode 100644
index 2d14989..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-@dot
-build.xml
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 7e690b4..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:10:55 EDT 2007
-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 0162a7c..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/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.gen
-Bundle-Version: 1.0.0.qualifier
-Bundle-ClassPath: .
-Bundle-Localization: plugin
-Export-Package: org.eclipse.jpt.gen.internal; x-friends:="org.eclipse.jpt.ui"
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.jdt.core,
- org.eclipse.jpt.core,
- org.eclipse.jpt.db,
- org.eclipse.jpt.utility
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
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 9e73bda..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>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>
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 41837eb..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/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.gen/component.xml b/jpa/plugins/org.eclipse.jpt.gen/component.xml
deleted file mode 100644
index 7a4e04e..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/component.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><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 4875a8b..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/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 = Java Persistence API Tools - Entity Gen
-providerName = Eclipse.org
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/EntityGenerator.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/EntityGenerator.java
deleted file mode 100644
index 70d07a5..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/EntityGenerator.java
+++ /dev/null
@@ -1,1437 +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
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.io.PrintWriter;
-import java.io.Serializable;
-import java.io.StringWriter;
-import java.lang.reflect.Modifier;
-import java.text.Collator;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jdt.core.IJavaModelStatusConstants;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jpt.core.internal.content.java.mappings.JPA;
-import org.eclipse.jpt.db.internal.Column;
-import org.eclipse.jpt.db.internal.ForeignKey;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.utility.internal.IndentingPrintWriter;
-import org.eclipse.jpt.utility.internal.JavaType;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-
-// TODO handle table names that are illegal class names
-// TODO handle table names that are illegal file names
-// TODO handle column names that are illegal field/method names
-// TODO format code per preferences
-// TODO organize imports per preferences
-// TODO prompt user to overwrite existing classes
-/**
- * This generator will generate an entity for a table.
- */
-public class EntityGenerator {
-	final Config config;
-	private final IPackageFragment packageFragment;
-	private final GenTable genTable;
-	private final String entityClassName;
-	private final OverwriteConfirmer overwriteConfirmer;
-	private final IProgressMonitor monitor;
-
-
-	// ********** public API **********
-
-	public static void generateEntity(Config config, IPackageFragment packageFragment, GenTable genTable, OverwriteConfirmer overwriteConfirmer, IProgressMonitor monitor) {
-		if ((config == null) || (packageFragment == null) || (genTable == null)) {
-			throw new NullPointerException();
-		}
-		new EntityGenerator(config, packageFragment, genTable, overwriteConfirmer, monitor).generateEntity();
-	}
-
-
-	// ********** constructor/initialization **********
-
-	private EntityGenerator(Config config, IPackageFragment packageFragment, GenTable genTable, OverwriteConfirmer overwriteConfirmer, IProgressMonitor monitor) {
-		super();
-		this.config = config;
-		this.packageFragment = packageFragment;
-		this.genTable = genTable;
-		this.entityClassName = this.fullyQualify(this.entityName());
-		this.overwriteConfirmer = overwriteConfirmer;
-		this.monitor = monitor;
-	}
-
-
-	// ********** code gen **********
-
-	private void generateEntity() {
-		try {
-			this.generateEntity_();
-		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private void generateEntity_() throws JavaModelException {
-		String fileName = this.entityName() + ".java";
-		String source = this.buildSource();
-		try {
-			this.packageFragment.createCompilationUnit(fileName, source, false, this.monitor);
-		} catch (JavaModelException ex) {
-			if (ex.getJavaModelStatus().getCode() == IJavaModelStatusConstants.NAME_COLLISION) {
-				if (this.overwriteConfirmer.overwrite(this.entityClassName)) {
-					this.packageFragment.createCompilationUnit(fileName, source, true, this.monitor);
-				}
-			} else {
-				throw ex;
-			}
-		}
-	}
-
-	/**
-	 * build the "body" source first; then build the "package" and "imports" source
-	 * and concatenate the "body" source to it
-	 */
-	private String buildSource() {
-		// build the body source first so we can gather up the import statements
-		BodySource bodySource = this.buildBodySource();
-
-		StringWriter sw = new StringWriter(bodySource.length() + 1000);
-		PrintWriter pw = new PrintWriter(sw);
-		this.printPackageAndImportsOn(pw, bodySource);
-		pw.print(bodySource.source());
-		return sw.toString();
-	}
-
-	private BodySource buildBodySource() {
-		EntitySourceWriter pw = new EntitySourceWriter(this.packageName(), this.entityClassName);
-		this.printBodySourceOn(pw);
-		return pw;
-	}
-
-	private void printBodySourceOn(EntitySourceWriter pw) {
-		this.printClassDeclarationOn(pw);
-
-		pw.indent();
-			this.printEntityPrimaryKeyFieldsOn(pw);
-			this.printEntityNonPrimaryKeyBasicFieldsOn(pw);
-			this.printEntityManyToOneFieldsOn(pw);
-			this.printEntityOneToManyFieldsOn(pw);
-			this.printEntityOwnedManyToManyFieldsOn(pw);
-			this.printEntityNonOwnedManyToManyFieldsOn(pw);
-			this.printSerialVersionUID(pw);
-			pw.println();
-
-			this.printZeroArgumentConstructorOn(this.entityName(), this.config.methodVisibility(), pw);
-			if (this.config.propertyAccessType() || this.config.generateGettersAndSetters()) {
-				this.printEntityPrimaryKeyGettersAndSettersOn(pw);
-				this.printEntityNonPrimaryKeyBasicGettersAndSettersOn(pw);
-				this.printEntityManyToOneGettersAndSettersOn(pw);
-				this.printEntityOneToManyGettersAndSettersOn(pw);
-				this.printEntityOwnedManyToManyGettersAndSettersOn(pw);
-				this.printEntityNonOwnedManyToManyGettersAndSettersOn(pw);
-			}
-
-			this.printPrimaryKeyClassOn(pw);
-		pw.undent();
-
-		pw.print('}');
-		pw.println();
-	}
-
-	private void printClassDeclarationOn(EntitySourceWriter pw) {
-		this.printEntityAnnotationOn(pw);
-		this.printTableAnnotationOn(pw);
-		this.printIdClassAnnotationOn(pw);
-
-		pw.print("public class ");
-		pw.printTypeDeclaration(this.entityClassName);
-		if (config.serializable()) {
-			pw.print(" implements ");
-			pw.printTypeDeclaration(Serializable.class.getName());
-		}
-		pw.print(" {");
-		pw.println();
-	}
-
-	private void printEntityAnnotationOn(EntitySourceWriter pw) {
-		pw.printAnnotation(JPA.ENTITY);
-		pw.println();
-	}
-
-	private void printTableAnnotationOn(EntitySourceWriter pw) {
-		if ( ! this.table().matchesShortJavaClassName(this.entityName())) {
-			pw.printAnnotation(JPA.TABLE);
-			pw.print("(name=\"");
-			pw.print(this.table().getName());
-			pw.print("\")");
-			pw.println();
-		}
-	}
-
-	private void printIdClassAnnotationOn(EntitySourceWriter pw) {
-		if ((this.table().primaryKeyColumnsSize() > 1) && this.config.generateIdClassForCompoundPK()) {
-			pw.printAnnotation(JPA.ID_CLASS);
-			pw.print('(');
-			pw.printTypeDeclaration(this.entityClassName + ".PK");
-			pw.print(".class)");
-			pw.println();
-		}
-	}
-
-	private void printEntityPrimaryKeyFieldsOn(EntitySourceWriter pw) {
-		if ((this.table().primaryKeyColumnsSize() > 1) && this.config.generateEmbeddedIdForCompoundPK()) {
-			this.printEntityEmbeddedIdPrimaryKeyFieldOn(pw);
-		} else {
-			this.printEntityReadOnlyPrimaryKeyFieldsOn(pw);
-			this.printEntityWritablePrimaryKeyFieldsOn(pw);
-		}
-	}
-
-	private void printEntityEmbeddedIdPrimaryKeyFieldOn(EntitySourceWriter pw) {
-		if (this.config.fieldAccessType()) {
-			pw.printAnnotation(JPA.EMBEDDED_ID);
-			pw.println();
-		}
-		pw.printVisibility(this.config.fieldVisibility());
-		pw.printTypeDeclaration(this.entityClassName + ".PK");
-		pw.print(' ');
-		pw.print(this.genTable.fieldNameForEmbeddedId());
-		pw.print(';');
-		pw.println();
-		pw.println();
-	}
-
-	private void printEntityReadOnlyPrimaryKeyFieldsOn(EntitySourceWriter pw) {
-		for (Iterator<Column> stream = this.genTable.readOnlyPrimaryKeyColumns(); stream.hasNext(); ) {
-			this.printEntityReadOnlyPrimaryKeyFieldOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityReadOnlyPrimaryKeyFieldOn(Column column, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(column);
-		if (this.config.fieldAccessType()) {
-			pw.printAnnotation(JPA.ID);
-			pw.println();
-			if (column.matchesJavaFieldName(fieldName)) {
-				this.printReadOnlyColumnAnnotationOn(pw);  // no Column name needed
-			} else {
-				this.printReadOnlyColumnAnnotationOn(column.getName(), pw);
-			}
-		}
-		pw.printVisibility(this.config.fieldVisibility());
-		pw.printTypeDeclaration(column.javaTypeDeclaration());
-		pw.print(' ');
-		pw.print(fieldName);
-		pw.print(';');
-		pw.println();
-		pw.println();
-	}
-
-	private void printReadOnlyColumnAnnotationOn(String columnName, EntitySourceWriter pw) {
-		pw.printAnnotation(JPA.COLUMN);
-		pw.print("(name=\"");
-		pw.print(columnName);
-		pw.print("\", insertable=false, updatable=false)");
-		pw.println();
-	}
-
-	private void printReadOnlyColumnAnnotationOn(EntitySourceWriter pw) {
-		pw.printAnnotation(JPA.COLUMN);
-		pw.print("(insertable=false, updatable=false)");
-		pw.println();
-	}
-
-	private void printEntityWritablePrimaryKeyFieldsOn(EntitySourceWriter pw) {
-		for (Iterator<Column> stream = this.genTable.writablePrimaryKeyColumns(); stream.hasNext(); ) {
-			this.printEntityWritablePrimaryKeyFieldOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityWritablePrimaryKeyFieldOn(Column column, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(column);
-		if (this.config.fieldAccessType()) {
-			pw.printAnnotation(JPA.ID);
-			pw.println();
-			if ( ! column.matchesJavaFieldName(fieldName)) {
-				this.printColumnAnnotationOn(column.getName(), pw);
-			}
-		}
-		pw.printVisibility(this.config.fieldVisibility());
-		pw.printTypeDeclaration(column.javaTypeDeclaration());
-		pw.print(' ');
-		pw.print(fieldName);
-		pw.print(';');
-		pw.println();
-		pw.println();
-	}
-
-	private void printEntityNonPrimaryKeyBasicFieldsOn(EntitySourceWriter pw) {
-		for (Iterator<Column> stream = this.genTable.nonPrimaryKeyBasicColumns(); stream.hasNext(); ) {
-			this.printEntityNonPrimaryKeyBasicFieldOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityNonPrimaryKeyBasicFieldOn(Column column, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(column);
-		if (this.config.fieldAccessType()) {
-			if ( ! column.matchesJavaFieldName(fieldName)) {
-				this.printColumnAnnotationOn(column.getName(), pw);
-			}
-		}
-		if (column.isLob()) {
-			pw.printAnnotation(JPA.LOB);
-			pw.println();
-		}
-		pw.printVisibility(this.config.fieldVisibility());
-		pw.printTypeDeclaration(column.javaTypeDeclaration());
-		pw.print(' ');
-		pw.print(fieldName);
-		pw.print(';');
-		pw.println();
-		pw.println();
-	}
-
-	private void printColumnAnnotationOn(String columnName, EntitySourceWriter pw) {
-		pw.printAnnotation(JPA.COLUMN);
-		pw.print("(name=\"");
-		pw.print(columnName);
-		pw.print("\")");
-		pw.println();
-	}
-
-	private void printEntityManyToOneFieldsOn(EntitySourceWriter pw) {
-		for (Iterator<ManyToOneRelation> stream = this.genTable.manyToOneRelations(); stream.hasNext(); ) {
-			this.printEntityManyToOneFieldOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityManyToOneFieldOn(ManyToOneRelation relation, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(relation);
-		if (this.config.fieldAccessType()) {
-			this.printManyToOneAnnotationOn(fieldName, relation, pw);
-		}
-		pw.printVisibility(this.config.fieldVisibility());
-		pw.printTypeDeclaration(this.fullyQualify(relation.referencedEntityName()));
-		pw.print(' ');
-		pw.print(fieldName);
-		pw.print(';');
-		pw.println();
-		pw.println();
-	}
-
-	private void printManyToOneAnnotationOn(String fieldName, ManyToOneRelation relation, EntitySourceWriter pw) {
-		pw.printAnnotation(JPA.MANY_TO_ONE);
-		pw.println();
-		ForeignKey fk = relation.getForeignKey();
-		if (fk.matchesJavaFieldName(fieldName)) {
-			return;  // no JoinColumn annotation needed
-		}
-		if (fk.referencesSingleColumnPrimaryKey()) {
-			pw.printAnnotation(JPA.JOIN_COLUMN);
-			pw.print("(name=\"");
-			pw.print(fk.columnPairs().next().getBaseColumn().getName());
-			pw.print("\")");
-		} else {
-			if (fk.columnPairsSize() > 1) {
-				pw.printAnnotation(JPA.JOIN_COLUMNS);
-				pw.print("({");
-				pw.println();
-				pw.indent();
-			}
-			this.printJoinColumnAnnotationsOn(fk, pw);
-			if (fk.columnPairsSize() > 1) {
-				pw.undent();
-				pw.println();
-				pw.print("})");
-			}
-		}
-		pw.println();
-	}
-
-	private void printJoinColumnAnnotationsOn(ForeignKey foreignKey, EntitySourceWriter pw) {
-		for (Iterator<ForeignKey.ColumnPair> stream = foreignKey.columnPairs(); stream.hasNext(); ) {
-			this.printJoinColumnAnnotationOn(stream.next(), pw);
-			if (stream.hasNext()) {
-				pw.println(',');
-			}
-		}
-	}
-
-	private void printJoinColumnAnnotationOn(ForeignKey.ColumnPair columnPair, EntitySourceWriter pw) {
-		this.printJoinColumnAnnotationOn(columnPair.getBaseColumn().getName(), columnPair.getReferencedColumn().getName(), pw);
-	}
-
-	/**
-	 * assume that at least one of the two names is not null
-	 */
-	private void printJoinColumnAnnotationOn(String baseColumnName, String referencedColumnName, EntitySourceWriter pw) {
-		pw.printAnnotation(JPA.JOIN_COLUMN);
-		pw.print('(');
-		if (baseColumnName != null) {
-			pw.print("name=\"");
-			pw.print(baseColumnName);
-		}
-		if (referencedColumnName != null) {
-			if (baseColumnName != null) {
-				pw.print("\", ");
-			}
-			pw.print("referencedColumnName=\"");
-			pw.print(referencedColumnName);
-		}
-		pw.print("\")");
-	}
-
-	private void printEntityOneToManyFieldsOn(EntitySourceWriter pw) {
-		for (Iterator<OneToManyRelation> stream = this.genTable.oneToManyRelations(); stream.hasNext(); ) {
-			this.printEntityOneToManyFieldOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityOneToManyFieldOn(OneToManyRelation relation, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(relation);
-		if (this.config.fieldAccessType()) {
-			this.printOneToManyAnnotationOn(fieldName, relation, pw);
-		}
-		pw.printVisibility(this.config.fieldVisibility());
-		pw.printTypeDeclaration(this.config.getCollectionTypeName());
-		pw.print('<');
-		pw.printTypeDeclaration(this.fullyQualify(relation.referencedEntityName()));
-		pw.print('>');
-		pw.print(' ');
-		pw.print(fieldName);
-		pw.print(';');
-		pw.println();
-		pw.println();
-	}
-
-	private void printOneToManyAnnotationOn(String fieldName, OneToManyRelation relation, EntitySourceWriter pw) {
-		pw.printAnnotation(JPA.ONE_TO_MANY);
-		pw.print("(mappedBy=\"");
-		pw.print(relation.mappedBy());
-		pw.print("\")");
-		pw.println();
-	}
-
-	private void printEntityOwnedManyToManyFieldsOn(EntitySourceWriter pw) {
-		for (Iterator<ManyToManyRelation>  stream = this.genTable.ownedManyToManyRelations(); stream.hasNext(); ) {
-			this.printEntityOwnedManyToManyFieldOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityOwnedManyToManyFieldOn(ManyToManyRelation relation, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(relation);
-		if (this.config.fieldAccessType()) {
-			this.printOwnedManyToManyAnnotationOn(fieldName, relation, pw);
-		}
-		pw.printVisibility(this.config.fieldVisibility());
-		pw.printTypeDeclaration(this.config.getCollectionTypeName());
-		pw.print('<');
-		pw.printTypeDeclaration(this.fullyQualify(relation.nonOwningEntityName()));
-		pw.print('>');
-		pw.print(' ');
-		pw.print(fieldName);
-		pw.print(';');
-		pw.println();
-		pw.println();
-	}
-
-	/**
-	 * I guess you could build a state machine for all this crap,
-	 * but that seems like overkill...
-	 */
-	private void printOwnedManyToManyAnnotationOn(String fieldName, ManyToManyRelation relation, EntitySourceWriter pw) {
-		pw.printAnnotation(JPA.MANY_TO_MANY);
-		pw.println();
-		boolean first = true;
-		boolean comma = false;
-		if ( ! relation.joinTableNameIsDefault()) {
-			if (first) {
-				first = false;
-				pw.printAnnotation(JPA.JOIN_TABLE);
-				pw.print('(');
-			}
-			pw.print("name=\"");
-			pw.print(relation.getJoinTable().name());
-			pw.print('\"');
-			comma = true;
-		}
-		if ( ! relation.joinColumnsIsDefaultFor(fieldName)) {
-			if (first) {
-				first = false;
-				pw.printAnnotation(JPA.JOIN_TABLE);
-				pw.print('(');
-			} else if (comma) {
-				pw.print(',');
-			}
-			pw.println();
-			pw.indent();
-			this.printJoinTableJoinColumnsOn("joinColumns", fieldName, relation.getOwningForeignKey(), pw);
-			pw.undent();
-			comma = true;
-		}
-		String inverseFieldName = relation.getNonOwningTable().fieldNameFor(relation);
-		if ( ! relation.inverseJoinColumnsIsDefaultFor(inverseFieldName)) {
-			if (first) {
-				first = false;
-				pw.printAnnotation(JPA.JOIN_TABLE);
-				pw.print('(');
-			} else if (comma) {
-				pw.print(',');
-			}
-			pw.println();
-			pw.indent();
-			this.printJoinTableJoinColumnsOn("inverseJoinColumns", inverseFieldName, relation.getNonOwningForeignKey(), pw);
-			pw.undent();
-			comma = true;
-		}
-		if ( ! first) {
-			pw.print(')');
-		}
-		pw.println();
-	}
-
-	private void printJoinTableJoinColumnsOn(String elementName, String fieldName, ForeignKey foreignKey, EntitySourceWriter pw) {
-		if (foreignKey.columnPairsSize() != 1) {
-			this.printJoinTableJoinColumnsOn(elementName, foreignKey, pw);
-		} else if (foreignKey.getReferencedTable().primaryKeyColumnsSize() != 1) {
-			// if the referenced table has a composite primary key, neither of the columns can be a default
-			// since both of the defaults require a single-column primary key
-			this.printJoinTableJoinColumnsOn(elementName, foreignKey, pw);
-		} else {
-			ForeignKey.ColumnPair columnPair = foreignKey.columnPairs().next();
-			Column pkColumn = foreignKey.getReferencedTable().primaryKeyColumns().next();
-			if (columnPair.getBaseColumn().matchesJavaFieldName(fieldName + "_" + pkColumn.getName())) {
-				if (columnPair.getReferencedColumn() == pkColumn) {
-					// we shouldn't get here...
-				} else {
-					pw.print(elementName);
-					pw.print('=');
-					this.printJoinColumnAnnotationOn(null, columnPair.getReferencedColumn().getName(), pw);
-				}
-			} else {
-				if (columnPair.getReferencedColumn() == pkColumn) {
-					pw.print(elementName);
-					pw.print('=');
-					this.printJoinColumnAnnotationOn(columnPair.getBaseColumn().getName(), null, pw);
-				} else {
-					this.printJoinTableJoinColumnsOn(elementName, foreignKey, pw);
-				}
-			}
-		}
-	}
-
-	private void printJoinTableJoinColumnsOn(String elementName, ForeignKey foreignKey, EntitySourceWriter pw) {
-		pw.print(elementName);
-		pw.print('=');
-		if (foreignKey.columnPairsSize() > 1) {
-			pw.print('{');
-			pw.println();
-			pw.indent();
-		}
-		this.printJoinColumnAnnotationsOn(foreignKey, pw);
-		if (foreignKey.columnPairsSize() > 1) {
-			pw.undent();
-			pw.println();
-			pw.print('}');
-			pw.println();
-		}
-	}
-
-	private void printEntityNonOwnedManyToManyFieldsOn(EntitySourceWriter pw) {
-		for (Iterator<ManyToManyRelation> stream = this.genTable.nonOwnedManyToManyRelations(); stream.hasNext(); ) {
-			this.printEntityNonOwnedManyToManyFieldOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityNonOwnedManyToManyFieldOn(ManyToManyRelation relation, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(relation);
-		if (this.config.fieldAccessType()) {
-			this.printNonOwnedManyToManyAnnotationOn(fieldName, relation, pw);
-		}
-		pw.printVisibility(this.config.fieldVisibility());
-		pw.printTypeDeclaration(this.config.getCollectionTypeName());
-		pw.print('<');
-		pw.printTypeDeclaration(this.fullyQualify(relation.owningEntityName()));
-		pw.print('>');
-		pw.print(' ');
-		pw.print(fieldName);
-		pw.print(';');
-		pw.println();
-		pw.println();
-	}
-
-	private void printNonOwnedManyToManyAnnotationOn(String fieldName, ManyToManyRelation relation, EntitySourceWriter pw) {
-		pw.printAnnotation(JPA.MANY_TO_MANY);
-		pw.print("(mappedBy=\"");
-		pw.print(relation.getMappedBy());
-		pw.print("\")");
-		pw.println();
-	}
-
-	private String fullyQualify(String shortClassName) {
-		String pkg = this.packageName();
-		return (pkg.length() == 0) ? shortClassName : pkg + '.' + shortClassName;
-	}
-
-	private void printSerialVersionUID(EntitySourceWriter pw) {
-		if (this.config.generateSerialVersionUID()) {
-			pw.print("private static final long serialVersionUID = 1L;");
-			pw.println();
-		}
-	}
-
-	private void printZeroArgumentConstructorOn(String ctorName, String visibility, EntitySourceWriter pw) {
-		if (this.config.generateDefaultConstructor()) {
-			pw.printVisibility(visibility);
-			pw.print(ctorName);
-			pw.print("() {");
-			pw.println();
-			pw.indent();
-				pw.println("super();");
-			pw.undent();
-			pw.print('}');
-			pw.println();
-			pw.println();
-		}
-	}
-
-	private void printEntityPrimaryKeyGettersAndSettersOn(EntitySourceWriter pw) {
-		if ((this.table().primaryKeyColumnsSize() > 1) && this.config.generateEmbeddedIdForCompoundPK()) {
-			this.printEntityEmbeddedIdPrimaryKeyGetterAndSetterOn(pw);
-		} else {
-			this.printEntityReadOnlyPrimaryKeyGettersAndSettersOn(pw);
-			this.printEntityWritablePrimaryKeyGettersAndSettersOn(pw);
-		}
-	}
-
-	private void printEntityEmbeddedIdPrimaryKeyGetterAndSetterOn(EntitySourceWriter pw) {
-		if (this.config.propertyAccessType()) {
-			pw.printAnnotation(JPA.EMBEDDED_ID);
-			pw.println();
-		}
-		pw.printGetterAndSetter(this.genTable.fieldNameForEmbeddedId(), this.entityClassName + ".PK", this.config.methodVisibility());
-	}
-
-	private void printEntityReadOnlyPrimaryKeyGettersAndSettersOn(EntitySourceWriter pw) {
-		for (Iterator<Column> stream = this.genTable.readOnlyPrimaryKeyColumns(); stream.hasNext(); ) {
-			this.printEntityReadOnlyPrimaryKeyGetterAndSetterOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityReadOnlyPrimaryKeyGetterAndSetterOn(Column column, EntitySourceWriter pw) {
-		String propertyName = this.genTable.fieldNameFor(column);
-		if (this.config.propertyAccessType()) {
-			pw.printAnnotation(JPA.ID);
-			pw.println();
-			if (column.matchesJavaFieldName(propertyName)) {
-				this.printReadOnlyColumnAnnotationOn(pw);  // no Column name needed
-			} else {
-				this.printReadOnlyColumnAnnotationOn(column.getName(), pw);
-			}
-		}
-
-		pw.printGetterAndSetter(propertyName, column.javaTypeDeclaration(), this.config.methodVisibility());
-	}
-
-	private void printEntityWritablePrimaryKeyGettersAndSettersOn(EntitySourceWriter pw) {
-		for (Iterator<Column> stream = this.genTable.writablePrimaryKeyColumns(); stream.hasNext(); ) {
-			this.printEntityWritablePrimaryKeyGetterAndSetterOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityWritablePrimaryKeyGetterAndSetterOn(Column column, EntitySourceWriter pw) {
-		String propertyName = this.genTable.fieldNameFor(column);
-		if (this.config.propertyAccessType()) {
-			pw.printAnnotation(JPA.ID);
-			pw.println();
-			if ( ! column.matchesJavaFieldName(propertyName)) {
-				this.printColumnAnnotationOn(column.getName(), pw);
-			}
-		}
-
-		pw.printGetterAndSetter(propertyName, column.javaTypeDeclaration(), this.config.methodVisibility());
-	}
-
-	private void printEntityNonPrimaryKeyBasicGettersAndSettersOn(EntitySourceWriter pw) {
-		for (Iterator<Column> stream = this.genTable.nonPrimaryKeyBasicColumns(); stream.hasNext(); ) {
-			this.printEntityNonPrimaryKeyBasicGetterAndSetterOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityNonPrimaryKeyBasicGetterAndSetterOn(Column column, EntitySourceWriter pw) {
-		String propertyName = this.genTable.fieldNameFor(column);
-		if (this.config.propertyAccessType()) {
-			if ( ! column.matchesJavaFieldName(propertyName)) {
-				this.printColumnAnnotationOn(column.getName(), pw);
-			}
-		}
-
-		pw.printGetterAndSetter(propertyName, column.javaTypeDeclaration(), this.config.methodVisibility());
-	}
-
-	private void printEntityManyToOneGettersAndSettersOn(EntitySourceWriter pw) {
-		for (Iterator<ManyToOneRelation> stream = this.genTable.manyToOneRelations(); stream.hasNext(); ) {
-			this.printEntityManyToOneGetterAndSetterOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityManyToOneGetterAndSetterOn(ManyToOneRelation relation, EntitySourceWriter pw) {
-		String propertyName = this.genTable.fieldNameFor(relation);
-		if (this.config.propertyAccessType()) {
-			this.printManyToOneAnnotationOn(propertyName, relation, pw);
-		}
-
-		String typeDeclaration = this.fullyQualify(relation.referencedEntityName());
-		pw.printGetterAndSetter(propertyName, typeDeclaration, this.config.methodVisibility());
-	}
-
-	private void printEntityOneToManyGettersAndSettersOn(EntitySourceWriter pw) {
-		for (Iterator<OneToManyRelation> stream = this.genTable.oneToManyRelations(); stream.hasNext(); ) {
-			this.printEntityOneToManyGetterAndSetterOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityOneToManyGetterAndSetterOn(OneToManyRelation relation, EntitySourceWriter pw) {
-		String propertyName = this.genTable.fieldNameFor(relation);
-		if (this.config.propertyAccessType()) {
-			this.printOneToManyAnnotationOn(propertyName, relation, pw);
-		}
-
-		String elementTypeDeclaration = this.fullyQualify(relation.referencedEntityName());
-		pw.printCollectionGetterAndSetter(propertyName, this.config.getCollectionTypeName(), elementTypeDeclaration, this.config.methodVisibility());
-	}
-
-	private void printEntityOwnedManyToManyGettersAndSettersOn(EntitySourceWriter pw) {
-		for (Iterator<ManyToManyRelation> stream = this.genTable.ownedManyToManyRelations(); stream.hasNext(); ) {
-			this.printEntityOwnedManyToManyGetterAndSetterOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityOwnedManyToManyGetterAndSetterOn(ManyToManyRelation relation, EntitySourceWriter pw) {
-		String propertyName = this.genTable.fieldNameFor(relation);
-		if (this.config.propertyAccessType()) {
-			this.printOwnedManyToManyAnnotationOn(propertyName, relation, pw);
-		}
-
-		String elementTypeDeclaration = this.fullyQualify(relation.nonOwningEntityName());
-		pw.printCollectionGetterAndSetter(propertyName, this.config.getCollectionTypeName(), elementTypeDeclaration, this.config.methodVisibility());
-	}
-
-	private void printEntityNonOwnedManyToManyGettersAndSettersOn(EntitySourceWriter pw) {
-		for (Iterator<ManyToManyRelation> stream = this.genTable.nonOwnedManyToManyRelations(); stream.hasNext(); ) {
-			this.printEntityNonOwnedManyToManyGetterAndSetterOn(stream.next(), pw);
-		}
-	}
-
-	private void printEntityNonOwnedManyToManyGetterAndSetterOn(ManyToManyRelation relation, EntitySourceWriter pw) {
-		String propertyName = this.genTable.fieldNameFor(relation);
-		if (this.config.propertyAccessType()) {
-			this.printNonOwnedManyToManyAnnotationOn(propertyName, relation, pw);
-		}
-
-		String elementTypeDeclaration = this.fullyQualify(relation.owningEntityName());
-		pw.printCollectionGetterAndSetter(propertyName, this.config.getCollectionTypeName(), elementTypeDeclaration, this.config.methodVisibility());
-	}
-
-	private void printPrimaryKeyClassOn(EntitySourceWriter pw) {
-		if (this.table().primaryKeyColumnsSize() <= 1) {
-			return;
-		}
-		pw.println();
-		if (this.config.generateEmbeddedIdForCompoundPK()) {
-			pw.printAnnotation(JPA.EMBEDDABLE);
-			pw.println();
-		}
-		pw.print("public static class PK implements ");
-		pw.printTypeDeclaration(Serializable.class.getName());
-		pw.print(" {");
-		pw.println();
-
-		pw.indent();
-			this.printIdFieldsOn(pw);
-			this.printSerialVersionUID(pw);
-			pw.println();
-			this.printZeroArgumentConstructorOn("PK", "public", pw);
-
-			if (this.config.propertyAccessType() || this.config.generateGettersAndSetters()) {
-				this.printIdGettersAndSettersOn(pw);
-			}
-
-			this.printEqualsMethodOn("PK", this.table().primaryKeyColumns(), pw);
-			this.printHashCodeMethodOn(this.table().primaryKeyColumns(), pw);
-		pw.undent();
-
-		pw.print('}');
-		pw.println();
-		pw.println();
-	}
-
-	private void printIdFieldsOn(EntitySourceWriter pw) {
-		for (Iterator<Column> stream = this.table().primaryKeyColumns(); stream.hasNext(); ) {
-			this.printIdFieldOn(stream.next(), pw);
-		}
-	}
-
-	private void printIdFieldOn(Column column, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(column);
-		pw.printVisibility(this.config.fieldVisibility());
-		pw.printTypeDeclaration(column.javaTypeDeclaration());
-		pw.print(' ');
-		pw.print(fieldName);
-		pw.print(';');
-		pw.println();
-	}
-
-	private void printIdGettersAndSettersOn(EntitySourceWriter pw) {
-		for (Iterator<Column> stream = this.table().primaryKeyColumns(); stream.hasNext(); ) {
-			this.printIdGetterAndSetterOn(stream.next(), pw);
-		}
-	}
-
-	private void printIdGetterAndSetterOn(Column column, EntitySourceWriter pw) {
-		String propertyName = this.genTable.fieldNameFor(column);
-		pw.printGetterAndSetter(propertyName, column.javaTypeDeclaration(), this.config.methodVisibility());
-	}
-
-	private void printEqualsMethodOn(String className, Iterator<Column> columns, EntitySourceWriter pw) {
-		pw.printAnnotation("java.lang.Override");
-		pw.println();
-
-		pw.println("public boolean equals(Object o) {");
-		pw.indent();
-			pw.println("if (o == this) {");
-			pw.indent();
-				pw.println("return true;");
-			pw.undent();
-			pw.print('}');
-			pw.println();
-
-			pw.print("if ( ! (o instanceof ");
-			pw.print(className);
-			pw.print(")) {");
-			pw.println();
-			pw.indent();
-				pw.println("return false;");
-			pw.undent();
-			pw.print('}');
-			pw.println();
-
-			pw.print(className);
-			pw.print(" other = (");
-			pw.print(className);
-			pw.print(") o;");
-			pw.println();
-
-			pw.print("return ");
-			pw.indent();
-				while (columns.hasNext()) {
-					this.printEqualsClauseOn(columns.next(), pw);
-					if (columns.hasNext()) {
-						pw.println();
-						pw.print("&& ");
-					}
-				}
-				pw.print(';');
-				pw.println();
-			pw.undent();
-		pw.undent();
-		pw.print('}');
-		pw.println();
-		pw.println();
-	}
-
-	private void printEqualsClauseOn(Column column, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(column);
-		JavaType javaType = column.javaType();
-		if (javaType.isPrimitive()) {
-			this.printPrimitiveEqualsClauseOn(fieldName, pw);
-		} else {
-			this.printReferenceEqualsClauseOn(fieldName, pw);
-		}
-	}
-
-	private void printPrimitiveEqualsClauseOn(String fieldName, EntitySourceWriter pw) {
-		pw.print("(this.");
-		pw.print(fieldName);
-		pw.print(" == other.");
-		pw.print(fieldName);
-		pw.print(')');
-	}
-
-	private void printReferenceEqualsClauseOn(String fieldName, EntitySourceWriter pw) {
-		pw.print("this.");
-		pw.print(fieldName);
-		pw.print(".equals(other.");
-		pw.print(fieldName);
-		pw.print(')');
-	}
-
-	private void printHashCodeMethodOn(Iterator<Column> columns, EntitySourceWriter pw) {
-		pw.printAnnotation("java.lang.Override");
-		pw.println();
-
-		pw.println("public int hashCode() {");
-		pw.indent();
-			pw.print("return ");
-			pw.indent();
-				while (columns.hasNext()) {
-					this.printHashCodeClauseOn(columns.next(), pw);
-					if (columns.hasNext()) {
-						pw.println();
-						pw.print("^ ");
-					}
-				}
-				pw.print(';');
-				pw.println();
-			pw.undent();
-		pw.undent();
-		pw.print('}');
-		pw.println();
-		pw.println();
-	}
-
-	private void printHashCodeClauseOn(Column column, EntitySourceWriter pw) {
-		String fieldName = this.genTable.fieldNameFor(column);
-		JavaType javaType = column.javaType();
-		if (javaType.isPrimitive()) {
-			this.printPrimitiveHashCodeClauseOn(javaType.getElementTypeName(), fieldName, pw);
-		} else {
-			this.printReferenceHashCodeClauseOn(fieldName, pw);
-		}
-	}
-
-	private void printPrimitiveHashCodeClauseOn(String primitiveName, String fieldName, EntitySourceWriter pw) {
-		if (primitiveName.equals("int") || primitiveName.equals("short") || primitiveName.equals("byte") || primitiveName.equals("char")) {
-			pw.print("this.");
-			pw.print(fieldName);
-		} else if (primitiveName.equals("long")) {  // cribbed from Long#hashCode()
-			// ((int) (this.value ^ (this.value >>> 32)))
-			pw.print("((int) (this.");
-			pw.print(fieldName);
-			pw.print(" ^ (this.");
-			pw.print(fieldName);
-			pw.print(" >>> 32)))");
-		} else if (primitiveName.equals("double")) {  // cribbed from Double#hashCode()
-			//	((int) (java.lang.Double.doubleToLongBits(this.value) ^ (java.lang.Double.doubleToLongBits(this.value) >>> 32)))
-			pw.print("((int) (");
-			pw.printTypeDeclaration("java.lang.Double");
-			pw.print(".doubleToLongBits(this.");
-			pw.print(fieldName);
-			pw.print(") ^ (");
-			pw.printTypeDeclaration("java.lang.Double");
-			pw.print(".doubleToLongBits(this.");
-			pw.print(fieldName);
-			pw.print(") >>> 32)))");
-		} else if (primitiveName.equals("float")) {  // cribbed from Float#hashCode()
-			// java.lang.Float.floatToIntBits(this.value)
-			pw.printTypeDeclaration("java.lang.Float");
-			pw.print(".floatToIntBits(this.");
-			pw.print(fieldName);
-			pw.print(')');
-		} else if (primitiveName.equals("boolean")) {  // cribbed from Boolean#hashCode()
-			// (this.value ? 1231 : 1237)
-			pw.print("(this.");
-			pw.print(fieldName);
-			pw.print(" ? 1231 : 1237)");
-		} else {
-			throw new IllegalArgumentException(primitiveName);
-		}
-	}
-
-	private void printReferenceHashCodeClauseOn(String fieldName, EntitySourceWriter pw) {
-		pw.print("this.");
-		pw.print(fieldName);
-		pw.print(".hashCode()");
-	}
-
-	private void printPackageAndImportsOn(PrintWriter pw, BodySource bodySource) {
-		if (this.packageName().length() != 0) {
-			pw.print("package ");
-			pw.print(this.packageName());
-			pw.print(';');
-			pw.println();
-			pw.println();
-		}
-
-		for (Iterator<Map.Entry<String, String>> stream = bodySource.importEntries(); stream.hasNext(); ) {
-			Map.Entry<String, String> entry = stream.next();
-			pw.print("import ");
-			pw.print(entry.getValue());  // package
-			pw.print('.');
-			pw.print(entry.getKey());  // short class name
-			pw.print(';');
-			pw.println();
-		}
-		pw.println();
-	}
-
-
-	// ********** convenience methods **********
-
-	private String packageName() {
-		return this.packageFragment.getElementName();
-	}
-
-	private Table table() {
-		return this.genTable.getTable();
-	}
-
-	private String entityName() {
-		return this.genTable.getEntityName();
-	}
-
-
-	// ********** writer **********
-
-	private interface BodySource {
-
-		/**
-		 * return a sorted set of map entries; the key is the short class name,
-		 * the value is the package name
-		 */
-		Iterator<Map.Entry<String, String>> importEntries();
-
-		/**
-		 * return the body source code
-		 */
-		String source();
-
-		/**
-		 * return the length of the body source code
-		 */
-		int length();
-
-	}
-
-	/**
-	 * Extend IndentingPrintWriter with some methods that facilitate building
-	 * entity source code.
-	 */
-	private static class EntitySourceWriter extends IndentingPrintWriter implements BodySource {
-		final String packageName;
-		final String entityClassName;
-		// key = short class name; value = package name
-		private final Map<String, String> imports = new HashMap<String, String>();
-
-		EntitySourceWriter(String packageName, String entityClassName) {
-			super(new StringWriter(20000));
-			this.packageName = packageName;
-			this.entityClassName = entityClassName;
-		}
-
-		void printVisibility(String visibilityModifier) {
-			if (visibilityModifier.length() != 0) {
-				this.print(visibilityModifier);
-				this.print(' ');
-			}
-		}
-
-		void printAnnotation(String annotationName) {
-			this.print('@');
-			this.printTypeDeclaration(annotationName);
-		}
-
-		void printTypeDeclaration(String typeDeclaration) {
-			this.print(this.importedTypeDeclaration(typeDeclaration));
-		}
-
-		/**
-		 * Return the specified class's "imported" name.
-		 * The class declaration must be of the form:
-		 *     "int"
-		 *     "int[]" (not "[I")
-		 *     "java.lang.Object"
-		 *     "java.lang.Object[]" (not "[Ljava.lang.Object;")
-		 *     "java.util.Map.Entry" (not "java.util.Map$Entry")
-		 *     "java.util.Map.Entry[][]" (not "[[Ljava.util.Map$Entry;")
-		 */
-		private String importedTypeDeclaration(String typeDeclaration) {
-			if (this.typeDeclarationIsMemberClass(typeDeclaration)) {
-				// no need for an import, just return the partially-qualified name
-				return this.memberClassTypeDeclaration(typeDeclaration);
-			}
-			int last = typeDeclaration.lastIndexOf('.');
-			String pkg = (last == -1) ? "" : typeDeclaration.substring(0, last);
-			String shortTypeDeclaration = typeDeclaration.substring(last + 1);
-			String shortElementTypeName = shortTypeDeclaration;
-			while (shortElementTypeName.endsWith("[]")) {
-				shortElementTypeName = shortElementTypeName.substring(0, shortElementTypeName.length() - 2);
-			}
-			String prev = this.imports.get(shortElementTypeName);
-			if (prev == null) {
-				// this is the first class with this short element type name
-				this.imports.put(shortElementTypeName, pkg);
-				return shortTypeDeclaration;
-			}
-			if (prev.equals(pkg)) {
-				// this element type has already been imported
-				return shortTypeDeclaration;
-			}
-			// another class with the same short element type name has been
-			// previously imported, so this one must be used fully-qualified
-			return typeDeclaration;
-		}
-
-		/**
-		 * e.g. "foo.bar.Employee.PK" will return true
-		 */
-		private boolean typeDeclarationIsMemberClass(String typeDeclaration) {
-			return (typeDeclaration.length() > this.entityClassName.length())
-					&& typeDeclaration.startsWith(this.entityClassName)
-					&& (typeDeclaration.charAt(this.entityClassName.length()) == '.');
-		}
-
-		/**
-		 * e.g. "foo.bar.Employee.PK" will return "Employee.PK"
-		 * this prevents collisions with other imported classes (e.g. "joo.jar.PK")
-		 */
-		private String memberClassTypeDeclaration(String typeDeclaration) {
-			int index = this.packageName.length();
-			if (index != 0) {
-				index++;  // bump past the '.'
-			}
-			return typeDeclaration.substring(index);
-		}
-
-		public Iterator<Map.Entry<String, String>> importEntries() {
-			return new FilteringIterator<Map.Entry<String, String>>(this.sortedImportEntries()) {
-				@Override
-				@SuppressWarnings("unchecked")
-				protected boolean accept(Object next) {
-					String pkg = ((Map.Entry<String, String>) next).getValue();
-					if (pkg.equals("")
-							|| pkg.equals("java.lang")
-							|| pkg.equals(EntitySourceWriter.this.packageName)) {
-						return false;
-					}
-					return true;
-				}
-			};
-		}
-
-		private Iterator<Map.Entry<String, String>> sortedImportEntries() {
-			TreeSet<Map.Entry<String, String>> sortedImports = new TreeSet<Map.Entry<String, String>>(this.buildImportEntriesComparator());
-			sortedImports.addAll(this.imports.entrySet());
-			return sortedImports.iterator();
-		}
-
-		private Comparator<Map.Entry<String, String>> buildImportEntriesComparator() {
-			return new Comparator<Map.Entry<String, String>>() {
-				public int compare(Map.Entry<String, String> e1, Map.Entry<String, String> e2) {
-					Collator collator = Collator.getInstance();
-					int pkg = collator.compare(e1.getValue(), e2.getValue());
-					return (pkg == 0) ? collator.compare(e1.getKey(), e2.getKey()) : pkg;
-				}
-			};
-		}
-
-		void printGetterAndSetter(String propertyName, String typeDeclaration, String visibility) {
-			this.printGetter(propertyName, typeDeclaration, visibility);
-			this.println();
-			this.println();
-
-			this.printSetter(propertyName, typeDeclaration, visibility);
-			this.println();
-			this.println();
-		}
-
-		private void printGetter(String propertyName, String typeDeclaration, String visibility) {
-			this.printVisibility(visibility);
-			this.printTypeDeclaration(typeDeclaration);
-			this.print(' ');
-			this.print(typeDeclaration.equals("boolean") ? "is" : "get");
-			this.print(StringTools.capitalize(propertyName));
-			this.print("() {");
-			this.println();
-
-			this.indent();
-				this.print("return this.");
-				this.print(propertyName);
-				this.print(';');
-				this.println();
-			this.undent();
-
-			this.print('}');
-		}
-
-		private void printSetter(String propertyName, String typeDeclaration, String visibility) {
-			this.printVisibility(visibility);
-			this.print("void set");
-			this.print(StringTools.capitalize(propertyName));
-			this.print('(');
-			this.printTypeDeclaration(typeDeclaration);
-			this.print(' ');
-			this.print(propertyName);
-			this.print(") {");
-			this.println();
-
-			this.indent();
-				this.print("this.");
-				this.print(propertyName);
-				this.print(" = ");
-				this.print(propertyName);
-				this.print(';');
-				this.println();
-			this.undent();
-
-			this.print('}');
-		}
-
-		void printCollectionGetterAndSetter(String propertyName, String collectionTypeDeclaration, String elementTypeDeclaration, String visibility) {
-			this.printCollectionGetter(propertyName, collectionTypeDeclaration, elementTypeDeclaration, visibility);
-			this.println();
-			this.println();
-
-			this.printCollectionSetter(propertyName, collectionTypeDeclaration, elementTypeDeclaration, visibility);
-			this.println();
-			this.println();
-		}
-
-		private void printCollectionGetter(String propertyName, String collectionTypeDeclaration, String elementTypeDeclaration, String visibility) {
-			this.printVisibility(visibility);
-			this.printTypeDeclaration(collectionTypeDeclaration);
-			this.print('<');
-			this.printTypeDeclaration(elementTypeDeclaration);
-			this.print("> get");
-			this.print(StringTools.capitalize(propertyName));
-			this.print("() {");
-			this.println();
-
-			this.indent();
-				this.print("return this.");
-				this.print(propertyName);
-				this.print(';');
-				this.println();
-			this.undent();
-
-			this.print('}');
-		}
-
-		private void printCollectionSetter(String propertyName, String collectionTypeDeclaration, String elementTypeDeclaration, String visibility) {
-			this.printVisibility(visibility);
-			this.print("void set");
-			this.print(StringTools.capitalize(propertyName));
-			this.print('(');
-			this.printTypeDeclaration(collectionTypeDeclaration);
-			this.print('<');
-			this.printTypeDeclaration(elementTypeDeclaration);
-			this.print('>');
-			this.print(' ');
-			this.print(propertyName);
-			this.print(") {");
-			this.println();
-
-			this.indent();
-				this.print("this.");
-				this.print(propertyName);
-				this.print(" = ");
-				this.print(propertyName);
-				this.print(';');
-				this.println();
-			this.undent();
-
-			this.print('}');
-		}
-
-		public String source() {
-			return this.out.toString();
-		}
-
-		public int length() {
-			return ((StringWriter) this.out).getBuffer().length();
-		}
-
-	}
-
-
-	// ********** config **********
-
-	public static class Config {
-		private boolean convertToCamelCase = true;
-		private boolean propertyAccessType = false;  // as opposed to "field"
-		private String collectionTypeName = Set.class.getName();
-		private int fieldVisibility = Modifier.PRIVATE;
-		private int methodVisibility = Modifier.PUBLIC;
-		private boolean generateGettersAndSetters = true;
-		private boolean generateDefaultConstructor = true;
-		private boolean serializable = true;
-		private boolean generateSerialVersionUID = true;
-		private boolean generateEmbeddedIdForCompoundPK = true;  // as opposed to IdClass
-		private Map<Table, String> overrideEntityNames = new HashMap<Table, String>();
-
-		public static final int PRIVATE = 0;
-		public static final int PACKAGE = 1;
-		public static final int PROTECTED = 2;
-		public static final int PUBLIC = 3;
-
-
-		public boolean convertToCamelCase() {
-			return this.convertToCamelCase;
-		}
-		public void setConvertToCamelCase(boolean convertToCamelCase) {
-			this.convertToCamelCase = convertToCamelCase;
-		}
-
-		public boolean propertyAccessType() {
-			return this.propertyAccessType;
-		}
-		public void setPropertyAccessType(boolean propertyAccessType) {
-			this.propertyAccessType = propertyAccessType;
-		}
-
-		public boolean fieldAccessType() {
-			return ! this.propertyAccessType;
-		}
-		public void setFieldAccessType(boolean fieldAccessType) {
-			this.propertyAccessType = ! fieldAccessType;
-		}
-
-		public String getCollectionTypeName() {
-			return this.collectionTypeName;
-		}
-		public void setCollectionTypeName(String collectionTypeName) {
-			this.collectionTypeName = collectionTypeName;
-		}
-
-		public int getFieldVisibility() {
-			return this.fieldVisibility;
-		}
-		/** entity fields cannot be 'public' */
-		public void setFieldVisibility(int fieldVisibility) {
-			switch (fieldVisibility) {
-				case PRIVATE:
-				case PACKAGE:
-				case PROTECTED:
-					this.fieldVisibility = fieldVisibility;
-					break;
-				default:
-					throw new IllegalArgumentException("invalid field visibility: " + fieldVisibility);
-			}
-		}
-		String fieldVisibility() {
-			switch (this.fieldVisibility) {
-				case PRIVATE:
-					return "private";
-				case PACKAGE:
-					return "";
-				case PROTECTED:
-					return "protected";
-				default:
-					throw new IllegalStateException("invalid field visibility: " + this.fieldVisibility);
-			}
-		}
-
-		public int getMethodVisibility() {
-			return this.methodVisibility;
-		}
-		/** entity properties must be 'public' or 'protected' */
-		public void setMethodVisibility(int methodVisibility) {
-			switch (methodVisibility) {
-				case PROTECTED:
-				case PUBLIC:
-					this.methodVisibility = methodVisibility;
-					break;
-				default:
-					throw new IllegalArgumentException("invalid method visibility: " + methodVisibility);
-			}
-		}
-		String methodVisibility() {
-			switch (this.methodVisibility) {
-				case PROTECTED:
-					return "protected";
-				case PUBLIC:
-					return "public";
-				default:
-					throw new IllegalStateException("invalid method visibility: " + this.methodVisibility);
-			}
-		}
-
-		public boolean generateGettersAndSetters() {
-			return this.generateGettersAndSetters;
-		}
-		public void setGenerateGettersAndSetters(boolean generateGettersAndSetters) {
-			this.generateGettersAndSetters = generateGettersAndSetters;
-		}
-
-		public boolean generateDefaultConstructor() {
-			return this.generateDefaultConstructor;
-		}
-		public void setGenerateDefaultConstructor(boolean generateDefaultConstructor) {
-			this.generateDefaultConstructor = generateDefaultConstructor;
-		}
-
-		public boolean serializable() {
-			return this.serializable;
-		}
-		public void setSerializable(boolean serializable) {
-			this.serializable = serializable;
-		}
-
-		public boolean generateSerialVersionUID() {
-			return this.generateSerialVersionUID;
-		}
-		public void setGenerateSerialVersionUID(boolean generateSerialVersionUID) {
-			this.generateSerialVersionUID = generateSerialVersionUID;
-		}
-
-		public boolean generateEmbeddedIdForCompoundPK() {
-			return this.generateEmbeddedIdForCompoundPK;
-		}
-		public void setGenerateEmbeddedIdForCompoundPK(boolean generateEmbeddedIdForCompoundPK) {
-			this.generateEmbeddedIdForCompoundPK = generateEmbeddedIdForCompoundPK;
-		}
-
-		public boolean generateIdClassForCompoundPK() {
-			return ! this.generateEmbeddedIdForCompoundPK;
-		}
-		public void setGenerateIdClassForCompoundPK(boolean generateIdClassForCompoundPK) {
-			this.generateEmbeddedIdForCompoundPK = ! generateIdClassForCompoundPK;
-		}
-
-		/**
-		 * key = table
-		 * value = user-supplied override entity name
-		 */
-		public String getOverrideEntityName(Table table) {
-			return this.overrideEntityNames.get(table);
-		}
-		public void setOverrideEntityName(Table table, String overrideEntityName) {
-			this.overrideEntityNames.put(table, overrideEntityName);
-		}
-		public void clearOverrideEntityNames() {
-			this.overrideEntityNames.clear();
-		}
-		public void setOverrideEntityNames(Map<Table, String> overrideEntityNames) {
-			this.clearOverrideEntityNames();
-			for (Map.Entry<Table, String> entry : overrideEntityNames.entrySet()) {
-				this.setOverrideEntityName(entry.getKey(), entry.getValue());
-			}
-		}
-
-	}
-
-
-	// ********** config **********
-
-	public static interface OverwriteConfirmer {
-		/**
-		 * Return whether the entity generator should overwrite the specified
-		 * file.
-		 */
-		boolean overwrite(String className);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenScope.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenScope.java
deleted file mode 100644
index ee9db7f..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenScope.java
+++ /dev/null
@@ -1,175 +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
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-
-class GenScope {
-	private final Map<Table, GenTable> genTables = new HashMap<Table, GenTable>();
-
-	private IProgressMonitor progressMonitor;
-	
-	// ********** construction/initialization **********
-
-	GenScope(Collection<Table> tables, EntityGenerator.Config entityConfig, IProgressMonitor progressMonitor) {
-		super();
-		this.initialize(tables, entityConfig, progressMonitor);
-	}
-
-	private void checkCanceled() {
-		if (this.progressMonitor.isCanceled()) {
-			throw new OperationCanceledException();
-		}		
-	}
-	
-	private void initialize(Collection<Table> tables, EntityGenerator.Config entityConfig, IProgressMonitor monitor) {
-		this.progressMonitor = monitor;
-		this.buildGenTables(tables, entityConfig);
-		checkCanceled();
-		this.configureManyToManyRelations();
-		checkCanceled();
-		this.configureManyToOneRelations();
-		checkCanceled();
-		this.configureFieldNames();
-		checkCanceled();
-	}
-
-	private void buildGenTables(Collection<Table> tables, EntityGenerator.Config entityConfig) {
-		int size = tables.size();
-		// pass around a growing list of the entity names so we can avoid duplicates
-		Set<String> entityNames = new HashSet<String>(size);
-		for (Table table : tables) {
-			this.buildGenTable(table, entityConfig, entityNames);
-			this.progressMonitor.worked(40/size);
-		}
-	}
-
-	private void buildGenTable(Table table, EntityGenerator.Config entityConfig, Collection<String> entityNames) {
-		this.genTables.put(table, new GenTable(this, table, entityConfig, entityNames));
-	}
-
-	/**
-	 * find all the "join" tables
-	 */
-	private void configureManyToManyRelations() {
-		int tablesSize = CollectionTools.size(this.tables());
-
-		//first time takes the longest, should we take that into account?
-		for (Iterator<GenTable> stream = this.tables(); stream.hasNext(); ) {
-			checkCanceled();
-			stream.next().configureManyToManyRelations();
-			this.progressMonitor.worked(730/tablesSize);
-		}
-		// revert any "join" table that is referenced by another table back to an "entity" table
-		Set<GenTable> referencedTables = this.buildReferencedTables();
-		tablesSize = CollectionTools.size(this.joinTables());
-		for (Iterator<GenTable> stream = this.joinTables(); stream.hasNext(); ) {
-			GenTable joinGenTable = stream.next();
-			if (referencedTables.contains(joinGenTable)) {
-				joinGenTable.clearJoinTableRelation();
-			}
-			this.progressMonitor.worked(40/tablesSize);
-		}
-	}
-
-	/**
-	 * find all the many-to-one and one-to-many relations
-	 */
-	private void configureManyToOneRelations() {
-		int tablesSize = CollectionTools.size(this.entityTables());
-		for (Iterator<GenTable> stream = this.entityTables(); stream.hasNext(); ) {
-			stream.next().configureManyToOneRelations();
-			this.progressMonitor.worked(50/tablesSize);
-		}
-	}
-
-	/**
-	 * determine all the Java field names up-front because we will
-	 * need them for things like 'mappedBy' annotation elements
-	 */
-	private void configureFieldNames() {
-		int tablesSize = CollectionTools.size(this.entityTables());
-		for (Iterator<GenTable> stream = this.entityTables(); stream.hasNext(); ) {
-			stream.next().configureFieldNames();
-			this.progressMonitor.worked(50/tablesSize);
-		}
-	}
-
-
-	// ********** package API **********
-
-	/**
-	 * return only the gen tables that are suitable for generating
-	 * entities (i.e. exclude the "join" tables)
-	 */
-	Iterator<GenTable> entityTables() {
-		return new FilteringIterator<GenTable>(this.tables()) {
-			@Override
-			protected boolean accept(Object next) {
-				return ! ((GenTable) next).isJoinTable();
-			}
-		};
-	}
-
-	int numEntityTables() {
-		return CollectionTools.size(entityTables());
-	}
-	
-	/**
-	 * return the gen table corresponding to the specified table
-	 */
-	GenTable genTable(Table table) {
-		return this.genTables.get(table);
-	}
-
-
-	// ********** internal API **********
-
-	private Iterator<GenTable> tables() {
-		return this.genTables.values().iterator();
-	}
-
-	/**
-	 * return only the "join" gen tables
-	 */
-	private Iterator<GenTable> joinTables() {
-		return new FilteringIterator<GenTable>(this.tables()) {
-			@Override
-			protected boolean accept(Object next) {
-				return ((GenTable) next).isJoinTable();
-			}
-		};
-	}
-
-	/**
-	 * build a set of the tables that are referenced by other tables
-	 * in the scope
-	 */
-	private Set<GenTable> buildReferencedTables() {
-		int size = CollectionTools.size(this.tables());
-		Set<GenTable> referencedTables = new HashSet<GenTable>(this.genTables.size());
-		for (Iterator<GenTable> stream = this.tables(); stream.hasNext(); ) {
-			stream.next().addReferencedTablesTo(referencedTables);
-			this.progressMonitor.worked(20/size);
-		}
-		return referencedTables;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenTable.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenTable.java
deleted file mode 100644
index ea7fd3d..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenTable.java
+++ /dev/null
@@ -1,342 +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
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import org.eclipse.jpt.db.internal.Column;
-import org.eclipse.jpt.db.internal.ForeignKey;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.NameTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-
-/**
- * associate a table with the various relations that will be used when
- * generating the entity
- */
-class GenTable {
-	private final GenScope scope;
-	private final Table table;
-	private final EntityGenerator.Config entityConfig;
-	private final String entityName;
-	private ManyToManyRelation joinTableRelation;
-	private Collection<ManyToManyRelation> ownedManyToManyRelations = new ArrayList<ManyToManyRelation>();
-	private Collection<ManyToManyRelation> nonOwnedManyToManyRelations = new ArrayList<ManyToManyRelation>();
-	private Collection<ManyToOneRelation> manyToOneRelations = new ArrayList<ManyToOneRelation>();
-	private Collection<OneToManyRelation> oneToManyRelations = new ArrayList<OneToManyRelation>();
-	private Set<Column> foreignKeyColumns = new HashSet<Column>();
-
-	// key=column/relation; value=name
-	private final Map<Object, String> fieldNames = new HashMap<Object, String>();
-
-	private static final Object EMBEDDED_ID_VIRTUAL_COLUMN = new Object();
-
-
-	// ********** construction/initialization **********
-
-	GenTable(GenScope scope, Table table, EntityGenerator.Config entityConfig, Collection<String> entityNames) {
-		super();
-		this.scope = scope;
-		this.table = table;
-		this.entityConfig = entityConfig;
-		this.entityName = this.buildEntityName(entityNames);
-	}
-
-	private String buildEntityName(Collection<String> entityNames) {
-		String name = this.table.shortJavaClassName();
-		String overrideEntityName = this.entityConfig.getOverrideEntityName(this.table);
-		if (overrideEntityName == null) {
-			if (this.entityConfig.convertToCamelCase()) {
-				name = StringTools.convertUnderscoresToCamelCase(name);
-			}
-		} else {
-			name = overrideEntityName;
-		}
-		name = NameTools.uniqueNameForIgnoreCase(name, entityNames);
-		entityNames.add(name);
-		return name;
-	}
-
-
-	// ********** package API **********
-
-	/**
-	 * determine whether the table is a "join" table within the table's scope
-	 */
-	void configureManyToManyRelations() {
-		if (this.table.foreignKeysSize() != 2) {
-			// the table must have exactly 2 foreign keys
-			return;
-		}
-		for (Iterator<Column> stream = this.table.columns(); stream.hasNext(); ) {
-			if ( ! this.table.foreignKeyColumnsContains(stream.next())) {
-				// all the table's columns must belong to one (or both) of the 2 foreign keys
-				return;
-			}
-		}
-		Iterator<ForeignKey> fKeys = this.table.foreignKeys();
-		ForeignKey owningFK = fKeys.next();
-		ForeignKey nonOwningFK = fKeys.next();
-		GenTable owningTable = this.scope.genTable(owningFK.getReferencedTable());
-		GenTable nonOwningTable = this.scope.genTable(nonOwningFK.getReferencedTable());
-		if ((owningTable == null) || (nonOwningTable == null)) {
-			// both tables must be in the scope
-			return;
-		}
-		this.joinTableRelation = new ManyToManyRelation(this, owningFK, owningTable, nonOwningFK, nonOwningTable);
-	}
-
-	void addReferencedTablesTo(Set<GenTable> referencedTables) {
-		for (Iterator<ForeignKey> stream = this.table.foreignKeys(); stream.hasNext(); ) {
-			ForeignKey fk = stream.next();
-			GenTable genTable = this.scope.genTable(fk.getReferencedTable());
-			if (genTable != null) {
-				referencedTables.add(genTable);
-			}
-		}
-	}
-
-	void clearJoinTableRelation() {
-		this.joinTableRelation.clear();
-		this.joinTableRelation = null;
-	}
-
-	/**
-	 * find "in-scope" foreign keys
-	 */
-	void configureManyToOneRelations() {
-		for (Iterator<ForeignKey> stream = this.table.foreignKeys(); stream.hasNext(); ) {
-			ForeignKey fk = stream.next();
-			GenTable referencedtable = this.scope.genTable(fk.getReferencedTable());
-			if (referencedtable == null) {
-				continue;  // skip to next FK
-			}
-			this.manyToOneRelations.add(new ManyToOneRelation(this, fk, referencedtable));
-		}
-	}
-
-	/**
-	 * now that all the relations are in place, we can configure the Java
-	 * field names
-	 */
-	void configureFieldNames() {
-		Set<Column> columns = CollectionTools.set(this.table.columns());
-		if ((this.table.primaryKeyColumnsSize() > 1) && this.entityConfig.generateEmbeddedIdForCompoundPK()) {
-			// if we are going to generate an EmbeddedId field, add it to
-			// 'fieldNames' so we don't collide with it later, when generating
-			// field names for the columns etc.
-			this.configureFieldName(EMBEDDED_ID_VIRTUAL_COLUMN, "pk");
-		}
-		this.configureManyToOneFieldNames(columns);
-		this.configureBasicFieldNames(columns);
-		this.configureOneToManyFieldNames();
-		this.configureOwnedManyToManyFieldNames();
-		this.configureNonOwnedManyToManyFieldNames();
-	}
-
-	/**
-	 * return the columns that are part of the table's primary key
-	 * but are also part of an "in-scope" foreign key
-	 */
-	public Iterator<Column> readOnlyPrimaryKeyColumns() {
-		return new FilteringIterator<Column>(this.table.primaryKeyColumns()) {
-			@Override
-			protected boolean accept(Object column) {
-				return GenTable.this.foreignKeyColumnsContains((Column) column);
-			}
-		};
-	}
-
-	/**
-	 * return the columns that are part of the table's primary key
-	 * but are NOT part of any "in-scope" foreign key
-	 */
-	Iterator<Column> writablePrimaryKeyColumns() {
-		return new FilteringIterator<Column>(this.table.primaryKeyColumns()) {
-			@Override
-			protected boolean accept(Object column) {
-				return ! GenTable.this.foreignKeyColumnsContains((Column) column);
-			}
-		};
-	}
-
-	/**
-	 * return the columns that NEITHER part of the table's primary key
-	 * NOR part of any foreign key
-	 */
-	public Iterator<Column> nonPrimaryKeyBasicColumns() {
-		return new FilteringIterator<Column>(this.table.columns()) {
-			@Override
-			protected boolean accept(Object column) {
-				return ! (GenTable.this.primaryKeyColumnsContains((Column) column)
-						|| GenTable.this.foreignKeyColumnsContains((Column) column));
-			}
-		};
-	}
-
-	Table getTable() {
-		return this.table;
-	}
-
-	String getEntityName() {
-		return this.entityName;
-	}
-
-	boolean isJoinTable() {
-		return this.joinTableRelation != null;
-	}
-
-	void addOwnedManyToManyRelation(ManyToManyRelation relation) {
-		this.ownedManyToManyRelations.add(relation);
-	}
-
-	void removeOwnedManyToManyRelation(ManyToManyRelation relation) {
-		this.ownedManyToManyRelations.remove(relation);
-	}
-
-	void addNonOwnedManyToManyRelation(ManyToManyRelation relation) {
-		this.nonOwnedManyToManyRelations.add(relation);
-	}
-
-	void removeNonOwnedManyToManyRelation(ManyToManyRelation relation) {
-		this.nonOwnedManyToManyRelations.remove(relation);
-	}
-
-	void addOneToManyRelation(OneToManyRelation relation) {
-		this.oneToManyRelations.add(relation);
-	}
-
-	String javaFieldName() {
-		return this.table.javaFieldName();
-	}
-
-	Iterator<ManyToOneRelation> manyToOneRelations() {
-		return this.manyToOneRelations.iterator();
-	}
-
-	Iterator<OneToManyRelation> oneToManyRelations() {
-		return this.oneToManyRelations.iterator();
-	}
-
-	Iterator<ManyToManyRelation> ownedManyToManyRelations() {
-		return this.ownedManyToManyRelations.iterator();
-	}
-
-	Iterator<ManyToManyRelation> nonOwnedManyToManyRelations() {
-		return this.nonOwnedManyToManyRelations.iterator();
-	}
-
-	/**
-	 * the key can be a column or relation
-	 */
-	private String fieldNameForInternal(Object o) {
-		return this.fieldNames.get(o);
-	}
-
-	/**
-	 * this will return null if we don't want an embedded id field
-	 */
-	String fieldNameForEmbeddedId() {
-		return this.fieldNameForInternal(EMBEDDED_ID_VIRTUAL_COLUMN);
-	}
-
-	String fieldNameFor(Column column) {
-		return this.fieldNameForInternal(column);
-	}
-
-	String fieldNameFor(ManyToOneRelation relation) {
-		return this.fieldNameForInternal(relation);
-	}
-
-	String fieldNameFor(OneToManyRelation relation) {
-		return this.fieldNameForInternal(relation);
-	}
-
-	String fieldNameFor(ManyToManyRelation relation) {
-		return this.fieldNameForInternal(relation);
-	}
-
-	String name() {
-		return this.table.getName();
-	}
-
-
-	// ********** internal API **********
-
-	/**
-	 * while we are figuring out the names for the m:1 fields, remove from the
-	 * specified set of columns the columns that are only part of the foreign keys
-	 */
-	private void configureManyToOneFieldNames(Set<Column> columns) {
-		for (ManyToOneRelation relation : this.manyToOneRelations) {
-			CollectionTools.removeAll(columns, relation.getForeignKey().nonPrimaryKeyBaseColumns());
-			CollectionTools.addAll(this.foreignKeyColumns, relation.getForeignKey().baseColumns());
-			relation.setMappedBy(this.configureFieldName(relation, relation.javaFieldName()));
-		}
-	}
-
-	private String configureFieldName(Object o, String fieldName) {
-		fieldName = this.camelCase(fieldName);
-		fieldName = NameTools.uniqueNameFor(fieldName, this.fieldNames.values());
-		this.fieldNames.put(o, fieldName);
-		return fieldName;
-	}
-
-	private String camelCase(String name) {
-		return this.entityConfig.convertToCamelCase() ?
-			StringTools.convertUnderscoresToCamelCase(name, false)  // false = don't capitalize first letter
-		:
-			name;
-	}
-
-	/**
-	 * build a unique field name for the specified "basic" columns,
-	 * checking for name collisions
-	 */
-	private void configureBasicFieldNames(Set<Column> columns) {
-		for (Column column : columns) {
-			this.configureFieldName(column, column.javaFieldName());
-		}
-	}
-
-	private void configureOneToManyFieldNames() {
-		for (OneToManyRelation relation : this.oneToManyRelations) {
-			this.configureFieldName(relation, relation.javaFieldName());
-		}
-	}
-
-	private void configureOwnedManyToManyFieldNames() {
-		for (ManyToManyRelation relation : this.ownedManyToManyRelations) {
-			relation.setMappedBy(this.configureFieldName(relation, relation.javaFieldNameFor(this)));
-		}
-	}
-
-	private void configureNonOwnedManyToManyFieldNames() {
-		for (ManyToManyRelation relation : this.nonOwnedManyToManyRelations) {
-			this.configureFieldName(relation, relation.javaFieldNameFor(this));
-		}
-	}
-
-	boolean foreignKeyColumnsContains(Column column) {
-		return this.foreignKeyColumns.contains(column);
-	}
-
-	boolean primaryKeyColumnsContains(Column column) {
-		return this.table.primaryKeyColumnsContains(column);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToManyRelation.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToManyRelation.java
deleted file mode 100644
index d876087..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToManyRelation.java
+++ /dev/null
@@ -1,104 +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
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import org.eclipse.jpt.db.internal.ForeignKey;
-
-/**
- * This object is shared by the two gen tables that make up the relation.
- * Upon construction, 'mappedBy' will be 'null'. The first gen table to be
- * used to generate an entity will fill in 'mappedBy' with the appropriate
- * field/property name.
- */
-class ManyToManyRelation {
-	private final GenTable joinTable;
-	private final ForeignKey owningForeignKey;
-	private final GenTable owningTable;
-	private final ForeignKey nonOwningForeignKey;
-	private final GenTable nonOwningTable;
-	private String mappedBy;
-
-
-	ManyToManyRelation(GenTable joinTable, ForeignKey owningForeignKey, GenTable owningTable, ForeignKey nonOwningForeignKey, GenTable nonOwningTable) {
-		super();
-		this.joinTable = joinTable;
-
-		this.owningForeignKey = owningForeignKey;
-		this.owningTable = owningTable;
-		owningTable.addOwnedManyToManyRelation(this);
-
-		this.nonOwningForeignKey = nonOwningForeignKey;
-		this.nonOwningTable = nonOwningTable;
-		nonOwningTable.addNonOwnedManyToManyRelation(this);
-	}
-
-	GenTable getJoinTable() {
-		return this.joinTable;
-	}
-
-	ForeignKey getOwningForeignKey() {
-		return this.owningForeignKey;
-	}
-
-	GenTable getOwningTable() {
-		return this.owningTable;
-	}
-
-	ForeignKey getNonOwningForeignKey() {
-		return this.nonOwningForeignKey;
-	}
-
-	GenTable getNonOwningTable() {
-		return this.nonOwningTable;
-	}
-
-	private GenTable otherTable(GenTable table) {
-		return (table == this.owningTable) ? this.nonOwningTable : this.owningTable;
-	}
-
-	String javaFieldNameFor(GenTable table) {
-		// TODO i18n?
-		return this.otherTable(table).javaFieldName() + "_collection";
-	}
-
-	void clear() {
-		this.owningTable.removeOwnedManyToManyRelation(this);
-		this.nonOwningTable.removeNonOwnedManyToManyRelation(this);
-	}
-
-	String getMappedBy() {
-		return this.mappedBy;
-	}
-
-	void setMappedBy(String mappedBy) {
-		this.mappedBy = mappedBy;
-	}
-
-	String owningEntityName() {
-		return this.owningTable.getEntityName();
-	}
-
-	String nonOwningEntityName() {
-		return this.nonOwningTable.getEntityName();
-	}
-
-	boolean joinTableNameIsDefault() {
-		return this.joinTable.name().equals(this.getOwningTable().name() + "_" + this.getNonOwningTable().name());
-	}
-
-	boolean joinColumnsIsDefaultFor(String javaFieldName) {
-		return this.owningForeignKey.isDefaultFor(javaFieldName);
-	}
-
-	boolean inverseJoinColumnsIsDefaultFor(String javaFieldName) {
-		return this.nonOwningForeignKey.isDefaultFor(javaFieldName);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToOneRelation.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToOneRelation.java
deleted file mode 100644
index 333018d..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToOneRelation.java
+++ /dev/null
@@ -1,61 +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
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import org.eclipse.jpt.db.internal.ForeignKey;
-
-class ManyToOneRelation {
-	private final GenTable baseTable;  // the "many" side
-	private final ForeignKey foreignKey;
-	private final GenTable referencedTable;  // the "one" side
-	private String mappedBy;
-
-
-	ManyToOneRelation(GenTable baseTable, ForeignKey foreignKey, GenTable referencedTable) {
-		super();
-		this.baseTable = baseTable;
-		this.foreignKey = foreignKey;
-		this.referencedTable = referencedTable;
-		referencedTable.addOneToManyRelation(new OneToManyRelation(this));
-	}
-
-	GenTable getBaseTable() {
-		return this.baseTable;
-	}
-
-	ForeignKey getForeignKey() {
-		return this.foreignKey;
-	}
-
-	GenTable getReferencedTable() {
-		return this.referencedTable;
-	}
-
-	String javaFieldName() {
-		return this.foreignKey.javaFieldName();
-	}
-
-	String getMappedBy() {
-		return this.mappedBy;
-	}
-
-	void setMappedBy(String mappedBy) {
-		this.mappedBy = mappedBy;
-	}
-
-	String baseEntityName() {
-		return this.baseTable.getEntityName();
-	}
-
-	String referencedEntityName() {
-		return this.referencedTable.getEntityName();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/OneToManyRelation.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/OneToManyRelation.java
deleted file mode 100644
index 4656d00..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/OneToManyRelation.java
+++ /dev/null
@@ -1,37 +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
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-class OneToManyRelation {
-	private final ManyToOneRelation manyToOneRelation;
-
-	OneToManyRelation(ManyToOneRelation manyToOneRelation) {
-		super();
-		this.manyToOneRelation = manyToOneRelation;
-	}
-
-	ManyToOneRelation getManyToOneRelation() {
-		return this.manyToOneRelation;
-	}
-
-	String javaFieldName() {
-		// TODO i18n?
-		return this.manyToOneRelation.getBaseTable().javaFieldName() + "_collection";
-	}
-
-	String mappedBy() {
-		return this.manyToOneRelation.getMappedBy();
-	}
-
-	String referencedEntityName() {
-		return this.manyToOneRelation.baseEntityName();
-	}
-
-}
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 bce0da3..0000000
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator.java
+++ /dev/null
@@ -1,91 +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
- ******************************************************************************/
-package org.eclipse.jpt.gen.internal;
-
-import java.util.Collection;
-import java.util.Iterator;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.gen.internal.EntityGenerator.OverwriteConfirmer;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-
-/**
- * This generator will generate a package of entities for a set of tables.
- */
-public class PackageGenerator {
-	private final Config config;
-	private final EntityGenerator.Config entityConfig;
-	private final GenScope scope;
-	private final OverwriteConfirmer overwriteConfirmer;
-	private final IProgressMonitor monitor;
-
-
-	// ********** public API **********
-
-	public static void generateEntities(Config config, EntityGenerator.Config entityConfig, Collection<Table> tables, OverwriteConfirmer overwriteConfirmer, IProgressMonitor monitor) {
-		if ((config == null) || (entityConfig == null) || (tables == null)) {
-			throw new NullPointerException();
-		}
-		new PackageGenerator(config, entityConfig, tables, overwriteConfirmer, monitor).generateEntities();
-	}
-
-
-	// ********** construction/initialization **********
-
-	private PackageGenerator(Config config, EntityGenerator.Config entityConfig, Collection<Table> tables, OverwriteConfirmer overwriteConfirmer, IProgressMonitor monitor) {
-		super();
-		this.config = config;
-		this.entityConfig = entityConfig;
-		this.scope = new GenScope(tables, entityConfig, monitor);
-		this.overwriteConfirmer = overwriteConfirmer;
-		this.monitor = monitor;
-	}
-
-
-	// ********** generation **********
-
-	private void generateEntities() {
-		int size = CollectionTools.size(this.scope.entityTables());
-		for (Iterator<GenTable> stream = this.scope.entityTables(); stream.hasNext(); ) {
-			checkCanceled();
-			this.buildEntity(stream.next());
-			this.monitor.worked(50/size);
-		}
-	}
-
-	private void checkCanceled() {
-		if (this.monitor.isCanceled()) {
-			throw new OperationCanceledException();
-		}		
-	}
-	
-
-	private void buildEntity(GenTable genTable) {
-		EntityGenerator.generateEntity(this.entityConfig, this.config.getPackageFragment(), genTable, overwriteConfirmer, this.monitor);
-	}
-
-
-	// ********** config **********
-
-	public static class Config {
-		private IPackageFragment packageFragment;
-
-		public IPackageFragment getPackageFragment() {
-			return this.packageFragment;
-		}
-		public void setPackageFragment(IPackageFragment packageFragment) {
-			this.packageFragment = packageFragment;
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/.classpath b/jpa/plugins/org.eclipse.jpt.ui/.classpath
deleted file mode 100644
index 5ee7c76..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/.classpath
+++ /dev/null
@@ -1,13 +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/wst/**"/>
-			<accessrule kind="accessible" pattern="org/eclipse/jst/**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/jpa/plugins/org.eclipse.jpt.ui/.cvsignore b/jpa/plugins/org.eclipse.jpt.ui/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/jpa/plugins/org.eclipse.jpt.ui/.project b/jpa/plugins/org.eclipse.jpt.ui/.project
deleted file mode 100644
index 50ef9e3..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jpt.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.ui/.settings/org.eclipse.core.resources.prefs b/jpa/plugins/org.eclipse.jpt.ui/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 8f3899b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:11:25 EDT 2007
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/jpa/plugins/org.eclipse.jpt.ui/.settings/org.eclipse.jdt.core.prefs b/jpa/plugins/org.eclipse.jpt.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index d909c10..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/.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/plugins/org.eclipse.jpt.ui/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index 4ed5329..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,58 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.ui;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.eclipse.jpt.ui.internal.JptUiPlugin
-Bundle-ClassPath: .
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.core.resources,
- org.eclipse.core.runtime,
- org.eclipse.draw2d,
- org.eclipse.emf.edit.ui,
- org.eclipse.jdt.core,
- org.eclipse.jdt.ui,
- org.eclipse.jem,
- org.eclipse.jface.text,
- org.eclipse.jpt.core,
- org.eclipse.jpt.db,
- org.eclipse.jpt.db.ui,
- org.eclipse.jpt.gen,
- org.eclipse.jpt.utility,
- org.eclipse.jst.j2ee.ui,
- org.eclipse.ui.ide,
- org.eclipse.ui.views.properties.tabbed,
- org.eclipse.ui.workbench.texteditor,
- org.eclipse.wst.common.frameworks,
- org.eclipse.wst.common.frameworks.ui,
- org.eclipse.wst.common.modulecore,
- org.eclipse.wst.common.project.facet.core,
- org.eclipse.wst.common.project.facet.ui,
- org.eclipse.wst.sse.ui,
- org.eclipse.wst.web.ui
-Eclipse-LazyStart: true
-Export-Package: org.eclipse.jpt.ui.internal; x-internal:=true,
- org.eclipse.jpt.ui.internal.actions; x-internal:=true,
- org.eclipse.jpt.ui.internal.details; x-internal:=true,
- org.eclipse.jpt.ui.internal.dialogs; x-internal:=true,
- org.eclipse.jpt.ui.internal.generic; x-internal:=true,
- org.eclipse.jpt.ui.internal.java.details; x-internal:=true,
- org.eclipse.jpt.ui.internal.java.mappings.properties; x-internal:=true,
- org.eclipse.jpt.ui.internal.java.structure; x-internal:=true,
- org.eclipse.jpt.ui.internal.jface; x-internal:=true,
- org.eclipse.jpt.ui.internal.mappings; x-internal:=true,
- org.eclipse.jpt.ui.internal.mappings.details; x-internal:=true,
- org.eclipse.jpt.ui.internal.perspective; x-internal:=true,
- org.eclipse.jpt.ui.internal.prefs; x-internal:=true,
- org.eclipse.jpt.ui.internal.properties; x-internal:=true,
- org.eclipse.jpt.ui.internal.selection; x-internal:=true,
- org.eclipse.jpt.ui.internal.structure; x-internal:=true,
- org.eclipse.jpt.ui.internal.util; x-internal:=true,
- org.eclipse.jpt.ui.internal.views; x-internal:=true,
- org.eclipse.jpt.ui.internal.widgets; x-internal:=true,
- org.eclipse.jpt.ui.internal.wizards; x-internal:=true,
- org.eclipse.jpt.ui.internal.xml; x-internal:=true,
- org.eclipse.jpt.ui.internal.xml.details; x-internal:=true,
- org.eclipse.jpt.ui.internal.xml.structure; x-internal:=true
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/jpa/plugins/org.eclipse.jpt.ui/about.html b/jpa/plugins/org.eclipse.jpt.ui/about.html
deleted file mode 100644
index 9e73bda..0000000
--- a/jpa/plugins/org.eclipse.jpt.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>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>
diff --git a/jpa/plugins/org.eclipse.jpt.ui/build.properties b/jpa/plugins/org.eclipse.jpt.ui/build.properties
deleted file mode 100644
index b1a1c37..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/build.properties
+++ /dev/null
@@ -1,21 +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/,\
-               property_files/
-output.. = bin/
-bin.includes = .,\
-               META-INF/,\
-               about.html,\
-               icons/,\
-               plugin.xml,\
-               plugin.properties
-jars.compile.order = .
diff --git a/jpa/plugins/org.eclipse.jpt.ui/component.xml b/jpa/plugins/org.eclipse.jpt.ui/component.xml
deleted file mode 100644
index 36827b6..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/component.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><component  xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jpt.ui"><description url=""></description><component-depends unrestricted="true"></component-depends><plugin id="org.eclipse.jpt.ui" fragment="false"/></component>
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/dtool16/new_jpaproject_wiz.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/dtool16/new_jpaproject_wiz.gif
deleted file mode 100644
index 633768f..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/dtool16/new_jpaproject_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/etool16/jpa_facet.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/etool16/jpa_facet.gif
deleted file mode 100644
index c0ab917..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/etool16/jpa_facet.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/etool16/new_jpaproject_wiz.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/etool16/new_jpaproject_wiz.gif
deleted file mode 100644
index 12da807..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/etool16/new_jpaproject_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/eview16/jpa_details.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/eview16/jpa_details.gif
deleted file mode 100644
index 3280138..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/eview16/jpa_details.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/eview16/jpa_perspective.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/eview16/jpa_perspective.gif
deleted file mode 100644
index c0ab917..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/eview16/jpa_perspective.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/eview16/jpa_structure.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/eview16/jpa_structure.gif
deleted file mode 100644
index 682c90a..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/eview16/jpa_structure.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/basic.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/basic.gif
deleted file mode 100644
index a547d74..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/basic.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/embeddable.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/embeddable.gif
deleted file mode 100644
index 8856f78..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/embeddable.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/embedded-id.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/embedded-id.gif
deleted file mode 100644
index c1c8e21..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/embedded-id.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/embedded.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/embedded.gif
deleted file mode 100644
index c2ae664..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/embedded.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/entity-mappings.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/entity-mappings.gif
deleted file mode 100644
index c349c96..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/entity-mappings.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/entity.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/entity.gif
deleted file mode 100644
index d606f48..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/entity.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/id.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/id.gif
deleted file mode 100644
index a205ec3..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/id.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/many-to-many.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/many-to-many.gif
deleted file mode 100644
index 48885b2..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/many-to-many.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/many-to-one.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/many-to-one.gif
deleted file mode 100644
index 2e1e2b9..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/many-to-one.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/mapped-superclass.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/mapped-superclass.gif
deleted file mode 100644
index 8cc3764..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/mapped-superclass.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/null-attribute-mapping.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/null-attribute-mapping.gif
deleted file mode 100644
index 70a9c23..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/null-attribute-mapping.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/null-type-mapping.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/null-type-mapping.gif
deleted file mode 100644
index 6279478..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/null-type-mapping.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/one-to-many.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/one-to-many.gif
deleted file mode 100644
index 1e90027..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/one-to-many.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/one-to-one.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/one-to-one.gif
deleted file mode 100644
index 578ec36..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/one-to-one.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/persistence-unit.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/persistence-unit.gif
deleted file mode 100644
index 9cc45f6..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/persistence-unit.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/persistence.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/persistence.gif
deleted file mode 100644
index d1f616d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/persistence.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/transient.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/transient.gif
deleted file mode 100644
index cc5d83d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/transient.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/version.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/version.gif
deleted file mode 100644
index 202a810..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/obj16/version.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/icons/full/wizban/jpa_facet_wizban.gif b/jpa/plugins/org.eclipse.jpt.ui/icons/full/wizban/jpa_facet_wizban.gif
deleted file mode 100644
index 8ce181f..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/icons/full/wizban/jpa_facet_wizban.gif
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/plugin.properties b/jpa/plugins/org.eclipse.jpt.ui/plugin.properties
deleted file mode 100644
index be47f40..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/plugin.properties
+++ /dev/null
@@ -1,50 +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 Tools - UI
-providerName=Eclipse.org
-
-JPA_PLATFORM="JPA Platform UI"
-
-
-jpaWizardCategoryName = JPA
-newJpaProjectWizardName = JPA Project
-newJpaProjectWizardDesc = Create a JPA project
-
-jpaMenuName = JPA Tools
-generateEntities = Generate Entities...
-generateDDL = Generate DDL...
-synchronizeClasses = Synchronize Classes
-addPersistentClass = Add persistent class ...
-removePersistentClass = Remove persistent class
-addPersistentAttributeToXml = Add persistent attribute to XML
-addPersistentAttributeToXmlAndMap = Add persistent attribute to XML ...
-removePersistentAttributeFromXml = Remove persistent attribute from XML
-
-jpaPreferencePage = JPA
-
-jpaProjectPropertiesPage = JPA
-
-jpaPerspective = JPA Development
-jpaDetails = JPA Details
-jpaStructure = JPA Structure
-
-JpaProposalCategory = JPA Proposals
diff --git a/jpa/plugins/org.eclipse.jpt.ui/plugin.xml b/jpa/plugins/org.eclipse.jpt.ui/plugin.xml
deleted file mode 100644
index 12561ff..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/plugin.xml
+++ /dev/null
Binary files differ
diff --git a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui.properties b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui.properties
deleted file mode 100644
index 1ff880b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui.properties
+++ /dev/null
@@ -1,79 +0,0 @@
-###############################################################################
-# Copyright (c) 2006, 2007 Oracle. - initial API and implementation
-###############################################################################
-
-AddPersistentAttributeDialog_title=Add Persistent Attribute
-AddPersistentAttributeDialog_attributeLabel=Attribute:
-AddPersistentAttributeDialog_mappingLabel=Map as:
-AddPersistentAttributeDialog_noMappingKeyError=You must specify a mapping type
-
-AddPersistentClassDialog_title=Add Persistent Class
-AddPersistentClassDialog_classLabel=Class:
-AddPersistentClassDialog_classDialog_title=Persistent Class Selection
-AddPersistentClassDialog_classDialog_message=Choose a class:
-AddPersistentClassDialog_mappingLabel=Map as:
-AddPersistentClassDialog_noClassError=You must specify a class
-AddPersistentClassDialog_duplicateClassWarning=File already contains that persistent class
-AddPersistentClassDialog_classNotFoundWarning=Cannot resolve class
-AddPersistentClassDialog_noMappingKeyError=You must specify a mapping type
-
-DatabaseReconnectWizardPage_database=Database Settings
-DatabaseReconnectWizardPage_databaseConnection=Database Connection
-DatabaseReconnectWizardPage_reconnectToDatabase=Reconnect to the database.
-DatabaseReconnectWizardPage_connection=Connection:
-DatabaseReconnectWizardPage_schema=Schema:
-DatabaseReconnectWizardPage_schemaInfo=(Note:  Must have active connection to select schema)
-DatabaseReconnectWizardPage_addConnectionLink=<a>Add connections...</a>
-DatabaseReconnectWizardPage_reconnectLink=<a>Reconnect...</a>
-
-General_browse=Browse...
-General_deselectAll=Deselect All
-General_selectAll=Select All
-
-GenerateEntitiesWizard_generateEntities=Generate Entities
-GenerateEntitiesWizardPage_chooseEntityTable=Choose tables to generate entities from.
-GenerateEntitiesWizardPage_generateEntities=Generate Entities from Tables
-GenerateEntitiesWizardPage_synchronizeClasses=Synchronize Classes in persistence.xml
-GenerateEntitiesWizardPage_tables=Tables:
-GenerateEntitiesWizardPage_tableColumn=Table
-GenerateEntitiesWizardPage_entityNameColumn=Entity Name
-
-GenericPlatformUiDialog_notSupportedMessageTitle=DDL Generation
-GenericPlatformUiDialog_notSupportedMessageText=DDL Generation is not supported by the Generic Platform.
-
-JpaPreferencePage_defaultJpaLib=Default JPA implementation library:
-JpaPreferencePage_userLibsLink=<a>Configure user libraries ...</a>
-JpaPreferencePage_invalidJpaLib=Invalid Library:  Must contain javax.persistence classes.
-
-JpaStructureView_viewNotAvailable=Structure is not available for the current selection.
-JpaStructureView_linkWithEditorText=Link with Editor
-JpaStructureView_linkWithEditorDesc=Link with Active Editor
-JpaStructureView_linkWithEditorTooltip=Link with Editor
-
-JpaDetailsView_viewNotAvailable=Details are not available for the current selection.
-
-NewJpaProjectWizard_title=New JPA Project
-NewJpaProjectWizard_firstPage_title=JPA Project
-NewJpaProjectWizard_firstPage_description=Configure JPA project settings.
-
-JpaFacetWizardPage_title=JPA Facet
-JpaFacetWizardPage_description=Configure JPA settings.
-JpaFacetWizardPage_platformLabel=Platform
-JpaFacetWizardPage_connectionLabel=Connection
-JpaFacetWizardPage_connectionLink=<a>Add connection ...</a>
-JpaFacetWizardPage_jpaImplementationLabel=JPA implementation
-JpaFacetWizardPage_userServerLibLabel=Use implementation provided by server runtime
-JpaFacetWizardPage_specifyLibLabel=Use implementation library:
-JpaFacetWizardPage_jpaPrefsLink=<a>Configure default JPA implementation library ...</a>
-JpaFacetWizardPage_userLibsLink=<a>Configure user libraries ...</a>
-JpaFacetWizardPage_persistentClassManagementLabel=Persistent class management
-JpaFacetWizardPage_discoverClassesButton=Discover annotated classes automatically
-JpaFacetWizardPage_listClassesButton=Annotated classes must be listed in persistence.xml
-JpaFacetWizardPage_createOrmXmlButton=Create orm.xml
-
-PersistentAttributePage_mapAs=Map As:
-
-PersistentTypePage_mapAs=Map As:
-
-OverwriteConfirmerDialog_title=Overwrite Existing Class
-OverwriteConfirmerDialog_text=Overwrite source code for the class ''{0}''?
diff --git a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties
deleted file mode 100644
index d8d63ae..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties
+++ /dev/null
@@ -1,185 +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
-############################################################################### 
-
-PersistentTypePage_EntityLabel=Entity
-PersistentTypePage_EmbeddableLabel=Embeddable
-PersistentTypePage_MappedSuperclassLabel=Mapped Superclass
-
-PersistentAttributePage_BasicLabel=Basic
-PersistentAttributePage_IdLabel=Id
-PersistentAttributePage_OneToManyLabel=One to Many
-PersistentAttributePage_ManyToOneLabel=Many to One
-PersistentAttributePage_ManyToManyLabel=Many to Many
-PersistentAttributePage_TransientLabel=Transient
-PersistentAttributePage_VersionLabel=Version
-PersistentAttributePage_EmbeddedLabel=Embedded
-PersistentAttributePage_EmbeddedIdLabel=Embedded Id
-PersistentAttributePage_OneToOneLabel=One to One
-
-EntityComposite_tableDefault=Default ({0})
-EntityComposite_tableNoDefaultSpecified=Default ()
-EntityComposite_inheritance=Inheritance
-
-EntityGeneralSection_nameDefaultWithOneParam=Default ({0})
-EntityGeneralSection_nameDefaultEmpty=Default ()
-EntityGeneralSection_name=Name:
-
-BasicGeneralSection_name=Name:
-BasicGeneralSection_nameDefault=Default ({0})
-BasicGeneralSection_fetchLabel=Fetch:
-BasicGeneralSection_optionalLabel=Optional:
-BasicGeneralSection_lobLabel=Lob
-BasicGeneralSection_temporalLabel=Temporal:
-BasicGeneralSection_enumeratedLabel=Enumerated:
-
-TableChooser_label=Name:
-CatalogChooser_label=Catalog:
-SchemaChooser_label=Schema:
-TableComposite_tableSection=Table:
-TableComposite_defaultEmpty=Default ()
-TableComposite_defaultWithOneParam=Default ({0})
-
-ColumnChooser_label=Name:
-ColumnTableChooser_label=Table:
-
-TargetEntityChooser_label=Target Entity:
-TargetEntityChooser_defaultEmpty=Default ()
-TargetEntityChooser_defaultWithOneParam=Default ({0})
-TargetEntityChooser_browse=Browse...
-
-NonOwningMapping_mappedByLabel=Mapped By:
-
-JoinTableComposite_add=Add...
-JoinTableComposite_defaultEmpty=Default()
-JoinTableComposite_defaultWithOneParam=Default ({0})
-JoinTableComposite_edit=Edit...
-JoinTableComposite_inverseJoinColumn=Inverse Join Columns
-
-JoinTableComposite_mappingBetweenTwoParamsDefault=Default ({0} -> {1})
-JoinTableComposite_mappingBetweenTwoParamsFirstDefault=Default ({0}) -> {1}
-JoinTableComposite_mappingBetweenTwoParamsSecDefault={0} -> Default ({1})
-JoinTableComposite_mappingBetweenTwoParamsBothDefault=Default ({0}) -> Default ({1})
-JoinTableComposite_mappingBetweenTwoParams={0} -> {1}
-JoinTableComposite_joinColumn=Join Columns
-JoinTableComposite_name=Name:
-JoinTableComposite_remove=Remove
-JoinTableComposite_overrideDefaultJoinColumns=Override Default
-JoinTableComposite_overrideDefaultInverseJoinColumns=Override Default
-
-InverseJoinColumnDialog_editInverseJoinColumn=Edit Inverse Join Column
-InverseJoinColumnDialog_defaultWithOneParam=Default ({0})
-
-JoinColumnDialog_addJoinColumn=Add Join Column
-JoinColumnDialog_editJoinColumn=Edit Join Column
-JoinColumnDialog_name=Name:
-JoinColumnDialog_referencedColumnName=Referenced Column Name:
-JoinColumnDialog_defaultWithOneParam=Default ({0})
-JoinColumnDialog_insertable=Insertable:
-JoinColumnDialog_updatable=Updatable:
-JoinColumnDialog_table=Table:
-
-MultiRelationshipMappingComposite_general=General
-MultiRelationshipMappingComposite_joinTable=Join Table
-MultiRelationshipMappingComposite_targetEntity=Target Entity:
-MultiRelationshipMappingComposite_cascadeType=Cascade Type:
-MultiRelationshipMappingComposite_fetchType=Fetch Type:
-MultiRelationshipMappingComposite_mappedBy=Mapped By:
-
-ColumnComposite_columnSection=Column:
-ColumnComposite_defaultWithOneParam=Default ({0})
-ColumnComposite_defaultEmpty=Default ()
-ColumnComposite_insertable=Insertable:
-ColumnComposite_updatable=Updatable:
-
-JoinColumnComposite_joinColumn=Join Columns
-JoinColumnComposite_defaultEmpty=Default()
-JoinColumnComposite_name=Name:
-JoinColumnComposite_defaultWithOneParam=Default ({0})
-JoinColumnComposite_add=Add...
-JoinColumnComposite_edit=Edit...
-JoinColumnComposite_mappingBetweenTwoParams={0} -> {1}
-JoinColumnComposite_mappingBetweenTwoParamsDefault=Default ({0} -> {1})
-JoinColumnComposite_mappingBetweenTwoParamsBothDefault=Default ({0}) -> Default ({1})
-JoinColumnComposite_mappingBetweenTwoParamsFirstDefault=Default ({0}) -> {1}
-JoinColumnComposite_mappingBetweenTwoParamsSecDefault={0} -> Default ({1})
-JoinColumnComposite_remove=Remove
-JoinColumnComposite_overrideDefaultJoinColumns=Override Default
-
-PrimaryKeyJoinColumnsComposite_overrideDefaultPrimaryKeyJoinColumns=Override Default
-PrimaryKeyJoinColumnsComposite_add=Add...
-PrimaryKeyJoinColumnsComposite_edit=Edit...
-PrimaryKeyJoinColumnsComposite_remove=Remove
-PrimaryKeyJoinColumnsComposite_defaultEmpty=Default()
-PrimaryKeyJoinColumnsComposite_defaultWithOneParam=Default ({0})
-PrimaryKeyJoinColumnsComposite_primaryKeyJoinColumn=Primary Key Join Columns
-PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParams={0} -> {1}
-PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsDefault=Default ({0} -> {1})
-PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsBothDefault=Default ({0}) -> Default ({1})
-PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsFirstDefault=Default ({0}) -> {1}
-PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsSecDefault={0} -> Default ({1})
-
-AttributeOverridesComposite_attributeOverrides=Attribute Overrides
-AttributeOverridesComposite_overridDefault=Override Default
-OverridesComposite_joinColumn=Join Columns
-InheritanceComposite_default=Default ({0})
-InheritanceComposite_strategy=Strategy:
-InheritanceComposite_discriminatorValue=Discriminator Value:
-InheritanceComposite_discriminatorValueDefaultWithOneParam=Default ({0})
-
-DiscriminatorColumnComposite_column=Discriminator Column:
-DiscriminatorColumnComposite_discriminatorType=Discriminator Type:
-DiscriminatorColumnComposite_defaultEmpty=Default(<provider-specific>)
-
-IdMappingComposite_pk_generation=PK Generation
-IdMappingComposite_primaryKeyGeneration=Primary Key Generation
-IdMappingComposite_tableGenerator=Table Generator
-IdMappingComposite_sequenceGenerator=Sequence Generator
-
-GeneratedValueComposite_generatedValue=Generated Value
-GeneratedValueComposite_generatorName=Generator Name:
-GeneratedValueComposite_strategy=Strategy:
-
-SequenceGeneratorComposite_sequenceGenerator=Sequence Generator
-SequenceGeneratorComposite_name=Name:
-SequenceGeneratorComposite_sequence=Sequence:
-SequenceGeneratorComposite_default=Default
-
-TableGeneratorComposite_name=Name:
-TableGeneratorComposite_table=Table:
-TableGeneratorComposite_tableGenerator=Table Generator
-TableGeneratorComposite_pkColumn=Primary Key Column:
-TableGeneratorComposite_valueColumn=Value Column:
-TableGeneratorComposite_pkColumnValue=Primary Key Column Value:
-TableGeneratorComposite_default=Default
-
-OrderByComposite_orderByGroup=Order By
-OrderByComposite_orderByLabel=Order By:
-OrderByComposite_noOrdering=No Ordering
-OrderByComposite_primaryKeyOrdering=Primary Key Ordering
-OrderByComposite_customOrdering=Custom Ordering
-
-SecondaryTablesComposite_secondaryTables=Secondary Tables
-SecondaryTablesComposite_add=Add...
-SecondaryTablesComposite_edit=Edit...
-SecondaryTablesComposite_remove=Remove
-
-SecondaryTableDialog_editSecondaryTable=Edit Secondary Table
-SecondaryTableDialog_name=Name:
-SecondaryTableDialog_catalog=Catalog:
-SecondaryTableDialog_schema=Schema:
-SecondaryTableDialog_defaultSchema=Default ({0})
-SecondaryTableDialog_defaultCatalog=Default ({0})
-
-AccessTypeCombo_default=Default
-EnumComboViewer_default=Default ({0})
-MetaDataCompleteCombo_Default=Default ({0})
-JoinColumnDialog_defaultTrue=Default ({0})
-InheritanceComposite_defaultDiscriminatorType=Default ({0})
-GeneratedValueComposite_default=Default ({0})
diff --git a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_xml.properties b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_xml.properties
deleted file mode 100644
index f581ea4..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_xml.properties
+++ /dev/null
@@ -1,36 +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
-############################################################################### 
-
-PersistentTypePage_javaClassLabel=Java Class:
-PersistentTypePage_MetadataCompleteLabel=Metadata Complete:
-PersistentTypePage_AccessLabel=Access:
-
-PersistenceUnitMetadataSection_SchemaDefault=Default
-PersistenceUnitMetadataSection_CatalogDefault=Default
-
-PersistentAttributePage_javaAttributeLabel=Java Attribute:
-
-XMLEntityMappingsPage_XmlMappingMetadataCompleteCheckBox=XML Mapping Metadata Complete
-XMLEntityMappingsPage_CascadePersistCheckBox=Cascade Persist
-XMLEntityMappingsPage_PersistenceUnitSection=Persistence Unit
-XMLEntityMappingsPage_SchemaDefault=Default ({0})
-XMLEntityMappingsPage_SchemaNoDefaultSpecified=Default
-XMLEntityMappingsPage_CatalogDefault=Default ({0})
-XMLEntityMappingsPage_CatalogNoDefaultSpecified=Default
-
-XmlSchemaChooser_SchemaChooser=Schema:
-XmlCatalogChooser_CatalogChooser=Catalog:
-
-XmlJavaClassChooser_XmlJavaClassDialog_title=Class Selection
-XmlJavaClassChooser_XmlJavaClassDialog_message=Choose a type:
-
-XmlPackageChooser_PackageDialog_title=Package Selection
-XmlPackageChooser_PackageDialog_message=Choose a folder: 
-
diff --git a/jpa/plugins/org.eclipse.jpt.ui/schema/jpaPlatform.exsd b/jpa/plugins/org.eclipse.jpt.ui/schema/jpaPlatform.exsd
deleted file mode 100644
index 92d1085..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/schema/jpaPlatform.exsd
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.jpt.ui">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.jpt.ui" id="jpaVendor" name="JPA UI Vendor"/>
-      </appInfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="jpaPlatform" minOccurs="1" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="jpaPlatform">
-      <annotation>
-         <documentation>
-            Extend this extension point and you must also extend the org.eclipse.jpt.core.jpaPlatform 
-            extension point.  The ids must match.  One jpaPlatform will be chosen per JpaProject.  The 
-            possible jpaPlatforms will be displayed to the user as a project property.
-         </documentation>
-      </annotation>
-      <complexType>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The id must match the corresponding org.eclipse.jpt.core.jpaVendor extension id.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.jpt.ui.internal.IJpaPlatformUI"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/BaseJpaPlatformUi.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/BaseJpaPlatformUi.java
deleted file mode 100644
index c53e5d8..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/BaseJpaPlatformUi.java
+++ /dev/null
@@ -1,69 +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.internal;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.ui.internal.details.IJpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.generic.EntitiesGenerator;
-import org.eclipse.jpt.ui.internal.java.details.JavaDetailsProvider;
-import org.eclipse.jpt.ui.internal.java.structure.JavaStructureProvider;
-import org.eclipse.jpt.ui.internal.structure.IJpaStructureProvider;
-import org.eclipse.jpt.ui.internal.xml.details.XmlDetailsProvider;
-import org.eclipse.jpt.ui.internal.xml.structure.XmlStructureProvider;
-
-public abstract class BaseJpaPlatformUi implements IJpaPlatformUi
-{
-	private Collection<IJpaDetailsProvider> detailsProviders;
-	private Collection<IJpaStructureProvider> structureProviders;
-	
-	protected BaseJpaPlatformUi() {
-		super();
-	}
-
-	// ********** behavior **********
-	
-	public Collection<IJpaDetailsProvider> detailsProviders() {
-		if (this.detailsProviders == null) {
-			this.detailsProviders = this.buildJpaDetailsProvider();
-		}
-		return this.detailsProviders;
-	}
-		
-	protected Collection<IJpaDetailsProvider> buildJpaDetailsProvider() {
-		Collection<IJpaDetailsProvider> detailsProviders = new ArrayList<IJpaDetailsProvider>();
-		detailsProviders.add(new JavaDetailsProvider());
-		detailsProviders.add(new XmlDetailsProvider());
-		return detailsProviders;
-	}
-	
-	public Collection<IJpaStructureProvider> structureProviders() {
-		if (this.structureProviders == null) {
-			this.structureProviders = this.buildJpaStructureProvider();
-		}
-		return this.structureProviders;
-	}
-	
-	protected Collection<IJpaStructureProvider> buildJpaStructureProvider() {
-		Collection<IJpaStructureProvider> structureProviders = new ArrayList<IJpaStructureProvider>();
-		structureProviders.add(new JavaStructureProvider());
-		structureProviders.add(new XmlStructureProvider());
-		return structureProviders;
-	}
-
-	public void generateEntities(IJpaProject project, IStructuredSelection selection) {
-
-		EntitiesGenerator.generate(project, selection);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaHelpContextIds.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaHelpContextIds.java
deleted file mode 100644
index c7fe124..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaHelpContextIds.java
+++ /dev/null
@@ -1,109 +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.internal;
-
-
-/**
- * Help context ids for the Dali JPA UI.
- * <p>
- * This interface contains constants only; it is not intended to be
- * implemented.
- * </p>
- *  
- */
-public interface IJpaHelpContextIds {
-
-
-	//ContextID prefix
-	public static final String PREFIX = JptUiPlugin.PLUGIN_ID + ".";  //$NON-NLS-1$
-	
-	//Persistent Type composites
-	public static final String ENTITY_ACCESS_TYPE = PREFIX + "entity_accessType"; //$NON-NLS-1$
-	public static final String ENTITY_ATTRIBUTE_OVERRIDES = PREFIX + "entity_attributeOverrides"; //$NON-NLS-1$
-	public static final String ENTITY_ATTRIBUTE_OVERRIDES_COLUMN = PREFIX + "entity_attributeOverridesColumn"; //$NON-NLS-1$
-	public static final String ENTITY_CATALOG = PREFIX + "entity_catalog"; //$NON-NLS-1$
-	public static final String ENTITY_INHERITANCE_STRATEGY = PREFIX + "entity_inheritanceStrategy"; //$NON-NLS-1$
-	public static final String ENTITY_INHERITANCE_DISCRIMINATOR_TYPE = PREFIX + "entity_inheritanceDiscriminatorType"; //$NON-NLS-1$
-	public static final String ENTITY_INHERITANCE_DISCRIMINATOR_COLUMN = PREFIX + "entity_inheritanceDiscriminatorColumn"; //$NON-NLS-1$
-	public static final String ENTITY_INHERITANCE_DISCRIMINATOR_VALUE = PREFIX + "entity_inheritanceDiscriminatorValue"; //$NON-NLS-1$
-	public static final String ENTITY_NAME = PREFIX + "entity_name"; //$NON-NLS-1$
-	public static final String ENTITY_ORM_PACKAGE = PREFIX + "orm_package"; //$NON-NLS-1$
-	public static final String ENTITY_ORM_SCHEMA = PREFIX + "orm_schema"; //$NON-NLS-1$
-	public static final String ENTITY_ORM_CATALOG = PREFIX + "orm_catalog"; //$NON-NLS-1$
-	public static final String ENTITY_ORM_ACCESS = PREFIX + "orm_access"; //$NON-NLS-1$
-	public static final String ENTITY_ORM_CASCADE = PREFIX + "orm_cascade"; //$NON-NLS-1$
-	public static final String ENTITY_ORM_XML = PREFIX + "orm_xml"; //$NON-NLS-1$
-	public static final String ENTITY_SCHEMA = PREFIX + "entity_schema"; //$NON-NLS-1$
-	public static final String ENTITY_TABLE = PREFIX + "entity_table"; //$NON-NLS-1$
-
-	
-	//Persistent Attribute composites
-	public static final String MAPPING_CASCADE_TYPE = PREFIX + "mapping_cascadeType"; //$NON-NLS-1$
-	public static final String MAPPING_COLUMN = PREFIX + "mapping_column"; //$NON-NLS-1$
-	public static final String MAPPING_COLUMN_INSERTABLE = PREFIX + "mapping_columnInsertable"; //$NON-NLS-1$
-	public static final String MAPPING_COLUMN_TABLE = PREFIX + "mapping_columnTable"; //$NON-NLS-1$
-	public static final String MAPPING_COLUMN_UPDATABLE= PREFIX + "mapping_columnUpdatable"; //$NON-NLS-1$
-	public static final String MAPPING_EMBEDDED_ATTRIBUTE_OVERRIDES = PREFIX + "mapping_embeddedAttributeOverrides";//$NON-NLS-1$
-	public static final String MAPPING_EMBEDDED_ATTRIBUTE_OVERRIDES_COLUMN = PREFIX + "mapping_embeddedAttributeOverridesColumn";//$NON-NLS-1$
-	public static final String MAPPING_ENUMERATED = PREFIX + "mapping_enumerated"; //$NON-NLS-1$
-	public static final String MAPPING_FETCH_TYPE = PREFIX + "mapping_fetchType"; //$NON-NLS-1$
-	public static final String MAPPING_GENERATED_VALUE_STRATEGY = PREFIX + "mapping_generatedValueStrategy"; //$NON-NLS-1$
-	public static final String MAPPING_GENERATED_VALUE_GENERATOR_NAME = PREFIX + "mapping_generatedValueGeneratorName"; //$NON-NLS-1$
-	public static final String MAPPING_JOIN_COLUMN_NAME = PREFIX + "mapping_joinColumnName"; //$NON-NLS-1$
-	public static final String MAPPING_JOIN_REFERENCED_COLUMN = PREFIX + "mapping_joinReferencedColumn"; //$NON-NLS-1$
-	public static final String MAPPING_JOIN_TABLE_NAME = PREFIX + "mapping_joinTableName"; //$NON-NLS-1$
-	public static final String MAPPING_JOIN_TABLE_COLUMNS = PREFIX + "mapping_joinTableJoinColumns"; //$NON-NLS-1$
-	public static final String MAPPING_JOIN_TABLE_INVERSE_JOIN_COLUMNS = PREFIX + "mapping_joinTableInverseJoinColumns"; //$NON-NLS-1$
-	public static final String MAPPING_LOB = PREFIX + "mapping_lob"; //$NON-NLS-1$
-	public static final String MAPPING_MAP_AS = PREFIX + "mapping_mapAs"; //$NON-NLS-1$
-	public static final String MAPPING_MAPPED_BY = PREFIX + "mapping_mappedBy"; //$NON-NLS-1$
-	public static final String MAPPING_OPTIONAL = PREFIX + "mapping_optional"; //$NON-NLS-1$
-	public static final String MAPPING_ORDER_BY = PREFIX + "mapping_orderBy"; //$NON-NLS-1$
-	public static final String MAPPING_ORDER_BY_NO_ORDERING = PREFIX + "mapping_orderByNoOrdering"; //$NON-NLS-1$
-	public static final String MAPPING_ORDER_BY_PRIMARY_KEY_ORDERING = PREFIX + "mapping_orderByPrimaryKeyOrdering"; //$NON-NLS-1$
-	public static final String MAPPING_ORDER_BY_CUSTOM_ORDERING = PREFIX + "mapping_orderByCustomOrdering"; //$NON-NLS-1$
-	public static final String MAPPING_PRIMARY_KEY_GENERATION = PREFIX + "mapping_primaryKeyGeneration"; //$NON-NLS-1$
-	public static final String MAPPING_SEQUENCE_GENERATOR = PREFIX + "mapping_sequenceGenerator"; //$NON-NLS-1$
-	public static final String MAPPING_SEQUENCE_GENERATOR_NAME = PREFIX + "mapping_sequenceGeneratorName"; //$NON-NLS-1$ 
-	public static final String MAPPING_SEQUENCE_GENERATOR_SEQUENCE = PREFIX + "mapping_sequenceGeneratorSequence"; //$NON-NLS-1$ 
-	public static final String MAPPING_TABLE_GENERATOR = PREFIX + "mapping_tableGenerator"; //$NON-NLS-1$
-	public static final String MAPPING_TABLE_GENERATOR_NAME = PREFIX + "mapping_tableGeneratorName"; //$NON-NLS-1$
-	public static final String MAPPING_TABLE_GENERATOR_PRIMARY_KEY_COLUMN = PREFIX + "mapping_tableGeneratorPrimaryKeyColumn"; //$NON-NLS-1$
-	public static final String MAPPING_TABLE_GENERATOR_PRIMARY_KEY_COLUMN_VALUE = PREFIX + "mapping_tableGeneratorPrimaryKeyColumnValue"; //$NON-NLS-1$
-	public static final String MAPPING_TABLE_GENERATOR_TABLE= PREFIX + "mapping_tableGeneratorTable"; //$NON-NLS-1$
-	public static final String MAPPING_TABLE_GENERATOR_VALUE_COLUMN = PREFIX + "mapping_tableGeneratorValueColumn"; //$NON-NLS-1$
-	public static final String MAPPING_TARGET_ENTITY = PREFIX + "mapping_targetEntity"; //$NON-NLS-1$
-	public static final String MAPPING_TEMPORAL = PREFIX + "mapping_temporal"; //$NON-NLS-1$
-
-	//Project properties
-	public static final String PROPERTIES_JAVA_PERSISTENCE = PREFIX + "properties_javaPersistence"; //$NON-NLS-1$
-	public static final String PROPERTIES_JAVA_PERSISTENCE_CONNECTION = PREFIX + "properties_javaPersistenceConnection"; //$NON-NLS-1$
-	public static final String PROPERTIES_JAVA_PERSISTENCE_SCHEMA = PREFIX + "properties_javaPersistenceSchema"; //$NON-NLS-1$
-	
-	//Dialogs, Wizards
-	public static final String DIALOG_CREATE_ORM = PREFIX + "dialog_createORM"; //$NON-NLS-1$
-	public static final String DIALOG_EDIT_INVERSE_JOIN_COLUNN = PREFIX + "dialog_editInverseJoinColumn"; //$NON-NLS-1$
-	public static final String DIALOG_GENERATE_ENTITIES = PREFIX + "dialog_generateEntities"; //$NON-NLS-1$
-	public static final String DIALOG_GENERATE_ENTITIES_SOURCE = PREFIX + "dialog_generateEntities_source"; //$NON-NLS-1$
-	public static final String DIALOG_GENERATE_ENTITIES_PACKAGE = PREFIX + "dialog_generateEntities_package"; //$NON-NLS-1$
-	public static final String DIALOG_GENERATE_ENTITIES_TABLES = PREFIX + "dialog_generateEntities_tables"; //$NON-NLS-1$
-	public static final String DIALOG_JPA_FACET = PREFIX + "dialog_JPAFacet"; //$NON-NLS-1$
-	public static final String DIALOG_JPA_PLATFORM = PREFIX + "dialog_JPAPlatform"; //$NON-NLS-1$
-	public static final String NEW_JPA_PROJECT = PREFIX + "dialog_newJPAProject"; //$NON-NLS-1$
- 	public static final String NEW_JPA_PROJECT_CONTENT_PAGE_CLASSPATH = PREFIX + "dialog_addJavaPersistence_classpath"; //$NON-NLS-1$
- 	public static final String NEW_JPA_PROJECT_CONTENT_PAGE_DATABASE = PREFIX + "dialog_addJavaPersistence_database"; //$NON-NLS-1$
- 	public static final String NEW_JPA_PROJECT_CONTENT_PAGE_PACKAGING = PREFIX + "dialog_addJavaPersistence_packaging"; //$NON-NLS-1$
- 	public static final String NEW_JPA_PROJECT_CREATION_PAGE = PREFIX + "dialog_addJavaPersistence"; //$NON-NLS-1$
-	
-	//Other
-	public static final String PERSISTENCE_OUTLINE = PREFIX + "persistenceOutline"; //$NON-NLS-1$
-
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaPlatformUi.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaPlatformUi.java
deleted file mode 100644
index b7fcb18..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaPlatformUi.java
+++ /dev/null
@@ -1,28 +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.internal;
-
-import java.util.Collection;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.ui.internal.details.IJpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.structure.IJpaStructureProvider;
-
-public interface IJpaPlatformUi
-{
-	Collection<IJpaStructureProvider> structureProviders();
-	
-	Collection<IJpaDetailsProvider> detailsProviders();
-	
-	void generateDDL(IJpaProject project, IStructuredSelection selection);
-	
-	void generateEntities(IJpaProject project, IStructuredSelection selection);
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JpaCompletionProposalComputer.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JpaCompletionProposalComputer.java
deleted file mode 100644
index 78b9373..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JpaCompletionProposalComputer.java
+++ /dev/null
@@ -1,123 +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.internal;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jdt.core.CompletionContext;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
-import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer;
-import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
-import org.eclipse.jface.text.contentassist.CompletionProposal;
-import org.eclipse.jface.text.contentassist.ICompletionProposal;
-import org.eclipse.jpt.core.internal.IJpaFile;
-import org.eclipse.jpt.core.internal.JptCorePlugin;
-import org.eclipse.jpt.core.internal.content.java.JpaCompilationUnit;
-import org.eclipse.jpt.utility.internal.Filter;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-public class JpaCompletionProposalComputer implements IJavaCompletionProposalComputer {
-
-	public JpaCompletionProposalComputer() {
-		super();
-	}
-
-	public void sessionStarted() {
-		// do nothing
-	}
-
-	@SuppressWarnings("unchecked")
-	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-		return (context instanceof JavaContentAssistInvocationContext) ?
-			this.computeCompletionProposals((JavaContentAssistInvocationContext) context)
-		:
-			Collections.emptyList();
-	}
-
-	private List<ICompletionProposal> computeCompletionProposals(JavaContentAssistInvocationContext context) {
-		try {
-			return this.computeCompletionProposals_(context);
-		} catch (JavaModelException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private List<ICompletionProposal> computeCompletionProposals_(JavaContentAssistInvocationContext context) throws JavaModelException {
-		ICompilationUnit cu = context.getCompilationUnit();
-		if (cu == null) {
-			return Collections.emptyList();
-		}
-
-		IJpaFile jpaFile = JptCorePlugin.getJpaFile((IFile) cu.getCorrespondingResource());
-		if (jpaFile == null) {
-			return Collections.emptyList();
-		}
-
-		JpaCompilationUnit jpaCU = (JpaCompilationUnit) jpaFile.getContent();
-		CompletionContext cc = context.getCoreContext();
-
-		// the context's "token" is really a sort of "prefix" - it does NOT
-		// correspond to the "start" and "end" we get below... 
-		char[] prefix = cc.getToken();
-		Filter<String> filter = ((prefix == null) ? Filter.Null.<String>instance() : new IgnoreCasePrefixFilter(prefix));
-		// the token "start" is the offset of the token's first character
-		int tokenStart = cc.getTokenStart();
-		// the token "end" is the offset of the token's last character (yuk)
-		int tokenEnd = cc.getTokenEnd();
-
-//		System.out.println("prefix: " + new String(prefix));
-//		System.out.println("token start: " + tokenStart);
-//		System.out.println("token end: " + tokenEnd);
-//		String source = cu.getSource();
-//		String token = source.substring(tokenStart, tokenEnd + 1);
-//		System.out.println("token: =>" + token + "<=");
-//		String snippet = source.substring(Math.max(0, tokenStart - 20), Math.min(source.length(), tokenEnd + 21));
-//		System.out.println("surrounding snippet: =>" + snippet + "<=");
-
-		List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();
-		for (Iterator<String> stream = jpaCU.candidateValuesFor(context.getInvocationOffset(), filter); stream.hasNext(); ) {
-			String s = stream.next();
-			proposals.add(new CompletionProposal(s, tokenStart, tokenEnd - tokenStart + 1, s.length()));
-		}
-		return proposals;
-	}
-
-	@SuppressWarnings("unchecked")
-	public List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-		return Collections.EMPTY_LIST;
-	}
-
-	public String getErrorMessage() {
-		return null;
-	}
-
-	public void sessionEnded() {
-		// do nothing
-	}
-
-	private static class IgnoreCasePrefixFilter implements Filter<String> {
-		private final char[] prefix;
-		IgnoreCasePrefixFilter(char[] prefix) {
-			super();
-			this.prefix = prefix;
-		}
-		public boolean accept(String s) {
-			return StringTools.stringStartsWithIgnoreCase(s.toCharArray(), prefix);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiIcons.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiIcons.java
deleted file mode 100644
index abdd525..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiIcons.java
+++ /dev/null
@@ -1,16 +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.internal;
-
-public class JptUiIcons
-{
-	public static final String JPA_WIZ_BANNER = "full/wizban/jpa_facet_wizban"; //$NON-NLS-1$
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiMessages.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiMessages.java
deleted file mode 100644
index cdc142e..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiMessages.java
+++ /dev/null
@@ -1,151 +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
- ******************************************************************************/   
-package org.eclipse.jpt.ui.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-public class JptUiMessages extends NLS 
-{	
-	private static final String BUNDLE_NAME = "jpt_ui"; //$NON-NLS-1$
-	
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, JptUiMessages.class);
-	}
-	
-	public static String AddPersistentAttributeDialog_title;
-	
-	public static String AddPersistentAttributeDialog_attributeLabel;
-	
-	public static String AddPersistentAttributeDialog_mappingLabel;
-	
-	public static String AddPersistentAttributeDialog_noMappingKeyError;
-	
-	public static String AddPersistentClassDialog_title;
-	
-	public static String AddPersistentClassDialog_classLabel;
-	
-	public static String AddPersistentClassDialog_classDialog_title;
-	
-	public static String AddPersistentClassDialog_classDialog_message;
-	
-	public static String AddPersistentClassDialog_mappingLabel;
-	
-	public static String AddPersistentClassDialog_noClassError;
-	
-	public static String AddPersistentClassDialog_duplicateClassWarning;
-	
-	public static String AddPersistentClassDialog_classNotFoundWarning;
-	
-	public static String AddPersistentClassDialog_noMappingKeyError;
-	
-	public static String DatabaseReconnectWizardPage_database;
-	
-	public static String DatabaseReconnectWizardPage_databaseConnection;
-	
-	public static String DatabaseReconnectWizardPage_reconnectToDatabase;
-	
-	public static String DatabaseReconnectWizardPage_connection;
-	
-	public static String DatabaseReconnectWizardPage_schema;
-	
-	public static String DatabaseReconnectWizardPage_schemaInfo;
-	
-	public static String DatabaseReconnectWizardPage_addConnectionLink;
-
-	public static String DatabaseReconnectWizardPage_reconnectLink;
-
-	public static String General_browse;
-	
-	public static String General_deselectAll;
-	
-	public static String General_selectAll;
-	
-	public static String GenerateEntitiesWizard_generateEntities;
-
-	public static String GenerateEntitiesWizardPage_chooseEntityTable;
-
-	public static String GenerateEntitiesWizardPage_generateEntities;
-	
-	public static String GenerateEntitiesWizardPage_synchronizeClasses;
-
-	public static String GenerateEntitiesWizardPage_tables;
-
-	public static String GenerateEntitiesWizardPage_tableColumn;
-	
-	public static String GenerateEntitiesWizardPage_entityNameColumn;
-
-	public static String GenericPlatformUiDialog_notSupportedMessageTitle;
-
-	public static String GenericPlatformUiDialog_notSupportedMessageText;
-
-	public static String JpaPreferencePage_defaultJpaLib;
-	
-	public static String JpaPreferencePage_userLibsLink;
-	
-	public static String JpaPreferencePage_invalidJpaLib;
-	
-	public static String JpaStructureView_viewNotAvailable;
-	
-	public static String JpaStructureView_linkWithEditorText;
-	
-	public static String JpaStructureView_linkWithEditorDesc;
-	
-	public static String JpaStructureView_linkWithEditorTooltip;
-	
-	public static String JpaDetailsView_viewNotAvailable;
-	
-	public static String NewJpaProjectWizard_title;
-	
-	public static String NewJpaProjectWizard_firstPage_title;
-	
-	public static String NewJpaProjectWizard_firstPage_description;
-	
-	public static String JpaFacetWizardPage_title;
-	
-	public static String JpaFacetWizardPage_description;
-	
-	public static String JpaFacetWizardPage_platformLabel;
-	
-	public static String JpaFacetWizardPage_connectionLabel;
-	
-	public static String JpaFacetWizardPage_connectionLink;
-	
-	public static String JpaFacetWizardPage_jpaImplementationLabel;
-	
-	public static String JpaFacetWizardPage_userServerLibLabel;
-	
-	public static String JpaFacetWizardPage_specifyLibLabel;
-	
-	public static String JpaFacetWizardPage_jpaPrefsLink;
-	
-	public static String JpaFacetWizardPage_userLibsLink;
-	
-	public static String JpaFacetWizardPage_persistentClassManagementLabel;
-	
-	public static String JpaFacetWizardPage_discoverClassesButton;
-	
-	public static String JpaFacetWizardPage_listClassesButton;
-	
-	public static String JpaFacetWizardPage_createOrmXmlButton;
-	
-	public static String PersistentAttributePage_mapAs;
-	
-	public static String PersistentTypePage_mapAs;
-	
-	public static String OverwriteConfirmerDialog_title;
-
-	public static String OverwriteConfirmerDialog_text;
-
-	
-	private JptUiMessages() {
-		throw new UnsupportedOperationException();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiPlugin.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiPlugin.java
deleted file mode 100644
index 77e697c..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/JptUiPlugin.java
+++ /dev/null
@@ -1,63 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-public class JptUiPlugin extends AbstractUIPlugin
-{
-	private static JptUiPlugin INSTANCE;
-	
-	/**
-	 * The plug-in identifier of JPA UI support
-	 * (value <code>"org.eclipse.jpt.ui"</code>).
-	 */
-	public final static String PLUGIN_ID = "org.eclipse.jpt.ui";  //$NON-NLS-1$
-	
-	/**
-	 * Returns the singleton Plugin
-	 */
-	public static JptUiPlugin getPlugin() {
-		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));
-	}
-	
-	
-	public JptUiPlugin() {
-		super();
-		INSTANCE = this;
-	}
-	
-	/**
-	 * This gets a .gif from the icons folder.
-	 */
-	public ImageDescriptor getImageDescriptor(String key) {
-		if (! key.startsWith("icons/")) {
-			key = "icons/" + key;
-		}
-		if (! key.endsWith(".gif")) {
-			key = key + ".gif";
-		}
-		return imageDescriptorFromPlugin(PLUGIN_ID, key);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/PlatformRegistry.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/PlatformRegistry.java
deleted file mode 100644
index ad616f2..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/PlatformRegistry.java
+++ /dev/null
@@ -1,156 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-public class PlatformRegistry 
-{
-	public static final PlatformRegistry INSTANCE = new PlatformRegistry();
-	
-	private static final String EXTENSION_ID = 
-		"jpaPlatform"; //$NON-NLS-1$
-	
-	private static final String EL_PLATFORM =
-		"jpaPlatform"; //$NON-NLS-1$	
-
-	private static final String AT_ID =
-		"id"; //$NON-NLS-1$	
-
-	private static final String AT_CLASS =
-		"class"; //$NON-NLS-1$	
-		
-	// key: String jpaPlatform id  value: IConfigurationElement class descriptor
-	private Map<String, IConfigurationElement> jpaPlatforms;
-	
-	
-	/* (non Java doc)
-	 * restrict access
-	 */
-	private PlatformRegistry() {
-		buildJpaPlatforms();
-	}
-	
-	
-	private void buildJpaPlatforms() {
-		this.jpaPlatforms = new HashMap<String, IConfigurationElement>();
-		
-		for (Iterator stream = allConfigElements(); stream.hasNext(); ) {
-			buildJpaPlatform((IConfigurationElement) stream.next());
-		}
-	}
-	
-	private void buildJpaPlatform(IConfigurationElement configElement) {
-		if (! configElement.getName().equals(EL_PLATFORM)) {
-			return;
-		}
-		
-		String platformId = configElement.getAttribute(AT_ID);
-		String platformClass = configElement.getAttribute(AT_CLASS);
-		
-		if ((platformId == null) || (platformClass == null)) {
-			if (platformId == null) {
-				reportMissingAttribute(configElement, AT_ID);
-			}
-			if (platformClass == null) {
-				reportMissingAttribute(configElement, AT_CLASS);
-			}
-			return;
-		}
-		
-		if (jpaPlatforms.containsKey(platformId)) {
-			IConfigurationElement otherConfigElement = jpaPlatforms.get(platformId);
-			reportDuplicatePlatform(configElement, otherConfigElement);
-		}
-		
-		jpaPlatforms.put(platformId, configElement);
-	}
-	
-	public IJpaPlatformUi getJpaPlatform(String vendorId) {
-		IConfigurationElement registeredConfigElement = this.jpaPlatforms.get(vendorId);
-		
-		if (registeredConfigElement == null) {
-			return null;
-		}
-		
-		try {
-			return (IJpaPlatformUi) registeredConfigElement.createExecutableExtension(AT_CLASS);
-		}
-		catch (CoreException ce) {
-			reportFailedInstantiation(registeredConfigElement);
-			return null;
-		}
-	}
-	
-	private Iterator allConfigElements() {
-		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IExtensionPoint extensionPoint = 
-			registry.getExtensionPoint(JptUiPlugin.PLUGIN_ID, EXTENSION_ID);
-		IExtension[] extensions = extensionPoint.getExtensions();
-		
-		return new CompositeIterator(
-				new TransformationIterator(CollectionTools.iterator(extensions)) {
-					@Override
-					protected Object transform(Object next) {
-						return CollectionTools.iterator(((IExtension) next).getConfigurationElements());
-					}
-				}
-			);
-	}
-	
-	// TODO externalize strings
-	private void reportMissingAttribute(IConfigurationElement configElement, String attributeName) {
-		String message = 
-			"An extension element \""
-			+ configElement.getName()
-			+ "\" in plugin \""
-			+ configElement.getContributor().getName()
-			+ "\" is missing a required attribute \""
-			+ attributeName
-			+ "\".";
-		JptUiPlugin.log(message);
-	}
-	
-	// TODO externalize strings
-	private void reportDuplicatePlatform(
-			IConfigurationElement oneConfigElement, IConfigurationElement otherConfigElement) {
-		String message =
-			"The plugins \""
-			+ oneConfigElement.getContributor().getName()
-			+ "\" and \""
-			+ otherConfigElement.getContributor().getName()
-			+ "\" have registered a duplicate attribute \"id\" "
-			+ "for the extension element \"jpaVendor\".";
-		JptUiPlugin.log(message);
-	}
-		
-	// TODO externalize strings
-	private void reportFailedInstantiation(IConfigurationElement configElement) {
-		String message =
-			"Could not instantiate the class \""
-			+ configElement.getAttribute(AT_CLASS)
-			+ "\" for the extension element \""
-			+ configElement.getName()
-			+ "\" in the plugin \""
-			+ configElement.getContributor().getName()
-			+ "\".";
-		JptUiPlugin.log(message);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/AddPersistentAttributeToXmlAction.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/AddPersistentAttributeToXmlAction.java
deleted file mode 100644
index f38efd9..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/AddPersistentAttributeToXmlAction.java
+++ /dev/null
@@ -1,40 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.actions;
-
-import java.util.Iterator;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute;
-import org.eclipse.ui.actions.ActionDelegate;
-
-public class AddPersistentAttributeToXmlAction extends ActionDelegate
-{	
-	
-	private ISelection selection;
-	
-	@Override
-	public void selectionChanged(IAction action, ISelection selection) {
-		super.selectionChanged(action, selection);
-		this.selection = selection;
-	}
-	
-	@Override
-	public void run(IAction action) {
-		if (this.selection instanceof StructuredSelection) {
-			for (Iterator<XmlPersistentAttribute> i = ((StructuredSelection) selection).iterator(); i.hasNext(); ) {
-				XmlPersistentAttribute xmlPersistentAttribute = i.next();
-				xmlPersistentAttribute.setVirtual(false);
-			}
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/AddPersistentAttributeToXmlAndMapAction.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/AddPersistentAttributeToXmlAndMapAction.java
deleted file mode 100644
index d75a96d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/AddPersistentAttributeToXmlAndMapAction.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.eclipse.jpt.ui.internal.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute;
-import org.eclipse.jpt.ui.internal.dialogs.AddPersistentAttributeToXmlAndMapDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-
-public class AddPersistentAttributeToXmlAndMapAction
-	implements IObjectActionDelegate
-{
-	private Shell shell;
-	
-	private XmlPersistentAttribute unmappedXmlAttribute;
-	
-	
-	public AddPersistentAttributeToXmlAndMapAction() {
-		super();
-	}
-	
-	public void run(IAction action) {
-		AddPersistentAttributeToXmlAndMapDialog dialog = new AddPersistentAttributeToXmlAndMapDialog(shell, unmappedXmlAttribute);
-		
-		dialog.create();
-		dialog.setBlockOnOpen(true);
-		dialog.open();
-	}
-	
-	public void selectionChanged(IAction action, ISelection selection) {
-		unmappedXmlAttribute = (XmlPersistentAttribute) ((StructuredSelection) selection).getFirstElement();
-	}
-	
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-		shell = targetPart.getSite().getShell();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/AddPersistentClassAction.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/AddPersistentClassAction.java
deleted file mode 100644
index 23b4deb..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/AddPersistentClassAction.java
+++ /dev/null
@@ -1,49 +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.internal.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
-import org.eclipse.jpt.ui.internal.dialogs.AddPersistentClassDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-
-public class AddPersistentClassAction
-	implements IObjectActionDelegate
-{
-	private Shell shell;
-	
-	private EntityMappingsInternal entityMappings;
-	
-	
-	public AddPersistentClassAction() {
-		super();
-	}
-	
-	public void run(IAction action) {
-		AddPersistentClassDialog dialog = new AddPersistentClassDialog(shell, entityMappings);
-		
-		dialog.create();
-		dialog.setBlockOnOpen(true);
-		dialog.open();
-	}
-	
-	public void selectionChanged(IAction action, ISelection selection) {
-		entityMappings = (EntityMappingsInternal) ((StructuredSelection) selection).getFirstElement();
-	}
-	
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-		shell = targetPart.getSite().getShell();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/GenerateDDLAction.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/GenerateDDLAction.java
deleted file mode 100644
index ab7a410..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/GenerateDDLAction.java
+++ /dev/null
@@ -1,35 +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.internal.actions;
-
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.ui.internal.IJpaPlatformUi;
-import org.eclipse.jpt.ui.internal.PlatformRegistry;
-
-/**
- *  GenerateDDLAction
- */
-public class GenerateDDLAction extends ProjectAction {
-	
-	public GenerateDDLAction() {
-		super();
-	}
-
-	protected void execute(IJpaProject project) {
-        String vendorId = project.getPlatform().getId();
-		
-        this.jpaPlatformUI(vendorId).generateDDL(project, this.getCurrentSelection());
-	}
-	
-	private IJpaPlatformUi jpaPlatformUI(String vendorId) {
-        return PlatformRegistry.INSTANCE.getJpaPlatform(vendorId); 
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/GenerateEntitiesAction.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/GenerateEntitiesAction.java
deleted file mode 100644
index b125791..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/GenerateEntitiesAction.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.ui.internal.actions;
-
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.ui.internal.IJpaPlatformUi;
-import org.eclipse.jpt.ui.internal.PlatformRegistry;
-
-/**
- *  GenerateEntitiesAction
- */
-public class GenerateEntitiesAction extends ProjectAction {
-	public GenerateEntitiesAction() {
-		super();
-	}
-
-	protected void execute(IJpaProject project) {
-        String vendorId = project.getPlatform().getId();
-		
-        this.jpaPlatformUI(vendorId).generateEntities(project, this.getCurrentSelection());
-	}
-	
-	private IJpaPlatformUi jpaPlatformUI(String vendorId) {
-        return PlatformRegistry.INSTANCE.getJpaPlatform(vendorId); 
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/PersistentAttributeActionFilter.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/PersistentAttributeActionFilter.java
deleted file mode 100644
index 2e6396f..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/PersistentAttributeActionFilter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.eclipse.jpt.ui.internal.actions;
-
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.core.internal.IPersistentAttribute;
-import org.eclipse.ui.IActionFilter;
-
-public class PersistentAttributeActionFilter 
-	implements IActionFilter
-{
-	public static final String IS_MAPPED = "isMapped";
-	
-	
-	public boolean testAttribute(Object target, String name, String value) {
-		if (! IS_MAPPED.equals(name)) {
-			return false;
-		}
-		
-		Boolean booleanValue;
-		if ("true".equals(value)) {
-			booleanValue = true;
-		}
-		else if ("false".equals(value)) {
-			booleanValue = false;
-		}
-		else {
-			return false;
-		}
-		
-		boolean mapped = ((IPersistentAttribute) target).mappingKey() != IMappingKeys.NULL_ATTRIBUTE_MAPPING_KEY;
-		return mapped == booleanValue;
-	}
-	
-	
-	public static final class Factory
-		implements IAdapterFactory
-	{
-		private static final Class[] ADAPTER_TYPES = { IActionFilter.class };
-		
-		public Object getAdapter(final Object adaptable, final Class adapterType ) {
-			if( adapterType == IActionFilter.class ) {
-				return new PersistentAttributeActionFilter();
-			} else {
-				return null;
-			}
-		}
-	    
-		public Class[] getAdapterList() {
-			return ADAPTER_TYPES;
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/ProjectAction.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/ProjectAction.java
deleted file mode 100644
index 04e657e..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/ProjectAction.java
+++ /dev/null
@@ -1,97 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.actions;
-
-import java.util.Iterator;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.JptCorePlugin;
-import org.eclipse.ui.IActionDelegate;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-
-/**
- * Override any of the #execute() methods.
- */
-public abstract class ProjectAction implements IObjectActionDelegate {
-
-	private ISelection currentSelection;
-    
-
-	public ProjectAction() {
-		super();
-	}
-
-	/**
-	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
-	 */
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-		// do nothing
-	}
-
-	/**
-	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
-	 */
-	public void selectionChanged(IAction action, ISelection selection) {
-        this.currentSelection = selection;
-	}
-
-	protected IStructuredSelection getCurrentSelection() {
-		if (this.currentSelection instanceof IStructuredSelection) {
-			return (IStructuredSelection) this.currentSelection;
-		}
-		return null;
-	}
-	
-	/**
-	 * @see IActionDelegate#run(IAction)
-	 */
-	public void run(IAction action) {
-		if (this.currentSelection instanceof IStructuredSelection) {
-			for (Iterator stream = ((IStructuredSelection) this.currentSelection).iterator(); stream.hasNext(); ) {
-				this.execute(stream.next());
-			}
-		}
-	}
-
-	protected void execute(Object selection) {
-		IProject project = this.projectFromSelection(selection);
-		if (project != null) {
-			this.execute(project);
-		}
-	}
-
-	protected IProject projectFromSelection(Object selection) {
-		if (selection instanceof IProject) {
-			return (IProject) selection;
-		}
-		if (selection instanceof IJavaProject) {
-			return ((IJavaProject) selection).getProject();
-		}
-		return null;
-	}
-
-	protected void execute(IProject project) {
-		IJpaProject jpaProject = JptCorePlugin.getJpaProject(project);
-		if (jpaProject == null) {
-			return;
-		}
-		this.execute(jpaProject);
-	}
-
-	protected void execute(IJpaProject project) {
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/RemovePersistentAttributeFromXmlAction.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/RemovePersistentAttributeFromXmlAction.java
deleted file mode 100644
index 326949e..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/RemovePersistentAttributeFromXmlAction.java
+++ /dev/null
@@ -1,42 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.actions;
-
-import java.util.Iterator;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentType;
-import org.eclipse.jpt.core.internal.content.orm.XmlTypeMapping;
-import org.eclipse.ui.actions.ActionDelegate;
-
-public class RemovePersistentAttributeFromXmlAction extends ActionDelegate
-{	
-	private ISelection selection;
-	
-	@Override
-	public void selectionChanged(IAction action, ISelection selection) {
-		super.selectionChanged(action, selection);
-		this.selection = selection;
-	}
-	
-	@Override
-	public void run(IAction action) {
-		if (this.selection instanceof StructuredSelection) {
-			for (Iterator<XmlPersistentAttribute> i = ((StructuredSelection) selection).iterator(); i.hasNext(); ) {
-				XmlPersistentAttribute xmlPersistentAttribute = i.next();
-				XmlPersistentType xmlPersistentType = ((XmlTypeMapping) xmlPersistentAttribute.typeMapping()).getPersistentType();
-				xmlPersistentType.getSpecifiedAttributeMappings().remove(xmlPersistentAttribute.getMapping());
-			}
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/RemovePersistentClassAction.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/RemovePersistentClassAction.java
deleted file mode 100644
index 3d8a55a..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/RemovePersistentClassAction.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.ui.internal.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentType;
-import org.eclipse.jpt.core.internal.content.orm.XmlTypeMapping;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-
-public class RemovePersistentClassAction
-	implements IObjectActionDelegate
-{
-	private XmlPersistentType persistentClass;
-	
-	
-	public RemovePersistentClassAction() {
-		super();
-	}
-	
-	public void run(IAction action) {
-		XmlTypeMapping mapping = persistentClass.getMapping();
-		((EntityMappingsInternal) mapping.getEntityMappings()).getTypeMappings().remove(mapping);
-	}
-	
-	public void selectionChanged(IAction action, ISelection selection) {
-		persistentClass = (XmlPersistentType) ((StructuredSelection) selection).getFirstElement();
-	}
-	
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-		// do nothing
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/SynchronizeClassesAction.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/SynchronizeClassesAction.java
deleted file mode 100644
index 3b4db8e..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/SynchronizeClassesAction.java
+++ /dev/null
@@ -1,39 +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.internal.actions;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.synch.SynchronizeClassesJob;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-
-public class SynchronizeClassesAction 
-	implements IObjectActionDelegate 
-{
-	private IFile file;
-	
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-		// no-op for now
-	}
-
-	public void run(IAction action) {
-		SynchronizeClassesJob job = new SynchronizeClassesJob(file);
-		job.schedule();
-	}
-
-	public void selectionChanged(IAction action, ISelection selection) {
-		// only one element in actual selection
-		file = (IFile) ((StructuredSelection) selection).getFirstElement();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/XmlPersistentAttributeActionFilter.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/XmlPersistentAttributeActionFilter.java
deleted file mode 100644
index e5f57a9..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/actions/XmlPersistentAttributeActionFilter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.eclipse.jpt.ui.internal.actions;
-
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute;
-import org.eclipse.ui.IActionFilter;
-
-public class XmlPersistentAttributeActionFilter 
-	extends PersistentAttributeActionFilter
-{
-	public static final String IS_VIRTUAL = "isVirtual";
-	
-	
-	public boolean testAttribute(Object target, String name, String value) {
-		if (! IS_VIRTUAL.equals(name)) {
-			return super.testAttribute(target, name, value);
-		}
-		
-		Boolean booleanValue;
-		if ("true".equals(value)) {
-			booleanValue = true;
-		}
-		else if ("false".equals(value)) {
-			booleanValue = false;
-		}
-		else {
-			return false;
-		}
-		return ((XmlPersistentAttribute) target).isVirtual() == booleanValue;
-	}
-	
-	
-	public static final class Factory
-		implements IAdapterFactory
-	{
-		private static final Class[] ADAPTER_TYPES = { IActionFilter.class };
-		
-		public Object getAdapter(final Object adaptable, final Class adapterType ) {
-			if( adapterType == IActionFilter.class ) {
-				return new XmlPersistentAttributeActionFilter();
-			} else {
-				return null;
-			}
-		}
-	    
-		public Class[] getAdapterList() {
-			return ADAPTER_TYPES;
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/BaseJpaComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/BaseJpaComposite.java
deleted file mode 100644
index 6c3ff8b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/BaseJpaComposite.java
+++ /dev/null
@@ -1,47 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public abstract class BaseJpaComposite extends BaseJpaController
-	implements IJpaComposite
-{
-	private Composite composite;
-	
-	public BaseJpaComposite(Composite parent, int style, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, style, theCommandStack, widgetFactory);
-	}
-	
-	public BaseJpaComposite(Composite parent, CommandStack theCommandStack,TabbedPropertySheetWidgetFactory widgetFactory) {
-		this(parent, SWT.NULL, theCommandStack, widgetFactory);
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent, int style) {
-		super.buildWidget(parent);
-		this.composite = createComposite(parent, style);
-		initializeLayout(this.composite);
-	}
-	
-	protected Composite createComposite(Composite parent, int style) {
-		return this.widgetFactory.createComposite(parent, style);
-	}
-	
-	protected abstract void initializeLayout(Composite composite);
-
-	public Control getControl() {
-		return this.composite;
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/BaseJpaController.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/BaseJpaController.java
deleted file mode 100644
index e4401eb..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/BaseJpaController.java
+++ /dev/null
@@ -1,108 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public abstract class BaseJpaController 
-{
-	protected CommandStack commandStack;
-	
-	protected TabbedPropertySheetWidgetFactory widgetFactory;
-
-	//put in the populating flag to stop the circular population of the entity name combo
-	//populateEntityNameCombo is calling select() which causes entityNameComboModified() to be called
-	//this sets the name in the model which starts the circle over again. We should probably
-	//short-circuit this differently, like in the emf model, keep the property change from being fired if 
-	//a change did not actually occur - KFM
-	private boolean populating;
-	
-	
-	public BaseJpaController(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super();
-		this.widgetFactory = widgetFactory;
-		buildWidget(parent);
-		this.commandStack = theCommandStack;
-	}
-	
-	public BaseJpaController(Composite parent, int style, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super();
-		this.widgetFactory = widgetFactory;
-		buildWidget(parent, style);
-		this.commandStack = theCommandStack;
-	}
-	
-	
-	/**
-	 * Override this method if using the constructor without the style bit
-	 */
-	protected void buildWidget(Composite parent) {
-		// no op
-	}
-	
-	/**
-	 * Override this method if using the constructor with the style bit
-	 */
-	protected void buildWidget(Composite parent, int style) {
-		// no op
-	}
-	
-	/**
-	 * This method is called from outside when setting the object of interest
-	 */
-	public final void populate(EObject obj) {
-		if (getControl().isDisposed()) {
-			return;
-		}
-		this.populating = true;
-		disengageListeners();
-		doPopulate(obj);
-		engageListeners();
-		this.populating = false;
-	}
-	
-	/**
-	 * This method is called (perhaps internally) when this needs to repopulate 
-	 * but the object of interest has not changed
-	 */
-	public final void populate() {
-		if (getControl().isDisposed()) {
-			return;
-		}
-		this.populating = true;
-		doPopulate();
-		this.populating = false;
-	}
-	
-	protected abstract void doPopulate(EObject obj);
-	
-	protected abstract void doPopulate();
-	
-	protected abstract void engageListeners();
-	
-	protected abstract void disengageListeners();
-	
-	protected boolean isPopulating() {
-		return this.populating;
-	}
-	
-	public TabbedPropertySheetWidgetFactory getWidgetFactory() {
-		return this.widgetFactory;
-	}
-	
-	public void dispose() {
-		disengageListeners();
-	}
-	
-	public abstract Control getControl();
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/BaseJpaDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/BaseJpaDetailsPage.java
deleted file mode 100644
index d57e13f..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/BaseJpaDetailsPage.java
+++ /dev/null
@@ -1,63 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.forms.widgets.ScrolledForm;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public abstract class BaseJpaDetailsPage extends BaseJpaComposite 
-	implements IJpaDetailsPage 
-{
-	private Composite control;
-
-	public BaseJpaDetailsPage(
-			Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-	}
-
-	public BaseJpaDetailsPage(
-			Composite parent, int style, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, style, theCommandStack, widgetFactory);
-	}
-	
-	@Override
-	//using this to get a Scroll bar on the JpaDetailsView
-	protected Composite createComposite(Composite parent, int style) {
-		ScrolledForm scrolledForm = this.widgetFactory.createScrolledForm(parent);
-		//Nesting another composite because combos on the ScrolledForm didn't have a border
-		scrolledForm.getBody().setLayout(new FillLayout());
-		Composite composite = super.createComposite(scrolledForm.getBody(), style);
-		this.control = scrolledForm;
-		return composite;
-	}
-
-	public final void populate(IJpaContentNode contentNode) {
-		super.populate(contentNode);
-	}
-	
-	@Override
-	protected final void doPopulate(EObject obj) {
-		doPopulate((IJpaContentNode) obj);
-	}
-	
-	protected abstract void doPopulate(IJpaContentNode contentNode);
-	
-	
-	@Override
-	public Control getControl() {
-		return this.control;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/IJpaComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/IJpaComposite.java
deleted file mode 100644
index bd09fed..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/IJpaComposite.java
+++ /dev/null
@@ -1,22 +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.ui.internal.details;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.swt.widgets.Control;
-
-
-public interface IJpaComposite<E extends EObject> {
-
-	void populate(E model);
-	
-	Control getControl();
-	
-	void dispose();
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/IJpaDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/IJpaDetailsPage.java
deleted file mode 100644
index ae78d2f..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/IJpaDetailsPage.java
+++ /dev/null
@@ -1,28 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.details;
-
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.swt.widgets.Control;
-
-public interface IJpaDetailsPage
-{
-	Control getControl();
-
-	/**
-	 * Set the content for the page and populate widgets
-	 */
-	void populate(IJpaContentNode contentNode);
-	
-	
-	/**
-	 * Perform any other disposal needed
-	 */
-	void dispose();
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/IJpaDetailsProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/IJpaDetailsProvider.java
deleted file mode 100644
index aab2f6f..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/IJpaDetailsProvider.java
+++ /dev/null
@@ -1,27 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.details;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public interface IJpaDetailsProvider 
-{
-
-	String fileContentType();
-	
-	/**
-	 * Build a properties page given the parent Composite and the
-	 * content node id.
-	 * It is legal to set the layout for the given Composite.
-	 */
-	IJpaDetailsPage buildDetailsPage(Composite parentComposite, Object contentNodeId, TabbedPropertySheetWidgetFactory widgetFactory);
-	
-	void dispose();
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PageBookManager.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PageBookManager.java
deleted file mode 100644
index 80c583b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PageBookManager.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Versant. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: Versant. - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.details;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.part.PageBook;
-
-/**
- * A wrapper for a <code>PageBook</code> with convenience methods.
- */
-public class PageBookManager extends PageBook {
-
-	private Map pageRecords;
-	private Object active;
-	private PageBook pageBook;
-	private Composite defaultComposite;
-	
-	/**
-	 * A <code>PageBookManager<code> is a wrapper for a <code>PageBook</code>. It provides
-	 * convenience methods to add, remove, activate and inactive pages in the internal <code>PageBook</code>.
-	 * If a page gets deactivated, the manager activates a default page.
-	 * 
-	 * @param parent The parent composite to this manager
-	 * @param aDefaultLabel The label on the the default page.
-	 */
-	public PageBookManager(Composite parent, String aDefaultLabel) {
-		super(parent, SWT.NULL);
-		this.setLayout(new FillLayout());
-		this.pageRecords = new HashMap();
-		this.pageBook = new PageBook(this, SWT.NONE);
-		this.defaultComposite = new DefaultComposite(pageBook, aDefaultLabel);
-		this.pageBook.showPage(this.defaultComposite);
-	}
-
-	/**
-	 * @param anObj Activates (flips to top in the <code>PageBook</code>) the associated <code>Composite</code> 
-	 * for the given <code>Object</code>. Activates the <code>DefaultComposite</code> if there is no association
-	 * for the given <code>Object</code>.
-	 * @return Return false if there is no <code>Composite</code> association to the given <code>Object</code> or
-	 * the associated <code>Composite</code> is already active.
-	 */
-	public boolean activate(Object anObj) {
-		if(anObj != null && !anObj.equals(this.active) && this.pageRecords.containsKey(anObj)) {
-			Composite composite = (Composite) this.pageRecords.get(anObj);
-			this.pageBook.showPage(composite);
-			this.active = anObj;
-			return true;
-		} else if((anObj == null || !anObj.equals(this.active)) && !this.pageRecords.containsKey(anObj)) {
-			this.pageBook.showPage(this.defaultComposite);
-			this.active = null;
-		}
-		return false;
-	}
-	
-	/**
-	 * @param anObj
-	 * @return Returns true if the associated <code>Composite</code> has been deactivated.
-	 * Returns false if there is no <code>Composite</code> for the given <code>Object</code>
-	 * or the <code>Composite</code> is already inactive.
-	 */
-	public boolean deactivate(Object anObj) {
-		if(anObj.equals(this.active)) {
-			this.pageBook.showPage(this.defaultComposite);
-			this.active = null;
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	/**
-     * Associates the specified <code>Object</code> with the specified <code>Composite</code>
-     * in this <code>PageBookManager</code>.
-     * If this manager previously contained a mapping for the <code>Object</code>, the old
-     * <code>Composite</code> is replaced by the specified <code>Composite</code>.
-     * 
-	 * @param anObj <code>Object</code> with which the specified <code>Composite</code> is to be associated.
-	 * @param aComposite <code>Composite</code> to be associated with the specified <code>Object</code>.
-	 * 
-     * @return previous <code>Composite</code> associated with specified <code>Object</code>,
-     * 		   or <tt>null</tt> if there was no mapping for <code>Object</code>.
-	 */
-	public Composite put(Object anObj, Composite aComposite) {
-		Composite composite = (Composite) this.pageRecords.put(anObj, aComposite);
-		this.activate(anObj);
-		return composite;
-	}
-	
-    /**
-     * Removes the mapping for this <code>Object</code> from this pagebookmanager if it is present.
-     *
-     * @param anObj <code>Object</code> whose mapping is to be removed from this <code>PageBookManager</code>.
-     * @return previous <code>Composite</code> associated with specified <code>Object</code>.
-     */
-	public Composite remove(Object anObj) {
-		if(anObj.equals(this.active)) {
-			this.active = null;
-			this.pageBook.showPage(this.defaultComposite);
-		}	
-		return (Composite) this.pageRecords.remove(anObj);
-	}
-
-	/**
-	 * @param anObj whose presence in this map is to be tested
-	 * @return true if this <code>PageBookManager</code> contains a mapping for the
-	 * 		   given <code>Object</code>. False otherwise.
-	 */
-	public boolean contains(Object anObj) {
-		return this.pageRecords.containsKey(anObj);
-	}
-	
-	public Composite get(Object key) {
-		return (Composite) pageRecords.get(key);
-	}
-
-	/**
-	 * @return The currently active composite
-	 */
-	public Composite getActive() {
-		if(this.active == null) {
-			return this.defaultComposite;
-		} else {
-			return (Composite) this.pageRecords.get(this.active);
-		}
-	}
-
-	/**
-	 * @return The internal <code>PageBook</code> of this <code>PageBookManager</code>. 
-	 * <code>Composite</code>s which should work with this manager needs to be created
-	 * with this <code>Composite</code> as their parent composite.
-	 */
-	public Composite getComposite() {
-		return this.pageBook;
-	}
-
-	// a default composite which is show if the active composite
-	// gets deactivated
-	private class DefaultComposite extends Composite {
-		public DefaultComposite(Composite aParent, String aDefaultLabel) {
-			super(aParent, SWT.NONE);
-			setLayout(new FillLayout(SWT.VERTICAL));
-			Label label = new Label(this, SWT.LEFT);
-			label.setText(aDefaultLabel);
-		}
-	}
-	
-	public void dispose() {
-		super.dispose();
-		Collection composites = this.pageRecords.values();
-		for (Iterator i = composites.iterator(); i.hasNext(); ) {
-			((Composite) i.next()).dispose();
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java
deleted file mode 100644
index fb2a312..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java
+++ /dev/null
@@ -1,397 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.details;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jpt.core.internal.IAttributeMapping;
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.jpt.core.internal.IPersistentAttribute;
-import org.eclipse.jpt.core.internal.JpaCorePackage;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.BasicMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.DefaultBasicMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.DefaultEmbeddedMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedIdMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.IdMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToManyMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToOneMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.NullAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToManyMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToOneMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.TransientMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.VersionMappingUiProvider;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.part.PageBook;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage 
-{
-	private IPersistentAttribute attribute;
-	private IAttributeMapping attributeMapping;
-	private Adapter persistentAttributeListener;
-	private Adapter attributeMappingListener;
-	
-	private String currentMappingKey;
-	
-	private CComboViewer mappingCombo;
-	
-	private Map<String, IJpaComposite<IAttributeMapping>> mappingComposites;
-	protected PageBook mappingPageBook;	
-	private IJpaComposite<IAttributeMapping> currentMappingComposite;
-	
-	/**
-	 * These IAtttributeMappingUiProviders will be used as elements in the attributeMapping combo
-	 * The first element in the combo will be one of the defaultAttributemappingUiProviders or
-	 * if none of those apply the nullAttriubteMappingUiProvider will be used. The rest of the elements
-	 * will be the attributeMappingUiProviders.  The defaultAttributeMappingUiProvider is
-	 * determined by matching its key with the key of the current attriubteMapping.  
-	 */
-	private Collection<IAttributeMappingUiProvider> attributeMappingUiProviders;
-	private Collection<IAttributeMappingUiProvider> defaultAttributeMappingUiProviders;
-	private IAttributeMappingUiProvider nullAttributeMappingUiProvider;
-	
-	public PersistentAttributeDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NONE, new BasicCommandStack(), widgetFactory);
-		persistentAttributeListener = buildAttributeListener();
-		attributeMappingListener = buildAttributeMappingListener();
-		mappingComposites = new HashMap<String, IJpaComposite<IAttributeMapping>>();
-		this.attributeMappingUiProviders = buildAttributeMappingUiProviders();
-		this.defaultAttributeMappingUiProviders = buildDefaultAttributeMappingUiProviders();
-		this.nullAttributeMappingUiProvider = buildNullAttributeMappingUiProvider();
-	}
-	
-	protected IAttributeMappingUiProvider buildNullAttributeMappingUiProvider() {
-		return NullAttributeMappingUiProvider.instance();
-	}
-	
-	protected Collection<IAttributeMappingUiProvider> buildAttributeMappingUiProviders() {
-		Collection<IAttributeMappingUiProvider> providers = new ArrayList<IAttributeMappingUiProvider>();
-		providers.add(BasicMappingUiProvider.instance());
-		providers.add(EmbeddedMappingUiProvider.instance());
-		providers.add(EmbeddedIdMappingUiProvider.instance());
-		providers.add(IdMappingUiProvider.instance());			
-		providers.add(ManyToManyMappingUiProvider.instance());			
-		providers.add(ManyToOneMappingUiProvider.instance());			
-		providers.add(OneToManyMappingUiProvider.instance());			
-		providers.add(OneToOneMappingUiProvider.instance());
-		providers.add(TransientMappingUiProvider.instance());
-		providers.add(VersionMappingUiProvider.instance());
-		return providers;
-	}
-	
-	protected  Collection<IAttributeMappingUiProvider> attributeMappingUiProviders() {
-		return this.attributeMappingUiProviders;
-	}
-	
-	protected Collection<IAttributeMappingUiProvider> buildDefaultAttributeMappingUiProviders() {
-		Collection<IAttributeMappingUiProvider> providers = new ArrayList<IAttributeMappingUiProvider>();
-		providers.add(DefaultBasicMappingUiProvider.instance());		
-		providers.add(DefaultEmbeddedMappingUiProvider.instance());		
-		return providers;
-	}
-	
-	protected  Collection<IAttributeMappingUiProvider> defaultAttributeMappingUiProviders() {
-		return this.defaultAttributeMappingUiProviders;
-	}
-	
-	private IAttributeMappingUiProvider attributeMappingUiProvider(String key) {
-		for (IAttributeMappingUiProvider provider : attributeMappingUiProviders()) {
-			if (provider.key() == key) {
-				return provider;
-			}
-		}
-		return this.nullAttributeMappingUiProvider;
-	}
-	private IAttributeMappingUiProvider defaultAttributeMappingUiProvider(String key) {
-		for (IAttributeMappingUiProvider provider : defaultAttributeMappingUiProviders()) {
-			if (provider.key() == key) {
-				return provider;
-			}
-		}
-		return this.nullAttributeMappingUiProvider;
-	}
-	
-	private Adapter buildAttributeListener() {
-		return new AdapterImpl() {
-			@Override
-			public void notifyChanged(Notification notification) {
-				persistentAttributeChanged(notification);
-			}
-		};
-	}
-	
-	void persistentAttributeChanged(Notification notification) {
-		switch (notification.getFeatureID(IPersistentAttribute.class)) {
-			case JpaCorePackage.IPERSISTENT_ATTRIBUTE__MAPPING:
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							populate();
-						}
-					});
-				break;
-		}
-	}
-	
-	private Adapter buildAttributeMappingListener() {
-		return new AdapterImpl() {
-			@Override
-			public void notifyChanged(Notification notification) {
-				attributeMappingChanged(notification);
-			}
-		};
-	}
-	
-	void attributeMappingChanged(Notification notification) {
-//		switch (notification.getFeatureID(IAttributeMapping.class)) {
-//			case JpaCorePackage.IATTRIBUTE_MAPPING__DEFAULT:
-//				Display.getDefault().asyncExec(
-//					new Runnable() {
-//						public void run() {
-//							populate();
-//						}
-//					});
-//				break;
-//		}
-	}
-		
-	protected Label buildMappingLabel(Composite parent) {
-		return getWidgetFactory().createLabel(parent, JptUiMessages.PersistentAttributePage_mapAs);
-	}
-	
-	protected CComboViewer buildMappingCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent);
-		mappingCombo = new CComboViewer(combo);
-		mappingCombo.setContentProvider(buildContentProvider());
-		mappingCombo.setLabelProvider(buildLabelProvider());
-		mappingCombo.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				mappingChanged(event);
-			}
-		});
-		return mappingCombo;
-	}
-
-	private IContentProvider buildContentProvider() {
-		return new IStructuredContentProvider() {
-			public void dispose() {
-				// do nothing
-			}
-			
-			public Object[] getElements(Object inputElement) {
-				if (inputElement == null) {
-					return new Object[]{};
-				}
-				return uiProvidersFor((IPersistentAttribute) inputElement);
-			}
-			
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-				// do nothing
-			}
-		};
-	}
-	
-	protected IAttributeMappingUiProvider[] uiProvidersFor(IPersistentAttribute persistentAttribute) {
-		IAttributeMappingUiProvider[] providers = new IAttributeMappingUiProvider[attributeMappingUiProviders().size() +1];
-		providers[0] =  this.nullAttributeMappingUiProvider;
-		for (IAttributeMappingUiProvider uiProvider : defaultAttributeMappingUiProviders()) {
-			if (uiProvider.key() == persistentAttribute.defaultMappingKey()) {
-				providers[0] = uiProvider;
-				break;
-			}
-		}
-		int i = 1;
-		for (IAttributeMappingUiProvider uiProvider : attributeMappingUiProviders()) {
-			providers[i++] = uiProvider;
-		}
-		return providers;
-	}
-
-	private IBaseLabelProvider buildLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				return ((IAttributeMappingUiProvider) element).label();
-			}
-		};
-	}
-	
-	protected PageBook buildMappingPageBook(Composite parent) {
-		mappingPageBook = new PageBook(parent, SWT.NONE);
-		return mappingPageBook;
-	}
-	
-	protected IJpaComposite<IAttributeMapping> buildMappingComposite(PageBook pageBook, String key) {
-		if (this.attributeMapping == null || this.attributeMapping.isDefault()) {
-			return defaultAttributeMappingUiProvider(key).buildAttributeMappingComposite(pageBook, this.commandStack, getWidgetFactory());
-		}
-
-		return attributeMappingUiProvider(key).buildAttributeMappingComposite(pageBook, this.commandStack, getWidgetFactory());
-	}
-		
-	void mappingChanged(SelectionChangedEvent event) {
-		if (isPopulating()) {
-			return;
-		}
-		if (event.getSelection() instanceof StructuredSelection) {
-			IAttributeMappingUiProvider provider = (IAttributeMappingUiProvider) ((StructuredSelection) event.getSelection()).getFirstElement();
-			String key = (this.defaultAttributeMappingUiProviders().contains(provider) ? null : provider.key());
-			attribute.setSpecifiedMappingKey(key);
-		}
-	}
-	
-	@Override
-	protected void doPopulate(IJpaContentNode persistentAttributeNode) {
-		attribute = (IPersistentAttribute) persistentAttributeNode;
-		populateMappingComboAndPage();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateMappingComboAndPage();
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (attribute != null) {
-			attribute.eAdapters().add(persistentAttributeListener);
-			if (attributeMapping != null) {
-				attributeMapping.eAdapters().add(attributeMappingListener);
-			}
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (attribute != null) {
-			attribute.eAdapters().remove(persistentAttributeListener);
-			if (attributeMapping != null) {
-				attributeMapping.eAdapters().remove(attributeMappingListener);
-			}
-		}
-	}
-	
-	private void populateMappingComboAndPage() {
-		if (attribute == null) {
-			attributeMapping = null;
-			currentMappingKey = null;
-			mappingCombo.setInput(null);
-			mappingCombo.setSelection(StructuredSelection.EMPTY);
-			
-			if (currentMappingComposite != null) {
-				currentMappingComposite.populate(null);
-				currentMappingComposite = null;
-			}
-			
-			return;
-		}
-		attributeMapping = attribute.getMapping();
-		setComboData(attribute.candidateMappingKeys());
-		
-		populateMappingPage(attributeMapping == null ? null : attributeMapping.getKey());
-	}
-	
-	private void populateMappingPage(String mappingKey) {
-		if (currentMappingComposite != null) {
-			if (mappingKey == currentMappingKey) {
-				if (currentMappingComposite != null) {
-					currentMappingComposite.populate(attributeMapping);
-					return;
-				}
-			}
-			else {
-				currentMappingComposite.populate(null);
-				// don't return
-			}
-		}
-		
-		currentMappingKey = mappingKey;
-		
-		IJpaComposite<IAttributeMapping> composite = mappingCompositeFor(mappingKey);
-		mappingPageBook.showPage(composite.getControl());
-		
-		currentMappingComposite = composite;
-		currentMappingComposite.populate(attributeMapping);
-	}
-	
-	private void setComboData(Iterator<String> availableMappingKeys) {
-		if (attribute != mappingCombo.getInput()) {
-			mappingCombo.setInput(attribute);
-		}
-		if (attributeMapping == null || attributeMapping.isDefault()) {
-			mappingCombo.setSelection(new StructuredSelection(mappingCombo.getElementAt(0)));
-		}
-		else {
-			IAttributeMappingUiProvider provider = attributeMappingUiProvider(attribute.mappingKey());
-			if (provider != null && ! provider.equals(((StructuredSelection) mappingCombo.getSelection()).getFirstElement())) {
-				mappingCombo.setSelection(new StructuredSelection(provider));
-			}
-		}
-	}
-	
-	private IJpaComposite<IAttributeMapping> mappingCompositeFor(String key) {
-		IJpaComposite<IAttributeMapping> composite = mappingComposites.get(key);
-		if (composite != null) {
-			return composite;
-		}
-		
-		composite = buildMappingComposite(mappingPageBook, key);
-		
-		if (composite != null) {
-			mappingComposites.put(key, composite);
-		}
-		
-		return composite;
-	}
-		
-//TODO focus??
-//	public boolean setFocus() {
-//		super.setFocus();
-//		return mappingCombo.getCombo().setFocus();
-//	}
-	
-	@Override
-	public void dispose() {
-		disengageListeners();
-		for (Iterator<IJpaComposite<IAttributeMapping>> stream = mappingComposites.values().iterator(); stream.hasNext(); ) {
-			stream.next().dispose();
-		}
-		super.dispose();
-	}
-	
-	public IPersistentAttribute getAttribute() {
-		return attribute;
-	}
-	
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentTypeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentTypeDetailsPage.java
deleted file mode 100644
index bd8353b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentTypeDetailsPage.java
+++ /dev/null
@@ -1,292 +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.ui.internal.details;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.IPersistentType;
-import org.eclipse.jpt.core.internal.JpaCorePackage;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddableUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EntityUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.MappedSuperclassUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.NullTypeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.part.PageBook;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public abstract class PersistentTypeDetailsPage extends BaseJpaDetailsPage 
-{	
-	private IPersistentType persistentType;
-	private Adapter persistentTypeListener;
-	
-	private String currentMappingKey;
-	
-	private CComboViewer typeMappingCombo;
-	
-	/**
-	 * A Map of mapping Composites of type IPersistenceComposite that is keyed on IConfigurationElement
-	 */
-	private Map composites;
-	
-	protected PageBook typeMappingPageBook;
-	
-	private IJpaComposite visibleMappingComposite;
-	
-	private Collection<ITypeMappingUiProvider> typeMappingUiProviders;
-	
-	public PersistentTypeDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NONE, new BasicCommandStack(), widgetFactory);
-		this.persistentTypeListener = buildPersistentTypeListener();
-		this.composites = new HashMap();
-		this.typeMappingUiProviders = buildTypeMappingUiProviders();
-	}
-	
-	protected Collection<ITypeMappingUiProvider> buildTypeMappingUiProviders() {
-		Collection<ITypeMappingUiProvider> typeMappingUiProviders = new ArrayList<ITypeMappingUiProvider>();
-		typeMappingUiProviders.add(new NullTypeMappingUiProvider());
-		typeMappingUiProviders.add(new EntityUiProvider());
-		typeMappingUiProviders.add(new MappedSuperclassUiProvider());			
-		typeMappingUiProviders.add(new EmbeddableUiProvider());			
-		return typeMappingUiProviders;
-	}
-	
-	private Adapter buildPersistentTypeListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				persistentTypeChanged(notification);
-			}
-		};
-	}
-	
-	private void persistentTypeChanged(Notification notification) {
-		switch (notification.getFeatureID(IPersistentType.class)) {
-			case JpaCorePackage.IPERSISTENT_TYPE__MAPPING_KEY:
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							populate();
-						}
-					});
-				break;
-		}
-	}
-
-	protected Label buildTypeMappingLabel(Composite parent) {
-		return getWidgetFactory().createLabel(parent, JptUiMessages.PersistentTypePage_mapAs);
-	}
-	
-	protected CComboViewer buildTypeMappingCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent);
-		typeMappingCombo = new CComboViewer(combo);
-		typeMappingCombo.setContentProvider(buildContentProvider());
-		typeMappingCombo.setLabelProvider(buildLabelProvider());
-		typeMappingCombo.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				typeMappingChanged(event);
-			}
-		});
-		return typeMappingCombo;
-	}
-	
-	private IContentProvider buildContentProvider() {
-		return new IStructuredContentProvider() {
-			public void dispose() {
-				// do nothing
-			}
-			
-			public Object[] getElements(Object inputElement) {
-				return (persistentType == null) ?
-						new String[] {}:
-						PersistentTypeDetailsPage.this.typeMappingUiProviders.toArray();
-			}
-			
-			public void inputChanged(
-					Viewer viewer, Object oldInput, Object newInput) {
-				// do nothing
-			}
-		};
-	}
-	private IBaseLabelProvider buildLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				return ((ITypeMappingUiProvider) element).label();
-			}
-		};
-	}
-	
-	protected PageBook buildTypeMappingPageBook(Composite parent) {
-		typeMappingPageBook = new PageBook(parent, SWT.NONE);
-		return typeMappingPageBook;
-	}
-		
-	private IJpaProject getJpaProject() {
-		return getPersistentType().getJpaProject();
-	}
-
-	private ITypeMappingUiProvider typeMappingUiProvider(String key) {
-		for (ITypeMappingUiProvider provider : this.typeMappingUiProviders) {
-			if (provider.key() == key) {
-				return provider;
-			}
-		}
-		throw new IllegalArgumentException("unsupported type mapping UI provider key: " + key);
-	}
-	
-	private void typeMappingChanged(SelectionChangedEvent event) {
-		if (isPopulating()) {
-			return;
-		}
-		if (event.getSelection() instanceof StructuredSelection) {
-			ITypeMappingUiProvider provider = (ITypeMappingUiProvider) ((StructuredSelection) event.getSelection()).getFirstElement();
-			persistentType.setMappingKey(provider.key());
-		}
-	}
-	
-	@Override
-	protected void doPopulate(IJpaContentNode persistentTypeNode) {
-		persistentType = (IPersistentType) persistentTypeNode;
-		populateMappingComboAndPage();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateMappingComboAndPage();
-	}
-	
-	protected void engageListeners() {
-		if (persistentType != null) {
-			persistentType.eAdapters().add(persistentTypeListener);
-		}
-	}
-	
-	protected void disengageListeners() {
-		if (persistentType != null) {
-			persistentType.eAdapters().remove(persistentTypeListener);
-		}
-	}
-	
-	private void populateMappingComboAndPage() {
-		if (persistentType == null) {
-			currentMappingKey = null;
-			typeMappingCombo.setInput(null);
-			typeMappingCombo.setSelection(StructuredSelection.EMPTY);
-			
-			if (visibleMappingComposite != null) {
-				visibleMappingComposite.populate(null);
-				visibleMappingComposite = null;
-			}
-			
-			return;
-		}
-		
-		String mappingKey = persistentType.getMapping().getKey();
-		setComboData(mappingKey, persistentType.candidateMappingKeys());
-		
-		populateMappingPage(mappingKey);
-	}
-	
-	private void populateMappingPage(String mappingKey) {
-		if (visibleMappingComposite != null) {
-			if (mappingKey  == currentMappingKey) {
-				if (visibleMappingComposite != null) {
-					visibleMappingComposite.populate(persistentType.getMapping());
-					return;
-				}
-			}
-			else {
-				visibleMappingComposite.populate(null);
-				// don't return
-			}
-		}
-		
-		currentMappingKey = mappingKey;
-		
-		IJpaComposite mappingComposite = mappingCompositeFor(mappingKey);
-		typeMappingPageBook.showPage(mappingComposite.getControl());
-		
-		visibleMappingComposite = mappingComposite;
-		visibleMappingComposite.populate(persistentType.getMapping());
-	}
-	
-	private void setComboData(String mappingKey, Iterator availableMappingKeys) {
-		if (persistentType != typeMappingCombo.getInput()) {
-			typeMappingCombo.setInput(persistentType);
-		}
-		
-		ITypeMappingUiProvider provider = typeMappingUiProvider(mappingKey);
-		if (! provider.equals(((StructuredSelection) typeMappingCombo.getSelection()).getFirstElement())) {
-			typeMappingCombo.setSelection(new StructuredSelection(provider));
-		}
-	}
-	
-	private IJpaComposite mappingCompositeFor(String key) {
-		IJpaComposite mappingComposite = (IJpaComposite) composites.get(key);
-		if (mappingComposite != null) {
-			return mappingComposite;
-		}
-		
-		mappingComposite = buildMappingComposite(typeMappingPageBook, key);
-		
-		if (mappingComposite != null) {
-			composites.put(key, mappingComposite);
-		}
-		
-		return mappingComposite;
-	}
-	
-	protected IJpaComposite buildMappingComposite(PageBook pageBook, String key)  {
-		//TODO what about null composite?
-		return typeMappingUiProvider(key).buildPersistentTypeMappingComposite(pageBook, this.commandStack, getWidgetFactory());
-//		return new NullComposite(pageBook, commandStack);
-	}
-
-//TODO focus??
-//	public boolean setFocus() {
-//		super.setFocus();
-//		return typeMappingCombo.getCombo().setFocus();
-//	}
-	
-	public void dispose() {
-		disengageListeners();
-		for (Iterator i = composites.values().iterator(); i.hasNext(); ) {
-			((IJpaComposite) i.next()).dispose();
-		}
-		super.dispose();
-	}
-	
-	public IPersistentType getPersistentType() {
-		return persistentType;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/dialogs/AddPersistentAttributeToXmlAndMapDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/dialogs/AddPersistentAttributeToXmlAndMapDialog.java
deleted file mode 100644
index 21c7550..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/dialogs/AddPersistentAttributeToXmlAndMapDialog.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package org.eclipse.jpt.ui.internal.dialogs;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.StatusDialog;
-import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.BasicMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedIdMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.IdMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToManyMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToOneMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToManyMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToOneMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.TransientMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.VersionMappingUiProvider;
-import org.eclipse.swt.SWT;
-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.Shell;
-import org.eclipse.swt.widgets.Text;
-
-public class AddPersistentAttributeToXmlAndMapDialog extends StatusDialog
-{
-	private XmlPersistentAttribute unmappedPersistentAttribute;
-	
-	private Label attributeLabel;
-		
-	private Text attributeText;
-	
-	private Label mappingLabel;
-	
-	private ComboViewer mappingCombo;
-		
-	
-	public AddPersistentAttributeToXmlAndMapDialog(Shell parentShell, XmlPersistentAttribute unmappedPersistentAttribute) {
-		super(parentShell);
-		this.unmappedPersistentAttribute = unmappedPersistentAttribute;
-		setTitle(JptUiMessages.AddPersistentAttributeDialog_title);
-	}
-	
-	protected Control createDialogArea(Composite parent) {
-		Composite dialogArea = (Composite) super.createDialogArea(parent);
-		
-		Composite composite = new Composite(dialogArea, SWT.NULL);
-		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-		composite.setLayout(new GridLayout());
-		
-		attributeLabel = createLabel(composite, 1, JptUiMessages.AddPersistentAttributeDialog_attributeLabel);
-			
-		attributeText = createText(composite, 1);
-//		attributeText.addModifyListener(
-//				new ModifyListener() {
-//					public void modifyText(ModifyEvent e) {
-//						validate();
-//					}
-//				}
-//			);
-		attributeText.setText(unmappedPersistentAttribute.getName());
-		attributeText.setEditable(false);
-		
-		mappingLabel = createLabel(composite, 1, JptUiMessages.AddPersistentClassDialog_mappingLabel);
-		
-		mappingCombo = new ComboViewer(createCombo(composite, 1));
-		mappingCombo.setContentProvider(
-			new IStructuredContentProvider() {
-				public void dispose() {}
-				
-				public Object[] getElements(Object inputElement) {
-					return new Object[] {
-						BasicMappingUiProvider.instance(),
-						IdMappingUiProvider.instance(),
-						VersionMappingUiProvider.instance(),
-						OneToOneMappingUiProvider.instance(),
-						OneToManyMappingUiProvider.instance(),
-						ManyToOneMappingUiProvider.instance(),
-						ManyToManyMappingUiProvider.instance(),
-						EmbeddedMappingUiProvider.instance(),
-						EmbeddedIdMappingUiProvider.instance(),
-						TransientMappingUiProvider.instance()
-					};
-				}
-				
-				public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
-			});
-		mappingCombo.setLabelProvider(
-			new LabelProvider() {
-				@Override
-				public String getText(Object element) {
-					return ((IAttributeMappingUiProvider) element).label();
-				}
-			});
-		mappingCombo.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				validate();
-			}
-		});
-		mappingCombo.setInput("FOO");
-		mappingCombo.getCombo().select(0);  // select Basic to begin
-		
-		// TODO - F1 Help
-		// PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IDaliHelpContextIds.NEW_JPA_PROJECT_CONTENT_PAGE_DATABASE);
-		
-		//getButton(IDialogConstants.OK_ID).setEnabled(false);  // disabled to start
-		applyDialogFont(dialogArea);		
-		
-		validate();
-		
-		return dialogArea;
-	}
-	
-	private Label createLabel(Composite container, int span, String text) {
-		Label label = new Label(container, SWT.NONE);
-		label.setText(text);
-		GridData gd = new GridData();
-		gd.horizontalSpan = span;
-		label.setLayoutData(gd);
-		return label;
-	}
-	
-	private Text createText(Composite container, int span) {
-		Text text = new Text(container, SWT.BORDER | SWT.SINGLE);
-		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-		gd.horizontalSpan = span;
-		gd.widthHint = 250;
-		text.setLayoutData(gd);
-		return text;
-	}
-	
-	private Combo createCombo(Composite container, int span) {
-		Combo combo = new Combo(container, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY);
-		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-		gd.horizontalSpan = span;
-		combo.setLayoutData(gd);
-		return combo;
-	}
-	
-	private IJpaProject getJpaProject() {
-		return unmappedPersistentAttribute.getJpaProject();
-	}
-	
-	public String getAttributeName() {
-		return attributeText.getText();
-	}
-	
-	public String getMappingKey() {
-		StructuredSelection selection = (StructuredSelection) mappingCombo.getSelection();
-		return (selection.isEmpty()) ? null : ((IAttributeMappingUiProvider) selection.getFirstElement()).key();
-	}
-	
-	private void validate() {
-//		if (entityMappings.containsPersistentType(type)) {
-//			updateStatus(
-//				new Status(
-//					IStatus.WARNING, JptUiPlugin.PLUGIN_ID, 
-//					JptUiMessages.AddPersistentClassDialog_duplicateClassWarning));
-//			return;
-//		}
-//		
-		String mappingKey = getMappingKey();
-		if (mappingKey == null) {
-			updateStatus(
-				new Status(
-					IStatus.ERROR, JptUiPlugin.PLUGIN_ID,
-					JptUiMessages.AddPersistentAttributeDialog_noMappingKeyError));
-			return;
-		}
-		
-		updateStatus(Status.OK_STATUS);
-	}
-	
-	@Override
-	protected void okPressed() {
-		unmappedPersistentAttribute.setSpecifiedMappingKey(getMappingKey());
-		unmappedPersistentAttribute.setVirtual(false);
-		super.okPressed();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/dialogs/AddPersistentClassDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/dialogs/AddPersistentClassDialog.java
deleted file mode 100644
index 1bd955b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/dialogs/AddPersistentClassDialog.java
+++ /dev/null
@@ -1,279 +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.internal.dialogs;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.core.IJavaElement;
-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.dialogs.StatusDialog;
-import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddableUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EntityUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.MappedSuperclassUiProvider;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-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.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.eclipse.ui.progress.IProgressService;
-
-public class AddPersistentClassDialog extends StatusDialog
-{
-	private EntityMappingsInternal entityMappings;
-	
-	private Label classLabel;
-		
-	private Text classText;
-	
-	private Button classBrowseButton;
-	
-	private Label mappingLabel;
-	
-	private ComboViewer mappingCombo;
-		
-	
-	public AddPersistentClassDialog(Shell parentShell, EntityMappingsInternal entityMappings) {
-		super(parentShell);
-		this.entityMappings = entityMappings;
-		setTitle(JptUiMessages.AddPersistentClassDialog_title);
-	}
-	
-	protected Control createDialogArea(Composite parent) {
-		Composite dialogArea = (Composite) super.createDialogArea(parent);
-		
-		Composite composite = new Composite(dialogArea, SWT.NULL);
-		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-		composite.setLayout(new GridLayout(2, false));
-		
-		classLabel = createLabel(composite, 2, JptUiMessages.AddPersistentClassDialog_classLabel);
-			
-		classText = createText(composite, 1);
-		classText.addModifyListener(
-				new ModifyListener() {
-					public void modifyText(ModifyEvent e) {
-						validate();
-					}
-				}
-			);
-		
-		classBrowseButton = createButton(composite, 1, JptUiMessages.General_browse);
-		classBrowseButton.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				IType type = chooseType();
-				if (type != null) {
-					classText.setText(type.getFullyQualifiedName());
-				}
-			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-				widgetSelected(e);
-			}
-		});
-		
-		mappingLabel = createLabel(composite, 2, JptUiMessages.AddPersistentClassDialog_mappingLabel);
-		
-		mappingCombo = new ComboViewer(createCombo(composite, 2));
-		mappingCombo.setContentProvider(
-			new IStructuredContentProvider() {
-				public void dispose() {}
-				
-				public Object[] getElements(Object inputElement) {
-					return new Object[] {
-						new MappedSuperclassUiProvider(), 
-						new EntityUiProvider(), 
-						new EmbeddableUiProvider()
-					};
-				}
-				
-				public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
-			});
-		mappingCombo.setLabelProvider(
-			new LabelProvider() {
-				@Override
-				public String getText(Object element) {
-					return ((ITypeMappingUiProvider) element).label();
-				}
-			});
-		mappingCombo.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				validate();
-			}
-		});
-		mappingCombo.setInput("FOO");
-		mappingCombo.getCombo().select(1);  // select Entity to begin
-		
-		// TODO - F1 Help
-		// PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IDaliHelpContextIds.NEW_JPA_PROJECT_CONTENT_PAGE_DATABASE);
-		
-		//getButton(IDialogConstants.OK_ID).setEnabled(false);  // disabled to start
-		applyDialogFont(dialogArea);		
-		
-		validate();
-		
-		return dialogArea;
-	}
-	
-	private Label createLabel(Composite container, int span, String text) {
-		Label label = new Label(container, SWT.NONE);
-		label.setText(text);
-		GridData gd = new GridData();
-		gd.horizontalSpan = span;
-		label.setLayoutData(gd);
-		return label;
-	}
-	
-	private Text createText(Composite container, int span) {
-		Text text = new Text(container, SWT.BORDER | SWT.SINGLE);
-		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-		gd.horizontalSpan = span;
-		gd.widthHint = 250;
-		text.setLayoutData(gd);
-		return text;
-	}
-	
-	private Button createButton(Composite container, int span, String text) {
-		Button button = new Button(container, SWT.NONE);
-		button.setText(text);
-		GridData gd = new GridData();
-		gd.horizontalSpan = span;
-		button.setLayoutData(gd);
-		return button;
-	}
-	
-	private Combo createCombo(Composite container, int span) {
-		Combo combo = new Combo(container, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY);
-		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-		gd.horizontalSpan = span;
-		combo.setLayoutData(gd);
-		return combo;
-	}
-	
-	private IJpaProject getJpaProject() {
-		return entityMappings.getJpaProject();
-	}
-	
-	public String getClassName() {
-		return classText.getText();
-	}
-	
-	public String getMappingKey() {
-		StructuredSelection selection = (StructuredSelection) mappingCombo.getSelection();
-		return (selection.isEmpty()) ? null : ((ITypeMappingUiProvider) selection.getFirstElement()).key();
-	}
-	
-	protected IType chooseType() {
-		IJavaElement[] elements= new IJavaElement[] { getJpaProject().getJavaProject() };
-		IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements);
-		IProgressService service = PlatformUI.getWorkbench().getProgressService();
-		
-		SelectionDialog typeSelectionDialog;
-		try {
-			typeSelectionDialog = 
-				JavaUI.createTypeDialog(
-						getShell(), service, scope, 
-						IJavaElementSearchConstants.CONSIDER_CLASSES, 
-						false, getClassName());
-		}
-		catch (JavaModelException e) {
-			JptUiPlugin.log(e);
-			throw new RuntimeException(e);
-		}
-		typeSelectionDialog.setTitle(JptUiMessages.AddPersistentClassDialog_classDialog_title); 
-		typeSelectionDialog.setMessage(JptUiMessages.AddPersistentClassDialog_classDialog_message); 
-
-		if (typeSelectionDialog.open() == Window.OK) {
-			return (IType) typeSelectionDialog.getResult()[0];
-		}
-		return null;
-	}
-	
-	private void validate() {
-		String className = getClassName();
-		
-		if (StringTools.stringIsEmpty(className)) {
-			updateStatus(
-				new Status(
-					IStatus.ERROR, JptUiPlugin.PLUGIN_ID, 
-					JptUiMessages.AddPersistentClassDialog_noClassError));
-			return;
-		}
-		
-		IType type;
-		try {
-			type = getJpaProject().getJavaProject().findType(className);
-		}
-		catch (JavaModelException jme) {
-			type = null;
-		}
-		
-		if (type == null) {
-			updateStatus(
-				new Status(
-					IStatus.WARNING, JptUiPlugin.PLUGIN_ID,
-					JptUiMessages.AddPersistentClassDialog_classNotFoundWarning));
-			return;
-		}
-		
-		if (entityMappings.containsPersistentType(type)) {
-			updateStatus(
-				new Status(
-					IStatus.WARNING, JptUiPlugin.PLUGIN_ID, 
-					JptUiMessages.AddPersistentClassDialog_duplicateClassWarning));
-			return;
-		}
-		
-		String mappingKey = getMappingKey();
-		if (mappingKey == null) {
-			updateStatus(
-				new Status(
-					IStatus.ERROR, JptUiPlugin.PLUGIN_ID,
-					JptUiMessages.AddPersistentClassDialog_noMappingKeyError));
-			return;
-		}
-		
-		updateStatus(Status.OK_STATUS);
-	}
-	
-	@Override
-	protected void okPressed() {
-		entityMappings.addMapping(getClassName(), getMappingKey());
-		super.okPressed();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/EntitiesGenerator.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/EntitiesGenerator.java
deleted file mode 100644
index 05fe71c..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/EntitiesGenerator.java
+++ /dev/null
@@ -1,290 +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.internal.generic;
-
-import java.util.Collection;
-
-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.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.jpt.core.internal.IJpaFile;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.synch.SynchronizeClassesJob;
-import org.eclipse.jpt.gen.internal.EntityGenerator;
-import org.eclipse.jpt.gen.internal.PackageGenerator;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.wizards.GenerateEntitiesWizard;
-import org.eclipse.osgi.util.NLS;
-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.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- *  EntitiesGenerator
- */
-public class EntitiesGenerator
-{
-	private IJpaProject project;
-	private IStructuredSelection selection;
-
-	// ********** constructors **********
-
-	static public void generate( IJpaProject project, IStructuredSelection selection) {
-		if(project == null) {
-			throw new NullPointerException();
-		}
-		new EntitiesGenerator( project, selection).generate();
-	}
-	
-	public EntitiesGenerator() {
-		super();
-	}
-
-	private EntitiesGenerator( IJpaProject project, IStructuredSelection selection) {
-		super();
-		this.project = project;
-		this.selection = selection;
-	}
-
-	// ********** behavior **********
-
-	protected void generate() {
-		GenerateEntitiesWizard wizard = new GenerateEntitiesWizard(this.project, this.selection);
-		
-		WizardDialog dialog = new WizardDialog(this.getCurrentShell(), wizard);
-		dialog.create();
-		int returnCode = dialog.open();
-		if (returnCode == Window.OK) {
-			IWorkspaceRunnable runnable = new GenerateEntitiesRunnable(
-					wizard.getPackageGeneratorConfig(),
-					wizard.getEntityGeneratorConfig(),
-					wizard.getSelectedTables(),
-					wizard.synchronizePersistenceXml(),
-					project,
-					new OverwriteConfirmer(this.getCurrentShell())
-			);
-			try {
-				// TODO pass in real ProgressMonitor
-				ResourcesPlugin.getWorkspace().run(runnable, new NullProgressMonitor());
-			} catch (CoreException ex) {
-				throw new RuntimeException(ex);
-			}
-		}
-	}
-	
-	private Shell getCurrentShell() {
-	    return Display.getCurrent().getActiveShell();
-	}
-	  
-	// ********** runnable **********
-
-	static class GenerateEntitiesRunnable implements IWorkspaceRunnable {
-		private final PackageGenerator.Config packageConfig;
-		private final EntityGenerator.Config entityConfig;
-		private final Collection selectedTables;
-		private final boolean synchronizePersistenceXml;
-		private final EntityGenerator.OverwriteConfirmer overwriteConfirmer;
-		private final IJpaProject project;
-		
-		GenerateEntitiesRunnable(
-				PackageGenerator.Config packageConfig,
-				EntityGenerator.Config entityConfig,
-				Collection selectedTables,
-				boolean synchronizePersistenceXml,
-				IJpaProject project,
-				EntityGenerator.OverwriteConfirmer overwriteConfirmer
-		) {
-			super();
-			this.packageConfig = packageConfig;
-			this.entityConfig = entityConfig;
-			this.selectedTables = selectedTables;
-			this.synchronizePersistenceXml = synchronizePersistenceXml;
-			this.overwriteConfirmer = overwriteConfirmer;
-			this.project = project;
-		}
-
-		public void run(IProgressMonitor monitor) throws CoreException {
-			monitor.beginTask("", 1000);
-			try {
-				PackageGenerator.generateEntities(this.packageConfig, this.entityConfig, this.selectedTables, this.overwriteConfirmer, monitor);
-				if (synchronizePersistenceXml) {
-					// we currently only support *one* persistence.xml file per project
-					IJpaFile resource = project.getPlatform().validPersistenceXmlFiles().next();
-					if (resource != null) {
-						SynchronizeClassesJob job = new SynchronizeClassesJob(resource.getFile());
-						job.schedule();
-					}
-				}
-			} catch (OperationCanceledException ex) {
-				// fall through and tell monitor we are done
-			}
-			monitor.done();
-		}
-
-	}
-
-	// ********** overwrite confirmer **********
-
-	static class OverwriteConfirmer implements EntityGenerator.OverwriteConfirmer {
-		private Shell shell;
-		private boolean overwriteAll = false;
-		private boolean skipAll = false;
-
-		OverwriteConfirmer(Shell shell) {
-			super();
-			this.shell = shell;
-		}
-
-		public boolean overwrite(String className) {
-			if (this.overwriteAll) {
-				return true;
-			}
-			if (this.skipAll) {
-				return false;
-			}
-			return this.promptUser(className);
-		}
-
-		private boolean promptUser(String className) {
-			OverwriteConfirmerDialog dialog = new OverwriteConfirmerDialog(this.shell, className);
-			if (dialog.open() == Window.CANCEL) {
-				throw new OperationCanceledException();
-			}
-			if (dialog.yes()) {
-				return true;
-			} else if (dialog.yesToAll()) {
-				this.overwriteAll = true;
-				return true;
-			} else if (dialog.no()) {
-				return false;
-			} else if (dialog.noToAll()) {
-				this.skipAll = true;
-				return false;
-			}
-			throw new IllegalStateException();
-		}
-
-	}
-
-	// ********** dialog **********
-
-	static class OverwriteConfirmerDialog extends Dialog {
-		private final String className;
-		private boolean yes = false;
-		private boolean yesToAll = false;
-		private boolean no = false;
-		private boolean noToAll = false;
-
-		OverwriteConfirmerDialog(Shell parent, String className) {
-			super(parent);
-			this.className = className;
-		}
-
-		protected void configureShell(Shell shell) {
-			super.configureShell(shell);
-			shell.setText(JptUiMessages.OverwriteConfirmerDialog_title);
-		}
-
-		protected Control createDialogArea(Composite parent) {
-			Composite composite = (Composite) super.createDialogArea(parent);
-			GridLayout gridLayout = (GridLayout) composite.getLayout();
-			gridLayout.numColumns = 2;
-
-			Label text = new Label(composite, SWT.LEFT);
-			text.setText(NLS.bind(JptUiMessages.OverwriteConfirmerDialog_text, this.className));
-			text.setLayoutData(new GridData());
-			
-			return composite;
-		}
-
-		protected void createButtonsForButtonBar(Composite parent) {
-			this.createButton(parent, IDialogConstants.YES_ID, IDialogConstants.YES_LABEL, false);
-			this.createButton(parent, IDialogConstants.YES_TO_ALL_ID, IDialogConstants.YES_TO_ALL_LABEL, false);
-			this.createButton(parent, IDialogConstants.NO_ID, IDialogConstants.NO_LABEL, true);
-			this.createButton(parent, IDialogConstants.NO_TO_ALL_ID, IDialogConstants.NO_TO_ALL_LABEL, false);
-			this.createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-		}
-
-		protected void buttonPressed(int buttonId) {
-			switch (buttonId) {
-				case IDialogConstants.YES_ID :
-					this.yesPressed();
-					break;
-				case IDialogConstants.YES_TO_ALL_ID :
-					this.yesToAllPressed();
-					break;
-				case IDialogConstants.NO_ID :
-					this.noPressed();
-					break;
-				case IDialogConstants.NO_TO_ALL_ID :
-					this.noToAllPressed();
-					break;
-				case IDialogConstants.CANCEL_ID :
-					this.cancelPressed();
-					break;
-				default :
-					break;
-			}
-		}
-
-		private void yesPressed() {
-			this.yes = true;
-			this.setReturnCode(OK);
-			this.close();
-		}
-
-		private void yesToAllPressed() {
-			this.yesToAll = true;
-			this.setReturnCode(OK);
-			this.close();
-		}
-
-		private void noPressed() {
-			this.no = true;
-			this.setReturnCode(OK);
-			this.close();
-		}
-
-		private void noToAllPressed() {
-			this.noToAll = true;
-			this.setReturnCode(OK);
-			this.close();
-		}
-
-		boolean yes() {
-			return this.yes;
-		}
-
-		boolean yesToAll() {
-			return this.yesToAll;
-		}
-
-		boolean no() {
-			return this.no;
-		}
-
-		boolean noToAll() {
-			return this.noToAll;
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/GenericPlatformUi.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/GenericPlatformUi.java
deleted file mode 100644
index 0189ea6..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/GenericPlatformUi.java
+++ /dev/null
@@ -1,38 +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.internal.generic;
-
-import java.text.MessageFormat;
-
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.ui.internal.BaseJpaPlatformUi;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-public class GenericPlatformUi extends BaseJpaPlatformUi
-{
-	public GenericPlatformUi() {
-		super();
-	}
-	
-	public void generateDDL(IJpaProject project, IStructuredSelection selection) {
-		this.displayNotSupportedMessage(JptUiMessages.GenericPlatformUiDialog_notSupportedMessageTitle, JptUiMessages.GenericPlatformUiDialog_notSupportedMessageText);
-	}
-
-	protected void displayNotSupportedMessage(String title, String message) {
-	    String formattedMessage = MessageFormat.format( message, (Object [])(new String [] { message}));
-	    Shell currentShell = Display.getCurrent().getActiveShell();
-	    MessageDialog.openInformation(currentShell, title, formattedMessage);	  
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/IAttributeMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/IAttributeMappingUiProvider.java
deleted file mode 100644
index 4276feb..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/IAttributeMappingUiProvider.java
+++ /dev/null
@@ -1,46 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IAttributeMapping;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-
-public interface IAttributeMappingUiProvider
-{
-	/**
-	 * A unique string that corresponds to the key of a MappingProvider in the core
-	 * (IJavaAttributeMappingProvider and/or IXmlAttributeMappingProvider)
-	 */
-	String key();
-
-	/**
-	 * A label to be displayed to the label as an option in the mapping type combo box 
-	 * @return
-	 */
-	String label();
-
-	/**
-	 * The IJpaComposite that correponds to this mapping type.  This will be displayed
-	 * by the PersistentAttributeDetailsPage when the mapping key matches the key given
-	 * by this provider.  The composites will be stored in a Map with the mapping key as the key.
-	 * 
-	 * @param parent
-	 * @param commandStack
-	 * @param widgetFactory
-	 * @return
-	 */
-	IJpaComposite<IAttributeMapping> buildAttributeMappingComposite(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory);
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/ITypeMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/ITypeMappingUiProvider.java
deleted file mode 100644
index d614a57..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/ITypeMappingUiProvider.java
+++ /dev/null
@@ -1,43 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public interface ITypeMappingUiProvider
-{
-	/**
-	 * A unique string that corresponds to the key of a MappingProvider in the core
-	 */
-	String key();
-	
-	/**
-	 * A label to be displayed to the label as an option in the mapping type combo box 
-	 * @return
-	 */
-	String label();
-
-	/**
-	 * The IJpaComposite that correponds to this mapping type.  This will be displayed
-	 * by the PersistentTypeDetailsPage when the mapping key matches the key given
-	 * by this provider.  The composites will be stored in a Map with the mapping key as the key.
-	 * 
-	 * @param parent
-	 * @param commandStack
-	 * @param widgetFactory
-	 * @return
-	 */
-	IJpaComposite buildPersistentTypeMappingComposite(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory);
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaDetailsProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaDetailsProvider.java
deleted file mode 100644
index 314f1c5..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaDetailsProvider.java
+++ /dev/null
@@ -1,45 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.details;
-
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jpt.core.internal.content.java.IJavaContentNodes;
-import org.eclipse.jpt.ui.internal.details.IJpaDetailsPage;
-import org.eclipse.jpt.ui.internal.details.IJpaDetailsProvider;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class JavaDetailsProvider 
-	implements IJpaDetailsProvider
-{
-	public JavaDetailsProvider() {
-		super();
-	}
-	
-	public String fileContentType() {
-		return JavaCore.JAVA_SOURCE_CONTENT_TYPE;
-	}
-	
-	public IJpaDetailsPage buildDetailsPage(
-			Composite parentComposite, Object contentNodeId, TabbedPropertySheetWidgetFactory widgetFactory) {
-		if (contentNodeId.equals(IJavaContentNodes.PERSISTENT_TYPE_ID)) {
-			return new JavaPersistentTypeDetailsPage(parentComposite, widgetFactory);
-		}
-		else if (contentNodeId.equals(IJavaContentNodes.PERSISTENT_ATTRIBUTE_ID)) {
-			return new JavaPersistentAttributeDetailsPage(parentComposite, widgetFactory);
-		}
-		
-		return null;
-	}
-
-	public void dispose() {
-		// no op  ... for now
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentAttributeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentAttributeDetailsPage.java
deleted file mode 100644
index b249b9b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentAttributeDetailsPage.java
+++ /dev/null
@@ -1,52 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.details;
-
-import org.eclipse.jpt.ui.internal.details.PersistentAttributeDetailsPage;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-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.part.PageBook;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class JavaPersistentAttributeDetailsPage
-	extends PersistentAttributeDetailsPage 
-{
-	public JavaPersistentAttributeDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		composite.setLayout(new GridLayout(2, false));
-		
-		GridData gridData;
-		
-		buildMappingLabel(composite);
-		
-		CComboViewer mappingCombo = buildMappingCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		mappingCombo.getCombo().setLayoutData(gridData);
-		
-		PageBook book = buildMappingPageBook(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		book.setLayoutData(gridData);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentTypeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentTypeDetailsPage.java
deleted file mode 100644
index 9b2d273..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentTypeDetailsPage.java
+++ /dev/null
@@ -1,53 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.details;
-
-import org.eclipse.jpt.ui.internal.details.PersistentTypeDetailsPage;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-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.part.PageBook;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class JavaPersistentTypeDetailsPage extends
-		PersistentTypeDetailsPage 
-{	
-	
-	public JavaPersistentTypeDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {	    
-	    GridLayout gridLayout = new GridLayout();
-	    gridLayout.numColumns = 2;
-	    composite.setLayout(gridLayout);
-		
-	    buildTypeMappingLabel(composite);
-	    
-		CComboViewer typeMappingCombo = buildTypeMappingCombo(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-	    gridData.grabExcessHorizontalSpace = true;
-		typeMappingCombo.getCombo().setLayoutData(gridData);
-
-		PageBook typeMappingPageBook = buildTypeMappingPageBook(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		typeMappingPageBook.setLayoutData(gridData);
-	}	
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/BasicMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/BasicMappingUiProvider.java
deleted file mode 100644
index 72af6c5..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/BasicMappingUiProvider.java
+++ /dev/null
@@ -1,53 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.BasicComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class BasicMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	
-	// singleton
-	private static final BasicMappingUiProvider INSTANCE = new BasicMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private BasicMappingUiProvider() {
-		super();
-	}
-	
-	public String key() {
-		return IMappingKeys.BASIC_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_BasicLabel;
-	}
-	
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new BasicComposite(parent, commandStack, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/DefaultBasicMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/DefaultBasicMappingUiProvider.java
deleted file mode 100644
index c01c35d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/DefaultBasicMappingUiProvider.java
+++ /dev/null
@@ -1,52 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.BasicComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class DefaultBasicMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	// singleton
-	private static final DefaultBasicMappingUiProvider INSTANCE = new DefaultBasicMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private DefaultBasicMappingUiProvider() {
-		super();
-	}
-	
-	public String key() {
-		return IMappingKeys.BASIC_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return "Default (" + JptUiMappingsMessages.PersistentAttributePage_BasicLabel + ")";
-	}
-	
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new BasicComposite(parent, commandStack, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/DefaultEmbeddedMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/DefaultEmbeddedMappingUiProvider.java
deleted file mode 100644
index 57c4932..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/DefaultEmbeddedMappingUiProvider.java
+++ /dev/null
@@ -1,52 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.EmbeddedComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class DefaultEmbeddedMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	// singleton
-	private static final DefaultEmbeddedMappingUiProvider INSTANCE = new DefaultEmbeddedMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private DefaultEmbeddedMappingUiProvider() {
-		super();
-	}
-	
-	public String key() {
-		return IMappingKeys.EMBEDDED_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return "Default (" + JptUiMappingsMessages.PersistentAttributePage_EmbeddedLabel + ")";
-	}
-	
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new EmbeddedComposite(parent, commandStack, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EmbeddableUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EmbeddableUiProvider.java
deleted file mode 100644
index ca4a97e..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EmbeddableUiProvider.java
+++ /dev/null
@@ -1,35 +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.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.EmbeddableComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EmbeddableUiProvider implements ITypeMappingUiProvider
-{
-	public String key() {
-		return IMappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentTypePage_EmbeddableLabel;
-	}
-	
-	public IJpaComposite buildPersistentTypeMappingComposite(
-				Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new EmbeddableComposite(parent, commandStack, widgetFactory);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EmbeddedIdMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EmbeddedIdMappingUiProvider.java
deleted file mode 100644
index fb49af2..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EmbeddedIdMappingUiProvider.java
+++ /dev/null
@@ -1,53 +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.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.EmbeddedIdComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EmbeddedIdMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	
-	// singleton
-	private static final EmbeddedIdMappingUiProvider INSTANCE = new EmbeddedIdMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private EmbeddedIdMappingUiProvider() {
-		super();
-	}
-
-	public String key() {
-		return IMappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_EmbeddedIdLabel;
-	}
-	
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new EmbeddedIdComposite(parent, commandStack, widgetFactory);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EmbeddedMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EmbeddedMappingUiProvider.java
deleted file mode 100644
index 4da937b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EmbeddedMappingUiProvider.java
+++ /dev/null
@@ -1,53 +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.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.EmbeddedComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EmbeddedMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	
-	// singleton
-	private static final EmbeddedMappingUiProvider INSTANCE = new EmbeddedMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private EmbeddedMappingUiProvider() {
-		super();
-	}
-
-	public String key() {
-		return IMappingKeys.EMBEDDED_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_EmbeddedLabel;
-	}
-	
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new EmbeddedComposite(parent, commandStack, widgetFactory);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EntityUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EntityUiProvider.java
deleted file mode 100644
index 80d489a..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/EntityUiProvider.java
+++ /dev/null
@@ -1,35 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.EntityComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EntityUiProvider implements ITypeMappingUiProvider
-{
-	public String key() {
-		return IMappingKeys.ENTITY_TYPE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentTypePage_EntityLabel;
-	}
-	
-	public IJpaComposite buildPersistentTypeMappingComposite(
-				Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new EntityComposite(parent, commandStack, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/IdMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/IdMappingUiProvider.java
deleted file mode 100644
index 199b0fb..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/IdMappingUiProvider.java
+++ /dev/null
@@ -1,52 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.IdComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class IdMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	// singleton
-	private static final IdMappingUiProvider INSTANCE = new IdMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private IdMappingUiProvider() {
-		super();
-	}
-
-	public String key() {
-		return IMappingKeys.ID_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_IdLabel;
-	}
-
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new IdComposite(parent, commandStack, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/ManyToManyMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/ManyToManyMappingUiProvider.java
deleted file mode 100644
index 8515d35..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/ManyToManyMappingUiProvider.java
+++ /dev/null
@@ -1,52 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.ManyToManyComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class ManyToManyMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	// singleton
-	private static final ManyToManyMappingUiProvider INSTANCE = new ManyToManyMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private ManyToManyMappingUiProvider() {
-		super();
-	}
-
-	public String key() {
-		return IMappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_ManyToManyLabel;
-	}
-
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new ManyToManyComposite(parent, commandStack, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/ManyToOneMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/ManyToOneMappingUiProvider.java
deleted file mode 100644
index c81832c..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/ManyToOneMappingUiProvider.java
+++ /dev/null
@@ -1,52 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.ManyToOneComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class ManyToOneMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	// singleton
-	private static final ManyToOneMappingUiProvider INSTANCE = new ManyToOneMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private ManyToOneMappingUiProvider() {
-		super();
-	}
-
-	public String key() {
-		return IMappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_ManyToOneLabel;
-	}
-
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new ManyToOneComposite(parent, commandStack, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/MappedSuperclassUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/MappedSuperclassUiProvider.java
deleted file mode 100644
index aa71476..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/MappedSuperclassUiProvider.java
+++ /dev/null
@@ -1,34 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.MappedSuperclassComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class MappedSuperclassUiProvider implements ITypeMappingUiProvider
-{
-	public String key() {
-		return IMappingKeys.MAPPED_SUPERCLASS_TYPE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentTypePage_MappedSuperclassLabel;
-	}
-
-	public IJpaComposite buildPersistentTypeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new MappedSuperclassComposite(parent, commandStack, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/NullAttributeMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/NullAttributeMappingUiProvider.java
deleted file mode 100644
index 1c16047..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/NullAttributeMappingUiProvider.java
+++ /dev/null
@@ -1,75 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class NullAttributeMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	
-	// singleton
-	private static final NullAttributeMappingUiProvider INSTANCE = new NullAttributeMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private NullAttributeMappingUiProvider() {
-		super();
-	}
-
-
-	public String key() {
-		return null;
-	}
-	
-	public String label() {
-		return "";
-	}
-	
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new NullComposite(parent);
-	}
-	
-	
-	public static class NullComposite extends Composite 
-		implements IJpaComposite 
-	{
-		NullComposite(Composite parent) {
-			super(parent, SWT.NONE);
-		}
-		
-		public void populate(EObject model) {
-			// no op
-		}
-		
-		@Override
-		public void dispose() {
-			super.dispose();
-		}
-		public Control getControl() {
-			return this;
-		}
-	}	
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/NullTypeMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/NullTypeMappingUiProvider.java
deleted file mode 100644
index b435bd5..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/NullTypeMappingUiProvider.java
+++ /dev/null
@@ -1,59 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class NullTypeMappingUiProvider implements ITypeMappingUiProvider
-{
-	public String key() {
-		return null;
-	}
-	
-	public String label() {
-		return "";
-	}
-	
-	public IJpaComposite buildPersistentTypeMappingComposite(
-				Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new NullComposite(parent);
-	}
-	
-	
-	public static class NullComposite extends Composite 
-	implements IJpaComposite 
-	{
-		private Composite composite;
-		NullComposite(Composite parent) {
-			super(parent, SWT.NONE);
-			this.composite = new Composite(parent, SWT.NONE);
-		}
-		
-		public void populate(EObject model) {
-			// no op
-		}
-		
-		@Override
-		public void dispose() {
-			super.dispose();
-		}
-		
-		public Control getControl() {
-			return this.composite;
-		}
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/OneToManyMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/OneToManyMappingUiProvider.java
deleted file mode 100644
index bb130bc..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/OneToManyMappingUiProvider.java
+++ /dev/null
@@ -1,52 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.OneToManyComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class OneToManyMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	// singleton
-	private static final OneToManyMappingUiProvider INSTANCE = new OneToManyMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private OneToManyMappingUiProvider() {
-		super();
-	}
-
-	public String key() {
-		return IMappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_OneToManyLabel;
-	}
-
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new OneToManyComposite(parent, commandStack, widgetFactory);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/OneToOneMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/OneToOneMappingUiProvider.java
deleted file mode 100644
index 27fa225..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/OneToOneMappingUiProvider.java
+++ /dev/null
@@ -1,53 +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.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.OneToOneComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class OneToOneMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	
-	// singleton
-	private static final OneToOneMappingUiProvider INSTANCE = new OneToOneMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private OneToOneMappingUiProvider() {
-		super();
-	}
-
-	public String key() {
-		return IMappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_OneToOneLabel;
-	}
-	
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new OneToOneComposite(parent, commandStack, widgetFactory);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/TransientMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/TransientMappingUiProvider.java
deleted file mode 100644
index c8b4811..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/TransientMappingUiProvider.java
+++ /dev/null
@@ -1,53 +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.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.TransientComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class TransientMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	
-	// singleton
-	private static final TransientMappingUiProvider INSTANCE = new TransientMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private TransientMappingUiProvider() {
-		super();
-	}
-
-	public String key() {
-		return IMappingKeys.TRANSIENT_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_TransientLabel;
-	}
-	
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new TransientComposite(parent, commandStack, widgetFactory);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/VersionMappingUiProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/VersionMappingUiProvider.java
deleted file mode 100644
index 75f14df..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/mappings/properties/VersionMappingUiProvider.java
+++ /dev/null
@@ -1,53 +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.internal.java.mappings.properties;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.core.internal.IMappingKeys;
-import org.eclipse.jpt.ui.internal.details.IJpaComposite;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.VersionComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class VersionMappingUiProvider
-	implements IAttributeMappingUiProvider
-{
-	
-	// singleton
-	private static final VersionMappingUiProvider INSTANCE = new VersionMappingUiProvider();
-
-	/**
-	 * Return the singleton.
-	 */
-	public static IAttributeMappingUiProvider instance() {
-		return INSTANCE;
-	}
-
-	/**
-	 * Ensure non-instantiability.
-	 */
-	private VersionMappingUiProvider() {
-		super();
-	}
-
-	public String key() {
-		return IMappingKeys.VERSION_ATTRIBUTE_MAPPING_KEY;
-	}
-	
-	public String label() {
-		return JptUiMappingsMessages.PersistentAttributePage_VersionLabel;
-	}
-	
-	public IJpaComposite buildAttributeMappingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new VersionComposite(parent, commandStack, widgetFactory);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaCompilationUnitItemProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaCompilationUnitItemProvider.java
deleted file mode 100644
index e643328..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaCompilationUnitItemProvider.java
+++ /dev/null
@@ -1,40 +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.internal.java.structure;
-
-import java.util.Collection;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.jpt.core.internal.content.java.JpaJavaPackage;
-
-public class JavaCompilationUnitItemProvider extends ItemProviderAdapter
-	implements IEditingDomainItemProvider, 
-		IStructuredItemContentProvider,
-		ITreeItemContentProvider, 
-		IItemLabelProvider
-{
-	public JavaCompilationUnitItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-	
-	@Override
-	public Collection getChildrenFeatures(Object object) {
-		if (childrenFeatures == null) {
-			super.getChildrenFeatures(object);
-			childrenFeatures.add(JpaJavaPackage.Literals.JPA_COMPILATION_UNIT__TYPES);
-		}
-		return childrenFeatures;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaPersistentAttributeItemProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaPersistentAttributeItemProvider.java
deleted file mode 100644
index 902c832..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaPersistentAttributeItemProvider.java
+++ /dev/null
@@ -1,101 +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.internal.java.structure;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.eclipse.jpt.core.internal.IAttributeMapping;
-import org.eclipse.jpt.core.internal.IPersistentAttribute;
-import org.eclipse.jpt.core.internal.JpaCorePackage;
-import org.eclipse.jpt.core.internal.mappings.IBasic;
-import org.eclipse.jpt.core.internal.mappings.IEmbedded;
-import org.eclipse.jpt.core.internal.mappings.IEmbeddedId;
-import org.eclipse.jpt.core.internal.mappings.IId;
-import org.eclipse.jpt.core.internal.mappings.IManyToMany;
-import org.eclipse.jpt.core.internal.mappings.IManyToOne;
-import org.eclipse.jpt.core.internal.mappings.IOneToMany;
-import org.eclipse.jpt.core.internal.mappings.IOneToOne;
-import org.eclipse.jpt.core.internal.mappings.ITransient;
-import org.eclipse.jpt.core.internal.mappings.IVersion;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsImages;
-
-public class JavaPersistentAttributeItemProvider extends ItemProviderAdapter
-	implements IEditingDomainItemProvider, 
-		IStructuredItemContentProvider,
-		ITreeItemContentProvider, 
-		IItemLabelProvider
-{
-	public JavaPersistentAttributeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-	
-	@Override
-	public Object getImage(Object object) {
-		IAttributeMapping mapping = ((IPersistentAttribute) object).getMapping();
-		
-		if (mapping instanceof IBasic) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.BASIC);
-		}
-		else if (mapping instanceof IId) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.ID);
-		}
-		else if (mapping instanceof IVersion) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.VERSION);
-		}
-		else if (mapping instanceof IEmbedded) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.EMBEDDED);
-		}
-		else if (mapping instanceof IEmbeddedId) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.EMBEDDED_ID);
-		}
-		else if (mapping instanceof IOneToOne) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.ONE_TO_ONE);
-		}
-		else if (mapping instanceof IOneToMany) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.ONE_TO_MANY);
-		}
-		else if (mapping instanceof IManyToOne) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.MANY_TO_ONE);
-		}
-		else if (mapping instanceof IManyToMany) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.MANY_TO_MANY);
-		}
-		else if (mapping instanceof ITransient) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.TRANSIENT);
-		}
-		else {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.NULL_ATTRIBUTE_MAPPING);
-		}
-	}
-	
-	@Override
-	public String getText(Object object) {
-		return ((IPersistentAttribute) object).getName();
-	}
-	
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(IPersistentAttribute.class)) {
-		case JpaCorePackage.IPERSISTENT_ATTRIBUTE__MAPPING:
-			fireNotifyChanged(new ViewerNotification(notification, notification
-					.getNotifier(), false, true));
-			return;
-		}
-		super.notifyChanged(notification);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaPersistentTypeItemProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaPersistentTypeItemProvider.java
deleted file mode 100644
index c1cd5bb..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaPersistentTypeItemProvider.java
+++ /dev/null
@@ -1,98 +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.internal.java.structure;
-
-import java.util.Collection;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jpt.core.internal.IPersistentType;
-import org.eclipse.jpt.core.internal.ITypeMapping;
-import org.eclipse.jpt.core.internal.JpaCorePackage;
-import org.eclipse.jpt.core.internal.content.java.JavaPersistentType;
-import org.eclipse.jpt.core.internal.content.java.JpaJavaPackage;
-import org.eclipse.jpt.core.internal.mappings.IEmbeddable;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.IMappedSuperclass;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsImages;
-
-public class JavaPersistentTypeItemProvider extends ItemProviderAdapter
-	implements IEditingDomainItemProvider, 
-		IStructuredItemContentProvider,
-		ITreeItemContentProvider, 
-		IItemLabelProvider
-{
-	public JavaPersistentTypeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-	
-	
-	@Override
-	protected Collection getChildrenFeatures(Object object) {
-		if (childrenFeatures == null) {
-			super.getChildrenFeatures(object);
-			childrenFeatures.add(JpaJavaPackage.Literals.JAVA_PERSISTENT_TYPE__ATTRIBUTES);
-		}
-		return childrenFeatures;
-	}
-	
-	@Override
-	public Object getImage(Object object) {
-		ITypeMapping mapping = ((IPersistentType) object).getMapping();
-		
-		
-		if (mapping instanceof IEntity) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.ENTITY);
-		}
-		else if (mapping instanceof IEmbeddable) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.EMBEDDABLE);
-		}
-		else if (mapping instanceof IMappedSuperclass) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.MAPPED_SUPERCLASS);
-		}
-		else {
-			return null;
-		}
-	}
-	
-	@Override
-	public String getText(Object object) {
-		IType type = ((IPersistentType) object).findJdtType();
-		return (type == null) ? "" : type.getElementName();
-	}
-	
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(JavaPersistentType.class)) {
-			case JpaCorePackage.IPERSISTENT_TYPE__MAPPING_KEY:
-				fireNotifyChanged(
-					new ViewerNotification(
-						notification, notification.getNotifier(), false, true));
-				return;
-			
-			case JpaJavaPackage.JAVA_PERSISTENT_TYPE__ATTRIBUTES:
-				fireNotifyChanged(
-					new ViewerNotification(
-						notification, notification.getNotifier(), true, false));
-			return;
-		}
-		
-		super.notifyChanged(notification);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaStructureProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaStructureProvider.java
deleted file mode 100644
index a1af28c..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JavaStructureProvider.java
+++ /dev/null
@@ -1,38 +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.internal.java.structure;
-
-import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
-import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jpt.ui.internal.structure.IJpaStructureProvider;
-
-public class JavaStructureProvider implements IJpaStructureProvider
-{
-	public String fileContentType() {
-		return JavaCore.JAVA_SOURCE_CONTENT_TYPE;
-	}
-
-	public ITreeContentProvider buildContentProvider() {
-		return new AdapterFactoryContentProvider(new JpaCoreJavaItemProviderAdapterFactory());
-	}
-	
-	public ILabelProvider buildLabelProvider() {
-		return new AdapterFactoryLabelProvider(new JpaCoreJavaItemProviderAdapterFactory());
-	}
-	
-	public void dispose() {
-		// TODO Auto-generated method stub
-		
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JpaCoreJavaItemProviderAdapterFactory.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JpaCoreJavaItemProviderAdapterFactory.java
deleted file mode 100644
index 7308534..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JpaCoreJavaItemProviderAdapterFactory.java
+++ /dev/null
@@ -1,176 +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.internal.java.structure;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.edit.provider.ChangeNotifier;
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.provider.IChangeNotifier;
-import org.eclipse.emf.edit.provider.IDisposable;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.INotifyChangedListener;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.jpt.core.internal.content.java.util.JpaJavaAdapterFactory;
-
-/**
- * This is the factory that is used to provide the interfaces needed to support Viewers.
- * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
- * The adapters also support Eclipse property sheets.
- * Note that most of the adapters are shared among multiple instances.
- */
-public class JpaCoreJavaItemProviderAdapterFactory
-	extends JpaJavaAdapterFactory
-	implements ComposeableAdapterFactory, 
-		IChangeNotifier, 
-		IDisposable
-{
-	/**
-	 * This keeps track of the root adapter factory that delegates to this adapter factory.
-	 */
-	protected ComposedAdapterFactory parentAdapterFactory;
-
-	/**
-	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
-	 */
-	protected IChangeNotifier changeNotifier = new ChangeNotifier();
-
-	/**
-	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
-	 */
-	protected Collection supportedTypes = new ArrayList();
-
-	
-	public JpaCoreJavaItemProviderAdapterFactory() {
-		supportedTypes.add(IEditingDomainItemProvider.class);
-		supportedTypes.add(IStructuredItemContentProvider.class);
-		supportedTypes.add(ITreeItemContentProvider.class);
-		supportedTypes.add(IItemLabelProvider.class);
-	}
-	
-	
-	protected JavaCompilationUnitItemProvider javaCompilationUnitItemProvider;
-	
-	public Adapter createJpaCompilationUnitAdapter() {
-		if (javaCompilationUnitItemProvider == null) {
-			javaCompilationUnitItemProvider = new JavaCompilationUnitItemProvider(this);
-		}
-		
-		return javaCompilationUnitItemProvider;
-	}
-	
-	protected JavaPersistentTypeItemProvider javaPersistentTypeItemProvider;
-	
-	public Adapter createJavaPersistentTypeAdapter() {
-		if (javaPersistentTypeItemProvider == null) {
-			javaPersistentTypeItemProvider = new JavaPersistentTypeItemProvider(this);
-		}
-		
-		return javaPersistentTypeItemProvider;
-	}
-	
-	protected JavaPersistentAttributeItemProvider javaPersistentAttributeItemProvider;
-	
-	public Adapter createJavaPersistentAttributeAdapter() {
-		if (javaPersistentAttributeItemProvider == null) {
-			javaPersistentAttributeItemProvider = new JavaPersistentAttributeItemProvider(
-					this);
-		}
-		
-		return javaPersistentAttributeItemProvider;
-	}
-	
-	/**
-	 * This returns the root adapter factory that contains this factory.
-	 */
-	public ComposeableAdapterFactory getRootAdapterFactory() {
-		return parentAdapterFactory == null ? 
-			this : 
-			parentAdapterFactory.getRootAdapterFactory();
-	}
-	
-	/**
-	 * This sets the composed adapter factory that contains this factory.
-	 */
-	public void setParentAdapterFactory(
-			ComposedAdapterFactory parentAdapterFactory) {
-		this.parentAdapterFactory = parentAdapterFactory;
-	}
-	
-	public boolean isFactoryForType(Object type) {
-		return supportedTypes.contains(type) || super.isFactoryForType(type);
-	}
-	
-	/**
-	 * This implementation substitutes the factory itself as the key for the adapter.
-	 */
-	public Adapter adapt(Notifier notifier, Object type) {
-		return super.adapt(notifier, this);
-	}
-	
-	public Object adapt(Object object, Object type) {
-		if (isFactoryForType(type)) {
-			Object adapter = super.adapt(object, type);
-			if (!(type instanceof Class)
-					|| (((Class) type).isInstance(adapter))) {
-				return adapter;
-			}
-		}
-		
-		return null;
-	}
-	
-	/**
-	 * This adds a listener.
-	 */
-	public void addListener(INotifyChangedListener notifyChangedListener) {
-		changeNotifier.addListener(notifyChangedListener);
-	}
-	
-	/**
-	 * This removes a listener.
-	 */
-	public void removeListener(INotifyChangedListener notifyChangedListener) {
-		changeNotifier.removeListener(notifyChangedListener);
-	}
-	
-	/**
-	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
-	 */
-	public void fireNotifyChanged(Notification notification) {
-		changeNotifier.fireNotifyChanged(notification);
-		
-		if (parentAdapterFactory != null) {
-			parentAdapterFactory.fireNotifyChanged(notification);
-		}
-	}
-	
-	/**
-	 * This disposes all of the item providers created by this factory. 
-	 */
-	public void dispose() {
-		if (javaCompilationUnitItemProvider != null) {
-			javaCompilationUnitItemProvider.dispose();
-		}
-		if (javaPersistentTypeItemProvider != null) {
-			javaPersistentTypeItemProvider.dispose();
-		}
-		if (javaPersistentAttributeItemProvider != null) {
-			javaPersistentAttributeItemProvider.dispose();
-		}
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/NullLabelProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/NullLabelProvider.java
deleted file mode 100644
index 7fb6654..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/NullLabelProvider.java
+++ /dev/null
@@ -1,43 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.jface;
-
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.swt.graphics.Image;
-
-public class NullLabelProvider 
-	implements ILabelProvider 
-{
-	public static NullLabelProvider INSTANCE = new NullLabelProvider();
-	
-	
-	private NullLabelProvider() {
-		super();
-	}
-	
-	
-	public Image getImage(Object element) {
-		return null;
-	}
-	
-	public String getText(Object element) {
-		return null;
-	}
-	
-	public void addListener(ILabelProviderListener listener) {}
-	
-	public void dispose() {}
-	
-	public boolean isLabelProperty(Object element, String property) {
-		return false;
-	}
-	
-	public void removeListener(ILabelProviderListener listener) {}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/NullTreeContentProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/NullTreeContentProvider.java
deleted file mode 100644
index 864a29b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/NullTreeContentProvider.java
+++ /dev/null
@@ -1,44 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.jface;
-
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-
-public class NullTreeContentProvider 
-	implements ITreeContentProvider 
-{
-	public static NullTreeContentProvider INSTANCE = new NullTreeContentProvider();
-	
-	
-	private NullTreeContentProvider() {
-		super();
-	}
-	
-	
-	public Object[] getChildren(Object parentElement) {
-		return new Object[0];
-	}
-	
-	public Object getParent(Object element) {
-		return null;
-	}
-	
-	public boolean hasChildren(Object element) {
-		return false;
-	}
-	
-	public Object[] getElements(Object inputElement) {
-		return new Object[0];
-	}
-	
-	public void dispose() {}
-
-	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsImages.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsImages.java
deleted file mode 100644
index 7acab93..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsImages.java
+++ /dev/null
@@ -1,59 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings;
-
-import org.eclipse.jpt.ui.internal.JptUiPlugin;
-import org.eclipse.swt.graphics.Image;
-
-public class JptUiMappingsImages 
-{
-	public final static String BASIC = "full/obj16/basic";
-	
-	public final static String EMBEDDABLE = "full/obj16/embeddable";
-	
-	public final static String EMBEDDED = "full/obj16/embedded";
-	
-	public final static String EMBEDDED_ID = "full/obj16/embedded-id";
-	
-	public final static String ENTITY = "full/obj16/entity";
-	
-	public final static String ENTITY_MAPPINGS = "full/obj16/entity-mappings";
-	
-	public final static String ID = "full/obj16/id";
-	
-	public final static String NULL_ATTRIBUTE_MAPPING = "full/obj16/null-attribute-mapping";
-	
-	public final static String MANY_TO_MANY = "full/obj16/many-to-many";
-	
-	public final static String MANY_TO_ONE = "full/obj16/many-to-one";
-	
-	public final static String MAPPED_SUPERCLASS = "full/obj16/mapped-superclass";
-	
-	public final static String NULL_TYPE_MAPPING = "full/obj16/null-type-mapping";
-	
-	public final static String ONE_TO_MANY = "full/obj16/one-to-many";
-	
-	public final static String ONE_TO_ONE = "full/obj16/one-to-one";
-	
-	public final static String TEMPORAL = "full/obj16/temporal";
-	
-	public final static String TRANSIENT = "full/obj16/transient";
-	
-	public final static String VERSION = "full/obj16/version";
-	
-	
-	public static Image getImage(String imageLocator) {
-		return JptUiPlugin.getPlugin().getImageDescriptor(imageLocator).createImage();
-	}
-	
-	
-	private JptUiMappingsImages() {
-		throw new UnsupportedOperationException();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java
deleted file mode 100644
index 03380e7..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java
+++ /dev/null
@@ -1,205 +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
- ******************************************************************************/   
-package org.eclipse.jpt.ui.internal.mappings;
-
-import org.eclipse.osgi.util.NLS;
-
-public class JptUiMappingsMessages extends NLS 
-{
-	private static final String BUNDLE_NAME = "jpt_ui_mappings"; //$NON-NLS-1$
-	
-	public static String PersistentTypePage_EntityLabel;
-	public static String PersistentTypePage_EmbeddableLabel;
-	public static String PersistentTypePage_MappedSuperclassLabel;
-
-	public static String PersistentAttributePage_BasicLabel;
-	public static String PersistentAttributePage_TransientLabel;
-	public static String PersistentAttributePage_IdLabel;
-	public static String PersistentAttributePage_OneToManyLabel;
-	public static String PersistentAttributePage_ManyToOneLabel;
-	public static String PersistentAttributePage_ManyToManyLabel;
-	public static String PersistentAttributePage_VersionLabel;
-	public static String PersistentAttributePage_EmbeddedLabel;
-	public static String PersistentAttributePage_EmbeddedIdLabel;
-	public static String PersistentAttributePage_OneToOneLabel;
-
-	
-	public static String EntityGeneralSection_nameDefaultWithOneParam;
-	public static String EntityGeneralSection_nameDefaultEmpty;
-	public static String EntityGeneralSection_name;
-	
-	public static String BasicGeneralSection_name;
-	public static String BasicGeneralSection_nameDefault;
-	public static String BasicGeneralSection_fetchLabel;
-	public static String BasicGeneralSection_optionalLabel;
-	public static String BasicGeneralSection_lobLabel;
-	public static String BasicGeneralSection_temporalLabel;
-	public static String BasicGeneralSection_enumeratedLabel;
-
-	public static String EntityComposite_tableDefault;
-	public static String EntityComposite_tableNoDefaultSpecified;
-	public static String EntityComposite_inheritance;
-	public static String TableComposite_tableSection;
-	public static String TableComposite_defaultEmpty;
-	public static String TableComposite_defaultWithOneParam;
-	
-	public static String TableChooser_label;
-	public static String CatalogChooser_label;
-	public static String SchemaChooser_label;
-
-	public static String ColumnChooser_label;
-	public static String ColumnTableChooser_label;
-	
-	public static String TargetEntityChooser_label;
-	public static String TargetEntityChooser_defaultEmpty;
-	public static String TargetEntityChooser_defaultWithOneParam;
-	public static String TargetEntityChooser_browse;
-	
-	public static String NonOwningMapping_mappedByLabel;
-		
-	public static String JoinTableComposite_add;
-	public static String JoinTableComposite_defaultEmpty;
-	public static String JoinTableComposite_defaultWithOneParam;
-	public static String JoinTableComposite_edit;
-	public static String JoinTableComposite_inverseJoinColumn;
-	public static String JoinTableComposite_joinColumn;
-	public static String JoinTableComposite_mappingBetweenTwoParams;
-	public static String JoinTableComposite_mappingBetweenTwoParamsDefault;
-	public static String JoinTableComposite_mappingBetweenTwoParamsBothDefault;
-	public static String JoinTableComposite_mappingBetweenTwoParamsFirstDefault;
-	public static String JoinTableComposite_mappingBetweenTwoParamsSecDefault;
-	public static String JoinTableComposite_name;
-	public static String JoinTableComposite_remove;
-	public static String JoinTableComposite_overrideDefaultJoinColumns;
-	public static String JoinTableComposite_overrideDefaultInverseJoinColumns;
-
-	public static String JoinColumnDialog_addJoinColumn;
-	public static String JoinColumnDialog_editJoinColumn;
-	public static String JoinColumnDialog_name;
-	public static String JoinColumnDialog_insertable;
-	public static String JoinColumnDialog_updatable;
-	public static String JoinColumnDialog_defaultWithOneParam;
-	public static String JoinColumnDialog_referencedColumnName;
-	public static String JoinColumnDialog_table;
-	
-	public static String InverseJoinColumnDialog_defaultWithOneParam;
-	public static String InverseJoinColumnDialog_editInverseJoinColumn;
-
-	
-	public static String MultiRelationshipMappingComposite_cascadeType;
-	public static String MultiRelationshipMappingComposite_fetchType;
-	public static String MultiRelationshipMappingComposite_general;
-	public static String MultiRelationshipMappingComposite_joinTable;
-	public static String MultiRelationshipMappingComposite_mappedBy;
-	public static String MultiRelationshipMappingComposite_targetEntity;
-
-	public static String ColumnComposite_columnSection;
-	public static String ColumnComposite_defaultWithOneParam;
-	public static String ColumnComposite_defaultEmpty;
-	public static String ColumnComposite_insertable;	
-	public static String ColumnComposite_updatable;
-
-	public static String JoinColumnComposite_defaultEmpty;
-	public static String JoinColumnComposite_defaultWithOneParam;
-	public static String JoinColumnComposite_joinColumn;
-	public static String JoinColumnComposite_name;
-	public static String JoinColumnComposite_add;
-	public static String JoinColumnComposite_edit;
-	public static String JoinColumnComposite_mappingBetweenTwoParams;
-	public static String JoinColumnComposite_mappingBetweenTwoParamsDefault;
-	public static String JoinColumnComposite_mappingBetweenTwoParamsBothDefault;
-	public static String JoinColumnComposite_mappingBetweenTwoParamsFirstDefault;
-	public static String JoinColumnComposite_mappingBetweenTwoParamsSecDefault;
-	public static String JoinColumnComposite_remove;
-	public static String JoinColumnComposite_overrideDefaultJoinColumns;
-
-	public static String PrimaryKeyJoinColumnsComposite_overrideDefaultPrimaryKeyJoinColumns;
-	public static String PrimaryKeyJoinColumnsComposite_add;
-	public static String PrimaryKeyJoinColumnsComposite_edit;
-	public static String PrimaryKeyJoinColumnsComposite_remove;
-	public static String PrimaryKeyJoinColumnsComposite_defaultEmpty;
-	public static String PrimaryKeyJoinColumnsComposite_defaultWithOneParam;
-	public static String PrimaryKeyJoinColumnsComposite_primaryKeyJoinColumn;
-	public static String PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParams;
-	public static String PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsDefault;
-	public static String PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsBothDefault;
-	public static String PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsFirstDefault;
-	public static String PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsSecDefault;
-	
-	public static String AttributeOverridesComposite_attributeOverrides;
-	public static String AttributeOverridesComposite_overridDefault;
-	public static String OverridesComposite_joinColumn;
-
-	public static String InheritanceComposite_default;	
-	public static String InheritanceComposite_strategy;	
-	public static String InheritanceComposite_discriminatorValue;	
-	public static String InheritanceComposite_discriminatorValueDefaultWithOneParam;
-
-	public static String DiscriminatorColumnComposite_defaultEmpty;	
-	public static String DiscriminatorColumnComposite_column;	
-	public static String DiscriminatorColumnComposite_discriminatorType;
-
-	public static String GeneratedValueComposite_generatedValue;
-	public static String GeneratedValueComposite_generatorName;
-	public static String GeneratedValueComposite_strategy;
-
-	public static String TableGeneratorComposite_default;
-	public static String TableGeneratorComposite_name;
-	public static String TableGeneratorComposite_pkColumn;
-	public static String TableGeneratorComposite_pkColumnValue;
-	public static String TableGeneratorComposite_table;
-	public static String TableGeneratorComposite_tableGenerator;
-	public static String TableGeneratorComposite_valueColumn;
-
-	public static String SequenceGeneratorComposite_sequenceGenerator;
-	public static String SequenceGeneratorComposite_name;
-	public static String SequenceGeneratorComposite_sequence;
-	public static String SequenceGeneratorComposite_default;
-
-	public static String IdMappingComposite_pk_generation;	
-	public static String IdMappingComposite_primaryKeyGeneration;	
-	public static String IdMappingComposite_tableGenerator;
-	public static String IdMappingComposite_sequenceGenerator;
-
-	public static String OrderByComposite_orderByGroup;	
-	public static String OrderByComposite_noOrdering;	
-	public static String OrderByComposite_primaryKeyOrdering;	
-	public static String OrderByComposite_customOrdering;
-	public static String OrderByComposite_orderByLabel;
-
-	public static String SecondaryTablesComposite_secondaryTables;
-	public static String SecondaryTablesComposite_add;
-	public static String SecondaryTablesComposite_edit;
-	public static String SecondaryTablesComposite_remove;
-
-	public static String SecondaryTableDialog_editSecondaryTable;
-	public static String SecondaryTableDialog_name;
-	public static String SecondaryTableDialog_catalog;
-	public static String SecondaryTableDialog_schema;
-	public static String SecondaryTableDialog_defaultSchema;
-	public static String SecondaryTableDialog_defaultCatalog;	
-	
-	public static String AccessTypeCombo_default;
-	public static String EnumComboViewer_default;
-	public static String MetaDataCompleteCombo_Default;
-	public static String JoinColumnDialog_defaultTrue;
-	public static String InheritanceComposite_defaultDiscriminatorType;
-	public static String GeneratedValueComposite_default;
-	
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, JptUiMappingsMessages.class);
-	}
-
-	private JptUiMappingsMessages() {
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractJoinColumnDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractJoinColumnDialog.java
deleted file mode 100644
index 2435c30..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractJoinColumnDialog.java
+++ /dev/null
@@ -1,183 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jpt.core.internal.mappings.IAbstractJoinColumn;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-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.Shell;
-import org.eclipse.ui.PlatformUI;
-
-//if there is only 1 joinColumn and the user is editing it, they should be
-//able to define defaults.  otherwise, we probably shouldn't allow it.
-public abstract class AbstractJoinColumnDialog<E extends IAbstractJoinColumn> extends Dialog {
-
-	//if creating a new JoinColumn, this will be null, 
-	//specify the JoinColumnOwner instead in the appropriate construtor
-	private E joinColumn;
-	
-	private Combo nameCombo;
-	private Combo referencedColumnNameCombo;
-	
-	private boolean defaultNameSelected;
-	private String selectedName;
-	private boolean defaultReferencedColumnNameSelected;
-	private String selectedReferencedColumnName;
-	
-	AbstractJoinColumnDialog(Shell parent) {
-		super(parent);
-	}
-
-	AbstractJoinColumnDialog(Shell parent, E joinColumn) {
-		super(parent);
-		this.joinColumn = joinColumn;
-	}
-	
-	protected String getAddTitle() {
-		return JptUiMappingsMessages.JoinColumnDialog_addJoinColumn;
-	}
-
-	protected String getEditTitle() {
-		return JptUiMappingsMessages.JoinColumnDialog_editJoinColumn;
-	}
-	
-	protected Control createDialogArea(Composite parent) {
-		if (this.joinColumn == null) {
-			getShell().setText(getAddTitle());
-		}
-		else {
-			getShell().setText(getEditTitle());
-		}
-		Composite composite = (Composite) super.createDialogArea(parent);
-		GridLayout gridLayout = (GridLayout) composite.getLayout();
-		gridLayout.numColumns = 2;
-		
-		Label nameLabel = new Label(composite, SWT.LEFT);
-		nameLabel.setText(JptUiMappingsMessages.JoinColumnDialog_name);
-		GridData gridData = new GridData();
-		nameLabel.setLayoutData(gridData);
-		
-		this.nameCombo = new Combo(composite, SWT.LEFT);
-		gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.nameCombo.setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.nameCombo, IJpaHelpContextIds.MAPPING_JOIN_COLUMN_NAME);
-		populateNameCombo();
-	
-		Label referencedColumnNameLabel = new Label(composite, SWT.LEFT);
-		referencedColumnNameLabel.setText(JptUiMappingsMessages.JoinColumnDialog_referencedColumnName);
-		gridData = new GridData();
-		referencedColumnNameLabel.setLayoutData(gridData);
-
-		this.referencedColumnNameCombo = new Combo(composite, SWT.LEFT);
-		gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.referencedColumnNameCombo.setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.referencedColumnNameCombo, IJpaHelpContextIds.MAPPING_JOIN_REFERENCED_COLUMN);
-		populateReferencedNameCombo();
-
-		return composite;
-	}
-	
-	protected void populateNameCombo() {
-		this.nameCombo.removeAll();
-		if (getJoinColumn() != null) {
-			this.nameCombo.add(NLS.bind(JptUiMappingsMessages.JoinColumnDialog_defaultWithOneParam, getJoinColumn().getDefaultName()));
-		}
-		Table table = getNameTable();
-		if (table != null) {
-			for (Iterator i = table.columnNames(); i.hasNext(); ) {
-				this.nameCombo.add((String) i.next());
-			}
-		}
-		if (getJoinColumn() != null) {
-			if (getJoinColumn().getSpecifiedName() != null) {
-				this.nameCombo.setText(getJoinColumn().getSpecifiedName());
-			}
-			else {
-				this.nameCombo.select(0);
-			}
-		}
-	}
-	
-	protected Combo getNameCombo() {
-		return this.nameCombo;
-	}
-	
-	protected Combo getReferencedColumnNameCombo() {
-		return this.referencedColumnNameCombo;
-	}
-	
-	protected abstract Table getNameTable();
-	
-	protected abstract Table getReferencedNameTable();
-
-	protected void populateReferencedNameCombo() {
-		if (getJoinColumn() != null) {
-			this.referencedColumnNameCombo.add(NLS.bind(JptUiMappingsMessages.JoinColumnDialog_defaultWithOneParam, getJoinColumn().getDefaultReferencedColumnName()));
-		}
-		Table referencedNameTable = getReferencedNameTable();
-		if (referencedNameTable != null) {
-			for (Iterator i = referencedNameTable.columnNames(); i.hasNext(); ) {
-				this.referencedColumnNameCombo.add((String) i.next());
-			}
-		}
-		if (getJoinColumn() != null) {
-			if (getJoinColumn().getSpecifiedReferencedColumnName() != null) {
-				this.referencedColumnNameCombo.setText(getJoinColumn().getSpecifiedReferencedColumnName());
-			}
-			else {
-				this.referencedColumnNameCombo.select(0);
-			}
-		}
-	}
-	
-	protected E getJoinColumn() {
-		return this.joinColumn;
-	}
-	
-	protected boolean isDefaultNameSelected() {
-		return this.defaultNameSelected;
-	}
-	
-	protected String getSelectedName() {
-		return this.selectedName;
-	}
-	
-	protected boolean isDefaultReferencedColumnNameSelected() {
-		return this.defaultReferencedColumnNameSelected;
-	}
-	
-	protected String getReferencedColumnName() {
-		return this.selectedReferencedColumnName;			
-	}
-	
-	public boolean close() {
-		this.defaultNameSelected = this.nameCombo.getSelectionIndex() == 0;
-		this.selectedName = this.nameCombo.getText();
-		this.defaultReferencedColumnNameSelected = this.referencedColumnNameCombo.getSelectionIndex() == 0;
-		this.selectedReferencedColumnName = this.referencedColumnNameCombo.getText();
-		return super.close();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/BasicComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/BasicComposite.java
deleted file mode 100644
index 3a2542b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/BasicComposite.java
+++ /dev/null
@@ -1,357 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.jpt.core.internal.mappings.DefaultEagerFetchType;
-import org.eclipse.jpt.core.internal.mappings.DefaultTrueBoolean;
-import org.eclipse.jpt.core.internal.mappings.EnumType;
-import org.eclipse.jpt.core.internal.mappings.IBasic;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.core.internal.mappings.TemporalType;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.details.EnumComboViewer.EnumHolder;
-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.swt.widgets.Control;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class BasicComposite extends BaseJpaComposite 
-{
-	private IBasic basic;
-	
-	private ColumnComposite columnComposite;
-
-	private EnumComboViewer fetchTypeComboViewer;
-	private EnumComboViewer optionalComboViewer;
-	private LobCheckBox lobCheckBox;
-	private EnumComboViewer temporalTypeViewer;
-	private EnumComboViewer enumeratedTypeViewer;
-		
-	public BasicComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		composite.setLayout(layout);
-		
-		Control generalControl = buildGeneralComposite(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		generalControl.setLayoutData(gridData);
-
-	}
-	
-	private Control buildGeneralComposite(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		Composite generalComposite = getWidgetFactory().createComposite(composite);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		generalComposite.setLayout(layout);	
-
-		this.columnComposite = new ColumnComposite(generalComposite, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.columnComposite.getControl().setLayoutData(gridData);		
-		
-		CommonWidgets.buildFetchLabel(generalComposite, getWidgetFactory());
-		this.fetchTypeComboViewer = CommonWidgets.buildFetchTypeComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.fetchTypeComboViewer.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(fetchTypeComboViewer.getControl(), IJpaHelpContextIds.MAPPING_FETCH_TYPE);
-
-		CommonWidgets.buildOptionalLabel(generalComposite, getWidgetFactory());
-		this.optionalComboViewer = CommonWidgets.buildEnumComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.optionalComboViewer.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(optionalComboViewer.getControl(), IJpaHelpContextIds.MAPPING_OPTIONAL);
-			
-		CommonWidgets.buildTemporalLabel(generalComposite, getWidgetFactory());
-		this.temporalTypeViewer = CommonWidgets.buildEnumComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.temporalTypeViewer.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(temporalTypeViewer.getControl(), IJpaHelpContextIds.MAPPING_TEMPORAL);
-
-		CommonWidgets.buildEnumeratedLabel(generalComposite, getWidgetFactory());
-		this.enumeratedTypeViewer = CommonWidgets.buildEnumComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.enumeratedTypeViewer.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(enumeratedTypeViewer.getControl(), IJpaHelpContextIds.MAPPING_ENUMERATED);
-
-	    this.lobCheckBox = buildLobCheckBox(generalComposite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.lobCheckBox.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(lobCheckBox.getControl(), IJpaHelpContextIds.MAPPING_LOB);
-
-		return generalComposite;
-	}
-	
-	private LobCheckBox buildLobCheckBox(Composite parent) {
-		return new LobCheckBox(parent, this.commandStack, getWidgetFactory());
-	}
-	
-	public void doPopulate(EObject obj) {
-		this.basic = (IBasic) obj;
-		if (this.basic != null) {
-			this.columnComposite.populate(this.basic.getColumn());
-		}
-		else {
-			this.columnComposite.populate(null);
-		}
-		this.fetchTypeComboViewer.populate(new FetchHolder(this.basic));
-		this.optionalComboViewer.populate(new OptionalHolder(this.basic));
-		this.lobCheckBox.populate(this.basic);
-		this.temporalTypeViewer.populate(new TemporalTypeHolder(this.basic));
-		this.enumeratedTypeViewer.populate(new EnumeratedTypeHolder(this.basic));
-	}
-	
-	public void doPopulate() {
-		this.columnComposite.populate();
-		this.fetchTypeComboViewer.populate();
-		this.optionalComboViewer.populate();
-		this.lobCheckBox.populate();
-		this.temporalTypeViewer.populate();
-		this.enumeratedTypeViewer.populate();
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-	
-	@Override
-	public void dispose() {
-		this.columnComposite.dispose();
-		this.fetchTypeComboViewer.dispose();
-		this.optionalComboViewer.dispose();
-		this.lobCheckBox.dispose();
-		this.temporalTypeViewer.dispose();
-		this.enumeratedTypeViewer.dispose();
-		super.dispose();
-	}
-	
-	protected IBasic getBasic() {
-		return this.basic;
-	}
-	
-	private class FetchHolder extends EObjectImpl implements EnumHolder {
-		
-		private IBasic basic;
-		
-		FetchHolder(IBasic basic) {
-			super();
-			this.basic = basic;
-		}
-		
-		public Object get() {
-			return this.basic.getFetch();
-		}
-		
-		public void set(Object enumSetting) {
-			this.basic.setFetch((DefaultEagerFetchType) enumSetting);
-			
-		}
-		
-		public Class featureClass() {
-			return IBasic.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.IBASIC__FETCH;
-		}
-		
-		public EObject wrappedObject() {
-			return this.basic;
-		}
-		
-		public Object[] enumValues() {
-			return DefaultEagerFetchType.VALUES.toArray();
-		}
-		
-		public Object defaultValue() {
-			return DefaultEagerFetchType.DEFAULT;
-		}
-		
-		public String defaultString() {
-			//TODO move this out of the UI into the model
-			return "Eager";
-		}
-	}
-
-	
-	private class OptionalHolder extends EObjectImpl implements EnumHolder {
-		
-		private IBasic basic;
-		
-		OptionalHolder(IBasic basic) {
-			super();
-			this.basic = basic;
-		}
-		
-		public Object get() {
-			return this.basic.getOptional();
-		}
-		
-		public void set(Object enumSetting) {
-			this.basic.setOptional((DefaultTrueBoolean) enumSetting);
-		}
-		
-		public Class featureClass() {
-			return IBasic.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.IBASIC__OPTIONAL;
-		}
-		
-		public EObject wrappedObject() {
-			return this.basic;
-		}
-		
-		public Object[] enumValues() {
-			return DefaultTrueBoolean.VALUES.toArray();
-		}
-		
-		public Object defaultValue() {
-			return DefaultTrueBoolean.DEFAULT;
-		}
-		
-		public String defaultString() {
-			//TODO move this out of the UI into the model
-			return "True";
-		}
-
-	}
-
-	
-	private class TemporalTypeHolder extends EObjectImpl implements EnumHolder {
-		
-		private IBasic basic;
-		
-		TemporalTypeHolder(IBasic basic) {
-			super();
-			this.basic = basic;
-		}
-		
-		public Object get() {
-			return this.basic.getTemporal();
-		}
-		
-		public void set(Object enumSetting) {
-			this.basic.setTemporal((TemporalType) enumSetting);
-		}
-		
-		public Class featureClass() {
-			return IBasic.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.IBASIC__TEMPORAL;
-		}
-		
-		public EObject wrappedObject() {
-			return this.basic;
-		}
-		
-		public Object[] enumValues() {
-			return TemporalType.VALUES.toArray();
-		}
-		
-		/**
-		 * TemporalType has no Default, return null
-		 */
-		public Object defaultValue() {
-			return null;
-		}
-		
-		/**
-		 * TemporalType has no Default, return null
-		 */
-		public String defaultString() {
-			return null;
-		}
-	}
-	
-	private class EnumeratedTypeHolder extends EObjectImpl implements EnumHolder {
-		
-		private IBasic basic;
-		
-		EnumeratedTypeHolder(IBasic basic) {
-			super();
-			this.basic = basic;
-		}
-		
-		public Object get() {
-			return this.basic.getEnumerated();
-		}
-		
-		public void set(Object enumSetting) {
-			this.basic.setEnumerated((EnumType) enumSetting);
-		}
-		
-		public Class featureClass() {
-			return IBasic.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.IBASIC__ENUMERATED;
-		}
-		
-		public EObject wrappedObject() {
-			return this.basic;
-		}
-		
-		public Object[] enumValues() {
-			return EnumType.VALUES.toArray();
-		}
-		
-		public Object defaultValue() {
-			return EnumType.DEFAULT;
-		}
-		
-		public String defaultString() {
-			//TODO move this out of the UI into the model
-			return "Ordinal";
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/CascadeComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/CascadeComposite.java
deleted file mode 100644
index a2eb0eb..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/CascadeComposite.java
+++ /dev/null
@@ -1,378 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.ICascade;
-import org.eclipse.jpt.core.internal.mappings.IRelationshipMapping;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-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.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class CascadeComposite extends BaseJpaComposite 
-{
-	private IRelationshipMapping relationshipMapping;	
-	private ICascade cascade;
-	
-	private Adapter relationshipMappingListener;
-	private Adapter cascadeListener;
-	
-	
-	private Button allCheckBox;
-	private Button persistCheckBox;
-	private Button mergeCheckBox;
-	private Button removeCheckBox;
-	private Button refreshCheckBox;
-	
-	public CascadeComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.relationshipMappingListener = buildRelationshipMappingListener();
-		this.cascadeListener = buildCascadeListener();
-	}
-
-	private Adapter buildRelationshipMappingListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				relationshipMappingChanged(notification);
-			}
-		};
-	}
-
-	private Adapter buildCascadeListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				cascadeChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		composite.setLayout(new FillLayout());
-		
-		Group cascadeGroup = getWidgetFactory().createGroup(composite, "Cascade");
-		GridLayout layout = new GridLayout(5, false);
-		cascadeGroup.setLayout(layout);
-		
-		GridData gridData;
-		
-		this.allCheckBox = createAllCheckBox(cascadeGroup);
-		gridData = new GridData();
-		this.allCheckBox.setLayoutData(gridData);
-
-		this.persistCheckBox = createPersistCheckBox(cascadeGroup);
-		gridData = new GridData();
-		this.persistCheckBox.setLayoutData(gridData);
-
-		this.mergeCheckBox = createMergeCheckBox(cascadeGroup);
-		gridData = new GridData();
-		this.mergeCheckBox.setLayoutData(gridData);
-
-		this.removeCheckBox = createRemoveCheckBox(cascadeGroup);
-		gridData = new GridData();
-		this.removeCheckBox.setLayoutData(gridData);
-
-		this.refreshCheckBox = createRefreshCheckBox(cascadeGroup);
-		gridData = new GridData();
-		this.refreshCheckBox.setLayoutData(gridData);
-	}
-	
-	private Button createAllCheckBox(Composite composite) {
-		Button button = getWidgetFactory().createButton(composite, "All", SWT.CHECK);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				CascadeComposite.this.allSelected(e);
-			}
-			public void widgetSelected(SelectionEvent e) {
-				CascadeComposite.this.allSelected(e);				
-			}
-		});
-		return button;
-	}
-	
-	protected void allSelected(SelectionEvent e) {
-		boolean setSelection = initializeCascade();
-		if (setSelection) {
-			this.cascade.setAll(this.allCheckBox.getSelection());
-		}
-	}
-	
-	private boolean initializeCascade() {
-		if (allCheckBoxesFalse() && this.cascade != null) {
-			disengageCascadeListener();
-			this.relationshipMapping.setCascade(null);
-			return false;
-		}
-		if (this.cascade == null) {
-			this.cascade = this.relationshipMapping.createCascade();
-			this.relationshipMapping.setCascade(this.cascade);
-			engageCascadeListener();
-		}
-		return true;
-	}
-	
-	private Button createPersistCheckBox(Composite composite) {
-		Button button = getWidgetFactory().createButton(composite, "Persist", SWT.CHECK);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				CascadeComposite.this.persistSelected(e);
-			}
-			public void widgetSelected(SelectionEvent e) {
-				CascadeComposite.this.persistSelected(e);				
-			}
-		});
-		return button;
-	}
-	
-	protected void persistSelected(SelectionEvent e) {
-		boolean setSelection = initializeCascade();
-		if (setSelection) {
-			this.cascade.setPersist(this.persistCheckBox.getSelection());
-		}
-	}
-
-	private Button createMergeCheckBox(Composite composite) {
-		Button button = getWidgetFactory().createButton(composite, "Merge", SWT.CHECK);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				CascadeComposite.this.mergeSelected(e);
-			}
-			public void widgetSelected(SelectionEvent e) {
-				CascadeComposite.this.mergeSelected(e);				
-			}
-		});
-		return button;
-	}
-	
-	protected void mergeSelected(SelectionEvent e) {
-		boolean setSelection = initializeCascade();
-		if (setSelection) {
-			this.cascade.setMerge(this.mergeCheckBox.getSelection());
-		}
-	}
-	
-	private Button createRemoveCheckBox(Composite composite) {
-		Button button = getWidgetFactory().createButton(composite, "Remove", SWT.CHECK);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				CascadeComposite.this.removeSelected(e);
-			}
-			public void widgetSelected(SelectionEvent e) {
-				CascadeComposite.this.removeSelected(e);				
-			}
-		});
-		return button;
-	}
-	
-	protected void removeSelected(SelectionEvent e) {
-		boolean setSelection = initializeCascade();
-		if (setSelection) {
-			this.cascade.setRemove(this.removeCheckBox.getSelection());
-		}
-	}
-	
-	private Button createRefreshCheckBox(Composite composite) {
-		Button button = getWidgetFactory().createButton(composite, "Refresh", SWT.CHECK);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				CascadeComposite.this.refreshSelected(e);
-			}
-			public void widgetSelected(SelectionEvent e) {
-				CascadeComposite.this.refreshSelected(e);				
-			}
-		});
-		return button;
-	}
-	
-	protected void refreshSelected(SelectionEvent e) {
-		boolean setSelection = initializeCascade();
-		if (setSelection) {
-			this.cascade.setRefresh(this.refreshCheckBox.getSelection());
-		}
-	}
-	
-	private boolean allCheckBoxesFalse() {
-		return !(this.allCheckBox.getSelection() 
-				|| this.persistCheckBox.getSelection() 
-				|| this.mergeCheckBox.getSelection() 
-				|| this.removeCheckBox.getSelection() 
-				|| this.refreshCheckBox.getSelection());
-		
-			
-	}
-	
-	private void relationshipMappingChanged(Notification notification) {
-		if (notification.getFeatureID(IRelationshipMapping.class) == 
-				JpaCoreMappingsPackage.IRELATIONSHIP_MAPPING__CASCADE) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						if (CascadeComposite.this.cascade != null) {
-							disengageCascadeListener();
-						}
-						CascadeComposite.this.cascade = CascadeComposite.this.relationshipMapping.getCascade();
-						populateCascade();
-						
-						if (CascadeComposite.this.cascade != null) {
-							engageCascadeListener();
-						}
-					}
-				});
-		}
-	}
-	
-	private void cascadeChanged(final Notification notification) {
-		switch (notification.getFeatureID(ICascade.class)) {
-			case JpaCoreMappingsPackage.ICASCADE__ALL :
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							if (getControl().isDisposed()) {
-								return;
-							}
-							CascadeComposite.this.allCheckBox.setSelection(notification.getNewBooleanValue());
-						}
-					});			
-				break;
-			case JpaCoreMappingsPackage.ICASCADE__PERSIST :
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							if (getControl().isDisposed()) {
-								return;
-							}
-							CascadeComposite.this.persistCheckBox.setSelection(notification.getNewBooleanValue());
-						}
-					});			
-				break;
-			case JpaCoreMappingsPackage.ICASCADE__MERGE :
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							if (getControl().isDisposed()) {
-								return;
-							}
-							CascadeComposite.this.mergeCheckBox.setSelection(notification.getNewBooleanValue());
-						}
-					});			
-				break;
-			case JpaCoreMappingsPackage.ICASCADE__REMOVE :
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							if (getControl().isDisposed()) {
-								return;
-							}
-							CascadeComposite.this.removeCheckBox.setSelection(notification.getNewBooleanValue());
-						}
-					});			
-				break;
-			case JpaCoreMappingsPackage.ICASCADE__REFRESH :
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							if (getControl().isDisposed()) {
-								return;
-							}
-							CascadeComposite.this.refreshCheckBox.setSelection(notification.getNewBooleanValue());
-						}
-					});			
-				break;
-			default :
-				break;
-		}
-		if (notification.getFeatureID(ICascade.class) == 
-				JpaCoreMappingsPackage.ICASCADE__ALL) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						CascadeComposite.this.allCheckBox.setSelection(notification.getNewBooleanValue());
-					}
-				});
-		}
-		
-	}
-	
-
-	public void doPopulate(EObject obj) {
-		this.relationshipMapping = (IRelationshipMapping) obj;
-		
-		if (this.relationshipMapping != null) {
-			this.cascade = this.relationshipMapping.getCascade();
-			populateCascade();
-		}
-	}
-	
-	private void populateCascade() {
-		if (this.cascade != null) {
-			this.allCheckBox.setSelection(this.cascade.isAll());
-			this.persistCheckBox.setSelection(this.cascade.isPersist());
-			this.mergeCheckBox.setSelection(this.cascade.isMerge());
-			this.removeCheckBox.setSelection(this.cascade.isRemove());
-			this.refreshCheckBox.setSelection(this.cascade.isRefresh());
-		}
-		else {
-			this.allCheckBox.setSelection(false);
-			this.persistCheckBox.setSelection(false);
-			this.mergeCheckBox.setSelection(false);
-			this.removeCheckBox.setSelection(false);
-			this.refreshCheckBox.setSelection(false);		
-		}
-	}
-	
-	public void doPopulate() {
-	}
-	
-	protected void engageListeners() {
-		if (this.relationshipMapping != null) {
-			this.relationshipMapping.eAdapters().add(this.relationshipMappingListener);
-			if (this.cascade != null) {
-				engageCascadeListener();
-			}
-		}
-	}
-	
-	protected void engageCascadeListener() {
-		this.cascade.eAdapters().add(this.cascadeListener);
-	}
-	
-	protected void disengageCascadeListener() {
-		this.cascade.eAdapters().remove(this.cascadeListener);
-	}
-	
-	protected void disengageListeners() {
-		if (this.relationshipMapping != null) {
-			this.relationshipMapping.eAdapters().remove(this.relationshipMappingListener);
-			if (this.cascade != null) {
-				disengageCascadeListener();
-			}
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/CatalogCombo.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/CatalogCombo.java
deleted file mode 100644
index c51d015..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/CatalogCombo.java
+++ /dev/null
@@ -1,304 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.ITable;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.db.internal.Connection;
-import org.eclipse.jpt.db.internal.ConnectionListener;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class CatalogCombo extends BaseJpaController
-{
-	private ITable table;
-
-	private Adapter listener;
-
-	/**
-	 * Caching the connectionProfile so we can remove the listener. If the
-	 * cached table object has been removed from the model then we no longer
-	 * have access to the parent and cannot find the connectionProfile
-	 */
-	private ConnectionProfile connectionProfile;
-
-	private ConnectionListener connectionListener;
-
-	private CCombo combo;
-
-	public CatalogCombo(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		this.listener = this.buildTableListener();
-		this.connectionListener = this.buildConnectionListener();
-	}
-
-	private Adapter buildTableListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				CatalogCombo.this.catalogChanged(notification);
-			}
-		};
-	}
-
-	private ConnectionListener buildConnectionListener() {
-		return new ConnectionListener() {
-			public void aboutToClose(Connection connection) {
-			// not interested to this event.
-			}
-
-			public void closed(Connection connection) {
-				getCombo().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						CatalogCombo.this.populateCatalogCombo();
-					}
-				});
-			}
-
-			public void modified(Connection connection) {
-				getCombo().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						CatalogCombo.this.populateCatalogCombo();
-					}
-				});
-			}
-
-			public boolean okToClose(Connection connection) {
-				// not interested to this event.
-				return true;
-			}
-
-			public void opened(Connection connection) {
-				getCombo().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						CatalogCombo.this.populateCatalogCombo();
-					}
-				});
-			}
-
-			public void databaseChanged(Connection connection, final Database database) {
-				getControl().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (database == CatalogCombo.this.getDatabase()) {
-							if (!getControl().isDisposed()) {
-								CatalogCombo.this.populateCatalogCombo();
-							}
-						}
-					}
-				});
-			}
-
-			public void schemaChanged(Connection connection, final Schema schema) {
-			// not interested to this event.
-			}
-
-			public void tableChanged(Connection connection, final Table table) {
-			// not interested to this event.
-			}
-		};
-	}
-
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		this.combo.add(JptUiMappingsMessages.TableComposite_defaultEmpty);
-		this.combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String catalogText = ((CCombo) e.getSource()).getText();
-				if (catalogText.equals("")) { //$NON-NLS-1$
-					catalogText = null;
-					if (CatalogCombo.this.table.getSpecifiedCatalog() == null || CatalogCombo.this.table.getSpecifiedCatalog().equals("")) { //$NON-NLS-1$
-						return;
-					}
-				}
-				if (catalogText != null && combo.getItemCount() > 0 && catalogText.equals(combo.getItem(0))) {
-					catalogText = null;
-				}
-				if (CatalogCombo.this.table.getSpecifiedCatalog() == null && catalogText != null) {
-					CatalogCombo.this.setSpecifiedCatalog(catalogText);
-				}
-				if (CatalogCombo.this.table.getSpecifiedCatalog() != null && !CatalogCombo.this.table.getSpecifiedCatalog().equals(catalogText)) {
-					CatalogCombo.this.setSpecifiedCatalog(catalogText);
-				}
-			}
-		});
-	}
-
-	private void setSpecifiedCatalog(String catalogName) {
-		this.table.setSpecifiedCatalog(catalogName);
-		this.getConnectionProfile().setCatalogName(catalogName);
-	}
-
-	protected void catalogChanged(Notification notification) {
-		if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__SPECIFIED_CATALOG) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					CatalogCombo.this.populateCatalogName();
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__DEFAULT_CATALOG) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					CatalogCombo.this.populateDefaultCatalogName();
-				}
-			});
-		}
-	}
-
-	public void doPopulate(EObject obj) {
-		this.table = (ITable) obj;
-		if (this.table != null) {
-			this.populateCatalogCombo();
-		}
-		else {
-			this.connectionProfile = null;
-		}
-	}
-
-	public void doPopulate() {
-		this.populateCatalogCombo();
-	}
-
-	protected Database getDatabase() {
-		return this.getConnectionProfile().getDatabase();
-	}
-
-	private ConnectionProfile getConnectionProfile() {
-		if (this.connectionProfile == null) {
-			this.connectionProfile = this.table.getJpaProject().connectionProfile();
-		}
-		return this.connectionProfile;
-	}
-
-	private void populateCatalogCombo() {
-		if (this.table == null) {
-			return;
-		}
-		this.populateDefaultCatalogName();
-		if (this.getConnectionProfile().isConnected()) {
-			this.combo.remove(1, this.combo.getItemCount() - 1);
-			Database database = this.getDatabase();
-			if (database != null) {
-				Iterator<String> catalogs = database.catalogNames();
-				for (Iterator<String> stream = CollectionTools.sort(catalogs); stream.hasNext();) {
-					this.combo.add(stream.next());
-				}
-			}
-		}
-		else {
-			this.combo.remove(1, this.combo.getItemCount() - 1);
-		}
-		this.populateCatalogName();
-	}
-
-	protected void populateDefaultCatalogName() {
-		// String defaultCatalogName = this.table.getDefaultCatalog(); //
-		// DefaultCatalog cannot be initialized if DB not online
-		String defaultCatalogName = this.getDatabase().getDefaultCatalogName(); // TOREVIEW
-		int selectionIndex = combo.getSelectionIndex();
-		combo.setItem(0, NLS.bind(JptUiMappingsMessages.TableComposite_defaultWithOneParam, defaultCatalogName));
-		if (selectionIndex == 0) {
-			combo.clearSelection();
-			combo.select(0);
-		}
-	}
-
-	protected void populateCatalogName() {
-		if (this.table == null) {
-			return;
-		}
-		String catalogName = this.table.getSpecifiedCatalog();
-		// String defaultCatalogName = this.table.getDefaultCatalog(); //
-		// DefaultCatalog cannot be initialized if DB not online
-		String defaultCatalogName = this.getDatabase().getDefaultCatalogName(); // TOREVIEW
-		if (!StringTools.stringIsEmpty(catalogName)) {
-			if (!this.combo.getText().equals(catalogName)) {
-				this.combo.setText(catalogName);
-			}
-		}
-		else {
-			if (!this.combo.getText().equals(NLS.bind(JptUiMappingsMessages.TableComposite_defaultWithOneParam, defaultCatalogName))) {
-				this.combo.select(0);
-			}
-		}
-	}
-
-	public CCombo getCombo() {
-		return this.combo;
-	}
-
-	@Override
-	public Control getControl() {
-		return getCombo();
-	}
-
-	@Override
-	protected void disengageListeners() {
-		if (this.table != null) {
-			this.removeConnectionListener();
-			this.table.eAdapters().remove(this.listener);
-		}
-	}
-
-	@Override
-	protected void engageListeners() {
-		if (this.table != null) {
-			this.table.eAdapters().add(this.listener);
-			this.addConnectionListener();
-		}
-	}
-
-	private void addConnectionListener() {
-		this.getConnectionProfile().addConnectionListener(this.connectionListener);
-	}
-
-	private void removeConnectionListener() {
-		this.getConnectionProfile().removeConnectionListener(this.connectionListener);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ColumnComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ColumnComposite.java
deleted file mode 100644
index 7502f79..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ColumnComposite.java
+++ /dev/null
@@ -1,567 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.mappings.DefaultTrueBoolean;
-import org.eclipse.jpt.core.internal.mappings.IAbstractColumn;
-import org.eclipse.jpt.core.internal.mappings.IColumn;
-import org.eclipse.jpt.core.internal.mappings.INamedColumn;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.db.internal.Connection;
-import org.eclipse.jpt.db.internal.ConnectionListener;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.EnumComboViewer.EnumHolder;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-//TODO repopulate this panel based on the Entity table changing
-public class ColumnComposite extends BaseJpaComposite
-{
-	
-	private IColumn column;
-
-	private Adapter columnListener;
-	private ConnectionListener connectionListener;
-		
-	protected CCombo columnCombo;
-	protected CCombo tableCombo;
-	protected EnumComboViewer insertableComboViewer;
-	protected EnumComboViewer updatableComboViewer;
-
-	private ConnectionProfile connectionProfile;
-	
-	public ColumnComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.columnListener = buildColumnListener();
-		this.connectionListener = buildConnectionListener();
-	}
-	
-	private Adapter buildColumnListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				columnChanged(notification);
-			}
-		};
-	}
-
-    private ConnectionListener buildConnectionListener() {
-		return new ConnectionListener() {
-
-			public void aboutToClose(Connection connection) {
-				// not interested to this event.
-			}
-
-			public void closed(Connection connection) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						ColumnComposite.this.populateColumnCombo();
-					}
-				});
-			}
-
-			public void modified(Connection connection) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						ColumnComposite.this.populateColumnCombo();
-					}
-				});
-			}
-
-			public boolean okToClose(Connection connection) {
-				// not interested to this event.
-				return true;
-			}
-
-			public void opened(Connection connection) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						ColumnComposite.this.populateColumnCombo();
-					}
-				});
-			}
-
-			public void databaseChanged(Connection connection, final Database database) {
-				return;
-			}
-
-			public void schemaChanged(Connection connection, final Schema schema) {
-				return;
-			}
-
-			public void tableChanged(Connection connection, final Table table) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if(table == getDbTable()) {
-							if (!getControl().isDisposed()) {
-								ColumnComposite.this.populateColumnCombo();
-							}
-						}
-					}
-				});
-			}
-		};
-    }
-    
-	@Override
-	protected void initializeLayout(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;		
-		composite.setLayout(layout);	
-		
-		Group columnGroup = getWidgetFactory().createGroup(composite, JptUiMappingsMessages.ColumnComposite_columnSection);
-		layout = new GridLayout();
-		layout.marginHeight = 0;				
-		columnGroup.setLayout(layout);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace= true;
-		columnGroup.setLayoutData(gridData);
-
-		//created this composite because combos as direct children of a Group do not have a border, no clue why
-		Composite intermediaryComposite = getWidgetFactory().createComposite(columnGroup);
-		layout = new GridLayout(2, false);
-		layout.marginWidth = 0;		
-		intermediaryComposite.setLayout(layout);
-		
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace= true;
-		intermediaryComposite.setLayoutData(gridData);
-		
-		
-		CommonWidgets.buildColumnLabel(intermediaryComposite, getWidgetFactory());
-		
-		this.columnCombo = buildColumnCombo(intermediaryComposite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.columnCombo.setLayoutData(gridData);
-		helpSystem.setHelp(columnCombo, IJpaHelpContextIds.MAPPING_COLUMN);
-		
-		
-		CommonWidgets.buildColumnTableLabel(intermediaryComposite, getWidgetFactory());
-		
-		this.tableCombo = buildTableCombo(intermediaryComposite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.tableCombo.setLayoutData(gridData);
-		helpSystem.setHelp(tableCombo, IJpaHelpContextIds.MAPPING_COLUMN_TABLE);
-
-		getWidgetFactory().createLabel(intermediaryComposite, JptUiMappingsMessages.ColumnComposite_insertable);
-
-		this.insertableComboViewer = new EnumComboViewer(intermediaryComposite, this.commandStack, getWidgetFactory());
-		this.insertableComboViewer.getControl().setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
-		helpSystem.setHelp(this.insertableComboViewer.getControl(), IJpaHelpContextIds.MAPPING_COLUMN_INSERTABLE);
-
-		getWidgetFactory().createLabel(intermediaryComposite, JptUiMappingsMessages.ColumnComposite_updatable);
-
-		this.updatableComboViewer = new EnumComboViewer(intermediaryComposite, this.commandStack, getWidgetFactory());
-		this.updatableComboViewer.getControl().setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
-		helpSystem.setHelp(this.updatableComboViewer.getControl(), IJpaHelpContextIds.MAPPING_COLUMN_UPDATABLE);
-	}
-	
-	
-	private CCombo buildColumnCombo(Composite parent) {
-		final CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-  		combo.add(JptUiMappingsMessages.ColumnComposite_defaultEmpty);
-		combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String columnText = ((CCombo) e.getSource()).getText();
-				if (columnText.equals("")) { //$NON-NLS-1$
-					columnText = null;
-					if (column.getSpecifiedName() == null || column.getSpecifiedName().equals("")) { //$NON-NLS-1$
-						return;
-					}
-				}
-				
-				if (columnText != null && combo.getItemCount() > 0 && columnText.equals(combo.getItem(0))) {
-					columnText = null;
-				}
-
-				if (column.getSpecifiedName() == null && columnText != null) {
-					column.setSpecifiedName(columnText);
-				}
-				if (column.getSpecifiedName() != null && !column.getSpecifiedName().equals(columnText)) {
-					column.setSpecifiedName(columnText);
-				}
-			}
-		});
-		return combo;
-	}
-	
-	private CCombo buildTableCombo(Composite parent) {
-		final CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-  		combo.add(JptUiMappingsMessages.ColumnComposite_defaultEmpty);
-		combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String tableText = ((CCombo) e.getSource()).getText();
-				if (tableText.equals("")) { //$NON-NLS-1$
-					tableText = null;
-					if (column.getSpecifiedTable() == null || column.getSpecifiedTable().equals("")) { //$NON-NLS-1$
-						return;
-					}
-				}
-				
-				if (tableText != null && combo.getItemCount() > 0 && tableText.equals(combo.getItem(0))) {
-					tableText = null;
-				}
-
-				if (column.getSpecifiedTable() == null && tableText != null) {
-					column.setSpecifiedTable(tableText);
-				}
-				if (column.getSpecifiedTable() != null && !column.getSpecifiedTable().equals(tableText)) {
-					column.setSpecifiedTable(tableText);
-				}
-			}
-		});
-		return combo;
-		
-	}
-	
-	protected void columnChanged(Notification notification) {
-		if (notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__SPECIFIED_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed() || isPopulating()) {
-						return;
-					}
-					populateColumnName();
-				}
-			});
-		}
-		else if (notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__DEFAULT_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateDefaultColumnName();
-				}
-			});
-		}
-		else if (notification.getFeatureID(IAbstractColumn.class) == JpaCoreMappingsPackage.IABSTRACT_COLUMN__DEFAULT_TABLE) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateDefaultColumnTable();
-					populateColumnCombo();
-				}
-			});
-		}
-		else if (notification.getFeatureID(IAbstractColumn.class) == JpaCoreMappingsPackage.IABSTRACT_COLUMN__SPECIFIED_TABLE) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateColumnTable();
-					populateColumnCombo();
-				}
-			});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.column != null) {
-			this.column.eAdapters().add(this.columnListener);
-			this.addConnectionListener();
-		}
-	}
-
-	@Override
-	protected void disengageListeners() {
-		if (this.column != null) {
-			this.removeConnectionListener();
-			this.column.eAdapters().remove(this.columnListener);
-		}
-	}
-
-	private ConnectionProfile getConnectionProfile() {
-		if (this.connectionProfile == null) {
-			this.connectionProfile = this.column.getJpaProject().connectionProfile();
-		}
-		return this.connectionProfile;
-	}
-	
-	private void addConnectionListener() {
-		this.getConnectionProfile().addConnectionListener(this.connectionListener);
-	}
-	
-	private void removeConnectionListener() {
-		this.getConnectionProfile().removeConnectionListener(this.connectionListener);
-	}
-	
-	private Table getDbTable() {
-		return this.column.dbTable();
-	}
-
-	private void populateColumnCombo() {
-		//TODO don't do instanceof check here - check on Table, or isRoot check on Entity
-		//this.tableCombo.setEnabled(!(this.table instanceof SingleTableInheritanceChildTableImpl));
-		populateDefaultColumnName();
-
-		if (this.getConnectionProfile().isConnected()) {
-			this.columnCombo.remove(1, this.columnCombo.getItemCount()-1);
-			Table table = getDbTable();
-			if (table != null) {
-				for (Iterator i = CollectionTools.sort(CollectionTools.list(table.columnNames())).iterator(); i.hasNext();) {
-					this.columnCombo.add((String) i.next());
-				}
-			}
-		}
-		else {
-			this.columnCombo.remove(1, this.columnCombo.getItemCount()-1);
-		}
-		populateColumnName();
-	}
-	
-	protected void populateDefaultColumnName() {
-		String defaultTableName = column.getDefaultName();
-		int selectionIndex = columnCombo.getSelectionIndex();
-		columnCombo.setItem(0, NLS.bind(JptUiMappingsMessages.ColumnComposite_defaultWithOneParam, defaultTableName));
-		if (selectionIndex == 0) {
-			//combo text does not update when switching between 2 mappings of the same type
-			//that both have a default column name.  clear the selection and then set it again
-			columnCombo.clearSelection();
-			columnCombo.select(0);
-		}		
-	}
-	
-	protected void populateColumnName() {
-		String specifiedColumnName = this.column.getSpecifiedName();
-		if (specifiedColumnName != null) {
-			if (!this.columnCombo.getText().equals(specifiedColumnName)) {
-				this.columnCombo.setText(specifiedColumnName);
-			}
-		}
-		else {
-			String defaultColumnName = this.column.getDefaultName();
-			if (!this.columnCombo.getText().equals(NLS.bind(JptUiMappingsMessages.ColumnComposite_defaultWithOneParam, defaultColumnName))) {
-				this.columnCombo.select(0);
-			}
-		}
-	}
-	
-	private void populateTableCombo() {
-		//TODO don't do instanceof check here - check on Table, or isRoot check on Entity
-		//this.tableCombo.setEnabled(!(this.table instanceof SingleTableInheritanceChildTableImpl));
-		populateDefaultColumnTable();
-		this.tableCombo.remove(1, this.tableCombo.getItemCount()-1);
-		
-		if (this.column != null) {
-			for (Iterator i = this.column.getOwner().getTypeMapping().associatedTableNamesIncludingInherited(); i.hasNext(); ) {
-				this.tableCombo.add((String) i.next());			
-			}
-		}
-		populateColumnTable();
-	}
-	
-	protected void populateDefaultColumnTable() {
-		String defaultTableName = column.getDefaultTable();
-		int selectionIndex = tableCombo.getSelectionIndex();
-		tableCombo.setItem(0, NLS.bind(JptUiMappingsMessages.ColumnComposite_defaultWithOneParam, defaultTableName));
-		if (selectionIndex == 0) {
-			//combo text does not update when switching between 2 mappings of the same type
-			//that both have a default column name.  clear the selection and then set it again
-			tableCombo.clearSelection();
-			tableCombo.select(0);
-		}		
-	}
-	
-	protected void populateColumnTable() {
-		String tableName = this.column.getSpecifiedTable();
-		String defaultTableName = this.column.getDefaultTable();
-		if (tableName != null) {
-			if (!this.tableCombo.getText().equals(tableName)) {
-				this.tableCombo.setText(tableName);
-			}
-		}
-		else {
-			if (!this.tableCombo.getText().equals(NLS.bind(JptUiMappingsMessages.ColumnComposite_defaultWithOneParam, defaultTableName))) {
-				this.tableCombo.select(0);
-			}
-		}
-	}
-
-	public void doPopulate(EObject obj) {
-		this.column = (IColumn) obj;
-		if (this.column != null) {
-			populateColumnCombo();
-			populateTableCombo();
-		}
-		this.insertableComboViewer.populate(new InsertableHolder(this.column));
-		this.updatableComboViewer.populate(new UpdatableHolder(this.column));
-	}
-	
-	public void doPopulate() {
-		if (this.column != null) {
-			populateColumnCombo();
-			populateTableCombo();
-		}
-		else {
-			this.connectionProfile = null;
-		}
-		this.insertableComboViewer.populate();
-		this.updatableComboViewer.populate();
-	}
-	
-	protected void enableWidgets(boolean enabled) {
-		this.columnCombo.setEnabled(enabled);
-		this.tableCombo.setEnabled(enabled);
-		this.insertableComboViewer.getControl().setEnabled(enabled);
-		this.updatableComboViewer.getControl().setEnabled(enabled);
-	}
-	
-	@Override
-	public void dispose() {
-		this.insertableComboViewer.dispose();
-		this.updatableComboViewer.dispose();
-		super.dispose();
-	}
-	
-	private class InsertableHolder extends EObjectImpl implements EnumHolder {
-		
-		private IAbstractColumn column;
-		
-		InsertableHolder(IAbstractColumn column) {
-			super();
-			this.column = column;
-		}
-		
-		public Object get() {
-			return this.column.getInsertable();
-		}
-		
-		public void set(Object enumSetting) {
-			this.column.setInsertable((DefaultTrueBoolean) enumSetting);
-			
-		}
-		
-		public Class featureClass() {
-			return IAbstractColumn.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.IABSTRACT_COLUMN__INSERTABLE;
-		}
-		
-		public EObject wrappedObject() {
-			return this.column;
-		}
-		
-		public Object[] enumValues() {
-			return DefaultTrueBoolean.VALUES.toArray();
-		}
-		
-		public Object defaultValue() {
-			return DefaultTrueBoolean.DEFAULT;
-		}
-		
-		public String defaultString() {
-			//TODO move this out of the UI into the model
-			return "True";
-		}
-	}
-
-	private class UpdatableHolder extends EObjectImpl implements EnumHolder {
-		
-		private IAbstractColumn column;
-		
-		UpdatableHolder(IAbstractColumn column) {
-			super();
-			this.column = column;
-		}
-		
-		public Object get() {
-			return this.column.getUpdatable();
-		}
-		
-		public void set(Object enumSetting) {
-			this.column.setUpdatable((DefaultTrueBoolean) enumSetting);
-			
-		}
-		
-		public Class featureClass() {
-			return IAbstractColumn.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.IABSTRACT_COLUMN__UPDATABLE;
-		}
-		
-		public EObject wrappedObject() {
-			return this.column;
-		}
-		
-		public Object[] enumValues() {
-			return DefaultTrueBoolean.VALUES.toArray();
-		}
-		
-		public Object defaultValue() {
-			return DefaultTrueBoolean.DEFAULT;
-		}
-		
-		public String defaultString() {
-			//TODO move this out of the UI into the model
-			return "True";
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/CommonWidgets.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/CommonWidgets.java
deleted file mode 100644
index de7966c..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/CommonWidgets.java
+++ /dev/null
@@ -1,310 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.jpt.core.internal.mappings.DefaultEagerFetchType;
-import org.eclipse.jpt.core.internal.mappings.DefaultLazyFetchType;
-import org.eclipse.jpt.core.internal.mappings.DefaultTrueBoolean;
-import org.eclipse.jpt.core.internal.mappings.EnumType;
-import org.eclipse.jpt.core.internal.mappings.IAbstractColumn;
-import org.eclipse.jpt.core.internal.mappings.IColumn;
-import org.eclipse.jpt.core.internal.mappings.IMultiRelationshipMapping;
-import org.eclipse.jpt.core.internal.mappings.ISingleRelationshipMapping;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.EnumComboViewer.EnumHolder;
-import org.eclipse.jpt.ui.internal.mappings.details.StringWithDefaultChooser.StringHolder;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class CommonWidgets 
-{
-	public static Label buildEntityNameLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.EntityGeneralSection_name);
-	}
-
-	public static EntityNameCombo buildEntityNameCombo(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new EntityNameCombo(parent, commandStack, widgetFactory);
-	}
-	
-	public static Label buildTableLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.TableChooser_label);
-	}
-	
-	public static Label buildCatalogLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.CatalogChooser_label);
-	}
-	
-	public static Label buildSchemaLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.SchemaChooser_label);
-	}
-	
-	public static StringWithDefaultChooser buildStringWithDefaultChooser(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new StringWithDefaultChooser(parent, commandStack, widgetFactory);
-	}
-
-
-	public static Label buildFetchLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.BasicGeneralSection_fetchLabel);
-	}
-	
-	public static Label buildTargetEntityLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.TargetEntityChooser_label);
-	}
-	
-	public static Label buildOptionalLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.BasicGeneralSection_optionalLabel);
-	}
-	
-	public static Label buildTemporalLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.BasicGeneralSection_temporalLabel);
-	}
-	
-	public static Label buildEnumeratedLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.BasicGeneralSection_enumeratedLabel);
-	}
-	
-	public static Label buildMappedByLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.NonOwningMapping_mappedByLabel);
-	}
-	
-	public static EnumComboViewer buildFetchTypeComboViewer(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new EnumComboViewer(parent, commandStack, widgetFactory);
-	}
-
-	public static EnumComboViewer buildEnumComboViewer(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new EnumComboViewer(parent, commandStack, widgetFactory);
-	}
-	
-	public static EnumHolder buildMultiRelationshipMappingFetchEnumHolder(IMultiRelationshipMapping mapping) {
-		return new FetchHolder(mapping);
-	}
-	
-	public static EnumHolder buildSingleRelationshipMappingFetchEnumHolder(ISingleRelationshipMapping mapping) {
-		return new SingleRelationshipMappingFetchHolder(mapping);
-	}
-	
-	public static EnumHolder buildOptionalHolder(ISingleRelationshipMapping mapping) {
-		return new OptionalHolder(mapping);
-	}
-	
-	public static Label buildColumnLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.ColumnChooser_label);
-	}
-	
-	public static Label buildColumnTableLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiMappingsMessages.ColumnTableChooser_label);
-	}
-	
-	public static ColumnTableHolder buildColumnTableHolder(IColumn column) {
-		return new ColumnTableHolder(column);
-	}
-
-	public static TargetEntityChooser buildTargetEntityChooser(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new TargetEntityChooser(parent, commandStack, widgetFactory);
-	}
-	private static class FetchHolder extends EObjectImpl implements EnumHolder {
-		
-		private IMultiRelationshipMapping mapping;
-		
-		FetchHolder(IMultiRelationshipMapping mapping) {
-			super();
-			this.mapping = mapping;
-		}
-		
-		public Object get() {
-			return this.mapping.getFetch();
-		}
-		
-		public void set(Object enumSetting) {
-			this.mapping.setFetch((DefaultLazyFetchType) enumSetting);
-			
-		}
-		
-		public Class featureClass() {
-			return IMultiRelationshipMapping.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.IMULTI_RELATIONSHIP_MAPPING__FETCH;
-		}
-		
-		public EObject wrappedObject() {
-			return this.mapping;
-		}
-		
-		public Object[] enumValues() {
-			return DefaultLazyFetchType.VALUES.toArray();
-		}
-		
-		public Object defaultValue() {
-			return DefaultLazyFetchType.DEFAULT;
-		}
-		
-		public String defaultString() {
-			//TODO move this out of the UI into the model
-			return "Lazy";
-		}
-	}
-	
-	private static class SingleRelationshipMappingFetchHolder extends EObjectImpl implements EnumHolder {
-		
-		private ISingleRelationshipMapping mapping;
-		
-		SingleRelationshipMappingFetchHolder(ISingleRelationshipMapping mapping) {
-			super();
-			this.mapping = mapping;
-		}
-		
-		public Object get() {
-			return this.mapping.getFetch();
-		}
-		
-		public void set(Object enumSetting) {
-			this.mapping.setFetch((DefaultEagerFetchType) enumSetting);
-			
-		}
-		
-		public Class featureClass() {
-			return ISingleRelationshipMapping.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.ISINGLE_RELATIONSHIP_MAPPING__FETCH;
-		}
-		
-		public EObject wrappedObject() {
-			return this.mapping;
-		}
-		
-		public Object[] enumValues() {
-			return DefaultEagerFetchType.VALUES.toArray();
-		}
-		
-		public Object defaultValue() {
-			return DefaultEagerFetchType.DEFAULT;
-		}
-		
-		public String defaultString() {
-			//TODO move this out of the UI into the model
-			return "Eager";
-		}
-	}	
-	private static abstract class ColumnHolder extends EObjectImpl implements StringHolder {
-		private IAbstractColumn column;
-		
-		ColumnHolder(IAbstractColumn column) {
-			super();
-			this.column = column;
-		}
-		
-		public Class featureClass() {
-			return IAbstractColumn.class;
-		}
-		
-		public boolean supportsDefault() {
-			return true;
-		}
-		
-		public EObject wrappedObject() {
-			return this.column;
-		}
-		
-		protected IAbstractColumn getColumn() {
-			return this.column;
-		}
-	}
-	
-	public static class ColumnTableHolder extends ColumnHolder implements StringHolder {
-		
-		ColumnTableHolder(IAbstractColumn column) {
-			super(column);
-		}
-			
-		public int featureId() {
-			return JpaCoreMappingsPackage.IABSTRACT_COLUMN__SPECIFIED_TABLE;
-		}
-		
-		public int defaultFeatureId() {
-			return JpaCoreMappingsPackage.IABSTRACT_COLUMN__DEFAULT_TABLE;
-		}
-		
-		public String defaultItem() {
-			String defaultName = getColumn().getDefaultTable();
-			if (defaultName != null) {
-				return NLS.bind(JptUiMappingsMessages.ColumnComposite_defaultWithOneParam, defaultName);
-			}
-			return JptUiMappingsMessages.ColumnComposite_defaultEmpty;
-		}
-		
-		public String getString() {
-			return getColumn().getSpecifiedTable();
-		}
-		
-		public void setString(String newName) {
-			getColumn().setSpecifiedTable(newName);
-		}
-	}
-	
-	private static class OptionalHolder extends EObjectImpl implements EnumHolder {
-		
-		private ISingleRelationshipMapping mapping;
-		
-		OptionalHolder(ISingleRelationshipMapping mapping) {
-			super();
-			this.mapping = mapping;
-		}
-		
-		public Object get() {
-			return this.mapping.getOptional();
-		}
-		
-		public void set(Object enumSetting) {
-			this.mapping.setOptional((DefaultTrueBoolean) enumSetting);
-		}
-		
-		public Class featureClass() {
-			return ISingleRelationshipMapping.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.ISINGLE_RELATIONSHIP_MAPPING__OPTIONAL;
-		}
-		
-		public EObject wrappedObject() {
-			return this.mapping;
-		}
-		
-		public Object[] enumValues() {
-			return DefaultTrueBoolean.VALUES.toArray();
-		}
-		
-		public Object defaultValue() {
-			return DefaultTrueBoolean.DEFAULT;
-		}
-		
-		public String defaultString() {
-			//TODO move this out of the UI into the model
-			return "True";
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddableComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddableComposite.java
deleted file mode 100644
index 2c98eb0..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddableComposite.java
+++ /dev/null
@@ -1,125 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.IEmbeddable;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EmbeddableComposite extends BaseJpaComposite 
-{
-	private IEmbeddable embeddable;
-	private Adapter mappedSuperclassListener;
-	
-	private CommandStack commandStack;
-	
-	
-	public EmbeddableComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.mappedSuperclassListener = buildMappedSuperclassListener();
-	}
-	
-	private Adapter buildMappedSuperclassListener() {
-		return new AdapterImpl() {
-			@Override
-			public void notifyChanged(Notification notification) {
-				mappedSuperclassChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		composite.setLayout(new FillLayout(SWT.VERTICAL));
-		
-//		Label accessTypeLabel = new Label(composite, SWT.LEFT);
-//		accessTypeLabel.setText(DaliUiMessages.MappedSuperclassComposite_accessType);
-//		this.accessTypeComboViewer = buildAccessTypeCombo(composite);
-//		//eventually this will be enabled if editing xml instead of java
-//		this.accessTypeComboViewer.getCombo().setEnabled(false);
-//		GridData gridData = new GridData();
-//		gridData.horizontalAlignment = GridData.FILL;
-//		gridData.grabExcessHorizontalSpace = true;
-//		this.accessTypeComboViewer.getCombo().setLayoutData(gridData);
-//		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.accessTypeComboViewer.getCombo(), IDaliHelpContextIds.ENTITY_ACCESS_TYPE);
-		
-	}
-	
-//	private ComboViewer buildAccessTypeCombo(Composite parent) {
-//		ComboViewer viewer = new ComboViewer(parent, SWT.READ_ONLY);
-//		viewer.add(AccessType.VALUES.toArray());
-//		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-//			public void selectionChanged(SelectionChangedEvent event) {
-//				if (populating) {
-//					return;
-//				}
-//				if (event.getSelection() instanceof StructuredSelection) {
-//					StructuredSelection selection = (StructuredSelection) event.getSelection();
-//					editingDomain.getCommandStack().execute(SetCommand.create(editingDomain, persistentType, OrmPackage.eINSTANCE.getPersistentType_AccessType(), selection.getFirstElement()));
-//				}
-//			}
-//		});
-//		return viewer;
-//	}
-	
-	@Override
-	protected void doPopulate(EObject model) {
-		this.embeddable = (IEmbeddable) model;
-	}
-	
-	@Override
-	protected void doPopulate() {
-		
-	}
-	
-	
-	protected void engageListeners() {
-//		this.persistentTypeItemProvider.addListener(getPersistentTypeListener());
-//		this.persistentType.eAdapters().add(this.persistentTypeItemProvider);
-	}
-
-	protected void disengageListeners() {
-//		if (this.persistentType != null){
-//			this.persistentType.eAdapters().remove(this.persistentTypeItemProvider);
-//			this.persistentTypeItemProvider.removeListener(getPersistentTypeListener());
-//		}
-	}
-	
-	private void mappedSuperclassChanged(Notification notification) {
-		
-	}
-	
-//	private INotifyChangedListener getPersistentTypeListener() {
-//		if (this.persistentTypeListener == null) {
-//			this.persistentTypeListener = new INotifyChangedListener() {
-//				public void notifyChanged(Notification notification) {
-//					if (notification.getFeatureID(PersistentType.class) == OrmPackage.PERSISTENT_TYPE__ACCESS_TYPE) {
-//						final AccessType accessType = (AccessType) notification.getNewValue();
-//						Display.getDefault().syncExec(new Runnable() {
-//							public void run() {
-//								if (((StructuredSelection) accessTypeComboViewer.getSelection()).getFirstElement() != accessType) {
-//									accessTypeComboViewer.setSelection(new StructuredSelection(accessType));
-//								}
-//							}
-//						});
-//					}
-//				}
-//			};
-//		}
-//		return this.persistentTypeListener;
-//	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java
deleted file mode 100644
index d0da063..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java
+++ /dev/null
@@ -1,338 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import java.util.List;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jpt.core.internal.mappings.IAttributeOverride;
-import org.eclipse.jpt.core.internal.mappings.IEmbedded;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EmbeddedAttributeOverridesComposite extends BaseJpaComposite
-{
-	private ListViewer listViewer;
-	
-	private IEmbedded embedded;
-	private Adapter embeddedListener;
-	
-	private IAttributeOverride attributeOverride;
-	private Adapter attributeOverrideListener;
-		
-	protected ColumnComposite columnComposite;
-	
-	private Button overrideDefaultButton;
-	
-	public EmbeddedAttributeOverridesComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.embeddedListener = buildEmbeddedListener();
-		this.attributeOverrideListener = buildAttributeOverrideListener();
-	}
-	
-	private Adapter buildEmbeddedListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				embeddedChanged(notification);
-			}
-		};
-	}
-	
-	private Adapter buildAttributeOverrideListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				attributeOverrideChanged(notification);
-			}
-		};
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-		
-		Group attributeOverridesGroup = getWidgetFactory().createGroup(
-			composite, JptUiMappingsMessages.AttributeOverridesComposite_attributeOverrides);
-		attributeOverridesGroup.setLayout(new GridLayout(2, true));
-		GridData gridData =  new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace= true;
-		attributeOverridesGroup.setLayoutData(gridData);
-		
-		this.listViewer = buildAttributeOverridesListViewer(attributeOverridesGroup);
-		gridData = new GridData();
-		gridData.verticalSpan = 2;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace= true;
-		this.listViewer.getList().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.listViewer.getList(), IJpaHelpContextIds.MAPPING_EMBEDDED_ATTRIBUTE_OVERRIDES);
-		
-		this.overrideDefaultButton = getWidgetFactory().createButton(attributeOverridesGroup, "Override Default", SWT.CHECK);
-		this.overrideDefaultButton.addSelectionListener(buildOverrideDefaultSelectionListener());
-		gridData = new GridData();
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.overrideDefaultButton.setLayoutData(gridData);
-		
-		
-		this.columnComposite = new ColumnComposite(attributeOverridesGroup, commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.columnComposite.getControl().setLayoutData(gridData);
-
-	}
-	
-	private SelectionListener buildOverrideDefaultSelectionListener() {
-		return new SelectionListener(){
-		
-			public void widgetSelected(SelectionEvent e) {
-				overrideDefaultButtonSelected(e);
-			}
-		
-			public void widgetDefaultSelected(SelectionEvent e) {
-				overrideDefaultButtonSelected(e);
-			}
-		};
-	}
-	
-	private void overrideDefaultButtonSelected(SelectionEvent e) {
-		boolean selection = this.overrideDefaultButton.getSelection();
-		if (selection) {
-			int index = this.embedded.getSpecifiedAttributeOverrides().size();
-			IAttributeOverride attributeOverride = this.embedded.createAttributeOverride(index);
-			this.embedded.getSpecifiedAttributeOverrides().add(attributeOverride);
-			attributeOverride.setName(this.attributeOverride.getName());
-			attributeOverride.getColumn().setSpecifiedName(this.attributeOverride.getColumn().getName());			
-		}
-		else {
-			this.embedded.getSpecifiedAttributeOverrides().remove(this.attributeOverride);
-		}
-	}
-	
-	
-	private ListViewer buildAttributeOverridesListViewer(Composite parent) {
-		ListViewer listViewer = new ListViewer(parent, SWT.SINGLE | SWT.BORDER);
-		listViewer.setLabelProvider(buildAttributeOverridesLabelProvider());
-		listViewer.setContentProvider(buildAttributeOverridesContentProvider());
-		
-		listViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				attributeOverridesListSelectionChanged(event);
-			}
-		});
-
-		return listViewer;
-	}
-	
-	protected void attributeOverridesListSelectionChanged(SelectionChangedEvent event) {
-		if (((StructuredSelection) event.getSelection()).isEmpty()) {
-			this.columnComposite.populate(null);
-			this.columnComposite.enableWidgets(false);
-			this.overrideDefaultButton.setSelection(false);
-			this.overrideDefaultButton.setEnabled(false);
-		}
-		else {
-			this.attributeOverride = getSelectedAttributeOverride();
-			boolean specifiedOverride = this.embedded.getSpecifiedAttributeOverrides().contains(this.attributeOverride);
-			this.overrideDefaultButton.setSelection(specifiedOverride);
-			this.columnComposite.populate(this.attributeOverride.getColumn());
-			this.columnComposite.enableWidgets(specifiedOverride);
-			this.overrideDefaultButton.setEnabled(true);
-		}
-	}
-	
-	private ILabelProvider buildAttributeOverridesLabelProvider() {
-		return new LabelProvider() {
-			public String getText(Object element) {
-				//TODO also display column name somehow
-				return ((IAttributeOverride) element).getName();
-			}
-		};
-	}
-
-	
-	private IContentProvider buildAttributeOverridesContentProvider() {
-		return new IStructuredContentProvider() {
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			}
-		
-			public void dispose() {
-			}
-		
-			public Object[] getElements(Object inputElement) {
-				return ((IEmbedded) inputElement).getAttributeOverrides().toArray();
-			}
-		};
-	}
-
-	private IAttributeOverride getSelectedAttributeOverride() {
-		return (IAttributeOverride) ((StructuredSelection) this.listViewer.getSelection()).getFirstElement();
-	}
-	
-	
-	public void doPopulate(EObject obj) {
-		this.embedded = (IEmbedded) obj;
-		if (this.embedded == null) {
-			this.attributeOverride = null;
-			this.columnComposite.populate(null);
-			this.listViewer.setInput(null);
-			return;
-		}
-		
-		if (this.listViewer.getInput() != this.embedded) {
-			this.listViewer.setInput(this.embedded);
-		}
-		if (!this.embedded.getAttributeOverrides().isEmpty()) {
-			if (this.listViewer.getSelection().isEmpty()) {
-				IAttributeOverride attributeOverride = this.embedded.getAttributeOverrides().get(0);
-				this.listViewer.setSelection(new StructuredSelection(attributeOverride));
-			}
-			else {
-				this.columnComposite.enableWidgets(true);
-				this.columnComposite.populate(((IAttributeOverride)((StructuredSelection) this.listViewer.getSelection()).getFirstElement()).getColumn());
-			}
-		}
-		else {
-			this.columnComposite.populate(null);
-			this.columnComposite.enableWidgets(false);
-		}
-	}
-
-	@Override
-	protected void doPopulate() {
-		this.columnComposite.doPopulate();
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.embedded != null) {
-			this.embedded.eAdapters().add(this.embeddedListener);
-			for (IAttributeOverride attributeOverride : this.embedded.getAttributeOverrides()) {
-				attributeOverride.eAdapters().add(this.attributeOverrideListener);
-			}	
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.embedded != null) {
-			this.embedded.eAdapters().remove(this.embeddedListener);
-			for (IAttributeOverride attributeOverride : this.embedded.getAttributeOverrides()) {
-				attributeOverride.eAdapters().remove(this.attributeOverrideListener);
-			}	
-		}
-	}
-
-	
-	protected void embeddedChanged(Notification notification) {
-		switch (notification.getFeatureID(IEmbedded.class)) {
-			case JpaCoreMappingsPackage.IEMBEDDED__SPECIFIED_ATTRIBUTE_OVERRIDES :
-			case JpaCoreMappingsPackage.IEMBEDDED__DEFAULT_ATTRIBUTE_OVERRIDES :
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						if (listViewer.getList().isDisposed()) {
-							return;
-						}
-						listViewer.refresh();
-						columnComposite.enableWidgets(!listViewer.getSelection().isEmpty());
-						if (listViewer.getSelection().isEmpty()) {
-							columnComposite.populate(null);
-						}
-					}
-				});
-				if (notification.getEventType() == Notification.ADD) {
-					((IAttributeOverride) notification.getNewValue()).eAdapters().add(this.attributeOverrideListener);
-					final Object newValue = notification.getNewValue();
-					Display.getDefault().asyncExec(new Runnable() {
-						public void run() {
-							if (listViewer.getList().isDisposed()) {
-								return;
-							}
-							listViewer.setSelection(new StructuredSelection(newValue));
-						}
-					});
-				}
-				else if (notification.getEventType() == Notification.ADD_MANY) {
-					List addedList = (List) notification.getNewValue();
-					for (Iterator<IAttributeOverride> i = addedList.iterator(); i.hasNext(); ) {
-						IAttributeOverride override = i.next();
-						override.eAdapters().add(this.attributeOverrideListener);
-					}
-				}
-				else if (notification.getEventType() == Notification.REMOVE) {
-					((IAttributeOverride) notification.getOldValue()).eAdapters().remove(this.attributeOverrideListener);				
-				}
-				else if (notification.getEventType() == Notification.REMOVE_MANY) {
-					List removedList = (List) notification.getOldValue();
-					for (Iterator<IAttributeOverride> i = removedList.iterator(); i.hasNext(); ) {
-						IAttributeOverride override = i.next();
-						override.eAdapters().remove(this.attributeOverrideListener);
-					}
-				}
-				break;
-			default :
-				break;
-		}
-	}
-
-	protected void attributeOverrideChanged(Notification notification) {
-		switch (notification.getFeatureID(IAttributeOverride.class)) {
-			case JpaCoreMappingsPackage.IATTRIBUTE_OVERRIDE__NAME :
-				final IAttributeOverride attributeOverride = (IAttributeOverride) notification.getNotifier();
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						listViewer.refresh(attributeOverride);
-					}
-				});
-				break;
-			default :
-				break;
-		}
-	}
-	
-	public void dispose() {
-		this.columnComposite.dispose();
-		super.dispose();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedComposite.java
deleted file mode 100644
index 734a9c8..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedComposite.java
+++ /dev/null
@@ -1,71 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.IEmbedded;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-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.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EmbeddedComposite extends BaseJpaComposite 
-{
-	private IEmbedded embedded;
-	
-	private EmbeddedAttributeOverridesComposite attributeOverridesComposite;
-
-	public EmbeddedComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout();
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-
-		GridData gridData;
-		
-		this.attributeOverridesComposite = new EmbeddedAttributeOverridesComposite(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.attributeOverridesComposite.getControl().setLayoutData(gridData);
-	}
-	
-	
-	public void doPopulate(EObject obj) {
-		this.embedded = (IEmbedded) obj;
-		this.attributeOverridesComposite.populate(obj);
-	}
-	
-	public void doPopulate() {
-		this.attributeOverridesComposite.populate();
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-	
-	@Override
-	public void dispose() {
-		this.attributeOverridesComposite.dispose();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedIdComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedIdComposite.java
deleted file mode 100644
index 1311106..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedIdComposite.java
+++ /dev/null
@@ -1,43 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EmbeddedIdComposite extends BaseJpaComposite 
-{
-	public EmbeddedIdComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-
-	}
-	
-	
-	public void doPopulate(EObject obj) {
-	}
-	
-	public void doPopulate() {
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EntityComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EntityComposite.java
deleted file mode 100644
index 7ddf3c9..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EntityComposite.java
+++ /dev/null
@@ -1,339 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.INamedQuery;
-import org.eclipse.jpt.core.internal.mappings.IQueryHint;
-import org.eclipse.jpt.core.internal.mappings.ITable;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.StringWithDefaultChooser.StringHolder;
-import org.eclipse.osgi.util.NLS;
-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.swt.widgets.Control;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EntityComposite extends BaseJpaComposite
-{
-	private IEntity entity;
-	
-	private EntityNameCombo entityNameCombo;
-	
-	private TableComposite tableComposite;
-	private InheritanceComposite inheritanceComposite;
-	private SecondaryTablesComposite secondaryTablesComposite;
-	private OverridesComposite attributeOverridesComposite;
-	
-	public EntityComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-		
-		Control generalControl = buildGeneralComposite(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		generalControl.setLayoutData(gridData);
-
-		Control attributeOverridesControl = buildAttributeOverridesComposite(composite);
-	    gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		attributeOverridesControl.setLayoutData(gridData);
-
-		Control secondaryTablesControl = buildSecondaryTablesComposite(composite);
-	    gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		secondaryTablesControl.setLayoutData(gridData);
-		
-		Control inheritanceControl = buildInheritanceComposite(composite);
-	    gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		inheritanceControl.setLayoutData(gridData);
-	}
-	
-	private Control buildGeneralComposite(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		Composite generalComposite = getWidgetFactory().createComposite(composite);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		generalComposite.setLayout(layout);	
-				
-		CommonWidgets.buildEntityNameLabel(generalComposite, getWidgetFactory());
-		
-		this.entityNameCombo = 
-	    	CommonWidgets.buildEntityNameCombo(generalComposite, this.commandStack, getWidgetFactory());
-	    GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.entityNameCombo.getCombo().setLayoutData(gridData);
-		helpSystem.setHelp(entityNameCombo.getCombo(), IJpaHelpContextIds.ENTITY_NAME);
-		
-		
-		this.tableComposite = new TableComposite(generalComposite, this.commandStack, getWidgetFactory());
-	    gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.tableComposite.getControl().setLayoutData(gridData);
-		
-		return generalComposite;
-	}
-	
-	private Control buildSecondaryTablesComposite(Composite composite) {
-	    Section section = getWidgetFactory().createSection(composite, SWT.FLAT | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
-	    section.setText(JptUiMappingsMessages.SecondaryTablesComposite_secondaryTables);
-
-		Composite client = getWidgetFactory().createComposite(section);
-		section.setClient(client);
-		
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		client.setLayout(layout);
-
-		this.secondaryTablesComposite = new SecondaryTablesComposite(client, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.secondaryTablesComposite.getControl().setLayoutData(gridData);
-		
-		return section;
-	}
-
-	private Control buildInheritanceComposite(Composite composite) {
-	    Section section = getWidgetFactory().createSection(composite, SWT.FLAT | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
-	    section.setText(JptUiMappingsMessages.EntityComposite_inheritance);
-
-		Composite inheritanceClient = getWidgetFactory().createComposite(section);
-		section.setClient(inheritanceClient);
-		
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		inheritanceClient.setLayout(layout);
-
-		this.inheritanceComposite = new InheritanceComposite(inheritanceClient, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.inheritanceComposite.getControl().setLayoutData(gridData);
-		
-		return section;
-	}
-
-	private Control buildAttributeOverridesComposite(Composite composite) {
-	    Section section = getWidgetFactory().createSection(composite, SWT.FLAT | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
-	    section.setText(JptUiMappingsMessages.AttributeOverridesComposite_attributeOverrides);
-	    //section.setExpanded(true); //not going to expand this for now, it causes the scroll bar not to appear
-		Composite client = getWidgetFactory().createComposite(section);
-		section.setClient(client);
-		
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		client.setLayout(layout);
-
-		this.attributeOverridesComposite = new OverridesComposite(client, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.attributeOverridesComposite.getControl().setLayoutData(gridData);
-		
-		return section;
-	}
-
-	//TODO talk to JavaEditor people about what we can do to hook in TabbedProperties for the JavaEditor
-	
-	public void doPopulate(EObject obj) {
-		this.entity = (IEntity) obj;
-		this.entityNameCombo.populate(obj);
-		this.attributeOverridesComposite.populate(obj);
-		this.secondaryTablesComposite.populate(obj);
-		this.inheritanceComposite.populate(obj);
-		if (this.entity != null) {
-			this.tableComposite.populate(this.entity.getTable());
-		}
-		else {
-			this.tableComposite.populate(null);					
-		}
-	}
-	
-	public void doPopulate() {
-		this.entityNameCombo.populate();
-		this.tableComposite.populate();
-		this.attributeOverridesComposite.populate();
-		this.secondaryTablesComposite.populate();
-		this.inheritanceComposite.populate();
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-	
-	@Override
-	public void dispose() {
-		this.entityNameCombo.dispose();
-		this.tableComposite.dispose();
-		this.attributeOverridesComposite.dispose();
-		this.secondaryTablesComposite.dispose();
-		this.inheritanceComposite.dispose();
-		super.dispose();
-	}
-	
-	protected IEntity getEntity() {
-		return this.entity;
-	}
-	
-	
-	private abstract class TableHolder extends EObjectImpl implements StringHolder {
-		private ITable table;
-		
-		TableHolder(ITable table) {
-			super();
-			this.table = table;
-		}
-		
-		public Class featureClass() {
-			return ITable.class;
-		}
-		
-		public boolean supportsDefault() {
-			return true;
-		}
-		
-		public EObject wrappedObject() {
-			return this.table;
-		}
-		
-		public ITable getTable() {
-			return this.table;
-		}
-	}
-	
-	private class TableNameHolder extends TableHolder implements StringHolder {
-		
-		TableNameHolder(ITable table) {
-			super(table);
-		}
-			
-		public int featureId() {
-			return JpaCoreMappingsPackage.ITABLE__SPECIFIED_NAME;
-		}
-		
-		public int defaultFeatureId() {
-			return JpaCoreMappingsPackage.ITABLE__DEFAULT_NAME;
-		}
-		
-		public String defaultItem() {
-			String defaultName = getTable().getDefaultName();
-			if (defaultName != null) {
-				return NLS.bind(JptUiMappingsMessages.EntityComposite_tableDefault, defaultName);
-			}
-			return JptUiMappingsMessages.EntityComposite_tableNoDefaultSpecified;
-		}
-		
-		public String getString() {
-			return getTable().getSpecifiedName();
-		}
-		
-		public void setString(String newName) {
-			getTable().setSpecifiedName(newName);
-		}
-	}
-	
-	private class TableCatalogHolder extends TableHolder implements StringHolder {
-		
-		TableCatalogHolder(ITable table) {
-			super(table);
-		}
-			
-		public int featureId() {
-			return JpaCoreMappingsPackage.ITABLE__SPECIFIED_CATALOG;
-		}
-		
-		public int defaultFeatureId() {
-			return JpaCoreMappingsPackage.ITABLE__DEFAULT_CATALOG;
-		}
-		
-		public String defaultItem() {
-			String defaultCatalog = getTable().getDefaultCatalog();
-			if (defaultCatalog != null) {
-				return NLS.bind(JptUiMappingsMessages.EntityComposite_tableDefault, defaultCatalog);
-			}
-			return JptUiMappingsMessages.EntityComposite_tableNoDefaultSpecified;
-		}
-		
-		public String getString() {
-			return getTable().getSpecifiedCatalog();
-		}
-		
-		public void setString(String newName) {
-			getTable().setSpecifiedCatalog(newName);
-		}
-	}
-	
-	private class TableSchemaHolder extends TableHolder implements StringHolder {
-		
-		TableSchemaHolder(ITable table) {
-			super(table);
-		}
-			
-		public int featureId() {
-			return JpaCoreMappingsPackage.ITABLE__SPECIFIED_SCHEMA;
-		}
-		
-		public int defaultFeatureId() {
-			return JpaCoreMappingsPackage.ITABLE__DEFAULT_SCHEMA;
-		}
-		
-		public String defaultItem() {
-			String defaultSchema = getTable().getDefaultSchema();
-			if (defaultSchema != null) {
-				return NLS.bind(JptUiMappingsMessages.EntityComposite_tableDefault, defaultSchema);
-			}
-			return JptUiMappingsMessages.EntityComposite_tableNoDefaultSpecified;
-		}
-		
-		public String getString() {
-			return getTable().getSpecifiedSchema();
-		}
-		
-		public void setString(String newName) {
-			getTable().setSpecifiedSchema(newName);
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EntityNameCombo.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EntityNameCombo.java
deleted file mode 100644
index 8fe0ffc..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EntityNameCombo.java
+++ /dev/null
@@ -1,165 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import java.util.Arrays;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-// TODO get Default updating appropriately based on Entity name default
-	
-public class EntityNameCombo extends BaseJpaController
-{
-	private IEntity entity;
-	private Adapter entityListener;
-	
-	private CCombo combo;
-	
-	
-	public EntityNameCombo(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, commandStack, widgetFactory);
-		buildEntityListener();
-	}
-	
-	
-	private void buildEntityListener() {
-		entityListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				entityChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		combo = this.widgetFactory.createCCombo(parent, SWT.FLAT);
-		combo.addModifyListener(
-			new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					comboModified(e);
-				}
-			});
-	}
-	
-	private void comboModified(ModifyEvent e) {
-		if (isPopulating()) {
-			return;
-		}
-		
-		String text = ((CCombo) e.getSource()).getText();
-		if (text.equals(combo.getItem(0))) {
-			text = null;
-		}
-		
-		entity.setSpecifiedName(text);
-		
-		// TODO Does this need to be done?
-		//this.editingDomain.getCommandStack().execute(SetCommand.create(this.editingDomain, this.entity, MappingsPackage.eINSTANCE.getEntity_SpecifiedName(), text));
-	}
-	
-	private void entityChanged(Notification notification) {
-		switch (notification.getFeatureID(IEntity.class)) {
-			case JpaCoreMappingsPackage.IENTITY__SPECIFIED_NAME :
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							populate();
-						}
-					});
-				break;
-			case JpaCoreMappingsPackage.IENTITY__DEFAULT_NAME :
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							populate();
-						}
-					});
-				break;
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (entity != null) {
-			entity.eAdapters().add(entityListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (entity != null) {
-			entity.eAdapters().remove(entityListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		entity = (IEntity) obj;
-		populateCombo();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateCombo();
-	}
-	
-	private void populateCombo() {
-		if (entity == null) {
-			combo.clearSelection();
-			combo.setItems(new String[] {});
-			return;
-		}
-		
-		String defaultItem = NLS.bind(JptUiMappingsMessages.EntityGeneralSection_nameDefaultWithOneParam, entity.getDefaultName());
-		String specifiedName = entity.getSpecifiedName();
-		
-		if (specifiedName == null) {
-			setComboData(defaultItem, new String[] {defaultItem});
-		}
-		else {
-			setComboData(specifiedName, new String[] {defaultItem});
-		}
-	}
-	
-	private void setComboData(String text, String[] items) {
-		if (! Arrays.equals(items, combo.getItems())) {
-			combo.setItems(items);
-		}
-		
-		if (! text.equals(combo.getText())) {
-			combo.setText(text);
-		}
-	}
-	
-	public CCombo getCombo() {
-		return combo;
-	}
-	
-	@Override
-	public Control getControl() {
-		return getCombo();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EnumComboViewer.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EnumComboViewer.java
deleted file mode 100644
index 2cf6b61..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EnumComboViewer.java
+++ /dev/null
@@ -1,207 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.mappings.InheritanceType;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class EnumComboViewer extends BaseJpaController
-{
-	private EnumHolder enumHolder;
-	private Adapter enumListener;
-	
-	private CComboViewer comboViewer;
-
-
-	public EnumComboViewer(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildListener();
-	}
-	
-	
-	private void buildListener() {
-		this.enumListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				modelChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent);
-		this.comboViewer = new CComboViewer(combo);
-		this.comboViewer.setLabelProvider(buildLabelProvider());
-		this.comboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				EnumComboViewer.this.selectionChanged(event.getSelection());
-			}
-		});
-	}
-	protected IBaseLabelProvider buildLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				if (element == enumHolder.defaultValue()) {
-					return NLS.bind(JptUiMappingsMessages.EnumComboViewer_default, enumHolder.defaultString());
-				}
-				return super.getText(element);
-			}
-		};
-	}
-
-	void selectionChanged(ISelection sel) {
-		if (sel instanceof IStructuredSelection) {
-			Object selection = ((IStructuredSelection) sel).getFirstElement();
-			if ( ! this.enumHolder.get().equals(selection)) {
-				this.enumHolder.set(selection);
-//				this.editingDomain.getCommandStack().execute(
-//					SetCommand.create(
-//						this.editingDomain,
-//						this.basicMapping,
-//						OrmPackage.eINSTANCE.getBasicMapping_Optional(),
-//						optional
-//					)
-//				);
-			}
-		}
-	}
-
-	private void modelChanged(Notification notification) {
-		if (notification.getFeatureID(this.enumHolder.featureClass()) == 
-				this.enumHolder.featureId()) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.enumHolder != null && this.enumHolder.wrappedObject() != null) {
-			this.enumHolder.wrappedObject().eAdapters().add(this.enumListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.enumHolder != null && this.enumHolder.wrappedObject() != null) {
-			this.enumHolder.wrappedObject().eAdapters().remove(this.enumListener);
-		}
-	}
-	
-	public final void populate(EnumHolder enumHolder) {
-		super.populate(enumHolder);
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		this.enumHolder = (EnumHolder) obj;
-		populateCombo();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateCombo();
-	}
-	
-	private void populateCombo() {
-		this.comboViewer.getCombo().removeAll();
-		if (this.enumHolder.wrappedObject() == null) {
-			return;
-		}
-		
-		this.comboViewer.add(this.enumHolder.enumValues());
-		
-		Object modelSetting = this.enumHolder.get();
-		
-		if (((IStructuredSelection) this.comboViewer.getSelection()).getFirstElement() != modelSetting) {
-			this.comboViewer.setSelection(new StructuredSelection(modelSetting));
-		}
-	}
-
-	
-	@Override
-	public Control getControl() {
-		return this.comboViewer.getCombo();
-	}
-	
-	
-	/**
-	 * An interface to wrap an object that supports accessType
-	 * An object of this type must be passed in to populate(EObject)
-	 */
-	public static interface EnumHolder extends EObject {
-		/**
-		 * Return the num setting from the wrapped object
-		 * @return
-		 */
-		Object get();
-		
-		/**
-		 * Set the enum setting on the wrapped object
-		 * @param fetch
-		 */
-		void set(Object enumSetting);
-		
-		/**
-		 * Return the Class of the wrapped object
-		 * @return
-		 */
-		Class featureClass();
-		
-		/**
-		 * Return the feature id of enum setting on the wrapped object
-		 * @return
-		 */
-		int featureId();
-		
-		/**
-		 * The wrapped EObject that the enum setting is stored on
-		 * @return
-		 */
-		EObject wrappedObject();
-		
-		Object[] enumValues();
-		
-		/**
-		 * Return the Default Enumerator object
-		 */
-		Object defaultValue();
-		
-		/**
-		 * Return the String to be displayed to the user
-		 * Deafult ([defaultString()])
-		 */
-		String defaultString();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/GeneratedValueComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/GeneratedValueComposite.java
deleted file mode 100644
index c13c5f7..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/GeneratedValueComposite.java
+++ /dev/null
@@ -1,288 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.mappings.GenerationType;
-import org.eclipse.jpt.core.internal.mappings.IGeneratedValue;
-import org.eclipse.jpt.core.internal.mappings.IId;
-import org.eclipse.jpt.core.internal.mappings.InheritanceType;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.core.internal.platform.IGeneratorRepository;
-import org.eclipse.jpt.core.internal.platform.NullGeneratorRepository;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class GeneratedValueComposite extends BaseJpaComposite
-{
-	private IId id;
-	private IGeneratedValue generatedValue;
-	private Adapter generatedValueListener;
-
-	private CComboViewer strategyComboViewer;
-
-	private CCombo generatorNameCombo;
-
-	protected boolean populating;
-
-	public GeneratedValueComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.generatedValueListener = buildGeneratedValueListener();
-	}
-	
-	private Adapter buildGeneratedValueListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				generatedValueChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		composite.setLayout(layout);
-		
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.GeneratedValueComposite_strategy);
-		
-		this.strategyComboViewer = buildStrategyComboViewer(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.strategyComboViewer.getCombo().setLayoutData(gridData);
-		helpSystem.setHelp(this.strategyComboViewer.getCombo(), IJpaHelpContextIds.MAPPING_GENERATED_VALUE_STRATEGY);
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.GeneratedValueComposite_generatorName);
-		
-		this.generatorNameCombo = buildGeneratorNameCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.generatorNameCombo.setLayoutData(gridData);
-		helpSystem.setHelp(this.generatorNameCombo, IJpaHelpContextIds.MAPPING_GENERATED_VALUE_GENERATOR_NAME);
-		
-		// TODO
-		// buildGeneratorNameSelectionButton( this);
-	}
-
-	private CComboViewer buildStrategyComboViewer(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent);
-		CComboViewer viewer = new CComboViewer(combo);
-		viewer.setLabelProvider(buildStrategyLabelProvider());
-		viewer.add(GenerationType.VALUES.toArray());
-		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				if (populating) {
-					return;
-				}
-				if (event.getSelection() instanceof StructuredSelection) {
-					StructuredSelection selection = (StructuredSelection) event.getSelection();
-					GenerationType selectedType = (GenerationType) selection.getFirstElement();
-					if (generatedValue == null) {
-						createGeneratedValue();
-					}
-					if (!generatedValue.getStrategy().equals(selectedType)) {
-						generatedValue.setStrategy(selectedType);
-					}
-				}
-			}
-		});
-		return viewer;
-	}
-	
-	private IBaseLabelProvider buildStrategyLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				if (element == GenerationType.DEFAULT) {
-					//TODO need to move this to the model, don't want hardcoded String
-					return NLS.bind(JptUiMappingsMessages.GeneratedValueComposite_default, "Auto");
-				}
-				return super.getText(element);
-			}
-		};
-	}
-	
-
-	protected CCombo buildGeneratorNameCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		combo.add(JptUiMappingsMessages.TableComposite_defaultEmpty);
-		combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String generatorName = ((CCombo) e.getSource()).getText();
-				
-				if (generatorName.equals("")) { //$NON-NLS-1$
-					if (generatedValue.getGenerator() == null || generatedValue.getGenerator().equals("")) {
-						return;
-					}
-					generatorName = null;
-				}
-				if (generatedValue == null) {
-					createGeneratedValue();
-				}
-				generatedValue.setGenerator(generatorName);
-			}
-		});
-		return combo;
-	}
-
-	private void createGeneratedValue() {
-		IGeneratedValue generatedValue = this.id.createGeneratedValue();
-		this.id.setGeneratedValue(generatedValue);
-	}
-	
-
-	protected void generatedValueChanged(Notification notification) {
-		if (notification.getFeatureID(IGeneratedValue.class) == JpaCoreMappingsPackage.IGENERATED_VALUE__STRATEGY) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					if (selectedStrategy() != generatedValue.getStrategy()) {
-						strategyComboViewer.setSelection(new StructuredSelection(generatedValue.getStrategy()));
-					}
-				}
-			});
-		}
-		else if (notification.getFeatureID(IGeneratedValue.class) == JpaCoreMappingsPackage.IGENERATED_VALUE__GENERATOR) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateGeneratorName();
-				}
-			});
-		}
-	}
-
-	@Override
-	protected void doPopulate(EObject obj) {
-		this.id = (IId) obj;
-		if (this.id == null) {
-			this.generatedValue= null;
-		}
-		else {
-			this.generatedValue = this.id.getGeneratedValue();
-		}
-		if (this.generatedValue == null) {
-			this.strategyComboViewer.getCombo().deselectAll();
-			this.generatorNameCombo.setText("");
-			this.populating = false;
-			return;
-		}
-		populateStrategyCombo();
-		populateGeneratorNameCombo();
-	}
-
-	@Override
-	protected void doPopulate() {
-		
-	}
-	
-	protected void engageListeners() {
-		if (this.generatedValue != null) {
-			this.generatedValue.eAdapters().add(this.generatedValueListener);
-		}
-	}
-
-	protected void disengageListeners() {
-		if (this.generatedValue != null) {
-			this.generatedValue.eAdapters().remove(this.generatedValueListener);
-		}
-	}
-
-	private IGeneratorRepository getGeneratorRepository() {
-		return NullGeneratorRepository.instance(); //this.id.getJpaProject().getPlatform().generatorRepository(this.id.typeMapping().getPersistentType());
-	}
-	
-	private void populateGeneratorNameCombo() {
-		this.generatorNameCombo.removeAll();
-		for (Iterator<String> i = getGeneratorRepository().generatorNames(); i.hasNext(); ){
-			this.generatorNameCombo.add(i.next());
-		}
-
-		populateGeneratorName();
-	}
-	private void populateGeneratorName() {
-		String generatorName = this.generatedValue.getGenerator();
-		if (generatorName == null || generatorName.equals("")) {
-			this.generatorNameCombo.setText("");
-		}
-		else if (!this.generatorNameCombo.getText().equals(generatorName)) {
-			this.generatorNameCombo.setText(generatorName);
-		}
-	}
-	
-	private void populateStrategyCombo() {
-		GenerationType selectedType = selectedStrategy();
-		GenerationType strategy = this.generatedValue.getStrategy();
-		if (strategy == GenerationType.AUTO) {
-			if (selectedType != GenerationType.AUTO) {
-				this.strategyComboViewer.setSelection(new StructuredSelection(GenerationType.AUTO));
-			}
-		}
-		else if (strategy == GenerationType.SEQUENCE) {
-			if (selectedType != GenerationType.SEQUENCE) {
-				this.strategyComboViewer.setSelection(new StructuredSelection(GenerationType.SEQUENCE));
-			}
-		}
-		else if (strategy == GenerationType.IDENTITY) {
-			if (selectedType != GenerationType.IDENTITY) {
-				this.strategyComboViewer.setSelection(new StructuredSelection(GenerationType.IDENTITY));
-			}
-		}
-		else if (strategy == GenerationType.TABLE) {
-			if (selectedType != GenerationType.TABLE) {
-				this.strategyComboViewer.setSelection(new StructuredSelection(GenerationType.TABLE));
-			}
-		}
-		else {
-			if (selectedType != GenerationType.DEFAULT) {
-				this.strategyComboViewer.setSelection(new StructuredSelection(GenerationType.DEFAULT));
-			}
-		}
-		// TODO first initialization
-	}
-
-	private GenerationType selectedStrategy() {
-		return (GenerationType) ((StructuredSelection) this.strategyComboViewer.getSelection()).getFirstElement();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/GeneratorComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/GeneratorComposite.java
deleted file mode 100644
index a9f0227..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/GeneratorComposite.java
+++ /dev/null
@@ -1,167 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.IGenerator;
-import org.eclipse.jpt.core.internal.mappings.IId;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-/**
- * GeneratorComposite
- */
-public abstract class GeneratorComposite<E extends IGenerator> extends BaseJpaComposite
-{
-	private IId id;
-	private E generator;
-	private Adapter generatorListener;
-
-	protected Text nameTextWidget;
-
-	public GeneratorComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.generatorListener = buildGeneratorListner();
-	}
-	
-	private Adapter buildGeneratorListner() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				generatorChanged(notification);
-			}
-		};
-	}
-
-	/**
-	 * Builds the Generator specifiedName viewer.
-	 * 
-	 * @param parent
-	 * @return
-	 */
-	protected Text buildNameText(Composite parent) {
-		final Text text = getWidgetFactory().createText(parent, null);
-		text.addModifyListener(new ModifyListener() {
-			public void modifyText(org.eclipse.swt.events.ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				
-				String name = text.getText();
-				if (name.equals("")) { //$NON-NLS-1$
-					if (getGenerator().getName() == null) {
-						return;
-					}
-					name = null;
-				}
-				IGenerator generator = getGenerator();
-				if (generator == null) {
-					generator = createGenerator();
-				}
-				generator.setName(name);
-			}
-		});
-		return text;
-	}
-
-	protected abstract E createGenerator();
-
-	@Override
-	protected void doPopulate(EObject obj) {
-		this.id = (IId) obj;
-		if (this.id  == null) {
-			this.generator = null;
-			return;
-		}
-		this.generator = generator(this.id);
-		if (this.generator == null) {
-			clear();
-			return;
-		}
-		populateNameViewer();
-		return;
-	}
-
-	@Override
-	protected void doPopulate() {
-		populateNameViewer();
-	}
-	
-	protected void engageListeners() {
-		if (this.generator != null) {
-			this.generator.eAdapters().add(this.generatorListener);
-		}
-	}
-
-	protected void disengageListeners() {
-		if (this.generator != null) {
-			this.generator.eAdapters().remove(this.generatorListener);
-		}
-	}
-
-	protected abstract E generator(IId id);
-	
-	protected IId idMapping() {
-		return this.id;
-	}
-
-	protected void generatorChanged(Notification notification) {
-		if (notification.getFeatureID(IGenerator.class) == JpaCoreMappingsPackage.IGENERATOR__NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					if (nameTextWidget.getText() == null || !nameTextWidget.getText().equals(getGenerator().getName())) {
-						if (getGenerator().getName() == null) {
-							clearNameViewer();
-						}
-						else {
-							nameTextWidget.setText(getGenerator().getName());
-						}
-					}
-				}
-			});
-		}
-	}
-
-	private void populateNameViewer() {
-		String name = this.getGenerator().getName();
-		if (name != null) {
-			if (!this.nameTextWidget.getText().equals(name)) {
-				this.nameTextWidget.setText(name);
-			}
-		}
-		else {
-			this.clearNameViewer();
-		}
-	}
-
-	protected E getGenerator() {
-		return this.generator;
-	}
-
-	protected void clear() {
-		this.clearNameViewer();
-	}
-
-	protected void clearNameViewer() {
-		this.nameTextWidget.setText(""); //$NON-NLS-1$
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/IdComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/IdComposite.java
deleted file mode 100644
index b71d4cf..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/IdComposite.java
+++ /dev/null
@@ -1,459 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.jpt.core.internal.mappings.IGeneratedValue;
-import org.eclipse.jpt.core.internal.mappings.IId;
-import org.eclipse.jpt.core.internal.mappings.ISequenceGenerator;
-import org.eclipse.jpt.core.internal.mappings.ITableGenerator;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.core.internal.mappings.TemporalType;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.EnumComboViewer.EnumHolder;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.ui.PlatformUI;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class IdComposite extends BaseJpaComposite 
-{
-	private IId id;
-	private Adapter idListener;
-	
-	private ColumnComposite columnComposite;
-
-	private EnumComboViewer temporalTypeViewer;
-	
-	private Section pkGenerationSection;
-	private Button primaryKeyGenerationCheckBox;
-	private GeneratedValueComposite generatedValueComposite;
-	
-	private Section tableGenSection;
-	private Button tableGeneratorCheckBox;
-	private TableGeneratorComposite tableGeneratorComposite;
-	
-	private Section sequenceGenSection;
-	private Button sequenceGeneratorCheckBox;
-	private SequenceGeneratorComposite sequenceGeneratorComposite;
-
-	
-	public IdComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.idListener = buildIdListener();
-	}
-	
-	private Adapter buildIdListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				idMappingChanged(notification);
-			}
-		};
-	}
-	void idMappingChanged(Notification notification) {
-		switch (notification.getFeatureID(IId.class)) {
-			case JpaCoreMappingsPackage.IID__TABLE_GENERATOR :
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						IdComposite.this.populateTableGeneratorComposite();
-					}
-				});
-				break;
-			case JpaCoreMappingsPackage.IID__SEQUENCE_GENERATOR :
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						IdComposite.this.populateSequenceGeneratorComposite();
-					}
-				});
-				break;
-			case JpaCoreMappingsPackage.IID__GENERATED_VALUE :
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						IdComposite.this.populateGeneratedValueComposite();
-					}
-				});
-				break;
-		}
-	}
-
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		composite.setLayout(layout);
-		
-		Control generalControl = buildGeneralComposite(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		generalControl.setLayoutData(gridData);
-
-		Control generationControl = buildGenerationComposite(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		generationControl.setLayoutData(gridData);
-	}
-	
-	private Control buildGeneralComposite(Composite composite) {
-		Composite generalComposite = getWidgetFactory().createComposite(composite);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		generalComposite.setLayout(layout);	
-		
-		this.columnComposite = new ColumnComposite(generalComposite, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.columnComposite.getControl().setLayoutData(gridData);	
-
-		CommonWidgets.buildTemporalLabel(generalComposite, getWidgetFactory());
-		this.temporalTypeViewer = CommonWidgets.buildEnumComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.temporalTypeViewer.getControl().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(temporalTypeViewer.getControl(), IJpaHelpContextIds.MAPPING_TEMPORAL);
-
-		return generalComposite;
-	}
-
-	private Control buildGenerationComposite(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		this.pkGenerationSection = getWidgetFactory().createSection(composite, SWT.FLAT | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
-	    this.pkGenerationSection.setText(JptUiMappingsMessages.IdMappingComposite_primaryKeyGeneration);
-
-		Composite generationClient = getWidgetFactory().createComposite(this.pkGenerationSection);
-		this.pkGenerationSection.setClient(generationClient);
-		
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		generationClient.setLayout(layout);
-
-		this.primaryKeyGenerationCheckBox = buildPrimaryKeyGenerationCheckBox(generationClient);
-		GridData gridData = new GridData();
-		this.primaryKeyGenerationCheckBox.setLayoutData(gridData);
-		helpSystem.setHelp(primaryKeyGenerationCheckBox, IJpaHelpContextIds.MAPPING_PRIMARY_KEY_GENERATION);
-		
-		this.generatedValueComposite = new GeneratedValueComposite(generationClient, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalIndent = 20;
-		this.generatedValueComposite.getControl().setLayoutData(gridData);
-		
-	    this.tableGenSection = getWidgetFactory().createSection(generationClient, SWT.FLAT | ExpandableComposite.TWISTIE);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.tableGenSection.setLayoutData(gridData);
-		
-	    this.tableGenSection.setText(JptUiMappingsMessages.IdMappingComposite_tableGenerator);
-
-		Composite tableGenClient = getWidgetFactory().createComposite(this.tableGenSection);
-		this.tableGenSection.setClient(tableGenClient);
-		
-		layout = new GridLayout();
-		layout.marginWidth = 0;
-		tableGenClient.setLayout(layout);
-		
-		this.tableGeneratorCheckBox = buildTableGeneratorCheckBox(tableGenClient);
-		gridData = new GridData();
-		this.tableGeneratorCheckBox.setLayoutData(gridData);
-		helpSystem.setHelp(tableGeneratorCheckBox, IJpaHelpContextIds.MAPPING_TABLE_GENERATOR);
-		
-		this.tableGeneratorComposite = new TableGeneratorComposite(tableGenClient, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalIndent = 20;
-		this.tableGeneratorComposite.getControl().setLayoutData(gridData);
-		
-
-		
-	    this.sequenceGenSection = getWidgetFactory().createSection(generationClient, SWT.FLAT | ExpandableComposite.TWISTIE);
-	    this.sequenceGenSection.setText(JptUiMappingsMessages.IdMappingComposite_sequenceGenerator);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.sequenceGenSection.setLayoutData(gridData);
-
-		Composite sequenceGenClient = getWidgetFactory().createComposite(this.sequenceGenSection);
-		this.sequenceGenSection.setClient(sequenceGenClient);
-		
-		layout = new GridLayout();
-		layout.marginWidth = 0;
-		sequenceGenClient.setLayout(layout);
-	
-		this.sequenceGeneratorCheckBox = buildSequenceGeneratorCheckBox(sequenceGenClient);
-		gridData = new GridData();
-		this.sequenceGeneratorCheckBox.setLayoutData(gridData);
-		helpSystem.setHelp(sequenceGeneratorCheckBox, IJpaHelpContextIds.MAPPING_SEQUENCE_GENERATOR);
-
-		this.sequenceGeneratorComposite = new SequenceGeneratorComposite(sequenceGenClient, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalIndent = 20;
-		this.sequenceGeneratorComposite.getControl().setLayoutData(gridData);
-
-		return this.pkGenerationSection;
-	}
-	
-	private Button buildPrimaryKeyGenerationCheckBox(Composite parent) {
-		Button button = getWidgetFactory().createButton(parent,JptUiMappingsMessages.IdMappingComposite_primaryKeyGeneration, SWT.CHECK);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-			// ignore
-			}
-
-			public void widgetSelected(SelectionEvent e) {
-				IdComposite.this.primaryKeyGenerationCheckBoxClicked(e);
-			}
-		});
-		return button;
-	}
-
-	void primaryKeyGenerationCheckBoxClicked(SelectionEvent e) {
-		boolean mappingHasGeneratedValue = this.id.getGeneratedValue() != null;
-		boolean checked = this.primaryKeyGenerationCheckBox.getSelection();
-		if (checked == mappingHasGeneratedValue) {
-			return;
-		}
-		IGeneratedValue generatedValue = null;
-		if (checked) {
-			generatedValue = this.id.createGeneratedValue();
-		}
-		this.id.setGeneratedValue(generatedValue);
-	}
-
-	private Button buildTableGeneratorCheckBox(Composite parent) {
-		Button button = getWidgetFactory().createButton(parent,JptUiMappingsMessages.IdMappingComposite_tableGenerator, SWT.CHECK);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-			// ignore
-			}
-
-			public void widgetSelected(SelectionEvent e) {
-				IdComposite.this.tableGeneratorCheckBoxClicked(e);
-			}
-		});
-		return button;
-	}
-
-	void tableGeneratorCheckBoxClicked(SelectionEvent e) {
-		boolean mappingHasTableGenerator = this.id.getTableGenerator() != null;
-		boolean checked = this.tableGeneratorCheckBox.getSelection();
-		if (checked == mappingHasTableGenerator) {
-			return;
-		}
-		ITableGenerator tableGenerator = null;
-		if (checked) {
-			tableGenerator = this.id.createTableGenerator();
-		}
-		this.id.setTableGenerator(tableGenerator);
-		if (checked) {
-			IGeneratedValue generatedValue = this.id.getGeneratedValue();
-			if (generatedValue != null && generatedValue.getGenerator() != null) {
-				tableGenerator.setName(generatedValue.getGenerator());
-			}
-		}
-	}
-
-	private Button buildSequenceGeneratorCheckBox(Composite parent) {
-		Button button = getWidgetFactory().createButton(parent,JptUiMappingsMessages.IdMappingComposite_sequenceGenerator, SWT.CHECK);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-			// ignore
-			}
-
-			public void widgetSelected(SelectionEvent e) {
-				IdComposite.this.sequenceGeneratorCheckBoxClicked(e);
-			}
-		});
-		return button;
-	}
-
-	void sequenceGeneratorCheckBoxClicked(SelectionEvent e) {
-		boolean mappingHasSequenceGenerator = this.id.getSequenceGenerator() != null;
-		boolean checked = this.sequenceGeneratorCheckBox.getSelection();
-		if (checked == mappingHasSequenceGenerator) {
-			return;
-		}
-		ISequenceGenerator sequenceGenerator = null;
-		if (checked) {
-			sequenceGenerator = this.id.createSequenceGenerator();
-		}
-		this.id.setSequenceGenerator(sequenceGenerator);
-		if (checked) {
-			IGeneratedValue generatedValue = this.id.getGeneratedValue();
-			if (generatedValue != null && generatedValue.getGenerator() != null) {
-				sequenceGenerator.setName(generatedValue.getGenerator());
-			}
-		}
-	}
-
-	
-	
-	public void doPopulate(EObject obj) {
-		this.id = (IId) obj;
-		if (this.id != null) {
-			this.columnComposite.populate(this.id.getColumn());
-		}
-		else {
-			this.columnComposite.populate(null);
-			this.generatedValueComposite.populate(null);
-			this.tableGeneratorComposite.populate(null);
-			this.sequenceGeneratorComposite.populate(null);
-			return;
-		}
-	    this.pkGenerationSection.setExpanded(true);
-		this.temporalTypeViewer.populate(new TemporalTypeHolder(this.id));
-		populateGeneratedValueComposite();
-		populateSequenceGeneratorComposite();
-		populateTableGeneratorComposite();
-	}
-	
-	public void doPopulate() {
-		this.columnComposite.populate();
-		this.temporalTypeViewer.populate();
-		this.generatedValueComposite.populate();
-		this.tableGeneratorComposite.populate();
-		this.sequenceGeneratorComposite.populate();
-	}
-	
-	private void populateTableGeneratorComposite() {
-		this.tableGeneratorComposite.populate(this.id);
-		boolean tableGeneratorExists = this.id.getTableGenerator() != null;
-		this.tableGeneratorCheckBox.setSelection(tableGeneratorExists);
-		if (tableGeneratorExists) {
-			this.tableGenSection.setExpanded(true);
-		}
-	}
-
-	private void populateSequenceGeneratorComposite() {
-		this.sequenceGeneratorComposite.populate(this.id);
-		boolean sequenceGeneratorExists = this.id.getSequenceGenerator() != null;
-		this.sequenceGeneratorCheckBox.setSelection(sequenceGeneratorExists);
-		if (sequenceGeneratorExists) {
-			this.sequenceGenSection.setExpanded(true);
-		}
-	}
-
-	private void populateGeneratedValueComposite() {
-		this.generatedValueComposite.populate(this.id);
-		this.primaryKeyGenerationCheckBox.setSelection(this.id.getGeneratedValue() != null);
-	}
-
-	
-	protected void engageListeners() {
-		if (this.id !=null) {
-			this.id.eAdapters().add(this.idListener);
-		}
-	}
-	
-	protected void disengageListeners() {
-		if (this.id !=null) {
-			this.id.eAdapters().remove(this.idListener);
-		}
-	}
-	
-	@Override
-	public void dispose() {
-		this.columnComposite.dispose();
-		this.temporalTypeViewer.dispose();
-		this.generatedValueComposite.dispose();
-		this.tableGeneratorComposite.dispose();
-		this.sequenceGeneratorComposite.dispose();
-		super.dispose();
-	}
-	
-	protected IId getId() {
-		return this.id;
-	}
-	
-	private class TemporalTypeHolder extends EObjectImpl implements EnumHolder {
-		
-		private IId id;
-		
-		TemporalTypeHolder(IId id) {
-			super();
-			this.id = id;
-		}
-		
-		public Object get() {
-			return this.id.getTemporal();
-		}
-		
-		public void set(Object enumSetting) {
-			this.id.setTemporal((TemporalType) enumSetting);
-		}
-		
-		public Class featureClass() {
-			return IId.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.IID__TEMPORAL;
-		}
-		
-		public EObject wrappedObject() {
-			return this.id;
-		}
-		
-		public Object[] enumValues() {
-			return TemporalType.VALUES.toArray();
-		}
-		
-		/**
-		 * TemporalType has no Default, return null
-		 */
-		public Object defaultValue() {
-			return null;
-		}
-		
-		/**
-		 * TemporalType has no Default, return null
-		 */
-		public String defaultString() {
-			return null;
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/InheritanceComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/InheritanceComposite.java
deleted file mode 100644
index deb6154..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/InheritanceComposite.java
+++ /dev/null
@@ -1,620 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.mappings.DiscriminatorType;
-import org.eclipse.jpt.core.internal.mappings.IDiscriminatorColumn;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.INamedColumn;
-import org.eclipse.jpt.core.internal.mappings.InheritanceType;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.db.internal.Connection;
-import org.eclipse.jpt.db.internal.ConnectionListener;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class InheritanceComposite extends BaseJpaComposite {
-	
-	private IEntity entity;
-	private IDiscriminatorColumn discriminatorColumn;
-	private final Adapter entityListener;
-	private final Adapter discriminatorColumnListener;
-	
-	private CComboViewer strategyViewer;
-	private CCombo columnCombo;
-	private CComboViewer discriminatorTypeViewer;
-	private CCombo discriminatorValueCombo;
-	
-	private ConnectionListener connectionListener;
-	
-	private ConnectionProfile connectionProfile;
-
-	
-	private PrimaryKeyJoinColumnsComposite pkJoinColumnsComposite;
-	
-	public InheritanceComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.entityListener = buildEntityListener();
-		this.discriminatorColumnListener = buildDiscriminatorColumnListener();
-		this.connectionListener = buildConnectionListener();
-	}
-		
-	private Adapter buildEntityListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				entityChanged(notification);
-			}
-		};
-	}
-
-	private Adapter buildDiscriminatorColumnListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				discriminatorColumnChanged(notification);
-			}
-		};
-	}
-	
-    private ConnectionListener buildConnectionListener() {
-		return new ConnectionListener() {
-
-			public void aboutToClose(Connection connection) {
-				// not interested to this event.
-			}
-
-			public void closed(Connection connection) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						InheritanceComposite.this.populateColumnCombo();
-					}
-				});
-			}
-
-			public void modified(Connection connection) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						InheritanceComposite.this.populateColumnCombo();
-					}
-				});
-			}
-
-			public boolean okToClose(Connection connection) {
-				// not interested to this event.
-				return true;
-			}
-
-			public void opened(Connection connection) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						InheritanceComposite.this.populateColumnCombo();
-					}
-				});
-			}
-
-			public void databaseChanged(Connection connection, final Database database) {
-				return;
-			}
-
-			public void schemaChanged(Connection connection, final Schema schema) {
-				return;
-			}
-
-			public void tableChanged(Connection connection, final Table table) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if(table == getDbTable()) {
-							if (!getControl().isDisposed()) {
-								InheritanceComposite.this.populateColumnCombo();
-							}
-						}
-					}
-				});
-			}
-		};
-    }	
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		composite.setLayout(layout);	
-
-		GridData gridData;
-
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.InheritanceComposite_strategy);
-
-		this.strategyViewer = buildStrategyCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.strategyViewer.getCombo().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.strategyViewer.getCombo(), IJpaHelpContextIds.ENTITY_INHERITANCE_STRATEGY);
-
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.DiscriminatorColumnComposite_column);
-
-		this.columnCombo = buildColumnCombo(composite);
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.columnCombo.setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.columnCombo, IJpaHelpContextIds.ENTITY_INHERITANCE_DISCRIMINATOR_COLUMN);
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.DiscriminatorColumnComposite_discriminatorType);
-
-		this.discriminatorTypeViewer = buildDiscriminatorTypeCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.discriminatorTypeViewer.getCombo().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.discriminatorTypeViewer.getCombo(), IJpaHelpContextIds.ENTITY_INHERITANCE_DISCRIMINATOR_TYPE);
-	
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.InheritanceComposite_discriminatorValue);
-
-		this.discriminatorValueCombo = buildDiscriminatorValueCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.discriminatorValueCombo.setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.discriminatorValueCombo, IJpaHelpContextIds.ENTITY_INHERITANCE_DISCRIMINATOR_VALUE);
-		
-		this.pkJoinColumnsComposite = new PrimaryKeyJoinColumnsComposite(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalSpan = 2;
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessVerticalSpace = true;
-		this.pkJoinColumnsComposite.getControl().setLayoutData(gridData);
-	}
-	
-	private CComboViewer buildStrategyCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent);
-		CComboViewer strategyViewer = new CComboViewer(combo);
-		strategyViewer.setLabelProvider(buildStrategyLabelProvider());
-		strategyViewer.add(InheritanceType.VALUES.toArray());
-		strategyViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				InheritanceComposite.this.strategySelectionChanged(event.getSelection());
-			}
-		});
-		
-		return strategyViewer;
-	}
-	
-	private IBaseLabelProvider buildStrategyLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				if (element == InheritanceType.DEFAULT) {
-					//TODO need to move this to the model, don't want hardcoded String
-					return NLS.bind(JptUiMappingsMessages.InheritanceComposite_default, "Single Table");
-				}
-				return super.getText(element);
-			}
-		};
-	}
-	
-	void strategySelectionChanged(ISelection selection) {
-		if (selection instanceof IStructuredSelection) {
-			InheritanceType inheritanceType = (InheritanceType) ((IStructuredSelection) selection).getFirstElement();
-			if ( ! this.entity.getInheritanceStrategy().equals(inheritanceType)) {
-				this.entity.setInheritanceStrategy(inheritanceType);
-			}
-		}
-	}
-	
-	private CCombo buildColumnCombo(Composite parent) {
-		final CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-  		combo.add(JptUiMappingsMessages.ColumnComposite_defaultEmpty);
-		combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String tableText = ((CCombo) e.getSource()).getText();
-				if (tableText.equals("")) { //$NON-NLS-1$
-					tableText = null;
-					if (discriminatorColumn.getSpecifiedName() == null || discriminatorColumn.getSpecifiedName().equals("")) { //$NON-NLS-1$
-						return;
-					}
-				}
-				
-				if (tableText != null && combo.getItemCount() > 0 && tableText.equals(combo.getItem(0))) {
-					tableText = null;
-				}
-
-				if (discriminatorColumn.getSpecifiedName() == null && tableText != null) {
-					discriminatorColumn.setSpecifiedName(tableText);
-				}
-				if (discriminatorColumn.getSpecifiedName() != null && !discriminatorColumn.getSpecifiedName().equals(tableText)) {
-					discriminatorColumn.setSpecifiedName(tableText);
-				}
-			}
-		});
-		return combo;
-		
-	}
-	
-	private CComboViewer buildDiscriminatorTypeCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent);
-		CComboViewer discriminatorTypeViewer = new CComboViewer(combo);
-		discriminatorTypeViewer.setLabelProvider(buildDiscriminatorTypeLabelProvider());
-		discriminatorTypeViewer.add(DiscriminatorType.VALUES.toArray());
-		
-		discriminatorTypeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				InheritanceComposite.this.discriminatorTypeSelectionChanged(event.getSelection());
-			}
-		});
-		
-		return discriminatorTypeViewer;
-	}
-	
-	private IBaseLabelProvider buildDiscriminatorTypeLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				if (element == DiscriminatorType.DEFAULT) {
-					//TODO need to move this to the model, don't want hardcoded String
-					return NLS.bind(JptUiMappingsMessages.InheritanceComposite_defaultDiscriminatorType, "String");
-				}
-				return super.getText(element);
-			}
-		};
-	}
-	
-	void discriminatorTypeSelectionChanged(ISelection selection) {
-		if (selection instanceof IStructuredSelection) {
-			DiscriminatorType discriminatorType = (DiscriminatorType) ((IStructuredSelection) selection).getFirstElement();
-			if ( ! this.discriminatorColumn.getDiscriminatorType().equals(discriminatorType)) {
-				this.discriminatorColumn.setDiscriminatorType(discriminatorType);
-			}
-		}
-	}
-	
-	private CCombo buildDiscriminatorValueCombo(Composite parent) {
-		final CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String discriminatorValue = entity.getSpecifiedDiscriminatorValue();
-				String value = ((CCombo) e.getSource()).getText();
-				if (value.equals("")) { //$NON-NLS-1$
-					value = null;
-					if (discriminatorValue == null || discriminatorValue.equals("")) { //$NON-NLS-1$
-						return;
-					}
-				}
-				
-				if (value != null && combo.getItemCount() > 0 && value.equals(combo.getItem(0))) {
-					value = null;
-				}
-
-				if (discriminatorValue == null || !discriminatorValue.equals(value)) {
-					entity.setSpecifiedDiscriminatorValue(value);
-				}
-			}
-		});
-		return combo;
-	}
-
-	public void doPopulate(EObject obj) {
-		this.entity = (IEntity) obj;
-		if (this.entity != null) {
-			this.discriminatorColumn = this.entity.getDiscriminatorColumn();
-			populateColumnCombo();
-			popuplateDiscriminatorTypeComboViewer();			
-			populateStrategyComboViewer();
-			populateDiscriminatorValueCombo();
-			this.pkJoinColumnsComposite.populate(this.entity);	
-		}
-		else {
-			this.discriminatorColumn = null;
-			this.connectionProfile = null;
-		}
-	}
-	
-	public void doPopulate() {
-		if (this.entity != null) {
-			populateColumnCombo();
-//			popuplateStrategyComboViewer();
-//			popuplateDiscriminatorValueCombo();
-		}
-	}
-
-	@Override
-	protected void engageListeners() {
-		if (this.entity != null) {
-			this.entity.eAdapters().add(this.entityListener);
-			this.discriminatorColumn.eAdapters().add(this.discriminatorColumnListener);
-			this.addConnectionListener();
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.entity != null) {
-			this.entity.eAdapters().remove(this.entityListener);
-			this.removeConnectionListener();
-			this.discriminatorColumn.eAdapters().remove(this.discriminatorColumnListener);
-		}
-	}
-
-	private ConnectionProfile getConnectionProfile() {
-		if(this.connectionProfile == null) {
-			this.connectionProfile = this.entity.getJpaProject().connectionProfile();
-		}
-		return this.connectionProfile;
-	}
-
-	private void addConnectionListener() {
-		this.getConnectionProfile().addConnectionListener(this.connectionListener);
-	}
-	
-	private void removeConnectionListener() {
-		this.getConnectionProfile().removeConnectionListener(this.connectionListener);
-	}
-
-	private Table getDbTable() {
-		return this.entity.primaryDbTable();
-	}
-	
-	private void populateColumnCombo() {
-		//TODO don't do instanceof check here - check on Table, or isRoot check on Entity
-		//this.tableCombo.setEnabled(!(this.table instanceof SingleTableInheritanceChildTableImpl));
-		populateDefaultColumnName();
-
-		if (this.getConnectionProfile().isConnected()) {
-			this.columnCombo.remove(1, this.columnCombo.getItemCount()-1);
-			Table table = getDbTable();
-			if (table != null) {
-				for (Iterator i = CollectionTools.sort(CollectionTools.list(table.columnNames())).iterator(); i.hasNext();) {
-					this.columnCombo.add((String) i.next());
-				}
-			}
-		}
-		else {
-			this.columnCombo.remove(1, this.columnCombo.getItemCount()-1);
-		}
-		populateColumnName();
-	}
-	
-	protected void populateDefaultColumnName() {
-		String defaultTableName = discriminatorColumn.getDefaultName();
-		int selectionIndex = columnCombo.getSelectionIndex();
-		columnCombo.setItem(0, NLS.bind(JptUiMappingsMessages.ColumnComposite_defaultWithOneParam, defaultTableName));
-		if (selectionIndex == 0) {
-			//combo text does not update when switching between 2 mappings of the same type
-			//that both have a default column name.  clear the selection and then set it again
-			columnCombo.clearSelection();
-			columnCombo.select(0);
-		}		
-	}
-	
-	protected void populateColumnName() {
-		String tableName = this.discriminatorColumn.getSpecifiedName();
-		String defaultName = this.discriminatorColumn.getDefaultName();
-		if (tableName != null) {
-			if (!this.columnCombo.getText().equals(tableName)) {
-				this.columnCombo.setText(tableName);
-			}
-		}
-		else {
-			if (!this.columnCombo.getText().equals(NLS.bind(JptUiMappingsMessages.ColumnComposite_defaultWithOneParam, defaultName))) {
-				this.columnCombo.select(0);
-			}
-		}
-	}
-
-	private void popuplateDiscriminatorTypeComboViewer() {
-		if (this.discriminatorColumn.getDiscriminatorType() == DiscriminatorType.DEFAULT) {
-			if (((StructuredSelection) this.discriminatorTypeViewer.getSelection()).getFirstElement() != DiscriminatorType.DEFAULT) {
-				this.discriminatorTypeViewer.setSelection(new StructuredSelection(DiscriminatorType.DEFAULT));
-			}
-		}
-		else if (this.discriminatorColumn.getDiscriminatorType() == DiscriminatorType.CHAR) {
-			if (((StructuredSelection) this.discriminatorTypeViewer.getSelection()).getFirstElement() != DiscriminatorType.CHAR) {
-				this.discriminatorTypeViewer.setSelection(new StructuredSelection(DiscriminatorType.CHAR));
-			}
-		}
-		else if (this.discriminatorColumn.getDiscriminatorType() == DiscriminatorType.INTEGER) {
-			if (((StructuredSelection) this.discriminatorTypeViewer.getSelection()).getFirstElement() != DiscriminatorType.INTEGER) {
-				this.discriminatorTypeViewer.setSelection(new StructuredSelection(DiscriminatorType.INTEGER));
-			}
-		}
-		else {
-			if (((StructuredSelection) this.discriminatorTypeViewer.getSelection()).getFirstElement() != DiscriminatorType.STRING) {
-				this.discriminatorTypeViewer.setSelection(new StructuredSelection(DiscriminatorType.STRING));
-			}
-		}		
-	}
-	
-	private void populateStrategyComboViewer() {
-		if (this.entity.getInheritanceStrategy() == InheritanceType.DEFAULT) {
-			if (((StructuredSelection) this.strategyViewer.getSelection()).getFirstElement() != InheritanceType.DEFAULT) {
-				this.strategyViewer.setSelection(new StructuredSelection(InheritanceType.DEFAULT));
-			}
-		}
-		else if (this.entity.getInheritanceStrategy() == InheritanceType.JOINED) {
-			if (((StructuredSelection) this.strategyViewer.getSelection()).getFirstElement() != InheritanceType.JOINED) {
-				this.strategyViewer.setSelection(new StructuredSelection(InheritanceType.JOINED));
-			}
-		}
-		else if (this.entity.getInheritanceStrategy() == InheritanceType.SINGLE_TABLE) {
-			if (((StructuredSelection) this.strategyViewer.getSelection()).getFirstElement() != InheritanceType.SINGLE_TABLE) {
-				this.strategyViewer.setSelection(new StructuredSelection(InheritanceType.SINGLE_TABLE));
-			}
-		}
-		else {
-			if (((StructuredSelection) this.strategyViewer.getSelection()).getFirstElement() != InheritanceType.TABLE_PER_CLASS) {
-				this.strategyViewer.setSelection(new StructuredSelection(InheritanceType.TABLE_PER_CLASS));
-			}
-		}		
-	}
-
-	private void populateDiscriminatorValueCombo() {
-		String specifiedValue = this.entity.getSpecifiedDiscriminatorValue();
-		String defaultValue = this.entity.getDefaultDiscriminatorValue();
-
-		if (this.entity.discriminatorValueIsAllowed()) {
-			this.discriminatorValueCombo.setEnabled(true);
-			if (this.discriminatorValueCombo.getItemCount() == 0) {
-				this.discriminatorValueCombo.add(JptUiMappingsMessages.DiscriminatorColumnComposite_defaultEmpty);
-			}
-			if (defaultValue != null) {
-				this.discriminatorValueCombo.setItem(0, NLS.bind(JptUiMappingsMessages.ColumnComposite_defaultWithOneParam, defaultValue));
-			}
-			else {
-				this.discriminatorValueCombo.setItem(0, JptUiMappingsMessages.DiscriminatorColumnComposite_defaultEmpty);
-			}
-		}
-		else {
-			this.discriminatorValueCombo.setEnabled(false);
-			if (this.discriminatorValueCombo.getItemCount() == 1) {
-				this.discriminatorValueCombo.setText("");
-				this.discriminatorValueCombo.removeAll();
-			}
-		}
-			
-		if (specifiedValue != null) {
-			if (!this.discriminatorValueCombo.getText().equals(specifiedValue)) {
-				this.discriminatorValueCombo.setText(specifiedValue);
-			}
-		}
-		else {
-			//combo text does not update when switching between 2 entities that both have a default discriminator value.  
-			//clear the selection and then set it again
-			this.discriminatorValueCombo.clearSelection();
-			this.discriminatorValueCombo.select(0);
-		}
-	}
-	
-	private void entityChanged(Notification notification) {	
-		if (notification.getFeatureID(IEntity.class) == JpaCoreMappingsPackage.IENTITY__INHERITANCE_STRATEGY) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					InheritanceType inheritanceType = entity.getInheritanceStrategy();
-					 if (((StructuredSelection) strategyViewer.getSelection()).getFirstElement() != inheritanceType) {
-						strategyViewer.setSelection(new StructuredSelection(inheritanceType));
-					}					
-				}
-			});
-		}
-		else if (notification.getFeatureID(IEntity.class) == JpaCoreMappingsPackage.IENTITY__SPECIFIED_DISCRIMINATOR_VALUE) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					String discriminatorValue = entity.getSpecifiedDiscriminatorValue();
-					if (discriminatorValueCombo.getText() == null || !discriminatorValueCombo.getText().equals(discriminatorValue)) {
-						if (discriminatorValue == null) {
-							discriminatorValueCombo.select(0);
-						}
-						else {
-							discriminatorValueCombo.setText(discriminatorValue);
-						}
-					}			
-				}
-			});
-		}
-		else if (notification.getFeatureID(IEntity.class) == JpaCoreMappingsPackage.IENTITY__DEFAULT_DISCRIMINATOR_VALUE) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateDiscriminatorValueCombo();
-				}
-			});
-		}
-	}
-
-	protected void discriminatorColumnChanged(Notification notification) {
-		if (notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__SPECIFIED_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateColumnName();
-				}
-			});
-		}
-		else if (notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__DEFAULT_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateDefaultColumnName();
-				}
-			});
-		}
-
-		else if (notification.getFeatureID(IDiscriminatorColumn.class) == JpaCoreMappingsPackage.IDISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					DiscriminatorType discriminatorType = discriminatorColumn.getDiscriminatorType();
-					if (((StructuredSelection) discriminatorTypeViewer.getSelection()).getFirstElement() != discriminatorType) {
-						discriminatorTypeViewer.setSelection(new StructuredSelection(discriminatorType));
-					}					
-				}
-			});
-		}
-	}
-
-	public void dispose() {
-		this.pkJoinColumnsComposite.dispose();
-		super.dispose();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/InverseJoinColumnDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/InverseJoinColumnDialog.java
deleted file mode 100644
index 4d45d37..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/InverseJoinColumnDialog.java
+++ /dev/null
@@ -1,81 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.IJoinTable;
-import org.eclipse.jpt.core.internal.mappings.IMultiRelationshipMapping;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Shell;
-
-public class InverseJoinColumnDialog extends JoinColumnInJoinTableDialog {
-
-	InverseJoinColumnDialog(Shell parent, IJoinTable joinTable) {
-		super(parent, joinTable);
-	}
-
-	InverseJoinColumnDialog(Shell parent, IJoinColumn joinColumn) {
-		super(parent, joinColumn);
-	}
-	
-	protected String getTitle() {
-		return JptUiMappingsMessages.InverseJoinColumnDialog_editInverseJoinColumn;
-	}
-	
-	protected void populateNameCombo() {
-		if (getJoinTable() == null) {
-			return;
-		}
-		if (getJoinColumn() != null) {
-			getNameCombo().add(NLS.bind(JptUiMappingsMessages.InverseJoinColumnDialog_defaultWithOneParam, getJoinColumn().getDefaultName()));
-		}
-		Table joinDBTable = getJoinTable().dbTable();
-		if (joinDBTable != null) {
-			for (Iterator i = joinDBTable.columnNames(); i.hasNext(); ) {
-				getNameCombo().add((String) i.next());
-			}
-		}
-		if (getJoinColumn() != null && getJoinColumn().getSpecifiedName() != null) {
-			getNameCombo().setText(getJoinColumn().getSpecifiedName());
-		}
-		else {
-			getNameCombo().select(0);
-		}
-	}
-
-	protected void populateReferencedNameCombo() {
-		if (getJoinTable() == null) {
-			return;
-		}
-		if (getJoinColumn() != null) {
-			getReferencedColumnNameCombo().add(NLS.bind(JptUiMappingsMessages.InverseJoinColumnDialog_defaultWithOneParam, getJoinColumn().getDefaultReferencedColumnName()));
-		}
-		IMultiRelationshipMapping multiRelationshipMapping = (IMultiRelationshipMapping) getJoinTable().eContainer();
-		IEntity targetEntity = multiRelationshipMapping.getResolvedTargetEntity();
-		if (targetEntity != null) {
-			Table referencedDbTable = targetEntity.primaryDbTable();
-			if (referencedDbTable != null) {
-				for (Iterator i = referencedDbTable.columnNames(); i.hasNext(); ) {
-					getReferencedColumnNameCombo().add((String) i.next());
-				}
-			}
-		}
-		if (getJoinColumn() != null && getJoinColumn().getSpecifiedReferencedColumnName() != null) {
-			getReferencedColumnNameCombo().setText(getJoinColumn().getSpecifiedReferencedColumnName());
-		}
-		else {
-			getReferencedColumnNameCombo().select(0);
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnComposite.java
deleted file mode 100644
index 98b52e4..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnComposite.java
+++ /dev/null
@@ -1,428 +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.ui.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.mappings.DefaultTrueBoolean;
-import org.eclipse.jpt.core.internal.mappings.IAbstractColumn;
-import org.eclipse.jpt.core.internal.mappings.IAbstractJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.INamedColumn;
-import org.eclipse.jpt.core.internal.mappings.ISingleRelationshipMapping;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class JoinColumnComposite
-	extends BaseJpaComposite
-{
-	private ISingleRelationshipMapping singleRelationshipMapping;
-	private final Adapter singleRelationshipMappingListener;
-	private final Adapter joinColumnListener;
-
-
-	private Group joinColumnsGroup;
-	Button overrideDefaultJoinColumnsCheckBox;
-	ListViewer joinColumnsListViewer;
-	private Button joinColumnsRemoveButton;
-	private Button joinColumnsEditButton;
-	
-
-	
-	public JoinColumnComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.singleRelationshipMappingListener = buildSingleRelationshipMappingListener();
-		this.joinColumnListener = buildJoinColumnListener();
-	}
-
-	
-	private Adapter buildSingleRelationshipMappingListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				singleRelationshipMappingChanged(notification);
-			}
-		};
-	}
-	
-	private Adapter buildJoinColumnListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				joinColumnChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		composite.setLayout(layout);
-		
-		this.overrideDefaultJoinColumnsCheckBox = 
-			getWidgetFactory().createButton(
-				composite, 
-				JptUiMappingsMessages.JoinColumnComposite_overrideDefaultJoinColumns, 
-				SWT.CHECK);
-		this.overrideDefaultJoinColumnsCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				if (JoinColumnComposite.this.overrideDefaultJoinColumnsCheckBox.getSelection()) {
-					IJoinColumn defaultJoinColumn = JoinColumnComposite.this.singleRelationshipMapping.getDefaultJoinColumns().get(0);
-					String columnName = defaultJoinColumn.getDefaultName();
-					String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName();
-					
-					IJoinColumn joinColumn = JoinColumnComposite.this.singleRelationshipMapping.createJoinColumn(0);
-					JoinColumnComposite.this.singleRelationshipMapping.getSpecifiedJoinColumns().add(joinColumn);
-					joinColumn.setSpecifiedName(columnName);
-					joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-				} else {
-					JoinColumnComposite.this.singleRelationshipMapping.getSpecifiedJoinColumns().clear();
-				}
-			}
-		});
-
-		this.joinColumnsGroup = 
-			getWidgetFactory().createGroup(
-				composite, 
-				JptUiMappingsMessages.JoinColumnComposite_joinColumn);
-		this.joinColumnsGroup.setLayout(new GridLayout(2, false));
-		GridData gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.joinColumnsGroup.setLayoutData(gridData);
-			
-		this.joinColumnsListViewer = new ListViewer(this.joinColumnsGroup, SWT.BORDER | SWT.MULTI);
-		this.joinColumnsListViewer.setContentProvider(buildJoinColumnsListContentProvider());
-		this.joinColumnsListViewer.setLabelProvider(buildJoinColumnsListLabelProvider());
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.verticalSpan = 3;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.joinColumnsListViewer.getList().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.joinColumnsListViewer.getList(), IJpaHelpContextIds.MAPPING_JOIN_TABLE_COLUMNS);
-		
-		Button addJoinColumnButton = getWidgetFactory().createButton(this.joinColumnsGroup, JptUiMappingsMessages.JoinColumnComposite_add, SWT.NONE);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		addJoinColumnButton.setLayoutData(gridData);
-		addJoinColumnButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				addJoinColumn();
-			}
-		});
-		
-		this.joinColumnsEditButton = getWidgetFactory().createButton(this.joinColumnsGroup, JptUiMappingsMessages.JoinColumnComposite_edit, SWT.NONE);
-		this.joinColumnsEditButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				editJoinColumn();
-			}
-		});
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		this.joinColumnsEditButton.setLayoutData(gridData);
-
-		this.joinColumnsRemoveButton = getWidgetFactory().createButton(this.joinColumnsGroup, JptUiMappingsMessages.JoinColumnComposite_remove, SWT.NONE);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.BEGINNING;
-		this.joinColumnsRemoveButton.setLayoutData(gridData);
-		this.joinColumnsRemoveButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				removeJoinColumn();
-			}
-		});
-		
-		this.joinColumnsListViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				updateEnablement();
-			}
-		});
-
-	}
-	private IContentProvider buildJoinColumnsListContentProvider() {
-		return new IStructuredContentProvider(){
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-				// do nothing
-			}
-			public void dispose() {
-				// do nothing
-			}
-			public Object[] getElements(Object inputElement) {
-				return ((ISingleRelationshipMapping) inputElement).getJoinColumns().toArray();
-			}
-		};
-	}
-	
-	private ILabelProvider buildJoinColumnsListLabelProvider() {
-		return new LabelProvider() {
-			public String getText(Object element) {
-				IJoinColumn joinColumn = (IJoinColumn) element;
-				return (JoinColumnComposite.this.singleRelationshipMapping.getSpecifiedJoinColumns().size() == 0) ?
-					buildDefaultJoinColumnLabel(joinColumn)
-				:
-					buildJoinColumnLabel(joinColumn);
-			}
-		};
-	}
-	
-	String buildDefaultJoinColumnLabel(IJoinColumn joinColumn) {
-		return NLS.bind(JptUiMappingsMessages.JoinColumnComposite_mappingBetweenTwoParamsDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());				
-	}
-	
-	String buildJoinColumnLabel(IJoinColumn joinColumn) {
-		if (joinColumn.getSpecifiedName() == null) {
-			if (joinColumn.getSpecifiedReferencedColumnName() == null) {
-				return NLS.bind(JptUiMappingsMessages.JoinColumnComposite_mappingBetweenTwoParamsBothDefault, joinColumn.getName(),joinColumn.getReferencedColumnName());				
-			}
-			return NLS.bind(JptUiMappingsMessages.JoinColumnComposite_mappingBetweenTwoParamsFirstDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());
-		}
-		else if (joinColumn.getSpecifiedReferencedColumnName() == null) {
-			return NLS.bind(JptUiMappingsMessages.JoinColumnComposite_mappingBetweenTwoParamsSecDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());				
-		}
-		else {
-			return NLS.bind(JptUiMappingsMessages.JoinColumnComposite_mappingBetweenTwoParams, joinColumn.getName(), joinColumn.getReferencedColumnName());					
-		}
-	}
-	
-	protected void joinColumnChanged(Notification notification) {
-		if (notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__SPECIFIED_NAME
-			|| notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__DEFAULT_NAME
-			|| notification.getFeatureID(IAbstractColumn.class) == JpaCoreMappingsPackage.IABSTRACT_COLUMN__SPECIFIED_TABLE
-			|| notification.getFeatureID(IAbstractColumn.class) == JpaCoreMappingsPackage.IABSTRACT_COLUMN__DEFAULT_TABLE
-			|| notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__SPECIFIED_REFERENCED_COLUMN_NAME
-			|| notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__DEFAULT_REFERENCED_COLUMN_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					joinColumnsListViewer.refresh();
-				}
-			});
-		}
-	}
-
-	void addJoinColumn() {
-		JoinColumnDialog dialog = new JoinColumnInRelationshipMappingDialog(this.getControl().getShell(), this.singleRelationshipMapping);
-		this.addJoinColumnFromDialog(dialog);
-	}
-	
-	private void addJoinColumnFromDialog(JoinColumnDialog dialog) {
-		if (dialog.open() != Window.OK) {
-			return;
-		}
-		int index = this.singleRelationshipMapping.getJoinColumns().size();
-		IJoinColumn joinColumn = this.singleRelationshipMapping.createJoinColumn(index);
-		this.singleRelationshipMapping.getSpecifiedJoinColumns().add(joinColumn);
-		joinColumn.setSpecifiedName(dialog.getSelectedName());
-		joinColumn.setSpecifiedReferencedColumnName(dialog.getReferencedColumnName());
-		if (!dialog.isDefaultTableSelected()) {
-			//not checking this for name and referenced column name because there is no
-			//default option when you are adding a second join column.  There is always
-			//at least 1 join column (the default)
-			joinColumn.setSpecifiedTable(dialog.getSelectedTable());
-		}
-	}
-	
-	void editJoinColumn() {
-		IJoinColumn joinColumn = getSelectedJoinColumn();
-		JoinColumnDialog dialog = new JoinColumnInRelationshipMappingDialog(this.getControl().getShell(), joinColumn);
-		editJoinColumnFromDialog(dialog, joinColumn);
-	}
-	
-	private IJoinColumn getSelectedJoinColumn() {
-		return (IJoinColumn) ((StructuredSelection) this.joinColumnsListViewer.getSelection()).getFirstElement();
-	}
-
-	private void editJoinColumnFromDialog(JoinColumnDialog dialog, IJoinColumn joinColumn) {
-		if (dialog.open() == Window.OK) {
-			editJoinColumnDialogOkd(dialog, joinColumn);
-		}
-	}
-	
-	private void editJoinColumnDialogOkd(JoinColumnDialog dialog, IJoinColumn joinColumn) {
-		String name = dialog.getSelectedName();
-		String referencedColumnName = dialog.getReferencedColumnName();
-		String table = dialog.getSelectedTable();
-
-		if (dialog.isDefaultNameSelected()) {
-			if (joinColumn.getSpecifiedName() != null) {
-				joinColumn.setSpecifiedName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedName() == null || !joinColumn.getSpecifiedName().equals(name)){
-			joinColumn.setSpecifiedName(name);
-		}
-		if (dialog.isDefaultReferencedColumnNameSelected()) {
-			if (joinColumn.getSpecifiedReferencedColumnName() != null) {
-				joinColumn.setSpecifiedReferencedColumnName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedReferencedColumnName() == null || !joinColumn.getSpecifiedReferencedColumnName().equals(referencedColumnName)){
-			joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-		}
-		
-		if (dialog.isDefaultTableSelected()) {
-			if (joinColumn.getSpecifiedTable() != null) {
-				joinColumn.setSpecifiedTable(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedTable() == null || !joinColumn.getSpecifiedTable().equals(table)){
-			joinColumn.setSpecifiedTable(table);
-		}
-
-		DefaultTrueBoolean insertable = dialog.getInsertable();
-		if (joinColumn.getInsertable() != insertable) {
-			joinColumn.setInsertable(insertable);
-		}
-
-		DefaultTrueBoolean updatable = dialog.getUpdatable();
-		if (joinColumn.getUpdatable() != updatable) {
-			joinColumn.setUpdatable(updatable);
-		}
-	}
-	
-	void removeJoinColumn() {
-		ISelection selection = this.joinColumnsListViewer.getSelection();
-		if (selection instanceof StructuredSelection) {
-			for (Iterator stream = ((StructuredSelection) selection).iterator(); stream.hasNext(); ) {
-				this.singleRelationshipMapping.getJoinColumns().remove(stream.next());
-			}
-		}
-	}
-	
-	protected void singleRelationshipMappingChanged(Notification notification) {
-		if (notification.getFeatureID(ISingleRelationshipMapping.class) == JpaCoreMappingsPackage.ISINGLE_RELATIONSHIP_MAPPING__SPECIFIED_JOIN_COLUMNS) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					JoinColumnComposite.this.joinColumnsListViewer.refresh();
-					JoinColumnComposite.this.overrideDefaultJoinColumnsCheckBox.setSelection(singleRelationshipMapping.containsSpecifiedJoinColumns());
-					JoinColumnComposite.this.updateEnablement();
-				}
-			});
-			if (notification.getEventType() == Notification.ADD) {
-				((IJoinColumn) notification.getNewValue()).eAdapters().add(this.joinColumnListener);
-			}
-			else if (notification.getEventType() == Notification.REMOVE) {
-				((IJoinColumn) notification.getOldValue()).eAdapters().remove(this.joinColumnListener);				
-			}
-		}
-	}
-	
-	private void enableGroup(Group group, boolean enabled) {
-		group.setEnabled(enabled);
-		for (int i = 0; i < group.getChildren().length; i++) {
-			group.getChildren()[i].setEnabled(enabled);
-		}	
-	}
-
-	
-	
-	protected void engageListeners() {
-		if (this.singleRelationshipMapping != null) {
-			this.singleRelationshipMapping.eAdapters().add(this.singleRelationshipMappingListener);
-			for (Iterator i = this.singleRelationshipMapping.getJoinColumns().iterator(); i.hasNext(); ) {
-				((IJoinColumn) i.next()).eAdapters().add(this.joinColumnListener);
-			}
-		}
-	}
-	
-	protected void disengageListeners() {
-		if (this.singleRelationshipMapping != null) {
-			for (Iterator i = this.singleRelationshipMapping.getJoinColumns().iterator(); i.hasNext(); ) {
-				((IJoinColumn) i.next()).eAdapters().remove(this.joinColumnListener);
-			}
-			this.singleRelationshipMapping.eAdapters().remove(this.singleRelationshipMappingListener);
-		}
-	}
-		
-	public void doPopulate(EObject obj) {
-		this.singleRelationshipMapping = (ISingleRelationshipMapping) obj;
-		if (this.singleRelationshipMapping == null) {
-			this.joinColumnsListViewer.setInput(null);
-			return;
-		}
-		
-		this.joinColumnsListViewer.setInput(this.singleRelationshipMapping);
-		
-
-		updateEnablement();
-		this.overrideDefaultJoinColumnsCheckBox.setSelection(this.singleRelationshipMapping.containsSpecifiedJoinColumns());
-	}
-	
-	@Override
-	protected void doPopulate() {
-		this.joinColumnsListViewer.setInput(this.singleRelationshipMapping);		
-	}
-	
-	void updateEnablement() {
-		boolean groupEnabledState = this.singleRelationshipMapping.containsSpecifiedJoinColumns();
-		enableGroup(this.joinColumnsGroup, groupEnabledState);
-
-		this.joinColumnsRemoveButton.setEnabled(groupEnabledState && !((StructuredSelection) this.joinColumnsListViewer.getSelection()).isEmpty());
-		this.joinColumnsEditButton.setEnabled(groupEnabledState && ((StructuredSelection) this.joinColumnsListViewer.getSelection()).size() == 1);
-	}
-	
-	public void dispose() {
-		disengageListeners();
-		super.dispose();
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnDialog.java
deleted file mode 100644
index e36b19e..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnDialog.java
+++ /dev/null
@@ -1,209 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.mappings.DefaultTrueBoolean;
-import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.InheritanceType;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-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.Shell;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-
-public abstract class JoinColumnDialog extends AbstractJoinColumnDialog<IJoinColumn> {
-	
-	private Combo tableCombo;
-	private ComboViewer insertableComboViewer;
-	private ComboViewer updatableComboViewer;
-
-	private boolean defaultTableSelected;
-	private String selectedTable;
-	private DefaultTrueBoolean insertable;
-	private DefaultTrueBoolean updatable;
-	
-	JoinColumnDialog(Shell parent) {
-		super(parent);
-	}
-
-	JoinColumnDialog(Shell parent, IJoinColumn joinColumn) {
-		super(parent, joinColumn);
-	}
-
-	protected Control createDialogArea(Composite parent) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		Composite composite = (Composite) super.createDialogArea(parent);
-	
-		Label tableLabel = new Label(composite, SWT.LEFT);
-		tableLabel.setText(JptUiMappingsMessages.JoinColumnDialog_table);
-		GridData gridData = new GridData();
-		tableLabel.setLayoutData(gridData);
-
-		this.tableCombo = new Combo(composite, SWT.LEFT);
-		this.tableCombo.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				populateNameCombo();
-			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-				populateNameCombo();
-			}
-		});
-		gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.tableCombo.setLayoutData(gridData);
-		//PlatformUI.getWorkbench().getHelpSystem().setHelp(this.tableCombo, IJpaHelpContextIds.MAPPING_JOIN_REFERENCED_COLUMN);
-		populateTableCombo();
-
-		Label insertableLabel = new Label(composite, SWT.LEFT);
-		insertableLabel.setText(JptUiMappingsMessages.JoinColumnDialog_insertable);
-		insertableLabel.setLayoutData(new GridData());
-		
-		this.insertableComboViewer = this.buildInsertableComboViewer(composite);
-		this.insertableComboViewer.getCombo().setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
-		helpSystem.setHelp(this.insertableComboViewer.getCombo(), IJpaHelpContextIds.MAPPING_COLUMN_INSERTABLE);
-	
-		Label updatableLabel = new Label(composite, SWT.LEFT);
-		updatableLabel.setText(JptUiMappingsMessages.JoinColumnDialog_updatable);
-		updatableLabel.setLayoutData(new GridData());
-		
-		this.updatableComboViewer = this.buildUpdatableComboViewer(composite);
-		this.updatableComboViewer.getCombo().setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
-		helpSystem.setHelp(this.updatableComboViewer.getCombo(), IJpaHelpContextIds.MAPPING_COLUMN_UPDATABLE);
-	
-		return composite;
-	}
-
-	private ComboViewer buildInsertableComboViewer(Composite parent) {
-		ComboViewer viewer = new ComboViewer(parent, SWT.READ_ONLY);
-		viewer.setLabelProvider(buildDefaultTrueLabelProvider());
-		viewer.add(DefaultTrueBoolean.VALUES.toArray());
-		
-		DefaultTrueBoolean sel = (this.joinColumn() == null) ? DefaultTrueBoolean.DEFAULT : this.joinColumn().getInsertable();
-		viewer.setSelection(new StructuredSelection(sel));
-		return viewer;
-	}
-	
-	private IBaseLabelProvider buildDefaultTrueLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				if (element == DefaultTrueBoolean.DEFAULT) {
-					//TODO need to move this to the model, don't want hardcoded String
-					return NLS.bind(JptUiMappingsMessages.JoinColumnDialog_defaultTrue, "True");
-				}
-				return super.getText(element);
-			}
-		};
-	}
-
-	private ComboViewer buildUpdatableComboViewer(Composite parent) {
-		ComboViewer viewer = new ComboViewer(parent, SWT.READ_ONLY);
-		viewer.setLabelProvider(buildDefaultTrueLabelProvider());
-		viewer.add(DefaultTrueBoolean.VALUES.toArray());
-		DefaultTrueBoolean sel = (this.joinColumn() == null) ? DefaultTrueBoolean.DEFAULT : this.joinColumn().getUpdatable();
-		viewer.setSelection(new StructuredSelection(sel));
-		return viewer;
-	}
-	
-	protected void populateTableCombo() {
-		this.tableCombo.add(NLS.bind(JptUiMappingsMessages.JoinColumnDialog_defaultWithOneParam, defaultTableName()));
-		Schema schema = this.getSchema();
-		if (schema != null) {
-			Iterator<String> tables = schema.tableNames();
-			for (Iterator<String> stream = CollectionTools.sort( tables); stream.hasNext(); ) {
-				this.tableCombo.add(stream.next());
-			}
-		}
-		if (specifiedTableName() != null) {
-			this.tableCombo.setText(specifiedTableName());
-		}
-		else {
-			this.tableCombo.select(0);
-		}
-	}
-	
-	protected abstract String defaultTableName();
-	
-	protected String specifiedTableName() {
-		if (getJoinColumn() != null) {
-			return getJoinColumn().getSpecifiedTable();
-		}
-		return null;
-	}
-	
-	protected String tableName() {
-		if (this.tableCombo != null) {
-			if (this.tableCombo.getSelectionIndex() == 0) {
-				return defaultTableName();
-			}
-			return this.tableCombo.getText();
-		}
-		return (this.specifiedTableName() == null) ? defaultTableName() : this.specifiedTableName();
-	}
-	
-	protected abstract Schema getSchema();
-	
-	private IJoinColumn joinColumn() {
-		return this.getJoinColumn();
-	}
-
-	protected boolean isDefaultTableSelected() {
-		return this.defaultTableSelected;
-	}
-
-	public String getSelectedTable() {
-		return this.selectedTable;
-	}
-
-	public DefaultTrueBoolean getInsertable() {
-		return this.insertable;
-	}
-
-	public DefaultTrueBoolean getUpdatable() {
-		return this.updatable;
-	}
-
-	public boolean close() {
-		this.defaultTableSelected = this.tableCombo.getSelectionIndex() == 0;
-		this.selectedTable = this.tableCombo.getText();
-
-		ISelection selection = this.insertableComboViewer.getSelection();
-		if (selection instanceof IStructuredSelection) {
-			this.insertable = (DefaultTrueBoolean) ((IStructuredSelection) selection).getFirstElement();
-		}
-
-		selection = this.updatableComboViewer.getSelection();
-		if (selection instanceof IStructuredSelection) {
-			this.updatable = (DefaultTrueBoolean) ((IStructuredSelection) selection).getFirstElement();
-		}
-
-		return super.close();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInAssociationOverrideDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInAssociationOverrideDialog.java
deleted file mode 100644
index c324a95..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInAssociationOverrideDialog.java
+++ /dev/null
@@ -1,62 +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.internal.mappings.details;
-
-import org.eclipse.jpt.core.internal.IAttributeMapping;
-import org.eclipse.jpt.core.internal.mappings.IAssociationOverride;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.IRelationshipMapping;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.swt.widgets.Shell;
-
-public class JoinColumnInAssociationOverrideDialog extends JoinColumnDialog {
-
-	private IAssociationOverride associationOverride;
-	
-	JoinColumnInAssociationOverrideDialog(Shell parent, IAssociationOverride associationOverride) {
-		super(parent);
-		this.associationOverride = associationOverride;
-	}
-
-	JoinColumnInAssociationOverrideDialog(Shell parent, IJoinColumn joinColumn) {
-		super(parent, joinColumn);
-		this.associationOverride = (IAssociationOverride) joinColumn.eContainer();
-	}
-	
-	protected Schema getSchema() {
-		return this.associationOverride.typeMapping().dbSchema();
-	}
-	
-	protected String defaultTableName() {
-		if (getJoinColumn() != null) {
-			return getJoinColumn().getDefaultTable();
-		}
-		return this.associationOverride.typeMapping().getTableName();
-	}
-
-	protected Table getNameTable() {
-		return this.associationOverride.typeMapping().primaryDbTable();
-	}
-	
-	protected Table getReferencedNameTable() {
-		IAttributeMapping attributeMapping = this.associationOverride.getOwner().attributeMapping(this.associationOverride.getName());
-		if (attributeMapping == null || !(attributeMapping instanceof IRelationshipMapping)) {
-			return null;
-		}
-		IEntity targetEntity = ((IRelationshipMapping) attributeMapping).getResolvedTargetEntity();
-		if (targetEntity != null) {
-			return targetEntity.primaryDbTable();
-		}
-		return null;
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInJoinTableDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInJoinTableDialog.java
deleted file mode 100644
index 5a8a747..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInJoinTableDialog.java
+++ /dev/null
@@ -1,45 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.IJoinTable;
-import org.eclipse.jpt.core.internal.mappings.IMultiRelationshipMapping;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.swt.widgets.Shell;
-
-//if there is only 1 joinColumn and the user is editing it, they should be
-//able to define defaults.  otherwise, we probably shouldn't allow it.
-public class JoinColumnInJoinTableDialog extends AbstractJoinColumnDialog<IJoinColumn> {
-
-	private IJoinTable joinTable;
-	
-	JoinColumnInJoinTableDialog(Shell parent, IJoinTable joinTable) {
-		super(parent);
-		this.joinTable = joinTable;
-	}
-
-	JoinColumnInJoinTableDialog(Shell parent, IJoinColumn joinColumn) {
-		super(parent, joinColumn);
-		this.joinTable = (IJoinTable) joinColumn.eContainer();
-	}
-	protected IJoinTable getJoinTable() {
-		return this.joinTable;
-	}
-	
-	protected Table getNameTable() {
-		return getJoinTable().dbTable();
-	}
-	
-	protected Table getReferencedNameTable() {
-		IMultiRelationshipMapping multiRelationshipMapping = (IMultiRelationshipMapping) getJoinTable().eContainer();
-		return multiRelationshipMapping.typeMapping().primaryDbTable();
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInRelationshipMappingDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInRelationshipMappingDialog.java
deleted file mode 100644
index e60a047..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInRelationshipMappingDialog.java
+++ /dev/null
@@ -1,56 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.ISingleRelationshipMapping;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.swt.widgets.Shell;
-
-public class JoinColumnInRelationshipMappingDialog extends JoinColumnDialog {
-
-	private ISingleRelationshipMapping singleRelationshipMapping;
-	
-	JoinColumnInRelationshipMappingDialog(Shell parent, ISingleRelationshipMapping singleRelationshipMapping) {
-		super(parent);
-		this.singleRelationshipMapping = singleRelationshipMapping;
-	}
-
-	JoinColumnInRelationshipMappingDialog(Shell parent, IJoinColumn joinColumn) {
-		super(parent, joinColumn);
-		this.singleRelationshipMapping = (ISingleRelationshipMapping) joinColumn.eContainer();
-	}
-	
-	protected String defaultTableName() {
-		if (getJoinColumn() != null) {
-			return getJoinColumn().getDefaultTable();
-		}
-		return this.singleRelationshipMapping.typeMapping().getTableName();
-	}
-	
-	protected Schema getSchema() {
-		return this.singleRelationshipMapping.typeMapping().dbSchema();
-	}
-	
-	protected Table getNameTable() {
-		Schema schema = this.getSchema();
-		return (schema == null) ? null : schema.tableNamed(tableName());
-	}
-	
-	protected Table getReferencedNameTable() {
-		IEntity targetEntity = this.singleRelationshipMapping.getResolvedTargetEntity();
-		if (targetEntity != null) {
-			return targetEntity.primaryDbTable();
-		}
-		return null;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java
deleted file mode 100644
index 886e200..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java
+++ /dev/null
@@ -1,348 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import java.util.List;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jpt.core.internal.mappings.IAbstractColumn;
-import org.eclipse.jpt.core.internal.mappings.IAbstractJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.INamedColumn;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class JoinColumnsComposite extends BaseJpaComposite
-{
-	
-	private Owner owner;
-	private final Adapter joinColumnsOwnerListener;
-
-	private ListViewer joinColumnsListViewer;
-		
-	private final Adapter joinColumnListener;
-	
-	private Group joinColumnsGroup;
-	private Button joinColumnsAddButton;
-	private Button joinColumnsRemoveButton;
-	private Button joinColumnsEditButton;
-	
-
-	public JoinColumnsComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory, String groupTitle) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.joinColumnsOwnerListener = buildJoinColumnsOwnerListener();
-		this.joinColumnListener = buildJoinColumnListener();
-		this.joinColumnsGroup.setText(groupTitle);
-	}
-	
-	private Adapter buildJoinColumnsOwnerListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				joinColumnsOwnerChanged(notification);
-			}
-		};
-	}
-	
-	private Adapter buildJoinColumnListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				joinColumnChanged(notification, joinColumnsListViewer);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-
-		this.joinColumnsGroup = 
-			getWidgetFactory().createGroup(
-				composite, 
-				"");
-		this.joinColumnsGroup.setLayout(new GridLayout(2, false));
-		GridData gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.joinColumnsGroup.setLayoutData(gridData);
-			
-		this.joinColumnsListViewer = new ListViewer(this.joinColumnsGroup, SWT.BORDER | SWT.MULTI);
-		this.joinColumnsListViewer.setContentProvider(buildJoinColumnsListContentProvider());
-		this.joinColumnsListViewer.setLabelProvider(buildJoinColumnsListLabelProvider());
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.verticalSpan = 3;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.joinColumnsListViewer.getList().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.joinColumnsListViewer.getList(), IJpaHelpContextIds.MAPPING_JOIN_TABLE_COLUMNS);
-		
-		this.joinColumnsAddButton = getWidgetFactory().createButton(this.joinColumnsGroup, JptUiMappingsMessages.JoinTableComposite_add, SWT.NONE);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		this.joinColumnsAddButton.setLayoutData(gridData);
-		this.joinColumnsAddButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				owner.addJoinColumn();
-			}
-		});
-		
-		this.joinColumnsEditButton = getWidgetFactory().createButton(this.joinColumnsGroup, JptUiMappingsMessages.JoinTableComposite_edit, SWT.NONE);
-		this.joinColumnsEditButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				editJoinColumn();
-			}
-		});
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		this.joinColumnsEditButton.setLayoutData(gridData);
-
-		this.joinColumnsRemoveButton = getWidgetFactory().createButton(this.joinColumnsGroup, JptUiMappingsMessages.JoinTableComposite_remove, SWT.NONE);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.BEGINNING;
-		this.joinColumnsRemoveButton.setLayoutData(gridData);
-		this.joinColumnsRemoveButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				removeJoinColumn();
-			}
-		});
-		
-		this.joinColumnsListViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				updateJoinColumnsEnablement();
-			}
-		});
-	}
-
-	private IContentProvider buildJoinColumnsListContentProvider() {
-		return new IStructuredContentProvider(){
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			}
-		
-			public void dispose() {
-				
-			}
-		
-			public Object[] getElements(Object inputElement) {
-				return ((Owner) inputElement).getJoinColumns().toArray();
-			}
-		};
-	}
-	
-	private ILabelProvider buildJoinColumnsListLabelProvider() {
-		return new LabelProvider() {
-			public String getText(Object element) {
-				IJoinColumn joinColumn = (IJoinColumn) element;
-				return (JoinColumnsComposite.this.owner.containsSpecifiedJoinColumns()) ?
-					buildJoinColumnLabel(joinColumn)
-				:
-					buildDefaultJoinColumnLabel(joinColumn);
-			}
-		};
-	}
-	
-	private String buildDefaultJoinColumnLabel(IJoinColumn joinColumn) {
-		return NLS.bind(JptUiMappingsMessages.JoinTableComposite_mappingBetweenTwoParamsDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());				
-	}
-	
-	private String buildJoinColumnLabel(IJoinColumn joinColumn) {
-		if (joinColumn.getSpecifiedName() == null) {
-			if (joinColumn.getSpecifiedReferencedColumnName() == null) {
-				return NLS.bind(JptUiMappingsMessages.JoinTableComposite_mappingBetweenTwoParamsBothDefault, joinColumn.getName(),joinColumn.getReferencedColumnName());				
-			}
-			return NLS.bind(JptUiMappingsMessages.JoinTableComposite_mappingBetweenTwoParamsFirstDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());
-		}
-		else if (joinColumn.getSpecifiedReferencedColumnName() == null) {
-			return NLS.bind(JptUiMappingsMessages.JoinTableComposite_mappingBetweenTwoParamsSecDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());				
-		}
-		else {
-			return NLS.bind(JptUiMappingsMessages.JoinTableComposite_mappingBetweenTwoParams, joinColumn.getName(), joinColumn.getReferencedColumnName());					
-		}
-	}
-
-	void editJoinColumn() {
-		this.owner.editJoinColumn(getSelectedJoinColumn());
-	}
-		
-	void removeJoinColumn() {
-		ISelection selection = this.joinColumnsListViewer.getSelection();
-		if (selection instanceof StructuredSelection) {
-			for (Iterator stream = ((StructuredSelection) selection).iterator(); stream.hasNext(); ) {
-				this.owner.getJoinColumns().remove(stream.next());
-			}
-		}
-	}
-	
-	private IJoinColumn getSelectedJoinColumn() {
-		return (IJoinColumn) ((StructuredSelection) this.joinColumnsListViewer.getSelection()).getFirstElement();
-	}
-		
-	protected void joinColumnsOwnerChanged(Notification notification) {
-		if (notification.getFeatureID(owner.owningFeatureClass()) == owner.specifiedJoinColumnsFeatureId()) {
-			if (notification.getEventType() == Notification.ADD) {
-				((IJoinColumn) notification.getNewValue()).eAdapters().add(this.joinColumnListener);
-			}
-			else if (notification.getEventType() == Notification.REMOVE) {
-				((IJoinColumn) notification.getOldValue()).eAdapters().remove(this.joinColumnListener);				
-			}
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					joinColumnsListViewer.refresh();
-					updateJoinColumnsEnablement();
-				}
-			});
-		}
-	}
-	
-	private void enableGroup(Group group, boolean enabled) {
-		group.setEnabled(enabled);
-		for (int i = 0; i < group.getChildren().length; i++) {
-			group.getChildren()[i].setEnabled(enabled);
-		}	
-	}
-		protected void joinColumnChanged(Notification notification, final ListViewer listViewer) {
-			if (notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__SPECIFIED_NAME
-				|| notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__DEFAULT_NAME
-				|| notification.getFeatureID(IAbstractColumn.class) == JpaCoreMappingsPackage.IABSTRACT_COLUMN__SPECIFIED_TABLE
-				|| notification.getFeatureID(IAbstractColumn.class) == JpaCoreMappingsPackage.IABSTRACT_COLUMN__DEFAULT_TABLE
-				|| notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__SPECIFIED_REFERENCED_COLUMN_NAME
-				|| notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__DEFAULT_REFERENCED_COLUMN_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					listViewer.refresh();
-				}
-			});
-		}
-	}
-		
-	protected void engageListeners() {
-		if (this.owner != null) {
-			this.owner.getEObject().eAdapters().add(this.joinColumnsOwnerListener);
-			for (IJoinColumn joinColumn : this.owner.getJoinColumns()) {
-				joinColumn.eAdapters().add(this.joinColumnListener);
-			}
-		}
-	}
-	
-	protected void disengageListeners() {
-		if (this.owner != null) {
-			for (IJoinColumn joinColumn : this.owner.getJoinColumns()) {
-				joinColumn.eAdapters().remove(this.joinColumnListener);
-			}
-			this.owner.getEObject().eAdapters().remove(this.joinColumnsOwnerListener);
-		}
-	}
-		
-	public void doPopulate(EObject obj) {
-		this.owner = (Owner) obj;
-		if (this.owner == null) {
-			this.joinColumnsListViewer.setInput(null);
-			return;
-		}
-		
-		this.joinColumnsListViewer.setInput(this.owner);
-		
-		updateEnablement();
-	}
-
-	@Override
-	protected void doPopulate() {
-	}
-
-	private void updateEnablement() {
-		updateJoinColumnsEnablement();
-	}
-	
-	void updateJoinColumnsEnablement() {
-		boolean groupEnabledState = this.owner.containsSpecifiedJoinColumns();
-		enableGroup(this.joinColumnsGroup, groupEnabledState);
-
-		this.joinColumnsRemoveButton.setEnabled(groupEnabledState && !((StructuredSelection) this.joinColumnsListViewer.getSelection()).isEmpty());
-		this.joinColumnsEditButton.setEnabled(groupEnabledState && ((StructuredSelection) this.joinColumnsListViewer.getSelection()).size() == 1);
-	}
-		
-	protected void enableWidgets(boolean enabled) {
-		enableGroup(this.joinColumnsGroup, enabled);
-		this.joinColumnsAddButton.setEnabled(enabled);
-		this.joinColumnsEditButton.setEnabled(enabled);
-		this.joinColumnsRemoveButton.setEnabled(enabled);
-		this.joinColumnsListViewer.getList().setEnabled(enabled);
-	}
-
-	public interface Owner {
-		int specifiedJoinColumnsFeatureId();
-		
-		Class owningFeatureClass();
-
-		EObject getEObject();
-		
-		boolean containsSpecifiedJoinColumns();
-		
-		List<IJoinColumn> getJoinColumns();
-		
-		List<IJoinColumn> getSpecifiedJoinColumns();
-		
-		IJoinColumn createJoinColumn(int index);
-		
-		void addJoinColumn();
-		
-		void editJoinColumn(IJoinColumn joinColumn);
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java
deleted file mode 100644
index f5fd60c..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java
+++ /dev/null
@@ -1,473 +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.ui.internal.mappings.details;
-
-import java.util.List;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.JpaEObject;
-import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.IJoinTable;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.db.internal.Connection;
-import org.eclipse.jpt.db.internal.ConnectionListener;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.JoinColumnsComposite.Owner;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Display;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class JoinTableComposite extends BaseJpaComposite
-{
-	
-	private IJoinTable joinTable;
-	private final Adapter joinTableListener;
-
-	protected TableCombo tableCombo;
-
-	private ConnectionProfile connectionProfile;
-	private ConnectionListener connectionListener;
-	
-	private Button overrideDefaultJoinColumnsCheckBox;
-	private JoinColumnsComposite joinColumnsComposite;
-	
-	private Button overrideDefaultInverseJoinColumnsCheckBox;
-	private JoinColumnsComposite inverseJoinColumnsComposite;
-
-	public JoinTableComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.joinTableListener = buildJoinTableListener();
-		this.connectionListener = buildConnectionListener();
-	}
-	
-	private Adapter buildJoinTableListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				joinTableChanged(notification);
-			}
-		};
-	}
-	
-	private ConnectionListener buildConnectionListener() {
-		return new ConnectionListener() {
-
-			public void aboutToClose(Connection connection) {
-				// not interested to this event.
-			}
-
-			public void closed(Connection connection) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						JoinTableComposite.this.tableCombo.populate();
-					}
-				});
-			}
-
-			public void modified(Connection connection) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						JoinTableComposite.this.tableCombo.populate();
-					}
-				});
-			}
-
-			public boolean okToClose(Connection connection) {
-				// not interested to this event.
-				return true;
-			}
-
-			public void opened(Connection connection) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						JoinTableComposite.this.tableCombo.populate();
-					}
-				});
-			}
-
-			public void databaseChanged(Connection connection, final Database database) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if(database == JoinTableComposite.this.tableCombo.getDatabase()) {
-							if (!getControl().isDisposed()) {
-								JoinTableComposite.this.tableCombo.populate();
-							}
-						}
-					}
-				});
-			}
-			
-			public void schemaChanged(Connection connection, final Schema schema) {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if(schema == JoinTableComposite.this.tableCombo.getTableSchema()) {
-							if (!getControl().isDisposed()) {
-								JoinTableComposite.this.tableCombo.populate();
-							}
-						}
-					}
-				});
-			}
-
-			public void tableChanged(Connection connection, final Table table) {
-				// not interested to this event.
-			}
-		};
-    }
-
-	private ConnectionProfile getConnectionProfile() {
-		if(this.connectionProfile == null) {
-			IJpaProject jpaProject = this.joinTable.getJpaProject();
-			this.connectionProfile = jpaProject.connectionProfile();
-		}
-		return this.connectionProfile;
-	}
-	
-	private void addConnectionListener() {
-		this.getConnectionProfile().addConnectionListener(this.connectionListener);
-	}
-	
-	private void removeConnectionListener() {
-		this.getConnectionProfile().removeConnectionListener(this.connectionListener);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.JoinTableComposite_name);
-		
-		this.tableCombo = new TableCombo(composite, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.tableCombo.getCombo().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.tableCombo.getCombo(), IJpaHelpContextIds.MAPPING_JOIN_TABLE_NAME);
-		
-		this.overrideDefaultJoinColumnsCheckBox = 
-			getWidgetFactory().createButton(
-				composite, 
-				JptUiMappingsMessages.JoinTableComposite_overrideDefaultJoinColumns, 
-				SWT.CHECK);
-		this.overrideDefaultJoinColumnsCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				if (JoinTableComposite.this.overrideDefaultJoinColumnsCheckBox.getSelection()) {
-					IJoinColumn defaultJoinColumn = JoinTableComposite.this.joinTable.getDefaultJoinColumns().get(0);
-					String columnName = defaultJoinColumn.getDefaultName();
-					String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName();
-					IJoinColumn joinColumn = JoinTableComposite.this.joinTable.createJoinColumn(0);
-					JoinTableComposite.this.joinTable.getSpecifiedJoinColumns().add(joinColumn);
-					joinColumn.setSpecifiedName(columnName);
-					joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-				} else {
-					JoinTableComposite.this.joinTable.getSpecifiedJoinColumns().clear();
-				}
-			}
-		});
-
-		this.joinColumnsComposite = new JoinColumnsComposite(composite, this.commandStack, getWidgetFactory(), JptUiMappingsMessages.JoinTableComposite_joinColumn);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.joinColumnsComposite.getControl().setLayoutData(gridData);
-		
-		this.overrideDefaultInverseJoinColumnsCheckBox = getWidgetFactory().createButton(composite, JptUiMappingsMessages.JoinTableComposite_overrideDefaultInverseJoinColumns, SWT.CHECK);
-		this.overrideDefaultInverseJoinColumnsCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				if (JoinTableComposite.this.overrideDefaultInverseJoinColumnsCheckBox.getSelection()) {
-					IJoinColumn defaultJoinColumn = JoinTableComposite.this.joinTable.getDefaultInverseJoinColumns().get(0);
-					String columnName = defaultJoinColumn.getDefaultName();
-					String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName();
-					IJoinColumn joinColumn = JoinTableComposite.this.joinTable.createInverseJoinColumn(0);
-					JoinTableComposite.this.joinTable.getSpecifiedInverseJoinColumns().add(joinColumn);
-					joinColumn.setSpecifiedName(columnName);
-					joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-				} else {
-					JoinTableComposite.this.joinTable.getSpecifiedInverseJoinColumns().clear();
-				}
-			}
-		});
-		this.inverseJoinColumnsComposite = new JoinColumnsComposite(composite, this.commandStack, getWidgetFactory(), JptUiMappingsMessages.JoinTableComposite_inverseJoinColumn);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.inverseJoinColumnsComposite.getControl().setLayoutData(gridData);
-	}
-	
-	void addJoinColumn() {
-		JoinColumnInJoinTableDialog dialog = new JoinColumnInJoinTableDialog(this.getControl().getShell(), this.joinTable);
-		this.addJoinColumnFromDialog(dialog);
-	}
-	
-	private void addJoinColumnFromDialog(JoinColumnInJoinTableDialog dialog) {
-		if (dialog.open() != Window.OK) {
-			return;
-		}
-		int index = this.joinTable.getJoinColumns().size();
-		IJoinColumn joinColumn = this.joinTable.createJoinColumn(index);
-		this.joinTable.getSpecifiedJoinColumns().add(joinColumn);
-		joinColumn.setSpecifiedName(dialog.getSelectedName());
-		joinColumn.setSpecifiedReferencedColumnName(dialog.getReferencedColumnName());
-	}
-	
-	void addInverseJoinColumn() {
-		InverseJoinColumnDialog dialog = new InverseJoinColumnDialog(this.getControl().getShell(), this.joinTable);
-		this.addInverseJoinColumnFromDialog(dialog);
-	}
-	
-	private void addInverseJoinColumnFromDialog(InverseJoinColumnDialog dialog) {
-		if (dialog.open() != Window.OK) {
-			return;
-		}
-		int index = this.joinTable.getInverseJoinColumns().size();
-		IJoinColumn joinColumn = this.joinTable.createInverseJoinColumn(index);
-		this.joinTable.getSpecifiedInverseJoinColumns().add(joinColumn);
-		joinColumn.setSpecifiedName(dialog.getSelectedName());
-		joinColumn.setSpecifiedReferencedColumnName(dialog.getReferencedColumnName());
-	}
-
-	void editJoinColumn(IJoinColumn joinColumn) {
-		JoinColumnInJoinTableDialog dialog = new JoinColumnInJoinTableDialog(this.getControl().getShell(), joinColumn);
-		editJoinColumnFromDialog(dialog, joinColumn);
-	}
-	
-	private void editJoinColumnFromDialog(JoinColumnInJoinTableDialog dialog, IJoinColumn joinColumn) {
-		if (dialog.open() == Window.OK) {
-			editJoinColumnDialogOkd(dialog, joinColumn);
-		}
-	}
-	
-	private void editJoinColumnDialogOkd(JoinColumnInJoinTableDialog dialog, IJoinColumn joinColumn) {
-		String name = dialog.getSelectedName();
-		String referencedColumnName = dialog.getReferencedColumnName();
-
-		if (dialog.isDefaultNameSelected()) {
-			if (joinColumn.getSpecifiedName() != null) {
-				joinColumn.setSpecifiedName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedName() == null || !joinColumn.getSpecifiedName().equals(name)){
-			joinColumn.setSpecifiedName(name);
-		}
-		
-		if (dialog.isDefaultReferencedColumnNameSelected()) {
-			if (joinColumn.getSpecifiedReferencedColumnName() != null) {
-				joinColumn.setSpecifiedReferencedColumnName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedReferencedColumnName() == null || !joinColumn.getSpecifiedReferencedColumnName().equals(referencedColumnName)){
-			joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-		}
-	}
-	
-	
-	void editInverseJoinColumn(IJoinColumn joinColumn) {
-		InverseJoinColumnDialog dialog = new InverseJoinColumnDialog(getControl().getShell(), joinColumn);
-		editJoinColumnFromDialog(dialog, joinColumn);
-	}
-	
-	protected void joinTableChanged(Notification notification) {
-		if (notification.getFeatureID(IJoinTable.class) == JpaCoreMappingsPackage.IJOIN_TABLE__SPECIFIED_JOIN_COLUMNS) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					overrideDefaultJoinColumnsCheckBox.setSelection(joinTable.containsSpecifiedJoinColumns());
-				}
-			});
-		}
-		else if (notification.getFeatureID(IJoinTable.class) == JpaCoreMappingsPackage.IJOIN_TABLE__SPECIFIED_INVERSE_JOIN_COLUMNS) {
-
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					overrideDefaultInverseJoinColumnsCheckBox.setSelection(joinTable.containsSpecifiedInverseJoinColumns());
-				}
-			});
-		}
-	}
-		
-	protected void engageListeners() {
-		if (this.joinTable != null) {
-			this.joinTable.eAdapters().add(this.joinTableListener);
-			this.addConnectionListener();		
-		}
-	}
-	
-	protected void disengageListeners() {
-		if (this.joinTable != null) {
-			this.joinTable.eAdapters().remove(this.joinTableListener);
-			this.removeConnectionListener();
-		}
-	}
-		
-	public void doPopulate(EObject obj) {
-		this.joinTable = (IJoinTable) obj;
-		if (this.joinTable == null) {
-			this.joinColumnsComposite.populate(null);
-			this.inverseJoinColumnsComposite.populate(null);
-			this.connectionProfile = null;
-			return;
-		}
-		
-		this.tableCombo.populate(this.joinTable);
-		this.joinColumnsComposite.populate(new JoinColumnsOwner(this.joinTable));
-		this.inverseJoinColumnsComposite.populate(new InverseJoinColumnsOwner(this.joinTable));
-		
-		this.overrideDefaultJoinColumnsCheckBox.setSelection(this.joinTable.containsSpecifiedJoinColumns());
-		this.overrideDefaultInverseJoinColumnsCheckBox.setSelection(this.joinTable.containsSpecifiedInverseJoinColumns());
-	}
-
-	@Override
-	protected void doPopulate() {
-		this.tableCombo.populate();
-		this.joinColumnsComposite.populate();
-		this.inverseJoinColumnsComposite.populate();
-	}
-	
-	@Override
-	public void dispose() {
-		this.tableCombo.dispose();
-		this.joinColumnsComposite.dispose();
-		this.inverseJoinColumnsComposite.dispose();
-		super.dispose();
-	}
-
-	private class JoinColumnsOwner extends JpaEObject implements Owner {
-		
-		private IJoinTable joinTable;
-		
-		public JoinColumnsOwner(IJoinTable joinTable) {
-			super();
-			this.joinTable = joinTable;
-		}
-		
-		public void addJoinColumn() {
-			JoinTableComposite.this.addJoinColumn();
-		}
-		
-		public boolean containsSpecifiedJoinColumns() {
-			return this.joinTable.containsSpecifiedJoinColumns();
-		}
-		
-		public IJoinColumn createJoinColumn(int index) {
-			return this.joinTable.createJoinColumn(index);
-		}
-		
-		public List<IJoinColumn> getJoinColumns() {
-			return this.joinTable.getJoinColumns();
-		}
-		
-		public List<IJoinColumn> getSpecifiedJoinColumns() {
-			return this.joinTable.getSpecifiedJoinColumns();
-		}
-		
-		public int specifiedJoinColumnsFeatureId() {
-			return JpaCoreMappingsPackage.IJOIN_TABLE__SPECIFIED_JOIN_COLUMNS;
-		}
-		
-		public Class owningFeatureClass() {
-			return IJoinTable.class;
-		}
-		
-		public void editJoinColumn(IJoinColumn joinColumn) {
-			JoinTableComposite.this.editJoinColumn(joinColumn);
-		}
-		
-		public EObject getEObject() {
-			return this.joinTable;
-		}
-	}
-	
-	private class InverseJoinColumnsOwner extends JpaEObject implements Owner {
-		
-		private IJoinTable joinTable;
-		
-		public InverseJoinColumnsOwner(IJoinTable joinTable) {
-			super();
-			this.joinTable = joinTable;
-		}
-		
-		public void addJoinColumn() {
-			JoinTableComposite.this.addInverseJoinColumn();
-		}
-		
-		public boolean containsSpecifiedJoinColumns() {
-			return this.joinTable.containsSpecifiedInverseJoinColumns();
-		}
-		
-		public IJoinColumn createJoinColumn(int index) {
-			return this.joinTable.createJoinColumn(index);
-		}
-		
-		public List<IJoinColumn> getJoinColumns() {
-			return this.joinTable.getInverseJoinColumns();
-		}
-		
-		public List<IJoinColumn> getSpecifiedJoinColumns() {
-			return this.joinTable.getSpecifiedInverseJoinColumns();
-		}
-		
-		public int specifiedJoinColumnsFeatureId() {
-			return JpaCoreMappingsPackage.IJOIN_TABLE__SPECIFIED_INVERSE_JOIN_COLUMNS;
-		}
-		
-		public Class owningFeatureClass() {
-			return IJoinTable.class;
-		}
-		
-		public void editJoinColumn(IJoinColumn joinColumn) {
-			JoinTableComposite.this.editInverseJoinColumn(joinColumn);
-		}
-		
-		public EObject getEObject() {
-			return this.joinTable;
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/LobCheckBox.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/LobCheckBox.java
deleted file mode 100644
index a81944a..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/LobCheckBox.java
+++ /dev/null
@@ -1,128 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.IBasic;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class LobCheckBox extends BaseJpaController
-{
-	private IBasic basicMapping;
-	private Adapter basicMappingListener;
-	
-	private Button button;
-
-
-	public LobCheckBox(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildBasicMappingListener();
-	}
-	
-	private void buildBasicMappingListener() {
-		this.basicMappingListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				bsaicMappingChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.button = getWidgetFactory().createButton(
-						parent, 
-						JptUiMappingsMessages.BasicGeneralSection_lobLabel,
-						SWT.CHECK);
-		
-		this.button.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent event) {
-				LobCheckBox.this.lobSelectionChanged();
-			}
-		
-			public void widgetDefaultSelected(SelectionEvent e) {
-				LobCheckBox.this.lobSelectionChanged();
-			}
-		});
-	}
-	
-	void lobSelectionChanged() {
-		boolean lob = this.button.getSelection();
-		if (this.basicMapping.isLob() != lob) {
-			this.basicMapping.setLob(lob);
-		}
-	}
-
-	private void bsaicMappingChanged(Notification notification) {
-		if (notification.getFeatureID(IBasic.class) == 
-				JpaCoreMappingsPackage.IBASIC__LOB) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.basicMapping != null) {
-			this.basicMapping.eAdapters().add(this.basicMappingListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.basicMapping != null) {
-			this.basicMapping.eAdapters().remove(this.basicMappingListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		this.basicMapping = (IBasic) obj;
-		populateButton();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateButton();
-	}
-	
-	private void populateButton() {
-		boolean lob = false;
-		if (this.basicMapping != null) {
-			lob  = this.basicMapping.isLob();
-		}
-		
-		if (this.button.getSelection() != lob) {
-			this.button.setSelection(lob);
-		}
-	}
-
-	
-	@Override
-	public Control getControl() {
-		return this.button;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ManyToManyComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ManyToManyComposite.java
deleted file mode 100644
index 1853eba..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ManyToManyComposite.java
+++ /dev/null
@@ -1,184 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.IManyToMany;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-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.swt.widgets.Control;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class ManyToManyComposite extends BaseJpaComposite 
-{
-	private IManyToMany manyToMany;
-	
-	private TargetEntityChooser targetEntityChooser;
-
-	private EnumComboViewer fetchTypeComboViewer;
-
-	private MappedByCombo mappedByCombo;
-
-	private CascadeComposite cascadeComposite;
-
-	private OrderingComposite orderingComposite;
-
-	private JoinTableComposite joinTableComposite;
-	
-
-	public ManyToManyComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		composite.setLayout(layout);
-		
-		Control generalControl = buildGeneralComposite(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		generalControl.setLayoutData(gridData);
-
-		Control joinTableControl = buildJoinTableControl(composite);
-	    gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		joinTableControl.setLayoutData(gridData);
-	}
-	
-	private Control buildGeneralComposite(Composite composite) {
-//		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		Composite generalComposite = getWidgetFactory().createComposite(composite);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		generalComposite.setLayout(layout);	
-
-		this.targetEntityChooser = CommonWidgets.buildTargetEntityChooser(generalComposite, commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.targetEntityChooser.getControl().setLayoutData(gridData);
-
-		
-		CommonWidgets.buildFetchLabel(generalComposite, getWidgetFactory());
-		this.fetchTypeComboViewer = CommonWidgets.buildFetchTypeComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.fetchTypeComboViewer.getControl().setLayoutData(gridData);
-
-
-		CommonWidgets.buildMappedByLabel(generalComposite, getWidgetFactory());
-		this.mappedByCombo = new MappedByCombo(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.mappedByCombo.getControl().setLayoutData(gridData);
-
-		this.cascadeComposite = new CascadeComposite(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalSpan = 3;
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.cascadeComposite.getControl().setLayoutData(gridData);
-
-
-		this.orderingComposite = new OrderingComposite(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalSpan = 3;
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.orderingComposite.getControl().setLayoutData(gridData);
-
-		return generalComposite;
-	}
-	
-	private Control buildJoinTableControl(Composite composite) {
-	    Section section = getWidgetFactory().createSection(composite, SWT.FLAT | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
-	    section.setText(JptUiMappingsMessages.MultiRelationshipMappingComposite_joinTable);
-
-		Composite joinTableClient = getWidgetFactory().createComposite(section);
-		section.setClient(joinTableClient);
-		
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		joinTableClient.setLayout(layout);
-
-		this.joinTableComposite = new JoinTableComposite(joinTableClient, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.joinTableComposite.getControl().setLayoutData(gridData);
-		
-		return section;
-	}
-	
-	public void doPopulate(EObject obj) {
-		this.manyToMany = (IManyToMany) obj;
-		this.targetEntityChooser.populate(this.manyToMany);
-		this.fetchTypeComboViewer.populate(CommonWidgets.buildMultiRelationshipMappingFetchEnumHolder(this.manyToMany));
-		this.mappedByCombo.populate(this.manyToMany);
-		this.cascadeComposite.populate(this.manyToMany);
-		if (this.manyToMany != null) {
-			this.joinTableComposite.populate(this.manyToMany.getJoinTable());
-			this.orderingComposite.populate(this.manyToMany);
-		}
-		else {
-			this.joinTableComposite.populate(null);
-			this.orderingComposite.populate(null);
-		}
-	}
-	
-	public void doPopulate() {
-		this.targetEntityChooser.populate();
-		this.fetchTypeComboViewer.populate();
-		this.mappedByCombo.populate();
-		this.cascadeComposite.populate();
-		this.joinTableComposite.populate();
-		this.orderingComposite.populate();
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-	
-	@Override
-	public void dispose() {
-		this.targetEntityChooser.dispose();
-		this.fetchTypeComboViewer.dispose();
-		this.mappedByCombo.dispose();
-		this.cascadeComposite.dispose();
-		this.joinTableComposite.dispose();
-		this.orderingComposite.dispose();
-		super.dispose();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ManyToOneComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ManyToOneComposite.java
deleted file mode 100644
index c36cd7b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ManyToOneComposite.java
+++ /dev/null
@@ -1,151 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.jpt.core.internal.mappings.DefaultTrueBoolean;
-import org.eclipse.jpt.core.internal.mappings.IManyToOne;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.details.EnumComboViewer.EnumHolder;
-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.swt.widgets.Control;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class ManyToOneComposite extends BaseJpaComposite 
-{
-	private IManyToOne manyToOne;
-	
-	private TargetEntityChooser targetEntityChooser;
-
-	private EnumComboViewer fetchTypeComboViewer;
-	
-	private EnumComboViewer optionalComboViewer;
-
-	private OrderingComposite orderByComposite;
-
-	private CascadeComposite cascadeComposite;
-
-	private JoinColumnComposite joinColumnComposite;
-		
-	public ManyToOneComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		composite.setLayout(layout);
-		
-		Control generalControl = buildGeneralComposite(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		generalControl.setLayoutData(gridData);
-
-	}
-	
-	private Control buildGeneralComposite(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		Composite generalComposite = getWidgetFactory().createComposite(composite);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		generalComposite.setLayout(layout);	
-		
-		this.targetEntityChooser = CommonWidgets.buildTargetEntityChooser(generalComposite, commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.targetEntityChooser.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(targetEntityChooser.getControl(), IJpaHelpContextIds.MAPPING_TARGET_ENTITY);
-		
-		CommonWidgets.buildFetchLabel(generalComposite, getWidgetFactory());
-		this.fetchTypeComboViewer = CommonWidgets.buildFetchTypeComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.fetchTypeComboViewer.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(fetchTypeComboViewer.getControl(), IJpaHelpContextIds.MAPPING_FETCH_TYPE);
-		
-		CommonWidgets.buildOptionalLabel(generalComposite, getWidgetFactory());
-		this.optionalComboViewer = CommonWidgets.buildEnumComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.optionalComboViewer.getControl().setLayoutData(gridData);
-
-		this.cascadeComposite = new CascadeComposite(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalSpan = 3;
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.cascadeComposite.getControl().setLayoutData(gridData);
-
-		this.joinColumnComposite = new JoinColumnComposite(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.joinColumnComposite.getControl().setLayoutData(gridData);	
-
-		return generalComposite;
-	}
-	
-	public void doPopulate(EObject obj) {
-		this.manyToOne = (IManyToOne) obj;
-		this.targetEntityChooser.populate(this.manyToOne);
-		this.fetchTypeComboViewer.populate(CommonWidgets.buildSingleRelationshipMappingFetchEnumHolder(this.manyToOne));
-		this.optionalComboViewer.populate(CommonWidgets.buildOptionalHolder(this.manyToOne));
-		this.cascadeComposite.populate(this.manyToOne);
-		this.joinColumnComposite.populate(this.manyToOne);
-	}
-	
-	public void doPopulate() {
-		this.targetEntityChooser.populate();
-		this.fetchTypeComboViewer.populate();
-		this.optionalComboViewer.populate();
-		this.cascadeComposite.populate();
-		this.joinColumnComposite.populate();
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-	
-	@Override
-	public void dispose() {
-		this.targetEntityChooser.dispose();
-		this.fetchTypeComboViewer.dispose();
-		this.optionalComboViewer.dispose();
-		this.cascadeComposite.dispose();
-		this.joinColumnComposite.dispose();
-		super.dispose();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MappedByCombo.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MappedByCombo.java
deleted file mode 100644
index b099347..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MappedByCombo.java
+++ /dev/null
@@ -1,159 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.INonOwningMapping;
-import org.eclipse.jpt.core.internal.mappings.IRelationshipMapping;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class MappedByCombo extends BaseJpaController
-{
-	private INonOwningMapping nonOwningMapping;
-	private Adapter nonOwningMappingListener;
-	
-	private CCombo combo;
-	
-	public MappedByCombo(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, commandStack, widgetFactory);
-		this.nonOwningMappingListener = buildListener();
-	}
-	
-	private Adapter buildListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				nonOwningMappingChanged(notification);
-			}
-		};
-	}
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(combo,IJpaHelpContextIds.MAPPING_MAPPED_BY);
-		this.combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String mappedBy = ((CCombo) e.getSource()).getText();
-				if (mappedBy.equals("")) { //$NON-NLS-1$
-					mappedBy = null;
-					if (getNonOwningMapping().getMappedBy() == null || getNonOwningMapping().getMappedBy().equals("")) { //$NON-NLS-1$
-						return;
-					}
-				}
-				if (getNonOwningMapping().getMappedBy() == null || !getNonOwningMapping().getMappedBy().equals(mappedBy)) {
-					getNonOwningMapping().setMappedBy(mappedBy);
-				}
-			}
-		});
-	}
-	
-	private INonOwningMapping getNonOwningMapping() {
-		return this.nonOwningMapping;
-	}
-
-	@Override
-	protected void doPopulate(EObject obj) {
-		this.nonOwningMapping = (INonOwningMapping) obj;
-		
-		if (this.nonOwningMapping == null) {
-			return;
-		}
-		
-		populateCombo();
-	}
-
-	private void populateCombo() {
-		populateChoices();
-		populateMappedByText();
-	}
-	
-	private void populateChoices() {
-		if (this.combo.getItemCount() > 0) {
-			this.combo.removeAll();
-		}
-		for (Iterator<String> i = this.nonOwningMapping.candidateMappedByAttributeNames(); i.hasNext(); ) {
-			this.combo.add(i.next());
-		}
-	}
-	
-	private void populateMappedByText() {
-		String mappedBy = this.nonOwningMapping.getMappedBy();
-		if (mappedBy != null) {
-			if (!this.combo.getText().equals(mappedBy)) {
-				this.combo.setText(mappedBy);
-			}
-		}
-	}
-	
-	@Override
-	protected void doPopulate() {
-	}
-
-	@Override
-	protected void engageListeners() {
-		if (this.nonOwningMapping != null) {
-			this.nonOwningMapping.eAdapters().add(this.nonOwningMappingListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.nonOwningMapping != null) {
-			this.nonOwningMapping.eAdapters().remove(this.nonOwningMappingListener);
-		}
-	}
-	
-	protected void nonOwningMappingChanged(Notification notification) {
-		if (notification.getFeatureID(INonOwningMapping.class) == JpaCoreMappingsPackage.INON_OWNING_MAPPING__MAPPED_BY) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateMappedByText();
-				}
-			});
-		}
-		else if (notification.getFeatureID(IRelationshipMapping.class) == JpaCoreMappingsPackage.IRELATIONSHIP_MAPPING__RESOLVED_TARGET_ENTITY) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateChoices();
-				}
-			});
-		}
-	}
-
-	@Override
-	public Control getControl() {
-		return this.combo;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MappedSuperclassComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MappedSuperclassComposite.java
deleted file mode 100644
index 7d21ec7..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MappedSuperclassComposite.java
+++ /dev/null
@@ -1,125 +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.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.IMappedSuperclass;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class MappedSuperclassComposite extends BaseJpaComposite 
-{
-	private IMappedSuperclass mappedSuperclass;
-	private Adapter mappedSuperclassListener;
-	
-	private CommandStack commandStack;
-	
-	
-	public MappedSuperclassComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.mappedSuperclassListener = buildMappedSuperclassListener();
-	}
-	
-	private Adapter buildMappedSuperclassListener() {
-		return new AdapterImpl() {
-			@Override
-			public void notifyChanged(Notification notification) {
-				mappedSuperclassChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		composite.setLayout(new FillLayout(SWT.VERTICAL));
-		
-//		Label accessTypeLabel = new Label(composite, SWT.LEFT);
-//		accessTypeLabel.setText(DaliUiMessages.MappedSuperclassComposite_accessType);
-//		this.accessTypeComboViewer = buildAccessTypeCombo(composite);
-//		//eventually this will be enabled if editing xml instead of java
-//		this.accessTypeComboViewer.getCombo().setEnabled(false);
-//		GridData gridData = new GridData();
-//		gridData.horizontalAlignment = GridData.FILL;
-//		gridData.grabExcessHorizontalSpace = true;
-//		this.accessTypeComboViewer.getCombo().setLayoutData(gridData);
-//		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.accessTypeComboViewer.getCombo(), IDaliHelpContextIds.ENTITY_ACCESS_TYPE);
-		
-	}
-	
-//	private ComboViewer buildAccessTypeCombo(Composite parent) {
-//		ComboViewer viewer = new ComboViewer(parent, SWT.READ_ONLY);
-//		viewer.add(AccessType.VALUES.toArray());
-//		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-//			public void selectionChanged(SelectionChangedEvent event) {
-//				if (populating) {
-//					return;
-//				}
-//				if (event.getSelection() instanceof StructuredSelection) {
-//					StructuredSelection selection = (StructuredSelection) event.getSelection();
-//					editingDomain.getCommandStack().execute(SetCommand.create(editingDomain, persistentType, OrmPackage.eINSTANCE.getPersistentType_AccessType(), selection.getFirstElement()));
-//				}
-//			}
-//		});
-//		return viewer;
-//	}
-	
-	@Override
-	protected void doPopulate(EObject model) {
-		this.mappedSuperclass = (IMappedSuperclass) model;
-	}
-	
-	@Override
-	protected void doPopulate() {
-		
-	}
-	
-	
-	protected void engageListeners() {
-//		this.persistentTypeItemProvider.addListener(getPersistentTypeListener());
-//		this.persistentType.eAdapters().add(this.persistentTypeItemProvider);
-	}
-
-	protected void disengageListeners() {
-//		if (this.persistentType != null){
-//			this.persistentType.eAdapters().remove(this.persistentTypeItemProvider);
-//			this.persistentTypeItemProvider.removeListener(getPersistentTypeListener());
-//		}
-	}
-	
-	private void mappedSuperclassChanged(Notification notification) {
-		
-	}
-	
-//	private INotifyChangedListener getPersistentTypeListener() {
-//		if (this.persistentTypeListener == null) {
-//			this.persistentTypeListener = new INotifyChangedListener() {
-//				public void notifyChanged(Notification notification) {
-//					if (notification.getFeatureID(PersistentType.class) == OrmPackage.PERSISTENT_TYPE__ACCESS_TYPE) {
-//						final AccessType accessType = (AccessType) notification.getNewValue();
-//						Display.getDefault().syncExec(new Runnable() {
-//							public void run() {
-//								if (((StructuredSelection) accessTypeComboViewer.getSelection()).getFirstElement() != accessType) {
-//									accessTypeComboViewer.setSelection(new StructuredSelection(accessType));
-//								}
-//							}
-//						});
-//					}
-//				}
-//			};
-//		}
-//		return this.persistentTypeListener;
-//	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OneToManyComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OneToManyComposite.java
deleted file mode 100644
index 113173f..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OneToManyComposite.java
+++ /dev/null
@@ -1,187 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.IOneToMany;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-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.swt.widgets.Control;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class OneToManyComposite extends BaseJpaComposite 
-{
-	private IOneToMany oneToMany;
-	
-	private EnumComboViewer fetchTypeComboViewer;
-	
-	private TargetEntityChooser targetEntityChooser;
-	
-	private MappedByCombo mappedByCombo;
-
-	private CascadeComposite cascadeComposite;
-	
-	private OrderingComposite orderingComposite;
-
-	private JoinTableComposite joinTableComposite;
-	
-	public OneToManyComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		composite.setLayout(layout);
-		
-		Control generalControl = buildGeneralControl(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		generalControl.setLayoutData(gridData);
-
-		Control joinTableControl = buildJoinTableControl(composite);
-	    gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		joinTableControl.setLayoutData(gridData);
-	}
-	
-	private Control buildGeneralControl(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		Composite generalComposite = getWidgetFactory().createComposite(composite);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		generalComposite.setLayout(layout);	
-
-		GridData gridData;
-		
-		this.targetEntityChooser = CommonWidgets.buildTargetEntityChooser(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.targetEntityChooser.getControl().setLayoutData(gridData);
-
-		CommonWidgets.buildFetchLabel(generalComposite, getWidgetFactory());
-		this.fetchTypeComboViewer = CommonWidgets.buildFetchTypeComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.fetchTypeComboViewer.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(this.fetchTypeComboViewer.getControl(), IJpaHelpContextIds.MAPPING_FETCH_TYPE);
-
-		CommonWidgets.buildMappedByLabel(generalComposite, getWidgetFactory());
-		this.mappedByCombo = new MappedByCombo(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.mappedByCombo.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(this.mappedByCombo.getControl(), IJpaHelpContextIds.MAPPING_MAPPED_BY);
-		
-		this.cascadeComposite = new CascadeComposite(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalSpan = 3;
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.cascadeComposite.getControl().setLayoutData(gridData);
-	
-		this.orderingComposite = new OrderingComposite(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalSpan = 3;
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.orderingComposite.getControl().setLayoutData(gridData);
-		
-
-		return generalComposite;
-	}
-	
-	private Control buildJoinTableControl(Composite composite) {
-	    Section section = getWidgetFactory().createSection(composite, SWT.FLAT | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
-	    section.setText(JptUiMappingsMessages.MultiRelationshipMappingComposite_joinTable);
-
-		Composite joinTableClient = getWidgetFactory().createComposite(section);
-		section.setClient(joinTableClient);
-		
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		joinTableClient.setLayout(layout);
-
-		this.joinTableComposite = new JoinTableComposite(joinTableClient, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.joinTableComposite.getControl().setLayoutData(gridData);
-		
-		return section;
-	}
-
-	public void doPopulate(EObject obj) {
-		this.oneToMany = (IOneToMany) obj;
-		this.fetchTypeComboViewer.populate(CommonWidgets.buildMultiRelationshipMappingFetchEnumHolder(this.oneToMany));
-		this.targetEntityChooser.populate(this.oneToMany);
-		this.mappedByCombo.populate(this.oneToMany);
-		this.cascadeComposite.populate(this.oneToMany);
-		if (this.oneToMany != null) {
-			this.joinTableComposite.populate(this.oneToMany.getJoinTable());
-			this.orderingComposite.populate(this.oneToMany);
-		}
-		else {
-			this.joinTableComposite.populate(null);
-			this.orderingComposite.populate(null);
-		}
-	}
-	
-	public void doPopulate() {
-		this.fetchTypeComboViewer.populate();
-		this.targetEntityChooser.populate();
-		this.mappedByCombo.populate();
-		this.cascadeComposite.populate();
-		this.joinTableComposite.populate();
-		this.orderingComposite.populate();
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-	
-	@Override
-	public void dispose() {
-		this.fetchTypeComboViewer.dispose();
-		this.targetEntityChooser.dispose();
-		this.mappedByCombo.dispose();
-		this.cascadeComposite.dispose();
-		this.joinTableComposite.dispose();
-		this.orderingComposite.dispose();
-		super.dispose();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OneToOneComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OneToOneComposite.java
deleted file mode 100644
index f16a350..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OneToOneComposite.java
+++ /dev/null
@@ -1,164 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.jpt.core.internal.mappings.DefaultTrueBoolean;
-import org.eclipse.jpt.core.internal.mappings.IOneToOne;
-import org.eclipse.jpt.core.internal.mappings.ISingleRelationshipMapping;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.details.EnumComboViewer.EnumHolder;
-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.swt.widgets.Control;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class OneToOneComposite extends BaseJpaComposite 
-{
-	private IOneToOne oneToOne;
-	
-	private TargetEntityChooser targetEntityChooser;
-
-	private EnumComboViewer fetchTypeComboViewer;
-	
-	private MappedByCombo mappedByCombo;
-
-	private EnumComboViewer optionalComboViewer;
-
-	private CascadeComposite cascadeComposite;
-
-	private JoinColumnComposite joinColumnComposite;
-		
-	public OneToOneComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	
-	private IOneToOne getOneToOne() {
-		return this.oneToOne;
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		composite.setLayout(layout);
-		
-		Control generalControl = buildGeneralComposite(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		generalControl.setLayoutData(gridData);
-
-	}
-	
-	private Control buildGeneralComposite(Composite composite) {
-//		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		Composite generalComposite = getWidgetFactory().createComposite(composite);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		generalComposite.setLayout(layout);	
-		
-		this.targetEntityChooser = CommonWidgets.buildTargetEntityChooser(generalComposite, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.targetEntityChooser.getControl().setLayoutData(gridData);
-		
-
-		CommonWidgets.buildFetchLabel(generalComposite, getWidgetFactory());
-		this.fetchTypeComboViewer = CommonWidgets.buildFetchTypeComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.fetchTypeComboViewer.getControl().setLayoutData(gridData);
-
-		CommonWidgets.buildMappedByLabel(generalComposite, getWidgetFactory());
-		this.mappedByCombo = new MappedByCombo(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.mappedByCombo.getControl().setLayoutData(gridData);
-		
-		CommonWidgets.buildOptionalLabel(generalComposite, getWidgetFactory());
-		this.optionalComboViewer = CommonWidgets.buildEnumComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.optionalComboViewer.getControl().setLayoutData(gridData);
-
-		this.cascadeComposite = new CascadeComposite(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalSpan = 3;
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.cascadeComposite.getControl().setLayoutData(gridData);
-
-		this.joinColumnComposite = new JoinColumnComposite(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.joinColumnComposite.getControl().setLayoutData(gridData);	
-
-		return generalComposite;
-	}
-
-	public void doPopulate(EObject obj) {
-		this.oneToOne = (IOneToOne) obj;
-		this.targetEntityChooser.populate(this.oneToOne);
-		this.fetchTypeComboViewer.populate(CommonWidgets.buildSingleRelationshipMappingFetchEnumHolder(this.oneToOne));
-		this.mappedByCombo.populate(this.oneToOne);
-		this.optionalComboViewer.populate(CommonWidgets.buildOptionalHolder(this.oneToOne));
-		this.cascadeComposite.populate(this.oneToOne);
-		this.joinColumnComposite.populate(this.oneToOne);
-	}
-	
-	public void doPopulate() {
-		this.targetEntityChooser.populate();
-		this.fetchTypeComboViewer.populate();
-		this.mappedByCombo.populate();
-		this.optionalComboViewer.populate();
-		this.cascadeComposite.populate();
-		this.joinColumnComposite.populate();
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-	
-	@Override
-	public void dispose() {
-		this.targetEntityChooser.dispose();
-		this.fetchTypeComboViewer.dispose();
-		this.mappedByCombo.dispose();
-		this.optionalComboViewer.dispose();
-		this.cascadeComposite.dispose();
-		this.joinColumnComposite.dispose();
-		super.dispose();
-	}
-
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OrderingComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OrderingComposite.java
deleted file mode 100644
index 95b1bc6..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OrderingComposite.java
+++ /dev/null
@@ -1,309 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.ITextListener;
-import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.jface.text.TextEvent;
-import org.eclipse.jface.text.TextViewer;
-import org.eclipse.jpt.core.internal.mappings.IMultiRelationshipMapping;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-/**
- *
- */
-public class OrderingComposite extends BaseJpaComposite  {
-
-	private IMultiRelationshipMapping mapping;
-	private Adapter mappingListener;
-	
-	private Button noOrderingRadioButton;
-	private Button primaryKeyOrderingRadioButton;
-	private Button customOrderingRadioButton;
-	
-	private ITextViewer orderingTextViewer;
-	
-	// short circuit flag for user typing
-	private boolean updatingCustomOrderBy = false;
-	
-
-	public OrderingComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, commandStack, widgetFactory);
-		this.mappingListener = buildMappingListener();
-	}
-
-	private Adapter buildMappingListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				mappingChanged(notification);
-			}
-		};
-	}
-
-	@Override
-	protected void initializeLayout(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		GridLayout layout = new GridLayout();
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-		
-		Group orderByGroup = getWidgetFactory().createGroup(composite, JptUiMappingsMessages.OrderByComposite_orderByGroup);
-		orderByGroup.setLayout(new GridLayout(1, false));
-		GridData gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		orderByGroup.setLayoutData(gridData);
-		helpSystem.setHelp(orderByGroup, IJpaHelpContextIds.MAPPING_ORDER_BY);
-		
-
-		this.noOrderingRadioButton = buildNoOrderingRadioButton(orderByGroup);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.noOrderingRadioButton.setLayoutData(gridData);
-//		helpSystem().setHelp(this.noOrderingRadioButton, IJpaHelpContextIds.MAPPING_ORDER_BY_NO_ORDERING);
-
-
-		this.primaryKeyOrderingRadioButton = buildPrimaryKeyOrderingRadioButton(orderByGroup);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.primaryKeyOrderingRadioButton.setLayoutData(gridData);
-//		helpSystem().setHelp(this.primaryKeyOrderingRadioButton, IJpaHelpContextIds.MAPPING_ORDER_BY_PRIMARY_KEY_ORDERING);
-
-		this.customOrderingRadioButton = buildCustomOrderingRadioButton(orderByGroup);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.customOrderingRadioButton.setLayoutData(gridData);
-//		helpSystem().setHelp(this.customOrderingRadioButton, IJpaHelpContextIds.MAPPING_ORDER_BY_CUSTOM_ORDERING);
-
-		
-		this.orderingTextViewer = buildOrderByTestViewer(orderByGroup);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalIndent = 15;
-		this.orderingTextViewer.getTextWidget().setLayoutData(gridData);
-		helpSystem.setHelp(this.orderingTextViewer.getTextWidget(), IJpaHelpContextIds.MAPPING_ORDER_BY);
-	}
-	
-	private Button buildNoOrderingRadioButton(Composite parent) {
-		Button button = getWidgetFactory().createButton(
-			parent, 
-			JptUiMappingsMessages.OrderByComposite_noOrdering, 
-			SWT.RADIO);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// ignore
-			}
-			public void widgetSelected(SelectionEvent e) {
-				OrderingComposite.this.noOrderingRadioButtonSelected(e);
-			}
-		});
-
-		return button;
-	}
-
-	void noOrderingRadioButtonSelected(SelectionEvent e) {
-		if (!((Button) e.widget).getSelection()) {
-			//ignore case where radio button is deselected
-			return;
-		}
-		if (this.mapping.isNoOrdering()) {
-			return;
-		}
-		this.mapping.setNoOrdering();
-	}
-	
-	private Button buildPrimaryKeyOrderingRadioButton(Composite parent) {
-		Button button = getWidgetFactory().createButton(
-			parent, 
-			JptUiMappingsMessages.OrderByComposite_primaryKeyOrdering, 
-			SWT.RADIO);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// ignore
-			}
-			public void widgetSelected(SelectionEvent e) {
-				OrderingComposite.this.primaryKeyOrderingRadioButtonSelected(e);
-			}
-		});
-		return button;
-	}
-	
-	void primaryKeyOrderingRadioButtonSelected(SelectionEvent e) {
-		if (!((Button) e.widget).getSelection()) {
-			//ignore case where radio button is deselected
-			return;
-		}
-		if (! this.mapping.isOrderByPk()) {
-			this.mapping.setOrderByPk();
-		}
-		setTextViewerEnabled(false);
-	}
-
-	private Button buildCustomOrderingRadioButton(Composite parent) {
-		Button button = getWidgetFactory().createButton(
-			parent, 
-			JptUiMappingsMessages.OrderByComposite_customOrdering, 
-			SWT.RADIO);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// ignore
-			}
-			public void widgetSelected(SelectionEvent e) {
-				OrderingComposite.this.customOrderingRadioButtonSelected(e);
-			}
-		});
-
-		return button;
-	}
-	
-	void customOrderingRadioButtonSelected(SelectionEvent e) {
-		if (!((Button) e.widget).getSelection()) {
-			//ignore case where radio button is deselected
-			return;
-		}
-		setTextViewerEnabled(true);
-	}
-	
-	private ITextViewer buildOrderByTestViewer(Composite parent) {
-		final TextViewer textViewer = new TextViewer(parent, SWT.SINGLE | SWT.BORDER);
-		textViewer.setDocument(new Document());
-		textViewer.addTextListener(new ITextListener() {
-			public void textChanged(TextEvent event) {
-				orderingTextViewerChanged();
-			}
-		});
-		return textViewer;
-	}
-	
-	private void orderingTextViewerChanged() {
-		if (isPopulating()) {
-			return;
-		}
-		String orderByValue = this.orderingTextViewer.getDocument().get();
-		if (orderByValue.equals(this.mapping.getOrderBy())) {
-			return;
-		}
-		
-		this.updatingCustomOrderBy = true;
-		this.mapping.setOrderBy(orderByValue);
-	}
-	
-	private void setTextViewerEnabled(boolean enabled) {
-		this.orderingTextViewer.setEditable(enabled);
-		this.orderingTextViewer.getTextWidget().setEnabled(enabled);
-	}
-
-	private void mappingChanged(Notification notification) {
-		if (notification.getFeatureID(IMultiRelationshipMapping.class) == JpaCoreMappingsPackage.IMULTI_RELATIONSHIP_MAPPING__ORDER_BY) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					populate();
-				}
-			});
-		}		
-	}
-
-	@Override
-	protected void doPopulate(EObject obj) {
-		this.mapping = (IMultiRelationshipMapping) obj;
-		if (this.mapping == null) {
-			return;
-		}
-		populateOrderingRadioButtons();		
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateOrderingRadioButtons();		
-	}
-
-	@Override
-	protected void engageListeners() {
-		if (this.mapping != null) {
-			this.mapping.eAdapters().add(this.mappingListener);
-		}
-	}
-
-	@Override
-	protected void disengageListeners() {
-		if (this.mapping != null) {
-			this.mapping.eAdapters().remove(this.mappingListener);
-		}
-	}
-	
-	private void populateOrderingRadioButtons() {
-		// short circuit if user is typing
-		if (updatingCustomOrderBy) {
-			updatingCustomOrderBy = false;
-			return;
-		}
-		
-		if (this.mapping.isNoOrdering()) {
-			this.primaryKeyOrderingRadioButton.setSelection(false);			
-			this.customOrderingRadioButton.setSelection(false);
-			this.noOrderingRadioButton.setSelection(true);
-			if (! "".equals(this.orderingTextViewer.getDocument().get())) {
-				this.orderingTextViewer.getDocument().set("");
-			}
-		}
-		else if (this.mapping.isOrderByPk()) {
-			this.customOrderingRadioButton.setSelection(false);
-			this.noOrderingRadioButton.setSelection(false);
-			this.primaryKeyOrderingRadioButton.setSelection(true);			
-//			String value = this.ordering.getValue();
-//			if (value != null && !value.equals(this.orderingTextViewer.getDocument().get())) {
-//				this.orderingTextViewer.getDocument().set(value);
-//			}
-//			else {
-				if (!"".equals(this.orderingTextViewer.getDocument().get())) {
-					this.orderingTextViewer.getDocument().set("");				
-				}
-//			}
-		}
-		else if (this.mapping.isCustomOrdering()) {
-			this.noOrderingRadioButton.setSelection(false);
-			this.primaryKeyOrderingRadioButton.setSelection(false);			
-			this.customOrderingRadioButton.setSelection(true);
-			String value = this.mapping.getOrderBy();
-			if (value != null && !value.equals(this.orderingTextViewer.getDocument().get())) {
-				this.orderingTextViewer.getDocument().set(value);
-			}
-		}
-		
-		setTextViewerEnabled(this.mapping.isCustomOrdering());
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java
deleted file mode 100644
index 986aab2..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java
+++ /dev/null
@@ -1,501 +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.internal.mappings.details;
-
-import java.util.List;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.JpaEObject;
-import org.eclipse.jpt.core.internal.mappings.IAssociationOverride;
-import org.eclipse.jpt.core.internal.mappings.IAttributeOverride;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.IJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.IOverride;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.JoinColumnsComposite.Owner;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.part.PageBook;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class OverridesComposite extends BaseJpaComposite
-{
-	private ListViewer listViewer;
-	
-	private IEntity entity;
-	private Adapter entityListener;
-	
-	private IOverride selectedOverride;
-	private Adapter overrideListener;
-	
-	protected PageBook overridePageBook;
-
-	protected ColumnComposite columnComposite;
-	protected JoinColumnsComposite joinColumnsComposite;
-	
-	private Button overrideDefaultButton;
-	
-	public OverridesComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.entityListener = buildEntityListener();
-		this.overrideListener = buildOverrideListener();
-	}
-	
-	private Adapter buildEntityListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				entityChanged(notification);
-			}
-		};
-	}
-	
-	private Adapter buildOverrideListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				overrideChanged(notification);
-			}
-		};
-	}
-	
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-		
-		Group attributeOverridesGroup = getWidgetFactory().createGroup(
-			composite, JptUiMappingsMessages.AttributeOverridesComposite_attributeOverrides);
-		attributeOverridesGroup.setLayout(new GridLayout(2, true));
-		GridData gridData =  new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace= true;
-		attributeOverridesGroup.setLayoutData(gridData);
-		
-		this.listViewer = buildAttributeOverridesListViewer(attributeOverridesGroup);
-		gridData = new GridData();
-		gridData.verticalSpan = 2;
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace= true;
-		this.listViewer.getList().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.listViewer.getList(), IJpaHelpContextIds.ENTITY_ATTRIBUTE_OVERRIDES);
-		
-		this.overrideDefaultButton = 
-			getWidgetFactory().createButton(
-				attributeOverridesGroup, 
-				JptUiMappingsMessages.AttributeOverridesComposite_overridDefault, 
-				SWT.CHECK);
-		this.overrideDefaultButton.addSelectionListener(buildOverrideDefaultSelectionListener());
-		gridData = new GridData();
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.overrideDefaultButton.setLayoutData(gridData);
-		
-		
-		this.overridePageBook = buildOverridePageBook(attributeOverridesGroup);
-		gridData = new GridData();
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.overridePageBook.setLayoutData(gridData);
-
-		this.joinColumnsComposite = new JoinColumnsComposite(this.overridePageBook, this.commandStack, getWidgetFactory(), JptUiMappingsMessages.OverridesComposite_joinColumn);
-		this.columnComposite = new ColumnComposite(this.overridePageBook, this.commandStack, getWidgetFactory());
-		this.overridePageBook.showPage(this.joinColumnsComposite.getControl());
-	}
-	
-	protected PageBook buildOverridePageBook(Composite parent) {
-		return new PageBook(parent, SWT.NONE);
-	}
-
-	private SelectionListener buildOverrideDefaultSelectionListener() {
-		return new SelectionListener(){
-		
-			public void widgetSelected(SelectionEvent e) {
-				overrideDefaultButtonSelected(e);
-			}
-		
-			public void widgetDefaultSelected(SelectionEvent e) {
-				overrideDefaultButtonSelected(e);
-			}
-		};
-	}
-	
-	private void overrideDefaultButtonSelected(SelectionEvent e) {
-		boolean selection = this.overrideDefaultButton.getSelection();
-		if (selection) {
-			if (getSelectedOverride() instanceof IAttributeOverride) {
-				int index = this.entity.getSpecifiedAttributeOverrides().size();
-				IAttributeOverride attributeOverride = this.entity.createAttributeOverride(index);			
-				this.entity.getSpecifiedAttributeOverrides().add(attributeOverride);
-				attributeOverride.setName(this.selectedOverride.getName());
-				attributeOverride.getColumn().setSpecifiedName(((IAttributeOverride) this.selectedOverride).getColumn().getName());
-			}
-			else {
-				int index = this.entity.getSpecifiedAssociationOverrides().size();
-				IAssociationOverride associationOverride = this.entity.createAssociationOverride(index);
-				String name = this.selectedOverride.getName();
-				this.entity.getSpecifiedAssociationOverrides().add(associationOverride);
-				associationOverride.setName(name);
-				//attributeOverride.getColumn().setSpecifiedName(this.attributeOverride.getColumn().getName());			
-			}
-		}
-		else {
-			if (getSelectedOverride() instanceof IAttributeOverride) {
-				this.entity.getSpecifiedAttributeOverrides().remove(this.selectedOverride);
-			}
-			else {
-				this.entity.getSpecifiedAssociationOverrides().remove(this.selectedOverride);
-			}
-		}
-	}
-	
-	
-	private ListViewer buildAttributeOverridesListViewer(Composite parent) {
-		ListViewer listViewer = new ListViewer(parent, SWT.SINGLE | SWT.BORDER);
-		listViewer.setLabelProvider(buildAttributeOverridesLabelProvider());
-		listViewer.setContentProvider(buildAttributeOverridesContentProvider());
-		
-		listViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				overridesListSelectionChanged(event);
-			}
-		});
-
-		return listViewer;
-	}
-	
-	protected void overridesListSelectionChanged(SelectionChangedEvent event) {
-		if (((StructuredSelection) event.getSelection()).isEmpty()) {
-			this.columnComposite.populate(null);
-			this.columnComposite.enableWidgets(false);
-			this.overrideDefaultButton.setSelection(false);
-			this.overrideDefaultButton.setEnabled(false);
-		}
-		else {
-			this.selectedOverride = getSelectedOverride();
-			if (this.selectedOverride instanceof IAttributeOverride) {
-				boolean specifiedOverride = this.entity.getSpecifiedAttributeOverrides().contains(this.selectedOverride);
-				this.overrideDefaultButton.setSelection(specifiedOverride);
-				this.overridePageBook.showPage(this.columnComposite.getControl());
-				this.columnComposite.populate(((IAttributeOverride) this.selectedOverride).getColumn());
-				this.columnComposite.enableWidgets(specifiedOverride);
-				this.overrideDefaultButton.setEnabled(true);
-			}
-			else {
-				boolean specifiedOverride = this.entity.getSpecifiedAssociationOverrides().contains(this.selectedOverride);
-				this.overrideDefaultButton.setSelection(specifiedOverride);
-				this.overridePageBook.showPage(this.joinColumnsComposite.getControl());
-				this.joinColumnsComposite.populate(new JoinColumnsOwner((IAssociationOverride) getSelectedOverride()));
-				this.joinColumnsComposite.enableWidgets(specifiedOverride);
-				this.overrideDefaultButton.setEnabled(true);
-			}
-		}
-	}
-	
-	private ILabelProvider buildAttributeOverridesLabelProvider() {
-		return new LabelProvider() {
-			public String getText(Object element) {
-				//TODO also display column name somehow
-				return ((IOverride) element).getName();
-			}
-		};
-	}
-
-	
-	private IContentProvider buildAttributeOverridesContentProvider() {
-		return new IStructuredContentProvider() {
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			}
-		
-			public void dispose() {
-			}
-		
-			public Object[] getElements(Object inputElement) {
-				IEntity entity = (IEntity) inputElement;
-				return CollectionTools.addAll(
-					entity.getAttributeOverrides().toArray(new IOverride[entity.getAttributeOverrides().size()]), 
-					entity.getAssociationOverrides());
-			}
-		};
-	}
-
-	private IOverride getSelectedOverride() {
-		return (IOverride) ((StructuredSelection) this.listViewer.getSelection()).getFirstElement();
-	}
-	
-	
-	public void doPopulate(EObject obj) {
-		this.entity = (IEntity) obj;
-		if (this.entity == null) {
-			this.selectedOverride = null;
-			this.columnComposite.populate(null);
-			this.joinColumnsComposite.populate(null);
-			this.listViewer.setInput(null);
-			return;
-		}
-		
-		if (this.listViewer.getInput() != entity) {
-			this.listViewer.setInput(entity);
-		}
-		if (!this.entity.getAttributeOverrides().isEmpty()) {
-			if (this.listViewer.getSelection().isEmpty()) {
-				IOverride override = this.entity.getAttributeOverrides().get(0);
-				this.listViewer.setSelection(new StructuredSelection(override));
-			}
-			else {
-				Object selection = ((StructuredSelection) this.listViewer.getSelection()).getFirstElement();
-				if (selection instanceof IAttributeOverride) {
-					this.overridePageBook.showPage(this.columnComposite.getControl());
-					this.columnComposite.enableWidgets(true);
-					this.columnComposite.populate(((IAttributeOverride) selection).getColumn());
-					}
-				else {
-					this.overridePageBook.showPage(this.joinColumnsComposite.getControl());
-					this.joinColumnsComposite.enableWidgets(true);
-					this.joinColumnsComposite.populate(new JoinColumnsOwner((IAssociationOverride) selection));
-				}
-			}
-		}
-		else {
-			this.columnComposite.populate(null);
-			this.columnComposite.enableWidgets(false);
-		}
-	}
-
-	@Override
-	protected void doPopulate() {
-		this.columnComposite.doPopulate();
-		this.joinColumnsComposite.doPopulate();
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.entity != null) {
-			this.entity.eAdapters().add(this.entityListener);
-			for (IOverride attributeOverride : this.entity.getAttributeOverrides()) {
-				attributeOverride.eAdapters().add(this.overrideListener);
-			}	
-			for (IOverride attributeOverride : this.entity.getAssociationOverrides()) {
-				attributeOverride.eAdapters().add(this.overrideListener);
-			}	
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.entity != null) {
-			this.entity.eAdapters().remove(this.entityListener);
-			for (IOverride attributeOverride : this.entity.getAttributeOverrides()) {
-				attributeOverride.eAdapters().remove(this.overrideListener);
-			}	
-			for (IOverride attributeOverride : this.entity.getAssociationOverrides()) {
-				attributeOverride.eAdapters().remove(this.overrideListener);
-			}	
-		}
-	}
-
-	
-	protected void entityChanged(Notification notification) {
-		switch (notification.getFeatureID(IEntity.class)) {
-			case JpaCoreMappingsPackage.IENTITY__SPECIFIED_ATTRIBUTE_OVERRIDES :
-			case JpaCoreMappingsPackage.IENTITY__SPECIFIED_ASSOCIATION_OVERRIDES :
-			case JpaCoreMappingsPackage.IENTITY__DEFAULT_ATTRIBUTE_OVERRIDES :
-			case JpaCoreMappingsPackage.IENTITY__DEFAULT_ASSOCIATION_OVERRIDES :
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						if (listViewer.getList().isDisposed()) {
-							return;
-						}
-						listViewer.refresh();
-					}
-				});
-
-				if (notification.getEventType() == Notification.ADD) {
-					((IOverride) notification.getNewValue()).eAdapters().add(this.overrideListener);
-					final Object newValue = notification.getNewValue();
-					((IOverride) newValue).eAdapters().add(this.overrideListener);
-					Display.getDefault().asyncExec(new Runnable() {
-						public void run() {
-							if (listViewer.getList().isDisposed()) {
-								return;
-							}
-							listViewer.setSelection(new StructuredSelection(newValue));
-						}
-					});
-				}
-				else if (notification.getEventType() == Notification.ADD_MANY) {
-					List<IOverride> addedList = (List<IOverride>) notification.getNewValue();
-					for (IOverride override : addedList) {
-						override.eAdapters().add(this.overrideListener);
-					}
-				}
-				else if (notification.getEventType() == Notification.REMOVE) {
-					((IOverride) notification.getOldValue()).eAdapters().remove(this.overrideListener);				
-				}
-				else if (notification.getEventType() == Notification.REMOVE_MANY) {
-					List<IOverride> removedList = (List<IOverride>) notification.getOldValue();
-					for (IOverride override : removedList) {
-						override.eAdapters().remove(this.overrideListener);
-					}
-				}
-				break;
-		}
-	}
-
-	protected void overrideChanged(Notification notification) {
-		switch (notification.getFeatureID(IOverride.class)) {
-			case JpaCoreMappingsPackage.IOVERRIDE__NAME :
-				final IOverride override = (IOverride) notification.getNotifier();
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						OverridesComposite.this.listViewer.update(override, null);
-					}
-				});
-				break;
-			default :
-				break;
-		}
-	}
-	
-	public void dispose() {
-		this.columnComposite.dispose();
-		this.joinColumnsComposite.dispose();
-		super.dispose();
-	}
-	
-
-	void addJoinColumn() {
-		JoinColumnInAssociationOverrideDialog dialog = new JoinColumnInAssociationOverrideDialog(this.getControl().getShell(), (IAssociationOverride) getSelectedOverride());
-		this.addJoinColumnFromDialog(dialog);
-	}
-	
-	private void addJoinColumnFromDialog(JoinColumnInAssociationOverrideDialog dialog) {
-		if (dialog.open() != Window.OK) {
-			return;
-		}
-		int index = ((IAssociationOverride) getSelectedOverride()).getJoinColumns().size();
-		IJoinColumn joinColumn = ((IAssociationOverride) getSelectedOverride()).createJoinColumn(index);
-		((IAssociationOverride) getSelectedOverride()).getSpecifiedJoinColumns().add(joinColumn);
-		joinColumn.setSpecifiedName(dialog.getSelectedName());
-		joinColumn.setSpecifiedReferencedColumnName(dialog.getReferencedColumnName());
-	}
-
-	void editJoinColumn(IJoinColumn joinColumn) {
-		JoinColumnInAssociationOverrideDialog dialog = new JoinColumnInAssociationOverrideDialog(this.getControl().getShell(), joinColumn);
-		editJoinColumnFromDialog(dialog, joinColumn);
-	}
-	
-	private void editJoinColumnFromDialog(JoinColumnInAssociationOverrideDialog dialog, IJoinColumn joinColumn) {
-		if (dialog.open() == Window.OK) {
-			editJoinColumnDialogOkd(dialog, joinColumn);
-		}
-	}
-	
-	private void editJoinColumnDialogOkd(JoinColumnInAssociationOverrideDialog dialog, IJoinColumn joinColumn) {
-		String name = dialog.getSelectedName();
-		String referencedColumnName = dialog.getReferencedColumnName();
-
-		if (dialog.isDefaultNameSelected()) {
-			if (joinColumn.getSpecifiedName() != null) {
-				joinColumn.setSpecifiedName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedName() == null || !joinColumn.getSpecifiedName().equals(name)){
-			joinColumn.setSpecifiedName(name);
-		}
-		
-		if (dialog.isDefaultReferencedColumnNameSelected()) {
-			if (joinColumn.getSpecifiedReferencedColumnName() != null) {
-				joinColumn.setSpecifiedReferencedColumnName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedReferencedColumnName() == null || !joinColumn.getSpecifiedReferencedColumnName().equals(referencedColumnName)){
-			joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-		}
-	}
-	
-	private class JoinColumnsOwner extends JpaEObject implements Owner {
-		
-		IAssociationOverride associationOverride;
-		
-		public JoinColumnsOwner(IAssociationOverride associationOverride) {
-			super();
-			this.associationOverride = associationOverride;
-		}
-		
-		public void addJoinColumn() {
-			OverridesComposite.this.addJoinColumn();
-		}
-		
-		public boolean containsSpecifiedJoinColumns() {
-			return this.associationOverride.containsSpecifiedJoinColumns();
-		}
-		
-		public IJoinColumn createJoinColumn(int index) {
-			return this.associationOverride.createJoinColumn(index);
-		}
-		
-		public List<IJoinColumn> getJoinColumns() {
-			return this.associationOverride.getJoinColumns();
-		}
-		
-		public List<IJoinColumn> getSpecifiedJoinColumns() {
-			return this.associationOverride.getSpecifiedJoinColumns();
-		}
-		
-		public int specifiedJoinColumnsFeatureId() {
-			return JpaCoreMappingsPackage.IASSOCIATION_OVERRIDE__SPECIFIED_JOIN_COLUMNS;
-		}
-		
-		public Class owningFeatureClass() {
-			return IAssociationOverride.class;
-		}
-		
-		public void editJoinColumn(IJoinColumn joinColumn) {
-			OverridesComposite.this.editJoinColumn(joinColumn);
-		}
-		
-		public EObject getEObject() {
-			return this.associationOverride;
-		}
-	}
-	
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnDialog.java
deleted file mode 100644
index f7aa965..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnDialog.java
+++ /dev/null
@@ -1,37 +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
- ******************************************************************************/        
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.IPrimaryKeyJoinColumn;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.swt.widgets.Shell;
-
-public class PrimaryKeyJoinColumnDialog extends AbstractJoinColumnDialog<IPrimaryKeyJoinColumn> {
-
-	private IEntity entity;
-	
-	PrimaryKeyJoinColumnDialog(Shell parent, IEntity entity) {
-		super(parent);
-		this.entity = entity;
-	}
-
-	PrimaryKeyJoinColumnDialog(Shell parent, IPrimaryKeyJoinColumn joinColumn) {
-		super(parent, joinColumn);
-		this.entity = (IEntity) joinColumn.eContainer();
-	}
-
-	protected Table getNameTable() {
-		return this.entity.primaryDbTable();
-	}
-	
-	protected Table getReferencedNameTable() {
-		return this.entity.parentEntity().primaryDbTable();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnInSecondaryTableDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnInSecondaryTableDialog.java
deleted file mode 100644
index 51a220d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnInSecondaryTableDialog.java
+++ /dev/null
@@ -1,37 +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.internal.mappings.details;
-
-import org.eclipse.jpt.core.internal.mappings.IPrimaryKeyJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.ISecondaryTable;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.swt.widgets.Shell;
-
-public class PrimaryKeyJoinColumnInSecondaryTableDialog extends AbstractJoinColumnDialog<IPrimaryKeyJoinColumn> {
-
-	private ISecondaryTable secondaryTable;
-	
-	PrimaryKeyJoinColumnInSecondaryTableDialog(Shell parent, ISecondaryTable secondaryTable) {
-		super(parent);
-		this.secondaryTable = secondaryTable;
-	}
-
-	PrimaryKeyJoinColumnInSecondaryTableDialog(Shell parent, IPrimaryKeyJoinColumn joinColumn) {
-		super(parent, joinColumn);
-		this.secondaryTable = (ISecondaryTable) joinColumn.eContainer();
-	}
-
-	protected Table getNameTable() {
-		return this.secondaryTable.dbTable();
-	}
-	
-	protected Table getReferencedNameTable() {
-		return this.secondaryTable.typeMapping().primaryDbTable();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java
deleted file mode 100644
index d7a7524..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java
+++ /dev/null
@@ -1,399 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.mappings.IAbstractJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.INamedColumn;
-import org.eclipse.jpt.core.internal.mappings.IPrimaryKeyJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class PrimaryKeyJoinColumnsComposite extends BaseJpaComposite 
-{
-	private IEntity entity;
-	private final Adapter entityListener;
-	private final Adapter pkJoinColumnListener;
-	
-	ListViewer pkJoinColumnsListViewer;
-
-	private Group pkJoinColumnsGroup;
-	Button overrideDefaultJoinColumnsCheckBox;
-	private Button pkJoinColumnsRemoveButton;
-	private Button pkJoinColumnsEditButton;
-	
-	
-	public PrimaryKeyJoinColumnsComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.entityListener = buildEntityListener();
-		this.pkJoinColumnListener = buildPkJoinColumnListener();
-	}
-	
-	private Adapter buildEntityListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				entityChanged(notification);
-			}
-		};
-	}
-	
-	private Adapter buildPkJoinColumnListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				pkJoinColumnChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-		
-		GridData gridData =  new GridData();
-		this.overrideDefaultJoinColumnsCheckBox = getWidgetFactory().createButton(
-			composite, 
-			JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_overrideDefaultPrimaryKeyJoinColumns, 
-			SWT.CHECK);
-		this.overrideDefaultJoinColumnsCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				if (PrimaryKeyJoinColumnsComposite.this.overrideDefaultJoinColumnsCheckBox.getSelection()) {
-					IPrimaryKeyJoinColumn defaultJoinColumn = PrimaryKeyJoinColumnsComposite.this.entity.getDefaultPrimaryKeyJoinColumns().get(0);
-					String columnName = defaultJoinColumn.getDefaultName();
-					String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName();
-					
-					IPrimaryKeyJoinColumn pkJoinColumn = PrimaryKeyJoinColumnsComposite.this.entity.createPrimaryKeyJoinColumn(0);
-					PrimaryKeyJoinColumnsComposite.this.entity.getSpecifiedPrimaryKeyJoinColumns().add(pkJoinColumn);
-					pkJoinColumn.setSpecifiedName(columnName);
-					pkJoinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-				} else {
-					PrimaryKeyJoinColumnsComposite.this.entity.getSpecifiedPrimaryKeyJoinColumns().clear();
-				}
-			}
-		});
-
-		this.pkJoinColumnsGroup = 
-			getWidgetFactory().createGroup(
-				composite, 
-				JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_primaryKeyJoinColumn);
-		this.pkJoinColumnsGroup.setLayout(new GridLayout(2, false));
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.pkJoinColumnsGroup.setLayoutData(gridData);
-			
-		this.pkJoinColumnsListViewer = new ListViewer(this.pkJoinColumnsGroup, SWT.BORDER | SWT.MULTI);
-		this.pkJoinColumnsListViewer.setContentProvider(buildJoinColumnsListContentProvider());
-		this.pkJoinColumnsListViewer.setLabelProvider(buildJoinColumnsListLabelProvider());
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.verticalSpan = 3;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.pkJoinColumnsListViewer.getList().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.pkJoinColumnsListViewer.getList(), IJpaHelpContextIds.MAPPING_JOIN_TABLE_COLUMNS);
-		
-		Button addJoinColumnButton = new Button(this.pkJoinColumnsGroup, SWT.NONE);
-		addJoinColumnButton.setText(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_add);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		addJoinColumnButton.setLayoutData(gridData);
-		addJoinColumnButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				addPrimaryKeyJoinColumn();
-			}
-		});
-		
-		this.pkJoinColumnsEditButton = new Button(this.pkJoinColumnsGroup, SWT.NONE);
-		this.pkJoinColumnsEditButton.setText(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_edit);
-		this.pkJoinColumnsEditButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				editPrimaryKeyJoinColumn();
-			}
-		});
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		this.pkJoinColumnsEditButton.setLayoutData(gridData);
-
-		this.pkJoinColumnsRemoveButton = new Button(this.pkJoinColumnsGroup, SWT.NONE);
-		this.pkJoinColumnsRemoveButton.setText(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_remove);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.BEGINNING;
-		this.pkJoinColumnsRemoveButton.setLayoutData(gridData);
-		this.pkJoinColumnsRemoveButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				removePrimaryKeyJoinColumn();
-			}
-		});
-		
-		this.pkJoinColumnsListViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				updatePrimaryKeyJoinColumnsEnablement();
-			}
-		});
-	}
-	
-	private IContentProvider buildJoinColumnsListContentProvider() {
-		return new IStructuredContentProvider(){
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-				// do nothing
-			}
-		
-			public void dispose() {
-				// do nothing
-			}
-		
-			public Object[] getElements(Object inputElement) {
-				return ((IEntity) inputElement).getPrimaryKeyJoinColumns().toArray();
-			}
-		};
-	}
-	
-	private ILabelProvider buildJoinColumnsListLabelProvider() {
-		return new LabelProvider() {
-			public String getText(Object element) {
-				IPrimaryKeyJoinColumn joinColumn = (IPrimaryKeyJoinColumn) element;
-				return (PrimaryKeyJoinColumnsComposite.this.entity.containsSpecifiedPrimaryKeyJoinColumns()) ?
-					buildJoinColumnLabel(joinColumn)
-				:
-					buildDefaultJoinColumnLabel(joinColumn);
-			}
-		};
-	}
-	
-	String buildDefaultJoinColumnLabel(IPrimaryKeyJoinColumn joinColumn) {
-		return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());				
-	}
-	
-	String buildJoinColumnLabel(IPrimaryKeyJoinColumn joinColumn) {
-		if (joinColumn.getSpecifiedName() == null) {
-			if (joinColumn.getSpecifiedReferencedColumnName() == null) {
-				return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsBothDefault, joinColumn.getName(),joinColumn.getReferencedColumnName());				
-			}
-			return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsFirstDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());
-		}
-		else if (joinColumn.getSpecifiedReferencedColumnName() == null) {
-			return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsSecDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());				
-		}
-		else {
-			return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParams, joinColumn.getName(), joinColumn.getReferencedColumnName());					
-		}
-	}
-
-	
-	void addPrimaryKeyJoinColumn() {
-		PrimaryKeyJoinColumnDialog dialog = new PrimaryKeyJoinColumnDialog(this.getControl().getShell(), this.entity);
-		addJoinColumnFromDialog(dialog);
-	}
-	
-	private void addJoinColumnFromDialog(PrimaryKeyJoinColumnDialog dialog) {
-		if (dialog.open() == Window.OK) {
-			int index = this.entity.getSpecifiedPrimaryKeyJoinColumns().size();
-			String name = dialog.getSelectedName();
-			String referencedColumnName = dialog.getReferencedColumnName();
-			IPrimaryKeyJoinColumn joinColumn = this.entity.createPrimaryKeyJoinColumn(index);
-			this.entity.getSpecifiedPrimaryKeyJoinColumns().add(joinColumn);
-			joinColumn.setSpecifiedName(name);
-			joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-		}
-	}
-	
-	private IPrimaryKeyJoinColumn getSelectedJoinColumn() {
-		return (IPrimaryKeyJoinColumn) ((StructuredSelection) this.pkJoinColumnsListViewer.getSelection()).getFirstElement();
-	}
-
-	void editPrimaryKeyJoinColumn() {
-		IPrimaryKeyJoinColumn joinColumn = getSelectedJoinColumn();
-		PrimaryKeyJoinColumnDialog dialog = new PrimaryKeyJoinColumnDialog(this.getControl().getShell(), joinColumn);
-		editJoinColumnFromDialog(dialog, joinColumn);
-	}
-	
-	private void editJoinColumnFromDialog(PrimaryKeyJoinColumnDialog dialog, IPrimaryKeyJoinColumn joinColumn) {
-		if (dialog.open() == Window.OK) {
-			editJoinColumnDialogOkd(dialog, joinColumn);
-		}
-	}
-	
-	private void editJoinColumnDialogOkd(PrimaryKeyJoinColumnDialog dialog, IPrimaryKeyJoinColumn joinColumn) {
-		String name = dialog.getSelectedName();
-		String referencedColumnName = dialog.getReferencedColumnName();
-
-		if (dialog.isDefaultNameSelected()) {
-			if (joinColumn.getSpecifiedName() != null) {
-				joinColumn.setSpecifiedName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedName() == null || !joinColumn.getSpecifiedName().equals(name)){
-			joinColumn.setSpecifiedName(name);
-		}
-		
-		if (dialog.isDefaultReferencedColumnNameSelected()) {
-			if (joinColumn.getSpecifiedReferencedColumnName() != null) {
-				joinColumn.setSpecifiedReferencedColumnName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedReferencedColumnName() == null || !joinColumn.getSpecifiedReferencedColumnName().equals(referencedColumnName)){
-			joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-		}
-	}
-	
-	void removePrimaryKeyJoinColumn() {
-		ISelection selection = this.pkJoinColumnsListViewer.getSelection();
-		if (selection instanceof StructuredSelection) {
-			for (Iterator i = ((StructuredSelection) selection).iterator(); i.hasNext(); ) {
-				this.entity.getPrimaryKeyJoinColumns().remove(i.next());
-			}
-		}
-	}
-	
-	void updatePrimaryKeyJoinColumnsEnablement() {
-		boolean groupEnabledState = this.entity.containsSpecifiedPrimaryKeyJoinColumns();
-		enableGroup(this.pkJoinColumnsGroup, groupEnabledState);
-
-		this.pkJoinColumnsRemoveButton.setEnabled(groupEnabledState && !((StructuredSelection) this.pkJoinColumnsListViewer.getSelection()).isEmpty());
-		this.pkJoinColumnsEditButton.setEnabled(groupEnabledState && ((StructuredSelection) this.pkJoinColumnsListViewer.getSelection()).size() == 1);
-	}
-	
-	private void enableGroup(Group group, boolean enabled) {
-		group.setEnabled(enabled);
-		for (int i = 0; i < group.getChildren().length; i++) {
-			group.getChildren()[i].setEnabled(enabled);
-		}	
-	}
-	
-	
-	public void doPopulate(EObject obj) {
-		this.entity = (IEntity) obj;
-		if (this.entity == null) {
-			this.pkJoinColumnsListViewer.setInput(null);
-			return;
-		}
-		
-		this.pkJoinColumnsListViewer.setInput(this.entity);
-		
-
-		updatePrimaryKeyJoinColumnsEnablement();
-		this.overrideDefaultJoinColumnsCheckBox.setSelection(this.entity.containsSpecifiedPrimaryKeyJoinColumns());
-	}
-
-	@Override
-	protected void doPopulate() {
-	}
-
-	protected void engageListeners() {
-		if (this.entity != null) {
-			this.entity.eAdapters().add(this.entityListener);
-			for (IPrimaryKeyJoinColumn pkJoinColumn : this.entity.getPrimaryKeyJoinColumns()) {
-				pkJoinColumn.eAdapters().add(this.pkJoinColumnListener);
-			}
-			//this.addConnectionListener();		
-		}
-	}
-	
-	protected void disengageListeners() {
-		if (this.entity != null) {
-			//this.removeConnectionListener();
-			for (IPrimaryKeyJoinColumn pkJoinColumn : this.entity.getPrimaryKeyJoinColumns()) {
-				pkJoinColumn.eAdapters().remove(this.pkJoinColumnListener);
-			}
-			this.entity.eAdapters().remove(this.entityListener);
-		}
-	}
-	
-	protected void entityChanged(Notification notification) {
-		if (notification.getFeatureID(IEntity.class) == JpaCoreMappingsPackage.IENTITY__SPECIFIED_PRIMARY_KEY_JOIN_COLUMNS) {
-			if (notification.getEventType() == Notification.ADD) {
-				((IPrimaryKeyJoinColumn) notification.getNewValue()).eAdapters().add(this.pkJoinColumnListener);
-			}
-			else if (notification.getEventType() == Notification.REMOVE) {
-				((IPrimaryKeyJoinColumn) notification.getOldValue()).eAdapters().remove(this.pkJoinColumnListener);				
-			}
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					pkJoinColumnsListViewer.refresh();
-					overrideDefaultJoinColumnsCheckBox.setSelection(entity.containsSpecifiedPrimaryKeyJoinColumns());
-					updatePrimaryKeyJoinColumnsEnablement();
-				}
-			});
-		}
-	}
-
-	protected void pkJoinColumnChanged(Notification notification) {
-		if (notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__SPECIFIED_NAME
-			|| notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__SPECIFIED_REFERENCED_COLUMN_NAME
-			|| notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__DEFAULT_NAME
-			|| notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__DEFAULT_REFERENCED_COLUMN_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					pkJoinColumnsListViewer.refresh();
-				}
-			});
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsInSecondaryTableComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsInSecondaryTableComposite.java
deleted file mode 100644
index 3afc547..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsInSecondaryTableComposite.java
+++ /dev/null
@@ -1,407 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.mappings.IAbstractJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.INamedColumn;
-import org.eclipse.jpt.core.internal.mappings.IPrimaryKeyJoinColumn;
-import org.eclipse.jpt.core.internal.mappings.ISecondaryTable;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class PrimaryKeyJoinColumnsInSecondaryTableComposite extends BaseJpaComposite 
-{
-	private ISecondaryTable secondaryTable;
-	private final Adapter secondaryTableListener;
-	private final Adapter pkJoinColumnListener;
-	
-	ListViewer pkJoinColumnsListViewer;
-
-	private Group pkJoinColumnsGroup;
-	Button overrideDefaultJoinColumnsCheckBox;
-	private Button pkJoinColumnsAddButton;
-	private Button pkJoinColumnsRemoveButton;
-	private Button pkJoinColumnsEditButton;
-	
-	
-	public PrimaryKeyJoinColumnsInSecondaryTableComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.secondaryTableListener = buildSecondaryTableListener();
-		this.pkJoinColumnListener = buildPkJoinColumnListener();
-	}
-	
-	private Adapter buildSecondaryTableListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				secondaryTableChanged(notification);
-			}
-		};
-	}
-	
-	private Adapter buildPkJoinColumnListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				pkJoinColumnChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-		
-		GridData gridData =  new GridData();
-		this.overrideDefaultJoinColumnsCheckBox = getWidgetFactory().createButton(
-			composite, 
-			JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_overrideDefaultPrimaryKeyJoinColumns, 
-			SWT.CHECK);
-		this.overrideDefaultJoinColumnsCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				if (PrimaryKeyJoinColumnsInSecondaryTableComposite.this.overrideDefaultJoinColumnsCheckBox.getSelection()) {
-					IPrimaryKeyJoinColumn defaultJoinColumn = PrimaryKeyJoinColumnsInSecondaryTableComposite.this.secondaryTable.getDefaultPrimaryKeyJoinColumns().get(0);
-					String columnName = defaultJoinColumn.getDefaultName();
-					String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName();
-					
-					IPrimaryKeyJoinColumn pkJoinColumn = PrimaryKeyJoinColumnsInSecondaryTableComposite.this.secondaryTable.createPrimaryKeyJoinColumn(0);
-					PrimaryKeyJoinColumnsInSecondaryTableComposite.this.secondaryTable.getSpecifiedPrimaryKeyJoinColumns().add(pkJoinColumn);
-					pkJoinColumn.setSpecifiedName(columnName);
-					pkJoinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-				} else {
-					PrimaryKeyJoinColumnsInSecondaryTableComposite.this.secondaryTable.getSpecifiedPrimaryKeyJoinColumns().clear();
-				}
-			}
-		});
-
-		this.pkJoinColumnsGroup = 
-			getWidgetFactory().createGroup(
-				composite, 
-				JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_primaryKeyJoinColumn);
-		this.pkJoinColumnsGroup.setLayout(new GridLayout(2, false));
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.pkJoinColumnsGroup.setLayoutData(gridData);
-			
-		this.pkJoinColumnsListViewer = new ListViewer(this.pkJoinColumnsGroup, SWT.BORDER | SWT.MULTI);
-		this.pkJoinColumnsListViewer.setContentProvider(buildJoinColumnsListContentProvider());
-		this.pkJoinColumnsListViewer.setLabelProvider(buildJoinColumnsListLabelProvider());
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.verticalSpan = 3;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.pkJoinColumnsListViewer.getList().setLayoutData(gridData);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.pkJoinColumnsListViewer.getList(), IJpaHelpContextIds.MAPPING_JOIN_TABLE_COLUMNS);
-		
-		this.pkJoinColumnsAddButton = new Button(this.pkJoinColumnsGroup, SWT.NONE);
-		this.pkJoinColumnsAddButton.setText(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_add);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		this.pkJoinColumnsAddButton.setLayoutData(gridData);
-		this.pkJoinColumnsAddButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				addPrimaryKeyJoinColumn();
-			}
-		});
-		
-		this.pkJoinColumnsEditButton = new Button(this.pkJoinColumnsGroup, SWT.NONE);
-		this.pkJoinColumnsEditButton.setText(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_edit);
-		this.pkJoinColumnsEditButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				editPrimaryKeyJoinColumn();
-			}
-		});
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		this.pkJoinColumnsEditButton.setLayoutData(gridData);
-
-		this.pkJoinColumnsRemoveButton = new Button(this.pkJoinColumnsGroup, SWT.NONE);
-		this.pkJoinColumnsRemoveButton.setText(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_remove);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.BEGINNING;
-		this.pkJoinColumnsRemoveButton.setLayoutData(gridData);
-		this.pkJoinColumnsRemoveButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				removePrimaryKeyJoinColumn();
-			}
-		});
-		
-		this.pkJoinColumnsListViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				updatePrimaryKeyJoinColumnsEnablement();
-			}
-		});
-	}
-	
-	private IContentProvider buildJoinColumnsListContentProvider() {
-		return new IStructuredContentProvider(){
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-				// do nothing
-			}
-		
-			public void dispose() {
-				// do nothing
-			}
-		
-			public Object[] getElements(Object inputElement) {
-				return ((ISecondaryTable) inputElement).getPrimaryKeyJoinColumns().toArray();
-			}
-		};
-	}
-	
-	private ILabelProvider buildJoinColumnsListLabelProvider() {
-		return new LabelProvider() {
-			public String getText(Object element) {
-				IPrimaryKeyJoinColumn joinColumn = (IPrimaryKeyJoinColumn) element;
-				return (PrimaryKeyJoinColumnsInSecondaryTableComposite.this.secondaryTable.containsSpecifiedPrimaryKeyJoinColumns()) ?
-					buildJoinColumnLabel(joinColumn)
-				:
-					buildDefaultJoinColumnLabel(joinColumn);
-			}
-		};
-	}
-	
-	String buildDefaultJoinColumnLabel(IPrimaryKeyJoinColumn joinColumn) {
-		return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());				
-	}
-	
-	String buildJoinColumnLabel(IPrimaryKeyJoinColumn joinColumn) {
-		if (joinColumn.getSpecifiedName() == null) {
-			if (joinColumn.getSpecifiedReferencedColumnName() == null) {
-				return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsBothDefault, joinColumn.getName(),joinColumn.getReferencedColumnName());				
-			}
-			return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsFirstDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());
-		}
-		else if (joinColumn.getSpecifiedReferencedColumnName() == null) {
-			return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsSecDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());				
-		}
-		else {
-			return NLS.bind(JptUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParams, joinColumn.getName(), joinColumn.getReferencedColumnName());					
-		}
-	}
-
-	
-	void addPrimaryKeyJoinColumn() {
-		PrimaryKeyJoinColumnInSecondaryTableDialog dialog = new PrimaryKeyJoinColumnInSecondaryTableDialog(this.getControl().getShell(), this.secondaryTable);
-		addJoinColumnFromDialog(dialog);
-	}
-	
-	private void addJoinColumnFromDialog(PrimaryKeyJoinColumnInSecondaryTableDialog dialog) {
-		if (dialog.open() == Window.OK) {
-			int index = this.secondaryTable.getSpecifiedPrimaryKeyJoinColumns().size();
-			String name = dialog.getSelectedName();
-			String referencedColumnName = dialog.getReferencedColumnName();
-			IPrimaryKeyJoinColumn joinColumn = this.secondaryTable.createPrimaryKeyJoinColumn(index);
-			this.secondaryTable.getSpecifiedPrimaryKeyJoinColumns().add(joinColumn);
-			joinColumn.setSpecifiedName(name);
-			joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-		}
-	}
-	
-	private IPrimaryKeyJoinColumn getSelectedJoinColumn() {
-		return (IPrimaryKeyJoinColumn) ((StructuredSelection) this.pkJoinColumnsListViewer.getSelection()).getFirstElement();
-	}
-
-	void editPrimaryKeyJoinColumn() {
-		IPrimaryKeyJoinColumn joinColumn = getSelectedJoinColumn();
-		PrimaryKeyJoinColumnInSecondaryTableDialog dialog = new PrimaryKeyJoinColumnInSecondaryTableDialog(this.getControl().getShell(), joinColumn);
-		editJoinColumnFromDialog(dialog, joinColumn);
-	}
-	
-	private void editJoinColumnFromDialog(PrimaryKeyJoinColumnInSecondaryTableDialog dialog, IPrimaryKeyJoinColumn joinColumn) {
-		if (dialog.open() == Window.OK) {
-			editJoinColumnDialogOkd(dialog, joinColumn);
-		}
-	}
-	
-	private void editJoinColumnDialogOkd(PrimaryKeyJoinColumnInSecondaryTableDialog dialog, IPrimaryKeyJoinColumn joinColumn) {
-		String name = dialog.getSelectedName();
-		String referencedColumnName = dialog.getReferencedColumnName();
-
-		if (dialog.isDefaultNameSelected()) {
-			if (joinColumn.getSpecifiedName() != null) {
-				joinColumn.setSpecifiedName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedName() == null || !joinColumn.getSpecifiedName().equals(name)){
-			joinColumn.setSpecifiedName(name);
-		}
-		
-		if (dialog.isDefaultReferencedColumnNameSelected()) {
-			if (joinColumn.getSpecifiedReferencedColumnName() != null) {
-				joinColumn.setSpecifiedReferencedColumnName(null);
-			}
-		}
-		else if (joinColumn.getSpecifiedReferencedColumnName() == null || !joinColumn.getSpecifiedReferencedColumnName().equals(referencedColumnName)){
-			joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-		}
-	}
-	
-	void removePrimaryKeyJoinColumn() {
-		ISelection selection = this.pkJoinColumnsListViewer.getSelection();
-		if (selection instanceof StructuredSelection) {
-			for (Iterator i = ((StructuredSelection) selection).iterator(); i.hasNext(); ) {
-				this.secondaryTable.getPrimaryKeyJoinColumns().remove(i.next());
-			}
-		}
-	}
-	
-	void updatePrimaryKeyJoinColumnsEnablement() {
-		boolean groupEnabledState = this.secondaryTable.containsSpecifiedPrimaryKeyJoinColumns();
-		enableGroup(this.pkJoinColumnsGroup, groupEnabledState);
-
-		this.pkJoinColumnsRemoveButton.setEnabled(groupEnabledState && !((StructuredSelection) this.pkJoinColumnsListViewer.getSelection()).isEmpty());
-		this.pkJoinColumnsEditButton.setEnabled(groupEnabledState && ((StructuredSelection) this.pkJoinColumnsListViewer.getSelection()).size() == 1);
-	}
-	
-	private void enableGroup(Group group, boolean enabled) {
-		group.setEnabled(enabled);
-		for (int i = 0; i < group.getChildren().length; i++) {
-			group.getChildren()[i].setEnabled(enabled);
-		}	
-	}
-	
-	
-	public void doPopulate(EObject obj) {
-		this.secondaryTable = (ISecondaryTable) obj;
-		if (this.secondaryTable == null) {
-			this.pkJoinColumnsListViewer.setInput(null);
-			return;
-		}
-		
-		this.pkJoinColumnsListViewer.setInput(this.secondaryTable);
-		
-
-		updatePrimaryKeyJoinColumnsEnablement();
-		this.overrideDefaultJoinColumnsCheckBox.setSelection(this.secondaryTable.containsSpecifiedPrimaryKeyJoinColumns());
-	}
-
-	@Override
-	protected void doPopulate() {
-	}
-
-	protected void engageListeners() {
-		if (this.secondaryTable != null) {
-			this.secondaryTable.eAdapters().add(this.secondaryTableListener);
-			for (IPrimaryKeyJoinColumn pkJoinColumn : this.secondaryTable.getPrimaryKeyJoinColumns()) {
-				pkJoinColumn.eAdapters().add(this.pkJoinColumnListener);
-			}
-		}
-	}
-	
-	protected void disengageListeners() {
-		if (this.secondaryTable != null) {
-			for (IPrimaryKeyJoinColumn pkJoinColumn : this.secondaryTable.getPrimaryKeyJoinColumns()) {
-				pkJoinColumn.eAdapters().remove(this.pkJoinColumnListener);
-			}
-			this.secondaryTable.eAdapters().remove(this.secondaryTableListener);
-		}
-	}
-	
-	protected void secondaryTableChanged(Notification notification) {
-		if (notification.getFeatureID(ISecondaryTable.class) == JpaCoreMappingsPackage.ISECONDARY_TABLE__SPECIFIED_PRIMARY_KEY_JOIN_COLUMNS) {
-			if (notification.getEventType() == Notification.ADD) {
-				((IPrimaryKeyJoinColumn) notification.getNewValue()).eAdapters().add(this.pkJoinColumnListener);
-			}
-			else if (notification.getEventType() == Notification.REMOVE) {
-				((IPrimaryKeyJoinColumn) notification.getOldValue()).eAdapters().remove(this.pkJoinColumnListener);				
-			}
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					pkJoinColumnsListViewer.refresh();
-					overrideDefaultJoinColumnsCheckBox.setSelection(secondaryTable.containsSpecifiedPrimaryKeyJoinColumns());
-					updatePrimaryKeyJoinColumnsEnablement();
-				}
-			});
-		}
-	}
-
-	protected void pkJoinColumnChanged(Notification notification) {
-		if (notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__SPECIFIED_NAME
-			|| notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__SPECIFIED_REFERENCED_COLUMN_NAME
-			|| notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__DEFAULT_NAME
-			|| notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__DEFAULT_REFERENCED_COLUMN_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					pkJoinColumnsListViewer.refresh();
-				}
-			});
-		}
-	}
-	
-	protected void enableWidgets(boolean enabled) {
-		this.pkJoinColumnsListViewer.getControl().setEnabled(enabled);
-		this.overrideDefaultJoinColumnsCheckBox.setEnabled(enabled);
-		this.pkJoinColumnsEditButton.setEnabled(enabled);
-		this.pkJoinColumnsRemoveButton.setEnabled(enabled);
-		this.pkJoinColumnsAddButton.setEnabled(enabled);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SchemaCombo.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SchemaCombo.java
deleted file mode 100644
index 9655c22..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SchemaCombo.java
+++ /dev/null
@@ -1,327 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.ITable;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.db.internal.Connection;
-import org.eclipse.jpt.db.internal.ConnectionListener;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class SchemaCombo extends BaseJpaController
-{
-	private ITable table;
-
-	private Adapter listener;
-
-	/**
-	 * Caching the connectionProfile so we can remove the listener. If the
-	 * cached table object has been removed from the model then we no longer
-	 * have access to the parent and cannot find the connectionProfile
-	 */
-	private ConnectionProfile connectionProfile;
-
-	private ConnectionListener connectionListener;
-
-	private CCombo combo;
-
-	public SchemaCombo(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		this.listener = this.buildTableListener();
-		this.connectionListener = this.buildConnectionListener();
-	}
-
-	private Adapter buildTableListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				SchemaCombo.this.schemaChanged(notification);
-			}
-		};
-	}
-
-	private ConnectionListener buildConnectionListener() {
-		return new ConnectionListener() {
-			public void aboutToClose(Connection connection) {
-			// not interested to this event.
-			}
-
-			public void closed(Connection connection) {
-				getCombo().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						SchemaCombo.this.populateShemaCombo();
-					}
-				});
-			}
-
-			public void modified(Connection connection) {
-				getCombo().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						SchemaCombo.this.populateShemaCombo();
-					}
-				});
-			}
-
-			public boolean okToClose(Connection connection) {
-				// not interested to this event.
-				return true;
-			}
-
-			public void opened(Connection connection) {
-				getCombo().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						SchemaCombo.this.populateShemaCombo();
-					}
-				});
-			}
-
-			public void databaseChanged(Connection connection, final Database database) {
-				getControl().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (database == SchemaCombo.this.getDatabase()) {
-							if (!getControl().isDisposed()) {
-								SchemaCombo.this.populateShemaCombo();
-							}
-						}
-					}
-				});
-			}
-
-			public void schemaChanged(Connection connection, final Schema schema) {
-				getControl().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (schema == SchemaCombo.this.getTableSchema()) {
-							if (!getControl().isDisposed()) {
-								SchemaCombo.this.populateShemaCombo();
-							}
-						}
-					}
-				});
-			}
-
-			public void tableChanged(Connection connection, final Table table) {
-			// not interested to this event.
-			}
-		};
-	}
-
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		this.combo.add(JptUiMappingsMessages.TableComposite_defaultEmpty);
-		this.combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String schemaText = ((CCombo) e.getSource()).getText();
-				if (schemaText.equals("")) { //$NON-NLS-1$
-					schemaText = null;
-					if (SchemaCombo.this.table.getSpecifiedSchema() == null || SchemaCombo.this.table.getSpecifiedSchema().equals("")) { //$NON-NLS-1$
-						return;
-					}
-				}
-				if (schemaText != null && combo.getItemCount() > 0 && schemaText.equals(combo.getItem(0))) {
-					schemaText = null;
-				}
-				if (SchemaCombo.this.table.getSpecifiedSchema() == null && schemaText != null) {
-					SchemaCombo.this.table.setSpecifiedSchema(schemaText);
-				}
-				if (SchemaCombo.this.table.getSpecifiedSchema() != null && !SchemaCombo.this.table.getSpecifiedSchema().equals(schemaText)) {
-					SchemaCombo.this.table.setSpecifiedSchema(schemaText);
-				}
-			}
-		});
-	}
-
-	protected void schemaChanged(Notification notification) {
-		if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__SPECIFIED_SCHEMA) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					SchemaCombo.this.populateSchemaName();
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__DEFAULT_SCHEMA) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					SchemaCombo.this.populateDefaultSchemaName();
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__DEFAULT_CATALOG) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					SchemaCombo.this.populateShemaCombo();
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__SPECIFIED_CATALOG) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					SchemaCombo.this.populateShemaCombo();
-				}
-			});
-		}
-	}
-
-	public void doPopulate(EObject obj) {
-		this.table = (ITable) obj;
-		if (this.table != null) {
-			this.populateShemaCombo();
-		}
-		else {
-			this.connectionProfile = null;
-		}
-	}
-
-	public void doPopulate() {
-		this.populateShemaCombo();
-	}
-
-	protected Database getDatabase() {
-		return this.getConnectionProfile().getDatabase();
-	}
-
-	private ConnectionProfile getConnectionProfile() {
-		if (this.connectionProfile == null) {
-			this.connectionProfile = this.table.getJpaProject().connectionProfile();
-		}
-		return this.connectionProfile;
-	}
-
-	private void populateShemaCombo() {
-		if (this.table == null) {
-			return;
-		}
-		this.populateDefaultSchemaName();
-		if (this.getConnectionProfile().isConnected()) {
-			this.combo.remove(1, this.combo.getItemCount() - 1);
-			Database database = this.getDatabase();
-			if (database != null) {
-				Iterator<String> schemata = database.schemaNames();
-				for (Iterator<String> stream = CollectionTools.sort(schemata); stream.hasNext();) {
-					this.combo.add(stream.next());
-				}
-			}
-		}
-		else {
-			this.combo.remove(1, this.combo.getItemCount() - 1);
-		}
-		this.populateSchemaName();
-	}
-
-	protected void populateDefaultSchemaName() {
-		String defaultSchemaName = this.table.getDefaultSchema();
-		int selectionIndex = combo.getSelectionIndex();
-		combo.setItem(0, NLS.bind(JptUiMappingsMessages.TableComposite_defaultWithOneParam, defaultSchemaName));
-		if (selectionIndex == 0) {
-			combo.clearSelection();
-			combo.select(0);
-		}
-	}
-
-	protected void populateSchemaName() {
-		if (this.table == null) {
-			return;
-		}
-		String schemaName = this.table.getSpecifiedSchema();
-		String defaultSchemaName = this.table.getDefaultSchema();
-		if (!StringTools.stringIsEmpty(schemaName)) {
-			if (!this.combo.getText().equals(schemaName)) {
-				this.combo.setText(schemaName);
-			}
-		}
-		else {
-			if (!this.combo.getText().equals(NLS.bind(JptUiMappingsMessages.TableComposite_defaultWithOneParam, defaultSchemaName))) {
-				this.combo.select(0);
-			}
-		}
-	}
-
-	public CCombo getCombo() {
-		return this.combo;
-	}
-
-	@Override
-	public Control getControl() {
-		return getCombo();
-	}
-
-	protected Schema getTableSchema() {
-		return this.getConnectionProfile().getDatabase().schemaNamed(table.getSchema());
-	}
-
-	@Override
-	protected void disengageListeners() {
-		if (this.table != null) {
-			this.removeConnectionListener();
-			this.table.eAdapters().remove(this.listener);
-		}
-	}
-
-	@Override
-	protected void engageListeners() {
-		if (this.table != null) {
-			this.table.eAdapters().add(this.listener);
-			this.addConnectionListener();
-		}
-	}
-
-	private void addConnectionListener() {
-		this.getConnectionProfile().addConnectionListener(this.connectionListener);
-	}
-
-	private void removeConnectionListener() {
-		this.getConnectionProfile().removeConnectionListener(this.connectionListener);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SecondaryTableDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SecondaryTableDialog.java
deleted file mode 100644
index 14be07b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SecondaryTableDialog.java
+++ /dev/null
@@ -1,247 +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
- ******************************************************************************/        
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.ISecondaryTable;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-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.Shell;
-
-public class SecondaryTableDialog extends Dialog {
-
-	//if creating a new JoinColumn, this will be null, 
-	//specify the JoinColumnOwner instead in the appropriate construtor
-	private ISecondaryTable secondaryTable;
-	private IEntity entity;
-	
-	protected Combo nameCombo;
-	protected Combo catalogCombo;
-	protected Combo schemaCombo;
-	
-	private String selectedName;
-	private String selectedSchema;
-	private String selectedCatalog;
-	
-	private boolean defaultSchemaSelected;
-	private boolean defaultCatalogSelected;
-	
-	SecondaryTableDialog(Shell parent, IEntity entity) {
-		super(parent);
-		this.entity = entity;
-	}
-
-	SecondaryTableDialog(Shell parent, ISecondaryTable secondaryTable, IEntity entity) {
-		super(parent);
-		this.secondaryTable = secondaryTable;
-		this.entity = entity;
-	}
-	
-	protected void configureShell(Shell shell) {
-		super.configureShell(shell);
-		shell.setText(getTitle());
-	}
-	
-	protected String getTitle() {
-		return JptUiMappingsMessages.SecondaryTableDialog_editSecondaryTable;
-	}
-	
-	protected Control createDialogArea(Composite parent) {
-		Composite composite = (Composite) super.createDialogArea(parent);
-		GridLayout gridLayout = (GridLayout) composite.getLayout();
-		gridLayout.numColumns = 2;
-		
-		Label nameLabel = new Label(composite, SWT.LEFT);
-		nameLabel.setText(JptUiMappingsMessages.SecondaryTableDialog_name);
-		GridData gridData = new GridData();
-		nameLabel.setLayoutData(gridData);
-		
-		this.nameCombo = new Combo(composite, SWT.LEFT);
-		gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.nameCombo.setLayoutData(gridData);
-		populateNameCombo();
-	
-		Label catalogLabel = new Label(composite, SWT.LEFT);
-		catalogLabel.setText(JptUiMappingsMessages.SecondaryTableDialog_catalog);
-		gridData = new GridData();
-		catalogLabel.setLayoutData(gridData);
-		
-		this.catalogCombo = new Combo(composite, SWT.LEFT);
-		gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.catalogCombo.setLayoutData(gridData);
-		populateCatalogCombo();
-
-		Label schemaLabel = new Label(composite, SWT.LEFT);
-		schemaLabel.setText(JptUiMappingsMessages.SecondaryTableDialog_schema);
-		gridData = new GridData();
-		schemaLabel.setLayoutData(gridData);
-		
-		this.schemaCombo = new Combo(composite, SWT.LEFT);
-		gridData = new GridData();
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalAlignment = SWT.FILL;
-		this.schemaCombo.setLayoutData(gridData);
-		populateSchemaCombo();
-
-		return composite;
-	}
-	
-	protected Database getDatabase() {
-		return this.getConnectionProfile().getDatabase();
-	}
-	
-	private ConnectionProfile getConnectionProfile() {
-		IJpaProject project = (this.secondaryTable == null) ? this.entity.getJpaProject() : this.secondaryTable.getJpaProject();
-		return project.connectionProfile();
-	}
-	
-	protected Schema getTableSchema() {
-		Database database = this.getDatabase();
-		if (database != null) {
-			if (this.secondaryTable != null) {
-				return database.schemaNamed(this.secondaryTable.getSchema());
-			}
-			return database.schemaNamed(this.entity.getTable().getSchema());
-		}
-		return null;
-	}
-	
-	protected void populateNameCombo() {
-		Schema schema = this.getTableSchema();
-		if (schema != null) {
-			Iterator<String> tables = schema.tableNames();
-			for (Iterator<String> stream = CollectionTools.sort( tables); stream.hasNext(); ) {
-				this.nameCombo.add(stream.next());
-			}
-		}
-
-		if (getSecondaryTable() != null) {
-			if (getSecondaryTable().getSpecifiedName() != null) {
-				this.nameCombo.setText(getSecondaryTable().getSpecifiedName());
-			}
-		}
-	}
-
-	protected void populateSchemaCombo() {
-		if (getSecondaryTable() != null) {
-			this.schemaCombo.add(NLS.bind(JptUiMappingsMessages.SecondaryTableDialog_defaultSchema, getSecondaryTable().getDefaultSchema()));
-		}
-		
-		Database database = this.getDatabase();
-		
-		if (database != null) {
-			Iterator<String> schemata = database.schemaNames();
-			for (Iterator<String> stream = CollectionTools.sort(schemata); stream.hasNext(); ) {
-				this.schemaCombo.add(stream.next());
-			}
-		}
-
-		if (getSecondaryTable() != null) {
-			if (getSecondaryTable().getSpecifiedSchema() != null) {
-				this.schemaCombo.setText(getSecondaryTable().getSpecifiedSchema());
-			}
-			else {
-				this.schemaCombo.select(0);
-			}
-		}
-	}
-	
-	protected void populateCatalogCombo() {
-		if (getSecondaryTable() != null) {
-			this.catalogCombo.add(NLS.bind(JptUiMappingsMessages.SecondaryTableDialog_defaultCatalog, getSecondaryTable().getDefaultCatalog()));
-		}
-		Database database = this.getDatabase();
-		
-		if (database != null) {
-			Iterator<String> catalogs = database.catalogNames();
-			for (Iterator<String> stream = CollectionTools.sort(catalogs); stream.hasNext(); ) {
-				this.catalogCombo.add(stream.next());
-			}
-		}
-
-		if (getSecondaryTable() != null) {
-			if (getSecondaryTable().getSpecifiedCatalog() != null) {
-				this.catalogCombo.setText(getSecondaryTable().getSpecifiedCatalog());
-			}
-			else {
-				this.catalogCombo.select(0);
-			}
-		}
-	}	
-	
-	protected Combo getNameCombo() {
-		return this.nameCombo;
-	}
-	
-	protected Combo getSchemaCombo() {
-		return this.schemaCombo;
-	}
-	
-	protected Combo getCatalogCombo() {
-		return this.catalogCombo;
-	}
-	
-	protected ISecondaryTable getSecondaryTable() {
-		return this.secondaryTable;
-	}
-	
-	
-	protected String getSelectedName() {
-		return this.selectedName;
-	}
-	
-	protected String getSelectedCatalog() {
-		return this.selectedCatalog;
-	}
-	
-	protected String getSelectedSchema() {
-		return this.selectedSchema;
-	}
-	
-	protected boolean isDefaultSchemaSelected() {
-		return this.defaultSchemaSelected;
-	}
-	
-	protected boolean isDefaultCatalogSelected() {
-		return this.defaultCatalogSelected;
-	}
-		
-	public boolean close() {
-		this.selectedName = this.nameCombo.getText();
-		this.selectedSchema = this.schemaCombo.getText();
-		if (this.selectedSchema.equals("")) {
-			this.selectedSchema = null;
-		}
-		this.selectedCatalog = this.catalogCombo.getText();
-		if (this.selectedCatalog.equals("")) {
-			this.selectedCatalog = null;
-		}
-		this.defaultSchemaSelected = this.schemaCombo.getSelectionIndex() == 0;
-		this.defaultCatalogSelected = this.catalogCombo.getSelectionIndex() == 0;
-		return super.close();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SecondaryTablesComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SecondaryTablesComposite.java
deleted file mode 100644
index 2ff149d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SecondaryTablesComposite.java
+++ /dev/null
@@ -1,382 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.ISecondaryTable;
-import org.eclipse.jpt.core.internal.mappings.ITable;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Display;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-//TODO handle xml, how to handle virtual secondaryTables, adding them to xml, are they overriden, etc??
-public class SecondaryTablesComposite extends BaseJpaComposite 
-{
-	private IEntity entity;
-	private final Adapter entityListener;
-	private final Adapter secondaryTableListener;
-	
-	ListViewer secondaryTablesListViewer;
-
-	private Button addButton;
-	private Button editButton;
-	private Button removeButton;
-	
-	private PrimaryKeyJoinColumnsInSecondaryTableComposite pkJoinColumnsComposite;
-	
-	public SecondaryTablesComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-		this.entityListener = buildEntityListener();
-		this.secondaryTableListener = buildSecondaryTableListener();
-	}
-	
-	private Adapter buildEntityListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				entityChanged(notification);
-			}
-		};
-	}
-	
-	private Adapter buildSecondaryTableListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				seoncaryTableChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		composite.setLayout(layout);
-		
-		GridData gridData =  new GridData();
-		
-		Composite secondaryTablesComposite = new Composite(composite, SWT.NONE);
-		layout = new GridLayout(3, false);
-		layout.marginWidth = 0;
-		secondaryTablesComposite.setLayout(layout);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		secondaryTablesComposite.setLayoutData(gridData);
-	
-		this.secondaryTablesListViewer = buildSecondaryTablesListViewer(secondaryTablesComposite);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.horizontalSpan = 3;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.secondaryTablesListViewer.getList().setLayoutData(gridData);
-		//PlatformUI.getWorkbench().getHelpSystem().setHelp(this.secondaryTablesListViewer.getList(), IJpaHelpContextIds.MAPPING_JOIN_TABLE_COLUMNS);
-		
-		Composite buttonsComposite = new Composite(secondaryTablesComposite, SWT.NONE);
-		layout = new GridLayout(3, false);
-		layout.marginWidth = 0;
-		buttonsComposite.setLayout(layout);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = SWT.END;
-		buttonsComposite.setLayoutData(gridData);
-		
-		this.addButton = new Button(buttonsComposite, SWT.NONE);
-		this.addButton.setText(JptUiMappingsMessages.SecondaryTablesComposite_add);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		this.addButton.setLayoutData(gridData);
-		this.addButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				addSecondaryTable();
-			}
-		});
-		
-		this.editButton = new Button(buttonsComposite, SWT.NONE);
-		this.editButton.setText(JptUiMappingsMessages.SecondaryTablesComposite_edit);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		this.editButton.setLayoutData(gridData);
-		this.editButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				editSecondaryTable();
-			}
-		});
-
-		this.removeButton = new Button(buttonsComposite, SWT.NONE);
-		this.removeButton.setText(JptUiMappingsMessages.SecondaryTablesComposite_remove);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.BEGINNING;
-		this.removeButton.setLayoutData(gridData);
-		this.removeButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				removeSecondaryTable();
-			}
-		});
-		
-		this.pkJoinColumnsComposite = new PrimaryKeyJoinColumnsInSecondaryTableComposite(composite, this.commandStack, getWidgetFactory());
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		this.pkJoinColumnsComposite.getControl().setLayoutData(gridData);
-	}
-	
-	private ListViewer buildSecondaryTablesListViewer(Composite parent) {
-		ListViewer listViewer = new ListViewer(parent, SWT.SINGLE | SWT.BORDER);
-		listViewer.setLabelProvider(buildSecondaryTablesListLabelProvider());
-		listViewer.setContentProvider(buildSecondaryTablesListContentProvider());
-		
-		listViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				updateEnablement();
-				secondaryTablesListSelectionChanged(event);
-			}
-		});
-
-		return listViewer;
-	}
-	
-	protected void secondaryTablesListSelectionChanged(SelectionChangedEvent event) {
-		if (((StructuredSelection) event.getSelection()).isEmpty()) {
-			this.pkJoinColumnsComposite.populate(null);
-			this.pkJoinColumnsComposite.enableWidgets(false);
-		}
-		else {
-			ISecondaryTable selectedSecondaryTable = getSelectedSecondaryTable();
-			this.pkJoinColumnsComposite.populate(selectedSecondaryTable);
-			this.pkJoinColumnsComposite.enableWidgets(true);
-		}
-	}
-
-	private IContentProvider buildSecondaryTablesListContentProvider() {
-		return new IStructuredContentProvider(){
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-				// do nothing
-			}
-		
-			public void dispose() {
-				// do nothing
-			}
-		
-			public Object[] getElements(Object inputElement) {
-				return ((IEntity) inputElement).getSecondaryTables().toArray();
-			}
-		};
-	}
-	
-	private ILabelProvider buildSecondaryTablesListLabelProvider() {
-		return new LabelProvider() {
-			public String getText(Object element) {
-				//TODO display a qualified name instead
-				ISecondaryTable secondaryTable = (ISecondaryTable) element;
-				return secondaryTable.getName();
-			}
-		};
-	}
-	
-	void addSecondaryTable() {
-		SecondaryTableDialog dialog = new SecondaryTableDialog(this.getControl().getShell(), this.entity);
-		addSecondaryTableFromDialog(dialog);
-	}
-	
-	private void addSecondaryTableFromDialog(SecondaryTableDialog dialog) {
-		if (dialog.open() == Window.OK) {
-			int index = this.entity.getSpecifiedSecondaryTables().size();
-			String name = dialog.getSelectedName();
-			String catalog = dialog.getSelectedCatalog();
-			String schema = dialog.getSelectedSchema();
-			ISecondaryTable secondaryTable = this.entity.createSecondaryTable(index);
-			this.entity.getSpecifiedSecondaryTables().add(secondaryTable);
-			secondaryTable.setSpecifiedName(name);
-			secondaryTable.setSpecifiedCatalog(catalog);
-			secondaryTable.setSpecifiedSchema(schema);
-			
-			this.secondaryTablesListViewer.setSelection(new StructuredSelection(secondaryTable));
-		}
-	}
-	
-	void editSecondaryTable() {
-		ISecondaryTable secondaryTable = getSelectedSecondaryTable();
-		SecondaryTableDialog dialog = new SecondaryTableDialog(this.getControl().getShell(), secondaryTable, this.entity);
-		editSecondaryTableFromDialog(dialog, secondaryTable);
-	}
-	
-	private void editSecondaryTableFromDialog(SecondaryTableDialog dialog, ISecondaryTable secondaryTable) {
-		if (dialog.open() == Window.OK) {
-			editSecondaryTableDialogOkd(dialog, secondaryTable);
-		}
-	}
-	
-	private void editSecondaryTableDialogOkd(SecondaryTableDialog dialog, ISecondaryTable secondaryTable) {
-		String name = dialog.getSelectedName();
-		String catalog = dialog.getSelectedCatalog();
-		String schema = dialog.getSelectedSchema();
-
-		if (secondaryTable.getSpecifiedName() == null || !secondaryTable.getSpecifiedName().equals(name)){
-			secondaryTable.setSpecifiedName(name);
-		}
-		
-		if (dialog.isDefaultCatalogSelected()) {
-			if (secondaryTable.getSpecifiedCatalog() != null) {
-				secondaryTable.setSpecifiedCatalog(null);
-			}
-		}
-		else if (secondaryTable.getSpecifiedCatalog() == null || !secondaryTable.getSpecifiedCatalog().equals(catalog)){
-			secondaryTable.setSpecifiedCatalog(catalog);
-		}
-		
-		if (dialog.isDefaultSchemaSelected()) {
-			if (secondaryTable.getSpecifiedSchema() != null) {
-				secondaryTable.setSpecifiedSchema(null);
-			}
-		}
-		else if (secondaryTable.getSpecifiedSchema() == null || !secondaryTable.getSpecifiedSchema().equals(schema)){
-			secondaryTable.setSpecifiedSchema(schema);
-		}
-	}
-
-	private ISecondaryTable getSelectedSecondaryTable() {
-		return (ISecondaryTable) ((StructuredSelection) this.secondaryTablesListViewer.getSelection()).getFirstElement();
-	}
-
-	
-	void removeSecondaryTable() {
-		ISelection selection = this.secondaryTablesListViewer.getSelection();
-		if (selection instanceof StructuredSelection) {
-			for (Iterator<ISecondaryTable> i = ((StructuredSelection) selection).iterator(); i.hasNext(); ) {
-				this.entity.getSpecifiedSecondaryTables().remove(i.next());
-			}
-		}
-	}
-	
-	void updateEnablement() {
-		this.editButton.setEnabled(!((StructuredSelection) this.secondaryTablesListViewer.getSelection()).isEmpty());
-		this.removeButton.setEnabled(!((StructuredSelection) this.secondaryTablesListViewer.getSelection()).isEmpty());
-	}	
-	
-	public void doPopulate(EObject obj) {
-		this.entity = (IEntity) obj;
-		if (this.entity == null) {
-			this.secondaryTablesListViewer.setInput(null);
-			return;
-		}
-		
-		this.secondaryTablesListViewer.setInput(this.entity);
-		if (!this.entity.getSecondaryTables().isEmpty()) {
-			this.secondaryTablesListViewer.setSelection(new StructuredSelection(this.entity.getSecondaryTables().get(0)));
-		}
-		else {
-			this.secondaryTablesListViewer.setSelection(null);			
-		}
-		updateEnablement();
-	}
-
-	@Override
-	protected void doPopulate() {
-	}
-
-	protected void engageListeners() {
-		if (this.entity != null) {
-			this.entity.eAdapters().add(this.entityListener);
-			for (ISecondaryTable secondaryTable : this.entity.getSecondaryTables()) {
-				secondaryTable.eAdapters().add(this.secondaryTableListener);
-			}	
-		}
-	}
-	
-	protected void disengageListeners() {
-		if (this.entity != null) {
-			for (ISecondaryTable secondaryTable : this.entity.getSecondaryTables()) {
-				secondaryTable.eAdapters().remove(this.secondaryTableListener);
-			}
-			this.entity.eAdapters().remove(this.entityListener);
-		}
-	}
-	
-	protected void entityChanged(Notification notification) {
-		if (notification.getFeatureID(IEntity.class) == JpaCoreMappingsPackage.IENTITY__SPECIFIED_SECONDARY_TABLES) {
-			if (notification.getEventType() == Notification.ADD) {
-				((ISecondaryTable) notification.getNewValue()).eAdapters().add(this.secondaryTableListener);
-			}
-			else if (notification.getEventType() == Notification.REMOVE) {
-				((ISecondaryTable) notification.getOldValue()).eAdapters().remove(this.secondaryTableListener);				
-			}
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					secondaryTablesListViewer.refresh();
-					updateEnablement();
-				}
-			});
-		}
-	}
-
-	protected void seoncaryTableChanged(Notification notification) {
-		if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__SPECIFIED_NAME
-			|| notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__SPECIFIED_CATALOG
-			|| notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__SPECIFIED_SCHEMA
-			|| notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__DEFAULT_CATALOG
-			|| notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__DEFAULT_SCHEMA) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					secondaryTablesListViewer.refresh();
-				}
-			});
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SequenceGeneratorComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SequenceGeneratorComposite.java
deleted file mode 100644
index 9be54c3..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/SequenceGeneratorComposite.java
+++ /dev/null
@@ -1,185 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.mappings.IId;
-import org.eclipse.jpt.core.internal.mappings.ISequenceGenerator;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-/**
- * SequenceGeneratorComposite
- */
-public class SequenceGeneratorComposite extends GeneratorComposite<ISequenceGenerator>
-{
-	private CCombo sequenceNameCombo;
-
-	private ModifyListener sequenceNameComboListener;
-
-	private ConnectionProfile connectionProfile;
-
-	public SequenceGeneratorComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, commandStack, widgetFactory);
-	}
-
-	protected ISequenceGenerator createGenerator() {
-		ISequenceGenerator sequenceGenerator = idMapping().createSequenceGenerator();
-		idMapping().setSequenceGenerator(sequenceGenerator);
-		return sequenceGenerator;
-	}
-	
-	protected ISequenceGenerator generator(IId idMapping) {
-		return idMapping.getSequenceGenerator();
-	}
-
-	@Override
-	protected void initializeLayout(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		GridLayout layout = new GridLayout(2, false);
-		composite.setLayout(layout);
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.SequenceGeneratorComposite_name);
-		
-		this.nameTextWidget = buildNameText(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.nameTextWidget.setLayoutData(gridData);
-		helpSystem.setHelp(this.nameTextWidget, IJpaHelpContextIds.MAPPING_SEQUENCE_GENERATOR_NAME);
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.SequenceGeneratorComposite_sequence);
-		
-		this.sequenceNameCombo = buildSequenceNameCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.sequenceNameCombo.setLayoutData(gridData);
-		helpSystem.setHelp(sequenceNameCombo, IJpaHelpContextIds.MAPPING_SEQUENCE_GENERATOR_SEQUENCE);
-	}
-
-	private CCombo buildSequenceNameCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		combo.add(""); //$NON-NLS-1$
-		combo.select(0);
-		combo.addModifyListener(getSequenceNameListener());
-		return combo;
-	}
-
-	private ModifyListener getSequenceNameListener() {
-		if (this.sequenceNameComboListener == null) {
-			this.sequenceNameComboListener = new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					if (isPopulating()) {
-						return;
-					}
-					String text = ((CCombo) e.getSource()).getText();
-					if (text != null && sequenceNameCombo.getItemCount() > 0 && text.equals(sequenceNameCombo.getItem(0))) {
-						text = null;
-					}
-					ISequenceGenerator generator = getGenerator();
-					if (generator == null) {
-						generator = createGenerator();
-					}
-					generator.setSpecifiedSequenceName(text);
-				}
-			};
-		}
-		return this.sequenceNameComboListener;
-	}
-
-	protected void generatorChanged(Notification notification) {
-		super.generatorChanged(notification);
-		if (notification.getFeatureID(ISequenceGenerator.class) == JpaCoreMappingsPackage.ISEQUENCE_GENERATOR__SPECIFIED_SEQUENCE_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					String sequenceName = getGenerator().getSpecifiedSequenceName();
-					if (sequenceName == null) {
-						sequenceNameCombo.select(0);
-					}
-					else if (!sequenceNameCombo.getText().equals(sequenceName)) {
-						sequenceNameCombo.setText(sequenceName);
-					}
-				}
-			});
-		}
-	}
-
-	@Override
-	protected void doPopulate(EObject obj) {
-		super.doPopulate(obj);
-		if (obj == null) {
-			return;
-		}
-		populateSequenceNameCombo();
-	}
-
-	@Override
-	protected void doPopulate() {
-		populateSequenceNameCombo();
-	}
-	
-	private ConnectionProfile getConnectionProfile() {
-		if(this.connectionProfile == null) {
-			IJpaProject jpaProject = getGenerator().getJpaProject();
-			this.connectionProfile = jpaProject.connectionProfile();
-		}
-		return this.connectionProfile;
-	}
-
-	private void populateSequenceNameCombo() {
-		if (this.getGenerator() == null) {
-			return;
-		}
-		this.sequenceNameCombo.setItem(0, JptUiMappingsMessages.SequenceGeneratorComposite_default);
-		if (this.getConnectionProfile().isConnected()) {
-//			this.sequenceNameCombo.remove(1, this.sequenceNameCombo.getItemCount() - 1);
-//			Schema schema = getConnectionProfile().getDatabase().schemaNamed(getGenerator().getJpaProject().getSchemaName());
-//			if (schema != null) {
-//				for (Iterator stream = CollectionTools.sort(schema.sequenceNames()); stream.hasNext();) {
-//					this.sequenceNameCombo.add((String) stream.next());
-//				}
-//			}
-		}
-		String sequenceName = this.getGenerator().getSpecifiedSequenceName();
-		if (sequenceName != null) {
-			if (!this.sequenceNameCombo.getText().equals(sequenceName)) {
-				this.sequenceNameCombo.setText(sequenceName);
-			}
-		}
-		else {
-			this.sequenceNameCombo.select(0);
-		}
-	}
-
-	protected void clear() {
-		super.clear();
-		this.sequenceNameCombo.select(0);
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/StringWithDefaultChooser.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/StringWithDefaultChooser.java
deleted file mode 100644
index 57c7624..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/StringWithDefaultChooser.java
+++ /dev/null
@@ -1,274 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class StringWithDefaultChooser extends BaseJpaController
-{
-	private StringHolder stringHolder;
-	private Adapter stringHolderListener;
-	
-	private CComboViewer comboViewer;
-
-	private static final String DEFAULT = "default";
-	
-	
-	public StringWithDefaultChooser(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildStringHolderListener();
-	}
-	
-	
-	private void buildStringHolderListener() {
-		this.stringHolderListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				stringHolderChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		this.comboViewer = new CComboViewer(combo);
-		this.comboViewer.setContentProvider(buildContentProvider());
-		this.comboViewer.setLabelProvider(buildLabelProvider());
-		
-		this.comboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				StringWithDefaultChooser.this.selectionChanged(event.getSelection());
-			}
-		});
-		
-		combo.addModifyListener(
-			new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					comboModified(e);
-				}
-			});
-	}
-	
-	private IContentProvider buildContentProvider() {
-		return new IStructuredContentProvider(){
-		
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			}
-		
-			public void dispose() {
-			}
-		
-			public Object[] getElements(Object inputElement) {
-				return new String[] {DEFAULT};
-			}
-		};
-	}
-	
-	
-	private IBaseLabelProvider buildLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				if (element == DEFAULT && stringHolder.wrappedObject() != null) {
-					return stringHolder.defaultItem();
-				}
-				return super.getText(element);
-			}
-		};
-	}
-	void selectionChanged(ISelection sel) {
-		if (isPopulating()) {
-			return;
-		}
-		
-		if (sel instanceof IStructuredSelection) {
-			String selection = (String) ((IStructuredSelection) sel).getFirstElement();
-			if (this.comboViewer.getCombo().getSelectionIndex() == 0) {
-				selection = null;
-			}
-			if (this.stringHolder.getString() == null) {
-				if (selection != null) {
-					this.stringHolder.setString(selection);
-				}
-			}
-			else if (!this.stringHolder.getString().equals(selection)) {
-				this.stringHolder.setString(selection);
-			}
-		}
-	}
-	
-	private void comboModified(ModifyEvent e) {
-		if (isPopulating()) {
-			return;
-		}
-		CCombo combo = (CCombo) e.getSource();
-		combo.getSelectionIndex();
-		String text = combo.getText();
-		
-		if (text != null && combo.getItemCount() > 0 && text.equals(combo.getItem(0))) {
-			text = null;
-		}
-		if (this.stringHolder.getString() != text) {
-			this.stringHolder.setString(text);
-		}
-	}
-	
-	private void stringHolderChanged(Notification notification) {
-		if (notification.getFeatureID(this.stringHolder.featureClass()) == 
-				this.stringHolder.featureId()) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						if (getCombo().isDisposed()) {
-							return;
-						}
-						populate();
-					}
-				});
-		}
-		else if (this.stringHolder.supportsDefault()) {
-			if (notification.getFeatureID(this.stringHolder.featureClass()) == 
-				this.stringHolder.defaultFeatureId()) {
-				Display.getDefault().asyncExec(
-					new Runnable() {
-						public void run() {
-							if (getCombo().isDisposed()) {
-								return;
-							}
-							populate();
-						}
-					});
-				
-			}
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.stringHolder != null && this.stringHolder.wrappedObject() != null) {
-			this.stringHolder.wrappedObject().eAdapters().add(this.stringHolderListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.stringHolder != null && this.stringHolder.wrappedObject() != null) {
-			this.stringHolder.wrappedObject().eAdapters().remove(this.stringHolderListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		this.stringHolder = (StringHolder) obj;
-		this.comboViewer.setInput(this.stringHolder);
-		populateCombo();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateCombo();
-	}
-	
-	private void populateCombo() {
-		if (this.stringHolder.wrappedObject() == null) {
-			this.comboViewer.setSelection(StructuredSelection.EMPTY);
-			return;
-		}
-		this.comboViewer.update(this.comboViewer.getElementAt(0), null);
-
-		String string = this.stringHolder.getString();
-		if (string == null) {
-			if (((StructuredSelection) this.comboViewer.getSelection()).getFirstElement() == DEFAULT) {
-				this.comboViewer.refresh();
-			}
-			else {
-				this.comboViewer.setSelection(new StructuredSelection(DEFAULT));
-			}
-		}
-		else {
-			if (!this.comboViewer.getCombo().getText().equals(string)) {
-				this.comboViewer.getCombo().setText(string);
-			}
-		}
-	}
-	
-	public CCombo getCombo() {
-		return this.comboViewer.getCombo();
-	}
-	
-	@Override
-	public Control getControl() {
-		return getCombo();
-	}
-	/**
-	 * An interface to wrap an object that supports a string with a default setting
-	 * An object of this type must be passed in to populate(EObject)
-	 */
-	public static interface StringHolder extends EObject {
-		/**
-		 * Return the string setting from the wrapped object
-		 * @return
-		 */
-		String getString();
-		
-		/**
-		 * Set the string setting on the wrapped object
-		 * @param string
-		 */
-		void setString(String string);
-		
-		/**
-		 * Return the Class of the wrapped object
-		 * @return
-		 */
-		Class featureClass();
-		
-		/**
-		 * Return the feature id of string setting on the wrapped object
-		 * @return
-		 */
-		int featureId();
-		
-		boolean supportsDefault();
-		
-		int defaultFeatureId();
-		
-		/**
-		 * The wrapped EObject that the enum setting is stored on
-		 * @return
-		 */
-		EObject wrappedObject();
-		
-		String defaultItem();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TableCombo.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TableCombo.java
deleted file mode 100644
index 3304743..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TableCombo.java
+++ /dev/null
@@ -1,338 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.ITable;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.db.internal.Connection;
-import org.eclipse.jpt.db.internal.ConnectionListener;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class TableCombo extends BaseJpaController
-{
-	private ITable table;
-
-	private Adapter listener;
-
-	/**
-	 * Caching the connectionProfile so we can remove the listener. If the
-	 * cached table object has been removed from the model then we no longer
-	 * have access to parent and cannot find the connectionProfile
-	 */
-	private ConnectionProfile connectionProfile;
-
-	private ConnectionListener connectionListener;
-
-	private CCombo combo;
-
-	public TableCombo(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		this.listener = buildTableListener();
-		this.connectionListener = buildConnectionListener();
-	}
-
-	private Adapter buildTableListener() {
-		return new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				tableChanged(notification);
-			}
-		};
-	}
-
-	private ConnectionListener buildConnectionListener() {
-		return new ConnectionListener() {
-			public void aboutToClose(Connection connection) {
-			// not interested to this event.
-			}
-
-			public void closed(Connection connection) {
-				getCombo().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						TableCombo.this.populateTableCombo();
-					}
-				});
-			}
-
-			public void modified(Connection connection) {
-				getCombo().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						TableCombo.this.populateTableCombo();
-					}
-				});
-			}
-
-			public boolean okToClose(Connection connection) {
-				// not interested to this event.
-				return true;
-			}
-
-			public void opened(Connection connection) {
-				getCombo().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						TableCombo.this.populateTableCombo();
-					}
-				});
-			}
-
-			public void databaseChanged(Connection connection, final Database database) {
-				getControl().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (database == TableCombo.this.getDatabase()) {
-							if (!getControl().isDisposed()) {
-								TableCombo.this.populateTableCombo();
-							}
-						}
-					}
-				});
-			}
-
-			public void schemaChanged(Connection connection, final Schema schema) {
-				getControl().getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						if (schema == TableCombo.this.getTableSchema()) {
-							if (!getControl().isDisposed()) {
-								TableCombo.this.populateTableCombo();
-							}
-						}
-					}
-				});
-			}
-
-			public void tableChanged(Connection connection, final Table table) {
-			// not interested to this event.
-			}
-		};
-	}
-
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		this.combo.add(JptUiMappingsMessages.TableComposite_defaultEmpty);
-		this.combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String tableText = ((CCombo) e.getSource()).getText();
-				if (tableText.equals("")) { //$NON-NLS-1$
-					tableText = null;
-					if (table.getSpecifiedName() == null || table.getSpecifiedName().equals("")) { //$NON-NLS-1$
-						return;
-					}
-				}
-				if (tableText != null && combo.getItemCount() > 0 && tableText.equals(combo.getItem(0))) {
-					tableText = null;
-				}
-				if (table.getSpecifiedName() == null && tableText != null) {
-					table.setSpecifiedName(tableText);
-				}
-				if (table.getSpecifiedName() != null && !table.getSpecifiedName().equals(tableText)) {
-					table.setSpecifiedName(tableText);
-				}
-			}
-		});
-	}
-
-	protected void tableChanged(Notification notification) {
-		if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__SPECIFIED_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateTableName();
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__DEFAULT_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateDefaultTableName();
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__DEFAULT_SCHEMA) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateTableCombo();
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITable.class) == JpaCoreMappingsPackage.ITABLE__SPECIFIED_SCHEMA) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populateTableCombo();
-				}
-			});
-		}
-	}
-
-	public void doPopulate(EObject obj) {
-		this.table = (ITable) obj;
-		if (this.table != null) {
-			populateTableCombo();
-		}
-		else {
-			this.connectionProfile = null;
-		}
-	}
-
-	public void doPopulate() {
-		if (this.table != null) {
-			populateTableCombo();
-		}
-	}
-
-	protected Database getDatabase() {
-		return getConnectionProfile().getDatabase();
-	}
-
-	protected Schema getTableSchema() {
-		return getConnectionProfile().getDatabase().schemaNamed(table.getSchema());
-	}
-
-	private ConnectionProfile getConnectionProfile() {
-		if (this.connectionProfile == null) {
-			this.connectionProfile = this.table.getJpaProject().connectionProfile();
-		}
-		return this.connectionProfile;
-	}
-
-	private void populateTableCombo() {
-		if (this.table == null) {
-			return;
-		}
-		// TODO don't do instanceof check here - check on Table, or isRoot check
-		// on Entity
-		// this.tableCombo.setEnabled(!(this.table instanceof
-		// SingleTableInheritanceChildTableImpl));
-		populateDefaultTableName();
-		if (getConnectionProfile().isConnected()) {
-			this.combo.remove(1, this.combo.getItemCount() - 1);
-			Schema schema = this.getTableSchema();
-			if (schema != null) {
-				Iterator<String> tables = schema.tableNames();
-				for (Iterator<String> stream = CollectionTools.sort(tables); stream.hasNext();) {
-					this.combo.add(stream.next());
-				}
-			}
-		}
-		else {
-			this.combo.remove(1, this.combo.getItemCount() - 1);
-		}
-		populateTableName();
-	}
-
-	protected void populateDefaultTableName() {
-		if (this.table == null) {
-			return;
-		}
-		String defaultTableName = table.getDefaultName();
-		int selectionIndex = combo.getSelectionIndex();
-		combo.setItem(0, NLS.bind(JptUiMappingsMessages.TableComposite_defaultWithOneParam, defaultTableName));
-		if (selectionIndex == 0) {
-			// combo text does not update when switching between 2 mappings of
-			// the same type
-			// that both have a default column name. clear the selection and
-			// then set it again
-			combo.clearSelection();
-			combo.select(0);
-		}
-	}
-
-	protected void populateTableName() {
-		if (this.table == null) {
-			return;
-		}
-		String tableName = this.table.getSpecifiedName();
-		String defaultTableName = this.table.getDefaultName();
-		if (tableName != null) {
-			if (!this.combo.getText().equals(tableName)) {
-				this.combo.setText(tableName);
-			}
-		}
-		else {
-			if (!this.combo.getText().equals(NLS.bind(JptUiMappingsMessages.TableComposite_defaultWithOneParam, defaultTableName))) {
-				this.combo.select(0);
-			}
-		}
-	}
-
-	public CCombo getCombo() {
-		return this.combo;
-	}
-
-	@Override
-	public Control getControl() {
-		return getCombo();
-	}
-
-	@Override
-	protected void disengageListeners() {
-		if (this.table != null) {
-			this.removeConnectionListener();
-			this.table.eAdapters().remove(this.listener);
-		}
-	}
-
-	@Override
-	protected void engageListeners() {
-		if (this.table != null) {
-			this.table.eAdapters().add(this.listener);
-			this.addConnectionListener();
-		}
-	}
-
-	private void addConnectionListener() {
-		this.getConnectionProfile().addConnectionListener(this.connectionListener);
-	}
-
-	private void removeConnectionListener() {
-		this.getConnectionProfile().removeConnectionListener(this.connectionListener);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TableComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TableComposite.java
deleted file mode 100644
index cc6f99a..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TableComposite.java
+++ /dev/null
@@ -1,129 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.mappings.ITable;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-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.swt.widgets.Group;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-//TODO repopulate this panel based on the Entity table changing
-public class TableComposite extends BaseJpaComposite
-{
-	private ITable table;
-	
-	protected TableCombo tableCombo;
-	
-	protected CatalogCombo catalogCombo;
-	protected SchemaCombo schemaCombo;
-	
-	public TableComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;		
-		composite.setLayout(layout);	
-		
-		Group columnGroup = getWidgetFactory().createGroup(composite, JptUiMappingsMessages.TableComposite_tableSection);
-		layout = new GridLayout();
-		layout.marginHeight = 0;				
-		columnGroup.setLayout(layout);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace= true;
-		columnGroup.setLayoutData(gridData);
-
-		//created this composite because combos as direct children of a Group do not have a border, no clue why
-		Composite intermediaryComposite = getWidgetFactory().createComposite(columnGroup);
-		layout = new GridLayout(2, false);
-		layout.marginWidth = 0;		
-		intermediaryComposite.setLayout(layout);
-		
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace= true;
-		intermediaryComposite.setLayoutData(gridData);
-		
-		CommonWidgets.buildTableLabel(intermediaryComposite, getWidgetFactory());
-		
-		this.tableCombo = new TableCombo(intermediaryComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.tableCombo.getCombo().setLayoutData(gridData);
-		helpSystem.setHelp(tableCombo.getCombo(), IJpaHelpContextIds.ENTITY_TABLE);
-
-		CommonWidgets.buildCatalogLabel(intermediaryComposite, getWidgetFactory());
-		this.catalogCombo = new CatalogCombo(intermediaryComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.catalogCombo.getCombo().setLayoutData(gridData);
-		helpSystem.setHelp(catalogCombo.getCombo(), IJpaHelpContextIds.ENTITY_CATALOG);
-	
-		CommonWidgets.buildSchemaLabel(intermediaryComposite, getWidgetFactory());
-		this.schemaCombo = new SchemaCombo(intermediaryComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.schemaCombo.getCombo().setLayoutData(gridData);
-		helpSystem.setHelp(schemaCombo.getCombo(), IJpaHelpContextIds.ENTITY_SCHEMA);
-	}
-	
-	@Override
-	protected void engageListeners() {
-	}
-
-	@Override
-	protected void disengageListeners() {
-	}
-	
-	public void doPopulate(EObject obj) {
-		this.table = (ITable) obj;
-		this.tableCombo.populate(this.table);
-		this.catalogCombo.populate(this.table);
-		this.schemaCombo.populate(this.table);
-	}
-	
-	public void doPopulate() {
-		this.tableCombo.populate();
-		this.catalogCombo.populate();
-		this.schemaCombo.populate();
-	}
-	
-	@Override
-	public void dispose() {
-		this.catalogCombo.dispose();
-		this.schemaCombo.dispose();
-		this.tableCombo.dispose();
-		super.dispose();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TableGeneratorComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TableGeneratorComposite.java
deleted file mode 100644
index 4c2f937..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TableGeneratorComposite.java
+++ /dev/null
@@ -1,535 +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.internal.mappings.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.mappings.IId;
-import org.eclipse.jpt.core.internal.mappings.ITableGenerator;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.db.internal.Connection;
-import org.eclipse.jpt.db.internal.ConnectionListener;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class TableGeneratorComposite extends GeneratorComposite<ITableGenerator>
-{
-	private CCombo tableNameCombo;
-	private CCombo pkColumnNameCombo;
-	private CCombo valueColumnNameCombo;
-	private CCombo pkColumnValueCombo;
-
-	private ConnectionListener connectionListener;
-
-	private ConnectionProfile connectionProfile;
-
-	public TableGeneratorComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, commandStack, widgetFactory);
-		this.connectionListener = this.buildConnectionListener();
-	}
-	
-	protected ITableGenerator createGenerator() {
-		ITableGenerator tableGenerator = idMapping().createTableGenerator();
-		idMapping().setTableGenerator(tableGenerator);
-		return tableGenerator;
-	}
-	
-	protected ITableGenerator generator(IId idMapping) {
-		return idMapping.getTableGenerator();
-	}
-
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		composite.setLayout(layout);
-		
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.TableGeneratorComposite_name);
-		
-		this.nameTextWidget = buildNameText(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.nameTextWidget.setLayoutData(gridData);
-		helpSystem.setHelp(this.nameTextWidget, IJpaHelpContextIds.MAPPING_TABLE_GENERATOR_NAME);
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.TableGeneratorComposite_table);
-		
-		this.tableNameCombo = buildTableNameCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.tableNameCombo.setLayoutData(gridData);
-		helpSystem.setHelp(this.tableNameCombo, IJpaHelpContextIds.MAPPING_TABLE_GENERATOR_TABLE);
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.TableGeneratorComposite_pkColumn);
-		
-		this.pkColumnNameCombo = buildPkColumnNameCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.pkColumnNameCombo.setLayoutData(gridData);
-		helpSystem.setHelp(this.pkColumnNameCombo, IJpaHelpContextIds.MAPPING_TABLE_GENERATOR_PRIMARY_KEY_COLUMN);
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.TableGeneratorComposite_valueColumn);
-		
-		this.valueColumnNameCombo = buildValueColumnNameCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.valueColumnNameCombo.setLayoutData(gridData);
-		helpSystem.setHelp(this.valueColumnNameCombo, IJpaHelpContextIds.MAPPING_TABLE_GENERATOR_VALUE_COLUMN);
-		
-		getWidgetFactory().createLabel(composite, JptUiMappingsMessages.TableGeneratorComposite_pkColumnValue);
-		
-		this.pkColumnValueCombo = buildPkColumnValueCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.pkColumnValueCombo.setLayoutData(gridData);
-		helpSystem.setHelp(this.pkColumnValueCombo, IJpaHelpContextIds.MAPPING_TABLE_GENERATOR_PRIMARY_KEY_COLUMN_VALUE);
-	}
-
-	private CCombo buildTableNameCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		combo.add(JptUiMappingsMessages.TableGeneratorComposite_default);
-		combo.select(0);
-		combo.addModifyListener(buildTableNameListener());
-		return combo;
-	}
-
-	private CCombo buildPkColumnNameCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		combo.add(JptUiMappingsMessages.TableGeneratorComposite_default);
-		combo.select(0);
-		combo.addModifyListener(buildPkColumnNameListener());
-		return combo;
-	}
-
-	private CCombo buildValueColumnNameCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		combo.add(JptUiMappingsMessages.TableGeneratorComposite_default);
-		combo.select(0);
-		combo.addModifyListener(buildValueColumnNameListener());
-		return combo;
-	}
-
-	private CCombo buildPkColumnValueCombo(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		combo.add(JptUiMappingsMessages.TableGeneratorComposite_default);
-		combo.select(0);
-		combo.addModifyListener(buildPkColumnValueListener());
-		return combo;
-	}
-
-	private ModifyListener buildTableNameListener() {
-		return new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String text = ((CCombo) e.getSource()).getText();
-				if (text != null && tableNameCombo.getItemCount() > 0 && text.equals(tableNameCombo.getItem(0))) {
-					text = null;
-				}
-				ITableGenerator generator = getGenerator();
-				if (generator == null) {
-					generator = createGenerator();
-				}
-				generator.setSpecifiedTable(text);
-			}
-		};
-	}
-
-	private ModifyListener buildPkColumnNameListener() {
-		return new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String text = ((CCombo) e.getSource()).getText();
-				if (text != null && pkColumnNameCombo.getItemCount() > 0 && text.equals(pkColumnNameCombo.getItem(0))) {
-					text = null;
-				}
-				ITableGenerator generator = getGenerator();
-				if (generator == null) {
-					generator = createGenerator();
-				}
-				generator.setSpecifiedPkColumnName(text);
-			}
-		};
-	}
-
-	private ModifyListener buildValueColumnNameListener() {
-		return new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String text = ((CCombo) e.getSource()).getText();
-				if (text != null && valueColumnNameCombo.getItemCount() > 0 && text.equals(valueColumnNameCombo.getItem(0))) {
-					text = null;
-				}
-				ITableGenerator generator = getGenerator();
-				if (generator == null) {
-					generator = createGenerator();
-				}
-				generator.setSpecifiedValueColumnName(text);
-			}
-		};
-	}
-
-	private ModifyListener buildPkColumnValueListener() {
-		return new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String text = ((CCombo) e.getSource()).getText();
-				if (text != null && pkColumnValueCombo.getItemCount() > 0 && text.equals(pkColumnValueCombo.getItem(0))) {
-					text = null;
-				}
-				ITableGenerator generator = getGenerator();
-				if (generator == null) {
-					generator = createGenerator();
-				}
-				generator.setSpecifiedPkColumnValue(text);
-			}
-		};
-	}
-
-	protected void generatorChanged(Notification notification) {
-		super.generatorChanged(notification);
-		if (notification.getFeatureID(ITableGenerator.class) == JpaCoreMappingsPackage.ITABLE_GENERATOR__SPECIFIED_TABLE) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					String tableName = getGenerator().getSpecifiedTable();
-					if (tableName == null) {
-						tableNameCombo.select(0);
-					}
-					else if (!tableNameCombo.getText().equals(tableName)) {
-						tableNameCombo.setText(tableName);
-					}
-					populatePkColumnNameCombo();
-					populateValueColumnNameCombo();
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITableGenerator.class) == JpaCoreMappingsPackage.ITABLE_GENERATOR__SPECIFIED_PK_COLUMN_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					populatePkColumnName();
-
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITableGenerator.class) == JpaCoreMappingsPackage.ITABLE_GENERATOR__SPECIFIED_VALUE_COLUMN_NAME) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					String columnName = getGenerator().getSpecifiedValueColumnName();
-					if (columnName == null) {
-						valueColumnNameCombo.select(0);
-					}
-					else if (!valueColumnNameCombo.getText().equals(columnName)) {
-						valueColumnNameCombo.setText(columnName);
-					}
-				}
-			});
-		}
-		else if (notification.getFeatureID(ITableGenerator.class) == JpaCoreMappingsPackage.ITABLE_GENERATOR__SPECIFIED_PK_COLUMN_VALUE) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (getControl().isDisposed()) {
-						return;
-					}
-					String columnValue = getGenerator().getSpecifiedPkColumnValue();
-					if (columnValue == null) {
-						pkColumnValueCombo.select(0);
-					}
-					else if (!pkColumnValueCombo.getText().equals(columnValue)) {
-						pkColumnValueCombo.setText(columnValue);
-					}
-				}
-			});
-		}
-	}
-
-	@Override
-	protected void doPopulate(EObject obj) {
-		super.doPopulate(obj);
-		if (obj == null) {
-			this.connectionProfile = null;
-			return;
-		}
-		populateTableNameCombo();
-		populatePkColumnNameCombo();
-		populateValueColumnNameCombo();
-		populatePkColumnValueCombo();
-	}
-
-	@Override
-	protected void doPopulate() {
-		super.doPopulate();
-		populateTableNameCombo();
-		populatePkColumnNameCombo();
-		populateValueColumnNameCombo();
-		populatePkColumnValueCombo();
-	}
-	
-	@Override
-	protected void engageListeners() {
-		super.engageListeners();
-		if (getGenerator() != null) {
-			addConnectionListener();
-		}
-	}
-
-	@Override
-	protected void disengageListeners() {
-		if (getGenerator() != null) {
-			removeConnectionListener();
-		}
-		super.disengageListeners();
-	}
-	
-	private ConnectionProfile getConnectionProfile() {
-		if(this.connectionProfile == null) {
-			IJpaProject jpaProject = idMapping().getJpaProject();
-			this.connectionProfile = jpaProject.connectionProfile();
-		}
-		return this.connectionProfile;
-	}
-	
-
-	private void addConnectionListener() {
-		this.getConnectionProfile().addConnectionListener(this.connectionListener);
-	}
-	
-	private void removeConnectionListener() {
-		this.getConnectionProfile().removeConnectionListener(this.connectionListener);
-	}
-
-	protected Schema getSchema() {
-		if (getGenerator() != null) {
-			return this.getConnectionProfile().getDatabase().schemaNamed(getGenerator().getSchema());
-		}
-		return null;
-	}
-	private void populateTableNameCombo() {
-		if (this.getGenerator() == null) {
-			return;
-		}
-		if (this.getConnectionProfile().isConnected()) {
-			this.tableNameCombo.remove(1, this.tableNameCombo.getItemCount()-1);
-			Schema schema = this.getSchema();
-			if (schema != null) {
-				Iterator<String> tables = schema.tableNames();
-				for (Iterator<String> stream = CollectionTools.sort(tables); stream.hasNext(); ) {
-					this.tableNameCombo.add(stream.next());
-				}
-			}
-		}
-		String tableName = this.getGenerator().getSpecifiedTable();
-		if (tableName != null) {
-			if (!this.tableNameCombo.getText().equals(tableName)) {
-				this.tableNameCombo.setText(tableName);
-			}
-		}
-		else {
-			this.tableNameCombo.select(0);
-		}
-	}
-
-	private void populatePkColumnNameCombo() {
-		if (this.getGenerator() == null) {
-			return;
-		}
-		populatePkColumnChoices();
-		populatePkColumnName();
-	}
-	private void populatePkColumnChoices() {
-		this.pkColumnNameCombo.remove(1, this.pkColumnNameCombo.getItemCount() - 1);
-		
-		if (this.getConnectionProfile().isConnected()) {
-			if (!this.tableNameCombo.getText().equals(JptUiMappingsMessages.TableGeneratorComposite_default)) { // hmm,
-				// if
-				// they
-				// actually
-				// set
-				// the
-				// table
-				// to
-				// Default??
-				String tableName = this.tableNameCombo.getText();
-				Schema schema = getSchema();
-				if (schema != null) {
-					Table table = schema.tableNamed(tableName);
-					if (table != null) {
-						for (Iterator<String> stream = CollectionTools.sort(table.columnNames()); stream.hasNext();) {
-							this.pkColumnNameCombo.add(stream.next());
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	private void populatePkColumnName() {
-		String pkColumnName = this.getGenerator().getSpecifiedPkColumnName();
-		if (pkColumnName != null) {
-			if (!this.pkColumnNameCombo.getText().equals(pkColumnName)) {
-				this.pkColumnNameCombo.setText(pkColumnName);
-			}
-		}
-		else {
-			this.pkColumnNameCombo.select(0);
-		}
-	}
-
-	private void populateValueColumnNameCombo() {
-		if (this.getGenerator() == null) {
-			return;
-		}
-		if (this.getConnectionProfile().isConnected()) {
-			this.valueColumnNameCombo.remove(1, this.valueColumnNameCombo.getItemCount() - 1);
-			if (!this.tableNameCombo.getText().equals(JptUiMappingsMessages.TableGeneratorComposite_default)) { // hmm,
-				// if
-				// they
-				// actually
-				// set
-				// the
-				// table
-				// to
-				// Default??
-				String tableName = this.tableNameCombo.getText();
-				Schema schema = getSchema();
-				if (schema != null) {
-					Table table = schema.tableNamed(tableName);
-					if (table != null) {
-						for (Iterator<String> stream = CollectionTools.sort(table.columnNames()); stream.hasNext();) {
-							this.valueColumnNameCombo.add(stream.next());
-						}
-					}
-				}
-			}
-		}
-		String valueColumnName = this.getGenerator().getSpecifiedValueColumnName();
-		if (valueColumnName != null) {
-			if (!this.valueColumnNameCombo.getText().equals(valueColumnName)) {
-				this.valueColumnNameCombo.setText(valueColumnName);
-			}
-		}
-		else {
-			this.valueColumnNameCombo.select(0);
-		}
-	}
-
-	private void populatePkColumnValueCombo() {
-		if (this.getGenerator() == null) {
-			return;
-		}
-		String pkColumnValue = this.getGenerator().getSpecifiedPkColumnValue();
-		if (pkColumnValue != null) {
-			if (!this.pkColumnValueCombo.getText().equals(pkColumnValue)) {
-				this.pkColumnValueCombo.setText(pkColumnValue);
-			}
-		}
-		else {
-			this.pkColumnValueCombo.select(0);
-		}
-	}
-
-	protected void clear() {
-		super.clear();
-		this.tableNameCombo.select(0);
-		this.pkColumnNameCombo.select(0);
-		this.pkColumnValueCombo.select(0);
-		this.valueColumnNameCombo.select(0);
-	}
-	
-	private ConnectionListener buildConnectionListener() {
-		return new ConnectionListener() {
-			public void closed(Connection connection) {
-				populate();
-			}
-			
-			public void modified(Connection connection) {
-				populate();
-			}
-
-			public void opened(Connection connection) {
-				populate();
-			}
-
-			public void databaseChanged(Connection connection, final Database database) {
-				populate();
-			}
-			
-			public void schemaChanged(Connection connection, final Schema schema) {
-				populate();
-			}
-
-			private void populate() {
-				getControl().getDisplay().asyncExec( new Runnable() {
-					public void run() {
-						if (getControl().isDisposed()) {
-							return;
-						}
-						populateTableNameCombo();
-						populatePkColumnChoices();
-						populateValueColumnNameCombo();
-					}
-				});
-			}
-			
-			public void aboutToClose(Connection connection) {
-				// not interested to this event.
-			}
-			
-			public boolean okToClose(Connection connection) {
-				// not interested to this event.
-				return true;
-			}
-			
-			public void tableChanged(Connection connection, final Table table) {
-				// not interested to this event.
-			}
-		};
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TargetEntityChooser.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TargetEntityChooser.java
deleted file mode 100644
index dd5e76a..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TargetEntityChooser.java
+++ /dev/null
@@ -1,223 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.mappings.IRelationshipMapping;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-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.ui.PlatformUI;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class TargetEntityChooser extends BaseJpaController
-{
-	private IRelationshipMapping relationshipMapping;
-	private Adapter relationshipMappingListener;
-	
-	protected CCombo targetEntityCombo;
-
-	
-	private Composite composite;
-	
-	public TargetEntityChooser(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildRelationshipMappingListener();
-	}
-	
-	
-	private void buildRelationshipMappingListener() {
-		relationshipMappingListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				relationshipMappingChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.composite = getWidgetFactory().createComposite(parent);
-	    GridLayout gridLayout = new GridLayout();
-	    gridLayout.marginHeight = 0;
-	    gridLayout.marginWidth = 0;
-	    gridLayout.numColumns = 3;
-	    this.composite.setLayout(gridLayout);
-		
-		CommonWidgets.buildTargetEntityLabel(this.composite, getWidgetFactory());
-		
-		this.targetEntityCombo = buildTargetEntityCombo(this.composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		this.targetEntityCombo.setLayoutData(gridData);
-
-		buildTargetEntitySelectionButton(this.composite);
-
-	}
-	
-	protected CCombo buildTargetEntityCombo(Composite parent) {
-		final CCombo combo = getWidgetFactory().createCCombo(parent, SWT.FLAT);
-		combo.add(JptUiMappingsMessages.TargetEntityChooser_defaultEmpty);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(combo, IJpaHelpContextIds.MAPPING_TARGET_ENTITY);
-		combo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (isPopulating()) {
-					return;
-				}
-				String targetEntityName = ((CCombo) e.getSource()).getText();
-				if (targetEntityName.equals(combo.getItem(0)) || targetEntityName.equals("")) { //$NON-NLS-1$
-					targetEntityName = null;
-				}
-				else if (!relationshipMapping.targetEntityIsValid(targetEntityName)) {
-					return;
-				}
-				relationshipMapping.setSpecifiedTargetEntity(targetEntityName);
-			}
-		});
-		return combo;
-	}
-
-
-	private void relationshipMappingChanged(Notification notification) {
-		if (notification.getFeatureID(IRelationshipMapping.class) == 
-				JpaCoreMappingsPackage.IRELATIONSHIP_MAPPING__SPECIFIED_TARGET_ENTITY) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-		else if (notification.getFeatureID(IRelationshipMapping.class) == 
-			JpaCoreMappingsPackage.IRELATIONSHIP_MAPPING__DEFAULT_TARGET_ENTITY) {
-		Display.getDefault().asyncExec(
-			new Runnable() {
-				public void run() {
-					populate();
-				}
-			});
-	}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (relationshipMapping != null) {
-			relationshipMapping.eAdapters().add(relationshipMappingListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.relationshipMapping != null) {
-			this.relationshipMapping.eAdapters().remove(relationshipMappingListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		this.relationshipMapping = (IRelationshipMapping) obj;
-		populateCombo();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateCombo();
-	}
-	
-	private void populateCombo() {
-		if (relationshipMapping == null) {
-			targetEntityCombo.clearSelection();
-			return;
-		}
-		String targetEntity = this.relationshipMapping.getSpecifiedTargetEntity();
-		this.targetEntityCombo.setItem(0, NLS.bind(JptUiMappingsMessages.TargetEntityChooser_defaultWithOneParam, this.relationshipMapping.getDefaultTargetEntity()));
-		if (targetEntity != null) {
-			if (!this.targetEntityCombo.getText().equals(targetEntity)) {
-				this.targetEntityCombo.setText(targetEntity);
-			}
-		}
-		else {
-			if (this.targetEntityCombo.getSelectionIndex() != 0) {
-				this.targetEntityCombo.select(0);
-			}
-		}
-	}
-	
-	@Override
-	public Control getControl() {
-		return this.composite;
-	}	
-	
-	//see  org.eclipse.pde.internal.ui.editor.plugin.rows.ClassAttributeRow
-	//for example of the hyperlink opening a resource
-	protected Button buildTargetEntitySelectionButton(Composite parent) {
-		Button button = new Button(parent, SWT.PUSH);
-		button.setText(JptUiMappingsMessages.TargetEntityChooser_browse);
-		button.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				browse();
-			}
-		});
-		return button;
-	}
-	
-	protected void browse() {
-		BusyIndicator.showWhile(this.targetEntityCombo.getDisplay(), new Runnable() {
-			public void run() {
-				doOpenSelectionDialog();
-			}
-		});
-	}
-
-	private void doOpenSelectionDialog() {
-		SelectionDialog dialog;
-		try {
-			dialog = JavaUI.createTypeDialog(getControl().getShell(),
-					PlatformUI.getWorkbench().getProgressService(),
-					SearchEngine.createWorkspaceScope(),
-					IJavaElementSearchConstants.CONSIDER_ALL_TYPES, 
-			        false,
-					""); //$NON-NLS-1$
-		}
-		catch (JavaModelException e) {
-			throw new RuntimeException(e);
-		} 
-		dialog.setTitle("Select Type"); //$NON-NLS-1$
-		if (dialog.open() == Window.OK) {
-			IType type = (IType) dialog.getResult()[0];
-			this.targetEntityCombo.setText(type.getFullyQualifiedName('$'));
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TransientComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TransientComposite.java
deleted file mode 100644
index 3871e8a..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/TransientComposite.java
+++ /dev/null
@@ -1,43 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class TransientComposite extends BaseJpaComposite 
-{
-	public TransientComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-
-	}
-	
-	
-	public void doPopulate(EObject obj) {
-	}
-	
-	public void doPopulate() {
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/VersionComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/VersionComposite.java
deleted file mode 100644
index fe7fb65..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/VersionComposite.java
+++ /dev/null
@@ -1,165 +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.internal.mappings.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.jpt.core.internal.mappings.IBasic;
-import org.eclipse.jpt.core.internal.mappings.IVersion;
-import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
-import org.eclipse.jpt.core.internal.mappings.TemporalType;
-import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
-import org.eclipse.jpt.ui.internal.mappings.details.EnumComboViewer.EnumHolder;
-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.swt.widgets.Control;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class VersionComposite extends BaseJpaComposite 
-{
-	private IVersion version;
-	
-	private ColumnComposite columnComposite;
-
-	private EnumComboViewer temporalTypeViewer;
-	
-
-	public VersionComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, SWT.NULL, commandStack, widgetFactory);
-	}
-	@Override
-	protected void initializeLayout(Composite composite) {
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		composite.setLayout(layout);
-		
-		Control generalControl = buildGeneralComposite(composite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		generalControl.setLayoutData(gridData);
-
-	}
-	
-	private Control buildGeneralComposite(Composite composite) {
-//		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		
-		Composite generalComposite = getWidgetFactory().createComposite(composite);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		generalComposite.setLayout(layout);	
-
-		this.columnComposite = new ColumnComposite(generalComposite, this.commandStack, getWidgetFactory());
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.columnComposite.getControl().setLayoutData(gridData);		
-		
-		CommonWidgets.buildTemporalLabel(generalComposite, getWidgetFactory());
-		this.temporalTypeViewer = CommonWidgets.buildEnumComboViewer(generalComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.temporalTypeViewer.getControl().setLayoutData(gridData);
-
-		return generalComposite;
-	}
-	
-	public void doPopulate(EObject obj) {
-		this.version = (IVersion) obj;
-		if (this.version != null) {
-			this.columnComposite.populate(this.version.getColumn());
-		}
-		else {
-			this.columnComposite.populate(null);
-		}
-		this.temporalTypeViewer.populate(new TemporalTypeHolder(this.version));
-	}
-	
-	public void doPopulate() {
-		this.columnComposite.populate();
-		this.temporalTypeViewer.populate();
-	}
-	
-	protected void engageListeners() {
-	}
-	
-	protected void disengageListeners() {
-	}
-	
-	@Override
-	public void dispose() {
-		this.columnComposite.dispose();
-		this.temporalTypeViewer.dispose();
-		super.dispose();
-	}
-	
-	protected IVersion getVersion() {
-		return this.version;
-	}
-	
-
-
-	
-	private class TemporalTypeHolder extends EObjectImpl implements EnumHolder {
-		
-		private IVersion version;
-		
-		TemporalTypeHolder(IVersion version) {
-			super();
-			this.version = version;
-		}
-		
-		public Object get() {
-			return this.version.getTemporal();
-		}
-		
-		public void set(Object enumSetting) {
-			this.version.setTemporal((TemporalType) enumSetting);
-		}
-		
-		public Class featureClass() {
-			return IBasic.class;
-		}
-		
-		public int featureId() {
-			return JpaCoreMappingsPackage.IVERSION__TEMPORAL;
-		}
-		
-		public EObject wrappedObject() {
-			return this.version;
-		}
-		
-		public Object[] enumValues() {
-			return TemporalType.VALUES.toArray();
-		}
-		
-		/**
-		 * TemporalType has no Default, return null
-		 */
-		public Object defaultValue() {
-			return null;
-		}
-		
-		/**
-		 * TemporalType has no Default, return null
-		 */
-		public String defaultString() {
-			return null;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/perspective/JpaPerspectiveFactory.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/perspective/JpaPerspectiveFactory.java
deleted file mode 100644
index fa41ccf..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/perspective/JpaPerspectiveFactory.java
+++ /dev/null
@@ -1,77 +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.internal.perspective;
-
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.ui.IFolderLayout;
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-import org.eclipse.ui.progress.IProgressConstants;
-
-public class JpaPerspectiveFactory implements IPerspectiveFactory {
-
-	public void createInitialLayout(IPageLayout layout) {
-		String editorArea = layout.getEditorArea();
-
-		//Package area
-		IFolderLayout folder = layout.createFolder(
-				"left", IPageLayout.LEFT, (float) 0.25, editorArea); //$NON-NLS-1$
-		folder.addView(JavaUI.ID_PACKAGES);
-		folder.addPlaceholder(JavaUI.ID_TYPE_HIERARCHY);
-		folder.addPlaceholder(IPageLayout.ID_RES_NAV);
-
-		//Database Explorer area
-		layout.addView("org.eclipse.datatools.connectivity.DataSourceExplorerNavigator", //$NON-NLS-1$
-			IPageLayout.BOTTOM, (float) 0.60, JavaUI.ID_PACKAGES);
-
-		//Problems/Console area
-		IFolderLayout outputFolder = layout.createFolder(
-				"bottom", IPageLayout.BOTTOM, (float) 0.60, editorArea); //$NON-NLS-1$
-		outputFolder.addView(IPageLayout.ID_PROBLEM_VIEW);
-		outputFolder.addPlaceholder(IPageLayout.ID_BOOKMARKS);
-		outputFolder.addPlaceholder(IProgressConstants.PROGRESS_VIEW_ID);
-
-		//JPA Details (Split with Problems/Console area)
-		layout.addView("org.eclipse.jpt.ui.jpaDetailsView",
-				IPageLayout.RIGHT, (float) .60, "bottom");
-		
-		//JPA Structure area
-		IFolderLayout outlineFolder = layout.createFolder(
-				"right", IPageLayout.RIGHT, (float) 0.75, editorArea); //$NON-NLS-1$
-		outlineFolder.addView("org.eclipse.jpt.ui.jpaStructureView");
-		outlineFolder.addView(IPageLayout.ID_OUTLINE);
-
-		layout.addActionSet(JavaUI.ID_ACTION_SET);
-		layout.addActionSet(JavaUI.ID_ELEMENT_CREATION_ACTION_SET);
-		layout.addActionSet(IPageLayout.ID_NAVIGATE_ACTION_SET);
-
-		// views - java
-		layout.addShowViewShortcut(JavaUI.ID_PACKAGES);
-		layout.addShowViewShortcut(JavaUI.ID_TYPE_HIERARCHY);
-		layout.addShowViewShortcut(JavaUI.ID_SOURCE_VIEW);
-		layout.addShowViewShortcut(JavaUI.ID_JAVADOC_VIEW);
-
-		// views - standard workbench
-		layout.addShowViewShortcut(IPageLayout.ID_OUTLINE);
-		layout.addShowViewShortcut(IPageLayout.ID_PROBLEM_VIEW);
-		layout.addShowViewShortcut(IPageLayout.ID_RES_NAV);
-
-		// new actions - Java project creation wizard
-		layout.addNewWizardShortcut("org.eclipse.jdt.ui.wizards.NewPackageCreationWizard"); //$NON-NLS-1$
-		layout.addNewWizardShortcut("org.eclipse.jdt.ui.wizards.NewClassCreationWizard"); //$NON-NLS-1$
-		layout.addNewWizardShortcut("org.eclipse.jdt.ui.wizards.NewInterfaceCreationWizard"); //$NON-NLS-1$
-		layout.addNewWizardShortcut("org.eclipse.jdt.ui.wizards.NewEnumCreationWizard"); //$NON-NLS-1$
-		layout.addNewWizardShortcut("org.eclipse.jdt.ui.wizards.NewAnnotationCreationWizard"); //$NON-NLS-1$
-		layout.addNewWizardShortcut("org.eclipse.jdt.ui.wizards.NewSourceFolderCreationWizard"); //$NON-NLS-1$
-		layout.addNewWizardShortcut("org.eclipse.jdt.ui.wizards.NewSnippetFileCreationWizard"); //$NON-NLS-1$
-		layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.folder");//$NON-NLS-1$
-		layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.file");//$NON-NLS-1$
-		layout.addNewWizardShortcut("org.eclipse.ui.editors.wizards.UntitledTextFileWizard");//$NON-NLS-1$
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/prefs/JpaPreferencePage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/prefs/JpaPreferencePage.java
deleted file mode 100644
index 77fa10c..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/prefs/JpaPreferencePage.java
+++ /dev/null
@@ -1,204 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.prefs;
-
-import java.io.IOException;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.ui.preferences.UserLibraryPreferencePage;
-import org.eclipse.jface.preference.IPersistentPreferenceStore;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jpt.core.internal.JptCorePlugin;
-import org.eclipse.jpt.core.internal.prefs.JpaPreferenceConstants;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-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.Link;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
-
-public class JpaPreferencePage extends PreferencePage 
-	implements IWorkbenchPreferencePage
-{
-	public static final String ID = "org.eclipse.jpt.ui.jpaPreferencePage";
-	
-	
-	private IPersistentPreferenceStore preferences;
-	
-	private IPreferenceStore userLibPreferences;
-	
-	private Label jpaLibLabel;
-		
-	private Combo jpaLibCombo;
-	
-	private Link userLibsLink;
-		
-	
-	public JpaPreferencePage() {
-		super();
-		preferences = 
-			new ScopedPreferenceStore(
-				new InstanceScope(),
-				JptCorePlugin.getPlugin().getBundle().getSymbolicName());
-		userLibPreferences =
-			new ScopedPreferenceStore(
-				new InstanceScope(),
-				JavaCore.getPlugin().getBundle().getSymbolicName());
-	}
-	
-	public void init(IWorkbench workbench) {}
-	
-	public Control createContents(Composite parent) {
-		Composite container = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		container.setLayout(layout);
-		
-		jpaLibLabel = createLabel(container, 1, JptUiMessages.JpaPreferencePage_defaultJpaLib);
-			
-		jpaLibCombo = createCombo(container, true);
-		
-		userLibsLink =  new Link(container, SWT.NONE);
-		GridData data = new GridData(GridData.END, GridData.CENTER, false, false);
-		data.horizontalSpan = 2;
-		userLibsLink.setLayoutData(data);
-		userLibsLink.setText(JptUiMessages.JpaPreferencePage_userLibsLink);
-		userLibsLink.addSelectionListener(
-			new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					((IWorkbenchPreferenceContainer) getContainer())
-						.openPage(UserLibraryPreferencePage.ID, null);
-				}
-			}
-		);
-			
-		performDefaults();
-		return container;
-	}
-	
-	private Label createLabel(Composite container, int span, String text) {
-		Label label = new Label(container, SWT.NONE);
-		label.setText(text);
-		GridData gd = new GridData();
-		gd.horizontalSpan = span;
-		label.setLayoutData(gd);
-		return label;
-	}
-	
-	private Combo createCombo(Composite container, boolean fillHorizontal) {
-		Combo combo = new Combo(container, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY);
-		if (fillHorizontal) {
-			combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		}
-		else {
-			combo.setLayoutData(new GridData());
-		}
-		return combo;
-	}
-	
-	private void fillJpaLibs() {
-		int index = jpaLibCombo.getSelectionIndex();
-		String selectedJpaLib = null;
-		if (index >= 0) {
-			selectedJpaLib = jpaLibCombo.getItem(jpaLibCombo.getSelectionIndex());
-		}
-		
-		jpaLibCombo.clearSelection();
-		jpaLibCombo.setItems(JavaCore.getUserLibraryNames());
-		
-		if (selectedJpaLib != null) {
-			int newIndex = CollectionTools.indexOf(jpaLibCombo.getItems(), selectedJpaLib);
-			if (newIndex >= 0) {
-				jpaLibCombo.select(newIndex);
-			}
-		}
-	}
-	
-	@Override
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		if (visible) {
-			fillJpaLibs();
-		}
-	}
-	
-	public void performDefaults() {
-		fillJpaLibs();
-		String defaultLib = preferences.getString(JpaPreferenceConstants.PREF_DEFAULT_JPA_LIB);
-		int index = -1;
-		if (! StringTools.stringIsEmpty(defaultLib)) {
-			index = CollectionTools.indexOf(jpaLibCombo.getItems(), defaultLib);
-		}
-		if (index >= 0) {
-			jpaLibCombo.select(index);
-		}
-		
-		super.performDefaults();
-	}
-
-	public boolean performOk() {
-		int index = jpaLibCombo.getSelectionIndex();
-		String defaultLib = (index >= 0) ? jpaLibCombo.getItem(index) : null;
-		if (! StringTools.stringIsEmpty(defaultLib)) {
-			preferences.setValue(JpaPreferenceConstants.PREF_DEFAULT_JPA_LIB, defaultLib);
-		}
-		try {
-			preferences.save();
-		}
-		catch (IOException ioe) {
-			JptCorePlugin.log(ioe);
-		}
-		return true;
-	}
-	
-	public void dispose() {
-		// null pointer check - bug 168337
-		if (jpaLibLabel != null) jpaLibLabel.dispose();
-		if (jpaLibCombo != null) jpaLibCombo.dispose();
-		super.dispose();
-	}
-	
-	
-		
-//		private boolean libContainsJpaClasses() {
-//			return true;
-//			String jarLocation = getStringValue();
-//			String errorMessage = JptUiMessages.JpaPreferencePage_invalidJpaLib;
-//			boolean hasError = false;
-//			
-//			try {
-//				JarFile jarFile = new JarFile(jarLocation);
-//				hasError = jarFile.getEntry("javax/persistence/EntityManager.class") == null;
-//			}
-//			catch (IOException ioe) {
-//				hasError = true;
-//			}
-//			
-//			if (hasError) {
-//				showErrorMessage(errorMessage);
-//			}
-//			else {
-//				clearErrorMessage();
-//			}
-//			
-//			return ! hasError;
-//		}
-//	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/DataModelPropertyPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/DataModelPropertyPage.java
deleted file mode 100644
index cc0b64d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/DataModelPropertyPage.java
+++ /dev/null
@@ -1,309 +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.internal.properties;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.PropertyPage;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelSynchHelper;
-import org.eclipse.wst.common.frameworks.internal.ui.ValidationStatus;
-
-public abstract class DataModelPropertyPage 
-	extends PropertyPage
-	implements Listener, IDataModelListener
-{
-	protected IDataModel model;
-	
-	private ValidationStatus status = new ValidationStatus();
-	private Map validationMap;
-	private String[] validationPropertyNames;
-	private boolean isValidating = false;
-	
-	protected DataModelSynchHelper synchHelper;
-	
-	private String infopopID;
-	
-	
-	protected DataModelPropertyPage(IDataModel model) {
-		super();
-		this.model = model;
-		model.addListener(this);
-		synchHelper = initializeSynchHelper(model);
-	}
-	
-
-	/**
-	 * @return
-	 */
-	public DataModelSynchHelper initializeSynchHelper(IDataModel dm) {
-		return new DataModelSynchHelper(dm);
-	}
-
-	
-	@Override
-	protected Control createContents(Composite parent) {
-		Composite top = createTopLevelComposite(parent);
-		setupInfopop(top);
-		setDefaults();
-		addListeners();
-		initializeValidationProperties();
-		return top;
-	}
-	
-	private void initializeValidationProperties() {
-		validationPropertyNames = getValidationPropertyNames();
-		if (validationPropertyNames == null || validationPropertyNames.length == 0)
-			validationMap = Collections.EMPTY_MAP;
-		else {
-			validationMap = new HashMap(validationPropertyNames.length);
-			for (int i = 0; i < validationPropertyNames.length; i++)
-				validationMap.put(validationPropertyNames[i], new Integer(i));
-		}
-	}
-
-	/**
-	 * Subclass should return the model property names that need to be validated on this page in the
-	 * order that they should present their messages.
-	 * 
-	 * @return
-	 */
-	protected abstract String[] getValidationPropertyNames();
-
-	/**
-	 * Return the top level Composite for this page.
-	 */
-	protected abstract Composite createTopLevelComposite(Composite parent);
-
-	/**
-	 * Set up info pop hooks if set.
-	 */
-	protected void setupInfopop(Control parent) {
-		if (getInfopopID() != null)
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, getInfopopID());
-	}
-
-	/**
-	 * Setup the default values for this page. Subclasses should override to provide appropriate
-	 * defaults.
-	 */
-	protected void setDefaults() {
-		restoreDefaultSettings();
-	}
-
-	/**
-	 * Subclasses should implement this method if they have default settings that have been stored
-	 * and need to be restored.
-	 * 
-	 * @see storeDefaultSettings()
-	 */
-	protected void restoreDefaultSettings() {
-	}
-
-	/**
-	 * Add Listeners to controls at this point to avoid unnecessary events. Subclasses should
-	 * override to add listeners to its controls.
-	 */
-	protected void addListeners() {
-	}
-
-	/**
-	 * Exiting the page. Subclasses may extend.
-	 */
-	protected void exit() {
-	}
-
-	protected boolean getStatus(Integer key) {
-		return status.hasError(key);
-	}
-
-	/**
-	 * Sent when an event that the receiver has registered for occurs. If a subclass overrides this
-	 * method, it must call super.
-	 * 
-	 * @param event
-	 *            the event which occurred
-	 */
-	public void handleEvent(org.eclipse.swt.widgets.Event event) {
-	}
-
-	/**
-	 * Set the error message for this page based on the last error in the ValidationStatus.
-	 */
-	protected void setErrorMessage() {
-		String error = status.getLastErrMsg();
-		if (error == null) {
-			if (getErrorMessage() != null)
-				setErrorMessage((String) null);
-			String warning = status.getLastWarningMsg();
-			if (warning == null) {
-				if (getMessage() != null && getMessageType() == IMessageProvider.WARNING)
-					setMessage(null, IMessageProvider.WARNING);
-				else {
-					String info = status.getLastInfoMsg();
-					if (info == null) {
-						if (getMessage() != null && getMessageType() == IMessageProvider.INFORMATION)
-							setMessage(null, IMessageProvider.INFORMATION);
-					} else if (!info.equals(getMessage())) {
-						setMessage(info, IMessageProvider.INFORMATION);
-					}
-				}
-			} else if (!warning.equals(getMessage()))
-				setMessage(warning, IMessageProvider.WARNING);
-		} else if (!error.equals(getErrorMessage()))
-							setErrorMessage(error);
-						}
-
-	protected void setErrorStatus(Integer key, String errorMessage) {
-		status.setErrorStatus(key, errorMessage);
-	}
-
-	protected void setWarningStatus(Integer key, String warningMessage) {
-		status.setWarningStatus(key, warningMessage);
-	}
-	
-	protected void setInfoStatus(Integer key, String infoMessage) {
-		status.setInfoStatus(key, infoMessage);
-	}
-
-	protected void setOKStatus(Integer key) {
-		status.setOKStatus(key);
-	}
-
-	/**
-	 * This should be called by the Wizard just prior to running the performFinish operation.
-	 * Subclasses should override to store their default settings.
-	 */
-	public void storeDefaultSettings() {
-	}
-
-	/**
-	 * The page is now being validated. At this time, each control is validated and then the
-	 * controls are updated based on the results in the ValidationStatus which was updated during
-	 * <code>validateControls()</code>. Finally, it will display the last error message and it
-	 * will set the page complete. Subclasses will not typically override this method.
-	 */
-	protected void validatePage() {
-		if (!isValidating) {
-			isValidating = true;
-			try {
-				validateControlsBase();
-				updateControls();
-				setErrorMessage();
-				setValid(status.getLastErrMsg() == null);
-			} 
-			finally {
-				isValidating = false;
-			}
-		}
-	}
-
-	/**
-	 * Validate individual controls. Use validation keys to keep track of errors.
-	 * 
-	 * @see setOKStatus(Integer) and setErrorMessage(Integer, String)
-	 */
-	protected final String validateControlsBase() {
-		if (!validationMap.isEmpty()) {
-			String propName;
-			for (int i = 0; i < validationPropertyNames.length; i++) {
-				propName = validationPropertyNames[i];
-				Integer valKey = (Integer) validationMap.get(propName);
-				if (valKey != null)
-					validateProperty(propName, valKey);
-				if (!getStatus(valKey))
-					return propName;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @param propertyName
-	 * @param validationkey
-	 */
-	private void validateProperty(String propertyName, Integer validationKey) {
-		setOKStatus(validationKey);
-		IStatus status1 = model.validateProperty(propertyName);
-		if (!status1.isOK()) {
-			String message = status1.isMultiStatus() ? status1.getChildren()[0].getMessage() : status1.getMessage();
-			switch (status1.getSeverity()) {
-				case IStatus.ERROR :
-					setErrorStatus(validationKey, message);
-					break;
-				case IStatus.WARNING :
-					setWarningStatus(validationKey, message);
-					break;
-				case IStatus.INFO :
-					setInfoStatus(validationKey, message);
-					break;
-			}
-		}
-	}
-
-	/**
-	 * Update the enablement of controls after validation. Sublcasses should check the status of
-	 * validation keys to determine enablement.
-	 */
-	protected void updateControls() {
-	}
-	
-	
-	/*
-	 * If a property changes that we want to validate, force validation on this page.
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.operation.WTPOperationDataModelListener#propertyChanged(java.lang.String,
-	 *      java.lang.Object, java.lang.Object)
-	 */
-	public void propertyChanged(DataModelEvent event) {
-		String propertyName = event.getPropertyName();
-		if (validationPropertyNames != null && (event.getFlag() == DataModelEvent.VALUE_CHG || (!isValid() && event.getFlag() == DataModelEvent.VALID_VALUES_CHG))) {
-			for (int i = 0; i < validationPropertyNames.length; i++) {
-				if (validationPropertyNames[i].equals(propertyName)) {
-					validatePage();
-					break;
-				}
-			}
-		}
-	}
-
-	/**
-	 * @return Returns the model.
-	 */
-	protected IDataModel getDataModel() {
-		return model;
-	}
-
-	public void dispose() {
-		super.dispose();
-		if (synchHelper != null) {
-			synchHelper.dispose();
-			synchHelper = null;
-		}
-	}
-
-	protected String getInfopopID() {
-		return infopopID;
-	}
-
-	public void setInfopopID(String infopopID) {
-		this.infopopID = infopopID;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/JpaProjectPropertiesPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/JpaProjectPropertiesPage.java
deleted file mode 100644
index 0089adf..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/properties/JpaProjectPropertiesPage.java
+++ /dev/null
@@ -1,392 +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.internal.properties;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.Iterator;
-import org.eclipse.core.resources.IncrementalProjectBuilder;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.core.internal.JpaPlatformRegistry;
-import org.eclipse.jpt.core.internal.JpaProject;
-import org.eclipse.jpt.core.internal.facet.IJpaFacetDataModelProperties;
-import org.eclipse.jpt.core.internal.facet.JpaFacetDataModelProvider;
-import org.eclipse.jpt.core.internal.facet.JpaFacetUtils;
-import org.eclipse.jpt.db.internal.ConnectionProfileRepository;
-import org.eclipse.jpt.db.ui.internal.DTPUiTools;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.JptUiPlugin;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
-import org.eclipse.wst.common.project.facet.core.IFacetedProject;
-import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
-import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
-
-public class JpaProjectPropertiesPage 
-	extends DataModelPropertyPage
-	implements IJpaFacetDataModelProperties
-{
-	private PlatformGroup platformGroup;
-	
-	private ConnectionGroup connectionGroup;
-	
-	private PersistentClassManagementGroup persistentClassManagementGroup;
-	
-	
-	/**
-	 * Constructor for SamplePropertyPage.
-	 */
-	public JpaProjectPropertiesPage() {
-		super(DataModelFactory.createDataModel(new JpaFacetDataModelProvider()));
-	}
-	
-	
-	@Override
-	protected Composite createTopLevelComposite(Composite parent) {
-		Composite composite = new Composite(parent, SWT.NULL);
-		GridLayout layout = new GridLayout();
-		composite.setLayout(layout);
-		
-		platformGroup = new PlatformGroup(composite);
-		connectionGroup = new ConnectionGroup(composite);
-		persistentClassManagementGroup = new PersistentClassManagementGroup(composite);
-		
-		setRuntime();
-		
-		Dialog.applyDialogFont(parent);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IJpaHelpContextIds.PROPERTIES_JAVA_PERSISTENCE);
-		
-		return composite;
-	}
-	
-	private void setRuntime() {
-		IFacetedProject facetedProject = null;
-		try {
-			facetedProject = ProjectFacetsManager.create(getJpaProject().getProject());
-		}
-		catch (CoreException ce) {
-			JptUiPlugin.log(ce);
-			return;
-		}
-		IRuntime runtime = facetedProject.getPrimaryRuntime();
-		model.setProperty(IJpaFacetDataModelProperties.RUNTIME, runtime);
-	}
-	
-	@Override
-	protected String[] getValidationPropertyNames() {
-		return new String[] {
-			IJpaFacetDataModelProperties.PLATFORM_ID,
-			IJpaFacetDataModelProperties.CONNECTION,
-			IJpaFacetDataModelProperties.DISCOVER_ANNOTATED_CLASSES
-		};
-	}
-	
-	protected JpaProject getJpaProject() {
-		return (JpaProject) getElement().getAdapter(IJpaProject.class);
-	}
-	
-	private Combo createCombo(Composite container, boolean fillHorizontal) {
-		Combo combo = new Combo(container, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY);
-		if (fillHorizontal) {
-			combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		}
-		else {
-			combo.setLayoutData(new GridData());
-		}
-		return combo;
-	}
-	
-	private Button createButton(Composite container, int span, String text, int style) {
-		Button button = new Button(container, SWT.NONE | style);
-		button.setText(text);
-		GridData gd = new GridData();
-		gd.horizontalSpan = span;
-		button.setLayoutData(gd);
-		return button;
-	}
-	
-	protected void performDefaults() {
-		platformGroup.performDefaults();
-		connectionGroup.performDefaults();
-		persistentClassManagementGroup.performDefaults();
-	}
-	
-	public boolean performOk() {
-		JpaProject jpaProject = getJpaProject();
-		
-		// the facet has been uninstalled during our trip to the properties ...
-		if (jpaProject == null) {
-			return true;
-		}
-		
-		try {
-			JpaFacetUtils.setPlatform(jpaProject.getProject(), model.getStringProperty(IJpaFacetDataModelProperties.PLATFORM_ID));
-			JpaFacetUtils.setConnectionName(jpaProject.getProject(), model.getStringProperty(IJpaFacetDataModelProperties.CONNECTION));
-			JpaFacetUtils.setDiscoverAnnotatedClasses(jpaProject.getProject(), model.getBooleanProperty(IJpaFacetDataModelProperties.DISCOVER_ANNOTATED_CLASSES));
-		}
-		catch (CoreException ce) {
-			return false;
-		}
-		
-		buildProject();
-		
-		return true;
-	}
-	
-	private void buildProject() {
-		IRunnableWithProgress r= new IRunnableWithProgress() {
-			public void run(IProgressMonitor pm) throws InvocationTargetException {
-				try {
-					getJpaProject().getProject().build(IncrementalProjectBuilder.FULL_BUILD, pm);
-				} 
-				catch (CoreException ce) {
-					JptUiPlugin.log(ce);
-				}
-			}
-		};
-		try {
-			PlatformUI.getWorkbench().getProgressService().run(true, false, r);
-		}
-		catch (InterruptedException ie) { /* nothing to do */ }
-		catch (InvocationTargetException ie) { /* nothing to do */ }
-	}
-	
-	
-	private final class PlatformGroup
-	{
-		private final ComboViewer platformCombo;
-		
-		
-		public PlatformGroup(Composite composite) {
-			Group group = new Group(composite, SWT.NONE);
-			group.setText(JptUiMessages.JpaFacetWizardPage_platformLabel);
-			group.setLayout(new GridLayout());
-			group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			// TODO
-			// PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IDaliHelpContextIds.NEW_JPA_PROJECT_CONTENT_PAGE_DATABASE);
-			
-			platformCombo = new ComboViewer(createCombo(group, true));
-			platformCombo.setContentProvider(
-					new IStructuredContentProvider() {
-						public Object[] getElements(Object inputElement) {
-							return CollectionTools.array(JpaPlatformRegistry.INSTANCE.allJpaPlatformIds());
-						}
-						
-						public void dispose() {}
-						
-						public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
-					}
-				);
-			platformCombo.setLabelProvider(
-					new ILabelProvider() {
-						public Image getImage(Object element) {
-							return null;
-						}
-						
-						public String getText(Object element) {
-							return JpaPlatformRegistry.INSTANCE.getJpaPlatformLabel((String) element);
-						}
-						
-						public void addListener(ILabelProviderListener listener) {}
-						
-						public void removeListener(ILabelProviderListener listener) {}
-						
-						public void dispose() {}
-						
-						public boolean isLabelProperty(Object element, String property) {
-							return true;
-						}
-					}
-				);
-			platformCombo.addSelectionChangedListener(
-					new ISelectionChangedListener() {
-						public void selectionChanged(SelectionChangedEvent event) {
-							model.setProperty(PLATFORM_ID, ((StructuredSelection) platformCombo.getSelection()).getFirstElement());
-						}
-					}
-				);
-			// we need some input here, even if it means absolutely nothing
-			platformCombo.setInput("null input");
-			performDefaults();
-		}
-		
-		private void performDefaults() {
-			String platformId = getJpaProject().getPlatform().getId();
-			model.setProperty(PLATFORM_ID, platformId);
-			platformCombo.setSelection(new StructuredSelection(platformId));
-		}
-	}
-	
-	
-	private final class ConnectionGroup
-	{
-		private final Combo connectionCombo;
-		
-		private Link connectionLink;
-		
-		
-		public ConnectionGroup(Composite composite) {
-			Group group = new Group(composite, SWT.NONE);
-			group.setText(JptUiMessages.JpaFacetWizardPage_connectionLabel);
-			group.setLayout(new GridLayout());
-			group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			
-			connectionCombo = createCombo(group, true);
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IJpaHelpContextIds.PROPERTIES_JAVA_PERSISTENCE_CONNECTION);
-			connectionCombo.addSelectionListener(
-					new SelectionListener() {
-						public void widgetDefaultSelected(SelectionEvent e) {
-							widgetSelected(e);
-						}
-						
-						public void widgetSelected(SelectionEvent e) {
-							model.setProperty(CONNECTION, connectionCombo.getItem(connectionCombo.getSelectionIndex()));
-						}
-					}
-				);
-			fillConnections();
-			
-			connectionLink = new Link(group, SWT.NONE);
-			GridData data = new GridData(GridData.END, GridData.CENTER, false, false);
-			data.horizontalSpan = 2;
-			connectionLink.setLayoutData(data);
-			connectionLink.setText(JptUiMessages.JpaFacetWizardPage_connectionLink);
-			connectionLink.addSelectionListener(
-				new SelectionAdapter() {
-					public void widgetSelected(SelectionEvent e) {
-						openNewConnectionWizard();				
-					}
-				}
-			);
-			performDefaults();
-		}
-
-		private void fillConnections() {
-			//clear out connection entries from previous login.
-			connectionCombo.removeAll();
-			
-			for (Iterator<String> stream = ConnectionProfileRepository.instance().profileNames(); stream.hasNext(); ) {
-				connectionCombo.add(stream.next());
-			}
-		}
-		
-		private void performDefaults() {
-			String connectionName = getJpaProject().getDataSource().getConnectionProfileName();
-			model.setProperty(CONNECTION, connectionName);
-			if (connectionName == null) {
-				connectionCombo.clearSelection();
-			}
-			else {
-				connectionCombo.setText(connectionName);
-			}
-		}
-		
-		private void openNewConnectionWizard() {
-			String connectionName = DTPUiTools.createNewProfile();
-			if (connectionName != null) {
-				fillConnections();
-				model.setProperty(CONNECTION, connectionName);
-				connectionCombo.select(connectionCombo.indexOf(connectionName));
-			}
-		}
-	}
-	
-	
-	private final class PersistentClassManagementGroup
-	{
-		private final Button discoverClassesButton;
-		
-		private final Button listClassesButton;
-		
-		
-		public PersistentClassManagementGroup(Composite composite) {
-			Group group = new Group(composite, SWT.NONE);
-			group.setText(JptUiMessages.JpaFacetWizardPage_persistentClassManagementLabel);
-			group.setLayout(new GridLayout());
-			group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IJpaHelpContextIds.NEW_JPA_PROJECT_CONTENT_PAGE_CLASSPATH);
-			
-			discoverClassesButton = createButton(group, 1, JptUiMessages.JpaFacetWizardPage_discoverClassesButton, SWT.RADIO);
-			discoverClassesButton.addSelectionListener(
-				new SelectionListener() {
-						public void widgetDefaultSelected(SelectionEvent e) {
-							widgetSelected(e);
-						}
-						
-						public void widgetSelected(SelectionEvent e) {
-							model.setBooleanProperty(DISCOVER_ANNOTATED_CLASSES, true);
-						}
-					}
-				);
-			
-			listClassesButton = createButton(group, 1, JptUiMessages.JpaFacetWizardPage_listClassesButton, SWT.RADIO);
-			listClassesButton.addSelectionListener(
-				new SelectionListener() {
-						public void widgetDefaultSelected(SelectionEvent e) {
-							widgetSelected(e);
-						}
-						
-						public void widgetSelected(SelectionEvent e) {
-							model.setBooleanProperty(DISCOVER_ANNOTATED_CLASSES, false);
-						}
-					}
-				);
-			
-			model.addListener(
-					new IDataModelListener() {
-						public void propertyChanged(DataModelEvent event) {
-							if (DISCOVER_ANNOTATED_CLASSES.equals(event.getPropertyName())) {
-								boolean discoverClasses = (Boolean) event.getProperty();
-								discoverClassesButton.setSelection(discoverClasses);
-								listClassesButton.setSelection(! discoverClasses);
-							}
-						}
-					}
-				);
-			
-			performDefaults();
-		}
-		
-		private void performDefaults() {
-			boolean discoverClasses = getJpaProject().isDiscoverAnnotatedClasses();
-			model.setProperty(DISCOVER_ANNOTATED_CLASSES, discoverClasses);
-			discoverClassesButton.setSelection(discoverClasses);
-			listClassesButton.setSelection(! discoverClasses);
-		}
-	}
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/AbstractSelectionParticipant.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/AbstractSelectionParticipant.java
deleted file mode 100644
index 52408ef..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/AbstractSelectionParticipant.java
+++ /dev/null
@@ -1,20 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-public abstract class AbstractSelectionParticipant 
-	implements ISelectionParticipant 
-{
-	protected ISelectionManager selectionManager;
-	
-	
-	protected AbstractSelectionParticipant(ISelectionManager theSelectionManager) {
-		selectionManager = theSelectionManager;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/ISelectionManager.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/ISelectionManager.java
deleted file mode 100644
index df7fd63..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/ISelectionManager.java
+++ /dev/null
@@ -1,45 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-import org.eclipse.ui.IWorkbenchPart;
-
-public interface ISelectionManager 
-{	
-	/**
-	 * Return the current selection.  
-	 * This will never be null, but it may be <code>Selection.NULL_SELECTION</code>.
-	 */
-	public Selection getCurrentSelection();
-	
-	/**
-	 * Not to be called lightly, this will affect the selection for all interested
-	 * objects in a window.
-	 * The newSelection will be selected.
-	 */
-	public void select(Selection newSelection);
-	
-	/**
-	 * Not to be called lightly, this will affect the selection for all interested
-	 * objects in a window.
-	 * The oldSelection will be deselected, iff it matches the current selection.
-	 */
-	public void deselect(Selection oldSelection);
-	
-	/**
-	 * This may be used to register a part with the selection manager if the part
-	 * is known to need access to the selection manager before it is ever activated
-	 * or in the case it may be activated prior to the selection manager being 
-	 * created.
-	 * 
-	 * It should not be necessary to deregister a part, as that happens when the 
-	 * part is closed.
-	 */
-	public void register(IWorkbenchPart part);	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/ISelectionParticipant.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/ISelectionParticipant.java
deleted file mode 100644
index 7657d00..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/ISelectionParticipant.java
+++ /dev/null
@@ -1,38 +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
- *  
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-public interface ISelectionParticipant 
-{
-	/**
-	 * Return the current selection of the participant
-	 */
-	Selection getSelection();
-	
-	/**
-	 * The selection has changed in the central selection manager.
-	 * Update this participant accordingly.
-	 */
-	void selectionChanged(SelectionEvent evt);
-	
-	/**
-	 * Return whether this selection participant should disconnect itself from
-	 * its part when its part is hidden from view.
-	 * <b>Typically</b> editor participants will return true and view participants will
-	 * return false.
-	 */
-	boolean disposeOnHide();
-	
-	/**
-	 * This participant is no longer needed (most likely because its part has 
-	 * closed).  Dispose of it.
-	 */
-	void dispose();
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/JpaDetailsSelectionParticipant.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/JpaDetailsSelectionParticipant.java
deleted file mode 100644
index 9e84ab4..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/JpaDetailsSelectionParticipant.java
+++ /dev/null
@@ -1,41 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-import org.eclipse.jpt.ui.internal.views.JpaDetailsView;
-
-
-public class JpaDetailsSelectionParticipant extends AbstractSelectionParticipant 
-{
-	private JpaDetailsView detailsView;
-	
-	
-	public JpaDetailsSelectionParticipant(
-				ISelectionManager theSelectionManager, JpaDetailsView view) {
-		super(theSelectionManager);
-		detailsView = view;
-	}
-	
-	
-	public Selection getSelection() {
-		return detailsView.getSelection();
-	}
-
-	public void selectionChanged(SelectionEvent evt) {
-		detailsView.select(evt.getSelection());
-	}
-	
-	public boolean disposeOnHide() {
-		return false;
-	}
-	
-	public void dispose() {
-		// no op
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/JpaStructureSelectionParticipant.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/JpaStructureSelectionParticipant.java
deleted file mode 100644
index bfa9499..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/JpaStructureSelectionParticipant.java
+++ /dev/null
@@ -1,56 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jpt.ui.internal.views.JpaStructureView;
-
-public class JpaStructureSelectionParticipant 
-	extends AbstractSelectionParticipant 
-{
-	private JpaStructureView structureView;
-	
-	private ISelectionChangedListener structureViewListener;
-	
-	
-	public JpaStructureSelectionParticipant(
-				ISelectionManager theSelectionManager, JpaStructureView theOutlineView) {
-		super(theSelectionManager);
-		structureView = theOutlineView;
-		structureViewListener = new StructureViewSelectionListener();
-		structureView.addSelectionChangedListener(structureViewListener);
-	}
-	
-	
-	public Selection getSelection() {
-		return structureView.getSelection();
-	}
-	
-	public void selectionChanged(SelectionEvent evt) {
-		structureView.select(evt.getSelection());
-	}
-	
-	public boolean disposeOnHide() {
-		return false;
-	}
-	
-	public void dispose() {
-		// no op
-	}
-	
-	
-	private class StructureViewSelectionListener 
-		implements ISelectionChangedListener
-	{
-		public void selectionChanged(SelectionChangedEvent event) {
-			selectionManager.select(structureView.getSelection());
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/Selection.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/Selection.java
deleted file mode 100644
index c02d684..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/Selection.java
+++ /dev/null
@@ -1,70 +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
- *  
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-
-
-public class Selection 
-{
-	public static Selection NULL_SELECTION = new Selection();
-	
-	private IJpaContentNode selectedNode;
-	
-	
-	/* Used internally - only for NULL_SELECTION */
-	private Selection() {}
-	
-	public Selection(IJpaContentNode node) {
-		if (node == null) {
-			throw new IllegalArgumentException("Must have non-null node.  Use NULL_SELECTION otherwise.");
-		}
-		
-		selectedNode = node;
-	}
-	
-	public IJpaContentNode getSelectedNode() {
-		return selectedNode;
-	}
-	
-	public boolean equals(Object obj) {
-		if (! (obj instanceof Selection)) {
-			return false;
-		}
-		
-		if (this == NULL_SELECTION && obj == NULL_SELECTION) {
-			return true;
-		}
-		
-		if (this == NULL_SELECTION || obj == NULL_SELECTION) {
-			return false;
-		}
-		
-		return this.selectedNode.equals(((Selection) obj).selectedNode);
-	}
-	
-	public int hashCode() {
-		if (this == NULL_SELECTION) {
-			return super.hashCode();
-		}
-		else {
-			return this.selectedNode.hashCode();
-		}
-	}
-	
-	public String toString() {
-		if (this == NULL_SELECTION) {
-			return "NULL_SELECTION";
-		}
-		else {
-			return selectedNode.toString();
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionEvent.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionEvent.java
deleted file mode 100644
index 1020ef3..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionEvent.java
+++ /dev/null
@@ -1,64 +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
- *  
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-import java.util.EventObject;
-
-public class SelectionEvent extends EventObject 
-{
-	/**
-	 * Serializable uid
-	 * @since 0.5
-	 */
-	private static final long serialVersionUID = 1L;
-    
-	
-	/**
-	 * Indicates that the selection object is now selected
-	 */
-	public static int SELECTION = 1;
-	
-	/**
-	 * Indicates that the selection object has now been deselected
-	 */
-	public static int DESELECTION = 2;
-	
-	
-	/**
-	 * The selection object whose selection status has changed
-	 */
-	private Selection selection;
-	
-	/**
-	 * The type of the selection event, either a SELECTION or a DESELECTION
-	 */
-	private int type;
-	
-	
-	public SelectionEvent(Selection theSelection, int theType, Object source) {
-		super(source);
-		selection = theSelection;
-		type = theType;
-	}
-	
-	/**
-	 * Return the selection object whose selection status has changed
-	 */
-	public Selection getSelection() {
-		return selection;
-	}
-	
-	/**
-	 * Return the type of selection event, either a SELECTION or a DESELECTION
-	 */
-	public int getType() {
-		return type;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionManager.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionManager.java
deleted file mode 100644
index e9af08d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionManager.java
+++ /dev/null
@@ -1,264 +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
- *  
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IPageListener;
-import org.eclipse.ui.IPartListener2;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.IWorkbenchWindow;
-
-/**
- * A <code>SelectionManager</code> stores the current <code>Selection</code> and 
- * notifies <code>ISelectionListener</code>s when the selection changes.
- */
-public class SelectionManager
-	implements ISelectionManager
-{
-	/* The set of pages for which this object is managing selections */
-	private Set pages;
-	
-	/* The map of <code>ISelectionParticipant</code>s (keyed by part) this object
-	   is using to manage selections */
-	private Map selectionParticipants;
-	
-	private IPageListener pageListener;
-	
-	private IPartListener2 partListener;
-	
-	/* The window for which this object manages selections */
-	private IWorkbenchWindow window;
-	
-	private Selection currentSelection;
-	
-	
-	public SelectionManager() {
-		super();
-		pages = Collections.synchronizedSet(new HashSet());
-		selectionParticipants = Collections.synchronizedMap(new HashMap());
-		pageListener = new PageListener();
-		partListener = new PartListener();
-		currentSelection = Selection.NULL_SELECTION;
-	}
-	
-	public void init(IWorkbenchWindow aWindow) {
-		window = aWindow;
-		aWindow.addPageListener(pageListener);
-		initPage(aWindow.getActivePage());
-	}
-	
-	private void initPage(IWorkbenchPage page) {
-		if ((page != null) && (! pages.contains(page))) {
-			page.addPartListener(partListener);
-			pages.add(page);
-			IEditorPart activeEditor = page.getActiveEditor();
-			initPart(activeEditor);
-			selectPart(activeEditor);
-		}
-	}
-	
-	private void disposePage(IWorkbenchPage page) {
-		if ((page != null) && (pages.contains(page))) {
-			page.removePartListener(partListener);
-			pages.remove(page);
-		}
-	}
-	
-	private void initPart(IWorkbenchPart part) {
-		if (part != null) {
-			if (selectionParticipants.get(part) == null) {
-				ISelectionParticipant selectionParticipant = 
-					(ISelectionParticipant) part.getAdapter(ISelectionParticipant.class);
-				if (selectionParticipant != null) {
-					selectionParticipants.put(part, selectionParticipant);
-				}
-			}
-		}
-	}
-	
-	private void selectPart(IWorkbenchPart part) {
-		ISelectionParticipant selectionParticipant = getSelectionParticipant(part);
-		if (selectionParticipant != null) {
-			select(selectionParticipant.getSelection());
-		}
-	}
-	
-	private void hidePart(IWorkbenchPart part) {
-		ISelectionParticipant selectionParticipant = getSelectionParticipant(part);
-		if ((selectionParticipant != null) && (selectionParticipant.disposeOnHide())) {
-			closePart(part);
-		}
-	}
-	
-	private void closePart(IWorkbenchPart part) {
-		ISelectionParticipant selectionParticipant = getSelectionParticipant(part);
-		if (selectionParticipant != null) {
-			disposePart(part);
-			checkForNoEditors();
-		}
-	}
-	
-	private void disposePart(IWorkbenchPart part) {
-		if ((part != null) && (selectionParticipants.containsKey(part))) {
-			ISelectionParticipant selectionParticipant = 
-				(ISelectionParticipant) selectionParticipants.remove(part);
-			selectionParticipant.dispose();
-		}
-	}
-	
-	private void checkForNoEditors() {
-		IWorkbenchPage activePage = window.getActivePage();
-		if ((activePage == null)
-				|| (activePage.getActiveEditor() == null)) {
-			select(Selection.NULL_SELECTION);
-		}
-	}
-	
-	/**
-	 * This may be used to register a part with the selection manager if the part
-	 * is known to need access to the selection manager before it is ever activated
-	 * or in the case it may be activated prior to the selection manager being 
-	 * created.
-	 * 
-	 * It should not be necessary to deregister a part, as that happens when the 
-	 * part is closed.
-	 */
-	public void register(IWorkbenchPart part) {
-		initPart(part);
-	}
-	
-	/**
-	 * Not to be called lightly, this will affect the selection for all interested
-	 * objects in a window.
-	 * The newSelection will be selected.
-	 */
-	public void select(Selection newSelection) {
-		if (currentSelection.equals(newSelection)) {
-			return;
-		}
-		
-		currentSelection = newSelection;
-		fireSelectionChange(
-			new SelectionEvent(newSelection, SelectionEvent.SELECTION, this)
-		);
-	}
-	
-	/**
-	 * Not to be called lightly, this will affect the selection for all interested
-	 * objects in a window.
-	 * The oldSelection will be deselected, iff it matches the current selection.
-	 */
-	public void deselect(Selection oldSelection) {
-		if (currentSelection.equals(oldSelection)) {
-			currentSelection = Selection.NULL_SELECTION;
-			fireSelectionChange(
-				new SelectionEvent(oldSelection, SelectionEvent.DESELECTION, this)
-			);
-		}
-	}
-	
-	private void fireSelectionChange(SelectionEvent event) {
-		for (Iterator stream = selectionParticipants.values().iterator(); stream.hasNext(); ) {
-			((ISelectionParticipant) stream.next()).selectionChanged(event);
-		}
-	}
-	
-	private ISelectionParticipant getSelectionParticipant(IWorkbenchPart part) {
-		return (ISelectionParticipant) selectionParticipants.get(part);
-	}
-		
-	public Selection getCurrentSelection() {
-		return currentSelection;
-	}
-	
-	public void dispose() {
-		window.removePageListener(pageListener);
-		selectionParticipants.clear();
-		
-		for (Iterator stream = new CloneIterator(pages); stream.hasNext(); ) {
-			disposePage((IWorkbenchPage) stream.next());
-		}
-		
-		for (Iterator stream = new CloneIterator(selectionParticipants.keySet()); stream.hasNext(); ) {
-			disposePart((IWorkbenchPart) stream.next());
-		}
-	}
-	
-	
-	private class PageListener implements IPageListener
-	{
-		public void pageActivated(IWorkbenchPage page) {}
-		
-		public void pageClosed(IWorkbenchPage page) {
-			disposePage(page);
-		}
-		
-		public void pageOpened(IWorkbenchPage page) {
-			initPage(page);
-		}
-	}
-	
-	
-	private class PartListener implements IPartListener2
-	{
-		public void partActivated(IWorkbenchPartReference partRef) {
-			IWorkbenchPart part = partRef.getPart(false);
-			if (part != null) {
-				initPart(part);
-				selectPart(part);
-			}
-		}
-		
-		public void partBroughtToTop(IWorkbenchPartReference partRef) {}
-		
-		public void partClosed(IWorkbenchPartReference partRef) {
-			IWorkbenchPart part = partRef.getPart(false);
-			if (part != null) {
-				closePart(part);
-				disposePart(part);
-				checkForNoEditors();
-			}
-		}
-		
-		public void partDeactivated(IWorkbenchPartReference partRef) {}
-		
-		public void partHidden(IWorkbenchPartReference partRef) {
-			IWorkbenchPart part = partRef.getPart(false);
-			if (part != null) {
-				hidePart(part);
-			}
-		}
-		
-		public void partInputChanged(IWorkbenchPartReference partRef) {}
-		
-		public void partOpened(IWorkbenchPartReference partRef) {
-			IWorkbenchPart part = partRef.getPart(false);
-			if (part != null) {
-				initPart(part);
-			}
-		}
-		
-		public void partVisible(IWorkbenchPartReference partRef) {
-			IWorkbenchPart part = partRef.getPart(false);
-			if (part != null) {
-				initPart(part);
-			}
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionManagerFactory.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionManagerFactory.java
deleted file mode 100644
index 1cfe6e6..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionManagerFactory.java
+++ /dev/null
@@ -1,103 +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
- *  
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.eclipse.ui.IWindowListener;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-
-public class SelectionManagerFactory 
-{
-	private static SelectionManagerFactory INSTANCE;
-	
-	private static Object MUTEX = new Object();
-	
-	
-	/**
-	 * Each <code>IWorkbenchWindow</code> has its own <code>SelectionManager</code> 
-	 * to track the selection events in the <code>IWorkbenchWindow</code>. All 
-	 * <code>ISelectionListener</code>s in the same <code>IWorkbenchWindow</code> 
-	 * share the same <code>SelectionManager</code>.
-	 * 
-	 * @return The <code>SelectionManager</code> associated with the current 
-	 * <code>IWorkbenchWindow</code>
-	 */
-	public static ISelectionManager getSelectionManager(IWorkbenchWindow window) {
-		if (INSTANCE == null) {
-			// this is thread safe for now. you never know whats comming
-			synchronized (MUTEX) {
-				if(INSTANCE == null) {
-					INSTANCE = new SelectionManagerFactory();
-					// if we do the init inside the constructor we end up in a loop
-					// because the addWindowListener(this) does a callback to us
-					INSTANCE.init();
-				}
-			}
-		}
-		return INSTANCE.internalGetSelectionManager(window);
-	}
-	
-	
-	private Map managers;
-	
-	private WindowListener windowListener;
-	
-	
-	private SelectionManagerFactory() {
-		managers = new HashMap();
-		windowListener = new WindowListener();
-	}
-	
-	private void init() {
-		IWorkbench workbench = PlatformUI.getWorkbench();
-		workbench.addWindowListener(windowListener);
-	}
-	
-	/**
-	 * Returns the SelectionManager for the IWorkbenchWindow.
-	 * Creates a new one if none exists yet.
-	 */
-	private SelectionManager internalGetSelectionManager(IWorkbenchWindow window) {
-		if (window == null) {
-			throw new IllegalArgumentException(window.toString());
-		}
-		
-		if (! managers.containsKey(window)) {
-			SelectionManager manager = new SelectionManager();
-			this.managers.put(window, manager);
-			manager.init(window);
-		}
-		
-		return (SelectionManager) managers.get(window);
-	}
-	
-	
-	private class WindowListener implements IWindowListener
-	{
-		/* @see IWindowListener#windowOpened(IWorkbenchWindow) */
-		public void windowOpened(IWorkbenchWindow aWindow) {}
-		
-		/* @see IWindowListener#windowClosed(IWorkbenchWindow) */
-		public void windowClosed(IWorkbenchWindow aWindow) {
-			SelectionManager manager = internalGetSelectionManager(aWindow);
-			manager.dispose();
-			managers.remove(aWindow);
-		}
-		
-		/* @see IWindowListener#windowActivated(IWorkbenchWindow) */
-		public void windowActivated(IWorkbenchWindow aWindow) {}
-		
-		/* @see IWindowListener#windowDeactivated(IWorkbenchWindow) */
-		public void windowDeactivated(IWorkbenchWindow aWindow) {}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionParticipantFactory.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionParticipantFactory.java
deleted file mode 100644
index 2c90739..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/SelectionParticipantFactory.java
+++ /dev/null
@@ -1,50 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.jpt.ui.internal.views.JpaDetailsView;
-import org.eclipse.jpt.ui.internal.views.JpaStructureView;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.texteditor.ITextEditor;
-
-public class SelectionParticipantFactory 
-	implements IAdapterFactory
-{
-	/* @see IAdapterFactory#getAdapter(Object, Class) */
-	public Object getAdapter(Object adaptableObject, Class adapterType) {
-		if (! (adaptableObject instanceof IWorkbenchPart)) {
-			return null;
-		}
-		
-		ISelectionManager selectionManager = 
-			SelectionManagerFactory.getSelectionManager(((IWorkbenchPart) adaptableObject).getSite().getWorkbenchWindow());
-		// TODO - turn this into extension point
-		if (adaptableObject instanceof ITextEditor) {
-			return new TextEditorSelectionParticipant(
-							selectionManager, (ITextEditor) adaptableObject);
-		}
-		else if (adaptableObject instanceof JpaStructureView) {
-			return new JpaStructureSelectionParticipant(
-							selectionManager, (JpaStructureView) adaptableObject);
-		}
-		else if (adaptableObject instanceof JpaDetailsView) {
-			return new JpaDetailsSelectionParticipant(
-							selectionManager, (JpaDetailsView) adaptableObject);
-		}
-		else {
-			return null;
-		}
-	}
-	
-	/* @see IAdapterFactory#getAdapterList() */
-	public Class[] getAdapterList() {
-		return new Class[] { ISelectionParticipant.class };
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/TextEditorSelectionParticipant.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/TextEditorSelectionParticipant.java
deleted file mode 100644
index 0c13777..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/selection/TextEditorSelectionParticipant.java
+++ /dev/null
@@ -1,164 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.selection;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.viewers.IPostSelectionProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.jpt.core.internal.IJpaFile;
-import org.eclipse.jpt.core.internal.ITextRange;
-import org.eclipse.jpt.core.internal.JptCorePlugin;
-import org.eclipse.jpt.ui.internal.views.AbstractJpaView;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.IPropertyListener;
-import org.eclipse.ui.texteditor.ITextEditor;
-
-public class TextEditorSelectionParticipant 
-	extends AbstractSelectionParticipant 
-{
-	private ITextEditor editor;
-	
-	private IPropertyListener editorInputListener;
-	
-	private ISelectionChangedListener editorSelectionListener;
-	
-	private Selection currentSelection;
-	
-	private boolean suppressNotification = false;
-	
-	
-	public TextEditorSelectionParticipant(ISelectionManager theSelectionManager, ITextEditor theEditor) {
-		super(theSelectionManager);
-		editor = theEditor;
-		editorInputListener = new EditorInputListener();
-		editor.addPropertyListener(editorInputListener);
-		editorSelectionListener = new EditorSelectionListener();
-		((IPostSelectionProvider) editor.getSelectionProvider()).addPostSelectionChangedListener(editorSelectionListener);
-		currentSelection = calculateSelection();
-	}
-	
-	private void editorInputChanged() {
-		Selection newSelection = calculateSelection();
-		
-		if (! newSelection.equals(currentSelection)) {
-			currentSelection = newSelection;
-			
-			if (! suppressNotification) {
-				selectionManager.select(newSelection);
-			}
-		}
-	}
-	
-	private void editorSelectionChanged(SelectionChangedEvent event) {
-		Selection newSelection = calculateSelection();
-		
-		if (! newSelection.equals(currentSelection)) {
-			currentSelection = newSelection;
-			
-			// bug 188344 - won't actively change selection manager selection if 
-			// a "JPA" view is the active (and presumably selecting) view
-			if (editor.getEditorSite().getPage().getActivePart() instanceof AbstractJpaView) {
-				return;
-			}
-			
-			if (! suppressNotification) {
-				selectionManager.select(newSelection);
-			}
-		}
-	}
-	
-	private Selection calculateSelection() {
-		if (editor == null) {
-			return Selection.NULL_SELECTION;
-		}
-		
-		ISelection selection = editor.getSelectionProvider().getSelection();
-		IJpaFile persistenceFile = persistenceFileFor(editor.getEditorInput());
-		
-		if ((persistenceFile == null)
-			|| (! (selection instanceof ITextSelection))) {
-			return Selection.NULL_SELECTION;
-		}
-		
-		IJpaContentNode selectedNode = persistenceFile.getContentNode(((ITextSelection) selection).getOffset());
-		if (selectedNode == null) {
-			return Selection.NULL_SELECTION;
-		}
-		return new Selection(selectedNode);
-	}
-	
-	public Selection getSelection() {
-		return currentSelection;
-	}
-	
-	public IJpaFile persistenceFileFor(IEditorInput input) {
-		IFile file = null;
-		if (input instanceof IFileEditorInput) {
-			IFileEditorInput fileInput = (IFileEditorInput) input;
-			file = fileInput.getFile();
-		}
-		if (file == null) {
-			return null;
-		}
-		return JptCorePlugin.getJpaFile(file);
-	}
-		
-	public void selectionChanged(SelectionEvent evt) {
-		Selection newSelection = evt.getSelection();
-		
-		if ((getSelection().equals(newSelection))
-			|| (newSelection == Selection.NULL_SELECTION)) {
-			return;
-		}
-		
-		suppressNotification = true;
-		IJpaContentNode selectedNode = newSelection.getSelectedNode();
-		
-		ITextRange textRange = selectedNode.selectionTextRange();
-		if (textRange != null) {
-			this.editor.selectAndReveal(textRange.getOffset(), textRange.getLength());
-		}
-		suppressNotification = false;
-	}
-	
-	public boolean disposeOnHide() {
-		return true;
-	}
-	
-	public void dispose() {
-		this.editor.removePropertyListener(this.editorInputListener);
-		((IPostSelectionProvider) this.editor.getSelectionProvider()).removePostSelectionChangedListener(editorSelectionListener);
-	}
-	
-	
-	private class EditorInputListener
-		implements IPropertyListener
-	{
-		public void propertyChanged(Object source, int propId) {
-			if ((editor == source) && (propId == IEditorPart.PROP_INPUT)) {
-				editorInputChanged();
-			}
-		}
-	}
-	
-	
-	private class EditorSelectionListener
-		implements ISelectionChangedListener 
-	{
-		public void selectionChanged(SelectionChangedEvent event) {
-			editorSelectionChanged(event);
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/structure/IJpaStructureProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/structure/IJpaStructureProvider.java
deleted file mode 100644
index 90899ca..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/structure/IJpaStructureProvider.java
+++ /dev/null
@@ -1,31 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.structure;
-
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-
-public interface IJpaStructureProvider 
-{
-
-	String fileContentType();
-	
-	/**
-	 * Build an outline content provider.
-	 */
-	ITreeContentProvider buildContentProvider();
-	
-	/**
-	 * Build an outline label provider.
-	 */
-	ILabelProvider buildLabelProvider();
-	
-	void dispose();
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/SWTUtil.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/SWTUtil.java
deleted file mode 100644
index 1f14002..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/SWTUtil.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.jpt.ui.internal.util;
-
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.widgets.Table;
-
-//copied from jdt.internal.ui.util
-public class SWTUtil {
-
-	public static int getTableHeightHint(Table table, int rows) {
-		if (table.getFont().equals(JFaceResources.getDefaultFont()))
-			table.setFont(JFaceResources.getDialogFont());
-		int result= table.getItemHeight() * rows + table.getHeaderHeight();
-		if (table.getLinesVisible())
-			result+= table.getGridLineWidth() * (rows - 1);
-		return result;		
-	}	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/TableLayoutComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/TableLayoutComposite.java
deleted file mode 100644
index cd51349..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/TableLayoutComposite.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.jpt.ui.internal.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.Assert;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ControlAdapter;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-
-import org.eclipse.jface.viewers.ColumnLayoutData;
-import org.eclipse.jface.viewers.ColumnPixelData;
-import org.eclipse.jface.viewers.ColumnWeightData;
-
-/**
- * A special composite to layout columns inside a table. The composite is needed since we have
- * to layout the columns "before" the actual table gets layouted. Hence we can't use a normal
- * layout manager.
- * 
- * copied from jdt.internal.ui.util
- */
-public class TableLayoutComposite extends Composite {
-
-	/**
-	 * The number of extra pixels taken as horizontal trim by the table column. 
-	 * To ensure there are N pixels available for the content of the column,
-	 * assign N+COLUMN_TRIM for the column width.
-	 * 
-	 * @since 3.1
-	 */
-	private static int COLUMN_TRIM = "carbon".equals(SWT.getPlatform()) ? 24 : 3; //$NON-NLS-1$
-	
-	private List columns= new ArrayList();
-
-	/**
-	 * Creates a new <code>TableLayoutComposite</code>.
-	 */
-	public TableLayoutComposite(Composite parent, int style) {
-		super(parent, style);
-        addControlListener(new ControlAdapter() {
-            public void controlResized(ControlEvent e) {
-                Rectangle area= getClientArea();
-                Table table= (Table)getChildren()[0];
-                Point preferredSize= computeTableSize(table);
-                int width= area.width - 2 * table.getBorderWidth();
-                if (preferredSize.y > area.height) {
-                    // Subtract the scrollbar width from the total column width
-                    // if a vertical scrollbar will be required
-                    Point vBarSize = table.getVerticalBar().getSize();
-                    width -= vBarSize.x;
-                }
-                layoutTable(table, width, area, table.getSize().x < area.width);
-            }
-        });
-	}
-	
-	/**
-	 * Adds a new column of data to this table layout.
-	 *
-	 * @param data the column layout data
-	 */
-	public void addColumnData(ColumnLayoutData data) {
-		columns.add(data);
-	}
-	
-	//---- Helpers -------------------------------------------------------------------------------------
-	
-	private Point computeTableSize(Table table) {
-		Point result= table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		
-		int width= 0;
-		int size= columns.size();
-		for (int i= 0; i < size; ++i) {
-			ColumnLayoutData layoutData= (ColumnLayoutData) columns.get(i);
-			if (layoutData instanceof ColumnPixelData) {
-				ColumnPixelData col= (ColumnPixelData) layoutData;
-				width += col.width;
-				if (col.addTrim) {
-					width += COLUMN_TRIM;
-				}
-			} else if (layoutData instanceof ColumnWeightData) {
-				ColumnWeightData col= (ColumnWeightData) layoutData;
-				width += col.minimumWidth;
-			} else {
-				Assert.isTrue(false, "Unknown column layout data"); //$NON-NLS-1$
-			}
-		}
-		if (width > result.x)
-			result.x= width;
-		return result;
-	}
-	
-	private void layoutTable(Table table, int width, Rectangle area, boolean increase) {
-		// XXX: Layout is being called with an invalid value the first time
-		// it is being called on Linux. This method resets the
-		// Layout to null so we make sure we run it only when
-		// the value is OK.
-		if (width <= 1)
-			return;
-
-		TableColumn[] tableColumns= table.getColumns();
-		int size= Math.min(columns.size(), tableColumns.length);
-		int[] widths= new int[size];
-		int fixedWidth= 0;
-		int numberOfWeightColumns= 0;
-		int totalWeight= 0;
-
-		// First calc space occupied by fixed columns
-		for (int i= 0; i < size; i++) {
-			ColumnLayoutData col= (ColumnLayoutData) columns.get(i);
-			if (col instanceof ColumnPixelData) {
-				ColumnPixelData cpd= (ColumnPixelData) col;
-				int pixels= cpd.width;
-				if (cpd.addTrim) {
-					pixels += COLUMN_TRIM;
-				}
-				widths[i]= pixels;
-				fixedWidth += pixels;
-			} else if (col instanceof ColumnWeightData) {
-				ColumnWeightData cw= (ColumnWeightData) col;
-				numberOfWeightColumns++;
-				// first time, use the weight specified by the column data, otherwise use the actual width as the weight
-				// int weight = firstTime ? cw.weight : tableColumns[i].getWidth();
-				int weight= cw.weight;
-				totalWeight += weight;
-			} else {
-				Assert.isTrue(false, "Unknown column layout data"); //$NON-NLS-1$
-			}
-		}
-
-		// Do we have columns that have a weight
-		if (numberOfWeightColumns > 0) {
-			// Now distribute the rest to the columns with weight.
-			int rest= width - fixedWidth;
-			int totalDistributed= 0;
-			for (int i= 0; i < size; ++i) {
-				ColumnLayoutData col= (ColumnLayoutData) columns.get(i);
-				if (col instanceof ColumnWeightData) {
-					ColumnWeightData cw= (ColumnWeightData) col;
-					// calculate weight as above
-					// int weight = firstTime ? cw.weight : tableColumns[i].getWidth();
-					int weight= cw.weight;
-					int pixels= totalWeight == 0 ? 0 : weight * rest / totalWeight;
-					if (pixels < cw.minimumWidth)
-						pixels= cw.minimumWidth;
-					totalDistributed += pixels;
-					widths[i]= pixels;
-				}
-			}
-
-			// Distribute any remaining pixels to columns with weight.
-			int diff= rest - totalDistributed;
-			for (int i= 0; diff > 0; ++i) {
-				if (i == size)
-					i= 0;
-				ColumnLayoutData col= (ColumnLayoutData) columns.get(i);
-				if (col instanceof ColumnWeightData) {
-					++widths[i];
-					--diff;
-				}
-			}
-		}
-		
-		if (increase) {
-			table.setSize(area.width, area.height);
-		}
-		for (int i= 0; i < size; i++) {
-			tableColumns[i].setWidth(widths[i]);
-		}
-		if (!increase) {
-			table.setSize(area.width, area.height);
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/AbstractJpaView.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/AbstractJpaView.java
deleted file mode 100644
index e5d7cfc..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/AbstractJpaView.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/********************************************************************************
- * Copyright (c) 2006, 2007 Versant. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: Versant and Others. - initial API and implementation
- ********************************************************************************/
-package org.eclipse.jpt.ui.internal.views;
-
-import org.eclipse.jpt.ui.internal.selection.ISelectionManager;
-import org.eclipse.jpt.ui.internal.selection.Selection;
-import org.eclipse.jpt.ui.internal.selection.SelectionManagerFactory;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.part.PageBook;
-import org.eclipse.ui.part.ViewPart;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public abstract class AbstractJpaView extends ViewPart 
-{	
-	protected PageBook pageBook;
-	
-	protected Composite defaultComposite;
-	
-	
-	/**
-	 * The string to display when there is no view content
-	 */
-	private String defaultLabel;
-	
-	private TabbedPropertySheetWidgetFactory widgetFactory;
-	
-	
-	public AbstractJpaView(String aDefaultLabel) {
-		super();
-		defaultLabel = aDefaultLabel;
-		this.widgetFactory = new TabbedPropertySheetWidgetFactory();
-	}
-	
-	/* @see IWorkbenchPart#createPartControl(Composite) */
-	public final void createPartControl(Composite parent) {
-		pageBook = new PageBook(parent, SWT.NONE);
-		defaultComposite = buildDefaultComposite();
-		pageBook.showPage(defaultComposite);
-		
-		subcreatePartControl(parent);
-		
-		ISelectionManager selectionManager = 
-			SelectionManagerFactory.getSelectionManager(getViewSite().getWorkbenchWindow());
-		selectionManager.register(this);
-		select(selectionManager.getCurrentSelection());
-	}
-	
-	protected void subcreatePartControl(Composite parent) {
-		// no op - for subclasses to override if wished
-	}
-	
-	private Composite buildDefaultComposite() {
-		Composite composite = getWidgetFactory().createComposite(pageBook, SWT.NONE);
-		composite.setLayout(new FillLayout(SWT.VERTICAL));
-		Label label = getWidgetFactory().createLabel(composite, defaultLabel);
-		return composite;
-	}
-	
-	public abstract void select(Selection aSelection);
-	
-	protected void showDefaultPage() {
-		pageBook.showPage(defaultComposite);
-	}
-	
-	/* @see IWorkbenchPart#setFocus() */
-	public void setFocus() {
-		pageBook.setFocus();
-	}
-	
-	public TabbedPropertySheetWidgetFactory getWidgetFactory() {
-		return this.widgetFactory;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/JpaDetailsView.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/JpaDetailsView.java
deleted file mode 100644
index d4654f0..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/JpaDetailsView.java
+++ /dev/null
@@ -1,167 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.views;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.jpt.ui.internal.IJpaPlatformUi;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.PlatformRegistry;
-import org.eclipse.jpt.ui.internal.details.IJpaDetailsPage;
-import org.eclipse.jpt.ui.internal.details.IJpaDetailsProvider;
-import org.eclipse.jpt.ui.internal.selection.Selection;
-import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-
-public class JpaDetailsView extends AbstractJpaView 
-{	
-	private Selection currentSelection;
-	
-	private IJpaDetailsPage currentPage;
-	
-	/* key: String file content id,  value: IJpaDetailsProvider */
-	private Map<String, IJpaDetailsProvider> detailsProviders;
-	
-	/* key: Object content node id,  value: Composite page */
-	private Map<Object, IJpaDetailsPage> detailsPages;
-	
-	public JpaDetailsView() {
-		super(JptUiMessages.JpaDetailsView_viewNotAvailable);
-		this.currentSelection = Selection.NULL_SELECTION;
-		this.detailsProviders = new HashMap<String, IJpaDetailsProvider>();
-		this.detailsPages = new HashMap<Object, IJpaDetailsPage>();
-	}
-	
-	
-	public Selection getSelection() {
-		return currentSelection;
-	}
-	
-	public void select(Selection newSelection) {
-		if (newSelection.equals(currentSelection)) {
-			return;
-		}
-		
-		currentSelection = newSelection;
-		
-		if (newSelection != Selection.NULL_SELECTION) {
-			IJpaContentNode newNode = newSelection.getSelectedNode();
-			IJpaDetailsPage newPage = getDetailsPage(newNode);
-			setCurrentPage(newPage);
-		}
-		else if (currentSelection != Selection.NULL_SELECTION) {
-			setCurrentPage(null);
-		}
-	}
-	
-	private IJpaDetailsPage getDetailsPage(IJpaContentNode contentNode) {
-		if (detailsPages.containsKey(contentNode.getId())) {
-			IJpaDetailsPage page =  detailsPages.get(contentNode.getId());
-			
-			if ((page != null) &&
-					(page.getControl().isDisposed())) {
-				detailsPages.remove(contentNode.getId());
-			}
-			else {
-				return page;
-			}
-		}
-		
-		return buildDetailsPage(contentNode);
-	}
-	
-	private IJpaDetailsPage buildDetailsPage(IJpaContentNode contentNode) {
-		IJpaDetailsProvider detailsProvider =
-					getDetailsProvider(contentNode);
-			
-		if (detailsProvider == null) {
-			return null;
-		}
-		Composite parentComposite = getWidgetFactory().createComposite(pageBook, SWT.NONE);
-		parentComposite.setLayout(new FillLayout(SWT.VERTICAL));
-		IJpaDetailsPage page = 
-			detailsProvider.buildDetailsPage(parentComposite, contentNode.getId(), getWidgetFactory());
-		
-		if (page != null) {
-			detailsPages.put(contentNode.getId(), page);
-		}
-		
-		return page;
-	}
-	
-	private IJpaDetailsProvider getDetailsProvider(IJpaContentNode contentNode) {
-		String contentId = contentNode.getJpaFile().getContentId();
-		IJpaDetailsProvider provider = detailsProviders.get(contentId);
-		
-		if (provider == null) {
-			String platformId = contentNode.getJpaProject().getPlatform().getId();
-			IJpaPlatformUi jpaPlatformUI = PlatformRegistry.INSTANCE.getJpaPlatform(platformId);
-			for (IJpaDetailsProvider p : jpaPlatformUI.detailsProviders()) {
-				if (p.fileContentType().equals(contentId)) {
-					provider = p;
-					break;
-				}
-			}
-			
-			//TODO this view and the detailsProviders Map is not created on a per project basis.
-			//the detailsProviders and their fileContentTypes could overlap across project, this would cause problems with storing this map.
-			
-			if (provider != null) {
-				detailsProviders.put(contentId, provider);
-			}
-		}
-		
-		return provider;	
-	}
-	
-	private void setCurrentPage(IJpaDetailsPage newPage) {
-		// depopulate old page
-		if ((currentPage != null) && (currentPage != newPage)) {
-			currentPage.populate(null);
-		}
-		
-		// populate new page
-		if (newPage != null) {
-			newPage.populate(currentSelection.getSelectedNode());
-		}
-		
-		currentPage = newPage;
-		
-		// show new page
-		if (newPage == null) {
-			showDefaultPage();
-		}
-		else {
-			pageBook.showPage(newPage.getControl().getParent());
-		}
-	}
-	
-	public void dispose() {
-		for (Iterator<String> stream = new CloneIterator<String>(detailsProviders.keySet()); stream.hasNext(); ) {
-			String key = stream.next();
-			IJpaDetailsProvider provider = detailsProviders.remove(key);
-			provider.dispose();
-		}
-		
-		for (Iterator<Object> stream = new CloneIterator<Object>(detailsPages.keySet()); stream.hasNext(); ) {
-			Object key = stream.next();
-			IJpaDetailsPage detailsPage = detailsPages.remove(key);
-			detailsPage.dispose();
-		}
-		
-		currentSelection = Selection.NULL_SELECTION;
-		currentPage = null;
-
-		super.dispose();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/JpaStructureView.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/JpaStructureView.java
deleted file mode 100644
index 154ada0..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/JpaStructureView.java
+++ /dev/null
@@ -1,223 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.views;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ITreeSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.jpt.core.internal.IJpaFile;
-import org.eclipse.jpt.ui.internal.IJpaPlatformUi;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.PlatformRegistry;
-import org.eclipse.jpt.ui.internal.jface.NullLabelProvider;
-import org.eclipse.jpt.ui.internal.jface.NullTreeContentProvider;
-import org.eclipse.jpt.ui.internal.selection.Selection;
-import org.eclipse.jpt.ui.internal.structure.IJpaStructureProvider;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.IWorkbenchActionConstants;
-
-public class JpaStructureView extends AbstractJpaView 
-{
-	private StructureComposite structureComposite;
-	
-	
-	public JpaStructureView() {
-		super(JptUiMessages.JpaStructureView_viewNotAvailable);
-	}
-	
-	
-	@Override
-	public void subcreatePartControl(Composite parent) {
-		structureComposite = 
-			new StructureComposite(pageBook, SWT.NULL);
-	}
-		
-	public Selection getSelection() {
-		if (structureComposite.isVisible()) {
-			return structureComposite.getSelection(); 
-		}
-		else {
-			return Selection.NULL_SELECTION;
-		}
-	}
-	
-	@Override
-	public void select(Selection newSelection) {
-		Selection currentSelection = getSelection();
-		
-		if (newSelection.equals(currentSelection)) {
-			return;
-		}
-		
-		if (newSelection == Selection.NULL_SELECTION) {
-			showDefaultPage();
-		}
-		else {
-			pageBook.showPage(structureComposite);
-		}
-		
-		structureComposite.select(newSelection);
-	}
-	
-	
-	public void addSelectionChangedListener(ISelectionChangedListener listener) {
-		structureComposite.viewer.addSelectionChangedListener(listener);
-	}
-	
-	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
-		structureComposite.viewer.removeSelectionChangedListener(listener);
-	}
-	
-	
-	private class StructureComposite extends Composite 
-	{
-		/* key: String file content id,  value: IJpaStructureProvider */
-		private Map structureProviders;
-		
-		private TreeViewer viewer;
-		
-		private StructureComposite(Composite parent, int style) {
-			super(parent, style);
-			
-			structureProviders = new HashMap();
-			
-			this.setLayout(new FillLayout());
-			
-			viewer = new TreeViewer(this, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
-			viewer.setAutoExpandLevel(2);
-			initContextMenu();
-		}
-		
-	    protected void initContextMenu() {
-	        // Create dynamic menu mgr.  Dynamic is currently required to
-	        // support action contributions.
-	        MenuManager mgr = new MenuManager();
-	        mgr.setRemoveAllWhenShown(true);
-	        mgr.addMenuListener(new IMenuListener() {
-	            public void menuAboutToShow(IMenuManager mgr) {
-	                fillContextMenu(mgr);
-	            }
-	        });
-	        Menu menu = mgr.createContextMenu(viewer.getControl());
-	        viewer.getControl().setMenu(menu);
-	        getSite().registerContextMenu(mgr, viewer);
-	       	        
-	    }	
-	    
-	    /**
-	     * Called when the context menu is about to open.
-	     * Delegates to the action group using the viewer's selection as the action context.
-	     * @since 2.0
-	     */
-	    protected void fillContextMenu(IMenuManager manager) {
-	        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
-	    }
-	    
-		private Selection getSelection() {
-			ITreeSelection viewerSelection = (ITreeSelection) viewer.getSelection();
-			
-			if (viewerSelection.isEmpty() || viewerSelection.size() > 1) {
-				if (viewer.getInput() == null) {
-					return Selection.NULL_SELECTION;
-				}
-				else {
-					return new Selection((IJpaContentNode) viewer.getInput());
-				}
-			}
-			
-			else {
-				return new Selection((IJpaContentNode) viewerSelection.getFirstElement());
-			}
-			
-		}
-		
-		private void select(Selection selection) {
-			// note: checks for null and equals() selection have already been performed
-			
-			if (selection.equals(Selection.NULL_SELECTION)) {
-				clearViewer();
-				return;
-			}
-			
-			Selection currentSelection = getSelection();
-			IJpaContentNode newNode = selection.getSelectedNode();
-			IJpaFile newFile = newNode.getJpaFile();
-			IJpaContentNode currentNode = 
-				(currentSelection == Selection.NULL_SELECTION) ?
-						null : getSelection().getSelectedNode();
-			IJpaFile currentFile = 
-				(currentNode == null) ? 
-						null : currentNode.getJpaFile();
-			
-			if (newFile.equals(currentFile)) {
-				viewer.setSelection(new StructuredSelection(newNode), true);
-			}
-			else if (currentFile != null &&  newFile.getContentId().equals(currentFile.getContentId())) {
-				viewer.setInput(newFile.getContent());
-				viewer.setSelection(new StructuredSelection(newNode), true);
-			}
-			else {
-				// new content type
-				// replace composite and set selection of tree
-				IJpaStructureProvider provider = getStructureProvider(newNode);
-				
-				if (provider == null) {
-					clearViewer();
-				}
-				else {
-					viewer.setContentProvider(provider.buildContentProvider());
-					viewer.setLabelProvider(provider.buildLabelProvider());
-					viewer.setInput(newFile.getContent());
-				}
-			}
-		}
-		
-		private void clearViewer() {
-			viewer.setContentProvider(NullTreeContentProvider.INSTANCE);
-			viewer.setLabelProvider(NullLabelProvider.INSTANCE);
-			viewer.setInput(null);
-		}
-		
-		private IJpaStructureProvider getStructureProvider(IJpaContentNode contentNode) {
-			String contentId = contentNode.getJpaFile().getContentId();
-			IJpaStructureProvider provider = 
-				(IJpaStructureProvider) structureProviders.get(contentId);
-			
-			if (provider == null) {
-				String vendorId = contentNode.getJpaProject().getPlatform().getId();
-				IJpaPlatformUi jpaPlatformUI = PlatformRegistry.INSTANCE.getJpaPlatform(vendorId);
-				for (IJpaStructureProvider p : jpaPlatformUI.structureProviders()) {
-					if (p.fileContentType().equals(contentId)) {
-						provider = p;
-						break;
-					}
-				}
-				
-				//TODO this view and the detailsProviders Map is not created on a per project basis.
-				//the detailsProviders and their fileContentTypes could overlap across project, this would cause problems with storing this map.				
-				if (provider != null) {
-					structureProviders.put(contentId, provider);
-				}
-			}
-			
-			return provider;	
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/CComboViewer.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/CComboViewer.java
deleted file mode 100644
index f4dadd0..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/CComboViewer.java
+++ /dev/null
@@ -1,151 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.widgets;
-import org.eclipse.jface.viewers.AbstractListViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-//bug #69254 is why i created this class, it is a copy of ComboViwer but using a CCombo
-
-/**
- * A concrete viewer based on an SWT <code>Combo</code> control. This class is intended
- * as an alternative to the JFace <code>ListViewer</code>, which displays its content
- * in a combo box rather than a list. Wherever possible, this class attempts to behave
- * like ListViewer. <p>
- * 
- * This class is designed to be instantiated with a pre-existing SWT combo control 
- * and configured with a domain-specific content provider, label provider, element
- * filter (optional), and element sorter (optional).
- * </p>
- * 
- * @see org.eclipse.jface.viewers.ListViewer
- * @since 3.0
- */
-public final class CComboViewer extends AbstractListViewer {
-
-    /**
-     * This viewer's list control.
-     */
-    private CCombo combo;
-
-    /**
-     * Creates a combo viewer on a newly-created combo control under the given parent.
-     * The viewer has no input, no content provider, a default label provider, 
-     * no sorter, and no filters.
-     *
-     * @param parent the parent control
-     */
-    public CComboViewer(Composite parent) {
-        this(parent, SWT.READ_ONLY | SWT.BORDER);
-    }
-
-    /**
-     * Creates a combo viewer on a newly-created combo control under the given parent.
-     * The combo control is created using the given SWT style bits.
-     * The viewer has no input, no content provider, a default label provider, 
-     * no sorter, and no filters.
-     *
-     * @param parent the parent control
-     * @param style the SWT style bits
-     */
-    public CComboViewer(Composite parent, int style) {
-        this(new CCombo(parent, style));
-    }
-
-    /**
-     * Creates a combo viewer on the given combo control.
-     * The viewer has no input, no content provider, a default label provider, 
-     * no sorter, and no filters.
-     *
-     * @param list the combo control
-     */
-    public CComboViewer(CCombo list) {
-        this.combo = list;
-        hookControl(list);
-    }
-
-    protected void listAdd(String string, int index) {
-        combo.add(string, index);
-    }
-
-    protected void listSetItem(int index, String string) {
-        combo.setItem(index, string);
-    }
-
-    protected int[] listGetSelectionIndices() {
-        return new int[] { combo.getSelectionIndex() };
-    }
-
-    protected int listGetItemCount() {
-        return combo.getItemCount();
-    }
-
-    protected void listSetItems(String[] labels) {
-        combo.setItems(labels);
-    }
-
-    protected void listRemoveAll() {
-        combo.removeAll();
-    }
-
-    protected void listRemove(int index) {
-        combo.remove(index);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on Viewer.
-     */
-    public Control getControl() {
-        return combo;
-    }
-
-    /**
-     * Returns this list viewer's list control.
-     *
-     * @return the list control
-     */
-    public CCombo getCombo() {
-        return combo;
-    }
-
-    /*
-     * Do nothing -- combos only display the selected element, so there is no way
-     * we can ensure that the given element is visible without changing the selection.
-     * Method defined on StructuredViewer.
-     */
-    public void reveal(Object element) {
-        return;
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.viewers.AbstractListViewer#listSelectAndShow(int[])
-     */
-    protected void listSetSelection(int[] ixs) {
-        for (int idx = 0; idx < ixs.length; idx++) {
-            combo.select(ixs[idx]);
-        }
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.viewers.AbstractListViewer#listDeselectAll()
-     */
-    protected void listDeselectAll() {
-        combo.deselectAll();
-        combo.clearSelection();
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.viewers.AbstractListViewer#listShowSelection()
-     */
-    protected void listShowSelection() {
-
-    }
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/ScrolledPageContent.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/ScrolledPageContent.java
deleted file mode 100644
index ce6d25d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/ScrolledPageContent.java
+++ /dev/null
@@ -1,62 +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.ui.internal.widgets;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.forms.FormColors;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.SharedScrolledComposite;
-
-//copied from package org.eclipse.jdt.internal.ui.preferences;
-public class ScrolledPageContent extends SharedScrolledComposite {
-
-	private FormToolkit fToolkit;
-	
-	public ScrolledPageContent(Composite parent) {
-		this(parent, SWT.V_SCROLL | SWT.H_SCROLL);
-	}
-	
-	public ScrolledPageContent(Composite parent, int style) {
-		super(parent, style);
-		
-		setFont(parent.getFont());
-		
-		FormColors colors= new FormColors(parent.getDisplay());
-		colors.setBackground(null);
-		colors.setForeground(null);
-		
-		fToolkit= new FormToolkit(colors);
-		
-		setExpandHorizontal(true);
-		setExpandVertical(true);
-		
-		Composite body= new Composite(this, SWT.NONE);
-		body.setFont(parent.getFont());
-		setContent(body);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.swt.widgets.Widget#dispose()
-	 */
-	public void dispose() {
-		fToolkit.dispose();
-		super.dispose();
-	}
-	
-	public void adaptChild(Control childControl) {
-		fToolkit.adapt(childControl, true, true);
-	}
-	
-	public Composite getBody() {
-		return (Composite) getContent();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/DatabaseReconnectWizardPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/DatabaseReconnectWizardPage.java
deleted file mode 100644
index 337fe0c..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/DatabaseReconnectWizardPage.java
+++ /dev/null
@@ -1,361 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.wizards;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.db.internal.Connection;
-import org.eclipse.jpt.db.internal.ConnectionListener;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.ConnectionProfileRepository;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.JptDbPlugin;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.db.ui.internal.DTPUiTools;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-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.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.ui.PlatformUI;
-
-public class DatabaseReconnectWizardPage extends WizardPage {
-	private IJpaProject jpaProject;
-
-	private Connection connection;
-	private ConnectionListener connectionListener;
-	private DatabaseGroup databaseGroup;
-
-	public DatabaseReconnectWizardPage( IJpaProject jpaProject) {
-		super( "Database Settings"); //$NON-NLS-1$
-		this.jpaProject = jpaProject;
-		setTitle( JptUiMessages.DatabaseReconnectWizardPage_databaseConnection);
-		setMessage( JptUiMessages.DatabaseReconnectWizardPage_reconnectToDatabase);
-	}
-
-	public void createControl( Composite parent) {
-		this.setPageComplete( false);
-		Composite top = this.createTopLevelComposite( parent);
-		this.setControl( top);
-	}
-
-	protected Composite createTopLevelComposite( Composite parent) {
-		Composite composite = new Composite( parent, SWT.NULL);
-		GridLayout layout = new GridLayout();
-		composite.setLayout( layout);
-		this.databaseGroup = new DatabaseGroup( composite);
-		Dialog.applyDialogFont( parent);
-		// TODO Add Help - testing
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IJpaHelpContextIds.PROPERTIES_JAVA_PERSISTENCE_CONNECTION);
-		return composite;
-	}
-
-	private Label createLabel( Composite container, int span, String text) {
-		Label label = new Label( container, SWT.NONE);
-		label.setText( text);
-		GridData gd = new GridData();
-		gd.horizontalIndent = 30;
-		gd.horizontalSpan = span;
-		label.setLayoutData( gd);
-		return label;
-	}
-
-	private Combo createCombo( Composite container, boolean fillHorizontal) {
-		Combo combo = new Combo( container, SWT.BORDER | SWT.SINGLE);
-		if ( fillHorizontal) {
-			combo.setLayoutData( new GridData( GridData.FILL_HORIZONTAL));
-		}
-		else {
-			combo.setLayoutData( new GridData());
-		}
-		return combo;
-	}
-
-	/**
-	 * Initialize a grid layout with the default Dialog settings.
-	 */
-	protected GridLayout initGridLayout( GridLayout layout, boolean margins) {
-		layout.horizontalSpacing = this.convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING);
-		layout.verticalSpacing = this.convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_SPACING);
-		if ( margins) {
-			layout.marginWidth = this.convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN);
-			layout.marginHeight = this.convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN);
-		}
-		else {
-			layout.marginWidth = 0;
-			layout.marginHeight = 0;
-		}
-		return layout;
-	}
-
-	public Collection<Table> getTables() {
-		Schema schema = this.getProjectUserSchema();
-		if ( schema != null && schema.getName() != null) {
-			return CollectionTools.collection( schema.tables());
-		}
-		return Collections.<Table>emptyList();
-	}
-
-	private void updateGenerateEntitiesPage( Schema schema) {
-		GenerateEntitiesWizard generateEntitiesWizard = (( GenerateEntitiesWizard) this.getWizard());
-		generateEntitiesWizard.updatePossibleTables( CollectionTools.collection( schema.tables()));
-	}
-
-	public void dispose() {
-		this.removeConnectionListener();
-		super.dispose();
-	}
-
-	private void removeConnectionListener() {
-		if ( this.connectionListener != null) {
-			if ( this.connection != null) {
-				this.connection.removeConnectionListener( this.connectionListener);
-			}
-			this.connectionListener = null;
-		}
-	}
-	
-
-	ConnectionProfile getProjectConnectionProfile() {
-		String profileName = this.jpaProject.getDataSource().getConnectionProfileName();
-		return JptDbPlugin.getDefault().getConnectionProfileRepository().profileNamed( profileName);
-	}
-	
-	Schema getProjectUserSchema() {
-		ConnectionProfile profile = this.getProjectConnectionProfile();
-		return profile.getDatabase().schemaNamed( profile.getUserName());
-	}
-
-	// ********** member classes **********
-
-	private final class DatabaseGroup {
-		private final Group group;
-		private final Label connectionLabel;
-		private final Combo connectionCombo;
-		private final Label schemaLabel;
-		private final Combo schemaCombo;
-		private final Label schemaInfoLabel;
-		
-		private Link addConnectionLink;
-		private Link reconnectLink;
-
-		public DatabaseGroup( Composite composite) {
-			this.group = new Group( composite, SWT.NONE);
-			GridLayout layout = new GridLayout();
-			layout.numColumns = 2;
-			this.group.setLayout( layout);
-			this.group.setLayoutData( new GridData( GridData.FILL_HORIZONTAL));
-			this.group.setText( JptUiMessages.DatabaseReconnectWizardPage_database);
-			//TODO Add Help
-//			PlatformUI.getWorkbench().getHelpSystem().setHelp( this.group, IDaliHelpContextIds.XXX);
-			this.connectionLabel = createLabel( this.group, 1, JptUiMessages.DatabaseReconnectWizardPage_connection);
-			this.connectionCombo = createCombo( this.group, true);
-			this.connectionCombo.addSelectionListener( new SelectionAdapter() {
-				public void widgetDefaultSelected( SelectionEvent e) {
-					widgetSelected( e);
-				}
-
-				public void widgetSelected( SelectionEvent e) {
-					handleConnectionChange();
-				}
-			});
-			this.schemaLabel = createLabel( this.group, 1, JptUiMessages.DatabaseReconnectWizardPage_schema);
-			this.schemaCombo = createCombo( this.group, true);
-			this.schemaCombo.addSelectionListener( new SelectionAdapter() {
-				public void widgetDefaultSelected( SelectionEvent e) {
-					widgetSelected( e);
-				}
-
-				public void widgetSelected( SelectionEvent e) {
-					handleSchemaChange();
-				}
-			});
-			schemaInfoLabel = createLabel( this.group, 2, JptUiMessages.DatabaseReconnectWizardPage_schemaInfo);
-			this.addConnectionLink = new Link( this.group, SWT.NONE);
-			GridData data = new GridData( GridData.END, GridData.CENTER, false, false);
-			data.horizontalSpan = 2;
-			this.addConnectionLink.setLayoutData( data);
-			this.addConnectionLink.setText( JptUiMessages.DatabaseReconnectWizardPage_addConnectionLink);
-			this.addConnectionLink.addSelectionListener( new SelectionAdapter() {
-				public void widgetSelected( SelectionEvent e) {
-					openNewConnectionWizard();
-				}
-			});
-			this.reconnectLink = new Link( this.group, SWT.NONE);
-			data = new GridData( GridData.END, GridData.CENTER, false, false);
-			data.horizontalSpan = 2;
-			this.reconnectLink.setLayoutData( data);
-			this.reconnectLink.setText( JptUiMessages.DatabaseReconnectWizardPage_reconnectLink);
-			this.reconnectLink.setEnabled( false);
-			this.reconnectLink.addSelectionListener( new SelectionAdapter() {
-				public void widgetSelected( SelectionEvent e) {
-					openConnectionProfileNamed( connectionCombo.getText());
-				}
-			});
-			this.populateConnectionCombo();
-			this.populateSchemaCombo();
-		}
-
-		private ConnectionProfile getConnectionProfileNamed( String profileName) {
-			return JptDbPlugin.getDefault().getConnectionProfileRepository().profileNamed( profileName);
-		}
-		
-		private Iterator<String> dtpConnectionProfileNames() {
-			return JptDbPlugin.getDefault().getConnectionProfileRepository().profileNames();
-		}
-
-		private String getProjectConnectionProfileName() {
-			return jpaProject.getDataSource().getConnectionProfileName();
-		}
-		
-		Schema getProjectUserSchema() {
-			ConnectionProfile profile = getProjectConnectionProfile();
-			return profile.getDatabase().schemaNamed( profile.getUserName());
-		}
-
-		private void openConnectionProfileNamed( String connectionProfileName) {
-			if( DatabaseReconnectWizardPage.this.connection != null) {
-				DatabaseReconnectWizardPage.this.removeConnectionListener();
-			}
-			ConnectionProfile profile = JptDbPlugin.getDefault().getConnectionProfileRepository().profileNamed( connectionProfileName);
-			profile.connect();
-			DatabaseReconnectWizardPage.this.connection = profile.getConnection();
-			if( DatabaseReconnectWizardPage.this.connection != null) {
-				this.populateSchemaCombo();
-				DatabaseReconnectWizardPage.this.connectionListener = this.buildConnectionListener();
-				DatabaseReconnectWizardPage.this.connection.addConnectionListener( DatabaseReconnectWizardPage.this.connectionListener);
-			}
-			return;
-		}
-		
-		private void populateConnectionCombo() {
-			// clear out connection entries from previous login.
-			this.connectionCombo.removeAll();
-			for ( Iterator<String> i = CollectionTools.sort( this.dtpConnectionProfileNames()); i.hasNext();) {
-				this.connectionCombo.add( ( String) i.next());
-			}
-
-			String connectionName = getProjectConnectionProfileName();
-			if ( !StringTools.stringIsEmpty( connectionName)) {
-				this.connectionCombo.select( connectionCombo.indexOf( connectionName));
-				this.reconnectLink.setEnabled( true);
-			}
-		}
-
-		private void handleConnectionChange() {
-			this.reconnectLink.setEnabled( true);
-			this.populateSchemaCombo();
-		}
-
-		private void handleSchemaChange() {
-			ConnectionProfile connectionProfile = this.getConnectionProfileNamed( getConnectionProfileName());
-			Schema schema =  connectionProfile.getDatabase().schemaNamed( this.getSchemaName());
-			DatabaseReconnectWizardPage.this.updateGenerateEntitiesPage( schema);
-			DatabaseReconnectWizardPage.this.setPageComplete( true);
-		}
-
-		private void populateSchemaCombo() {
-			// clear out schema entries from previous connection selection
-			this.schemaCombo.removeAll();
-			ConnectionProfile connectionProfile = this.getConnectionProfileNamed( getConnectionProfileName());
-			for ( Iterator<String> stream = CollectionTools.sort( connectionProfile.getDatabase().schemaNames()); stream.hasNext();) {
-				this.schemaCombo.add( ( String) stream.next());
-			}
-			// set login user name as default schema
-			Schema schema = this.getProjectUserSchema();
-			if ( schema != null && schema.getName() != null) {
-				schema =  connectionProfile.getDatabase().schemaNamed( schema.getName()); // verify schema exist
-				if ( schema != null) {
-					this.schemaCombo.select( this.schemaCombo.indexOf( schema.getName()));
-					updateGenerateEntitiesPage( schema);
-					setPageComplete( true);
-				}
-			}
-		}
-
-		private String getConnectionProfileName() {
-			return this.connectionCombo.getText();
-		}
-
-		private String getSchemaName() {
-			return this.schemaCombo.getText();
-		}
-
-		private void openNewConnectionWizard() {
-			String addedProfileName = DTPUiTools.createNewProfile();
-			  
-			ConnectionProfile addedProfile = ConnectionProfileRepository.instance().profileNamed( addedProfileName);
-		
-			if( !addedProfile.isNull()) {
-				this.populateConnectionCombo();
-				this.connectionCombo.select( connectionCombo.indexOf( addedProfile.getName()));
-				this.handleConnectionChange();
-			}
-		}
-
-		private ConnectionListener buildConnectionListener() {
-			return new ConnectionListener() {
-
-				public void modified( Connection connection) {
-				// not interested to this event.
-				}
-
-				public boolean okToClose( Connection connection) {
-				// not interested to this event.
-					return true;
-				}
-
-				public void opened( Connection connection) {
-					if( DatabaseReconnectWizardPage.this.connection.equals( connection)) {
-						DatabaseGroup.this.populateSchemaCombo();
-					}
-				}
-
-				public void aboutToClose( Connection connection) {
-					if( DatabaseReconnectWizardPage.this.connection.equals( connection)) {
-						DatabaseReconnectWizardPage.this.removeConnectionListener();
-					}
-				}
-
-				public void closed( Connection connection) {
-				// not interested to this event.
-				}
-
-				public void databaseChanged(Connection connection, final Database database) {
-				// not interested to this event.
-				}
-
-				public void schemaChanged(Connection connection, final Schema schema) {
-				// not interested to this event.
-				}
-
-				public void tableChanged(Connection connection, final Table table) {
-				// not interested to this event.
-				}
-			};
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/GenerateEntitiesWizard.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/GenerateEntitiesWizard.java
deleted file mode 100644
index 65c7177..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/GenerateEntitiesWizard.java
+++ /dev/null
@@ -1,169 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.wizards;
-
-import java.util.Collection;
-import java.util.Collections;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jpt.core.internal.IJpaProject;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.gen.internal.EntityGenerator;
-import org.eclipse.jpt.gen.internal.PackageGenerator;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-
-public class GenerateEntitiesWizard extends Wizard {	
-
-	private IJpaProject jpaProject;
-
-	private IStructuredSelection selection;
-
-	/** this page is only built when the project is not connected to the db */
-	private DatabaseReconnectWizardPage dbSettingsPage;
-
-	private GenerateEntitiesWizardPage generateEntitiesPage;
-
-	private PackageGenerator.Config packageGeneratorConfig;
-
-	private EntityGenerator.Config entityGeneratorConfig;
-
-	private boolean synchronizePersistenceXml;
-	
-	private Collection<Table> selectedTables;
-
-	public GenerateEntitiesWizard( IJpaProject jpaProject, IStructuredSelection selection) {
-		super();
-		this.jpaProject = jpaProject;
-		this.selection = selection;
-		this.packageGeneratorConfig = new PackageGenerator.Config();
-		this.entityGeneratorConfig = new EntityGenerator.Config();
-		this.setWindowTitle( JptUiMessages.GenerateEntitiesWizard_generateEntities);
-	}
-	
-	public void addPages() {
-		super.addPages();
-		if ( ! this.jpaProjectIsConnected() ||  ! this.projectUserSchemaExists()) {
-			this.dbSettingsPage = new DatabaseReconnectWizardPage( this.jpaProject);
-			this.addPage(this.dbSettingsPage);
-		}
-		this.generateEntitiesPage = new GenerateEntitiesWizardPage();
-		this.addPage( this.generateEntitiesPage);
-		this.generateEntitiesPage.init( this.selection);
-	}
-	
-	public boolean performFinish() {
-		this.packageGeneratorConfig.setPackageFragment( this.buildPackageFragment());
-
-		this.entityGeneratorConfig.setConvertToCamelCase( this.generateEntitiesPage.convertToCamelCase());
-		this.entityGeneratorConfig.setFieldAccessType( this.generateEntitiesPage.fieldAccessType());
-		this.entityGeneratorConfig.setCollectionTypeName( this.generateEntitiesPage.getCollectionTypeName());
-		this.entityGeneratorConfig.setFieldVisibility( this.generateEntitiesPage.getFieldVisibility());
-		this.entityGeneratorConfig.setMethodVisibility( this.generateEntitiesPage.getMethodVisibility());
-		this.entityGeneratorConfig.setGenerateGettersAndSetters( this.generateEntitiesPage.generateGettersAndSetters());
-		this.entityGeneratorConfig.setGenerateDefaultConstructor( this.generateEntitiesPage.generateDefaultConstructor());
-		this.entityGeneratorConfig.setSerializable( this.generateEntitiesPage.serializable());
-		this.entityGeneratorConfig.setGenerateSerialVersionUID( this.generateEntitiesPage.generateSerialVersionUID());
-		this.entityGeneratorConfig.setGenerateEmbeddedIdForCompoundPK( this.generateEntitiesPage.generateEmbeddedIdForCompoundPK());
-		this.entityGeneratorConfig.setOverrideEntityNames( this.generateEntitiesPage.getOverrideEntityNames());
-
-		this.synchronizePersistenceXml = this.generateEntitiesPage.synchronizePersistenceXml();
-		
-		this.selectedTables = this.generateEntitiesPage.getSelectedTables();
-		return true;
-	}
-	
-	private IPackageFragment buildPackageFragment() {
-		IPackageFragmentRoot packageFragmentRoot = this.generateEntitiesPage.getPackageFragmentRoot();
-		IPackageFragment packageFragment = this.generateEntitiesPage.getPackageFragment();
-		
-		if ( packageFragment == null) {
-			packageFragment= packageFragmentRoot.getPackageFragment( ""); //$NON-NLS-1$
-		}
-		
-		if ( packageFragment.exists()) {
-			return packageFragment;
-		}
-
-		try {
-			return packageFragmentRoot.createPackageFragment( packageFragment.getElementName(), true, null);
-		} 
-		catch ( JavaModelException ex) {
-			throw new RuntimeException( ex);
-		}
-	}
-	
-	Collection<Table> getPossibleTables() {
-		if ( this.dbSettingsPage != null) {
-			return this.dbSettingsPage.getTables();
-		}
-		return ( this.projectUserSchemaExists()) ? CollectionTools.collection( this.getProjectUserSchema().tables()) : Collections.<Table>emptyList();
-	}
-	
-	ConnectionProfile getProjectConnectionProfile() {
-		return this.jpaProject.connectionProfile();
-	}
-	
-	IJpaProject getJpaProject(){
-		return this.jpaProject;
-	}
-	
-	Schema getProjectUserSchema() {
-		ConnectionProfile profile = this.getProjectConnectionProfile();
-		return profile.getDatabase().schemaNamed( profile.getUserName());
-	}
-	
-	public PackageGenerator.Config getPackageGeneratorConfig() {
-		return this.packageGeneratorConfig;
-	}
-
-	public EntityGenerator.Config getEntityGeneratorConfig() {
-		return this.entityGeneratorConfig;
-	}
-
-	public Collection<Table> getSelectedTables() {
-		return this.selectedTables;
-	}
-	
-	public boolean synchronizePersistenceXml(){
-		return this.synchronizePersistenceXml;
-	}
-	
-    public boolean canFinish() {
-        boolean canFinish = true;
-        if ( ! this.generateEntitiesPage.isPageComplete()) {
-        	canFinish = false;
-        }
-        return canFinish;
-    }
-    
-	private boolean jpaProjectIsConnected() {
-		return this.getProjectConnectionProfile().isConnected();
-	}
-
-	private boolean projectUserSchemaExists() {
-		return ( this.getProjectUserSchema() != null);
-	}
-	
-	/**
-	 * updatePossibleTables is called when schemaÂ’s PossibleTables changed.
-	 * The dbSettingsPage is mainly the source of changes, 
-	 * and the generateEntitiesPage needs to be kept in sync.
-	 */
-	void updatePossibleTables( Collection<Table> possibleTables) {
-		this.generateEntitiesPage.updateTablesListViewer( possibleTables);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/GenerateEntitiesWizardPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/GenerateEntitiesWizardPage.java
deleted file mode 100644
index 2a00d5c..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/GenerateEntitiesWizardPage.java
+++ /dev/null
@@ -1,539 +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
- ******************************************************************************/   
-package org.eclipse.jpt.ui.internal.wizards;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jpt.ui.internal.util.SWTUtil;
-import org.eclipse.jpt.ui.internal.util.TableLayoutComposite;
-import org.eclipse.jdt.ui.wizards.NewTypeWizardPage;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ColumnWeightData;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.ICellModifier;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.gen.internal.EntityGenerator;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-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.Group;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.ui.PlatformUI;
-
-// TODO determine name collisions
-class GenerateEntitiesWizardPage extends NewTypeWizardPage {
-
-	CheckboxTableViewer tableTable;
-
-	private boolean convertToCamelCase = true;
-	private boolean fieldAccessType = true;
-	private String collectionTypeName = Set.class.getName();
-	private int fieldVisibility = EntityGenerator.Config.PRIVATE;
-	private int methodVisibility = EntityGenerator.Config.PUBLIC;
-	private boolean generateGettersAndSetters = true;
-	private boolean generateDefaultConstructor = true;
-	private boolean serializable = true;
-	private boolean generateSerialVersionUID = true;
-	private boolean generateEmbeddedIdForCompoundPK = true;
-	private boolean synchronizePersistenceXml = false;
-	private Map<Table, String> overrideEntityNames;
-	
-	static final String[] TABLE_TABLE_COLUMN_PROPERTIES = { "table", "entityName" };
-	private static final int TABLE_COLUMN_INDEX = 0;
-	private static final int ENTITY_NAME_COLUMN_INDEX = 1;
-	
-
-	GenerateEntitiesWizardPage() {
-		super(true, "Generate Entities"); //$NON-NLS-1$
-		setTitle(JptUiMessages.GenerateEntitiesWizardPage_generateEntities);
-		setMessage(JptUiMessages.GenerateEntitiesWizardPage_chooseEntityTable);
-	}
-	
-	// -------- Initialization ---------
-	/**
-	 * The wizard owning this page is responsible for calling this method with the
-	 * current selection. The selection is used to initialize the fields of the wizard 
-	 * page.
-	 * 
-	 * @param selection used to initialize the fields
-	 */
-	void init(IStructuredSelection selection) {
-		IJavaElement jelem= getInitialJavaElement(selection);
-		initContainerPage(jelem);
-		initTypePage(jelem);
-		doStatusUpdate();
-	}
-
-	public void createControl(Composite parent) {
-		Composite composite = new Composite(parent, SWT.NULL);
-		int nColumns= 4;
-		GridLayout layout = new GridLayout();
-		layout.numColumns = nColumns;
-		composite.setLayout(layout);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IJpaHelpContextIds.DIALOG_GENERATE_ENTITIES);
-		
-		createContainerControls(composite, nColumns);	
-		createPackageControls(composite, nColumns);	
-		
-		final Button synchronizeClassesCheckBox = new Button(composite, SWT.CHECK);
-		synchronizeClassesCheckBox.setText(JptUiMessages.GenerateEntitiesWizardPage_synchronizeClasses);
-		synchronizeClassesCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				setSynchronizePersistenceXml(synchronizeClassesCheckBox.getSelection());
-			}
-		});
-		
-		Group tablesGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
-		tablesGroup.setLayout(new GridLayout(2, false));
-		tablesGroup.setText(JptUiMessages.GenerateEntitiesWizardPage_tables);
-		GridData data = new GridData();
-		data.horizontalSpan = 4;
-		data.verticalAlignment = SWT.FILL;
-		data.horizontalAlignment = SWT.FILL;
-		data.grabExcessHorizontalSpace = true;
-		data.grabExcessVerticalSpace = true;
-		tablesGroup.setLayoutData(data);
-		
-		createTablesSelectionControl(tablesGroup);
-		createButtonComposite(tablesGroup);
-		
-		GenerateEntitiesWizard generateEntitiesWizard = ((GenerateEntitiesWizard)this.getWizard());
-		Collection<Table> possibleTables = generateEntitiesWizard.getPossibleTables();
-		initTablesSelectionControl(possibleTables);
-		
-		//set initial selection state of the synchronize classes checkbox
-		synchronizeClassesCheckBox.setSelection(!generateEntitiesWizard.getJpaProject().isDiscoverAnnotatedClasses());
-		setSynchronizePersistenceXml(synchronizeClassesCheckBox.getSelection());
-		
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this.tableTable.getControl(), IJpaHelpContextIds.DIALOG_GENERATE_ENTITIES_TABLES);
-		
-		setControl(composite);
-		this.setPageComplete( false);
-	}
-
-	private void selectAllTables(){
-		this.tableTable.setAllChecked(true);
-		doStatusUpdate();
-	}
-	
-	private void deselectAllTables(){
-		this.tableTable.setAllChecked(false);
-		doStatusUpdate();
-	}
-	
-	private void initTablesSelectionControl(Collection<Table> possibleTables) {
-		this.overrideEntityNames = new HashMap<Table, String>(possibleTables.size());
-		this.tableTable.setInput(possibleTables);
-	}
-
-	private void createTablesSelectionControl(Composite parent) {
-		TableLayoutComposite layout= new TableLayoutComposite(parent, SWT.NONE);
-		addColumnLayoutData(layout);
-		
-		final org.eclipse.swt.widgets.Table table = new org.eclipse.swt.widgets.Table(layout, SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER | SWT.CHECK);
-		table.setHeaderVisible(true);
-		table.setLinesVisible(true);
-		
-		TableColumn tableNameColumn = new TableColumn(table, SWT.NONE, TABLE_COLUMN_INDEX);
-		tableNameColumn.setText(JptUiMessages.GenerateEntitiesWizardPage_tableColumn);
-		tableNameColumn.setResizable(true);
-
-		TableColumn entityNameColumn = new TableColumn(table, SWT.NONE, ENTITY_NAME_COLUMN_INDEX);
-		entityNameColumn.setText(JptUiMessages.GenerateEntitiesWizardPage_entityNameColumn);
-		entityNameColumn.setResizable(true);
-		
-		GridData gd= new GridData(GridData.FILL_BOTH);
-		gd.heightHint= SWTUtil.getTableHeightHint(table, 20);
-		gd.widthHint = 600;
-		layout.setLayoutData(gd);
-
-		this.tableTable = new CheckboxTableViewer(table);
-		this.tableTable.setUseHashlookup(true);
-		this.tableTable.setLabelProvider(this.buildTableTableLabelProvider());
-		this.tableTable.setContentProvider(this.buildTableTableContentProvider());
-		this.tableTable.setSorter(new ViewerSorter() {
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				return ((Table) e1).getName().compareTo(((Table) e2).getName());
-			}
-		});
-		
-		this.tableTable.addPostSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				handleTablesListSelectionChanged(event);
-			}
-		});
-		
-		table.addKeyListener(new KeyAdapter() {
-			public void keyPressed(KeyEvent e) {
-				if (e.keyCode == SWT.F2 && e.stateMask == SWT.NONE) {
-					editEntityNameIfPossible();
-					e.doit= false;
-				}
-			}
-		});
-		
-		this.addCellEditors();
-	}
-	
-	private void createButtonComposite(Group tablesGroup){
-		
-		Composite buttonComposite = new Composite(tablesGroup, SWT.NULL);
-		GridLayout buttonLayout = new GridLayout(1, false);
-		buttonComposite.setLayout(buttonLayout);
-		GridData data =  new GridData();
-		data.horizontalAlignment = GridData.FILL;
-		data.verticalAlignment = GridData.BEGINNING;
-		buttonComposite.setLayoutData(data);
-		
-		Button selectAllButton = new Button(buttonComposite, SWT.PUSH);
-		selectAllButton.setText(JptUiMessages.General_selectAll);
-		GridData gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		selectAllButton.setLayoutData(gridData);
-		selectAllButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				selectAllTables();
-				
-			}
-		});
-		
-		Button deselectAllButton = new Button(buttonComposite, SWT.PUSH);
-		deselectAllButton.setText(JptUiMessages.General_deselectAll);
-		gridData =  new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		deselectAllButton.setLayoutData(gridData);
-		deselectAllButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
-		
-			public void widgetSelected(SelectionEvent e) {
-				deselectAllTables();
-			}
-		});
-	}
-	
-	
-	private void addColumnLayoutData(TableLayoutComposite layout) {
-		layout.addColumnData(new ColumnWeightData(50, true));
-		layout.addColumnData(new ColumnWeightData(50, true));
-	}
-
-	void editEntityNameIfPossible(){
-		Object[] selected = ((IStructuredSelection) this.tableTable.getSelection()).toArray();
-		if (selected.length != 1) {
-			return;
-		}
-		this.tableTable.editElement(selected[0], ENTITY_NAME_COLUMN_INDEX);
-	}
-	
-	private void addCellEditors() {
-		this.tableTable.setColumnProperties(TABLE_TABLE_COLUMN_PROPERTIES);
-		
-		TextCellEditor[] editors = new TextCellEditor[TABLE_TABLE_COLUMN_PROPERTIES.length];
-		editors[ENTITY_NAME_COLUMN_INDEX]= new TextCellEditor(this.tableTable.getTable(), SWT.SINGLE);
-		
-		this.tableTable.setCellEditors(editors);
-		this.tableTable.setCellModifier(this.buildTableTableCellModifier());
-	}
-
-	void handleTablesListSelectionChanged(SelectionChangedEvent event) {
-		this.setPageComplete(true);
-		if ( ! this.hasTablesSelected()) {
-			this.setPageComplete(false);
-		}
-	}
-	
-	private IBaseLabelProvider buildTableTableLabelProvider() {
-		return new TableTableLabelProvider();
-	}
-	
-	private IContentProvider buildTableTableContentProvider() {
-		return new TableTableContentProvider();
-	}
-	
-	private ICellModifier buildTableTableCellModifier() {
-		return new TableTableCellModifier();
-	}
-	
-	Collection<Table> getSelectedTables() {
-		ArrayList<Table> selectedTables = new ArrayList<Table>();
-		for (Object selectedTable : this.tableTable.getCheckedElements())
-			selectedTables.add((Table) selectedTable);
-		return selectedTables;
-	}
-	
-	private boolean hasTablesSelected() {
-		return (this.tableTable != null) ? (this.getSelectedTables().size() > 0) : false;
-	}
-	
-	void updateTablesListViewer(Collection<Table> possibleTables) {
-		if (this.tableTable != null) {
-			this.initTablesSelectionControl(possibleTables);
-		}
-	}
-
-	private void doStatusUpdate() {
-		// status of all used components
-		IStatus[] status= new IStatus[] {
-			fContainerStatus,
-			fPackageStatus
-		};
-		// the mode severe status will be displayed and the OK button enabled/disabled.
-		this.updateStatus(status);
-	}
-	
-	/**
-	 * Update the status line and the OK button according to the given status
-	 */
-	protected void updateStatus(IStatus status) {
-		super.updateStatus(status);
-		if (this.isPageComplete() && ! this.hasTablesSelected()) {
-			this.setPageComplete(false);
-		}
-	}
-
-	String entityName(Table table) {
-		String overrideEntityName = (String) this.overrideEntityNames.get(table);
-		return (overrideEntityName != null) ? overrideEntityName : this.defaultEntityName(table);
-	}
-
-	private String defaultEntityName(Table table) {
-		String entityName = table.shortJavaClassName();
-		if (this.convertToCamelCase) {
-			entityName = StringTools.convertUnderscoresToCamelCase(entityName);
-		}
-		return entityName;
-	}
-
-	void setOverrideEntityName(Table table, String name) {
-		if (table.shortJavaClassName().equals(name)) {
-			this.overrideEntityNames.remove(table);
-		} else {
-			this.overrideEntityNames.put(table, name);
-		}
-	}
-
-	boolean convertToCamelCase() {
-		return this.convertToCamelCase;
-	}
-	private void setConvertToCamelCase(boolean convertToCamelCase) {
-		// TODO re-calculate the default entity names if this changes
-		this.convertToCamelCase = convertToCamelCase;
-	}
-
-	boolean fieldAccessType() {
-		return this.fieldAccessType;
-	}
-	private void setFieldAccessType(boolean fieldAccessType) {
-		this.fieldAccessType = fieldAccessType;
-	}
-
-	String getCollectionTypeName() {
-		return this.collectionTypeName;
-	}
-	private void setCollectionTypeName(String collectionTypeName) {
-		this.collectionTypeName = collectionTypeName;
-	}
-
-	int getFieldVisibility() {
-		return this.fieldVisibility;
-	}
-	private void setFieldVisibility(int fieldVisibility) {
-		this.fieldVisibility = fieldVisibility;
-	}
-
-	int getMethodVisibility() {
-		return this.methodVisibility;
-	}
-	private void setMethodVisibility(int methodVisibility) {
-		this.methodVisibility = methodVisibility;
-	}
-
-	boolean generateGettersAndSetters() {
-		return this.generateGettersAndSetters;
-	}
-	private void setGenerateGettersAndSetters(boolean generateGettersAndSetters) {
-		this.generateGettersAndSetters = generateGettersAndSetters;
-	}
-
-	boolean generateDefaultConstructor() {
-		return this.generateDefaultConstructor;
-	}
-	private void setGenerateDefaultConstructor(boolean generateDefaultConstructor) {
-		this.generateDefaultConstructor = generateDefaultConstructor;
-	}
-
-	boolean serializable() {
-		return this.serializable;
-	}
-	private void setSerializable(boolean serializable) {
-		this.serializable = serializable;
-	}
-
-	boolean generateSerialVersionUID() {
-		return this.generateSerialVersionUID;
-	}
-	private void setGenerateSerialVersionUID(boolean generateSerialVersionUID) {
-		this.generateSerialVersionUID = generateSerialVersionUID;
-	}
-
-	boolean generateEmbeddedIdForCompoundPK() {
-		return this.generateEmbeddedIdForCompoundPK;
-	}
-	private void setGenerateEmbeddedIdForCompoundPK(boolean generateEmbeddedIdForCompoundPK) {
-		this.generateEmbeddedIdForCompoundPK = generateEmbeddedIdForCompoundPK;
-	}
-
-	boolean synchronizePersistenceXml() {
-		return this.synchronizePersistenceXml;
-	}
-	
-	private void setSynchronizePersistenceXml(boolean synchronizePersistenceXml){
-		this.synchronizePersistenceXml = synchronizePersistenceXml;
-	}
-	
-	/**
-	 * key = table
-	 * value = override entity name
-	 */
-	Map<Table, String> getOverrideEntityNames() {
-		return this.overrideEntityNames;
-	}
-
-
-	// ********** inner classes **********
-
-	private class TableTableLabelProvider extends LabelProvider implements ITableLabelProvider {
-
-		TableTableLabelProvider() {
-			super();
-		}
-
-		public String getText(Object element) {
-			return ((Table) element).getName();
-		}
-
-		public Image getColumnImage(Object element, int columnIndex) {
-			return null;
-		}
-
-		public String getColumnText(Object element, int columnIndex) {
-			if (element == null) {
-				return null;
-			}
-			switch (columnIndex) {
-				case TABLE_COLUMN_INDEX:
-					return ((Table) element).getName();
-
-				case ENTITY_NAME_COLUMN_INDEX:
-					return GenerateEntitiesWizardPage.this.entityName((Table) element);
-			}
-			throw new IllegalArgumentException("invalid column index: " + columnIndex);
-		}
-
-	}
-
-
-	private class TableTableContentProvider implements IStructuredContentProvider {
-
-		TableTableContentProvider() {
-			super();
-		}
-
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			// do nothing
-		}
-	
-		public void dispose() {
-			// do nothing
-		}
-	
-		public Object[] getElements(Object inputElement) {
-			return ((Collection) inputElement).toArray();
-		}
-
-	}
-
-
-	private class TableTableCellModifier implements ICellModifier {
-
-		TableTableCellModifier() {
-			super();
-		}
-
-		public boolean canModify(Object element, String property) {
-			return property.equals(TABLE_TABLE_COLUMN_PROPERTIES[ENTITY_NAME_COLUMN_INDEX]);
-		}
-
-		public Object getValue(Object element, String property) {
-			if (property.equals(TABLE_TABLE_COLUMN_PROPERTIES[ENTITY_NAME_COLUMN_INDEX])) {
-				return GenerateEntitiesWizardPage.this.entityName((Table) element);
-			}
-			return null;
-		}
-
-		public void modify(Object element, String property, Object value) {
-			if (element instanceof TableItem) {
-				element= ((TableItem) element).getData();
-			}
-			if ( ! (element instanceof Table)) {
-				return;
-			}
-
-			boolean unchanged = false;
-			Table table = (Table) element;
-			if (property.equals(TABLE_TABLE_COLUMN_PROPERTIES[ENTITY_NAME_COLUMN_INDEX])) {
-				unchanged = GenerateEntitiesWizardPage.this.entityName(table).equals(value);
-				GenerateEntitiesWizardPage.this.setOverrideEntityName(table, (String) value);
-			}
-			if (! unchanged) {
-				GenerateEntitiesWizardPage.this.tableTable.update(table, new String[] { property });
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaFacetWizardPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaFacetWizardPage.java
deleted file mode 100644
index 225c69e..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/JpaFacetWizardPage.java
+++ /dev/null
@@ -1,528 +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.internal.wizards;
-
-import java.util.Iterator;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jdt.internal.ui.preferences.UserLibraryPreferencePage;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jpt.core.internal.JpaPlatformRegistry;
-import org.eclipse.jpt.core.internal.facet.IJpaFacetDataModelProperties;
-import org.eclipse.jpt.db.internal.ConnectionProfileRepository;
-import org.eclipse.jpt.db.ui.internal.DTPUiTools;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.JptUiIcons;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.prefs.JpaPreferencePage;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.PreferencesUtil;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
-import org.eclipse.wst.common.project.facet.ui.internal.AbstractDataModel;
-import org.eclipse.wst.common.project.facet.ui.internal.ChangeTargetedRuntimesDataModel;
-import org.eclipse.wst.common.project.facet.ui.internal.FacetsSelectionPage;
-import org.eclipse.wst.web.ui.internal.wizards.DataModelFacetInstallPage;
-
-public class JpaFacetWizardPage 
-	extends DataModelFacetInstallPage
-	implements IJpaFacetDataModelProperties
-{
-	private PlatformGroup platformGroup;
-	
-	private ConnectionGroup connectionGroup;
-	
-	private ClasspathConfigGroup classpathConfigGroup;
-	
-	private PersistentClassManagementGroup persistentClassManagementGroup;
-	
-	private OrmXmlGroup ormXmlGroup;
-	
-	
-	public JpaFacetWizardPage() {
-		super("jpt.jpa.facet.install.page"); //$NON-NLS-1$
-		setTitle(JptUiMessages.JpaFacetWizardPage_title);
-		setDescription(JptUiMessages.JpaFacetWizardPage_description);
-		setImageDescriptor(JptUiPlugin.getPlugin().getImageDescriptor(JptUiIcons.JPA_WIZ_BANNER));
-	}
-	
-	
-	@Override
-	protected Composite createTopLevelComposite(Composite parent) {
-		Composite composite = new Composite(parent, SWT.NULL);
-		GridLayout layout = new GridLayout();
-		composite.setLayout(layout);
-		
-		platformGroup = new PlatformGroup(composite);
-		connectionGroup = new ConnectionGroup(composite);
-		classpathConfigGroup = new ClasspathConfigGroup(composite);
-		persistentClassManagementGroup = new PersistentClassManagementGroup(composite);
-		ormXmlGroup = new OrmXmlGroup(composite);
-		
-		setUpRuntimeListener();
-		
-		Dialog.applyDialogFont(parent);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJpaHelpContextIds.DIALOG_JPA_FACET);
-		
-		return composite;
-	}
-	
-	private void setUpRuntimeListener() {
-		final ChangeTargetedRuntimesDataModel runtimeDataModel = getRuntimeDataModel();
-		// must do it manually the first time
-		model.setProperty(RUNTIME, runtimeDataModel.getPrimaryRuntime());
-		runtimeDataModel.addListener(
-			ChangeTargetedRuntimesDataModel.EVENT_PRIMARY_RUNTIME_CHANGED,
-			new AbstractDataModel.IDataModelListener() {
-				public void handleEvent() {
-					model.setProperty(RUNTIME, runtimeDataModel.getPrimaryRuntime());
-				}
-			}
-		);
-	}
-	
-	private ChangeTargetedRuntimesDataModel getRuntimeDataModel() {
-		// This is hacky, but unfortunately the only current way to do this
-		// see bug 138074
-		FacetsSelectionPage facetPage = null;
-		for (IWizardPage page : getWizard().getPages()) {
-			if (page instanceof FacetsSelectionPage) {
-				facetPage = (FacetsSelectionPage) page;
-				break;
-			}
-		}
-		return (facetPage == null) ?
-			null :
-			facetPage.panel.getDataModel().getTargetedRuntimesDataModel();
-	}
-	
-	
-	
-	private Label createLabel(Composite container, int span, String text) {
-		Label label = new Label(container, SWT.NONE);
-		label.setText(text);
-		GridData gd = new GridData();
-		gd.horizontalSpan = span;
-		label.setLayoutData(gd);
-		return label;
-	}
-	
-	private Button createButton(Composite container, int span, String text, int style) {
-		Button button = new Button(container, SWT.NONE | style);
-		button.setText(text);
-		GridData gd = new GridData();
-		gd.horizontalSpan = span;
-		button.setLayoutData(gd);
-		return button;
-	}
-	
-	private Combo createCombo(Composite container, int span, boolean fillHorizontal) {
-		Combo combo = new Combo(container, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY);
-		GridData gd;
-		if (fillHorizontal) {
-			gd = new GridData(GridData.FILL_HORIZONTAL);
-		}
-		else {
-			gd = new GridData();
-		}
-		gd.horizontalSpan = span;
-		combo.setLayoutData(gd);
-		return combo;
-	}
-	
-	@Override
-	protected String[] getValidationPropertyNames() {
-		return new String[] {
-			PLATFORM_ID,
-			CONNECTION,
-			USE_SERVER_JPA_IMPLEMENTATION,
-			JPA_LIBRARY,
-			DISCOVER_ANNOTATED_CLASSES
-		};
-	}
-	
-	@Override
-	public boolean isPageComplete() {
-		if (! super.isPageComplete()) {
-			return false;
-		}
-		else {
-			return (model.validate().getSeverity() != IStatus.ERROR);
-		}
-	}
-	
-	@Override
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		if (visible) {
-			setErrorMessage();
-		}
-	}
-	
-	
-	private final class PlatformGroup
-	{
-		private final ComboViewer platformCombo;
-		
-		
-		public PlatformGroup(Composite composite) {
-			Group group = new Group(composite, SWT.NONE);
-			group.setText(JptUiMessages.JpaFacetWizardPage_platformLabel);
-			group.setLayout(new GridLayout());
-			group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IJpaHelpContextIds.DIALOG_JPA_PLATFORM);
-			
-			platformCombo = new ComboViewer(createCombo(group, 1, true));
-			platformCombo.setContentProvider(
-					new IStructuredContentProvider() {
-						public Object[] getElements(Object inputElement) {
-							return CollectionTools.array(JpaPlatformRegistry.INSTANCE.allJpaPlatformIds());
-						}
-						
-						public void dispose() {}
-						
-						public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
-					}
-				);
-			platformCombo.setLabelProvider(
-					new ILabelProvider() {
-						public Image getImage(Object element) {
-							return null;
-						}
-						
-						public String getText(Object element) {
-							return JpaPlatformRegistry.INSTANCE.getJpaPlatformLabel((String) element);
-						}
-						
-						public void addListener(ILabelProviderListener listener) {}
-						
-						public void removeListener(ILabelProviderListener listener) {}
-						
-						public void dispose() {}
-						
-						public boolean isLabelProperty(Object element, String property) {
-							return true;
-						}
-					}
-				);
-			platformCombo.addSelectionChangedListener(
-					new ISelectionChangedListener() {
-						public void selectionChanged(SelectionChangedEvent event) {
-							model.setProperty(PLATFORM_ID, ((StructuredSelection) event.getSelection()).getFirstElement());
-						}
-					}
-				);
-			// we need some input here, even if it means absolutely nothing
-			platformCombo.setInput("null input");
-			if (platformCombo.getElementAt(0) != null) {
-				platformCombo.setSelection(new StructuredSelection(platformCombo.getElementAt(0)));
-			}
-		}
-	}
-	
-	
-	private final class ConnectionGroup
-	{
-		private final Combo connectionCombo;
-		
-		private Link connectionLink;
-		
-		
-		public ConnectionGroup(Composite composite) {
-			Group group = new Group(composite, SWT.NONE);
-			group.setText(JptUiMessages.JpaFacetWizardPage_connectionLabel);
-			group.setLayout(new GridLayout());
-			group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IJpaHelpContextIds.NEW_JPA_PROJECT_CONTENT_PAGE_DATABASE);
-			
-			connectionCombo = createCombo(group, 1, true);
-			connectionCombo.addSelectionListener(
-					new SelectionListener() {
-						public void widgetSelected(SelectionEvent e) {
-							model.setProperty(CONNECTION, connectionCombo.getItem(connectionCombo.getSelectionIndex()));
-						}
-						
-						public void widgetDefaultSelected(SelectionEvent e) {
-							widgetSelected(e);
-						}
-					}
-				);
-			fillConnections();
-			if (connectionCombo.getItemCount() > 0) {
-				connectionCombo.select(0);
-				model.setProperty(CONNECTION, connectionCombo.getItem(0));
-			}
-			else {
-				connectionCombo.clearSelection();
-				model.setProperty(CONNECTION, null);
-			}
-			
-			connectionLink = new Link(group, SWT.NONE);
-			GridData data = new GridData(GridData.END, GridData.CENTER, false, false);
-			data.horizontalSpan = 2;
-			connectionLink.setLayoutData(data);
-			connectionLink.setText(JptUiMessages.JpaFacetWizardPage_connectionLink);
-			connectionLink.addSelectionListener(
-				new SelectionAdapter() {
-					public void widgetSelected(SelectionEvent e) {
-						openNewConnectionWizard();				
-					}
-				}
-			);
-		}
-
-		private void fillConnections() {
-			//clear out connection entries from previous login.
-			connectionCombo.removeAll();
-			
-			for (Iterator stream = ConnectionProfileRepository.instance().profileNames(); stream.hasNext(); ) {
-				connectionCombo.add((String) stream.next());
-			}
-		}
-		
-		private String getConnectionName() {
-			return connectionCombo.getText();
-		}
-		
-		private void openNewConnectionWizard() {
-			String connectionName = DTPUiTools.createNewProfile();
-			if (connectionName != null) {
-				fillConnections();
-				model.setProperty(CONNECTION, connectionName);
-				connectionCombo.select(connectionCombo.indexOf(connectionName));
-			}
-		}
-	}
-	
-	
-	private final class ClasspathConfigGroup
-	{
-		private final Button useServerLibButton;
-		
-		private final Button specifyLibButton;
-		
-		private final Combo jpaLibCombo;
-		
-		private final Link jpaPrefsLink;
-		
-		private final Link userLibsLink;
-		
-		
-		
-		public ClasspathConfigGroup(Composite composite) {
-			Group group = new Group(composite, SWT.NONE);
-			group.setText(JptUiMessages.JpaFacetWizardPage_jpaImplementationLabel);
-			group.setLayout(new GridLayout(2, false));
-			group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IJpaHelpContextIds.NEW_JPA_PROJECT_CONTENT_PAGE_CLASSPATH);
-			
-			useServerLibButton = createButton(group, 2, JptUiMessages.JpaFacetWizardPage_userServerLibLabel, SWT.RADIO);
-			useServerLibButton.addSelectionListener(
-					new SelectionListener() {
-						public void widgetDefaultSelected(SelectionEvent e) {
-							widgetSelected(e);
-						}
-						
-						public void widgetSelected(SelectionEvent e) {
-							model.setBooleanProperty(USE_SERVER_JPA_IMPLEMENTATION, true);
-						}
-					}
-				);
-			
-			specifyLibButton = createButton(group, 1, JptUiMessages.JpaFacetWizardPage_specifyLibLabel, SWT.RADIO);
-			specifyLibButton.addSelectionListener(
-					new SelectionListener() {
-						public void widgetDefaultSelected(SelectionEvent e) {
-							widgetSelected(e);
-						}
-						
-						public void widgetSelected(SelectionEvent e) {
-							model.setBooleanProperty(USE_SERVER_JPA_IMPLEMENTATION, false);
-						}
-					}
-				);
-			
-			jpaLibCombo = createCombo(group, 1, true);
-			synchHelper.synchCombo(jpaLibCombo, JPA_LIBRARY, null);
-			
-			model.addListener(
-					new IDataModelListener() {
-						public void propertyChanged(DataModelEvent event) {
-							if (USE_SERVER_JPA_IMPLEMENTATION.equals(event.getPropertyName())) {
-								boolean useServerLib = (Boolean) event.getProperty();
-								useServerLibButton.setSelection(useServerLib);
-								specifyLibButton.setSelection(! useServerLib);
-								jpaLibCombo.setEnabled(! useServerLib);
-							}
-						}
-					}
-				);
-			
-			jpaPrefsLink = new Link(group, SWT.NONE);
-			GridData data = new GridData(GridData.END, GridData.CENTER, false, false);
-			data.horizontalSpan = 2;
-			jpaPrefsLink.setLayoutData(data);
-			jpaPrefsLink.setText(JptUiMessages.JpaFacetWizardPage_jpaPrefsLink);
-			jpaPrefsLink.addSelectionListener(
-				new SelectionAdapter() {
-					public void widgetSelected(SelectionEvent e) {
-						promptToConfigJpaPrefs();				
-					}
-				}
-			);
-			
-			userLibsLink = new Link(group, SWT.NONE);
-			data = new GridData(GridData.END, GridData.CENTER, false, false);
-			data.horizontalSpan = 2;
-			userLibsLink.setLayoutData(data);
-			userLibsLink.setText(JptUiMessages.JpaFacetWizardPage_userLibsLink);
-			userLibsLink.addSelectionListener(
-				new SelectionAdapter() {
-					public void widgetSelected(SelectionEvent e) {
-						promptToConfigUserLibraries();				
-					}
-				}
-			);
-		}
-		
-		private void promptToConfigJpaPrefs() {
-			PreferenceDialog dlg = 
-				PreferencesUtil.createPreferenceDialogOn(
-					getShell(), 
-					JpaPreferencePage.ID,
-					new String[] {JpaPreferencePage.ID},
-					null);
-			dlg.open();
-			model.notifyPropertyChange(JPA_LIBRARY, IDataModel.VALID_VALUES_CHG);
-			model.notifyPropertyChange(JPA_LIBRARY, IDataModel.DEFAULT_CHG);
-		}
-		
-		private void promptToConfigUserLibraries() {
-			PreferenceDialog dlg = 
-				PreferencesUtil.createPreferenceDialogOn(
-					getShell(), 
-					UserLibraryPreferencePage.ID,
-					new String[] {UserLibraryPreferencePage.ID},
-					null);
-			dlg.open();
-			model.notifyPropertyChange(JPA_LIBRARY, IDataModel.VALID_VALUES_CHG);
-		}
-	}
-	
-	
-	private final class PersistentClassManagementGroup
-	{
-		private final Button discoverClassesButton;
-		
-		private final Button listClassesButton;
-		
-		
-		public PersistentClassManagementGroup(Composite composite) {
-			Group group = new Group(composite, SWT.NONE);
-			group.setText(JptUiMessages.JpaFacetWizardPage_persistentClassManagementLabel);
-			group.setLayout(new GridLayout());
-			group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IJpaHelpContextIds.NEW_JPA_PROJECT_CONTENT_PAGE_CLASSPATH);
-			
-			discoverClassesButton = createButton(group, 1, JptUiMessages.JpaFacetWizardPage_discoverClassesButton, SWT.RADIO);
-			discoverClassesButton.addSelectionListener(
-				new SelectionListener() {
-						public void widgetDefaultSelected(SelectionEvent e) {
-							widgetSelected(e);
-						}
-						
-						public void widgetSelected(SelectionEvent e) {
-							model.setBooleanProperty(DISCOVER_ANNOTATED_CLASSES, true);
-						}
-					}
-				);
-			
-			listClassesButton = createButton(group, 1, JptUiMessages.JpaFacetWizardPage_listClassesButton, SWT.RADIO);
-			listClassesButton.addSelectionListener(
-				new SelectionListener() {
-						public void widgetDefaultSelected(SelectionEvent e) {
-							widgetSelected(e);
-						}
-						
-						public void widgetSelected(SelectionEvent e) {
-							model.setBooleanProperty(DISCOVER_ANNOTATED_CLASSES, false);
-						}
-					}
-				);
-			
-			model.addListener(
-					new IDataModelListener() {
-						public void propertyChanged(DataModelEvent event) {
-							if (DISCOVER_ANNOTATED_CLASSES.equals(event.getPropertyName())) {
-								boolean discoverClasses = (Boolean) event.getProperty();
-								discoverClassesButton.setSelection(discoverClasses);
-								listClassesButton.setSelection(! discoverClasses);
-							}
-						}
-					}
-				);
-		}
-	}
-	
-	
-	private final class OrmXmlGroup
-	{
-		private final Button createOrmXmlButton;
-		
-		
-		public OrmXmlGroup(Composite composite) {
-			Composite group = new Composite(composite, SWT.NONE);
-			group.setLayout(new GridLayout());
-			group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(group, IJpaHelpContextIds.DIALOG_CREATE_ORM);
-			
-			createOrmXmlButton = new Button(group, SWT.CHECK);
-			createOrmXmlButton.setText(JptUiMessages.JpaFacetWizardPage_createOrmXmlButton);
-			createOrmXmlButton.setSelection(model.getBooleanProperty(CREATE_ORM_XML));
-			createOrmXmlButton.addSelectionListener(
-					new SelectionListener() {
-						public void widgetDefaultSelected(SelectionEvent e) {
-							widgetSelected(e);
-						}
-						
-						public void widgetSelected(SelectionEvent e) {
-							model.setBooleanProperty(CREATE_ORM_XML, createOrmXmlButton.getSelection());
-						}
-					}
-				);
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectFirstPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectFirstPage.java
deleted file mode 100644
index 299d2eb..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectFirstPage.java
+++ /dev/null
@@ -1,24 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.wizards;
-
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jst.j2ee.ui.project.facet.UtilityProjectFirstPage;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public class NewJpaProjectFirstPage extends UtilityProjectFirstPage 
-{
-	public NewJpaProjectFirstPage(IDataModel dataModel, String pageName) {
-		super(dataModel, pageName);
-		setTitle(JptUiMessages.NewJpaProjectWizard_firstPage_title);
-		setDescription(JptUiMessages.NewJpaProjectWizard_firstPage_description);
-		setInfopopID(IJpaHelpContextIds.NEW_JPA_PROJECT);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectWizard.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectWizard.java
deleted file mode 100644
index d5f83a3..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/NewJpaProjectWizard.java
+++ /dev/null
@@ -1,53 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.wizards;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jpt.ui.internal.JptUiIcons;
-import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.ui.internal.JptUiPlugin;
-import org.eclipse.jst.j2ee.ui.project.facet.UtilityProjectWizard;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
-import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
-
-public class NewJpaProjectWizard extends UtilityProjectWizard {
-
-	public NewJpaProjectWizard() {
-		super();
-		setWindowTitle(JptUiMessages.NewJpaProjectWizard_title);
-	}
-
-	public NewJpaProjectWizard(IDataModel model) {
-		super(model);
-		setWindowTitle(JptUiMessages.NewJpaProjectWizard_title);
-	}
-	
-	// TODO - when we have a data model to add
-//	protected IDataModel createDataModel() {
-//		return DataModelFactory.createDataModel(new UtilityProjectCreationDataModelProvider());
-//	}
-	
-	protected ImageDescriptor getDefaultPageImageDescriptor() {
-		return JptUiPlugin.getPlugin().getImageDescriptor(JptUiIcons.JPA_WIZ_BANNER);
-	}
-	
-	protected IFacetedProjectTemplate getTemplate() {
-		return ProjectFacetsManager.getTemplate("jpt.jpa.template");
-	}
-	
-	protected IWizardPage createFirstPage() {
-		return new NewJpaProjectFirstPage(model, "first.page"); //$NON-NLS-1$ 
-	}
-	
-	protected String getFinalPerspectiveID() {
-		return "org.eclipse.jpt.ui.jpaPerspective";
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/JptUiXmlMessages.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/JptUiXmlMessages.java
deleted file mode 100644
index c6804dd..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/JptUiXmlMessages.java
+++ /dev/null
@@ -1,51 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml;
-
-import org.eclipse.osgi.util.NLS;
-
-public class JptUiXmlMessages 
-{
-	private static final String BUNDLE_NAME = "jpt_ui_xml"; //$NON-NLS-1$
-	
-	public static String PersistentTypePage_javaClassLabel;
-	public static String PersistentTypePage_MetadataCompleteLabel;
-	public static String PersistentTypePage_AccessLabel;
-	
-	public static String PersistenceUnitMetadataSection_SchemaDefault;
-	public static String PersistenceUnitMetadataSection_CatalogDefault;
-	
-	public static String PersistentAttributePage_javaAttributeLabel;
-	
-	public static String XMLEntityMappingsPage_XmlMappingMetadataCompleteCheckBox;
-	public static String XMLEntityMappingsPage_CascadePersistCheckBox;
-	public static String XMLEntityMappingsPage_PersistenceUnitSection;
-	public static String XMLEntityMappingsPage_SchemaDefault;
-	public static String XMLEntityMappingsPage_SchemaNoDefaultSpecified;
-	public static String XMLEntityMappingsPage_CatalogDefault;
-	public static String XMLEntityMappingsPage_CatalogNoDefaultSpecified;
-	
-	public static String XmlSchemaChooser_SchemaChooser;
-	public static String XmlCatalogChooser_CatalogChooser;
-
-	public static String XmlJavaClassChooser_XmlJavaClassDialog_title;
-	public static String XmlJavaClassChooser_XmlJavaClassDialog_message;
-	public static String XmlPackageChooser_PackageDialog_title;
-	public static String XmlPackageChooser_PackageDialog_message; 
-	
-	
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, JptUiXmlMessages.class);
-	}
-	
-	private JptUiXmlMessages() {
-		throw new UnsupportedOperationException();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/AccessTypeComboViewer.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/AccessTypeComboViewer.java
deleted file mode 100644
index 55afba9..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/AccessTypeComboViewer.java
+++ /dev/null
@@ -1,186 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.AccessType;
-import org.eclipse.jpt.core.internal.mappings.InheritanceType;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class AccessTypeComboViewer extends BaseJpaController
-{
-	private AccessHolder accessHolder;
-	private Adapter accessHolderListener;
-	
-	private CComboViewer comboViewer;
-
-
-	public AccessTypeComboViewer(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildAccessHolderListener();
-	}
-	
-	
-	private void buildAccessHolderListener() {
-		this.accessHolderListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				accessHolderChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent);
-		this.comboViewer = new CComboViewer(combo);
-		this.comboViewer.setLabelProvider(buildAccessTypeLabelProvider());
-		this.comboViewer.add(AccessType.VALUES.toArray());
-		
-		this.comboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				AccessTypeComboViewer.this.accessTypeSelectionChanged(event.getSelection());
-			}
-		});
-	}
-	
-	private IBaseLabelProvider buildAccessTypeLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				if (element == AccessType.DEFAULT) {
-					return JptUiMappingsMessages.AccessTypeCombo_default;
-				}
-				return super.getText(element);
-			}
-		};
-	}
-	
-	void accessTypeSelectionChanged(ISelection selection) {
-		if (selection instanceof IStructuredSelection) {
-			AccessType access = (AccessType) ((IStructuredSelection) selection).getFirstElement();
-			if ( ! this.accessHolder.getAccess().equals(access)) {
-				this.accessHolder.setAccess(access);
-			}
-		}
-	}
-
-	private void accessHolderChanged(Notification notification) {
-		if (notification.getFeatureID(accessHolder.featureClass()) == 
-				this.accessHolder.featureId()) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.accessHolder != null && this.accessHolder.wrappedObject() != null) {
-			this.accessHolder.wrappedObject().eAdapters().add(this.accessHolderListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.accessHolder != null && this.accessHolder.wrappedObject() != null) {
-			this.accessHolder.wrappedObject().eAdapters().remove(this.accessHolderListener);
-		}
-	}
-	
-	public final void populate(AccessHolder accessHolder) {
-		super.populate(accessHolder);
-	}
-
-	@Override
-	public void doPopulate(EObject obj) {
-		this.accessHolder = (AccessHolder) obj;
-		populateCombo();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateCombo();
-	}
-	
-	private void populateCombo() {
-		if (this.accessHolder.wrappedObject() == null) {
-			return;
-		}
-		
-		AccessType access = this.accessHolder.getAccess();
-		
-		if (((IStructuredSelection) this.comboViewer.getSelection()).getFirstElement() != access) {
-			this.comboViewer.setSelection(new StructuredSelection(access));
-		}
-	}
-
-	
-	@Override
-	public Control getControl() {
-		return this.comboViewer.getCombo();
-	}
-	
-	/**
-	 * An interface to wrap an object that supports accessType
-	 * An object of this type must be passed in to populate(EObject)
-	 */
-	public static interface AccessHolder extends EObject {
-		/**
-		 * Return the AccessType from the wrapped object
-		 * @return
-		 */
-		AccessType getAccess();
-		
-		/**
-		 * Set the AccessType on the wrapped object
-		 * @param accessType
-		 */
-		void setAccess(AccessType accessType);
-		
-		/**
-		 * Return the Class of the wrapped object
-		 * @return
-		 */
-		Class featureClass();
-		
-		/**
-		 * Return the feature id of accessType on the wrapped object
-		 * @return
-		 */
-		int featureId();
-		
-		/**
-		 * The wrapped EObject that the accessType is stored on
-		 * @return
-		 */
-		EObject wrappedObject();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/CascadePersistCheckBox.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/CascadePersistCheckBox.java
deleted file mode 100644
index 332079a..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/CascadePersistCheckBox.java
+++ /dev/null
@@ -1,128 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.PersistenceUnitDefaults;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class CascadePersistCheckBox extends BaseJpaController
-{
-	private PersistenceUnitDefaults persistenceUnitDefaults;
-	private Adapter persistenceUnitDefaultsListener;
-	
-	private Button button;
-
-
-	public CascadePersistCheckBox(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildPeristenceUnitDefaultsListener();
-	}
-	
-	private void buildPeristenceUnitDefaultsListener() {
-		this.persistenceUnitDefaultsListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				persistenceUnitDefaultsChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.button = getWidgetFactory().createButton(
-						parent, 
-						JptUiXmlMessages.XMLEntityMappingsPage_CascadePersistCheckBox,
-						SWT.CHECK);
-		
-		this.button.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent event) {
-				CascadePersistCheckBox.this.cascadePersistSelectionChanged();
-			}
-		
-			public void widgetDefaultSelected(SelectionEvent e) {
-				CascadePersistCheckBox.this.cascadePersistSelectionChanged();
-			}
-		});
-	}
-	
-	void cascadePersistSelectionChanged() {
-		boolean cascadePersist = this.button.getSelection();
-		if (this.persistenceUnitDefaults.isCascadePersist() != cascadePersist) {
-			this.persistenceUnitDefaults.setCascadePersist(cascadePersist);
-		}
-	}
-
-	private void persistenceUnitDefaultsChanged(Notification notification) {
-		if (notification.getFeatureID(PersistenceUnitDefaults.class) == 
-				OrmPackage.PERSISTENCE_UNIT_DEFAULTS__CASCADE_PERSIST) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.persistenceUnitDefaults != null) {
-			this.persistenceUnitDefaults.eAdapters().add(this.persistenceUnitDefaultsListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.persistenceUnitDefaults != null) {
-			this.persistenceUnitDefaults.eAdapters().remove(this.persistenceUnitDefaultsListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		this.persistenceUnitDefaults = (PersistenceUnitDefaults) obj;
-		populateButton();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateButton();
-	}
-	
-	private void populateButton() {
-		boolean cascadePersist = false;
-		if (this.persistenceUnitDefaults != null) {
-			cascadePersist  = this.persistenceUnitDefaults.isCascadePersist();
-		}
-		
-		if (this.button.getSelection() != cascadePersist) {
-			this.button.setSelection(cascadePersist);
-		}
-	}
-
-	
-	@Override
-	public Control getControl() {
-		return this.button;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/CommonWidgets.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/CommonWidgets.java
deleted file mode 100644
index 01e5c21..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/CommonWidgets.java
+++ /dev/null
@@ -1,80 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.jpt.ui.internal.mappings.details.StringWithDefaultChooser;
-import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class CommonWidgets 
-{
-	public static Label buildJavaClassLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		Label label = widgetFactory.createLabel(parent, JptUiXmlMessages.PersistentTypePage_javaClassLabel);
-		return label;
-	}
-	
-	public static XmlJavaClassChooser buildJavaClassChooser(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new XmlJavaClassChooser(parent, commandStack, widgetFactory);
-	}
-	
-	public static Label buildJavaAttributeNameLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		Label label = widgetFactory.createLabel(parent, JptUiXmlMessages.PersistentAttributePage_javaAttributeLabel);
-		return label;
-	}
-	
-	public static XmlJavaAttributeChooser buildJavaAttributeChooser(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new XmlJavaAttributeChooser(parent, commandStack, widgetFactory);
-	}
-	
-	
-	public static Label buildAccessLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiXmlMessages.PersistentTypePage_AccessLabel);
-	}
-	
-	public static AccessTypeComboViewer buildAccessTypeComboViewer(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new AccessTypeComboViewer(parent, commandStack, widgetFactory);
-	}
-
-	
-	public static Label buildCatalogLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiXmlMessages.XmlCatalogChooser_CatalogChooser);
-	}
-	
-	public static StringWithDefaultChooser buildCatalogChooser(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new StringWithDefaultChooser(parent, commandStack, widgetFactory);
-	}
-
-	
-	public static Label buildSchemaLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, JptUiXmlMessages.XmlSchemaChooser_SchemaChooser);
-	}
-	
-	public static StringWithDefaultChooser buildSchemaChooser(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new StringWithDefaultChooser(parent, commandStack, widgetFactory);
-	}
-
-	
-	public static Label buildPackageLabel(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return widgetFactory.createLabel(parent, "Package:");
-	}
-	
-	public static XmlPackageChooser buildXmlPackageChooser(
-			Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		return new XmlPackageChooser(parent, commandStack, widgetFactory);
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/MetaDataCompleteComboViewer.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/MetaDataCompleteComboViewer.java
deleted file mode 100644
index 4d98719..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/MetaDataCompleteComboViewer.java
+++ /dev/null
@@ -1,155 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.XmlTypeMapping;
-import org.eclipse.jpt.core.internal.mappings.DefaultFalseBoolean;
-import org.eclipse.jpt.core.internal.mappings.InheritanceType;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class MetaDataCompleteComboViewer extends BaseJpaController
-{
-	private XmlTypeMapping mapping;
-	private Adapter typeMappingListener;
-	
-	private CComboViewer comboViewer;
-
-
-	public MetaDataCompleteComboViewer(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildTypeMappingListener();
-	}
-	
-	
-	private void buildTypeMappingListener() {
-		this.typeMappingListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				typeMappingChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		CCombo combo = getWidgetFactory().createCCombo(parent);
-		this.comboViewer = new CComboViewer(combo);
-		this.comboViewer.setLabelProvider(buildLabelProvider());
-		this.comboViewer.add(DefaultFalseBoolean.VALUES.toArray());
-		this.comboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				MetaDataCompleteComboViewer.this.metadataCompleteSelectionChanged(event.getSelection());
-			}
-		});
-	}
-	private IBaseLabelProvider buildLabelProvider() {
-		return new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				if (element == DefaultFalseBoolean.DEFAULT) {
-					//TODO need to move this to the model, don't want hardcoded String
-					return NLS.bind(JptUiMappingsMessages.MetaDataCompleteCombo_Default, "False");
-				}
-				return super.getText(element);
-			}
-		};
-	}
-
-	void metadataCompleteSelectionChanged(ISelection selection) {
-		if (selection instanceof IStructuredSelection) {
-			DefaultFalseBoolean metadataComplete = (DefaultFalseBoolean) ((IStructuredSelection) selection).getFirstElement();
-			if ( ! this.mapping.getMetadataComplete().equals(metadataComplete)) {
-				this.mapping.setMetadataComplete(metadataComplete);
-//				this.editingDomain.getCommandStack().execute(
-//					SetCommand.create(
-//						this.editingDomain,
-//						this.basicMapping,
-//						OrmPackage.eINSTANCE.getBasicMapping_Optional(),
-//						optional
-//					)
-//				);
-			}
-		}
-	}
-
-	private void typeMappingChanged(Notification notification) {
-		if (notification.getFeatureID(XmlTypeMapping.class) == 
-				OrmPackage.XML_TYPE_MAPPING__METADATA_COMPLETE) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.mapping != null) {
-			this.mapping.eAdapters().add(this.typeMappingListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.mapping != null) {
-			this.mapping.eAdapters().remove(this.typeMappingListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		this.mapping = (XmlTypeMapping) obj;
-		populateCombo();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateCombo();
-	}
-	
-	private void populateCombo() {
-		if (this.mapping == null) {
-			return;
-		}
-		
-		DefaultFalseBoolean metadataComplete = mapping.getMetadataComplete();
-		
-		if (((IStructuredSelection) this.comboViewer.getSelection()).getFirstElement() != metadataComplete) {
-			this.comboViewer.setSelection(new StructuredSelection(metadataComplete));
-		}
-	}
-
-	
-	@Override
-	public Control getControl() {
-		return this.comboViewer.getCombo();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/PersistenceUnitMetadataSection.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/PersistenceUnitMetadataSection.java
deleted file mode 100644
index 253d9c9..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/PersistenceUnitMetadataSection.java
+++ /dev/null
@@ -1,285 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.AccessType;
-import org.eclipse.jpt.core.internal.XmlEObject;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.PersistenceUnitDefaults;
-import org.eclipse.jpt.core.internal.content.orm.PersistenceUnitDefaultsInternal;
-import org.eclipse.jpt.core.internal.content.orm.PersistenceUnitMetadata;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.mappings.details.StringWithDefaultChooser;
-import org.eclipse.jpt.ui.internal.mappings.details.StringWithDefaultChooser.StringHolder;
-import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
-import org.eclipse.jpt.ui.internal.xml.details.AccessTypeComboViewer.AccessHolder;
-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.swt.widgets.Control;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class PersistenceUnitMetadataSection extends BaseJpaController
-{
-	
-	private Section section;
-	private XmlMappingMetadataCompleteCheckBox xmlMappingMetadataCompleteCheckBox;
-	private StringWithDefaultChooser xmlSchemaChooser;
-	private StringWithDefaultChooser xmlCatalogChooser;
-	private AccessTypeComboViewer accessComboViewer;
-	private CascadePersistCheckBox cascadePersistCheckBox;
-	
-	public PersistenceUnitMetadataSection(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, commandStack, widgetFactory);
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-	    this.section = getWidgetFactory().createSection(parent, SWT.FLAT | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
-	    this.section.setText(JptUiXmlMessages.XMLEntityMappingsPage_PersistenceUnitSection);
-
-		Composite persistenceUnitComposite = getWidgetFactory().createComposite(this.section);
-		this.section.setClient(persistenceUnitComposite);
-		
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 1;
-		persistenceUnitComposite.setLayout(layout);
-
-	    
-	    this.xmlMappingMetadataCompleteCheckBox = buildXmlMappingMetadataCompleteCheckBox(persistenceUnitComposite);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.xmlMappingMetadataCompleteCheckBox.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(xmlMappingMetadataCompleteCheckBox.getControl(), IJpaHelpContextIds.ENTITY_ORM_XML);
-		
-		CommonWidgets.buildSchemaLabel(persistenceUnitComposite, getWidgetFactory());
-		
-		this.xmlSchemaChooser = CommonWidgets.buildSchemaChooser(persistenceUnitComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.xmlSchemaChooser.getCombo().setLayoutData(gridData);
-		helpSystem.setHelp(xmlSchemaChooser.getControl(), IJpaHelpContextIds.ENTITY_ORM_SCHEMA);
-
-		CommonWidgets.buildCatalogLabel(persistenceUnitComposite, getWidgetFactory());
-		
-		this.xmlCatalogChooser = CommonWidgets.buildCatalogChooser(persistenceUnitComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.xmlCatalogChooser.getCombo().setLayoutData(gridData);
-		helpSystem.setHelp(xmlCatalogChooser.getControl(), IJpaHelpContextIds.ENTITY_ORM_CATALOG);
-		
-		CommonWidgets.buildAccessLabel(persistenceUnitComposite, getWidgetFactory());
-		
-		this.accessComboViewer = CommonWidgets.buildAccessTypeComboViewer(persistenceUnitComposite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.accessComboViewer.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(accessComboViewer.getControl(), IJpaHelpContextIds.ENTITY_ORM_ACCESS);
-
-	
-	    this.cascadePersistCheckBox = buildCascadePersistCheckBox(persistenceUnitComposite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.cascadePersistCheckBox.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(cascadePersistCheckBox.getControl(), IJpaHelpContextIds.ENTITY_ORM_CASCADE);
-
-	}
-	
-	private XmlMappingMetadataCompleteCheckBox buildXmlMappingMetadataCompleteCheckBox(Composite parent) {
-		return new XmlMappingMetadataCompleteCheckBox(parent, this.commandStack, getWidgetFactory());
-	}
-	
-	private CascadePersistCheckBox buildCascadePersistCheckBox(Composite parent) {
-		return new CascadePersistCheckBox(parent, this.commandStack, getWidgetFactory());
-	}
-
-	@Override
-	protected void engageListeners() {
-	}
-	
-	@Override
-	protected void disengageListeners() {
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		PersistenceUnitMetadata persistenceUnitMetadata = (PersistenceUnitMetadata) obj;
-		this.xmlMappingMetadataCompleteCheckBox.populate(persistenceUnitMetadata);
-		if (persistenceUnitMetadata != null) {
-			this.accessComboViewer.populate(new MyAccessHolder(persistenceUnitMetadata.getPersistenceUnitDefaults()));
-			this.xmlSchemaChooser.populate(new SchemaHolder(persistenceUnitMetadata.getPersistenceUnitDefaults()));
-			this.xmlCatalogChooser.populate(new CatalogHolder(persistenceUnitMetadata.getPersistenceUnitDefaults()));
-			this.cascadePersistCheckBox.populate(persistenceUnitMetadata.getPersistenceUnitDefaults());
-		}
-		else {
-			this.accessComboViewer.populate(new MyAccessHolder(null));			
-			this.xmlSchemaChooser.populate(new SchemaHolder(null));			
-			this.xmlCatalogChooser.populate(new CatalogHolder(null));			
-			this.cascadePersistCheckBox.populate(null);			
-		}
-	}
-	private class MyAccessHolder extends XmlEObject implements AccessHolder{
-		
-		private PersistenceUnitDefaultsInternal persistenceUnitDefaults;
-		MyAccessHolder(PersistenceUnitDefaults persistenceUnitDefaultsInternal) {
-			super();
-			this.persistenceUnitDefaults = (PersistenceUnitDefaultsInternal) persistenceUnitDefaultsInternal;
-		}
-		public void setAccess(AccessType accessType) {
-			persistenceUnitDefaults.setAccess(accessType);
-		}
-	
-		public AccessType getAccess() {
-			return persistenceUnitDefaults.getAccess();
-		}
-		
-		public Class featureClass() {
-			return PersistenceUnitDefaults.class;
-		}
-		
-		public int featureId() {
-			return OrmPackage.PERSISTENCE_UNIT_DEFAULTS__ACCESS;
-		}
-		
-		public EObject wrappedObject() {
-			return this.persistenceUnitDefaults;
-		}
-	}
-	
-	private class SchemaHolder extends XmlEObject implements StringHolder {
-		private PersistenceUnitDefaults persistenceUnitDefaults;
-		SchemaHolder(PersistenceUnitDefaults persistenceUnitDefaults) {
-			super();
-			this.persistenceUnitDefaults = persistenceUnitDefaults;
-		}
-		
-		public Class featureClass() {
-			return PersistenceUnitDefaults.class;
-		}
-		
-		public int featureId() {
-			return OrmPackage.PERSISTENCE_UNIT_DEFAULTS__SCHEMA;
-		}
-		
-		public boolean supportsDefault() {
-			return false;
-		}
-		
-		public int defaultFeatureId() {
-			throw new UnsupportedOperationException();
-		}
-		
-		public String defaultItem() {
-			return JptUiXmlMessages.PersistenceUnitMetadataSection_SchemaDefault;
-		}
-		
-		public String getString() {
-			return this.persistenceUnitDefaults.getSchema();
-		}
-		
-		public void setString(String newSchema) {
-			this.persistenceUnitDefaults.setSchema(newSchema);
-		}
-		
-		public EObject wrappedObject() {
-			return this.persistenceUnitDefaults;
-		}
-	}
-	
-	private class CatalogHolder extends XmlEObject implements StringHolder {
-		private PersistenceUnitDefaults persistenceUnitDefaults;
-		CatalogHolder(PersistenceUnitDefaults persistenceUnitDefaults) {
-			super();
-			this.persistenceUnitDefaults = persistenceUnitDefaults;
-		}
-		
-		public Class featureClass() {
-			return PersistenceUnitDefaults.class;
-		}
-		
-		public int featureId() {
-			return OrmPackage.PERSISTENCE_UNIT_DEFAULTS__CATALOG;
-		}
-		
-		public boolean supportsDefault() {
-			return false;
-		}
-		
-		public int defaultFeatureId() {
-			throw new UnsupportedOperationException();
-		}
-		
-		public String defaultItem() {
-			return JptUiXmlMessages.PersistenceUnitMetadataSection_CatalogDefault;
-		}
-		
-		public String getString() {
-			return this.persistenceUnitDefaults.getCatalog();
-		}
-		
-		public void setString(String string) {
-			this.persistenceUnitDefaults.setCatalog(string);
-		}
-		
-		public EObject wrappedObject() {
-			return this.persistenceUnitDefaults;
-		}
-		
-	}
-
-	@Override
-	protected void doPopulate() {
-		this.xmlMappingMetadataCompleteCheckBox.populate();
-		this.xmlSchemaChooser.populate();
-		this.xmlCatalogChooser.populate();
-		this.accessComboViewer.populate();
-		this.cascadePersistCheckBox.populate();
-	}
-	
-	@Override
-	public void dispose() {
-		this.xmlMappingMetadataCompleteCheckBox.dispose();
-		this.xmlSchemaChooser.dispose();
-		this.xmlCatalogChooser.dispose();
-		this.accessComboViewer.dispose();
-		this.cascadePersistCheckBox.dispose();
-		super.dispose();
-	}	
-	
-	public Section getSection() {
-		return this.section;
-	}
-	
-	@Override
-	public Control getControl() {
-		return getSection();
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlDetailsProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlDetailsProvider.java
deleted file mode 100644
index 0bcd70d..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlDetailsProvider.java
+++ /dev/null
@@ -1,47 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.jpt.core.internal.JptCorePlugin;
-import org.eclipse.jpt.core.internal.content.orm.IXmlContentNodes;
-import org.eclipse.jpt.ui.internal.details.IJpaDetailsPage;
-import org.eclipse.jpt.ui.internal.details.IJpaDetailsProvider;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class XmlDetailsProvider 
-	implements IJpaDetailsProvider 
-{
-	public XmlDetailsProvider() {
-		super();
-	}
-	
-	public String fileContentType() {
-		return JptCorePlugin.ORM_XML_CONTENT_TYPE;
-	}
-	
-	public IJpaDetailsPage buildDetailsPage(
-			Composite parentComposite, Object contentNodeId, TabbedPropertySheetWidgetFactory widgetFactory) {
-		if (contentNodeId.equals(IXmlContentNodes.ENTITY_MAPPINGS_ID)) {
-			return new XmlEntityMappingsDetailsPage(parentComposite, widgetFactory);
-		}
-		else if (contentNodeId.equals(IXmlContentNodes.PERSISTENT_TYPE_ID)) {
-			return new XmlPersistentTypeDetailsPage(parentComposite, widgetFactory);
-		}
-		else if (contentNodeId.equals(IXmlContentNodes.PERSISTENT_ATTRIBUTE_ID)) {
-			return new XmlPersistentAttributeDetailsPage(parentComposite, widgetFactory);
-		}
-		
-		return null;
-	}
-	
-	public void dispose() {
-		// no op ... for now
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlEntityMappingsDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlEntityMappingsDetailsPage.java
deleted file mode 100644
index b70bde8..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlEntityMappingsDetailsPage.java
+++ /dev/null
@@ -1,274 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.AccessType;
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.jpt.core.internal.XmlEObject;
-import org.eclipse.jpt.core.internal.content.orm.EntityMappings;
-import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.details.BaseJpaDetailsPage;
-import org.eclipse.jpt.ui.internal.mappings.details.StringWithDefaultChooser;
-import org.eclipse.jpt.ui.internal.mappings.details.StringWithDefaultChooser.StringHolder;
-import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
-import org.eclipse.jpt.ui.internal.xml.details.AccessTypeComboViewer.AccessHolder;
-import org.eclipse.osgi.util.NLS;
-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.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class XmlEntityMappingsDetailsPage extends BaseJpaDetailsPage
-{
-	private EntityMappings entityMappings;
-
-	private XmlPackageChooser xmlPackageChooser;
-	
-	private StringWithDefaultChooser xmlSchemaChooser;
-	
-	private StringWithDefaultChooser xmlCatalogChooser;
-	
-	private AccessTypeComboViewer accessComboViewer;
-	
-	private PersistenceUnitMetadataSection persistenceUnitMetadataSection;
-	
-	public XmlEntityMappingsDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, new BasicCommandStack(), widgetFactory);
-	}
-
-	@Override
-	protected void initializeLayout(Composite composite) {
-		IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
-		GridLayout layout = new GridLayout(2, false);
-		layout.horizontalSpacing = 6;
-		composite.setLayout(layout);
-		
-		GridData gridData;
-
-		CommonWidgets.buildPackageLabel(composite, getWidgetFactory());
-		
-		this.xmlPackageChooser = CommonWidgets.buildXmlPackageChooser(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.xmlPackageChooser.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(xmlPackageChooser.getControl(), IJpaHelpContextIds.ENTITY_ORM_PACKAGE);
-
-		
-		CommonWidgets.buildSchemaLabel(composite, getWidgetFactory());
-		
-		this.xmlSchemaChooser = CommonWidgets.buildSchemaChooser(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.xmlSchemaChooser.getCombo().setLayoutData(gridData);
-		helpSystem.setHelp(xmlSchemaChooser.getControl(), IJpaHelpContextIds.ENTITY_ORM_SCHEMA);
-
-		
-		CommonWidgets.buildCatalogLabel(composite, getWidgetFactory());
-		
-		this.xmlCatalogChooser = CommonWidgets.buildCatalogChooser(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.xmlCatalogChooser.getCombo().setLayoutData(gridData);
-		helpSystem.setHelp(xmlCatalogChooser.getControl(), IJpaHelpContextIds.ENTITY_ORM_CATALOG);
-		
-		
-		CommonWidgets.buildAccessLabel(composite, getWidgetFactory());
-		
-		this.accessComboViewer = CommonWidgets.buildAccessTypeComboViewer(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.accessComboViewer.getControl().setLayoutData(gridData);
-		helpSystem.setHelp(accessComboViewer.getControl(), IJpaHelpContextIds.ENTITY_ORM_ACCESS);
-		
-		this.persistenceUnitMetadataSection = new PersistenceUnitMetadataSection(composite, this.commandStack, getWidgetFactory());
-		
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.horizontalSpan = 2;
-		this.persistenceUnitMetadataSection.getSection().setLayoutData(gridData);
-	}
-
-	
-	@Override
-	protected void doPopulate(IJpaContentNode contentNode) {
-		this.entityMappings = (EntityMappings) contentNode;
-		this.xmlPackageChooser.populate(this.entityMappings);
-		this.xmlSchemaChooser.populate(new SchemaHolder(this.entityMappings));
-		this.xmlCatalogChooser.populate(new CatalogHolder(this.entityMappings));
-		this.accessComboViewer.populate(new MyAccessHolder(this.entityMappings));	
-		if (this.entityMappings != null) {
-			this.persistenceUnitMetadataSection.populate(this.entityMappings.getPersistenceUnitMetadata());
-		}
-		else {
-			this.persistenceUnitMetadataSection.populate(null);
-		}
-	}
-
-	@Override
-	protected void doPopulate() {
-		this.xmlPackageChooser.populate();
-		this.xmlSchemaChooser.populate();
-		this.xmlCatalogChooser.populate();
-		this.accessComboViewer.populate();
-		this.persistenceUnitMetadataSection.populate();
-	}
-	
-	@Override
-	public void dispose() {
-		this.xmlPackageChooser.dispose();
-		this.xmlSchemaChooser.dispose();
-		this.xmlCatalogChooser.dispose();
-		this.accessComboViewer.dispose();
-		this.persistenceUnitMetadataSection.dispose();
-		super.dispose();
-	}
-	
-	@Override
-	protected void engageListeners() {
-	}
-	
-	@Override
-	protected void disengageListeners() {
-	}
-
-	
-	private class MyAccessHolder extends XmlEObject implements AccessHolder{
-		
-		private EntityMappingsInternal entityMappings;
-		MyAccessHolder(EntityMappings entityMappings) {
-			super();
-			this.entityMappings = (EntityMappingsInternal) entityMappings;
-		}
-		public void setAccess(AccessType accessType) {
-			entityMappings.setSpecifiedAccess(accessType);
-		}
-	
-		public AccessType getAccess() {
-			return entityMappings.getSpecifiedAccess();
-		}
-		
-		public Class featureClass() {
-			return EntityMappingsInternal.class;
-		}
-		
-		public int featureId() {
-			return OrmPackage.ENTITY_MAPPINGS_INTERNAL__SPECIFIED_ACCESS;
-		}
-		
-		public EObject wrappedObject() {
-			return this.entityMappings;
-		}
-		
-	}
-	
-	private class SchemaHolder extends XmlEObject implements StringHolder {
-		private EntityMappingsInternal entityMappings;
-		SchemaHolder(EntityMappings entityMappings) {
-			super();
-			this.entityMappings = (EntityMappingsInternal) entityMappings;
-		}
-		
-		public Class featureClass() {
-			return EntityMappingsInternal.class;
-		}
-		
-		public int featureId() {
-			return OrmPackage.ENTITY_MAPPINGS_INTERNAL__SPECIFIED_SCHEMA;
-		}
-		
-		public boolean supportsDefault() {
-			return true;
-		}
-		
-		public int defaultFeatureId() {
-			return OrmPackage.ENTITY_MAPPINGS_INTERNAL__DEFAULT_SCHEMA;
-		}
-		
-		public String defaultItem() {
-			String defaultSchema = this.entityMappings.getDefaultSchema();
-			if (defaultSchema != null) {
-				return NLS.bind(JptUiXmlMessages.XMLEntityMappingsPage_SchemaDefault, defaultSchema);
-			}
-			return JptUiXmlMessages.XMLEntityMappingsPage_SchemaNoDefaultSpecified;
-		}
-		
-		public String getString() {
-			return this.entityMappings.getSpecifiedSchema();
-		}
-		
-		public void setString(String newSchema) {
-			this.entityMappings.setSpecifiedSchema(newSchema);
-		}
-		
-		public EObject wrappedObject() {
-			return this.entityMappings;
-		}
-	}
-	
-	private class CatalogHolder extends XmlEObject implements StringHolder {
-		private EntityMappingsInternal entityMappings;
-		CatalogHolder(EntityMappings entityMappings) {
-			super();
-			this.entityMappings = (EntityMappingsInternal) entityMappings;
-		}
-		
-		public Class featureClass() {
-			return EntityMappingsInternal.class;
-		}
-		
-		public int featureId() {
-			return OrmPackage.ENTITY_MAPPINGS_INTERNAL__SPECIFIED_CATALOG;
-		}
-		
-		public boolean supportsDefault() {
-			return true;
-		}
-		
-		public int defaultFeatureId() {
-			return OrmPackage.ENTITY_MAPPINGS_INTERNAL__DEFAULT_CATALOG;
-		}
-		
-		public String defaultItem() {
-			String defaultCatalog = this.entityMappings.getDefaultCatalog();
-			if (defaultCatalog != null) {
-				return NLS.bind(JptUiXmlMessages.XMLEntityMappingsPage_CatalogDefault, defaultCatalog);
-			}
-			return JptUiXmlMessages.XMLEntityMappingsPage_CatalogNoDefaultSpecified;
-		}
-		
-		public String getString() {
-			return this.entityMappings.getSpecifiedCatalog();
-		}
-		
-		public void setString(String newCatalog) {
-			this.entityMappings.setSpecifiedCatalog(newCatalog);
-		}
-		
-		public EObject wrappedObject() {
-			return this.entityMappings;
-		}
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlJavaAttributeChooser.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlJavaAttributeChooser.java
deleted file mode 100644
index 8f58be6..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlJavaAttributeChooser.java
+++ /dev/null
@@ -1,133 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.XmlAttributeMapping;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class XmlJavaAttributeChooser extends BaseJpaController
-{
-	private XmlPersistentAttribute attribute;
-	private Adapter persistentAttributeListener;
-	
-	private Text text;
-	
-	
-	public XmlJavaAttributeChooser(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildPersistentAttributeListener();
-	}
-	
-	
-	private void buildPersistentAttributeListener() {
-		this.persistentAttributeListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				persistentAttributeChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		text = getWidgetFactory().createText(parent, "");
-		text.addModifyListener(
-			new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					textModified(e);
-				}
-			});
-	}
-	
-	private void textModified(ModifyEvent e) {
-		if (isPopulating()) {
-			return;
-		}
-		
-		String text = ((Text) e.getSource()).getText();
-		attribute.setName(text);
-		
-		// TODO Does this need to be done?
-		//this.editingDomain.getCommandStack().execute(SetCommand.create(this.editingDomain, this.entity, MappingsPackage.eINSTANCE.getEntity_SpecifiedName(), text));
-	}
-	
-	private void persistentAttributeChanged(Notification notification) {
-		if (notification.getFeatureID(XmlAttributeMapping.class) == 
-				OrmPackage.XML_PERSISTENT_ATTRIBUTE__NAME) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (attribute != null) {
-			attribute.eAdapters().add(persistentAttributeListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (attribute != null) {
-			attribute.eAdapters().remove(persistentAttributeListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		attribute = (obj == null) ? null : ((XmlAttributeMapping) obj).getPersistentAttribute();
-		populateText();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateText();
-	}
-	
-	private void populateText() {
-		if (attribute == null) {
-			text.clearSelection();
-			return;
-		}
-		
-		String name = attribute.getName();
-		
-		if (name == null) {
-			name = "";
-		}
-		setTextData(name);
-	}
-	
-	private void setTextData(String textData) {
-		if (! textData.equals(text.getText())) {
-			text.setText(textData);
-		}
-	}
-	
-	public Control getControl() {
-		return text;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlJavaClassChooser.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlJavaClassChooser.java
deleted file mode 100644
index 43fead2..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlJavaClassChooser.java
+++ /dev/null
@@ -1,249 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper;
-import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaTypeCompletionProcessor;
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentType;
-import org.eclipse.jpt.core.internal.content.orm.XmlTypeMapping;
-import org.eclipse.jpt.ui.internal.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Text;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.eclipse.ui.progress.IProgressService;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-//TODO possibly help the user and if they have chosen a package at the entity-mappings level
-//only insert the class name in the xml file if they choose a class from the package.  
-//Not sure if this should be driven by the UI or by ui api in the model
-public class XmlJavaClassChooser extends BaseJpaController
-{
-	private XmlPersistentType persistentType;
-	private Adapter persistentTypeListener;
-	
-	private Composite composite;
-	private Text text;
-	private JavaTypeCompletionProcessor javaTypeCompletionProcessor;
-	
-	public XmlJavaClassChooser(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildPersistentTypeListener();
-	}
-	
-	
-	private void buildPersistentTypeListener() {
-		persistentTypeListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				persistentTypeChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.composite = getWidgetFactory().createComposite(parent);
-	    GridLayout gridLayout = new GridLayout();
-	    gridLayout.marginHeight = 0;
-	    gridLayout.marginWidth = 1;
-	    gridLayout.numColumns = 2;
-	    this.composite.setLayout(gridLayout);
-	    
-		text = getWidgetFactory().createText(this.composite, "");
-		GridData data = new GridData();
-	    data.grabExcessHorizontalSpace = true;
-	    data.horizontalAlignment = GridData.FILL;
-	    this.text.setLayoutData(data);
-		text.addModifyListener(
-			new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					textModified(e);
-				}
-			});
-
-		//TODO bug 156185 - when this is fixed there should be api for this
-		this.javaTypeCompletionProcessor = new JavaTypeCompletionProcessor(false, false);
-		ControlContentAssistHelper.createTextContentAssistant(this.text,  this.javaTypeCompletionProcessor);
-
-		
-		Button browseButton = getWidgetFactory().createButton(this.composite, "Browse...", SWT.FLAT);
-		data = new GridData();
-		browseButton.setLayoutData(data);
-		browseButton.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				IType type = chooseType();
-				if (type != null) {
-					text.setText(type.getFullyQualifiedName());
-				}
-			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-				IType type = chooseType();
-				if (type != null) {
-					text.setText(type.getFullyQualifiedName());
-				}
-			}
-		});
-
-	}
-
-	private void textModified(ModifyEvent e) {
-		if (isPopulating()) {
-			return;
-		}
-		
-		String text = ((Text) e.getSource()).getText();
-		persistentType.setClass(text);
-		
-		// TODO Does this need to be done?
-		//this.editingDomain.getCommandStack().execute(SetCommand.create(this.editingDomain, this.entity, MappingsPackage.eINSTANCE.getEntity_SpecifiedName(), text));
-	}
-	
-	
-	protected IType chooseType() {
-		IPackageFragmentRoot root= getPackageFragmentRoot();
-		if (root == null) {
-			return null;
-		}	
-		
-		IJavaElement[] elements= new IJavaElement[] { root.getJavaProject() };
-		IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements);
-		IProgressService service = PlatformUI.getWorkbench().getProgressService();
-		
-		SelectionDialog typeSelectionDialog;
-		try {
-			typeSelectionDialog = JavaUI.createTypeDialog(this.text.getShell(), service, scope, IJavaElementSearchConstants.CONSIDER_CLASSES, false, getType());
-		}
-		catch (JavaModelException e) {
-			JptUiPlugin.log(e);
-			throw new RuntimeException(e);
-		}
-		typeSelectionDialog.setTitle(JptUiXmlMessages.XmlJavaClassChooser_XmlJavaClassDialog_title); 
-		typeSelectionDialog.setMessage(JptUiXmlMessages.XmlJavaClassChooser_XmlJavaClassDialog_message); 
-
-		if (typeSelectionDialog.open() == Window.OK) {
-			return (IType) typeSelectionDialog.getResult()[0];
-		}
-		return null;
-	}
-	
-	private String getType() {
-		return this.text.getText();
-	}
-	
-	private IPackageFragmentRoot getPackageFragmentRoot() {
-		IProject project = this.persistentType.getJpaProject().getProject();
-		IJavaProject root = JavaCore.create(project);
-		try {
-			return root.getAllPackageFragmentRoots()[0];
-		}
-		catch (JavaModelException e) {
-			JptUiPlugin.log(e);
-		}
-		return null;
-	}
-
-	private void persistentTypeChanged(Notification notification) {
-		if (notification.getFeatureID(XmlPersistentType.class) == 
-				OrmPackage.XML_PERSISTENT_TYPE__CLASS) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (persistentType != null) {
-			persistentType.eAdapters().add(persistentTypeListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (persistentType != null) {
-			persistentType.eAdapters().remove(persistentTypeListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		persistentType = (obj == null) ? null : ((XmlTypeMapping) obj).getPersistentType();
-		populateText();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateText();
-	}
-	
-	private void populateText() {
-		if (persistentType == null) {
-			text.clearSelection();
-			return;
-		}
-		
-		IPackageFragmentRoot root = getPackageFragmentRoot();
-		if (root != null) {
-			 this.javaTypeCompletionProcessor.setPackageFragment(root.getPackageFragment(""));
-		}
-		
-
-		String javaClass = persistentType.getClass_();
-		
-		if (javaClass == null) {
-			setTextData("");
-		}
-		else {
-			setTextData(javaClass);
-		}
-	}
-	
-	private void setTextData(String textData) {
-		if (! textData.equals(text.getText())) {
-			text.setText(textData);
-		}
-	}
-	
-	public Control getControl() {
-		return this.composite;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlMappingMetadataCompleteCheckBox.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlMappingMetadataCompleteCheckBox.java
deleted file mode 100644
index 5cdd038..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlMappingMetadataCompleteCheckBox.java
+++ /dev/null
@@ -1,128 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.PersistenceUnitMetadata;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class XmlMappingMetadataCompleteCheckBox extends BaseJpaController
-{
-	private PersistenceUnitMetadata persistenceUnitMetadata;
-	private Adapter persistenceUnitMetadataListener;
-	
-	private Button button;
-
-
-	public XmlMappingMetadataCompleteCheckBox(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildPeristenceUnitMetadataListener();
-	}
-	
-	private void buildPeristenceUnitMetadataListener() {
-		this.persistenceUnitMetadataListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				persistenceUnitMetadataChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.button = getWidgetFactory().createButton(
-						parent, 
-						JptUiXmlMessages.XMLEntityMappingsPage_XmlMappingMetadataCompleteCheckBox,
-						SWT.CHECK);
-		
-		this.button.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent event) {
-				XmlMappingMetadataCompleteCheckBox.this.xmlMappingMetadataCompleteSelectionChanged();
-			}
-		
-			public void widgetDefaultSelected(SelectionEvent e) {
-				XmlMappingMetadataCompleteCheckBox.this.xmlMappingMetadataCompleteSelectionChanged();
-			}
-		});
-	}
-	
-	void xmlMappingMetadataCompleteSelectionChanged() {
-		boolean xmlMappingMetadataComplete = this.button.getSelection();
-		if (this.persistenceUnitMetadata.isXmlMappingMetadataComplete() != xmlMappingMetadataComplete) {
-			this.persistenceUnitMetadata.setXmlMappingMetadataComplete(xmlMappingMetadataComplete);
-		}
-	}
-
-	private void persistenceUnitMetadataChanged(Notification notification) {
-		if (notification.getFeatureID(PersistenceUnitMetadata.class) == 
-				OrmPackage.PERSISTENCE_UNIT_METADATA__XML_MAPPING_METADATA_COMPLETE) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.persistenceUnitMetadata != null) {
-			this.persistenceUnitMetadata.eAdapters().add(this.persistenceUnitMetadataListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.persistenceUnitMetadata != null) {
-			this.persistenceUnitMetadata.eAdapters().remove(this.persistenceUnitMetadataListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		this.persistenceUnitMetadata = (PersistenceUnitMetadata) obj;
-		populateButton();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateButton();
-	}
-	
-	private void populateButton() {
-		boolean xmlMappingMetadataComplete = false;
-		if (this.persistenceUnitMetadata != null) {
-			xmlMappingMetadataComplete  = this.persistenceUnitMetadata.isXmlMappingMetadataComplete();
-		}
-		
-		if (this.button.getSelection() != xmlMappingMetadataComplete) {
-			this.button.setSelection(xmlMappingMetadataComplete);
-		}
-	}
-
-	
-	@Override
-	public Control getControl() {
-		return this.button;
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPackageChooser.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPackageChooser.java
deleted file mode 100644
index fbaf451..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPackageChooser.java
+++ /dev/null
@@ -1,255 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper;
-import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaPackageCompletionProcessor;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.internal.XmlEObject;
-import org.eclipse.jpt.core.internal.content.orm.EntityMappings;
-import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.ui.internal.JptUiPlugin;
-import org.eclipse.jpt.ui.internal.details.BaseJpaController;
-import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-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.Text;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class XmlPackageChooser extends BaseJpaController
-{
-	private EntityMappingsInternal entityMappings;
-	private Adapter entityMappingsListener;
-    private IContentAssistProcessor contentAssistProcessor;
-	
-    private Composite composite;
-	private Text text;
-	
-	
-	public XmlPackageChooser(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, theCommandStack, widgetFactory);
-		buildSchemaHolderListener();
-	}
-	
-	
-	private void buildSchemaHolderListener() {
-		this.entityMappingsListener = new AdapterImpl() {
-			public void notifyChanged(Notification notification) {
-				entityMappingsChanged(notification);
-			}
-		};
-	}
-	
-	@Override
-	protected void buildWidget(Composite parent) {
-		this.composite = getWidgetFactory().createComposite(parent);
-	    GridLayout gridLayout = new GridLayout();
-	    gridLayout.marginHeight = 0;
-	    gridLayout.marginWidth = 1;
-	    gridLayout.numColumns = 2;
-	    this.composite.setLayout(gridLayout);
-		this.text = getWidgetFactory().createText(this.composite, "");
-		GridData data = new GridData();
-	    data.grabExcessHorizontalSpace = true;
-	    data.horizontalAlignment = GridData.FILL;
-	    this.text.setLayoutData(data);
-		this.contentAssistProcessor = new JavaPackageCompletionProcessor(new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_ROOT));
-		ControlContentAssistHelper.createTextContentAssistant(this.text, this.contentAssistProcessor);
-
-	    this.text.addModifyListener(
-			new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					textModified(e);
-				}
-			});
-	    
-		Button browseButton = getWidgetFactory().createButton(this.composite, "Browse...", SWT.FLAT);
-		data = new GridData();
-		browseButton.setLayoutData(data);
-		browseButton.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				IPackageFragment packageFragment = choosePackage();
-				if (packageFragment != null) {
-					text.setText(packageFragment.getElementName());
-				}
-			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-				IPackageFragment packageFragment = choosePackage();
-				if (packageFragment != null) {
-					text.setText(packageFragment.getElementName());
-				}
-			}
-		});
-	}
-	
-	private void textModified(ModifyEvent e) {
-		if (isPopulating()) {
-			return;
-		}
-		
-		String text = ((Text) e.getSource()).getText();
-		this.entityMappings.setPackage(text);
-		//TODO set a JEM Package??
-		//.setJavaClass(JavaRefFactory.eINSTANCE.createClassRef(text));
-		
-		// TODO Does this need to be done?
-		//this.editingDomain.getCommandStack().execute(SetCommand.create(this.editingDomain, this.entity, MappingsPackage.eINSTANCE.getEntity_SpecifiedName(), text));
-	}
-	
-	private void entityMappingsChanged(Notification notification) {
-		if (notification.getFeatureID(EntityMappings.class) == 
-				OrmPackage.ENTITY_MAPPINGS__PACKAGE) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						populate();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void engageListeners() {
-		if (this.entityMappings != null) {
-			entityMappings.eAdapters().add(this.entityMappingsListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.entityMappings != null) {
-			this.entityMappings.eAdapters().remove(this.entityMappingsListener);
-		}
-	}
-	
-	@Override
-	public void doPopulate(EObject obj) {
-		this.entityMappings = (EntityMappingsInternal) obj;
-		populateText();
-	}
-	
-	@Override
-	protected void doPopulate() {
-		populateText();
-	}
-	
-	private void populateText() {
-		if (entityMappings == null) {
-			text.clearSelection();
-			return;
-		}
-
-		IPackageFragmentRoot root = getPackageFragmentRoot();
-		if (root != null) {
-			((JavaPackageCompletionProcessor)this.contentAssistProcessor).setPackageFragmentRoot(root);
-		}
-		
-		String package_ = this.entityMappings.getPackage();
-		
-		if (package_ == null) {
-			setTextData("");
-		}
-		else {
-			setTextData(package_);
-		}
-	}
-	
-	private IPackageFragmentRoot getPackageFragmentRoot() {
-		IProject project = ((XmlEObject) this.entityMappings).getJpaProject().getProject();
-		IJavaProject root = JavaCore.create(project);
-		try {
-			return root.getAllPackageFragmentRoots()[0];
-		}
-		catch (JavaModelException e) {
-			JptUiPlugin.log(e);
-		}
-		return null;
-	}
-	
-	private void setTextData(String textData) {
-		if (! textData.equals(text.getText())) {
-			text.setText(textData);
-		}
-	}
-	
-	@Override
-	public Control getControl() {
-		return this.composite;
-	}
-	
-	/**
-	 * Opens a selection dialog that allows to select a package. 
-	 * 
-	 * @return returns the selected package or <code>null</code> if the dialog has been canceled.
-	 * The caller typically sets the result to the package input field.
-	 * <p>
-	 * Clients can override this method if they want to offer a different dialog.
-	 * </p>
-	 * 
-	 * @since 3.2
-	 */
-	protected IPackageFragment choosePackage() {		
-		SelectionDialog selectionDialog;
-		try {
-			selectionDialog = JavaUI.createPackageDialog(text.getShell(), getPackageFragmentRoot());
-		}
-		catch (JavaModelException e) {
-			JptUiPlugin.log(e);
-			throw new RuntimeException(e);
-		}
-		selectionDialog.setTitle(JptUiXmlMessages.XmlPackageChooser_PackageDialog_title); 
-		selectionDialog.setMessage(JptUiXmlMessages.XmlPackageChooser_PackageDialog_message); 
-		selectionDialog.setHelpAvailable(false);
-		IPackageFragment pack= getPackageFragment();
-		if (pack != null) {
-			selectionDialog.setInitialSelections(new Object[] { pack });
-		}
-
-		if (selectionDialog.open() == Window.OK) {
-			return (IPackageFragment) selectionDialog.getResult()[0];
-		}
-		return null;
-	}
-
-	/**
-	 * Returns the package fragment corresponding to the current input.
-	 * 
-	 * @return a package fragment or <code>null</code> if the input 
-	 * could not be resolved.
-	 */
-	public IPackageFragment getPackageFragment() {
-		String packageString = this.text.getText();
-		return getPackageFragmentRoot().getPackageFragment(packageString);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentAttributeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentAttributeDetailsPage.java
deleted file mode 100644
index 7940f55..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentAttributeDetailsPage.java
+++ /dev/null
@@ -1,173 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import java.util.Iterator;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.jpt.core.internal.IPersistentAttribute;
-import org.eclipse.jpt.core.internal.IPersistentType;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.XmlAttributeMapping;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentType;
-import org.eclipse.jpt.ui.internal.details.PersistentAttributeDetailsPage;
-import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-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.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.part.PageBook;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class XmlPersistentAttributeDetailsPage
-	extends PersistentAttributeDetailsPage 
-{
-	private XmlJavaAttributeChooser javaAttributeChooser;
-	
-	private Adapter persistentTypeListener;
-	
-	private IPersistentType persistentType;
-	
-	public XmlPersistentAttributeDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, widgetFactory);
-		buildPersistentTypeListener();
-	}
-	
-	private void buildPersistentTypeListener() {
-		this.persistentTypeListener = new AdapterImpl() {
-			@Override
-			public void notifyChanged(Notification notification) {
-				persistentTypeChanged(notification);
-			}
-		};
-	}
-	
-	void persistentTypeChanged(Notification notification) {
-		if (notification.getFeatureID(XmlPersistentType.class) == 
-			OrmPackage.XML_PERSISTENT_TYPE__SPECIFIED_ATTRIBUTE_MAPPINGS) {
-			Display.getDefault().asyncExec(
-				new Runnable() {
-					public void run() {
-						updateEnbabledState();
-					}
-				});
-		}
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		composite.setLayout(new GridLayout(2, false));
-		
-		GridData gridData;
-		
-		CommonWidgets.buildJavaAttributeNameLabel(composite, getWidgetFactory());
-		
-		this.javaAttributeChooser = CommonWidgets.buildJavaAttributeChooser(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.javaAttributeChooser.getControl().setLayoutData(gridData);
-
-		
-		buildMappingLabel(composite);
-		
-		CComboViewer mappingCombo = buildMappingCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		mappingCombo.getCombo().setLayoutData(gridData);
-		
-		PageBook book = buildMappingPageBook(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		book.setLayoutData(gridData);
-	}
-	
-	@Override
-	protected void engageListeners() {
-		super.engageListeners();
-		if (getAttribute() != null) {
-			this.persistentType = getAttribute().typeMapping().getPersistentType();
-			this.persistentType.eAdapters().add(this.persistentTypeListener);
-		}
-	}
-	
-	@Override
-	protected void disengageListeners() {
-		if (this.persistentType != null) {
-			this.persistentType.eAdapters().remove(this.persistentTypeListener);
-			this.persistentType = null;
-		}
-		super.disengageListeners();
-	}
-	
-	@Override
-	protected void doPopulate(IJpaContentNode persistentAttributeNode) {
-		super.doPopulate(persistentAttributeNode);
-		if (persistentAttributeNode == null) {
-			this.javaAttributeChooser.populate(null);
-		}
-		else {
-			XmlAttributeMapping mapping = ((XmlPersistentAttribute) persistentAttributeNode).getMapping();
-			this.javaAttributeChooser.populate(mapping);
-			updateEnbabledState();
-		}
-	}
-	
-	@Override
-	protected void doPopulate() {
-		super.doPopulate();
-		this.javaAttributeChooser.populate();
-		updateEnbabledState();
-	}
-	
-	@Override
-	public void dispose() {
-		this.javaAttributeChooser.dispose();
-		super.dispose();
-	}
-	
-	public void updateEnbabledState() {
-		if (getAttribute() == null || getAttribute().eContainer() == null) {
-			return;
-		}
-		boolean enabled = !((XmlPersistentAttribute) getAttribute()).isVirtual();
-		updateEnabledState(enabled, getControl());
-	}
-	
-	public void updateEnabledState(boolean enabled, Control control) {
-		control.setEnabled(enabled);
-		if (control instanceof Composite) {
-			for (Iterator<Control> i = new ArrayIterator<Control>(((Composite) control).getChildren()); i.hasNext(); ) {
-				updateEnabledState(enabled, i.next());
-			}
-		}
-	}
-	
-	@Override
-	//TODO Not really how I would want to implement this, but it is low risk fix for bug 192035 for 1.0RC3
-	protected IAttributeMappingUiProvider[] uiProvidersFor(IPersistentAttribute persistentAttribute) {
-		return attributeMappingUiProviders().toArray(new IAttributeMappingUiProvider[attributeMappingUiProviders().size()]);
-	}
-
-}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentTypeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentTypeDetailsPage.java
deleted file mode 100644
index 3c61547..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentTypeDetailsPage.java
+++ /dev/null
@@ -1,171 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.details;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jpt.core.internal.AccessType;
-import org.eclipse.jpt.core.internal.IJpaContentNode;
-import org.eclipse.jpt.core.internal.XmlEObject;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentType;
-import org.eclipse.jpt.core.internal.content.orm.XmlTypeMapping;
-import org.eclipse.jpt.ui.internal.details.PersistentTypeDetailsPage;
-import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddableUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.EntityUiProvider;
-import org.eclipse.jpt.ui.internal.java.mappings.properties.MappedSuperclassUiProvider;
-import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
-import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
-import org.eclipse.jpt.ui.internal.xml.details.AccessTypeComboViewer.AccessHolder;
-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.swt.widgets.Label;
-import org.eclipse.ui.part.PageBook;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
-
-public class XmlPersistentTypeDetailsPage extends PersistentTypeDetailsPage 
-{
-	private XmlJavaClassChooser javaClassChooser;
-	
-	private MetaDataCompleteComboViewer metadataCompleteComboViewer;
-	
-	private AccessTypeComboViewer accessComboViewer;
-	
-	public XmlPersistentTypeDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
-		super(parent, widgetFactory);
-	}
-	
-	protected Collection<ITypeMappingUiProvider> buildTypeMappingUiProviders() {
-		Collection<ITypeMappingUiProvider> typeMappingUiProviders = new ArrayList<ITypeMappingUiProvider>();
-		typeMappingUiProviders.add(new EntityUiProvider());
-		typeMappingUiProviders.add(new MappedSuperclassUiProvider());			
-		typeMappingUiProviders.add(new EmbeddableUiProvider());			
-		return typeMappingUiProviders;
-	}
-	
-	@Override
-	protected void initializeLayout(Composite composite) {
-		composite.setLayout(new GridLayout(2, false));
-		
-		GridData gridData;
-		
-		CommonWidgets.buildJavaClassLabel(composite, getWidgetFactory());
-		
-		this.javaClassChooser = CommonWidgets.buildJavaClassChooser(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.javaClassChooser.getControl().setLayoutData(gridData);
-		
-		buildTypeMappingLabel(composite);
-		
-		CComboViewer typeMappingCombo = buildTypeMappingCombo(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		typeMappingCombo.getCombo().setLayoutData(gridData);
-		
-		buildMetadataCompleteLabel(composite);
-		this.metadataCompleteComboViewer = new MetaDataCompleteComboViewer(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.metadataCompleteComboViewer.getControl().setLayoutData(gridData);
-		
-		CommonWidgets.buildAccessLabel(composite, getWidgetFactory());
-		this.accessComboViewer = CommonWidgets.buildAccessTypeComboViewer(composite, this.commandStack, getWidgetFactory());
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.BEGINNING;
-		gridData.grabExcessHorizontalSpace = true;
-		this.accessComboViewer.getControl().setLayoutData(gridData);
-
-		PageBook typeMappingPageBook = buildTypeMappingPageBook(composite);
-		gridData = new GridData();
-		gridData.horizontalAlignment = SWT.FILL;
-		gridData.verticalAlignment = SWT.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 2;
-		typeMappingPageBook.setLayoutData(gridData);
-	}
-		
-	private Label buildMetadataCompleteLabel(Composite parent ) {
-		return getWidgetFactory().createLabel(parent, JptUiXmlMessages.PersistentTypePage_MetadataCompleteLabel);
-	}
-	
-	@Override
-	protected void doPopulate(IJpaContentNode persistentTypeNode) {
-		super.doPopulate(persistentTypeNode);
-		if (persistentTypeNode == null) {
-			this.javaClassChooser.populate(null);
-			this.metadataCompleteComboViewer.populate(null);
-			this.accessComboViewer.populate(new MyAccessHolder(null));
-		}
-		else {
-			XmlTypeMapping mapping = ((XmlPersistentType) persistentTypeNode).getMapping();
-			this.javaClassChooser.populate(mapping);
-			this.metadataCompleteComboViewer.populate(mapping);
-			this.accessComboViewer.populate(new MyAccessHolder(mapping));
-		}
-	}
-	
-	@Override
-	protected void doPopulate() {
-		super.doPopulate();
-		this.javaClassChooser.populate();
-		this.metadataCompleteComboViewer.populate();
-		this.accessComboViewer.populate();
-	}
-
-	@Override
-	public void dispose() {
-		this.javaClassChooser.dispose();
-		this.metadataCompleteComboViewer.dispose();
-		this.accessComboViewer.dispose();
-		super.dispose();
-	}
-	
-		
-	private class MyAccessHolder extends XmlEObject implements AccessHolder{
-		
-		private XmlTypeMapping xmlTypeMapping;
-		MyAccessHolder(XmlTypeMapping xmlTypeMapping) {
-			super();
-			this.xmlTypeMapping = xmlTypeMapping;
-		}
-		public void setAccess(AccessType accessType) {
-			xmlTypeMapping.setSpecifiedAccess(accessType);
-		}
-	
-		public AccessType getAccess() {
-			return xmlTypeMapping.getSpecifiedAccess();
-		}
-		
-		public Class featureClass() {
-			return XmlTypeMapping.class;
-		}
-		
-		public int featureId() {
-			return OrmPackage.XML_TYPE_MAPPING__SPECIFIED_ACCESS;
-		}
-		
-		public EObject wrappedObject() {
-			return this.xmlTypeMapping;
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/EntityMappingsItemProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/EntityMappingsItemProvider.java
deleted file mode 100644
index 171664b..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/EntityMappingsItemProvider.java
+++ /dev/null
@@ -1,73 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.structure;
-
-import java.util.Collection;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsImages;
-
-public class EntityMappingsItemProvider extends ItemProviderAdapter
-	implements IEditingDomainItemProvider, 
-			IStructuredItemContentProvider,
-			ITreeItemContentProvider, 
-			IItemLabelProvider
-{
-	public EntityMappingsItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	@Override
-	public Collection getChildrenFeatures(Object object) {
-		if (childrenFeatures == null) {
-			super.getChildrenFeatures(object);
-			childrenFeatures.add(OrmPackage.Literals.ENTITY_MAPPINGS_INTERNAL__PERSISTENT_TYPES);
-		}
-		return childrenFeatures;
-	}
-	
-	@Override
-	public Object getParent(Object object) {
-		return null;
-	}
-	
-	@Override
-	public Object getImage(Object object) {
-		return JptUiMappingsImages.getImage(JptUiMappingsImages.ENTITY_MAPPINGS);
-	}
-	
-	@Override
-	public String getText(Object object) {
-		// TODO
-		return "EntityMappings";
-	}
-	
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(EntityMappingsInternal.class)) {
-			case OrmPackage.ENTITY_MAPPINGS_INTERNAL__PERSISTENT_TYPES:
-			case OrmPackage.ENTITY_MAPPINGS_INTERNAL__TYPE_MAPPINGS:
-			fireNotifyChanged(
-				new ViewerNotification(
-					notification, notification.getNotifier(), true, false));
-			return;
-		}
-		super.notifyChanged(notification);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/JpaCoreXmlItemProviderAdapterFactory.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/JpaCoreXmlItemProviderAdapterFactory.java
deleted file mode 100644
index a79c0ff..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/JpaCoreXmlItemProviderAdapterFactory.java
+++ /dev/null
@@ -1,197 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.structure;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.edit.provider.ChangeNotifier;
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.provider.IChangeNotifier;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.INotifyChangedListener;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.jpt.core.internal.content.orm.util.OrmAdapterFactory;
-import org.eclipse.ui.services.IDisposable;
-
-/**
- * This is the factory that is used to provide the interfaces needed to support Viewers.
- * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
- * The adapters also support Eclipse property sheets.
- * Note that most of the adapters are shared among multiple instances.
- */
-public class JpaCoreXmlItemProviderAdapterFactory 
-	extends OrmAdapterFactory 
-	implements ComposeableAdapterFactory,
-		IChangeNotifier, 
-		IDisposable 
-{
-	/**
-	 * This keeps track of the root adapter factory that delegates to this adapter factory.
-	 */
-	protected ComposedAdapterFactory parentAdapterFactory;
-
-	/**
-	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
-	 */
-	protected IChangeNotifier changeNotifier = new ChangeNotifier();
-
-	/**
-	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
-	 */
-	protected Collection supportedTypes = new ArrayList();
-
-	public JpaCoreXmlItemProviderAdapterFactory() {
-		supportedTypes.add(IEditingDomainItemProvider.class);
-		supportedTypes.add(IStructuredItemContentProvider.class);
-		supportedTypes.add(ITreeItemContentProvider.class);
-		supportedTypes.add(IItemLabelProvider.class);
-	}
-	
-	
-	protected XmlRootContentNodeItemProvider xmlRootContentNodeItemProvider;
-	
-	public Adapter createXmlRootContentNodeAdapter() {
-		if (xmlRootContentNodeItemProvider == null) {
-			xmlRootContentNodeItemProvider = new XmlRootContentNodeItemProvider(this);
-		}
-
-		return xmlRootContentNodeItemProvider;
-	}
-	
-	protected EntityMappingsItemProvider entityMappingsItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.jpt.core.internal.content.orm.EntityMappingsImpl}.
-	 */
-	public Adapter createEntityMappingsAdapter() {
-		if (entityMappingsItemProvider == null) {
-			entityMappingsItemProvider = new EntityMappingsItemProvider(this);
-		}
-
-		return entityMappingsItemProvider;
-	}
-	
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.jpt.core.internal.content.orm.XmlPersistentType} instances.
-	 */
-	protected XmlPersistentTypeItemProvider xmlPersistentTypeItemProvider;
-	
-	/**
-	 * This creates an adapter for a {@link org.eclipse.jpt.core.internal.content.orm.XmlPersistentType}.
-	 */
-	public Adapter createXmlPersistentTypeAdapter() {
-		if (xmlPersistentTypeItemProvider == null) {
-			xmlPersistentTypeItemProvider = new XmlPersistentTypeItemProvider(
-					this);
-		}
-		
-		return xmlPersistentTypeItemProvider;
-	}
-	
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute} instances.
-	 */
-	protected XmlPersistentAttributeItemProvider xmlPersistentAttributeItemProvider;
-	
-	/**
-	 * This creates an adapter for a {@link org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute}.
-	 */
-	public Adapter createXmlPersistentAttributeAdapter() {
-		if (xmlPersistentAttributeItemProvider == null) {
-			xmlPersistentAttributeItemProvider = new XmlPersistentAttributeItemProvider(
-					this);
-		}
-		
-		return xmlPersistentAttributeItemProvider;
-	}
-	
-	/**
-	 * This returns the root adapter factory that contains this factory.
-	 */
-	public ComposeableAdapterFactory getRootAdapterFactory() {
-		return parentAdapterFactory == null ? this : parentAdapterFactory
-				.getRootAdapterFactory();
-	}
-	
-	/**
-	 * This sets the composed adapter factory that contains this factory.
-	 */
-	public void setParentAdapterFactory(
-			ComposedAdapterFactory parentAdapterFactory) {
-		this.parentAdapterFactory = parentAdapterFactory;
-	}
-	
-	public boolean isFactoryForType(Object type) {
-		return supportedTypes.contains(type) || super.isFactoryForType(type);
-	}
-	
-	/**
-	 * This implementation substitutes the factory itself as the key for the adapter.
-	 */
-	public Adapter adapt(Notifier notifier, Object type) {
-		return super.adapt(notifier, this);
-	}
-	
-	public Object adapt(Object object, Object type) {
-		if (isFactoryForType(type)) {
-			Object adapter = super.adapt(object, type);
-			if (!(type instanceof Class)
-					|| (((Class) type).isInstance(adapter))) {
-				return adapter;
-			}
-		}
-		
-		return null;
-	}
-	
-	/**
-	 * This adds a listener.
-	 */
-	public void addListener(INotifyChangedListener notifyChangedListener) {
-		changeNotifier.addListener(notifyChangedListener);
-	}
-	
-	/**
-	 * This removes a listener.
-	 */
-	public void removeListener(INotifyChangedListener notifyChangedListener) {
-		changeNotifier.removeListener(notifyChangedListener);
-	}
-	
-	/**
-	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
-	 */
-	public void fireNotifyChanged(Notification notification) {
-		changeNotifier.fireNotifyChanged(notification);
-		
-		if (parentAdapterFactory != null) {
-			parentAdapterFactory.fireNotifyChanged(notification);
-		}
-	}
-	
-	/**
-	 * This disposes all of the item providers created by this factory. 
-	 */
-	public void dispose() {
-		if (xmlRootContentNodeItemProvider != null)
-			xmlRootContentNodeItemProvider.dispose();
-		if (entityMappingsItemProvider != null)
-			entityMappingsItemProvider.dispose();
-		if (xmlPersistentTypeItemProvider != null)
-			xmlPersistentTypeItemProvider.dispose();
-		if (xmlPersistentAttributeItemProvider != null)
-			xmlPersistentAttributeItemProvider.dispose();
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlPersistentAttributeItemProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlPersistentAttributeItemProvider.java
deleted file mode 100644
index e9f4260..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlPersistentAttributeItemProvider.java
+++ /dev/null
@@ -1,116 +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
- ******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.structure;
-
-import org.eclipse.draw2d.ImageUtilities;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.XmlAttributeMapping;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute;
-import org.eclipse.jpt.core.internal.mappings.IBasic;
-import org.eclipse.jpt.core.internal.mappings.IEmbedded;
-import org.eclipse.jpt.core.internal.mappings.IEmbeddedId;
-import org.eclipse.jpt.core.internal.mappings.IId;
-import org.eclipse.jpt.core.internal.mappings.IManyToMany;
-import org.eclipse.jpt.core.internal.mappings.IManyToOne;
-import org.eclipse.jpt.core.internal.mappings.IOneToMany;
-import org.eclipse.jpt.core.internal.mappings.IOneToOne;
-import org.eclipse.jpt.core.internal.mappings.ITransient;
-import org.eclipse.jpt.core.internal.mappings.IVersion;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsImages;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-
-public class XmlPersistentAttributeItemProvider extends ItemProviderAdapter
-	implements IEditingDomainItemProvider, 
-		IStructuredItemContentProvider,
-		ITreeItemContentProvider, 
-		IItemLabelProvider
-{
-	public XmlPersistentAttributeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-	
-	@Override
-	public Object getImage(Object object) {
-		XmlAttributeMapping mapping = ((XmlPersistentAttribute) object).getMapping();
-		
-		Image image;
-		if (mapping instanceof IBasic) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.BASIC);
-		}
-		else if (mapping instanceof IId) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.ID);
-		}
-		else if (mapping instanceof IVersion) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.VERSION);
-		}
-		else if (mapping instanceof IEmbedded) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.EMBEDDED);
-		}
-		else if (mapping instanceof IEmbeddedId) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.EMBEDDED_ID);
-		}
-		else if (mapping instanceof IOneToOne) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.ONE_TO_ONE);
-		}
-		else if (mapping instanceof IOneToMany) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.ONE_TO_MANY);
-		}
-		else if (mapping instanceof IManyToOne) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.MANY_TO_ONE);
-		}
-		else if (mapping instanceof IManyToMany) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.MANY_TO_MANY);
-		}
-		else if (mapping instanceof ITransient) {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.TRANSIENT);
-		}
-		else {
-			image = JptUiMappingsImages.getImage(JptUiMappingsImages.NULL_ATTRIBUTE_MAPPING);
-		}
-		
-		// apply "ghosting"
-		if (mapping.isVirtual()) {
-			Color offwhite = new Color(image.getDevice(), 250, 250, 250);
-			ImageData imageData = ImageUtilities.createShadedImage(image, offwhite);
-			image = new Image(image.getDevice(), imageData);
-		}
-		
-		return image;
-	}
-	
-	@Override
-	public String getText(Object object) {
-		return ((XmlPersistentAttribute) object).getName();
-	}
-	
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(XmlPersistentAttribute.class)) {
-		case OrmPackage.XML_PERSISTENT_ATTRIBUTE__MAPPING:
-		case OrmPackage.XML_PERSISTENT_ATTRIBUTE__NAME:
-			fireNotifyChanged(new ViewerNotification(notification, notification
-					.getNotifier(), false, true));
-			return;
-		}
-		super.notifyChanged(notification);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlPersistentTypeItemProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlPersistentTypeItemProvider.java
deleted file mode 100644
index f87750a..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlPersistentTypeItemProvider.java
+++ /dev/null
@@ -1,96 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.structure;
-
-import java.util.Collection;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.eclipse.jpt.core.internal.IPersistentType;
-import org.eclipse.jpt.core.internal.ITypeMapping;
-import org.eclipse.jpt.core.internal.JpaCorePackage;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-import org.eclipse.jpt.core.internal.content.orm.XmlPersistentType;
-import org.eclipse.jpt.core.internal.mappings.IEmbeddable;
-import org.eclipse.jpt.core.internal.mappings.IEntity;
-import org.eclipse.jpt.core.internal.mappings.IMappedSuperclass;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsImages;
-
-public class XmlPersistentTypeItemProvider extends ItemProviderAdapter
-	implements IEditingDomainItemProvider, 
-			IStructuredItemContentProvider,
-			ITreeItemContentProvider, 
-			IItemLabelProvider
-{
-	public XmlPersistentTypeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-	
-	
-	@Override
-	protected Collection getChildrenFeatures(Object object) {
-		if (childrenFeatures == null) {
-			super.getChildrenFeatures(object);
-			childrenFeatures.add(OrmPackage.Literals.XML_PERSISTENT_TYPE__SPECIFIED_PERSISTENT_ATTRIBUTES);
-			childrenFeatures.add(OrmPackage.Literals.XML_PERSISTENT_TYPE__VIRTUAL_PERSISTENT_ATTRIBUTES);
-		}
-		return childrenFeatures;
-	}
-	
-	@Override
-	public Object getImage(Object object) {
-		ITypeMapping mapping = ((IPersistentType) object).getMapping();
-		
-		if (mapping instanceof IEntity) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.ENTITY);
-		}
-		else if (mapping instanceof IEmbeddable) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.EMBEDDABLE);
-		}
-		else if (mapping instanceof IMappedSuperclass) {
-			return JptUiMappingsImages.getImage(JptUiMappingsImages.MAPPED_SUPERCLASS);
-		}
-		else {
-			return null;
-		}
-	}
-	
-	@Override
-	public String getText(Object object) {
-		return ((XmlPersistentType) object).getClass_();
-	}
-	
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(XmlPersistentType.class)) {
-			case JpaCorePackage.IPERSISTENT_TYPE__MAPPING_KEY:
-			case OrmPackage.XML_PERSISTENT_TYPE__CLASS:
-				fireNotifyChanged(
-					new ViewerNotification(
-						notification, notification.getNotifier(), false, true));
-				return;
-			
-			case OrmPackage.XML_PERSISTENT_TYPE__SPECIFIED_PERSISTENT_ATTRIBUTES:
-			case OrmPackage.XML_PERSISTENT_TYPE__VIRTUAL_PERSISTENT_ATTRIBUTES:
-				fireNotifyChanged(
-					new ViewerNotification(
-						notification, notification.getNotifier(), true, false));
-				return;
-		}
-		
-		super.notifyChanged(notification);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlRootContentNodeItemProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlRootContentNodeItemProvider.java
deleted file mode 100644
index 969c7c8..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlRootContentNodeItemProvider.java
+++ /dev/null
@@ -1,55 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.structure;
-
-import java.util.Collection;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.eclipse.jpt.core.internal.content.orm.EntityMappings;
-import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
-
-public class XmlRootContentNodeItemProvider extends ItemProviderAdapter
-	implements IEditingDomainItemProvider, 
-			IStructuredItemContentProvider,
-			ITreeItemContentProvider, 
-			IItemLabelProvider
-{
-	public XmlRootContentNodeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-	
-	@Override
-	public Collection getChildrenFeatures(Object object) {
-		if (childrenFeatures == null) {
-			super.getChildrenFeatures(object);
-			childrenFeatures.add(OrmPackage.Literals.XML_ROOT_CONTENT_NODE__ENTITY_MAPPINGS);
-		}
-		return childrenFeatures;
-	}
-	
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(EntityMappings.class)) {
-		case OrmPackage.XML_ROOT_CONTENT_NODE__ENTITY_MAPPINGS:
-			fireNotifyChanged(
-				new ViewerNotification(
-					notification, notification.getNotifier(), true, false));
-			return;
-		}
-		super.notifyChanged(notification);
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlStructureProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlStructureProvider.java
deleted file mode 100644
index ca7dddc..0000000
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/structure/XmlStructureProvider.java
+++ /dev/null
@@ -1,36 +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
- *******************************************************************************/
-package org.eclipse.jpt.ui.internal.xml.structure;
-
-import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
-import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jpt.core.internal.JptCorePlugin;
-import org.eclipse.jpt.ui.internal.structure.IJpaStructureProvider;
-
-public class XmlStructureProvider implements IJpaStructureProvider {
-
-	public String fileContentType() {
-		return JptCorePlugin.ORM_XML_CONTENT_TYPE;
-	}
-	
-	public ITreeContentProvider buildContentProvider() {
-		return new AdapterFactoryContentProvider(new JpaCoreXmlItemProviderAdapterFactory());
-	}
-	
-	public ILabelProvider buildLabelProvider() {
-		return new AdapterFactoryLabelProvider(new JpaCoreXmlItemProviderAdapterFactory());
-	}
-	
-	public void dispose() {
-		// TODO Auto-generated method stub
-		
-	}
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/.classpath b/jpa/plugins/org.eclipse.jpt.utility/.classpath
deleted file mode 100644
index 1d0cf0d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/.classpath
+++ /dev/null
@@ -1,12 +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/wst/**"/>
-			<accessrule kind="accessible" pattern="org/eclipse/jst/**"/>
-		</accessrules>
-	</classpathentry>
-	<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 42191b4..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-@dot
-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 8b1918d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:11:35 EDT 2007
-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 20aef05..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.jpt.utility
-Bundle-Version: 1.0.0.qualifier
-Bundle-Localization: plugin
-Export-Package: org.eclipse.jpt.utility.internal,
- org.eclipse.jpt.utility.internal.iterators
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
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 9e73bda..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>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>
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 b210b28..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/component.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><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 95c029d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/plugin.properties
+++ /dev/null
@@ -1,24 +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 Tools - Utility
-providerName = Eclipse.org
-
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 2c68536..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Bag.java
+++ /dev/null
@@ -1,49 +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.internal;
-
-/**
- * A collection that allows duplicate elements.
- * <p>
- * The <code>Bag</code> interface places additional stipulations,
- * beyond those inherited from the <code>java.util.Collection</code> interface,
- * on the contracts of the <code>equals</code> and <code>hashCode</code> methods.
- * 
- * @version 1.00 Jan-2002
- * @see java.util.Collection
- * @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 <code>Object.hashCode</code> method.
-	 */
-	int hashCode();
-	
-}
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 cc1221a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/BitTools.java
+++ /dev/null
@@ -1,70 +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
- ******************************************************************************/
-package org.eclipse.jpt.utility.internal;
-
-/**
- * Assorted bit tools
- */
-public class BitTools {
-
-	/**
-	 * 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 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 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 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;
-	}
-
-
-	// ********** 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/ClassTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ClassTools.java
deleted file mode 100644
index 9f8e202..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ClassTools.java
+++ /dev/null
@@ -1,1505 +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.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.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 REFERENCE_CLASS_CODE = 'L';
-	public static final char REFERENCE_CLASS_NAME_DELIMITER = ';';
-	
-	private static PrimitiveClassCode[] PRIMITIVE_CLASS_CODES;  // 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
-
-
-	/**
-	 * Return all the fields for the
-	 * specified class, including inherited fields.
-	 * Class#allFields()
-	 */
-	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
-	 */
-	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) {
-		StringBuffer sb = new StringBuffer(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) {
-		StringBuffer sb = new StringBuffer(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 getFieldValue(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 getStaticFieldValue(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,.
-	 */
-	public static Class<?> classForName(String javaClassName) {
-		try {
-			return Class.forName(javaClassName);
-		} catch (ClassNotFoundException ex) {
-			throw new RuntimeException(javaClassName, 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 javaClassName) throws ClassNotFoundException {
-		return newInstance(javaClassName, ClassTools.class.getClassLoader());
-	}
-	
-	/**
-	 * 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 javaClassName, ClassLoader classLoader) throws ClassNotFoundException {
-		return newInstance(classLoader.loadClass(javaClassName));
-	}
-	
-	/**
-	 * 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 javaClassName, Class<?>[] parameterTypes, Object[] parameters) throws ClassNotFoundException {
-		return newInstance(javaClassName, parameterTypes, parameters, ClassTools.class.getClassLoader());
-	}
-	
-	/**
-	 * 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 javaClassName, Class<?>[] parameterTypes, Object[] parameters, ClassLoader classLoader) throws ClassNotFoundException {
-		return newInstance(classLoader.loadClass(javaClassName), 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 javaClassName, Class<?> parameterType, Object parameter) throws ClassNotFoundException {
-		return newInstance(javaClassName, parameterType, parameter, ClassTools.class.getClassLoader());
-	}
-	
-	/**
-	 * 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 javaClassName, Class<?> parameterType, Object parameter, ClassLoader classLoader) throws ClassNotFoundException {
-		return newInstance(classLoader.loadClass(javaClassName), 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) {
-		StringBuffer sb = new StringBuffer(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. not void or one of the primitives).
-	 */
-	public static boolean classNamedIsReference(String className) {
-		return ! classNamedIsNonReference(className);
-	}
-
-	/**
-	 * Return whether the specified class is a "non-reference"
-	 * class (i.e. void or one of the primitives).
-	 */
-	public static boolean classNamedIsNonReference(String className) {
-		if (classNamedIsArray(className) || (className.length() > maxPrimitiveClassNameLength())) {
-			return false;  // performance tweak
-		}
-		PrimitiveClassCode[] codes = primitiveClassCodes();
-		for (int i = codes.length; i-- > 0; ) {
-			if (codes[i].javaClass.getName().equals(className)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * 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) {
-		PrimitiveClassCode[] codes = primitiveClassCodes();
-		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())) {
-			PrimitiveClassCode[] codes = primitiveClassCodes();
-			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())) {
-			PrimitiveClassCode[] codes = primitiveClassCodes();
-			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 specified "type declaration".
-	 */
-	public static Class<?> classForTypeDeclaration(String elementTypeName, int arrayDepth) throws ClassNotFoundException {
-		return classForTypeDeclaration(elementTypeName, arrayDepth, ClassTools.class.getClassLoader());
-	}
-	
-	/**
-	 * Return the class for specified "type declaration",
-	 * using the specified class loader.
-	 */
-	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
-		PrimitiveClassCode pcc = null;
-		if (elementTypeName.length() <= maxPrimitiveClassNameLength()) {  // performance tweak
-			PrimitiveClassCode[] codes = primitiveClassCodes();
-			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) ? classLoader.loadClass(elementTypeName) : pcc.javaClass;
-		}
-
-		// array
-		StringBuffer sb = new StringBuffer(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 classLoader.loadClass(sb.toString());
-	}
-	
-	/**
-	 * Return the class name for specified "type declaration".
-	 */
-	public static String classNameForTypeDeclaration(String elementTypeName, int arrayDepth) {
-		// non-array
-		if (arrayDepth == 0) {
-			return elementTypeName;
-		}
-
-		if (elementTypeName.equals(void.class.getName())) {
-			throw new IllegalArgumentException("'void' must have an array depth of zero: " + arrayDepth + '.');
-		}
-		// array
-		StringBuffer sb = new StringBuffer(100);
-		for (int i = arrayDepth; i-- > 0; ) {
-			sb.append(ARRAY_INDICATOR);
-		}
-
-		// look for a primitive first
-		PrimitiveClassCode pcc = null;
-		if (elementTypeName.length() <= maxPrimitiveClassNameLength()) {  // performance tweak
-			PrimitiveClassCode[] codes = primitiveClassCodes();
-			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;
-		PrimitiveClassCode[] codes = primitiveClassCodes();
-		for (int i = codes.length; i-- > 0; ) {
-			int len = codes[i].javaClass.getName().length();
-			if (len > max) {
-				max = len;
-			}
-		}
-		return max;
-	}
-
-	private static PrimitiveClassCode[] primitiveClassCodes() {
-		if (PRIMITIVE_CLASS_CODES == null) {
-			PRIMITIVE_CLASS_CODES = buildPrimitiveClassCodes();
-		}
-		return PRIMITIVE_CLASS_CODES;
-	}
-	
-	private static PrimitiveClassCode[] buildPrimitiveClassCodes() {
-		PrimitiveClassCode[] result = new PrimitiveClassCode[9];
-		result[0] = new PrimitiveClassCode(BYTE_CODE, byte.class);
-		result[1] = new PrimitiveClassCode(CHAR_CODE, char.class);
-		result[2] = new PrimitiveClassCode(DOUBLE_CODE, double.class);
-		result[3] = new PrimitiveClassCode(FLOAT_CODE, float.class);
-		result[4] = new PrimitiveClassCode(INT_CODE, int.class);
-		result[5] = new PrimitiveClassCode(LONG_CODE, long.class);
-		result[6] = new PrimitiveClassCode(SHORT_CODE, short.class);
-		result[7] = new PrimitiveClassCode(BOOLEAN_CODE, boolean.class);
-		result[8] = new PrimitiveClassCode(VOID_CODE, void.class);
-		return result;
-	}
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private ClassTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-
-	// ********** member class **********
-
-	private static class PrimitiveClassCode {
-		char code;
-		Class<?> javaClass;
-		PrimitiveClassCode(char code, Class<?> javaClass) {
-			this.code = code;
-			this.javaClass = javaClass;
-		}
-	}
-
-}
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 0eac533..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Classpath.java
+++ /dev/null
@@ -1,910 +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.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.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;
-
-/**
- * TODO
- */
-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 rt.jar.
-	 */
-	public static Classpath bootClasspath() {
-		return new Classpath(System.getProperty("sun.boot.class.path"));
-	}
-	
-	/**
-	 * 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"));
-	}
-
-	/**
-	 * 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.
-	 * e.g. "java/lang/String.class" is converted to "java.lang.String"
-	 * e.g. "java/lang/String.java" is converted to "java.lang.String"
-	 */
-	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. File(java/lang/String.class) is converted to "java.lang.String"
-	 */
-	public static String convertToClassName(File classFile) {
-		return convertToClassName(classFile.getPath());
-	}
-
-	/**
-	 * Convert a relative file name to a class;
-	 * e.g. "java/lang/String.class" is converted to java.lang.String.class
-	 */
-	public static Class<?> convertToClass(String classFileName) throws ClassNotFoundException {
-		return Class.forName(convertToClassName(classFileName));
-	}
-
-	/**
-	 * Convert a relative file to a class;
-	 * e.g. File(java/lang/String.class) is converted to java.lang.String.class
-	 */
-	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. "java.lang.String" is converted to "java/lang/String"
-	 */
-	public static String convertToArchiveEntryNameBase(String className) {
-		return className.replace('.', '/');
-	}
-	
-	/**
-	 * Convert a class to an archive entry name base;
-	 * e.g. java.lang.String.class is converted to "java/lang/String"
-	 */
-	public static String convertToArchiveEntryNameBase(Class<?> javaClass) {
-		return convertToArchiveEntryNameBase(javaClass.getName());
-	}
-	
-	/**
-	 * Convert a class name to an archive class file entry name;
-	 * e.g. "java.lang.String" is converted to "java/lang/String.class"
-	 */
-	public static String convertToArchiveClassFileEntryName(String className) {
-		return convertToArchiveEntryNameBase(className) + ".class";
-	}
-	
-	/**
-	 * Convert a class to an archive class file entry name;
-	 * e.g. java.lang.String.class is converted to "java/lang/String.class"
-	 */
-	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. "java.lang.String" is converted to "java/lang/String" on Unix
-	 * and "java\\lang\\String" 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. java.lang.String.class is converted to "java/lang/String" on Unix
-	 * and "java\\lang\\String" 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. "java.lang.String" is converted to "java/lang/String.class" on Unix
-	 * and "java\\lang\\String.class" on Windows
-	 */
-	public static String convertToClassFileName(String className) {
-		return convertToFileNameBase(className) + ".class";
-	}
-	
-	/**
-	 * Convert a class to a class file name for the current O/S;
-	 * e.g. java.lang.String.class is converted to "java/lang/String.class" on Unix
-	 * and "java\\lang\\String.class" 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. "java.lang.String" is converted to File(java/lang/String.class)
-	 */
-	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. java.lang.String.class is converted to File(java/lang/String.class)
-	 */
-	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. "java.lang.String" is converted to "java/lang/String.java" on Unix
-	 * and "java\\lang\\String.java" on Windows
-	 */
-	public static String convertToJavaFileName(String className) {
-		return convertToFileNameBase(className) + ".java";
-	}
-
-	/**
-	 * Convert a class to a java file name for the current O/S;
-	 * e.g. java.lang.String.class is converted to "java/lang/String.java" on Unix
-	 * and "java\\lang\\String.java" 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. "java.lang.String" is converted to File(java/lang/String.java)
-	 */
-	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. java.lang.String.class is converted to File(java/lang/String.java)
-	 */
-	public static File convertToJavaFile(Class<?> javaClass) {
-		return convertToJavaFile(javaClass.getName());
-	}
-
-
-	// ***** class => resource *****
-
-	/**
-	 * Convert a class to a resource name;
-	 * e.g. java.lang.String.class is converted to "/java/lang/String.class".
-	 */
-	public static String convertToResourceName(Class<?> javaClass) {
-		return '/' + convertToArchiveClassFileEntryName(javaClass);
-	}
-
-	/**
-	 * Convert a class to a resource;
-	 * e.g. java.lang.String.class is converted to
-	 * URL(jar:file:/C:/jdk/1.4.2_04/jre/lib/rt.jar!/java/lang/String.class).
-	 */
-	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 ".zip" or ".jar"
-	 */
-	public static boolean fileNameIsArchive(String fileName) {
-		String ext = FileTools.extension(fileName).toLowerCase();
-		return ext.equals(".jar") || ext.equals(".zip");
-	}
-	
-	/**
-	 * Return whether the specified file is an archive file;
-	 * i.e. its name ends with ".zip" or ".jar"
-	 */
-	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. "C:\jdk1.4.2_04\jre\lib\rt.jar".
-	 */
-	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")) {
-			// 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")) {
-			// 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")) {
-			// 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);
-	}
-
-
-	// ***** 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");
-			}
-		};
-	}
-
-
-	// ********** 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:
-	 *     "C:\dev\foo.jar;;C:\dev\bar.jar"
-	 * will be parsed into three file names:
-	 *     { "C:\dev\foo.jar", "", "C:\dev\bar.jar" }
-	 */
-	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(List<String> fileNames) {
-		this(fileNames.toArray(new String[fileNames.size()]));
-	}
-
-	/**
-	 * 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 Entry[] getEntries() {
-		return this.entries;
-	}
-
-	/**
-	 * Return the classpath's path.
-	 */
-	public String path() {
-		Entry[] localEntries = this.entries;
-		int max = localEntries.length - 1;
-		if (max == -1) {
-			return "";
-		}
-		StringBuffer sb = new StringBuffer(2000);
-		// stop one short of the end of the array
-		for (int i = 0; i < max; i++) {
-			sb.append(localEntries[i].fileName());
-			sb.append(File.pathSeparatorChar);
-		}
-		sb.append(localEntries[max].fileName());
-		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 "rt.jar" or "toplink.jar".
-	 */
-	public Entry entryForFileNamed(String shortFileName) {
-		Entry[] localEntries = this.entries;
-		for (Entry entry : localEntries) {
-			if (entry.file().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 entryForClassNamed(String className) {
-		String relativeClassFileName = convertToClassFileName(className);
-		String archiveEntryName = convertToArchiveClassFileEntryName(className);
-		Entry[] localEntries = this.entries;
-		for (Entry entry : localEntries) {
-			if (entry.contains(relativeClassFileName, archiveEntryName)) {
-				return entry;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Return the names of all the classes discovered on the classpath,
-	 * with duplicates removed.
-	 */
-	public String[] classNames() {
-		return this.classNames(Filter.Null.<String>instance());
-	}
-
-	/**
-	 * Return the names of all the classes discovered on the classpath
-	 * and accepted by the specified filter, with duplicates removed.
-	 */
-	public String[] classNames(Filter<String> filter) {
-		Collection<String> classNames = new HashSet<String>(10000);
-		this.addClassNamesTo(classNames, filter);
-		return classNames.toArray(new String[classNames.size()]);
-	}
-
-	/**
-	 * 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) {
-		Entry[] localEntries = this.entries;
-		for (Entry entry : localEntries) {
-			entry.addClassNamesTo(classNames, filter);
-		}
-	}
-
-	/**
-	 * Return the names of all the classes discovered on the classpath.
-	 * Just a bit more performant than #classNames().
-	 */
-	public Iterator<String> classNamesStream() {
-		return this.classNamesStream(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 #classNames(Filter).
-	 */
-	public Iterator<String> classNamesStream(Filter<String> filter) {
-		return new CompositeIterator<String>(this.entryClassNamesStreams(filter));
-	}
-
-	private Iterator<Iterator<String>> entryClassNamesStreams(final Filter<String> filter) {
-		return new TransformationIterator<Entry, Iterator<String>>(new ArrayIterator<Entry>(this.entries)) {
-			@Override
-			protected Iterator<String> transform(Entry entry) {
-				return entry.classNamesStream(filter);
-			}
-		};
-	}
-
-	/**
-	 * Return a "compressed" version of the classpath with its
-	 * duplicate entries eliminated.
-	 */
-	public Classpath compressed() {
-		return new Classpath((Entry[]) CollectionTools.removeDuplicateElements(this.entries));
-	}
-
-	/**
-	 * Convert the classpath to an array of URLs
-	 * (that can be used to instantiate a URLClassLoader).
-	 */
-	public URL[] urls() {
-		Entry[] localEntries = this.entries;
-		int len = localEntries.length;
-		URL[] urls = new URL[len];
-		for (int i = 0; i < len; i++) {
-			urls[i] = localEntries[i].url();
-		}
-		return urls;
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.path());
-	}
-
-
-	// ********** inner class **********
-
-	/**
-	 * TODO
-	 */
-	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");
-			}
-			this.fileName = fileName;
-			this.file = new File(fileName);
-			this.canonicalFile = FileTools.canonicalFile(this.file);
-		}
-
-		public String fileName() {
-			return this.fileName;
-		}
-
-		public File file() {
-			return this.file;
-		}
-
-		public File canonicalFile() {
-			return this.canonicalFile;
-		}
-
-		public String canonicalFileName() {
-			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 url() {
-			try {
-				return this.canonicalFile.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) {
-				zipEntry = null;	// something is wrong, clear out the entry
-			} 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.
-		 */
-		public String[] classNames() {
-			return this.classNames(Filter.Null.<String>instance());
-		}
-
-		/**
-		 * Return the names of all the classes discovered in the entry
-		 * and accepted by the specified filter.
-		 */
-		public String[] classNames(Filter<String> filter) {
-			Collection<String> classNames = new ArrayList<String>(2000);
-			this.addClassNamesTo(classNames, filter);
-			return classNames.toArray(new String[classNames.size()]);
-		}
-
-		/**
-		 * 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(Object next) {
-					return Entry.this.fileNameMightBeForClassFile(((File) 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) {
-				return;
-			}
-			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 ".class" 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")
-					&& (name.indexOf(' ') == -1);
-		}
-
-		/**
-		 * Return the names of all the classes discovered on the classpath.
-		 * Just a bit more performant than #classNames().
-		 */
-		public Iterator<String> classNamesStream() {
-			return this.classNamesStream(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 #classNames(Filter).
-		 */
-		public Iterator<String> classNamesStream(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 e4df43b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/CollectionTools.java
+++ /dev/null
@@ -1,2417 +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.internal;
-
-import java.lang.reflect.Array;
-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.List;
-import java.util.ListIterator;
-import java.util.Random;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.Vector;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementIterator;
-
-public final class CollectionTools {
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array followed by the specified object to be added.
-	 * java.util.Arrays#add(Object[] array, Object o)
-	 */
-	@SuppressWarnings("unchecked")
-	public static <E> E[] add(E[] array, E value) {
-		int len = array.length;
-		E[] result = (E[]) Array.newInstance(array.getClass().getComponentType(), len + 1);
-		System.arraycopy(array, 0, result, 0, len);
-		result[len] = value;
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified object added at the specified index.
-	 * java.util.Arrays#add(Object[] array, int index, Object o)
-	 */
-	@SuppressWarnings("unchecked")
-	public static <E> E[] add(E[] array, int index, E value) {
-		int len = array.length;
-		E[] result = (E[]) Array.newInstance(array.getClass().getComponentType(), len + 1);
-		if (index > 0) {
-			System.arraycopy(array, 0, result, 0, index);
-		}
-		result[index] = value;
-		if (len > index) {
-			System.arraycopy(array, index, result, index + 1, len - index);
-		}
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array followed by the specified value to be added.
-	 * java.util.Arrays#add(char[] array, char value)
-	 */
-	public static char[] add(char[] array, char value) {
-		int len = array.length;
-		char[] result = new char[len + 1];
-		System.arraycopy(array, 0, result, 0, len);
-		result[len] = value;
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified value added at the specified index.
-	 * java.util.Arrays#add(char[] array, int index, char value)
-	 */
-	public static char[] add(char[] array, int index, char value) {
-		int len = array.length;
-		char[] result = new char[len + 1];
-		System.arraycopy(array, 0, result, 0, index);
-		result[index] = value;
-		System.arraycopy(array, index, result, index + 1, len - index);
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array followed by the specified value to be added.
-	 * java.util.Arrays#add(int[] array, int value)
-	 */
-	public static int[] add(int[] array, int value) {
-		int len = array.length;
-		int[] result = new int[len + 1];
-		System.arraycopy(array, 0, result, 0, len);
-		result[len] = value;
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified value added at the specified index.
-	 * java.util.Arrays#add(int[] array, int index, int value)
-	 */
-	public static int[] add(int[] array, int index, int value) {
-		int len = array.length;
-		int[] result = new int[len + 1];
-		System.arraycopy(array, 0, result, 0, index);
-		result[index] = value;
-		System.arraycopy(array, index, result, index + 1, len - index);
-		return result;
-	}
-
-	/**
-	 * Add all the elements returned by the specified iterator
-	 * to the specified collection.
-	 * Return whether the collection changed as a result.
-	 * java.util.Collection#addAll(java.util.Iterator iterator)
-	 */
-	public static <E> boolean addAll(Collection<? super E> collection, Iterator<E> iterator) {
-		boolean modified = false;
-		while (iterator.hasNext()) {
-			modified |= collection.add(iterator.next());
-		}
-		return modified;
-	}
-
-	/**
-	 * Add all the elements in the specified array
-	 * to the specified collection.
-	 * Return whether the collection changed as a result.
-	 * java.util.Collection#addAll(Object[] array)
-	 */
-	public static <E> boolean addAll(Collection<? super E> collection, E[] array) {
-		boolean modified = false;
-		for (E item : array) {
-			modified |= collection.add(item);
-		}
-		return modified;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array followed by the elements
-	 * in the specified collection.
-	 * java.util.Arrays#addAll(Object[] array, java.util.Collection c)
-	 */
-	@SuppressWarnings("unchecked")
-	public static <E> E[] addAll(E[] array, Collection<? extends E> collection) {
-		int len = array.length;
-		E[] result = (E[]) Array.newInstance(array.getClass().getComponentType(), array.length + collection.size());
-		System.arraycopy(array, 0, result, 0, len);
-		int i = len;
-		for (E item : collection) {
-			result[i++] = item;
-		}
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array followed by the elements
-	 * in the specified iterator.
-	 * java.util.Arrays#addAll(Object[] array, java.util.Iterator iterator)
-	 */
-	public static <E> E[] addAll(E[] array, Iterator<? extends E> iterator) {
-		return addAll(array, list(iterator));
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array 1 followed by the elements
-	 * in the specified array 2.
-	 * java.util.Arrays#addAll(Object[] array1, Object[] array2)
-	 */
-	@SuppressWarnings("unchecked")
-	public static <E> E[] addAll(E[] array1, E[] array2) {
-		int len1 = array1.length;
-		int len2 = array2.length;
-		E[] result = (E[]) Array.newInstance(array1.getClass().getComponentType(), len1 + len2);
-		System.arraycopy(array1, 0, result, 0, len1);
-		System.arraycopy(array2, 0, result, len1, len2);
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * first specified array with the objects in the second
-	 * specified array added at the specified index.
-	 * java.util.Arrays#add(Object[] array1, int index, Object[] array2)
-	 */
-	@SuppressWarnings("unchecked")
-	public static <E> E[] addAll(E[] array1, int index, E[] array2) {
-		int len1 = array1.length;
-		int len2 = array2.length;
-		E[] result = (E[]) Array.newInstance(array1.getClass().getComponentType(), len1 + len2);
-		System.arraycopy(array1, 0, result, 0, index);
-		System.arraycopy(array2, 0, result, index, len2);
-		System.arraycopy(array1, index, result, index + len2, len1 - index);
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array 1 followed by the elements
-	 * in the specified array 2.
-	 * java.util.Arrays#addAll(char[] array1, char[] array2)
-	 */
-	public static char[] addAll(char[] array1, char[] array2) {
-		int len1 = array1.length;
-		int len2 = array2.length;
-		char[] result = new char[len1 + len2];
-		System.arraycopy(array1, 0, result, 0, len1);
-		System.arraycopy(array2, 0, result, len1, len2);
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * first specified array with the objects in the second
-	 * specified array added at the specified index.
-	 * java.util.Arrays#add(char[] array1, int index, char[] array2)
-	 */
-	public static char[] addAll(char[] array1, int index, char[] array2) {
-		int len1 = array1.length;
-		int len2 = array2.length;
-		char[] result = new char[len1 + len2];
-		System.arraycopy(array1, 0, result, 0, index);
-		System.arraycopy(array2, 0, result, index, len2);
-		System.arraycopy(array1, index, result, index + len2, len1 - index);
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array 1 followed by the elements
-	 * in the specified array 2.
-	 * java.util.Arrays#addAll(int[] array1, int[] array2)
-	 */
-	public static int[] addAll(int[] array1, int[] array2) {
-		int len1 = array1.length;
-		int len2 = array2.length;
-		int[] result = new int[len1 + len2];
-		System.arraycopy(array1, 0, result, 0, len1);
-		System.arraycopy(array2, 0, result, len1, len2);
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * first specified array with the objects in the second
-	 * specified array added at the specified index.
-	 * java.util.Arrays#add(int[] array1, int index, int[] array2)
-	 */
-	public static int[] addAll(int[] array1, int index, int[] array2) {
-		int len1 = array1.length;
-		int len2 = array2.length;
-		int[] result = new int[len1 + len2];
-		System.arraycopy(array1, 0, result, 0, index);
-		System.arraycopy(array2, 0, result, index, len2);
-		System.arraycopy(array1, index, result, index + len2, len1 - index);
-		return result;
-	}
-
-	/**
-	 * Return an array corresponding to the specified iterator.
-	 * @see java.util.Collection#toArray()
-	 * java.util.Iterator#toArray()
-	 */
-	public static Object[] array(Iterator<?> iterator) {
-		return list(iterator).toArray();
-	}
-
-	/**
-	 * Return an array corresponding to the specified iterator;
-	 * the runtime type of the returned array is that of the specified array.
-	 * If the collection 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 this collection.
-	 * @see java.util.Collection#toArray(java.lang.Object[])
-	 * java.util.Iterator#toArray(Object[])
-	 */
-	public static <E> E[] array(Iterator<? extends E> iterator, E[] array) {
-		return list(iterator).toArray(array);
-	}
-
-	/**
-	 * Return a bag corresponding to the specified enumeration.
-	 * HashBag(java.util.Enumeration enumeration)
-	 */
-	public static <E> Bag<E> bag(Enumeration<? extends E> enumeration) {
-		Bag<E> bag = new HashBag<E>();
-		while (enumeration.hasMoreElements()) {
-			bag.add(enumeration.nextElement());
-		}
-		return bag;
-	}
-
-	/**
-	 * Return a bag corresponding to the specified iterator.
-	 * HashBag(java.util.Iterator iterator)
-	 */
-	public static <E> Bag<E> bag(Iterator<? extends E> iterator) {
-		Bag<E> bag = new HashBag<E>();
-		while (iterator.hasNext()) {
-			bag.add(iterator.next());
-		}
-		return bag;
-	}
-
-	/**
-	 * Return a bag corresponding to the specified array.
-	 * HashBag(Object[] array)
-	 */
-	public static <E> Bag<E> bag(E... array) {
-		Bag<E> bag = new HashBag<E>(array.length);
-		for (E item : array) {
-			bag.add(item);
-		}
-		return bag;
-	}
-
-	/**
-	 * Return a collection corresponding to the specified enumeration.
-	 */
-	public static <E> Collection<E> collection(Enumeration<? extends E> enumeration) {
-		return bag(enumeration);
-	}
-
-	/**
-	 * Return a collection corresponding to the specified iterator.
-	 */
-	public static <E> Collection<E> collection(Iterator<? extends E> iterator) {
-		return bag(iterator);
-	}
-
-	/**
-	 * Return a collection corresponding to the specified array.
-	 */
-	public static <E> Collection<E> collection(E... array) {
-		return bag(array);
-	}
-
-	/**
-	 * Return whether the specified enumeration contains the
-	 * specified element.
-	 * java.util.Enumeration#contains(Object o)
-	 */
-	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 iterator contains the
-	 * specified element.
-	 * java.util.Iterator#contains(Object o)
-	 */
-	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;
-	}
-
-	/**
-	 * Return whether the specified array contains the
-	 * specified element.
-	 * java.util.Arrays#contains(Object[] array, Object o)
-	 */
-	public static boolean contains(Object[] array, Object value) {
-		if (value == null) {
-			for (int i = array.length; i-- > 0; ) {
-				if (array[i] == null) {
-					return true;
-				}
-			}
-		} else {
-			for (int i = array.length; i-- > 0; ) {
-				if (value.equals(array[i])) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified array contains the
-	 * specified element.
-	 * java.util.Arrays#contains(char[] array, char value)
-	 */
-	public static boolean contains(char[] array, char value) {
-		for (int i = array.length; i-- > 0; ) {
-			if (array[i] == value) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified array contains the
-	 * specified element.
-	 * java.util.Arrays#contains(int[] array, int value)
-	 */
-	public static boolean contains(int[] array, int value) {
-		for (int i = array.length; i-- > 0; ) {
-			if (array[i] == value) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return whether the specified collection contains all of the
-	 * elements in the specified iterator.
-	 * java.util.Collection#containsAll(java.util.Iterator iterator)
-	 */
-	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.
-	 * java.util.Collection#containsAll(Object[] array)
-	 */
-	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 iterator contains all of the
-	 * elements in the specified collection.
-	 * java.util.Iterator#containsAll(java.util.Collection collection)
-	 */
-	public static boolean containsAll(Iterator<?> iterator, Collection<?> collection) {
-		return collection(iterator).containsAll(collection);
-	}
-
-	/**
-	 * Return whether the specified iterator 1 contains all of the
-	 * elements in the specified iterator 2.
-	 * java.util.Iterator#containsAll(java.util.Iterator iterator)
-	 */
-	public static boolean containsAll(Iterator<?> iterator1, Iterator<?> iterator2) {
-		return containsAll(collection(iterator1), iterator2);
-	}
-
-	/**
-	 * Return whether the specified iterator contains all of the
-	 * elements in the specified array.
-	 * java.util.Iterator#containsAll(Object[] array)
-	 */
-	public static boolean containsAll(Iterator<?> iterator, Object[] array) {
-		return containsAll(collection(iterator), array);
-	}
-
-	/**
-	 * Return whether the specified array contains all of the
-	 * elements in the specified collection.
-	 * java.util.Arrays#containsAll(Object[] array, java.util.Collection collection)
-	 */
-	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 iterator.
-	 * java.util.Arrays#containsAll(Object[] array, java.util.Iterator iterator)
-	 */
-	public static boolean containsAll(Object[] array, Iterator<?> iterator) {
-		while (iterator.hasNext()) {
-			if ( ! contains(array, iterator.next())) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Return whether the specified array 1 contains all of the
-	 * elements in the specified array 2.
-	 * java.util.Arrays#containsAll(Object[] array1, Object[] array2)
-	 */
-	public static boolean containsAll(Object[] array1, Object[] 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.
-	 * java.util.Arrays#containsAll(char[] array1, char[] array2)
-	 */
-	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.
-	 * java.util.Arrays#containsAll(int[] array1, int[] array2)
-	 */
-	public static boolean containsAll(int[] array1, int[] array2) {
-		for (int i = array2.length; i-- > 0; ) {
-			if ( ! contains(array1, array2[i])) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * 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' #equals() method to compare the
-	 * elements.
-	 */
-	public static int diffEnd(Object[] array1, Object[] array2) {
-		return diffEnd(Arrays.asList(array1), Arrays.asList(array2));
-	}
-
-	/**
-	 * 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' #equals() method to compare the
-	 * elements.
-	 */
-	public static int diffEnd(List<?> list1, List<?> list2) {
-		int size1 = list1.size();
-		int size2 = list2.size();
-		if (size1 != size2) {
-			return Math.max(size1, size2) - 1;
-		}
-		int end = size1 - 1;
-		while (end > -1) {
-			Object o = list1.get(end);
-			if (o == null) {
-				if (list2.get(end) == null) {
-					end--;
-				} else {
-					return end;
-				}
-			} else {
-				if (o.equals(list2.get(end))) {
-					end--;
-				} else {
-					return end;
-				}
-			}
-		}
-		return end;
-	}
-
-	/**
-	 * Return the range of elements in the specified
-	 * arrays that are different.
-	 * If the arrays are identical, return [size, -1].
-	 * Use the elements' #equals() method to compare the
-	 * elements.
-	 * @see #diffStart(Object[], Object[])
-	 * @see #diffEnd(Object[], Object[])
-	 */
-	public static Range diffRange(Object[] array1, Object[] array2) {
-		return diffRange(Arrays.asList(array1), Arrays.asList(array2));
-	}
-
-	/**
-	 * Return the range of elements in the specified
-	 * arrays that are different.
-	 * If the arrays are identical, return [size, -1].
-	 * Use the elements' #equals() method to compare the
-	 * elements.
-	 * @see #diffStart(java.util.List, java.util.List)
-	 * @see #diffEnd(java.util.List, java.util.List)
-	 */
-	public static Range diffRange(List<?> list1, List<?> list2) {
-		int end = diffEnd(list1, list2);
-		if (end == -1) {
-			// the lists are identical, the start is the size of the two lists
-			return new Range(list1.size(), end);
-		}
-		// the lists are different, calculate the start of the range
-		return new Range(diffStart(list1, list2), 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' #equals() method to compare the
-	 * elements.
-	 */
-	public static int diffStart(Object[] array1, Object[] array2) {
-		return diffStart(Arrays.asList(array1), Arrays.asList(array2));
-	}
-
-	/**
-	 * 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' #equals() method to compare the
-	 * elements.
-	 */
-	public static int diffStart(List<?> list1, List<?> list2) {
-		int end = Math.min(list1.size(), list2.size());
-		int start = 0;
-		while (start < end) {
-			Object o = list1.get(start);
-			if (o == null) {
-				if (list2.get(start) == null) {
-					start++;
-				} else {
-					return start;
-				}
-			} else {
-				if (o.equals(list2.get(start))) {
-					start++;
-				} else {
-					return start;
-				}
-			}
-		}
-		return start;
-	}
-
-	/**
-	 * Return whether the specified iterators return equal elements.
-	 * java.util.ListIterator#equals(java.util.ListIterator iterator)
-	 */
-	public static boolean equals(ListIterator<?> iterator1, ListIterator<?> iterator2) {
-		while (iterator1.hasNext() && iterator2.hasNext()) {
-			Object o1 = iterator1.next();
-			Object o2 = iterator2.next();
-			if ( ! (o1 == null ? o2 == null : o1.equals(o2))) {
-				return false;
-			}
-		}
-		return ! (iterator1.hasNext() || iterator2.hasNext());
-	}
-
-	/**
-	 * Return the element corresponding to the specified index
-	 * in the specified iterator.
-	 * java.util.ListIterator#get(int index)
-	 */
-	public static <E> E get(ListIterator<E> iterator, int index) {
-		while (iterator.hasNext()) {
-			E next = iterator.next();
-			if (iterator.previousIndex() == index) {
-				return next;
-			}
-		}
-		throw new IndexOutOfBoundsException(String.valueOf(index) + ':' + String.valueOf(iterator.previousIndex()));
-	}
-
-	/**
-	 * Return whether the specified arrays contain the same elements.
-	 * java.util.Arrays#identical(Object[] array1, Object[] array2)
-	 */
-	public static boolean identical(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;
-	}
-
-	/**
-	 * Return whether the specified iterators return the same elements.
-	 * java.util.ListIterator#identical(java.util.ListIterator iterator)
-	 */
-	public static boolean identical(ListIterator<?> iterator1, ListIterator<?> iterator2) {
-		while (iterator1.hasNext() && iterator2.hasNext()) {
-			if (iterator1.next() != iterator2.next()) {
-				return false;
-			}
-		}
-		return ! (iterator1.hasNext() || iterator2.hasNext());
-	}
-
-	/**
-	 * 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) {
-		return identityDiffEnd(Arrays.asList(array1), Arrays.asList(array2));
-	}
-
-	/**
-	 * 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.
-	 */
-	public static int identityDiffEnd(List<?> list1, List<?> list2) {
-		int size1 = list1.size();
-		int size2 = list2.size();
-		if (size1 != size2) {
-			return Math.max(size1, size2) - 1;
-		}
-		int end = size1 - 1;
-		while (end > -1) {
-			if (list1.get(end) == list2.get(end)) {
-				end--;
-			} else {
-				return end;
-			}
-		}
-		return end;
-	}
-
-	/**
-	 * 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) {
-		return identityDiffRange(Arrays.asList(array1), Arrays.asList(array2));
-	}
-
-	/**
-	 * 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(java.util.List, java.util.List)
-	 * @see #identityDiffEnd(java.util.List, java.util.List)
-	 */
-	public static Range identityDiffRange(List<?> list1, List<?> list2) {
-		int end = identityDiffEnd(list1, list2);
-		if (end == -1) {
-			// the lists are identical, the start is the size of the two lists
-			return new Range(list1.size(), end);
-		}
-		// the lists are different, calculate the start of the range
-		return new Range(identityDiffStart(list1, list2), 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) {
-		return identityDiffStart(Arrays.asList(array1), Arrays.asList(array2));
-	}
-
-	/**
-	 * 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.
-	 */
-	public static int identityDiffStart(List<?> list1, List<?> list2) {
-		int end = Math.min(list1.size(), list2.size());
-		int start = 0;
-		while (start < end) {
-			if (list1.get(start) == list2.get(start)) {
-				start++;
-			} else {
-				return start;
-			}
-		}
-		return start;
-	}
-
-	/**
-	 * Return the index of the first occurrence of the
-	 * specified element in the specified iterator,
-	 * or return -1 if there is no such index.
-	 * java.util.ListIterator#indexOf(Object o)
-	 */
-	public static int indexOf(ListIterator<?> 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;
-	}
-
-	/**
-	 * Return the index of the first occurrence of the
-	 * specified element in the specified array,
-	 * or return -1 if there is no such index.
-	 * java.util.Arrays#indexOf(Object[] array, Object o)
-	 */
-	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.
-	 * java.util.Arrays#indexOf(char[] array, char value)
-	 */
-	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.
-	 * java.util.Arrays#indexOf(int[] array, int value)
-	 */
-	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;
-	}
-
-	/**
-	 * 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;
-	}
-
-	/**
-	 * 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;
-	}
-
-	/**
-	 * Return an iterator on the elements in the specified array.
-	 * java.util.Arrays#iterator(Object[] array)
-	 */
-	public static <E> Iterator<E> iterator(E... array) {
-		return new ArrayIterator<E>(array);
-	}
-
-	/**
-	 * Return the index of the last occurrence of the
-	 * specified element in the specified iterator,
-	 * or return -1 if there is no such index.
-	 * java.util.ListIterator#lastIndexOf(Object o)
-	 */
-	public static int lastIndexOf(ListIterator<?> iterator, Object value) {
-		return list(iterator).lastIndexOf(value);
-	}
-
-	/**
-	 * Return the index of the last occurrence of the
-	 * specified element in the specified array,
-	 * or return -1 if there is no such index.
-	 * java.util.Arrays#lastIndexOf(Object[] array, Object o)
-	 */
-	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.
-	 * java.util.Arrays#lastIndexOf(char[] array, char value)
-	 */
-	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.
-	 * java.util.Arrays#lastIndexOf(int[] array, int value)
-	 */
-	public static int lastIndexOf(int[] array, int value) {
-		for (int i = array.length; i-- > 0; ) {
-			if (array[i] == value) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Return a list corresponding to the specified iterator.
-	 * java.util.Iterator#toList()
-	 */
-	public static <E> List<E> list(Iterator<? extends E> iterator) {
-		List<E> list = new ArrayList<E>();
-		while (iterator.hasNext()) {
-			list.add(iterator.next());
-		}
-		return list;
-	}
-
-	/**
-	 * Return a list corresponding to the specified array.
-	 * Unlike java.util.Arrays.asList(Object[]), the list
-	 * is modifiable and is not backed by the array.
-	 */
-	public static <E> List<E> list(E... array) {
-		List<E> list = new ArrayList<E>(array.length);
-		for (E item : array) {
-			list.add(item);
-		}
-		return list;
-	}
-
-	/**
-	 * Return a list iterator for the specified array.
-	 * java.util.Arrays#listIterator(Object[] array)
-	 */
-	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.
-	 * java.util.Arrays#listIterator(Object[] array, int index)
-	 */
-	public static <E> ListIterator<E> listIterator(E[] array, int index) {
-		return Arrays.asList(array).listIterator(index);
-	}
-
-	/**
-	 * Return the character from the specified array with the maximum value.
-	 * java.util.Arrays#max(char[] array)
-	 */
-	public static char max(char... array) {
-		int len = array.length;
-		if (len == 0) {
-			throw new IndexOutOfBoundsException();
-		}
-		char max = array[0];
-		// start at 1
-		for (int i = 1; i < len; i++) {
-			char next = array[i];
-			if (next > max) {
-				max = next;
-			}
-		}
-		return max;
-	}
-
-	/**
-	 * Return the integer from the specified array with the maximum value.
-	 * java.util.Arrays#max(int[] array)
-	 */
-	public static int max(int... array) {
-		int len = array.length;
-		if (len == 0) {
-			throw new IndexOutOfBoundsException();
-		}
-		int max = array[0];
-		// start at 1
-		for (int i = 1; i < len; i++) {
-			int next = array[i];
-			if (next > max) {
-				max = next;
-			}
-		}
-		return max;
-	}
-
-	/**
-	 * Return the character from the specified array with the minimum value.
-	 * java.util.Arrays#min(char[] array)
-	 */
-	public static char min(char... array) {
-		int len = array.length;
-		if (len == 0) {
-			throw new IndexOutOfBoundsException();
-		}
-		char min = array[0];
-		// start at 1
-		for (int i = 1; i < len; i++) {
-			char next = array[i];
-			if (next < min) {
-				min = next;
-			}
-		}
-		return min;
-	}
-
-	/**
-	 * Return the integer from the specified array with the minimum value.
-	 * java.util.Arrays#min(int[] array)
-	 */
-	public static int min(int... array) {
-		int len = array.length;
-		if (len == 0) {
-			throw new IndexOutOfBoundsException();
-		}
-		int min = array[0];
-		// start at 1
-		for (int i = 1; i < len; i++) {
-			int next = array[i];
-			if (next < min) {
-				min = next;
-			}
-		}
-		return min;
-	}
-
-	/**
-	 * Replace all occurrences of the specified old value with
-	 * the specified new value.
-	 * java.util.Arrays#replaceAll(Object[] array, Object oldValue, Object newValue)
-	 */
-	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.
-	 * java.util.Arrays#replaceAll(int[] array, int oldValue, int newValue)
-	 */
-	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.
-	 * java.util.Arrays#replaceAll(char[] array, char oldValue, char newValue)
-	 */
-	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;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * java.util.Arrays#remove(Object[] array, Object value)
-	 */
-	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.
-	 * java.util.Arrays#remove(char[] array, char value)
-	 */
-	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.
-	 * java.util.Arrays#remove(int[] array, int value)
-	 */
-	public static int[] remove(int[] array, int value) {
-		return removeElementAtIndex(array, indexOf(array, value));
-	}
-
-	/**
-	 * Remove all the elements returned by the specified iterator
-	 * from the specified collection.
-	 * Return whether the collection changed as a result.
-	 * java.util.Collection#removeAll(java.util.Iterator iterator)
-	 */
-	public static boolean removeAll(Collection<?> collection, Iterator<?> iterator) {
-		boolean modified = false;
-		while (iterator.hasNext()) {
-			modified |= removeAllOccurrences(collection, iterator.next());
-		}
-		return modified;
-	}
-
-	/**
-	 * Remove all the elements in the specified array
-	 * from the specified collection.
-	 * Return whether the collection changed as a result.
-	 * java.util.Collection#removeAll(Object[] array)
-	 */
-	public static boolean removeAll(Collection<?> collection, Object[] array) {
-		boolean modified = false;
-		for (int i = array.length; i-- > 0; ) {
-			modified |= removeAllOccurrences(collection, array[i]);
-		}
-		return modified;
-	}
-
-	/**
-	 * Remove from the specified array all the elements in
-	 * the specified collection and return the result.
-	 * java.util.Arrays#removeAll(Object[] array, Collection collection)
-	 */
-	public static <E> E[] removeAll(E[] array, Collection<?> collection) {
-		E[] result = array;
-		// go backwards since we will be pulling elements
-		// out of 'result' and it will get shorter as we go
-		for (int i = array.length; i-- > 0; ) {
-			E item = array[i];
-			if (collection.contains(item)) {
-				result = removeElementAtIndex(result, i);
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * java.util.Arrays#removeAll(Object[] array1, Object[] array2)
-	 */
-	public static <E> E[] removeAll(E[] array1, Object[] array2) {
-		// convert to a bag to take advantage of hashed look-up
-		return removeAll(array1, bag(array2));
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * java.util.Arrays#removeAll(char[] array1, char[] array2)
-	 */
-	public static char[] removeAll(char[] array1, char[] array2) {
-		char[] result1 = array1;
-		// go backwards since we will be pulling elements
-		// out of 'result1' and it will get shorter as we go
-		for (int i = array1.length; i-- > 0; ) {
-			char item = array1[i];
-			if (contains(array2, item)) {
-				result1 = removeElementAtIndex(result1, i);
-			}
-		}
-		return result1;
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * java.util.Arrays#removeAll(int[] array1, int[] array2)
-	 */
-	public static int[] removeAll(int[] array1, int[] array2) {
-		int[] result1 = array1;
-		// go backwards since we will be pulling elements
-		// out of 'result1' and it will get shorter as we go
-		for (int i = array1.length; i-- > 0; ) {
-			int item = array1[i];
-			if (contains(array2, item)) {
-				result1 = removeElementAtIndex(result1, i);
-			}
-		}
-		return result1;
-	}
-
-	/**
-	 * Remove all occurrences of the specified element
-	 * from the specified collection.
-	 * Return whether the collection changed as a result.
-	 * java.util.Collection#removeAllOccurrences(Object value)
-	 */
-	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 from the specified array all occurrences of
-	 * the specified element and return the result.
-	 * java.util.Arrays#removeAllOccurrences(Object[] array, Object value)
-	 */
-	public static <E> E[] removeAllOccurrences(E[] array, Object value) {
-		E[] result = array;
-		if (value == null) {
-			// go backwards since we will be pulling elements
-			// out of 'result' and it will get shorter as we go
-			for (int i = array.length; i-- > 0; ) {
-				if (array[i] == null) {
-					result = removeElementAtIndex(result, i);
-				}
-			}
-		} else {
-			// go backwards since we will be pulling elements
-			// out of 'result' and it will get shorter as we go
-			for (int i = array.length; i-- > 0; ) {
-				if (value.equals(array[i])) {
-					result = removeElementAtIndex(result, i);
-				}
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the specified array all occurrences of
-	 * the specified element and return the result.
-	 * java.util.Arrays#removeAllOccurrences(char[] array, char value)
-	 */
-	public static char[] removeAllOccurrences(char[] array, char value) {
-		char[] result = array;
-		// go backwards since we will be pulling elements
-		// out of 'result' and it will get shorter as we go
-		for (int i = array.length; i-- > 0; ) {
-			if (array[i] == value) {
-				result = removeElementAtIndex(result, i);
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the specified array all occurrences of
-	 * the specified element and return the result.
-	 * java.util.Arrays#removeAllOccurrences(int[] array, int value)
-	 */
-	public static int[] removeAllOccurrences(int[] array, int value) {
-		int[] result = array;
-		// go backwards since we will be pulling elements
-		// out of 'result' and it will get shorter as we go
-		for (int i = array.length; i-- > 0; ) {
-			if (array[i] == value) {
-				result = removeElementAtIndex(result, i);
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * java.util.Arrays#removeElementAtIndex(Object[] array, int index)
-	 */
-	@SuppressWarnings("unchecked")
-	public static <E> E[] removeElementAtIndex(E[] array, int index) {
-		int len = array.length;
-		E[] result = (E[]) Array.newInstance(array.getClass().getComponentType(), len - 1);
-		System.arraycopy(array, 0, result, 0, index);
-		System.arraycopy(array, index + 1, result, index, len - index - 1);
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * java.util.Arrays#removeElementAtIndex(char[] array, int index)
-	 */
-	public static char[] removeElementAtIndex(char[] array, int index) {
-		int len = array.length;
-		char[] result = new char[len - 1];
-		System.arraycopy(array, 0, result, 0, index);
-		System.arraycopy(array, index + 1, result, index, len - index - 1);
-		return result;
-	}
-
-	/**
-	 * Return a new array that contains the elements in the
-	 * specified array with the specified element removed.
-	 * java.util.Arrays#removeElementAtIndex(int[] array, int index)
-	 */
-	public static int[] removeElementAtIndex(int[] array, int index) {
-		int len = array.length;
-		int[] result = new int[len - 1];
-		System.arraycopy(array, 0, result, 0, index);
-		System.arraycopy(array, index + 1, result, index, len - index - 1);
-		return result;
-	}
-
-	/**
-	 * Remove any duplicate elements from the specified array,
-	 * while maintaining the order.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <E> E[] removeDuplicateElements(E... array) {
-		List<E> list = removeDuplicateElements(Arrays.asList(array));
-		return list.toArray((E[]) Array.newInstance(array.getClass().getComponentType(), list.size()));
-	}
-
-	/**
-	 * Remove any duplicate elements from the specified list,
-	 * while maintaining the order.
-	 */
-	public static <E> List<E> removeDuplicateElements(List<E> list) {
-		List<E> result = new ArrayList<E>(list.size());
-		Set<E> set = new HashSet<E>(list.size());		// take advantage of hashed look-up
-		for (E item : list) {
-			if (set.add(item)) {
-				result.add(item);
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Retain only the elements in the specified iterator
-	 * in the specified collection.
-	 * Return whether the collection changed as a result.
-	 * java.util.Collection#retainAll(java.util.Iterator iterator)
-	 */
-	public static boolean retainAll(Collection<?> collection, Iterator<?> iterator) {
-		return collection.retainAll(collection(iterator));
-	}
-
-	/**
-	 * Retain only the elements in the specified array
-	 * in the specified collection.
-	 * Return whether the collection changed as a result.
-	 * java.util.Collection#retainAll(Object[] array)
-	 */
-	public static boolean retainAll(Collection<?> collection, Object[] array) {
-		return collection.retainAll(set(array));
-	}
-
-	/**
-	 * Retain in the specified array all the elements in
-	 * the specified collection and return the result.
-	 * java.util.Arrays#retainAll(Object[] array, Collection collection)
-	 */
-	public static <E> E[] retainAll(E[] array, Collection<?> collection) {
-		E[] result = array;
-		// go backwards since we will be pulling elements
-		// out of 'result' and it will get shorter as we go
-		for (int i = array.length; i-- > 0; ) {
-			if ( ! collection.contains(array[i])) {
-				result = removeElementAtIndex(result, i);
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * java.util.Arrays#retainAll(Object[] array1, Object[] array2)
-	 */
-	public static <E> E[] retainAll(E[] array1, Object[] array2) {
-		// convert to a bag to take advantage of hashed look-up
-		return retainAll(array1, bag(array2));
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * java.util.Arrays#retainAll(char[] array1, char[] array2)
-	 */
-	public static char[] retainAll(char[] array1, char[] array2) {
-		char[] result1 = array1;
-		// go backwards since we will be pulling elements
-		// out of 'result1' and it will get shorter as we go
-		for (int i = array1.length; i-- > 0; ) {
-			char item = array1[i];
-			if ( ! contains(array2, item)) {
-				result1 = removeElementAtIndex(result1, i);
-			}
-		}
-		return result1;
-	}
-
-	/**
-	 * Remove from the first specified array all the elements in
-	 * the second specified array and return the result.
-	 * java.util.Arrays#removeAll(int[] array1, int[] array2)
-	 */
-	public static int[] retainAll(int[] array1, int[] array2) {
-		int[] result1 = array1;
-		// go backwards since we will be pulling elements
-		// out of 'result1' and it will get shorter as we go
-		for (int i = array1.length; i-- > 0; ) {
-			int item = array1[i];
-			if ( ! contains(array2, item)) {
-				result1 = removeElementAtIndex(result1, i);
-			}
-		}
-		return result1;
-	}
-
-	/**
-	 * Return the array reversed.
-	 * java.util.Arrays.reverse(Object[] array)
-	 */
-	public static <E> E[] reverse(E... array) {
-		int len = array.length;
-		for (int i = 0, mid = len >> 1, j = len - 1; i < mid; i++, j--) {
-			swap(array, i, j);
-		}
-		return array;
-	}
-
-	/**
-	 * Return the array reversed.
-	 * java.util.Arrays.reverse(char[] array)
-	 */
-	public static char[] reverse(char... array) {
-		int len = array.length;
-		for (int i = 0, mid = len >> 1, j = len - 1; i < mid; i++, j--) {
-			swap(array, i, j);
-		}
-		return array;
-	}
-
-	/**
-	 * Return the array reversed.
-	 * java.util.Arrays.reverse(int[] array)
-	 */
-	public static int[] reverse(int... array) {
-		int len = array.length;
-		for (int i = 0, mid = len >> 1, j = len - 1; i < mid; i++, j--) {
-			swap(array, i, j);
-		}
-		return array;
-	}
-
-	/**
-	 * Return a list with entries in reverse order from those
-	 * returned by the specified iterator.
-	 */
-	public static <E> List<E> reverseList(Iterator<? extends E> iterator) {
-		return reverse(list(iterator));
-	}
-
-	/**
-	 * Return the rotated array after rotating it one position.
-	 * java.util.Arrays.rotate(Object[] array)
-	 */
-	public static <E> E[] rotate(E... array) {
-		return rotate(array, 1);
-	}
-
-	/**
-	 * Return the rotated array after rotating it the specified distance.
-	 * java.util.Arrays.rotate(Object[] array, int distance)
-	 */
-	public static <E> E[] rotate(E[] array, int distance) {
-		int len = array.length;
-		if (len == 0) {
-			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.
-	 * java.util.Arrays.rotate(char[] array)
-	 */
-	public static char[] rotate(char... array) {
-		return rotate(array, 1);
-	}
-
-	/**
-	 * Return the rotated array after rotating it the specified distance.
-	 * java.util.Arrays.rotate(char[] array, int distance)
-	 */
-	public static char[] rotate(char[] array, int distance) {
-		int len = array.length;
-		if (len == 0) {
-			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.
-	 * java.util.Arrays.rotate(int[] array)
-	 */
-	public static int[] rotate(int... array) {
-		return rotate(array, 1);
-	}
-
-	/**
-	 * Return the rotated array after rotating it the specified distance.
-	 * java.util.Arrays.rotate(int[] array, int distance)
-	 */
-	public static int[] rotate(int[] array, int distance) {
-		int len = array.length;
-		if (len == 0) {
-			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;
-	}
-
-	/**
-	 * Return a set corresponding to the specified iterator.
-	 * java.util.HashSet(java.util.Iterator iterator)
-	 */
-	public static <E> Set<E> set(Iterator<? extends E> iterator) {
-		Set<E> set = new HashSet<E>();
-		while (iterator.hasNext()) {
-			set.add(iterator.next());
-		}
-		return set;
-	}
-
-	/**
-	 * Return a set corresponding to the specified array.
-	 * java.util.HashSet(Object[] array)
-	 */
-	public static <E> Set<E> set(E... array) {
-		Set<E> set = new HashSet<E>(2 * array.length);
-		for (E item : array) {
-			set.add(item);
-		}
-		return set;
-	}
-
-	private static final Random RANDOM = new Random();
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * java.util.Arrays#shuffle(Object[] array)
-	 */
-	public static <E> E[] shuffle(E... array) {
-		return shuffle(array, RANDOM);
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * java.util.Arrays#shuffle(Object[] array, Random r)
-	 */
-	public static <E> E[] shuffle(E[] array, Random random) {
-		int len = array.length;
-		for (int i = len; i-- > 0; ) {
-			swap(array, i, random.nextInt(len));
-		}
-		return array;
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * java.util.Arrays#shuffle(char[] array)
-	 */
-	public static char[] shuffle(char... array) {
-		return shuffle(array, RANDOM);
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * java.util.Arrays#shuffle(char[] array, Random r)
-	 */
-	public static char[] shuffle(char[] array, Random random) {
-		int len = array.length;
-		for (int i = len; i-- > 0; ) {
-			swap(array, i, random.nextInt(len));
-		}
-		return array;
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * java.util.Arrays#shuffle(int[] array)
-	 */
-	public static int[] shuffle(int... array) {
-		return shuffle(array, RANDOM);
-	}
-
-	/**
-	 * Return the array after "shuffling" it.
-	 * java.util.Arrays#shuffle(int[] array, Random r)
-	 */
-	public static int[] shuffle(int[] array, Random random) {
-		int len = array.length;
-		for (int i = len; i-- > 0; ) {
-			swap(array, i, random.nextInt(len));
-		}
-		return array;
-	}
-
-	/**
-	 * Return an iterator that returns only the single,
-	 * specified object.
-	 * Object#toIterator() ?!
-	 */
-	public static <E> Iterator<E> singletonIterator(E value) {
-		return new SingleElementIterator<E>(value);
-	}
-
-	/**
-	 * Return the number of elements returned by the specified iterator.
-	 * java.util.Iterator#size()
-	 */
-	public static int size(Iterator<?> iterator) {
-		int size = 0;
-		while (iterator.hasNext()) {
-			iterator.next();
-			size++;
-		}
-		return size;
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified iterator.
-	 * java.util.TreeSet(java.util.Iterator iterator)
-	 */
-	public static <E extends Comparable<? super E>> SortedSet<E> sortedSet(Iterator<? extends E> iterator) {
-		return sortedSet(iterator, null);
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified iterator
-	 * and comparator.
-	 * java.util.TreeSet(java.util.Iterator iterator, java.util.Comparator c)
-	 */
-	public static <E> SortedSet<E> sortedSet(Iterator<? extends E> iterator, Comparator<? super E> comparator) {
-		SortedSet<E> sortedSet = new TreeSet<E>(comparator);
-		sortedSet.addAll(list(iterator));
-		return sortedSet;
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified array.
-	 * java.util.TreeSet(Object[] array)
-	 */
-	public static <E extends Comparable<? super E>> SortedSet<E> sortedSet(E... array) {
-		return sortedSet(array, null);
-	}
-
-	/**
-	 * Return a sorted set corresponding to the specified array
-	 * and comparator.
-	 * java.util.TreeSet(Object[] array, java.util.Comparator c)
-	 */
-	public static <E> SortedSet<E> sortedSet(E[] array, Comparator<? super E> comparator) {
-		SortedSet<E> sortedSet = new TreeSet<E>(comparator);
-		sortedSet.addAll(Arrays.asList(array));
-		return sortedSet;
-	}
-
-	/**
-	 * Return the array after the specified elements have been "swapped".
-	 * java.util.Arrays#swap(Object[] array, int i, int j)
-	 */
-	public 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".
-	 * java.util.Arrays#swap(char[] array, int i, int j)
-	 */
-	public 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".
-	 * java.util.Arrays#swap(int[] array, int i, int j)
-	 */
-	public static int[] swap(int[] array, int i, int j) {
-		int temp = array[i];
-		array[i] = array[j];
-		array[j] = temp;
-		return array;
-	}
-
-	/**
-	 * Return a vector corresponding to the specified iterator.
-	 * This is useful for legacy code that requires a java.util.Vector.
-	 * java.util.Vector(java.util.Iterator iterator)
-	 */
-	public static <E> Vector<E> vector(Iterator<? extends E> iterator) {
-		Vector<E> v = new Vector<E>();
-		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 java.util.Vector.
-	 * java.util.Vector(Object[] array)
-	 */
-	public static <E> Vector<E> vector(E... array) {
-		int len = array.length;
-		Vector<E> v = new Vector<E>(len);
-		for (E item : array) {
-			v.addElement(item);
-		}
-		return v;
-	}
-
-
-	//********** java.util.Collections enhancements **********
-
-	/**
-	 * Return the destination list after the source list has been copied into it.
-	 * @see java.util.Collections#copy(java.util.List, java.util.List)
-	 */
-	public static <E> List<? super E> copy(List<? super E> dest, List<? extends E> src) {
-		Collections.copy(dest, src);
-		return dest;
-	}
-
-	/**
-	 * Return the list after it has been "filled".
-	 * @see java.util.Collections#fill(java.util.List, java.lang.Object)
-	 */
-	public static <E> List<? super E> fill(List<? super E> list, E value) {
-		Collections.fill(list, value);
-		return list;
-	}
-
-	/**
-	 * Return the list after it has been "reversed".
-	 * @see java.util.Collections#reverse(java.util.List)
-	 */
-	public static <E> List<E> reverse(List<E> list) {
-		Collections.reverse(list);
-		return list;
-	}
-
-	/**
-	 * Return the list after it has been "rotated" by one position.
-	 * @see java.util.Collections#rotate(java.util.List, int)
-	 */
-	public static <E> List<E> rotate(List<E> list) {
-		return rotate(list, 1);
-	}
-
-	/**
-	 * Return the list after it has been "rotated".
-	 * @see java.util.Collections#rotate(java.util.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 java.util.Collections#shuffle(java.util.List)
-	 */
-	public static <E> List<E> shuffle(List<E> list) {
-		Collections.shuffle(list);
-		return list;
-	}
-
-	/**
-	 * Return the list after it has been "shuffled".
-	 * @see java.util.Collections#shuffle(java.util.List, java.util.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".
-	 * @see java.util.Collections#sort(java.util.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".
-	 * @see java.util.Collections#sort(java.util.List, java.util.Comparator)
-	 */
-	public static <E> List<E> sort(List<E> list, Comparator<? super E> comparator) {
-		Collections.sort(list, comparator);
-		return list;
-	}
-
-	/**
-	 * Return the iterator after it has been "sorted".
-	 */
-	public static <E extends Comparable<? super E>> Iterator<E> sort(Iterator<E> iterator) {
-		return sort(iterator, null);
-	}
-
-	/**
-	 * Return the list after it has been "sorted".
-	 */
-	public static <E> Iterator<E> sort(Iterator<E> iterator, Comparator<? super E> comparator) {
-		return sort(list(iterator), comparator).iterator();
-	}
-
-	/**
-	 * Return the list after the specified elements have been "swapped".
-	 * @see java.util.Collections#swap(java.util.List, int, int)
-	 */
-	public static <E> List<E> swap(List<E> list, int i, int j) {
-		Collections.swap(list, i, j);
-		return list;
-	}
-
-
-	//********** java.util.Arrays enhancements **********
-
-	/**
-	 * Return the array after it has been "filled".
-	 * @see java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.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 java.util.Arrays#sort(byte[])
-	 */
-	public static byte[] sort(byte... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see java.util.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 java.util.Arrays#sort(char[])
-	 */
-	public static char[] sort(char... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see java.util.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 java.util.Arrays#sort(double[])
-	 */
-	public static double[] sort(double... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see java.util.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 java.util.Arrays#sort(float[])
-	 */
-	public static float[] sort(float... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see java.util.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 java.util.Arrays#sort(int[])
-	 */
-	public static int[] sort(int... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see java.util.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 java.util.Arrays#sort(Object[])
-	 */
-	public static <E> E[] sort(E... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see java.util.Arrays#sort(Object[], java.util.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 java.util.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 java.util.Arrays#sort(Object[], int, int, java.util.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 java.util.Arrays#sort(long[])
-	 */
-	public static long[] sort(long... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see java.util.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 java.util.Arrays#sort(short[])
-	 */
-	public static short[] sort(short... array) {
-		Arrays.sort(array);
-		return array;
-	}
-
-	/**
-	 * Return the array after it has been "sorted".
-	 * @see java.util.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 CollectionTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-}
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 39c3efe..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/FileTools.java
+++ /dev/null
@@ -1,1006 +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.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");
-	public static final String USER_TEMPORARY_DIRECTORY_NAME = System.getProperty("java.io.tmpdir");
-	public static String DEFAULT_TEMPORARY_DIRECTORY_NAME = "tmpdir";
-	public static final String CURRENT_WORKING_DIRECTORY_NAME = System.getProperty("user.dir");
-
-    /** 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. */
-	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());
-		}
-	}
-	
-	/**
-	 * 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());
-				}
-			}
-		}
-	}
-	
-
-	// ********** 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());
-		destinationFile.createNewFile();
-		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(Object next) {
-				return ((File) 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(Object next) {
-				return ((File) 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 "";
-		}
-		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 {
-			dir.mkdirs();
-		}
-		return dir;
-	}
-	
-	/**
-	 * 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()) {
-			dir.mkdirs();
-		}
-		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(".")) {
-			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("/")) {
-			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 (CollectionTools.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();
-		StringBuffer sb = new StringBuffer(len);
-		for (int i = 0; i < len; i++) {
-			char filenameChar = filename.charAt(i);
-			if (CollectionTools.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) {
-		if (executingOnWindows()) {
-			return CollectionTools.contains(WINDOWS_RESERVED_FILE_NAMES, fileName.toLowerCase());
-		}
-		return false;	// Unix does not have any "reserved" file names (I think...)
-	}
-
-	/**
-	 * 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;
-		}
-
-		StringBuffer sb = new StringBuffer();
-		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, "...");
-		}
-
-		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 **********
-
-	private static boolean executingOnWindows() {
-		return executingOn("Windows");
-	}
-
-//	private static boolean executingOnLinux() {
-//		return executingOn("Linux");
-//	}
-//
-	private static boolean executingOn(String osName) {
-		return System.getProperty("os.name").indexOf(osName) != -1;
-	}
-
-	/**
-	 * 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(Object next) {
-				return fileFilter.accept((File) 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(".");
-		}
-
-		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);
-		}
-		File result = new File("..");
-		for (int i = len - 1; i-- > 0; ) {
-			result = new File(result, "..");
-		}
-		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/Filter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Filter.java
deleted file mode 100644
index 20f95e0..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Filter.java
+++ /dev/null
@@ -1,46 +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.internal;
-
-/**
- * Used by various "pluggable" classes to filter objects.
- */
-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);
-
-
-	final class Null<S> implements Filter<S> {
-		@SuppressWarnings("unchecked")
-		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 next) {
-			return true;
-		}
-		@Override
-		public String toString() {
-			return "Filter.Null";
-		}
-	}
-
-}
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 5017cf9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/HashBag.java
+++ /dev/null
@@ -1,733 +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.internal;
-
-import java.io.Serializable;
-import java.util.AbstractCollection;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * This class implements the <code>Bag</code> 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 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 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>
- * <b>Note that this implementation is not synchronized.</b> If multiple
- * threads access a bag concurrently, and at least one of the threads modifies
- * the bag, it <i>must</i> 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
- * <i>fail-fast</i>: 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 <code>ConcurrentModificationException</code>.
- * 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.
- * 
- * @see	Collections#synchronizedCollection(Collection)
- */
-
-public class HashBag<E> extends AbstractCollection<E>
-			implements Bag<E>, Cloneable, Serializable {
-
-	/** The hash table. */
-	transient Entry<E>[] table;
-	
-	/** The total number of entries in the bag. */
-	transient int count = 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 (int)(capacity * loadFactor).)
-	 *
-	 * @serial
-	 */
-	private int threshold;
-	
-	/**
-	 * The load factor for the hash table.
-	 *
-	 * @serial
-	 */
-	private 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;
-
-	/**
-	 * Constructs a new, empty bag with the
-	 * default capacity, which is 11, and load factor, which is 0.75.
-	 */
-	public HashBag() {
-		this(11, 0.75f);
-	}
-	
-	/**
-	 * Constructs a new, empty bag with the specified initial capacity
-	 * and default load factor, which is 0.75.
-	 *
-	 * @param initialCapacity the initial capacity of the backing map.
-	 * @throws IllegalArgumentException if the initial capacity is less
-	 *     than zero.
-	 */
-	public HashBag(int initialCapacity) {
-		this(initialCapacity, 0.75f);
-	}
-	
-	/**
-	 * Constructs a new, empty bag with
-	 * the specified initial capacity and the specified load factor.
-	 *
-	 * @param initialCapacity the initial capacity of the backing map.
-	 * @param loadFactor the load factor of the backing map.
-	 * @throws IllegalArgumentException if the initial capacity is less
-	 *     than zero, or if the load factor is nonpositive.
-	 */
-	@SuppressWarnings("unchecked")
-	public HashBag(int initialCapacity, float loadFactor) {
-		if (initialCapacity < 0) {
-			throw new IllegalArgumentException("Illegal Initial Capacity: " + initialCapacity);
-		}
-		if (loadFactor <= 0 || Float.isNaN(loadFactor)) {
-			throw new IllegalArgumentException("Illegal Load factor: " + loadFactor);
-		}
-		if (initialCapacity == 0) {
-			initialCapacity = 1;
-		}
-		this.loadFactor = loadFactor;
-		this.table = new Entry[initialCapacity];
-		this.threshold = (int) (initialCapacity * loadFactor);
-	}
-	
-	/**
-	 * Constructs a new bag containing the elements in the specified
-	 * collection. The capacity of the bag is
-	 * twice the size of the specified collection or 11 (whichever is
-	 * greater), and the default load factor, which is 0.75, is used.
-	 *
-	 * @param c the collection whose elements are to be placed into this bag.
-	 */
-	public HashBag(Collection<? extends E> c) {
-		this(Math.max(2*c.size(), 11));
-		this.addAll(c);
-	}
-	
-	/**
-	 * This implementation simply returns the maintained count.
-	 */
-	@Override
-	public int size() {
-		return this.count;
-	}
-	
-	/**
-	 * This implementation simply compares the maintained count to zero.
-	 */
-	@Override
-	public boolean isEmpty() {
-		return this.count == 0;
-	}
-	
-	/**
-	 * 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 contains(Object o) {
-		Entry<E>[] tab = this.table;
-		if (o == null) {
-			for (Entry<E> e = tab[0]; e != null; e = e.next) {
-				if (e.object == null) {
-					return true;
-				}
-			}
-		} else {
-			int hash = o.hashCode();
-			int index = (hash & 0x7FFFFFFF) % tab.length;
-			for (Entry<E> e = tab[index]; e != null; e = e.next) {
-				if ((e.hash == hash) && o.equals(e.object)) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-	
-	/**
-	 * Return the number of times the specified object occurs in the bag.
-	 */	
-	public int count(Object o) {
-		Entry<E>[] tab = this.table;
-		if (o == null) {
-			for (Entry<E> e = tab[0]; e != null; e = e.next) {
-				if (e.object == null) {
-					return e.count;
-				}
-			}
-		} else {
-			int hash = o.hashCode();
-			int index = (hash & 0x7FFFFFFF) % tab.length;
-			for (Entry<E> e = tab[index]; e != null; e = e.next) {
-				if ((e.hash == hash) && o.equals(e.object)) {
-					return e.count;
-				}
-			}
-		}
-		return 0;
-	}
-	
-	/**
-	 * Rehashes the contents of this bag into a new hash table
-	 * with a larger capacity. This method is called when the
-	 * number of different elements in this map exceeds its
-	 * capacity and load factor.
-	 */
-	@SuppressWarnings("unchecked")
-	private void rehash() {
-		Entry<E>[] oldMap = this.table;
-		int oldCapacity = oldMap.length;
-	
-		int newCapacity = oldCapacity * 2 + 1;
-		Entry<E>[] newMap = new Entry[newCapacity];
-	
-		this.modCount++;
-		this.threshold = (int) (newCapacity * this.loadFactor);
-		this.table = newMap;
-	
-		for (int i = oldCapacity; i-- > 0; ) {
-			for (Entry<E> old = oldMap[i]; old != null; ) {
-				Entry<E> e = old;
-				old = old.next;
-	
-				int index = (e.hash & 0x7FFFFFFF) % newCapacity;
-				e.next = newMap[index];
-				newMap[index] = e;
-			}
-		}
-	}
-	
-	/**
-	 * 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
-	@SuppressWarnings("unchecked")
-	public boolean add(E o) {
-		this.modCount++;
-		Entry<E>[] tab = this.table;
-		int hash = 0;
-		int index = 0;
-	
-		// if the object is already in the bag, simply bump its count
-		if (o == null) {
-			for (Entry<E> e = tab[0]; e != null; e = e.next) {
-				if (e.object == null) {
-					e.count++;
-					this.count++;
-					return true;
-				}
-			}
-		} else {
-			hash = o.hashCode();
-			index = (hash & 0x7FFFFFFF) % tab.length;
-			for (Entry<E> e = tab[index]; e != null; e = e.next) {
-				if ((e.hash == hash) && o.equals(e.object)) {
-					e.count++;
-					this.count++;
-					return true;
-				}
-			}
-		}
-	
-		// rehash the table if the threshold is exceeded
-		if (this.uniqueCount >= this.threshold) {
-			this.rehash();
-			tab = this.table;
-			index = (hash & 0x7FFFFFFF) % tab.length;
-		}
-	
-		// create the new entry and put it in the table
-		Entry<E> e = new Entry(hash, o, tab[index]);
-		tab[index] = e;
-		this.count++;
-		this.uniqueCount++;
-		return true;
-	}
-	
-	/**
-	 * 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) {
-		Entry<E>[] tab = this.table;
-		if (o == null) {
-			for (Entry<E> e = tab[0], prev = null; e != null; prev = e, e = e.next) {
-				if (e.object == null) {
-					this.modCount++;
-					e.count--;
-					// if we are removing the last one, remove the entry from the table
-					if (e.count == 0) {
-						if (prev == null) {
-							tab[0] = e.next;
-						} else {
-							prev.next = e.next;
-						}
-						this.uniqueCount--;
-					}
-					this.count--;
-					return true;
-				}
-			}
-		} else {
-			int hash = o.hashCode();
-			int index = (hash & 0x7FFFFFFF) % tab.length;
-			for (Entry<E> e = tab[index], prev = null; e != null; prev = e, e = e.next) {
-				if ((e.hash == hash) && o.equals(e.object)) {
-					this.modCount++;
-					e.count--;
-					// if we are removing the last one, remove the entry from the table
-					if (e.count == 0) {
-						if (prev == null) {
-							tab[index] = e.next;
-						} else {
-							prev.next = e.next;
-						}
-						this.uniqueCount--;
-					}
-					this.count--;
-					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.count = 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
-	@SuppressWarnings("unchecked")
-	public HashBag<E> clone() {
-		try {
-			HashBag<E> clone = (HashBag<E>) super.clone();
-			clone.table = new Entry[this.table.length];
-			for (int i = this.table.length; i-- > 0; ) {
-				clone.table[i] = (this.table[i] == null) 
-						? null : (Entry) this.table[i].clone();
-			}
-			clone.modCount = 0;
-			return clone;
-		} catch (CloneNotSupportedException e) {
-			throw new InternalError();
-		}
-	}
-	
-	/**
-	 * Hash table collision list entry.
-	 */
-	private static class Entry<E> {
-		int hash;
-		E object;
-		int count;
-		Entry<E> next;
-	
-		Entry(int hash, E object, Entry<E> next) {
-			this(hash, object, 1, next);
-		}
-	
-		private Entry(int hash, E object, int count, Entry<E> next) {
-			this.hash = hash;
-			this.object = object;
-			this.count = count;
-			this.next = next;
-		}
-	
-		@Override
-		@SuppressWarnings("unchecked")
-		protected Entry<E> clone() {
-			return new Entry(this.hash, this.object, this.count,
-					(this.next == null ? null : this.next.clone()));
-		}
-	
-		@Override
-		public String toString() {
-			return this.object + "=>" + this.count;
-		}
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public Iterator<E> iterator() {
-		if (this.count == 0) {
-			return EMPTY_ITERATOR;
-		}
-		return new HashIterator();
-	}
-
-	/**
-	 * 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.
-	 */
-	@SuppressWarnings("unchecked")
-	public Iterator<E> uniqueIterator() {
-		if (this.count == 0) {
-			return EMPTY_ITERATOR;
-		}
-		return new UniqueIterator();
-	}
-	
-	/**
-	 * Empty iterator that does just about nothing.
-	 */
-	@SuppressWarnings("unchecked")
-	private static final Iterator EMPTY_ITERATOR = new EmptyIterator();
-	
-	@SuppressWarnings("unchecked")
-	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> {
-		Entry<E>[] localTable = HashBag.this.table;
-		int index = this.localTable.length;	// start at the end of the table
-		Entry<E> nextEntry = null;
-		int nextEntryCount = 0;
-		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 = this.localTable;
-			// 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 = this.localTable;
-			// 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();
-			}
-			Entry<E>[] tab = this.localTable;
-			int slot = (this.lastReturnedEntry.hash & 0x7FFFFFFF) % tab.length;
-			for (Entry<E> e = tab[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) {
-							tab[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.count--;
-					this.lastReturnedEntry = null;	// it cannot be removed again
-					return;
-				}
-			}
-			throw new ConcurrentModificationException();
-		}
-
-	}
-	
-	
-	private class UniqueIterator implements Iterator<E> {
-		Entry<E>[] localTable = HashBag.this.table;
-		int index = this.localTable.length;	// start at the end of the table
-		Entry<E> nextEntry = null;
-		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;
-
-		UniqueIterator() {
-			super();
-		}
-
-		public boolean hasNext() {
-			Entry<E> e = this.nextEntry;
-			int i = this.index;
-			Entry<E>[] tab = this.localTable;
-			// 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 = this.localTable;
-			// 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.object;
-		}
-
-		public void remove() {
-			if (this.lastReturnedEntry == null) {
-				throw new IllegalStateException();
-			}
-			if (HashBag.this.modCount != this.expectedModCount) {
-				throw new ConcurrentModificationException();
-			}
-			Entry<E>[] tab = this.localTable;
-			int slot = (this.lastReturnedEntry.hash & 0x7FFFFFFF) % tab.length;
-			for (Entry<E> e = tab[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) {
-						tab[slot] = e.next;
-					} else {
-						prev.next = e.next;
-					}
-					HashBag.this.uniqueCount--;
-					HashBag.this.count -= this.lastReturnedEntry.count;
-					this.lastReturnedEntry = null;	// it cannot be removed again
-					return;
-				}
-			}
-			throw new ConcurrentModificationException();
-		}
-
-	}
-	
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public boolean equals(Object o) {
-		if (o == this) {
-			return true;
-		}
-		if ( ! (o instanceof Bag)) {
-			return false;
-		}
-		Bag<E> b = (Bag<E>) o;
-		if (b.size() != this.size()) {
-			return false;
-		}
-		Bag<E> clone = this.clone();
-		for (E e : b) {
-			if ( ! clone.remove(e)) {
-				return false;
-			}
-		}
-		return clone.isEmpty();
-	}
-	
-	@Override
-	public int hashCode() {
-		int h = 0;
-		for (Iterator<E> stream = this.iterator(); stream.hasNext(); ) {
-			Object next = stream.next();
-			if (next != null) {
-				h += next.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 synchronized 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);
-
-		Entry<E>[] tab = this.table;
-		// write out elements and counts (alternating)
-		for (Entry<E> entry : tab) {
-			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).
-	 */
-	@SuppressWarnings("unchecked")
-	private synchronized 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 = new Entry[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++) {
-			E element = (E) s.readObject();
-			int elementCount = s.readInt();
-			for (int j = 0; j < elementCount; j++) {
-				this.add(element);
-			}
-		}
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/IndentingPrintWriter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/IndentingPrintWriter.java
deleted file mode 100644
index c510c86..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/IndentingPrintWriter.java
+++ /dev/null
@@ -1,148 +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.internal;
-
-import java.io.PrintWriter;
-import java.io.Writer;
-
-/**
- * Extend 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";
-
-
-	/**
-	 * 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.
-	 */
-	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() {
-		return this.indentLevel;
-	}
-	
-	/**
-	 * Allow the indent level to be set directly.
-	 */
-	public void setIndentLevel(int indentLevel) {
-		synchronized (this.lock) {
-			this.indentLevel = indentLevel;
-		}
-	}
-
-}
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 23c4f6d..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JDBCTools.java
+++ /dev/null
@@ -1,348 +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.internal;
-
-import java.sql.Types;
-import java.util.HashMap;
-
-/**
- * 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.javaClassName());
-	}
-
-	/**
-	 * 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.getName());
-	}
-
-	/**
-	 * 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 JavaType(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
-//		addJDBCMappingTo(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.getName(), buildJDBCToJavaTypeMapping(jdbcType, javaClass));
-		if (prev != null) {
-			throw new IllegalArgumentException("duplicate JDBC type: " + jdbcType.getName());
-		}
-	}
-
-	private static JDBCToJavaTypeMapping buildJDBCToJavaTypeMapping(JDBCType jdbcType, Class<?> javaClass) {
-		return new JDBCToJavaTypeMapping(jdbcType, new JavaType(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());
-		}
-	}
-
-	private static JavaToJDBCTypeMapping buildJavaToJDBCTypeMapping(Class<?> javaClass, int jdbcTypeCode) {
-		return new JavaToJDBCTypeMapping(new JavaType(javaClass), JDBCType.type(jdbcTypeCode));
-	}
-
-
-	// ********** constructor **********
-
-	/**
-	 * Suppress default constructor, ensuring non-instantiability.
-	 */
-	private JDBCTools() {
-		super();
-		throw new UnsupportedOperationException();
-	}
-
-
-	// ********** member classes **********
-
-	/**
-	 * JDBC => Java
-	 */
-	private 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.getCode() == jdbcTypeCode;
-		}
-
-		public boolean maps(String jdbcTypeName) {
-			return this.jdbcType.getName().equals(jdbcTypeName);
-		}
-
-		public boolean maps(JDBCType type) {
-			return this.jdbcType == type;
-		}
-
-		@Override
-		public String toString() {
-			StringBuffer sb = new StringBuffer();
-			this.appendTo(sb);
-			return sb.toString();
-		}
-
-		public void appendTo(StringBuffer sb) {
-			this.jdbcType.appendTo(sb);
-			sb.append(" => ");
-			this.javaType.appendDeclarationTo(sb);
-		}
-
-	}
-
-	/**
-	 * Java => JDBC
-	 */
-	private 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() {
-			StringBuffer sb = new StringBuffer();
-			this.appendTo(sb);
-			return sb.toString();
-		}
-
-		public void appendTo(StringBuffer sb) {
-			this.javaType.appendDeclarationTo(sb);
-			sb.append(" => ");
-			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 fccea11..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JDBCType.java
+++ /dev/null
@@ -1,167 +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.internal;
-
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.sql.Types;
-import java.text.Collator;
-
-/**
- * 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 Comparable<JDBCType>, 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 getName() {
-		return this.name;
-	}
-
-
-	/**
-	 * Return the type code, as defined in java.sql.Types.
-	 */
-	public int getCode() {
-		return this.code;
-	}
-
-
-	// ********** printing and displaying **********
-
-	public void appendTo(StringBuffer sb) {
-		sb.append(this.name);
-	}
-
-	@Override
-	public String toString() {
-		StringBuffer sb = new StringBuffer();
-		sb.append(ClassTools.shortClassNameForObject(this));
-		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();
-		}
-	}
-
-	public int compareTo(JDBCType type) {
-		return Collator.getInstance().compare(this.name, type.name);
-	}
-
-
-	// ********** 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].getCode() == code) {
-				return types[i];
-			}
-		}
-		throw new IllegalArgumentException("invalid JDBC type code: " + code);
-	}
-
-	/**
-	 * 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].getName().equals(name)) {
-				return types[i];
-			}
-		}
-		throw new IllegalArgumentException("invalid JDBC type name: " + name);
-	}
-
-	/**
-	 * 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/JavaType.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JavaType.java
deleted file mode 100644
index 682cda6..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/JavaType.java
+++ /dev/null
@@ -1,232 +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.internal;
-
-import java.io.PrintWriter;
-import java.io.Serializable;
-import java.text.Collator;
-
-/**
- * This class 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.
- */
-public final class JavaType
-	implements Comparable<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 long serialVersionUID = 1L;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct a Java type with the specified element type and array depth.
-	 */
-	public JavaType(String elementTypeName, int arrayDepth) {
-		super();
-		if ((elementTypeName == null) || (elementTypeName.length() == 0)) {
-			throw new IllegalArgumentException("The element type name is required.");
-		}
-		if (ClassTools.arrayDepthForClassNamed(elementTypeName) != 0) {		// e.g. "[Ljava.lang.Object;"
-			throw new IllegalArgumentException("The element type must not be an array: " + elementTypeName + '.');
-		}
-		if (arrayDepth < 0) {
-			throw new IllegalArgumentException("The array depth must be greater than or equal to zero: " + arrayDepth + '.');
-		}
-		if (elementTypeName.equals(void.class.getName()) && (arrayDepth != 0)) {
-			throw new IllegalArgumentException("'void' must have an array depth of zero: " + arrayDepth + '.');
-		}
-		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:
-	 *     java.lang.Object
-	 *     int
-	 *     java.util.Map$Entry
-	 *     [Ljava.lang.Object;
-	 *     [I
-	 *     [Ljava.util.Map$Entry;
-	 */
-	public JavaType(String javaClassName) {
-		this(ClassTools.elementTypeNameForClassNamed(javaClassName), ClassTools.arrayDepthForClassNamed(javaClassName));
-	}
-
-	/**
-	 * Construct a Java type for the specified class.
-	 */
-	public JavaType(Class<?> javaClass) {
-		this(javaClass.getName());
-	}
-
-
-	// ********** accessors **********
-
-	/**
-	 * Return the name of the type's "element type".
-	 * A member type will have one or more '$' characters in its name.
-	 */
-	public String getElementTypeName() {
-		return this.elementTypeName;
-	}
-
-	/**
-	 * Return the type's "array depth".
-	 */
-	public int getArrayDepth() {
-		return this.arrayDepth;
-	}
-
-
-	// ********** queries **********
-
-	public boolean isArray() {
-		return this.arrayDepth > 0;
-	}
-
-	public boolean isPrimitive() {
-		return (this.arrayDepth == 0) && ClassTools.classNamedIsNonReference(this.elementTypeName);
-	}
-
-	/**
-	 * Return the class corresponding to the type's element type and array depth.
-	 */
-	public Class<?> javaClass() throws ClassNotFoundException {
-		return ClassTools.classForTypeDeclaration(this.elementTypeName, this.arrayDepth);
-	}
-
-	/**
-	 * Return the version of the type's name that matches that
-	 * returned by java.lang.Class#getName()
-	 * (e.g. "[[J", "[Ljava.lang.Object;", "java.util.Map$Entry").
-	 */
-	public String javaClassName() {
-		return ClassTools.classNameForTypeDeclaration(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(ClassTools.elementTypeNameForClassNamed(className), ClassTools.arrayDepthForClassNamed(className));
-	}
-
-	public boolean describes(Class<?> javaClass) {
-		return this.describes(javaClass.getName());
-	}
-
-	public boolean equals(JavaType other) {
-		return this.equals(other.elementTypeName, other.arrayDepth);
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		return (o instanceof JavaType) ? this.equals((JavaType) o) : false;
-	}
-
-	@Override
-	public int hashCode() {
-		return this.elementTypeName.hashCode() ^ this.arrayDepth;
-	}
-
-	public int compareTo(JavaType jt) {
-		int x = Collator.getInstance().compare(this.elementTypeName, jt.elementTypeName);
-		return (x != 0) ? x : (this.arrayDepth - jt.arrayDepth);
-	}
-
-
-	// ********** printing and displaying **********
-
-	/**
-	 * Return the version of the type's name that can be used in source code:
-	 *     "[[J" => "long[][]"
-	 *     "java.util.Map$Entry" => "java.util.Map.Entry"
-	 */
-	public String declaration() {
-		if (this.arrayDepth == 0) {
-			return this.elementTypeNameDeclaration();
-		}
-		StringBuffer sb = new StringBuffer(this.elementTypeName.length() + (2 * this.arrayDepth));
-		this.appendDeclarationTo(sb);
-		return sb.toString();
-	}
-
-	/**
-	 * Append the version of the type's name that can be used in source code:
-	 *     "[[J" => "long[][]"
-	 *     "java.util.Map$Entry" => "java.util.Map.Entry"
-	 */
-	public void appendDeclarationTo(StringBuffer sb) {
-		sb.append(this.elementTypeNameDeclaration());
-		for (int i = this.arrayDepth; i-- > 0; ) {
-			sb.append("[]");
-		}
-	}
-
-	/**
-	 * Print the version of the type's name that can be used in source code:
-	 *     "[[J" => "long[][]"
-	 *     "java.util.Map$Entry" => "java.util.Map.Entry"
-	 */
-	public void printDeclarationOn(PrintWriter pw) {
-		pw.print(this.elementTypeNameDeclaration());
-		for (int i = this.arrayDepth; i-- > 0; ) {
-			pw.print("[]");
-		}
-	}
-
-	/**
-	 * The '$' version of the name is used in Class.forName(String),
-	 * but the '.' verions of the name is used in source code.
-	 * Very irritating....
-	 */
-	private String elementTypeNameDeclaration() {
-		return this.elementTypeName.replace('$', '.');
-	}
-
-	@Override
-	public String toString() {
-		StringBuffer sb = new StringBuffer();
-		sb.append(ClassTools.shortClassNameForObject(this));
-		sb.append('(');
-		this.appendDeclarationTo(sb);
-		sb.append(')');
-		return sb.toString();
-	}
-
-	@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/NameTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NameTools.java
deleted file mode 100644
index be13c70..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/NameTools.java
+++ /dev/null
@@ -1,305 +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.internal;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-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,
-	 * Java-legal name that is either the "root" name or some variation on
-	 * the "root" name (e.g. "root2", "root3",...).
-	 * The names are case-sensitive.
-	 */
-	public static String uniqueJavaNameFor(String rootName, Iterator<String> existingNames) {
-		Collection<String> existingNames2 = CollectionTools.set(existingNames);
-		existingNames2.addAll(JAVA_RESERVED_WORDS_SET);
-		return uniqueNameFor(rootName, existingNames2, rootName);
-	}
-	
-	/**
-	 * Given a "root" name and a set of existing names, generate a unique,
-	 * Java-legal name that is either the "root" name or some variation on
-	 * the "root" name (e.g. "root2", "root3",...).
-	 * The names are case-sensitive.
-	 */
-	public static String uniqueJavaNameFor(String rootName, Collection<String> existingNames) {
-		Collection<String> existingNames2 = new HashSet<String>(existingNames);
-		existingNames2.addAll(JAVA_RESERVED_WORDS_SET);
-		return uniqueNameFor(rootName, existingNames2, 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 case-sensitive.
-	 */
-	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.
-	 */
-	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.
-	 */
-	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.
-	 */
-	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 Collection<String> convertToLowerCase(Collection<String> strings) {
-		Collection<String> result = new HashBag<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) {
-			throw new IllegalArgumentException();
-		}
-		if ((catalog == null) && (schema == null)) {
-			return name;
-		}
-
-		StringBuffer sb = new StringBuffer(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
-	 */
-	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 5.0
-				"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 Set<String> JAVA_RESERVED_WORDS_SET = CollectionTools.set(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);
-	}
-
-	/**
-	 * Convert the specified string to a valid Java identifier
-	 * by substituting an underscore '_' for any invalid characters
-	 * in the string and capitalizing 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 capitalizing the string if it is 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 words is a valid identifier, we just need to tweak it a bit
-			return StringTools.capitalize(string);
-		}
-		return new String(convertToJavaIdentifierInternal(string.toCharArray(), c));
-	}
-
-	/**
-	 * Convert the specified string to a valid Java identifier
-	 * by substituting an underscore '_' for any invalid characters
-	 * in the string and capitalizing 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 capitalizing the string if it is a Java
-	 * reserved word.
-	 */
-	public static char[] convertToJavaIdentifier(char[] string, char c) {
-		int length = string.length;
-		if (length == 0) {
-			return string;
-		}
-		if (JAVA_RESERVED_WORDS_SET.contains(new String(string))) {
-			// a reserved words is a valid identifier, we just need to tweak it a bit
-			return StringTools.capitalize(string);
-		}
-		return convertToJavaIdentifierInternal(string, c);
-	}
-
-	private static char[] convertToJavaIdentifierInternal(char[] string, char c) {
-		if ( ! Character.isJavaIdentifierStart(string[0])) {
-			if ( ! Character.isJavaIdentifierStart(c)) {
-				throw new IllegalArgumentException("invalid Java identifier start char: '" + c + "'");
-			}
-			string[0] = c;
-		}
-		if ( ! Character.isJavaIdentifierPart(c)) {
-			throw new IllegalArgumentException("invalid Java identifier part char: '" + c + "'");
-		}
-		for (int i = string.length; i-- > 1; ) {  // NB: end with 1
-			if ( ! Character.isJavaIdentifierPart(string[i])) {
-				string[i] = c;
-			}
-		}
-		return string;
-	}
-
-
-	// ********** 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/Range.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Range.java
deleted file mode 100644
index 4dbe486..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, 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;
-
-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 + ']';
-	}
-
-}
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 16ff458..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/ReverseComparator.java
+++ /dev/null
@@ -1,41 +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.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;
-	}
-
-	@SuppressWarnings("unchecked")
-	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/SimpleFilter.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleFilter.java
deleted file mode 100644
index c42674e..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/SimpleFilter.java
+++ /dev/null
@@ -1,106 +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.internal;
-
-import java.io.Serializable;
-
-/**
- * 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/StringTools.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringTools.java
deleted file mode 100644
index 5d17b69..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/StringTools.java
+++ /dev/null
@@ -1,2101 +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.internal;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Arrays;
-import java.util.Iterator;
-
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-/**
- * Convenience methods related to the java.lang.String class.
- */
-public final class StringTools {
-
-	/** carriage return */
-	public static final String CR = System.getProperty("line.separator");
-
-	/** double quote */
-	public static final char QUOTE = '"';
-
-
-
-	// ********** 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 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);
-		}
-		if (stringLength == length) {
-			return string;
-		}
-		return padInternal(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) {
-		padOn(string.toCharArray(), 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) {
-		padOn(string.toCharArray(), 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 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);
-		}
-		if (stringLength == length) {
-			return string;
-		}
-		return padInternal(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);
-		}
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else {
-			padOnInternal(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);
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			padOnInternal(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 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 padInternal(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) {
-		padOrTruncateOn(string.toCharArray(), 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) {
-		padOrTruncateOn(string.toCharArray(), 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 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 padInternal(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 {
-			padOnInternal(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 {
-			padOnInternal(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Pad the specified string without validating the parms.
-	 */
-	private static String padInternal(String string, int length, char c) {
-		return new String(padInternal(string.toCharArray(), length, c));
-	}
-
-	/**
-	 * Pad the specified string without validating the parms.
-	 */
-	private static char[] padInternal(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 padOnInternal(char[] string, int length, char c, Writer writer) {
-		writeStringOn(string, writer);
-		writeStringOn(CollectionTools.fill(new char[length - string.length], c), writer);
-	}
-
-	/**
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void padOnInternal(char[] string, int length, char c, StringBuffer sb) {
-		sb.append(string);
-		sb.append(CollectionTools.fill(new char[length - 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 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 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);
-		}
-		if (stringLength == length) {
-			return string;
-		}
-		return frontPadInternal(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) {
-		frontPadOn(string.toCharArray(), 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) {
-		frontPadOn(string.toCharArray(), 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 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);
-		}
-		if (stringLength == length) {
-			return string;
-		}
-		return frontPadInternal(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);
-		}
-		if (stringLength == length) {
-			writeStringOn(string, writer);
-		} else {
-			frontPadOnInternal(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);
-		}
-		if (stringLength == length) {
-			sb.append(string);
-		} else {
-			frontPadOnInternal(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 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 frontPadInternal(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) {
-		frontPadOrTruncateOn(string.toCharArray(), 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) {
-		frontPadOrTruncateOn(string.toCharArray(), 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 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 frontPadInternal(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 {
-			frontPadOnInternal(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 {
-			frontPadOnInternal(string, length, c, sb);
-		}
-	}
-
-	/**
-	 * Front-pad the specified string without validating the parms.
-	 */
-	private static String frontPadInternal(String string, int length, char c) {
-		return new String(frontPadInternal(string.toCharArray(), length, c));
-	}
-
-	/**
-	 * Zero-pad the specified string without validating the parms.
-	 */
-	private static char[] frontPadInternal(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 frontPadOnInternal(char[] string, int length, char c, Writer writer) {
-		writeStringOn(CollectionTools.fill(new char[length - string.length], c), writer);
-		writeStringOn(string, writer);
-	}
-
-	/**
-	 * Pad the specified string without validating the parms.
-	 */
-	private static void frontPadOnInternal(char[] string, int length, char c, StringBuffer sb) {
-		sb.append(CollectionTools.fill(new char[length - string.length], c));
-		sb.append(string);
-	}
-
-
-	// ********** wrapping/quoting **********
-
-	/**
-	 * Wrap the specified string with double quotes.
-	 */
-	public static String quote(String string) {
-		return wrap(string, QUOTE);
-	}
-
-	/**
-	 * Wrap the specified string with double quotes.
-	 */
-	public static void quoteOn(String string, Writer writer) {
-		wrapOn(string, QUOTE, writer);
-	}
-
-	/**
-	 * Wrap the specified string with double quotes.
-	 */
-	public static void quoteOn(String string, StringBuffer sb) {
-		wrapOn(string, QUOTE, sb);
-	}
-
-	/**
-	 * Wrap each of the specified strings with double quotes.
-	 */
-	public static Iterator<String> quote(Iterator<String> strings) {
-		return new TransformationIterator<String, String>(strings) {
-			@Override
-			protected String transform(String string) {
-				return StringTools.quote(string);
-			}
-		};
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static String wrap(String string, char wrap) {
-		return new String(wrap(string.toCharArray(), wrap));
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static void wrapOn(String string, char wrap, Writer writer) {
-		wrapOn(string.toCharArray(), wrap, writer);
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static void wrapOn(String string, char wrap, StringBuffer sb) {
-		wrapOn(string.toCharArray(), wrap, sb);
-	}
-
-	/**
-	 * Wrap each of the specified strings with the specified wrap; i.e. put a
-	 * copy of the wrap at the front and back of the resulting string.
-	 */
-	public static Iterator<String> wrap(Iterator<String> strings, final char wrap) {
-		return new TransformationIterator<String, String>(strings) {
-			@Override
-			protected String transform(String string) {
-				return StringTools.wrap(string, wrap);
-			}
-		};
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static String wrap(String string, String wrap) {
-		return new String(wrap(string.toCharArray(), wrap.toCharArray()));
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static void wrapOn(String string, String wrap, Writer writer) {
-		wrapOn(string.toCharArray(), wrap.toCharArray(), writer);
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static void wrapOn(String string, String wrap, StringBuffer sb) {
-		wrapOn(string.toCharArray(), wrap.toCharArray(), sb);
-	}
-
-	/**
-	 * Wrap each of the specified strings with the specified wrap; i.e. put a
-	 * copy of the wrap at the front and back of the resulting string.
-	 */
-	public static Iterator<String> wrap(Iterator<String> strings, final String wrap) {
-		return new TransformationIterator<String, String>(strings) {
-			@Override
-			protected String transform(String string) {
-				return StringTools.wrap(string, wrap);
-			}
-		};
-	}
-
-	/**
-	 * Wrap the specified string with double quotes.
-	 */
-	public static char[] quote(char[] string) {
-		return wrap(string, QUOTE);
-	}
-
-	/**
-	 * Wrap the specified string with double quotes.
-	 */
-	public static void quoteOn(char[] string, Writer writer) {
-		wrapOn(string, QUOTE, writer);
-	}
-
-	/**
-	 * Wrap the specified string with double quotes.
-	 */
-	public static void quoteOn(char[] string, StringBuffer sb) {
-		wrapOn(string, QUOTE, sb);
-	}
-
-	/**
-	 * Wrap each of the specified strings with double quotes.
-	 */
-	public static Iterator<char[]> quoteCharArrays(Iterator<char[]> strings) {
-		return new TransformationIterator<char[], char[]>(strings) {
-			@Override
-			protected char[] transform(char[] string) {
-				return StringTools.quote(string);
-			}
-		};
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static char[] wrap(char[] string, char wrap) {
-		int len = string.length;
-		char[] result = new char[len+2];
-		result[0] = wrap;
-		System.arraycopy(string, 0, result, 1, len);
-		result[len+1] = wrap;
-		return result;
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static void wrapOn(char[] string, char wrap, Writer writer) {
-		writeCharOn(wrap, writer);
-		writeStringOn(string, writer);
-		writeCharOn(wrap, writer);
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static void wrapOn(char[] string, char wrap, StringBuffer sb) {
-		sb.append(wrap);
-		sb.append(string);
-		sb.append(wrap);
-	}
-
-	/**
-	 * Wrap each of the specified strings with the specified wrap; i.e. put a
-	 * copy of the wrap at the front and back of the resulting string.
-	 */
-	public static Iterator<char[]> wrapCharArrays(Iterator<char[]> strings, final char wrap) {
-		return new TransformationIterator<char[], char[]>(strings) {
-			@Override
-			protected char[] transform(char[] string) {
-				return StringTools.wrap(string, wrap);
-			}
-		};
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static char[] wrap(char[] string, char[] wrap) {
-		int stringLength = string.length;
-		int wrapLength = wrap.length;
-		char[] result = new char[stringLength+(2*wrapLength)];
-		System.arraycopy(wrap, 0, result, 0, wrapLength);
-		System.arraycopy(string, 0, result, wrapLength, stringLength);
-		System.arraycopy(wrap, 0, result, stringLength+wrapLength, wrapLength);
-		return result;
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static void wrapOn(char[] string, char[] wrap, Writer writer) {
-		writeStringOn(wrap, writer);
-		writeStringOn(string, writer);
-		writeStringOn(wrap, writer);
-	}
-
-	/**
-	 * Wrap the specified string with the specified wrap; i.e. put a copy of
-	 * the wrap at the front and back of the resulting string.
-	 */
-	public static void wrapOn(char[] string, char[] wrap, StringBuffer sb) {
-		sb.append(wrap);
-		sb.append(string);
-		sb.append(wrap);
-	}
-
-	/**
-	 * Wrap each of the specified strings with the specified wrap; i.e. put a
-	 * copy of the wrap at the front and back of the resulting string.
-	 */
-	public static Iterator<char[]> wrapCharArrays(Iterator<char[]> strings, final char[] wrap) {
-		return new TransformationIterator<char[], char[]>(strings) {
-			@Override
-			protected char[] transform(char[] string) {
-				return StringTools.wrap(string, wrap);
-			}
-		};
-	}
-
-
-	// ********** 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) {
-		removeFirstOccurrenceOn(string.toCharArray(), c, 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) {
-		removeFirstOccurrenceOn(string.toCharArray(), c, 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 = CollectionTools.indexOf(string, c);
-		if (index == -1) {
-			// character not found
-			return string;
-		}
-
-		int len = string.length - 1;
-		char[] result = new char[len];
-		if (index == 0) {
-			// character found at the front of string
-			System.arraycopy(string, 1, result, 0, len);
-		} else if (index == len) {
-			// character found at the end of string
-			System.arraycopy(string, 0, result, 0, len);
-		} else {
-			// character found somewhere in the middle of the string
-			System.arraycopy(string, 0, result, 0, index);
-			System.arraycopy(string, index + 1, result, index, len - 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 = CollectionTools.indexOf(string, c);
-		if (index == -1) {
-			// character not found
-			writeStringOn(string, writer);
-			return;
-		}
-
-		int len = string.length - 1;
-		if (index == 0) {
-			// character found at the front of string
-			writeStringOn(string, 1, len, writer);
-		} else if (index == len) {
-			// character found at the end of string
-			writeStringOn(string, 0, len, writer);
-		} else {
-			// character found somewhere in the middle of the string
-			writeStringOn(string, 0, index, writer);
-			writeStringOn(string, index + 1, len - 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 = CollectionTools.indexOf(string, c);
-		if (index == -1) {
-			// character not found
-			sb.append(string);
-			return;
-		}
-
-		int len = string.length - 1;
-		if (index == 0) {
-			// character found at the front of string
-			sb.append(string, 1, len);
-		} else if (index == len) {
-			// character found at the end of string
-			sb.append(string, 0, len);
-		} else {
-			// character found somewhere in the middle of the string
-			sb.append(string, 0, index);
-			sb.append(string, index + 1, len - 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) {
-		return new String(removeAllOccurrences(string.toCharArray(), c));
-	}
-
-	/**
-	 * 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) {
-		removeAllOccurrencesOn(string.toCharArray(), c, 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) {
-		removeAllOccurrencesOn(string.toCharArray(), c, 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) {
-		StringBuffer sb = new StringBuffer(string.length);
-		removeAllOccurrencesOn(string, c, sb);
-		int len = sb.length();
-		char[] result = new char[len];
-		sb.getChars(0, len, result, 0);
-		return result;
-	}
-
-	/**
-	 * 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) {
-		removeAllOccurrencesOnInternal(string, c, writer);
-	}
-
-	private static void removeAllOccurrencesOnInternal(char[] string, char c, Writer writer) {
-		for (char d : string) {
-			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) {
-		for (char d : string) {
-			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, ' ');
-	}
-
-
-	// ********** 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 commonPrefixLengthInternal(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 commonPrefixLengthInternal(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 commonPrefixLengthInternal(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[] capitalizeInternal(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 capitalizeInternal(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(capitalizeInternal(string.toCharArray()));
-	}
-
-	/**
-	 * no zero-length check or upper case check
-	 */
-	private static void capitalizeOnInternal(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 {
-			capitalizeOnInternal(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 {
-			capitalizeOnInternal(string.toCharArray(), sb);
-		}
-	}
-
-	/**
-	 * no zero-length check or upper case check
-	 */
-	private static void capitalizeOnInternal(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 {
-			capitalizeOnInternal(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 {
-			capitalizeOnInternal(string.toCharArray(), writer);
-		}
-	}
-
-	/**
-	 * no zero-length check or lower case check
-	 */
-	private static char[] uncapitalizeInternal(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 uncapitalizeInternal(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(uncapitalizeInternal(string.toCharArray()));
-	}
-
-	/**
-	 * no zero-length check or lower case check
-	 */
-	private static void uncapitalizeOnInternal(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 {
-			uncapitalizeOnInternal(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 {
-			uncapitalizeOnInternal(string.toCharArray(), sb);
-		}
-	}
-
-	/**
-	 * no zero-length check or upper case check
-	 */
-	private static void uncapitalizeOnInternal(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 {
-			uncapitalizeOnInternal(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 {
-			uncapitalizeOnInternal(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) {
-		StringBuffer sb = new StringBuffer();
-		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) {
-		StringBuffer sb = new StringBuffer();
-		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(ClassTools.toStringClassNameForObject(o));
-		sb.append('[');
-		// use System#identityHashCode(Object), since Object#hashCode() may be overridden
-		sb.append(zeroPad(Integer.toHexString(System.identityHashCode(o)).toUpperCase(), 8));
-		sb.append(']');
-	}
-
-
-	// ********** queries **********
-
-	/**
-	 * Return whether the specified string is null, empty, or contains
-	 * only whitespace characters.
-	 */
-	public static boolean stringIsEmpty(String string) {
-		if ((string == null) || (string.length() == 0)) {
-			return true;
-		}
-		return stringIsEmptyInternal(string.toCharArray());
-	}
-
-	/**
-	 * Return whether the specified string is null, empty, or contains
-	 * only whitespace characters.
-	 */
-	public static boolean stringIsEmpty(char[] string) {
-		if ((string == null) || (string.length == 0)) {
-			return true;
-		}
-		return stringIsEmptyInternal(string);
-	}
-
-	private static boolean stringIsEmptyInternal(char[] s) {
-		for (int i = s.length; i-- > 0; ) {
-			if ( ! Character.isWhitespace(s[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
-		}
-		if (s1.length != s2.length) {
-			return false;
-		}
-		for (int i = s1.length; 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) {
-		if (string.length < prefix.length) {
-			return false;
-		}
-		for (int i = prefix.length; 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));
-	}
-
-	// ********** conversions **********
-
-	/**
-	 * Convert the specified "camel case" string to an "all caps" string:
-	 * "largeProject" -> "LARGE_PROJECT"
-	 */
-	public static String convertCamelCaseToAllCaps(String camelCaseString) {
-		return new String(convertCamelCaseToAllCaps(camelCaseString.toCharArray()));
-	}
-
-	/**
-	 * 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;
-		}
-		StringBuffer sb = new StringBuffer(len * 2);
-		convertCamelCaseToAllCapsOnInternal(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) {
-		convertCamelCaseToAllCapsOn(camelCaseString.toCharArray(), 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) {
-			convertCamelCaseToAllCapsOnInternal(camelCaseString, len, sb);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOnInternal(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, Writer writer) {
-		convertCamelCaseToAllCapsOn(camelCaseString.toCharArray(), 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) {
-			convertCamelCaseToAllCapsOnInternal(camelCaseString, len, writer);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOnInternal(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) {
-		return new String(convertCamelCaseToAllCaps(camelCaseString.toCharArray(), maxLength));
-	}
-
-	/**
-	 * 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;
-		}
-		StringBuffer sb = new StringBuffer(maxLength);
-		convertCamelCaseToAllCapsOnInternal(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) {
-		convertCamelCaseToAllCapsOn(camelCaseString.toCharArray(), maxLength, 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)) {
-			convertCamelCaseToAllCapsOnInternal(camelCaseString, maxLength, len, sb);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOnInternal(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, Writer writer) {
-		convertCamelCaseToAllCapsOn(camelCaseString.toCharArray(), maxLength, 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)) {
-			convertCamelCaseToAllCapsOnInternal(camelCaseString, maxLength, len, writer);
-		}
-	}
-
-	private static void convertCamelCaseToAllCapsOnInternal(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 the specified "underscore" string to a "camel case" string:
-	 * "LARGE_PROJECT" -> "LargeProject"
-	 * Capitalize the first letter.
-	 */
-	public static String convertUnderscoresToCamelCase(String underscoreString) {
-		return new String(convertUnderscoresToCamelCase(underscoreString.toCharArray()));
-	}
-
-	/**
-	 * 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) {
-		return new String(convertUnderscoresToCamelCase(underscoreString.toCharArray(), capitalizeFirstLetter));
-	}
-
-	/**
-	 * 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;
-		}
-		StringBuffer sb = new StringBuffer(len);
-		convertUnderscoresToCamelCaseOnInternal(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) {
-		convertUnderscoresToCamelCaseOn(underscoreString.toCharArray(), capitalizeFirstLetter, 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) {
-			convertUnderscoresToCamelCaseOnInternal(underscoreString, capitalizeFirstLetter, len, sb);
-		}
-	}
-
-	private static void convertUnderscoresToCamelCaseOnInternal(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;
-				if (capitalizeFirstLetter) {
-					sb.append(Character.toUpperCase(c));
-				} else {
-					sb.append(Character.toLowerCase(c));
-				}
-			} else {
-				if (prev == '_') {
-					sb.append(Character.toUpperCase(c));
-				} else {
-					sb.append(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) {
-		convertUnderscoresToCamelCaseOn(underscoreString.toCharArray(), capitalizeFirstLetter, 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) {
-			convertUnderscoresToCamelCaseOnInternal(underscoreString, capitalizeFirstLetter, len, writer);
-		}
-	}
-
-	private static void convertUnderscoresToCamelCaseOnInternal(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;
-				if (capitalizeFirstLetter) {
-					writeCharOn(Character.toUpperCase(c), writer);
-				} else {
-					writeCharOn(Character.toLowerCase(c), writer);
-				}
-			} else {
-				if (prev == '_') {
-					writeCharOn(Character.toUpperCase(c), writer);
-				} else {
-					writeCharOn(Character.toLowerCase(c), 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;
-	}
-
-	/**
-	 * checked exceptions suck
-	 */
-	private static void writeStringOn(char[] string, Writer writer) {
-		try {
-			writer.write(string);
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	/**
-	 * checked exceptions suck
-	 */
-	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);
-		}
-	}
-
-	/**
-	 * checked exceptions suck
-	 */
-	private static void writeStringOn(String string, Writer writer) {
-		try {
-			writer.write(string);
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	/**
-	 * checked exceptions suck
-	 */
-	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/Transformer.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Transformer.java
deleted file mode 100644
index 52c0024..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/Transformer.java
+++ /dev/null
@@ -1,48 +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.internal;
-
-/**
- * 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);
-
-
-	final class Null<S1, S2> implements Transformer<S1, S2> {
-		@SuppressWarnings("unchecked")
-		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";
-		}
-	}
-
-}
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 fd637eb..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, 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;
-
-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 (CollectionTools.contains(chars, '&')) {
-			this.chars = chars;
-		} else {
-			this.chars = CollectionTools.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
-		StringBuffer sb = new StringBuffer(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) {
-		StringBuffer sb = new StringBuffer(s.length());
-		StringBuffer temp = new StringBuffer();	// 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, StringBuffer 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) && CollectionTools.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, StringBuffer sb) {
-		sb.append("&#x");
-		sb.append(Integer.toString(c, 16));
-		sb.append(';');
-	}
-
-	private void decodeTo(Reader reader, StringBuffer sb, StringBuffer temp) {
-		try {
-			this.decodeTo_(reader, sb, temp);
-		} catch (IOException ex) {
-			throw new RuntimeException(ex);
-		}
-	}
-
-	private void decodeTo_(Reader reader, StringBuffer sb, StringBuffer 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, StringBuffer sb, StringBuffer temp) throws IOException {
-		int c = reader.read();
-		this.checkChar(c, '#');
-		c = reader.read();
-		this.checkChar(c, 'x');
-
-		temp.setLength(0);
-		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");
-		}
-		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 + "'");
-		}
-	}
-
-	private void checkEndOfStream(int c) {
-		if (c == -1) {
-			throw new IllegalStateException("unexpected end of string");
-		}
-	}
-
-}
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 2874af4..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ArrayIterator.java
+++ /dev/null
@@ -1,72 +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.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * An <code>ArrayIterator</code> provides an <code>Iterator</code>
- * for an array of objects of type E.
- */
-public class ArrayIterator<E>
-	implements Iterator<E>
-{
-	final E[] array;	// private-protected
-	int nextIndex;		// private-protected
-	private final int maxIndex;
-
-	/**
-	 * 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 specified length.
-	 */
-	public ArrayIterator(E[] array, int start, int length) {
-		if ((start < 0) || (start > array.length)) {
-			throw new IllegalArgumentException("start: " + start);
-		}
-		if ((length < 0) || (length > array.length - start)) {
-			throw new IllegalArgumentException("length: " + length);
-		}
-		this.array = array;
-		this.nextIndex = start;
-		this.maxIndex = start + length;
-	}
-	
-	public boolean hasNext() {
-		return this.nextIndex < this.maxIndex;
-	}
-	
-	public E next() {
-		if (this.hasNext()) {
-			return this.array[this.nextIndex++];
-		}
-		throw new NoSuchElementException();
-	}
-	
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-	
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, CollectionTools.list(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 5b70ed4..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ArrayListIterator.java
+++ /dev/null
@@ -1,78 +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.internal.iterators;
-
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-/**
- * An <code>ArrayListIterator</code> provides a <code>ListIterator</code>
- * for an array of objects.
- * 
- * The name might be a bit confusing:
- * This is a <code>ListIterator</code> for an <code>Array</code>;
- * <em>not</em> an <code>Iterator</code> for an <code>ArrayList</code>.
- */
-public class ArrayListIterator<E>
-	extends ArrayIterator<E>
-	implements ListIterator<E>
-{
-	private final int minIndex;
-
-	/**
-	 * 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 specified length.
-	 */
-	public ArrayListIterator(E[] array, int start, int length) {
-		super(array, start, length);
-		this.minIndex = start;
-	}
-	
-	public int nextIndex() {
-		return this.nextIndex;
-	}
-	
-	public int previousIndex() {
-		return this.nextIndex - 1;
-	}
-	
-	public boolean hasPrevious() {
-		return this.nextIndex > this.minIndex;
-	}
-	
-	public E previous() {
-		if (this.hasPrevious()) {
-			return this.array[--this.nextIndex];
-		}
-		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 0f7594f..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ChainIterator.java
+++ /dev/null
@@ -1,124 +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.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>ChainIterator</code> provides a pluggable <code>Iterator</code>
- * that loops over a chain of arbitrarily linked objects. The chain
- * should be null-terminated (i.e. a call to the <code>nextLink(Object)</code>
- * 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 <code>Linker</code> or 
- * subclass <code>ChainIterator</code> and override the
- * <code>nextLink(Object)</code> 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 that the iterator does not support <code>null</code> elements.
- */
-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 linker that simply returns null, indicating the end of the chain.
-	 * Use this constructor if you want to override the
-	 * <code>nextLink(Object)</code> method instead of building
-	 * a <code>Linker</code>.
-	 */
-	public ChainIterator(E startLink) {
-		this(startLink, Linker.Null.<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.
-	 */
-	protected E nextLink(E currentLink) {
-		return this.linker.nextLink(currentLink);
-	}
-	
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.nextLink);
-	}
-	
-
-	//********** inner classes **********
-
-	/**
-	 * Used by <code>ChainIterator</code> to link
-	 * the elements in the chain.
-	 */
-	public interface Linker<T> {
-
-		/**
-		 * Return the next link in the chain.
-		 */
-		T nextLink(T currentLink);
-
-
-		final class Null<S> implements Linker<S> {
-			@SuppressWarnings("unchecked")
-			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";
-			}
-		}
-
-	}
-
-}
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 a7df5c9..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CloneIterator.java
+++ /dev/null
@@ -1,144 +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.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; otherwise you run the risk of
- * a corrupted collection.
- * <p>
- * By default, a <code>CloneIterator</code> does not support the
- * <code>#remove()</code> operation; this is because it does not have
- * access to the original collection. But if the <code>CloneIterator</code>
- * is supplied with an <code>Mutator</code> it will delegate the
- * <code>#remove()</code> operation to the <code>Mutator</code>.
- * Alternatively, a subclass can override the <code>#remove(Object)</code>
- * method.
- */
-public class CloneIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<E> nestedIterator;
-	private E current;
-	private final Mutator<E> mutator;
-	private boolean removeAllowed;
-
-
-	// ********** constructors **********
-
-	/**
-	 * Construct an iterator on a copy of the specified collection.
-	 * The <code>#remove()</code> method will not be supported,
-	 * unless a subclass overrides the <code>#remove(Object)</code>.
-	 */
-	public CloneIterator(Collection<E> c) {
-		this(c, Mutator.ReadOnly.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator on a copy of the specified collection.
-	 * Use the specified mutator to remove objects from the
-	 * original collection.
-	 */
-	@SuppressWarnings("unchecked")
-	public CloneIterator(Collection<E> c, Mutator<E> mutator) {
-		super();
-		this.nestedIterator = new ArrayIterator<E>((E[]) c.toArray());
-		this.current = null;
-		this.mutator = mutator;
-		this.removeAllowed = false;
-	}
-
-
-	// ********** Iterator implementation **********
-
-	public boolean hasNext() {
-		return this.nestedIterator.hasNext();
-	}
-
-	public E next() {
-		this.current = this.nestedIterator.next();
-		this.removeAllowed = true;
-		return this.current;
-	}
-
-	public void remove() {
-		if ( ! this.removeAllowed) {
-			throw new IllegalStateException();
-		}
-		this.remove(this.current);
-		this.removeAllowed = false;
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * Remove the specified element from the original collection.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building an <code>Mutator</code>.
-	 */
-	protected void remove(E e) {
-		this.mutator.remove(e);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this);
-	}
-
-
-	//********** member interface **********
-
-	/**
-	 * Used by <code>CloneIterator</code> to remove
-	 * elements from the original collection; since the iterator
-	 * does not have direct access to the original collection.
-	 */
-	public interface Mutator<T> {
-
-		/**
-		 * Remove the specified object from the original collection.
-		 */
-		void remove(T current);
-
-
-		final class ReadOnly<S> implements Mutator<S> {
-			@SuppressWarnings("unchecked")
-			public static final Mutator INSTANCE = new ReadOnly();
-			@SuppressWarnings("unchecked")
-			public static <R> Mutator<R> instance() {
-				return INSTANCE;
-			}
-			// ensure single instance
-			private ReadOnly() {
-				super();
-			}
-			// remove is not supported
-			public void remove(Object current) {
-				throw new UnsupportedOperationException();
-			}
-			@Override
-			public String toString() {
-				return "CloneIterator.Mutator.ReadOnly";
-			}
-		}
-
-	}
-
-}
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 82d701b..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CloneListIterator.java
+++ /dev/null
@@ -1,229 +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.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.
- * <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 <code>Mutator</code> it will delegate the
- * modification operations to the <code>Mutator</code>.
- * Alternatively, a subclass can override the modification methods.
- */
-public class CloneListIterator<E>
-	implements ListIterator<E>
-{
-	private final ListIterator<E> nestedListIterator;
-	private int cursor;
-	private String state;
-	private final Mutator<E> mutator;
-
-	private static final String UNKNOWN = "unknown";
-	private static final String PREVIOUS = "previous";
-	private static final String NEXT = "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<E> list) {
-		this(list, 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.
-	 */
-	@SuppressWarnings("unchecked")
-	public CloneListIterator(List<E> list, Mutator<E> mutator) {
-		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.nestedListIterator = CollectionTools.list((E[]) list.toArray()).listIterator();
-		this.mutator = mutator;
-		this.cursor = 0;
-		this.state = UNKNOWN;
-	}
-
-
-	// ********** ListIterator implementation **********
-
-	public boolean hasNext() {
-		return this.nestedListIterator.hasNext();
-	}
-
-	public E next() {
-		// allow the nested iterator to throw an exception before we modify the index
-		E next = this.nestedListIterator.next();
-		this.cursor++;
-		this.state = NEXT;
-		return next;
-	}
-
-	public void remove() {
-		// allow the nested iterator to throw an exception before we modify the original list
-		this.nestedListIterator.remove();
-		if (this.state == PREVIOUS) {
-			this.remove(this.cursor);
-		} else {
-			this.cursor--;
-			this.remove(this.cursor);
-		}
-	}
-
-	public int nextIndex() {
-		return this.nestedListIterator.nextIndex();
-	}
-
-	public int previousIndex() {
-		return this.nestedListIterator.previousIndex();
-	}
-
-	public boolean hasPrevious() {
-		return this.nestedListIterator.hasPrevious();
-	}
-
-	public E previous() {
-		// allow the nested iterator to throw an exception before we modify the index
-		E previous = this.nestedListIterator.previous();
-		this.cursor--;
-		this.state = PREVIOUS;
-		return previous;
-	}
-
-	public void add(E o) {
-		// allow the nested iterator to throw an exception before we modify the original list
-		this.nestedListIterator.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.nestedListIterator.set(o);
-		if (this.state == PREVIOUS) {
-			this.set(this.cursor, o);
-		} else {
-			this.set(this.cursor - 1, o);
-		}
-	}
-
-
-	// ********** internal methods **********
-
-	/**
-	 * Add the specified element to the original list.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a <code>Mutator</code>.
-	 */
-	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 <code>Mutator</code>.
-	 */
-	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 <code>Mutator</code>.
-	 */
-	protected void set(int index, E o) {
-		this.mutator.set(index, o);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this);
-	}
-
-
-	//********** member interface **********
-
-	/**
-	 * Used by <code>CloneListIterator</code> 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("unchecked")
-			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";
-			}
-		}
-
-	}
-
-}
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 40ae0cb..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CompositeIterator.java
+++ /dev/null
@@ -1,118 +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.internal.iterators;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>CompositeIterator</code> wraps a collection
- * of <code>Iterator</code>s and makes them appear to be a single
- * <code>Iterator</code>.
- */
-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;
-
-
-	/**
-	 * Construct an iterator with the specified collection of iterators.
-	 */
-	public CompositeIterator(Collection<? extends Iterator<? extends E>> iterators) {
-		this(iterators.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 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 iterator.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeIterator(Iterator<? extends E> iterator, E object) {
-		this(iterator, new SingleElementIterator<E>(object));
-	}
-
-	/**
-	 * Construct an iterator with the specified iterators.
-	 */
-	public CompositeIterator(Iterator<? extends E>... iterators) {
-		this(new ArrayIterator<Iterator<? extends E>>(iterators));
-	}
-
-	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 currentIterator with the first iterator that <code>hasNext()</code>
-	 * 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();
-		}
-	}
-
-	@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 324d3c2..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/CompositeListIterator.java
+++ /dev/null
@@ -1,194 +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.internal.iterators;
-
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>CompositeListIterator</code> wraps a list
- * of <code>ListIterator</code>s and makes them appear to be a single
- * <code>ListIterator</code>.
- */
-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 remove(Object) on nextIndex
- 	 */
-	private boolean nextReturned;
-	private ListIterator<E> lastIteratorToReturnElement;
-
-
-	/**
-	 * Construct a list iterator with the specified list of list iterators.
-	 */
-	public CompositeListIterator(List<? extends ListIterator<E>> iterators) {
-		this(iterators.listIterator());
-	}
-	
-	/**
-	 * 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 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 iterator.
-	 */
-	@SuppressWarnings("unchecked")
-	public CompositeListIterator(ListIterator<E> iterator, E object) {
-		this(iterator, new SingleElementListIterator<E>(object));
-	}
-	
-	/**
-	 * 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/EmptyEnumeration.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyEnumeration.java
deleted file mode 100644
index d1b989a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyEnumeration.java
+++ /dev/null
@@ -1,55 +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.internal.iterators;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>NullEnumeration</code> is just that.
- */
-public final class EmptyEnumeration<E>
-	implements Enumeration<E>
-{
-
-	// singleton
-	@SuppressWarnings("unchecked")
-	private static 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 StringTools.buildToStringFor(this);
-	}
-
-}
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 b560d45..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyIterator.java
+++ /dev/null
@@ -1,59 +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.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>NullIterator</code> is just that.
- */
-public final class EmptyIterator<E>
-	implements Iterator<E>
-{
-
-	// singleton
-	@SuppressWarnings("unchecked")
-	private static 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);
-	}
-
-}
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 0863b24..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EmptyListIterator.java
+++ /dev/null
@@ -1,83 +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.internal.iterators;
-
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>NullListIterator</code> is just that.
- */
-public final class EmptyListIterator<E>
-	implements ListIterator<E>
-{
-
-	// singleton
-	@SuppressWarnings("unchecked")
-	private static 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);
-	}
-	
-}
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 a75710c..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/EnumerationIterator.java
+++ /dev/null
@@ -1,50 +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.internal.iterators;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * An <code>EnumerationIterator</code> wraps an
- * <code>Enumeration</code> so that it can be treated like an
- * <code>Iterator</code>.
- */
-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 eb0c970..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/FilteringIterator.java
+++ /dev/null
@@ -1,130 +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.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.Filter;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>FilteringIterator</code> wraps another <code>Iterator</code>
- * and uses a <code>Filter</code> to determine which elements in the
- * nested iterator are to be returned by calls to <code>next()</code>.
- * <p>
- * As an alternative to building a <code>Filter</code>, a subclass
- * of <code>FilteringIterator</code> can override the
- * <code>accept(Object)</code> 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 <code>next()</code>
- * 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
- * <code>hasNext()</code> method should return <code>true</code>).
- * This also prevents a filtered iterator from supporting the optional
- * <code>remove()</code> method.
- */
-public class FilteringIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<?> nestedIterator;
-	// trust that the filter is correct - i.e. it will only accept elements of type E
-	@SuppressWarnings("unchecked")
-	private final Filter filter;
-	private E next;
-	private boolean done;
-
-
-	/**
-	 * Construct an iterator with the specified nested
-	 * iterator and a filter that simply accepts every object.
-	 * Use this constructor if you want to override the
-	 * <code>accept(Object)</code> method instead of building
-	 * a <code>Filter</code>.
-	 */
-	public FilteringIterator(Iterator<?> nestedIterator) {
-		this(nestedIterator, Filter.Null.instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified nested
-	 * iterator and filter.
-	 */
-	@SuppressWarnings("unchecked")
-	public FilteringIterator(Iterator<?> nestedIterator, Filter filter) {
-		super();
-		this.nestedIterator = nestedIterator;
-		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>.
-	 */
-	@SuppressWarnings("unchecked")
-	private void loadNext() {
-		this.done = true;
-		while (this.nestedIterator.hasNext() && (this.done)) {
-			Object o = this.nestedIterator.next();
-			if (this.accept(o)) {
-				// assume that if the object was accepted it is of type E
-				this.next = (E) o;
-				this.done = false;
-			} else {
-				this.next = null;
-				this.done = true;
-			}
-		}
-	}
-
-	/**
-	 * Return whether the <code>FilteringIterator</code>
-	 * should return the specified next element from a call to the
-	 * <code>next()</code> method.
-	 * <p>
-	 * This method can be overridden by a subclass as an
-	 * alternative to building a <code>Filter</code>.
-	 */
-	@SuppressWarnings("unchecked")
-	protected boolean accept(Object o) {
-		return this.filter.accept(o);
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.nestedIterator);
-	}
-
-}
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 1542cf1..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/GraphIterator.java
+++ /dev/null
@@ -1,223 +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.internal.iterators;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>GraphIterator</code> is similar to a <code>TreeIterator</code>
- * 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 *neighbors*), but does not provide a method for getting *all* 
- * 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 
- * <code>equals(Object)</code>), 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 *complete* graph.
- * <p>
- * To use, supply:<ul>
- * <li> either the initial node of the graph or an Iterator over an
- * initial collection of graph nodes
- * <li> a <code>MisterRogers</code> that tells who the neighbors are
- * of each node
- * (alternatively, subclass <code>GraphIterator</code>
- * and override the <code>neighbors(Object)</code> method)
- * </ul>
- * <p>
- * <code>remove()</code> is not supported.  This method, if 
- * desired, must be implemented by the user of this class.
- */
-public class GraphIterator<E>
-	implements Iterator<E>
-{
-	private final Collection<Iterator<? extends E>> iterators;
-	private final Set<E> visitedNeighbors;
-	private final MisterRogers<E> misterRogers;
-	
-	private Iterator<? extends E> currentIterator;
-	
-	private E nextNeighbor;
-	private boolean done;
-
-
-	/**
-	 * Construct an iterator with the specified collection of roots
-	 * and a mister rogers that simply returns an empty iterator
-	 * for each of the roots.
-	 * Use this constructor if you want to override the
-	 * <code>children(Object)</code> method instead of building
-	 * a <code>MisterRogers</code>.
-	 */
-	public GraphIterator(E... roots) {
-		this(new ArrayIterator<E>(roots));
-	}
-
-	/**
-	 * Construct an iterator with the specified collection of roots
-	 * and a mister rogers that simply returns an empty iterator
-	 * for each of the roots.
-	 * Use this constructor if you want to override the
-	 * <code>children(Object)</code> method instead of building
-	 * a <code>MisterRogers</code>.
-	 */
-	public GraphIterator(Iterator<? extends E> roots) {
-		this(roots, MisterRogers.Null.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified root
-	 * and a mister rogers that simply returns an empty iterator
-	 * for the root.
-	 * Use this constructor if you want to override the
-	 * <code>children(Object)</code> method instead of building
-	 * a <code>MisterRogers</code>.
-	 */
-	public GraphIterator(E root) {
-		this(root, MisterRogers.Null.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified root
-	 * and mister rogers.
-	 */
-	public GraphIterator(E root, MisterRogers<E> misterRogers) {
-		this(new SingleElementIterator<E>(root), misterRogers);
-	}
-
-	/**
-	 * Construct an iterator with the specified roots
-	 * and mister rogers.
-	 */
-	public GraphIterator(Iterator<? extends E> roots, MisterRogers<E> misterRogers) {
-		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.misterRogers = misterRogers;
-		this.visitedNeighbors = new HashSet<E>();
-		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 '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 <code>GraphIterator</code> 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("unchecked")
-			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";
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/IteratorEnumeration.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/IteratorEnumeration.java
deleted file mode 100644
index 55a4f08..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/IteratorEnumeration.java
+++ /dev/null
@@ -1,47 +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.internal.iterators;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * An <code>IteratorEnumeration</code> wraps an
- * <code>Iterator</code> so that it can be treated like an
- * <code>Enumeration</code>.
- */
-public class IteratorEnumeration<E>
-	implements Enumeration<E>
-{
-	private final Iterator<? extends E> 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/iterators/PeekableIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/PeekableIterator.java
deleted file mode 100644
index 316aedc..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/PeekableIterator.java
+++ /dev/null
@@ -1,100 +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.internal.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>PeekableIterator</code> wraps another <code>Iterator</code>
- * and allows a <code>peek()</code> at the next element to be 
- * returned by <code>next()</code>.
- * <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 <code>next()</code>
- * method is invoked. This is because the "next" element must be
- * pre-loaded for the <code>peek()</code> method.
- * This also prevents a peekable iterator from supporting the optional
- * <code>remove()</code> method.
- */
-
-public class PeekableIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<? extends E> nestedIterator;
-	private E next;
-	private boolean done;
-
-
-	/**
-	 * Construct a peekable iterator that wraps the specified nested
-	 * iterator.
-	 */
-	public PeekableIterator(Iterator<? extends E> nestedIterator) {
-		super();
-		this.nestedIterator = nestedIterator;
-		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
-	 * <code>next()</code> 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 <code>remove()</code>
-	 * method.
-	 */
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * Load next with the next entry from the nested
-	 * iterator. If there are none, next is set to <code>END</code>.
-	 */
-	private void loadNext() {
-		if (this.nestedIterator.hasNext()) {
-			this.next = this.nestedIterator.next();
-		} else {
-			this.next = null;
-			this.done = true;
-		}
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.nestedIterator);
-	}
-
-}
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 df0a513..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyIterator.java
+++ /dev/null
@@ -1,61 +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.internal.iterators;
-
-import java.util.Collection;
-import java.util.Iterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>ReadOnlyIterator</code> wraps another <code>Iterator</code>
- * and removes support for #remove().
- */
-public class ReadOnlyIterator<E>
-	implements Iterator<E>
-{
-	private final Iterator<? extends E> nestedIterator;
-
-	/**
-	 * Construct an iterator on the specified collection that
-	 * disallows removes.
-	 */
-	public ReadOnlyIterator(Collection<? extends E> c) {
-		this(c.iterator());
-	}
-
-	/**
-	 * Construct an iterator with the specified nested iterator
-	 * and disallow removes.
-	 */
-	public ReadOnlyIterator(Iterator<? extends E> nestedIterator) {
-		super();
-		this.nestedIterator = nestedIterator;
-	}
-
-	public boolean hasNext() {
-		// delegate to the nested iterator
-		return this.nestedIterator.hasNext();
-	}
-
-	public E next() {
-		// delegate to the nested iterator
-		return this.nestedIterator.next();
-	}
-
-	public void remove() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String toString() {
-		return StringTools.buildToStringFor(this, this.nestedIterator);
-	}
-	
-}
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 c3b2591..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ReadOnlyListIterator.java
+++ /dev/null
@@ -1,93 +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.internal.iterators;
-
-import java.util.List;
-import java.util.ListIterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- * A <code>ReadOnlyListIterator</code> wraps another
- * <code>ListIterator</code> and removes support for:
- * 	#remove()
- * 	#set(Object)
- * 	#add(Object)
- */
-public class ReadOnlyListIterator<E>
-	implements ListIterator<E>
-{
-	private final ListIterator<? extends E> nestedListIterator;
-
-
-	/**
-	 * Construct an iterator on the specified list that
-	 * disallows removes, sets, and adds.
-	 */
-	public ReadOnlyListIterator(List<? extends E> list) {
-		this(list.listIterator());
-	}
-
-	/**
-	 * Construct an iterator on the specified list iterator that
-	 * disallows removes, sets, and adds.
-	 */
-	public ReadOnlyListIterator(ListIterator<? extends E> nestedListIterator) {
-		super();
-		this.nestedListIterator = nestedListIterator;
-	}
-
-	public boolean hasNext() {
-		// delegate to the nested iterator
-		return this.nestedListIterator.hasNext();
-	}
-
-	public E next() {
-		// delegate to the nested iterator
-		return this.nestedListIterator.next();
-	}
-
-	public boolean hasPrevious() {
-		// delegate to the nested iterator
-		return this.nestedListIterator.hasPrevious();
-	}
-
-	public E previous() {
-		// delegate to the nested iterator
-		return this.nestedListIterator.previous();
-	}
-
-	public int nextIndex() {
-		// delegate to the nested iterator
-		return this.nestedListIterator.nextIndex();
-	}
-
-	public int previousIndex() {
-		// delegate to the nested iterator
-		return this.nestedListIterator.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.nestedListIterator);
-	}
-	
-}
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 a8da844..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/ResultSetIterator.java
+++ /dev/null
@@ -1,154 +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.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 a <code>ResultSet</code>
- * and transforms its rows for client consumption. Subclasses can override
- * <code>#buildNext(ResultSet)</code> to build the expected object from
- * the current row of the result set.
- * <p>
- * To use, supply:<ul>
- * <li> a <code>ResultSet</code>
- * <li> an <code>Adapter</code> that converts a row in the <code>ResultSet</code>
- * into the desired object
- * (alternatively, subclass <code>ResultSetIterator</code>
- * and override the <code>buildNext(ResultSet)</code> method)
- * </ul>
- * <p>
- */
-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 <code>SQLException</code>s will
-	 * be caught and wrapped in a <code>RuntimeException</code>.
-	 */
-	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 <code>ResultSetIterator</code> to convert a
-	 * <code>ResultSet</code>'s current row into the next object
-	 * to be returned by the <code>Iterator</code>.
-	 */
-	public interface Adapter<T> {
-
-		/**
-		 * Return an object corresponding to the result set's
-		 * "current" row. Any <code>SQLException</code>s will
-		 * be caught and wrapped in a <code>RuntimeException</code>.
-		 * @see java.sql.ResultSet
-		 */
-		T buildNext(ResultSet rs) throws SQLException;
-
-
-		final class Default<S> implements Adapter<S> {
-			@SuppressWarnings("unchecked")
-			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";
-			}
-		}
-
-	}
-
-}
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 75fd9d8..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SingleElementIterator.java
+++ /dev/null
@@ -1,63 +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.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 <code>next()</code>, at
- * which point it will return <code>false</code> to any subsequent
- * call to <code>hasNext()</code>.
- * <p>
- * A <code>SingleElementIterator</code> is equivalent to the
- * <code>Iterator</code> returned by:
- * 	<code>java.util.Collections.singleton(element).iterator()</code>
- */
-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 799cb72..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/SingleElementListIterator.java
+++ /dev/null
@@ -1,94 +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.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 <code>next()</code>, at
- * which point it will return <code>false</code> to any subsequent
- * call to <code>hasNext()</code>. Likewise, it will return <code>false</code>
- * to a call to <code>hasPrevious()</code> until a call to <code>next()</code>,
- * at which point a call to <code>previous()</code> will return the
- * single element.
- * <p>
- * A <code>SingleElementListIterator</code> is equivalent to the
- * <code>Iterator</code> returned by:
- * 	<code>java.util.Collections.singletonList(element).listIterator()</code>
- */
-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/TransformationIterator.java b/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TransformationIterator.java
deleted file mode 100644
index cffb59a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TransformationIterator.java
+++ /dev/null
@@ -1,80 +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.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 <code>Iterator</code>
- * and transforms its results for client consumption. To use, supply a 
- * <code>Transformer</code> or subclass <code>TransformationIterator</code>
- * and override the <code>transform(Object)</code> method.
- * Objects of type E1 are transformed into objects of type E2;
- * i.e. the iterator returns objects of type E2.
- */
-public class TransformationIterator<E1, E2>
-	implements Iterator<E2>
-{
-	private final Iterator<? extends E1> nestedIterator;
-	private final Transformer<E1, ? extends E2> transformer;
-
-
-	/**
-	 * Construct an iterator with the specified nested iterator
-	 * and a transformer that simply returns the object, unchanged.
-	 * Use this constructor if you want to override the
-	 * <code>transform(Object)</code> method instead of building
-	 * a <code>Transformer</code>.
-	 */
-	public TransformationIterator(Iterator<? extends E1> nestedIterator) {
-		this(nestedIterator, Transformer.Null.<E1, E2>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified nested iterator
-	 * and transformer.
-	 */
-	public TransformationIterator(Iterator<? extends E1> nestedIterator, Transformer<E1, ? extends E2> transformer) {
-		super();
-		this.nestedIterator = nestedIterator;
-		this.transformer = transformer;
-	}
-
-	public boolean hasNext() {
-		// delegate to the nested iterator
-		return this.nestedIterator.hasNext();
-	}
-
-	public E2 next() {
-		// transform the object returned by the nested iterator before returning it
-		return this.transform(this.nestedIterator.next());
-	}
-
-	public void remove() {
-		// delegate to the nested iterator
-		this.nestedIterator.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.nestedIterator);
-	}
-
-}
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 329f3ff..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TransformationListIterator.java
+++ /dev/null
@@ -1,108 +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.internal.iterators;
-
-import java.util.ListIterator;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-
-/**
- * A <code>TransformationListIterator</code> wraps another <code>ListIterator</code>
- * and transforms it results for client consumption. To use, supply a 
- * <code>Transformer</code> or subclass <code>TransformationIterator</code>
- * and override the <code>transform(Object)</code> method.
- * 
- * The methods <code>set(Object)</code> and <code>add(Object)</code>
- * are left unsupported in this class.
- */
-public class TransformationListIterator<E1, E2>
-	implements ListIterator<E2>
-{
-	private final ListIterator<? extends E1> nestedIterator;
-	private final Transformer<E1, ? extends E2> transformer;
-
-
-	/**
-	 * Construct an iterator with the specified nested iterator
-	 * and a transformer that simply returns the object, unchanged.
-	 * Use this constructor if you want to override the
-	 * <code>transform(Object)</code> method instead of building
-	 * a <code>Transformer</code>.
-	 */
-	public TransformationListIterator(ListIterator<? extends E1> nestedIterator) {
-		this(nestedIterator, Transformer.Null.<E1, E2>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified nested iterator
-	 * and transformer.
-	 */
-	public TransformationListIterator(ListIterator<? extends E1> nestedIterator, Transformer<E1, ? extends E2> transformer) {
-		super();
-		this.nestedIterator = nestedIterator;
-		this.transformer = transformer;
-	}
-
-	public boolean hasNext() {
-		// delegate to the nested iterator
-		return this.nestedIterator.hasNext();
-	}
-
-	public E2 next() {
-		// transform the object returned by the nested iterator before returning it
-		return this.transform(this.nestedIterator.next());
-	}
-
-	public int nextIndex() {
-		// delegate to the nested iterator
-		return this.nestedIterator.nextIndex();
-	}
-
-	public boolean hasPrevious() {
-		// delegate to the nested iterator
-		return this.nestedIterator.hasPrevious();
-	}
-
-	public E2 previous() {
-		// transform the object returned by the nested iterator before returning it
-		return this.transform(this.nestedIterator.previous());
-	}
-
-	public int previousIndex() {
-		// delegate to the nested iterator
-		return this.nestedIterator.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.nestedIterator.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.nestedIterator);
-	}
-
-}
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 432c54a..0000000
--- a/jpa/plugins/org.eclipse.jpt.utility/src/org/eclipse/jpt/utility/internal/iterators/TreeIterator.java
+++ /dev/null
@@ -1,175 +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.internal.iterators;
-
-import java.util.Collection;
-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 <code>Iterator</code> over the set of roots
- * <li> a <code>Midwife</code> that delivers the children
- * of each child
- * (alternatively, subclass <code>TreeIterator</code>
- * and override the <code>children(Object)</code> method)
- * </ul>
- * <p>
- */
-public class TreeIterator<E>
-	implements Iterator<E>
-{
-	private final Collection<Iterator<? extends E>> iterators;
-	private final Midwife<E> midwife;
-	private Iterator<? extends E> currentIterator;
-
-
-	/**
-	 * Construct an iterator with the specified collection of roots
-	 * and a midwife that simply returns an empty iterator
-	 * for each of the roots.
-	 * Use this constructor if you want to override the
-	 * <code>children(Object)</code> method instead of building
-	 * a <code>Midwife</code>.
-	 */
-	public TreeIterator(Iterator<? extends E> roots) {
-		this(roots, Midwife.Null.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified root
-	 * and a midwife that simply returns an empty iterator
-	 * for the root.
-	 * Use this constructor if you want to override the
-	 * <code>children(Object)</code> method instead of building
-	 * a <code>Midwife</code>.
-	 */
-	public TreeIterator(E root) {
-		this(root, Midwife.Null.<E>instance());
-	}
-
-	/**
-	 * Construct an iterator with the specified root
-	 * and midwife.
-	 */
-	public TreeIterator(E root, Midwife<E> midwife) {
-		this(new SingleElementIterator<E>(root), midwife);
-	}
-
-	/**
-	 * Construct an iterator 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.
-	 */
-	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 <code>TreeIterator</code> 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("unchecked")
-			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";
-			}
-		}
-
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jdtutility/JDTToolsTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jdtutility/JDTToolsTests.java
index 5176595..1e22611 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jdtutility/JDTToolsTests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jdtutility/JDTToolsTests.java
@@ -10,6 +10,7 @@
 package org.eclipse.jpt.core.tests.internal.jdtutility;
 
 import org.eclipse.jdt.core.Signature;
+import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jpt.core.internal.jdtutility.ConversionDeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationElementAdapter;
@@ -118,7 +119,7 @@
 		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forStrings(daa, "foo");
 		FieldAttribute field = this.idField();
 
-		String actual = JDTTools.resolveEnum(this.jdtType().getCompilationUnit(), field.annotationElementExpression(daea));
+		String actual = JDTTools.resolveEnum((Name) field.annotationElementExpression(daea));
 		assertEquals("enums.TestEnum.BAZ", actual);
 	}
 
@@ -131,7 +132,7 @@
 		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forStrings(daa, "foo");
 		FieldAttribute field = this.idField();
 
-		String actual = JDTTools.resolveEnum(this.jdtType().getCompilationUnit(), field.annotationElementExpression(daea));
+		String actual = JDTTools.resolveEnum((Name) field.annotationElementExpression(daea));
 		assertEquals("enums.TestEnum.BAZ", actual);
 	}
 
@@ -144,7 +145,7 @@
 		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forStrings(daa, "foo");
 		FieldAttribute field = this.idField();
 
-		String actual = JDTTools.resolveEnum(this.jdtType().getCompilationUnit(), field.annotationElementExpression(daea));
+		String actual = JDTTools.resolveEnum((Name) field.annotationElementExpression(daea));
 		assertEquals("enums.TestEnum.BAZ", actual);
 	}
 
@@ -157,7 +158,7 @@
 		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forStrings(daa, "foo");
 		FieldAttribute field = this.idField();
 
-		String actual = JDTTools.resolveEnum(this.jdtType().getCompilationUnit(), field.annotationElementExpression(daea));
+		String actual = JDTTools.resolveEnum((Name) field.annotationElementExpression(daea));
 		assertEquals("enums.TestEnum.BAZ", actual);
 	}
 
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jdtutility/MemberAnnotationElementAdapterTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jdtutility/MemberAnnotationElementAdapterTests.java
index a13cf24..b07c314 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jdtutility/MemberAnnotationElementAdapterTests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jdtutility/MemberAnnotationElementAdapterTests.java
@@ -10,14 +10,11 @@
 package org.eclipse.jpt.core.tests.internal.jdtutility;
 
 import java.util.Arrays;
-import org.eclipse.jdt.core.dom.ArrayInitializer;
-import org.eclipse.jdt.core.dom.BooleanLiteral;
-import org.eclipse.jdt.core.dom.CharacterLiteral;
-import org.eclipse.jdt.core.dom.NumberLiteral;
-import org.eclipse.jdt.core.dom.TypeLiteral;
+
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.jdtutility.ASTNodeTextRange;
 import org.eclipse.jpt.core.internal.jdtutility.AnnotationElementAdapter;
+import org.eclipse.jpt.core.internal.jdtutility.AnnotationStringArrayExpressionConverter;
 import org.eclipse.jpt.core.internal.jdtutility.BooleanStringExpressionConverter;
 import org.eclipse.jpt.core.internal.jdtutility.CharacterStringExpressionConverter;
 import org.eclipse.jpt.core.internal.jdtutility.ConversionDeclarationAnnotationElementAdapter;
@@ -25,6 +22,7 @@
 import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.EnumArrayDeclarationAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.EnumDeclarationAnnotationElementAdapter;
+import org.eclipse.jpt.core.internal.jdtutility.ExpressionConverter;
 import org.eclipse.jpt.core.internal.jdtutility.MemberAnnotationElementAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.NestedDeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.NestedIndexedDeclarationAnnotationAdapter;
@@ -32,7 +30,7 @@
 import org.eclipse.jpt.core.internal.jdtutility.PrimitiveTypeStringExpressionConverter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleDeclarationAnnotationAdapter;
 import org.eclipse.jpt.core.internal.jdtutility.SimpleTypeStringExpressionConverter;
-import org.eclipse.jpt.core.internal.jdtutility.StringArrayExpressionConverter;
+import org.eclipse.jpt.core.internal.jdtutility.StringExpressionConverter;
 
 public class MemberAnnotationElementAdapterTests extends AnnotationTestCase {
 
@@ -61,7 +59,7 @@
 		this.createAnnotationAndMembers("Foo", "int bar();");
 		this.createTestType("@annot.Foo(bar=48)");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, NumberLiteral>(daa, "bar", NumberStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", NumberStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("48", aea.getValue());
 	}
@@ -70,7 +68,7 @@
 		this.createAnnotationAndMembers("Foo", "char bar();");
 		this.createTestType("@annot.Foo(bar='c')");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, CharacterLiteral>(daa, "bar", CharacterStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", CharacterStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("c", aea.getValue());
 	}
@@ -79,7 +77,7 @@
 		this.createAnnotationAndMembers("Foo", "boolean bar();");
 		this.createTestType("@annot.Foo(bar=false)");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(daa, "bar", BooleanStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", BooleanStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("false", aea.getValue());
 	}
@@ -92,7 +90,7 @@
 		DeclarationAnnotationAdapter daa1 = new SimpleDeclarationAnnotationAdapter("annot.Foo");
 		DeclarationAnnotationAdapter daa2 = new NestedDeclarationAnnotationAdapter(daa1, "value", "annot.Bar");
 		DeclarationAnnotationAdapter daa3 = new NestedDeclarationAnnotationAdapter(daa2, "jimmy", "annot.Baz");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(daa3, "fred", BooleanStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa3, "fred", BooleanStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("false", aea.getValue());
 	}
@@ -101,7 +99,7 @@
 		this.createAnnotationAndMembers("Foo", "boolean value();");
 		this.createTestType("@annot.Foo(false)");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(daa, BooleanStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, BooleanStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("false", aea.getValue());
 	}
@@ -137,6 +135,197 @@
 		assertNull(aea.getValue());
 	}
 
+	public void testGetValueStringConcatenation() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String bar();");
+		this.createTestType("@annot.Foo(bar=\"xxx\" + \"yyy\" + \"zzz\")");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forStrings(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("xxxyyyzzz", aea.getValue());
+	}
+
+	public void testGetValueStringConstant() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String bar();");
+		// just a bit hacky:
+		this.createTestType("private static final String FOO_BAR = \"xxx\"; @annot.Foo(bar=FOO_BAR + \"yyy\" + \"zzz\")");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forStrings(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("xxxyyyzzz", aea.getValue());
+	}
+
+	public void testGetValueNumberArithmetic() throws Exception {
+		this.createAnnotationAndMembers("Foo", "int bar();");
+		this.createTestType("@annot.Foo(bar=47 - 7 + 2 * 1 / 1)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forNumbers(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("42", aea.getValue());
+	}
+
+	public void testGetValueNumberShift() throws Exception {
+		this.createAnnotationAndMembers("Foo", "int bar();");
+		this.createTestType("@annot.Foo(bar=2 << 2)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forNumbers(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("8", aea.getValue());
+	}
+
+	public void testGetValueNumberConstant() throws Exception {
+		this.createAnnotationAndMembers("Foo", "int bar();");
+		// just a bit hacky:
+		this.createTestType("private static final int FOO_BAR = 77; @annot.Foo(bar=FOO_BAR)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forNumbers(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("77", aea.getValue());
+	}
+
+	public void testGetValueCharacterConstant() throws Exception {
+		this.createAnnotationAndMembers("Foo", "char bar();");
+		// just a bit hacky:
+		this.createTestType("private static final char FOO_BAR = 'Q'; @annot.Foo(bar=FOO_BAR)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forCharacters(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("Q", aea.getValue());
+	}
+
+	public void testGetValueCharacterCast() throws Exception {
+		this.createAnnotationAndMembers("Foo", "char bar();");
+		this.createTestType("@annot.Foo(bar=(char) 0x41)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forCharacters(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("A", aea.getValue());
+	}
+
+	public void testGetValueBooleanOperator1() throws Exception {
+		this.createAnnotationAndMembers("Foo", "boolean bar();");
+		this.createTestType("@annot.Foo(bar=7 > 2)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forBooleans(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("true", aea.getValue());
+	}
+
+	public void testGetValueBooleanOperator2() throws Exception {
+		this.createAnnotationAndMembers("Foo", "boolean bar();");
+		this.createTestType("@annot.Foo(bar=7 == 2)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forBooleans(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("false", aea.getValue());
+	}
+
+	public void testGetValueBooleanOperator3() throws Exception {
+		this.createAnnotationAndMembers("Foo", "boolean bar();");
+		this.createTestType("@annot.Foo(bar=(7 != 2) && false)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forBooleans(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("false", aea.getValue());
+	}
+
+	public void testGetValueBooleanOperator4() throws Exception {
+		this.createAnnotationAndMembers("Foo", "boolean bar();");
+		this.createTestType("@annot.Foo(bar=(7 != 2) ? false : true)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forBooleans(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertEquals("false", aea.getValue());
+	}
+
+	public void testGetValueInvalidValue1() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String bar();");
+		this.createTestType("@annot.Foo(bar=77)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forStrings(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertNull(aea.getValue());
+	}
+
+	public void testGetValueInvalidValue2() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String bar();");
+		this.createTestType("@annot.Foo(bar=bazzzz)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forStrings(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertNull(aea.getValue());
+	}
+
+	public void testGetValueInvalidValue3() throws Exception {
+		this.createAnnotationAndMembers("Foo", "boolean bar();");
+		this.createTestType("@annot.Foo(bar=bazzzz)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forBooleans(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertNull(aea.getValue());
+	}
+
+	public void testGetValueInvalidValue4() throws Exception {
+		this.createAnnotationAndMembers("Foo", "char bar();");
+		this.createTestType("@annot.Foo(bar=\"bazzzz\")");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = ConversionDeclarationAnnotationElementAdapter.forCharacters(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertNull(aea.getValue());
+	}
+
+	public void testGetValueInvalidValue5() throws Exception {
+		this.createAnnotationAndMembers("Foo", "Class bar();");
+		this.createTestType("@annot.Foo(bar=\"java.lang.Object\")");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", SimpleTypeStringExpressionConverter.instance());
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertNull(aea.getValue());
+	}
+
+	public void testGetValueInvalidValue6() throws Exception {
+		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
+		this.createAnnotationAndMembers("Foo", "enums.TestEnum bar();");
+		this.createTestType("@annot.Foo(bar=enums.TestEnum.class)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String> daea = new EnumDeclarationAnnotationElementAdapter(daa, "bar");
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertNull(aea.getValue());
+	}
+
+	public void testGetValueInvalidValue7() throws Exception {
+		this.createAnnotationAndMembers("Baz", "boolean fred();");
+		this.createAnnotationAndMembers("Bar", "annot.Baz jimmy();");
+		this.createAnnotationAndMembers("Foo", "annot.Bar value();");
+		String value = "\"false\"";
+		String element = "fred=" + value;
+		String annotation = "@annot.Foo(@annot.Bar(jimmy=@annot.Baz(" + element + ")))";
+		this.createTestType(annotation);
+		DeclarationAnnotationAdapter daa1 = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationAdapter daa2 = new NestedDeclarationAnnotationAdapter(daa1, "value", "annot.Bar");
+		DeclarationAnnotationAdapter daa3 = new NestedDeclarationAnnotationAdapter(daa2, "jimmy", "annot.Baz");
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa3, "fred", BooleanStringExpressionConverter.instance());
+		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
+		assertNull(aea.getValue());
+	}
+
+	public void testGetValueInvalidValue8() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String[] bar();");
+		this.createTestType("@annot.Foo(bar={true, false})");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		assertTrue(Arrays.equals(new String[] {null, null}, aea.getValue()));
+	}
+
+	public void testGetValueInvalidValue9() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String[] bar();");
+		this.createTestType("@annot.Foo(bar=77)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		assertTrue(Arrays.equals(new String[] {null}, aea.getValue()));
+	}
+
 	public void testASTNode1() throws Exception {
 		this.createAnnotationAndMembers("Foo", "String bar();");
 		String value = "\"xxx\"";
@@ -164,7 +353,7 @@
 		DeclarationAnnotationAdapter daa1 = new SimpleDeclarationAnnotationAdapter("annot.Foo");
 		DeclarationAnnotationAdapter daa2 = new NestedDeclarationAnnotationAdapter(daa1, "value", "annot.Bar");
 		DeclarationAnnotationAdapter daa3 = new NestedDeclarationAnnotationAdapter(daa2, "jimmy", "annot.Baz");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(daa3, "fred", BooleanStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa3, "fred", BooleanStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("false", aea.getValue());
 		ITextRange textRange = new ASTNodeTextRange(aea.astNode());
@@ -235,7 +424,7 @@
 		DeclarationAnnotationAdapter daa1 = new SimpleDeclarationAnnotationAdapter("annot.Foo");
 		DeclarationAnnotationAdapter daa2 = new NestedDeclarationAnnotationAdapter(daa1, "value", "annot.Bar");
 		DeclarationAnnotationAdapter daa3 = new NestedDeclarationAnnotationAdapter(daa2, "jimmy", "annot.Baz");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(daa3, "fred", BooleanStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa3, "fred", BooleanStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 
 		aea.setValue(null);
@@ -254,7 +443,7 @@
 		DeclarationAnnotationAdapter daa1 = new SimpleDeclarationAnnotationAdapter("annot.Foo");
 		DeclarationAnnotationAdapter daa2 = new NestedDeclarationAnnotationAdapter(daa1, "value", "annot.Bar", false);
 		DeclarationAnnotationAdapter daa3 = new NestedDeclarationAnnotationAdapter(daa2, "jimmy", "annot.Baz", false);
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(daa3, "fred", BooleanStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa3, "fred", BooleanStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 
 		aea.setValue(null);
@@ -283,7 +472,7 @@
 		DeclarationAnnotationAdapter daa1 = new SimpleDeclarationAnnotationAdapter("annot.Foo");
 		DeclarationAnnotationAdapter daa2 = new NestedDeclarationAnnotationAdapter(daa1, "value", "annot.Bar");
 		DeclarationAnnotationAdapter daa3 = new NestedDeclarationAnnotationAdapter(daa2, "jimmy", "annot.Baz");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(daa3, "fred", BooleanStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa3, "fred", BooleanStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 
 		aea.setValue("true");
@@ -299,7 +488,7 @@
 		DeclarationAnnotationAdapter daa1 = new SimpleDeclarationAnnotationAdapter("annot.Foo");
 		DeclarationAnnotationAdapter daa2 = new NestedDeclarationAnnotationAdapter(daa1, "value", "annot.Bar");
 		DeclarationAnnotationAdapter daa3 = new NestedDeclarationAnnotationAdapter(daa2, "jimmy", "annot.Baz");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, BooleanLiteral>(daa3, "fred", BooleanStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa3, "fred", BooleanStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 
 		aea.setValue("true");
@@ -371,7 +560,7 @@
 		DeclarationAnnotationAdapter daa1 = new SimpleDeclarationAnnotationAdapter("annot.Foo");
 		DeclarationAnnotationAdapter daa2 = new NestedDeclarationAnnotationAdapter(daa1, "value", "annot.Bar");
 		DeclarationAnnotationAdapter daa3 = new NestedIndexedDeclarationAnnotationAdapter(daa2, "jimmy", 2, "annot.Baz");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, NumberLiteral>(daa3, "fred", NumberStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa3, "fred", NumberStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 
 		assertEquals("2", aea.getValue());
@@ -410,7 +599,7 @@
 		this.createAnnotationAndMembers("Foo", "Class bar();");
 		this.createTestType("@annot.Foo(bar=java.lang.Object.class)");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(daa, "bar", SimpleTypeStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", SimpleTypeStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("java.lang.Object", aea.getValue());
 	}
@@ -419,7 +608,7 @@
 		this.createAnnotationAndMembers("Foo", "Class bar();");
 		this.createTestType();
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(daa, "bar", SimpleTypeStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", SimpleTypeStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		aea.setValue("java.lang.Object");
 		this.assertSourceContains("@Foo(bar=java.lang.Object.class)");
@@ -429,7 +618,7 @@
 		this.createAnnotationAndMembers("Foo", "Class bar();");
 		this.createTestType("@annot.Foo(bar=int.class)");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(daa, "bar", SimpleTypeStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", SimpleTypeStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertNull(aea.getValue());
 	}
@@ -438,7 +627,7 @@
 		this.createAnnotationAndMembers("Foo", "Class bar();");
 		this.createTestType("@annot.Foo(bar=java.util.Map.Entry.class)");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(daa, "bar", SimpleTypeStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", SimpleTypeStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("java.util.Map.Entry", aea.getValue());
 	}
@@ -447,7 +636,7 @@
 		this.createAnnotationAndMembers("Foo", "Class bar();");
 		this.createTestType("@annot.Foo(bar=int.class)");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(daa, "bar", PrimitiveTypeStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", PrimitiveTypeStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("int", aea.getValue());
 	}
@@ -456,7 +645,7 @@
 		this.createAnnotationAndMembers("Foo", "Class bar();");
 		this.createTestType();
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(daa, "bar", PrimitiveTypeStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", PrimitiveTypeStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		aea.setValue("int");
 		this.assertSourceContains("@Foo(bar=int.class)");
@@ -466,7 +655,7 @@
 		this.createAnnotationAndMembers("Foo", "Class bar();");
 		this.createTestType("@annot.Foo(bar=java.lang.Object.class)");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(daa, "bar", PrimitiveTypeStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", PrimitiveTypeStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertNull(aea.getValue());
 	}
@@ -475,7 +664,7 @@
 		this.createAnnotationAndMembers("Foo", "Class bar();");
 		this.createTestType("@annot.Foo(bar=void.class)");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String, TypeLiteral>(daa, "bar", PrimitiveTypeStringExpressionConverter.instance());
+		DeclarationAnnotationElementAdapter<String> daea = new ConversionDeclarationAnnotationElementAdapter<String>(daa, "bar", PrimitiveTypeStringExpressionConverter.instance());
 		AnnotationElementAdapter<String> aea = new MemberAnnotationElementAdapter<String>(this.idField(), daea);
 		assertEquals("void", aea.getValue());
 	}
@@ -551,18 +740,45 @@
 		this.createAnnotationAndMembers("Foo", "String[] bar();");
 		this.createTestType("@annot.Foo(bar={\"string0\", \"string1\"})");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[], ArrayInitializer>(daa, "bar", StringArrayExpressionConverter.forStringLiterals());
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
 		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
 		assertTrue(Arrays.equals(new String[] {"string0", "string1"}, aea.getValue()));
 	}
 
+	public void testGetValueStringArrayConcatenation() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String[] bar();");
+		this.createTestType("@annot.Foo(bar={\"stri\" + \"ng0\", \"s\" + \"tring1\"})");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		assertTrue(Arrays.equals(new String[] {"string0", "string1"}, aea.getValue()));
+	}
+
+	public void testGetValueStringArrayEmpty() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String[] bar();");
+		this.createTestType("@annot.Foo(bar={})");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		assertTrue(Arrays.equals(new String[0], aea.getValue()));
+	}
+
+	public void testGetValueStringArraySingleElement() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String[] bar();");
+		this.createTestType("@annot.Foo(bar=\"string0\")");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		assertTrue(Arrays.equals(new String[] {"string0"}, aea.getValue()));
+	}
+
 	public void testGetValueNullStringArray() throws Exception {
 		this.createAnnotationAndMembers("Foo", "String[] bar();");
 		this.createTestType("@annot.Foo()");
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[], ArrayInitializer>(daa, "bar", StringArrayExpressionConverter.forStringLiterals());
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
 		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
-		assertNull(aea.getValue());
+		assertTrue(Arrays.equals(new String[0], aea.getValue()));
 	}
 
 	public void testSetValueStringArray() throws Exception {
@@ -571,12 +787,49 @@
 		this.createTestType();
 		this.assertSourceDoesNotContain(annotation);
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
-		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[], ArrayInitializer>(daa, "bar", StringArrayExpressionConverter.forStringLiterals());
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
 		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
 		aea.setValue(new String[] {"string0", "string1"});
 		this.assertSourceContains(annotation);
 	}
 
+	public void testSetValueStringArrayEmptyRemove() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String[] bar();");
+		String annotation = "@Foo";
+		this.createTestType();
+		this.assertSourceDoesNotContain(annotation);
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		aea.setValue(new String[0]);
+		this.assertSourceDoesNotContain(annotation);
+	}
+
+	public void testSetValueStringArrayEmpty() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String[] bar();");
+		String annotation = "@Foo(bar={})";
+		this.createTestType();
+		this.assertSourceDoesNotContain(annotation);
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		ExpressionConverter<String[]> expressionConverter = new AnnotationStringArrayExpressionConverter(StringExpressionConverter.instance(), false);
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", expressionConverter);
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		aea.setValue(new String[0]);
+		this.assertSourceContains(annotation);
+	}
+
+	public void testSetValueStringArraySingleElement() throws Exception {
+		this.createAnnotationAndMembers("Foo", "String[] bar();");
+		String annotation = "@Foo(bar=\"string0\")";
+		this.createTestType();
+		this.assertSourceDoesNotContain(annotation);
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new ConversionDeclarationAnnotationElementAdapter<String[]>(daa, "bar", AnnotationStringArrayExpressionConverter.forStrings());
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		aea.setValue(new String[] {"string0"});
+		this.assertSourceContains(annotation);
+	}
+
 	public void testGetValueEnumArray() throws Exception {
 		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
 		this.createAnnotationAndMembers("Foo", "enums.TestEnum[] bar();");
@@ -587,6 +840,46 @@
 		assertTrue(Arrays.equals(new String[] {"enums.TestEnum.XXX", "enums.TestEnum.YYY"}, aea.getValue()));
 	}
 
+	public void testGetValueEnumArrayInvalidEntry() throws Exception {
+		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
+		this.createAnnotationAndMembers("Foo", "enums.TestEnum[] bar();");
+		this.createTestType("@annot.Foo(bar={enums.TestEnum.XXX, 88})");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new EnumArrayDeclarationAnnotationElementAdapter(daa, "bar");
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		assertTrue(Arrays.equals(new String[] {"enums.TestEnum.XXX", null}, aea.getValue()));
+	}
+
+	public void testGetValueEnumArrayEmpty() throws Exception {
+		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
+		this.createAnnotationAndMembers("Foo", "enums.TestEnum[] bar();");
+		this.createTestType("@annot.Foo(bar={})");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new EnumArrayDeclarationAnnotationElementAdapter(daa, "bar");
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		assertTrue(Arrays.equals(new String[0], aea.getValue()));
+	}
+
+	public void testGetValueEnumArraySingleElement() throws Exception {
+		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
+		this.createAnnotationAndMembers("Foo", "enums.TestEnum[] bar();");
+		this.createTestType("@annot.Foo(bar=enums.TestEnum.XXX)");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new EnumArrayDeclarationAnnotationElementAdapter(daa, "bar");
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		assertTrue(Arrays.equals(new String[] {"enums.TestEnum.XXX"}, aea.getValue()));
+	}
+
+	public void testGetValueEnumArraySingleElementInvalid() throws Exception {
+		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
+		this.createAnnotationAndMembers("Foo", "enums.TestEnum[] bar();");
+		this.createTestType("@annot.Foo(bar=\"\")");
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new EnumArrayDeclarationAnnotationElementAdapter(daa, "bar");
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		assertTrue(Arrays.equals(new String[] {null}, aea.getValue()));
+	}
+
 	public void testGetValueNullEnumArray() throws Exception {
 		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
 		this.createAnnotationAndMembers("Foo", "enums.TestEnum[] bar();");
@@ -594,7 +887,7 @@
 		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
 		DeclarationAnnotationElementAdapter<String[]> daea = new EnumArrayDeclarationAnnotationElementAdapter(daa, "bar");
 		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
-		assertNull(aea.getValue());
+		assertTrue(Arrays.equals(new String[0], aea.getValue()));
 	}
 
 	public void testSetValueEnumArray() throws Exception {
@@ -612,4 +905,44 @@
 		this.assertSourceContains(annotation);
 	}
 
+	public void testSetValueEnumArrayEmptyRemove() throws Exception {
+		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
+		this.createAnnotationAndMembers("Foo", "enums.TestEnum[] bar();");
+		String annotation = "@Foo";
+		this.createTestType();
+		this.assertSourceDoesNotContain(annotation);
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new EnumArrayDeclarationAnnotationElementAdapter(daa, "bar");
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		aea.setValue(new String[0]);
+		this.assertSourceDoesNotContain(annotation);
+	}
+
+	public void testSetValueEnumArrayEmpty() throws Exception {
+		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
+		this.createAnnotationAndMembers("Foo", "enums.TestEnum[] bar();");
+		String annotation = "@Foo(bar={})";
+		this.createTestType();
+		this.assertSourceDoesNotContain(annotation);
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new EnumArrayDeclarationAnnotationElementAdapter(daa, "bar", true, false);
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		aea.setValue(new String[0]);
+		this.assertSourceContains(annotation);
+	}
+
+	public void testSetValueEnumArraySingleElement() throws Exception {
+		this.createEnum("TestEnum", "XXX, YYY, ZZZ");
+		this.createAnnotationAndMembers("Foo", "enums.TestEnum[] bar();");
+		String annotation = "@Foo(bar=XXX)";
+		this.createTestType();
+		this.assertSourceDoesNotContain(annotation);
+		DeclarationAnnotationAdapter daa = new SimpleDeclarationAnnotationAdapter("annot.Foo");
+		DeclarationAnnotationElementAdapter<String[]> daea = new EnumArrayDeclarationAnnotationElementAdapter(daa, "bar");
+		AnnotationElementAdapter<String[]> aea = new MemberAnnotationElementAdapter<String[]>(this.idField(), daea);
+		aea.setValue(new String[] {"enums.TestEnum.XXX"});
+		this.assertSourceContains("import static enums.TestEnum.XXX;");
+		this.assertSourceContains(annotation);
+	}
+
 }
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 751c8f2..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/.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"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<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/META-INF/MANIFEST.MF b/jpa/tests/org.eclipse.jpt.db.tests/META-INF/MANIFEST.MF
deleted file mode 100644
index eb01aca..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,16 +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.0.qualifier
-Bundle-Activator: org.eclipse.jpt.db.tests.internal.JptDbTestsPlugin
-Bundle-Localization: plugin
-Eclipse-LazyStart: false
-Require-Bundle: org.eclipse.core.runtime,
- org.junit,
- org.eclipse.datatools.connectivity,
- org.eclipse.datatools.connectivity.db.generic,
- org.eclipse.jpt.utility,
- org.eclipse.jpt.db
-Export-Package: org.eclipse.jpt.db.tests.internal.platforms
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 cd0d010..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/build.properties
+++ /dev/null
@@ -1,15 +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/derby101.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/derby101.properties
deleted file mode 100644
index 6101413..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/derby101.properties
+++ /dev/null
@@ -1,30 +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
-###############################################################################
-#  Platform Property names & Default
-#
-#  profileName  - jpatest
-#  profileDescription  - JDBC Profile for JPA Testing
-#  userName  - jpatest
-#  userPassword  - (empty)
-#  databasedriverJarList  - (mandatory)
-#  databaseName  - testdb
-#  databaseUrl  - (mandatory)
-# 
-profileName = derby101
-profileDescription = Derby  Embedded JDBC Profile for Testing
-# set user name
-userName = jpatest
-userPassword =
-# set path to Derby driver here (example: databasedriverJarList = c:/derbydb/lib/derby.jar )
-databasedriverJarList = 
-databaseName = testdb
-# set database URL here (example: databaseUrl = jdbc:derby:c:/derbydb/testdb;create=true )  
-databaseUrl =
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 498fc7d..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/oracle10g.properties
+++ /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
-###############################################################################
-#  Platform Property names & Default
-#
-#  profileName  - jpatest
-#  profileDescription  - JDBC Profile for JPA Testing
-#  userName  - jpatest
-#  userPassword  - (empty)
-#  databasedriverJarList  - jar list separate by comma (mandatory) 
-#  databaseName  - testdb
-#  databaseUrl  - (mandatory)
-#
-profileName = oracleXE10g
-profileDescription = XE 10g Release 2 (10.2) Thin JDBC Profile for Testing
-userName = scott
-userPassword = tiger
-# set path to Oracle driver here (example: databasedriverJarList = c:/oracle/jdbc/lib/ojdbc14.jar )
-databasedriverJarList = 
-databaseName = testdb
-# set database URL here (example: databaseUrl = jdbc:oracle:thin:@localhost:1521:testdb )  
-databaseUrl = 
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 3207919..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/oracle9i.properties
+++ /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
-###############################################################################
-#  Platform Property names & Default
-#
-#  profileName  - jpatest
-#  profileDescription  - JDBC Profile for JPA Testing
-#  userName  - jpatest
-#  userPassword  - (empty)
-#  databasedriverJarList  - jar list separate by comma (mandatory) 
-#  databaseName  - testdb
-#  databaseUrl  - (mandatory)
-#
-profileName = oracle9i
-profileDescription = Oracle Thin JDBC Profile for Testing
-userName = scott
-userPassword = tiger
-# set path to Oracle driver here (example: databasedriverJarList = c:/oracle/jdbc/lib/ojdbc14.jar )
-databasedriverJarList =
-databaseName = testdb
-# set database URL here (example: databaseUrl = jdbc:oracle:thin:@server:1521:testdb )  
-databaseUrl =
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/config/sqlserver2005.properties b/jpa/tests/org.eclipse.jpt.db.tests/config/sqlserver2005.properties
deleted file mode 100644
index 8451351..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/config/sqlserver2005.properties
+++ /dev/null
@@ -1,30 +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
-###############################################################################
-#  Platform Property names & Default
-#
-#  profileName  - jpatest
-#  profileDescription  - JDBC Profile for JPA Testing
-#  userName  - jpatest
-#  userPassword  - (empty)
-#  databasedriverJarList  - (mandatory)
-#  databaseName  - testdb
-#  databaseUrl  - (mandatory)
-# 
-profileName = sqlserver2005
-profileDescription = MS SQL Server 2005 JDBC Profile for Testing
-# set user name
-userName = 
-userPassword = 
-# set path to Derby driver here (example: databasedriverJarList = c:/sqlserver/lib/sqljdbc.jar )
-databasedriverJarList = 
-databaseName = testdb
-# set database URL here (example: databaseUrl = jdbc:sqlserver://localhost:1433;databaseName=testdb )  
-databaseUrl = 
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 b04fe27..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/plugin.properties
+++ /dev/null
@@ -1,25 +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/JptDbTests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JptDbTests.java
deleted file mode 100644
index 2326ea3..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JptDbTests.java
+++ /dev/null
@@ -1,39 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-import org.eclipse.jpt.db.tests.internal.platforms.AllPlatformTests;
-import org.eclipse.jpt.utility.internal.ClassTools;
-
-/**
- *  JptDbTests
- */
-public class JptDbTests {
-
-    public static void main( String[] args) {
-        TestRunner.main( new String[] { "-c", JptDbTests.class.getName()});
-    }
-    
-    public static Test suite() {
-        TestSuite suite = new TestSuite( ClassTools.packageNameFor( JptDbTests.class));
-    
-        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 dfced34..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/JptDbTestsPlugin.java
+++ /dev/null
@@ -1,54 +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
- ******************************************************************************/
-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 plugin;
-
-	public static final String BUNDLE_ID = "org.eclipse.jpt.db.tests"; //$NON-NLS-1$
-
-	/**
-	 * Returns the shared instance
-	 */
-	public static JptDbTestsPlugin getDefault() {
-		return plugin;
-	}
-	
-	/**
-	 * The constructor
-	 */
-	public JptDbTestsPlugin() {
-		super();
-		plugin = this;
-	}
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	public void stop(BundleContext context) throws Exception {
-		plugin = 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 af9c423..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/AllPlatformTests.java
+++ /dev/null
@@ -1,42 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-import org.eclipse.jpt.utility.internal.ClassTools;
-
-/**
- *  AllPlatformTests
- */
-public class AllPlatformTests {
-
-    public static void main( String[] args) {
-        TestRunner.main( new String[] { "-c",  AllPlatformTests.class.getName()});
-    }
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite( ClassTools.packageNameFor( AllPlatformTests.class));
-
-        // TODO - Uncomment the platform to test.
-//        suite.addTest( Derby101Tests.suite());
-//        suite.addTest( Oracle9iTests.suite());
-//        suite.addTest( Oracle10gTests.suite());
-//        suite.addTest( SQLServer2005Tests.suite());
-
-        return suite;
-    }
-
-    private AllPlatformTests() {
-        super();
-    }
-
-}
\ No newline at end of file
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 46deffc..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/DTPPlatformTests.java
+++ /dev/null
@@ -1,385 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.NoSuchElementException;
-import java.util.Properties;
-import junit.framework.Assert;
-import junit.framework.TestCase;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.datatools.connectivity.ConnectionProfileException;
-import org.eclipse.datatools.connectivity.IConnectionProfile;
-import org.eclipse.datatools.connectivity.ProfileManager;
-import org.eclipse.datatools.connectivity.db.generic.IDBDriverDefinitionConstants;
-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.internal.ConnectivityPlugin;
-import org.eclipse.jpt.db.internal.Connection;
-import org.eclipse.jpt.db.internal.ConnectionProfile;
-import org.eclipse.jpt.db.internal.ConnectionProfileRepository;
-import org.eclipse.jpt.db.internal.DTPConnectionProfileWrapper;
-import org.eclipse.jpt.db.internal.Database;
-import org.eclipse.jpt.db.internal.Schema;
-import org.eclipse.jpt.db.internal.Table;
-import org.eclipse.jpt.db.tests.internal.JptDbTestsPlugin;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-/**
- *  Base class for all supported DTP platform.
- */
-public abstract class DTPPlatformTests extends TestCase {
-
-    protected ConnectionProfileRepository connectionRepository;
-    
-    private Properties platformProperties;
-	private String currentDbVendor;
-	private String currentDbVersion;
-
-	private static final String PLATFORM_CONFIG_DIRECTORY = "config";	//$NON-NLS-1$
-	
-	private static final String PROFILE_NAME_PROPERTY = "profileName";	//$NON-NLS-1$
-	private static final String PROFILE_DESCRIPTION_PROPERTY = "profileDescription";	//$NON-NLS-1$
-	private static final String USER_NAME_PROPERTY = "userName";	//$NON-NLS-1$
-	private static final String USER_PASSWORD_PROPERTY = "userPassword";	//$NON-NLS-1$
-	private static final String DB_DRIVER_JAR_PROPERTY = "databasedriverJarList";	//$NON-NLS-1$
-	private static final String DB_NAME_PROPERTY = "databaseName";	//$NON-NLS-1$
-	private static final String DB_URL_PROPERTY = "databaseUrl";	//$NON-NLS-1$
-	
-	private static final String PROFILE_NAME_DEFAULT = "jpatest";	//$NON-NLS-1$
-	private static final String PROFILE_DESCRIPTION_DEFAULT = "JDBC Profile for JPA Testing";	//$NON-NLS-1$
-	private static final String USER_NAME_DEFAULT = "userName";	//$NON-NLS-1$
-	private static final String USER_PASSWORD_DEFAULT = "";	//$NON-NLS-1$
-	private static final String DB_NAME_DEFAULT = "testdb";	//$NON-NLS-1$
-	
-	private static final String MISSING_PROPERTY_MESSAGE = "Enter missing property in platform config file (config/database.properties)";	
-
-    public DTPPlatformTests( String name) {
-        super( name);
-        
-        this.connectionRepository = ConnectionProfileRepository.instance();
-    }
-
-	protected void setUp() throws Exception {
-        super.setUp();
-        this.connectionRepository.initializeListeners();
-        
-        if( this.platformIsNew()) {
-        	this.loadPlatformProperties();
-        	
-        	this.buildDriverDefinitionFile( IDriverMgmtConstants.DRIVER_FILE);
-        	this.buildConnectionProfile( this.profileName());
-        	this.currentDbVendor = this.databaseVendor();
-        	this.currentDbVersion = this.databaseVersion();
-        }
-        this.verifyProfileNamed( this.profileName());
-	}
-
-	protected void tearDown() throws Exception {
-        super.tearDown();
-        
-        this.connectionRepository.disposeListeners();
-	}
-
-	// ********** tests **********
-
-	public void testConnection() throws Exception {
-
-		this.connect();
-		
-        this.verifyDatabaseVersionNumber();
-        this.verifyConnection();
-        this.verifyDatabaseContent();
-
-        this.disconnect();
-    }
-    
-	public void testGetProfiles() {
-		// Getting the profile directly from DTP ProfileManager
-		IConnectionProfile[] profiles = ProfileManager.getInstance().getProfiles();
-		Assert.assertNotNull( profiles);
-		Assert.assertTrue( profiles.length > 0);
-	}
-
-	public void testGetProfilesByProvider() {
-		// Get Profiles By ProviderID
-		IConnectionProfile[] profiles = ProfileManager.getInstance().getProfileByProviderID( this.getProfile().getProviderId());
-		Assert.assertNotNull( profiles);
-		Assert.assertTrue( profiles.length > 0);
-	}
-	
-	public void testGetProfileByName() {
-		// Get Profile By Name
-		IConnectionProfile dtpProfile = ProfileManager.getInstance().getProfileByName( this.profileName());
-		Assert.assertNotNull( dtpProfile);
-		Assert.assertTrue( dtpProfile.getName().equals( this.profileName()));
-	}
-	
-	public void testGetProfileByInstanceId() {
-		// Get Profile By InstanceID
-		IConnectionProfile dtpProfile = ProfileManager.getInstance().getProfileByInstanceID( this.getProfile().getInstanceId());
-		Assert.assertNotNull( dtpProfile);
-		Assert.assertTrue( dtpProfile.getName().equals( this.profileName()));
-	}
-
-	// ********** internal tests **********
-
-    private void verifyDatabaseVersionNumber() {
-    	Database database = this.getProfile().getDatabase();
-    	Assert.assertNotNull( database);
-    	
-        String actualVersionNumber = database.getVersion();
-        String expectedVersionNumber = this.databaseVersion();
-        String errorMessage = "Expected version number: " + expectedVersionNumber + " but the actual version number was: " + actualVersionNumber;
-        assertTrue( errorMessage, actualVersionNumber.indexOf( expectedVersionNumber) != -1);
-
-        String actualVendor = database.getVendor();
-        String expectedVendor = this.databaseVendor();
-        errorMessage = "Expected vendor: " + expectedVendor + " but the actual vendor was: " + actualVendor;
-        assertEquals( errorMessage, actualVendor, expectedVendor);
-    }
-    
-    private void verifyConnection() {
-    	Connection connection = this.getProfile().getConnection();
-    	Assert.assertNotNull( connection);
-
-        String actualFactory = connection.getFactoryId();
-        String expectedFactory = DTPConnectionProfileWrapper.CONNECTION_TYPE;
-    	String errorMessage = "Expected factory: " + expectedFactory + " but the actual factory was: " + actualFactory;
-    	assertEquals( errorMessage, actualFactory, expectedFactory);
-    }
-    
-    private void verifyDatabaseContent() {
-    	Database database = this.getProfile().getDatabase();
-    	Assert.assertTrue( database.schemataSize() > 0);
-		
-        Schema schema = database.schemaNamed( this.getProfile().getUserName());
-		if( schema != null) {
-			Assert.assertTrue( schema.sequencesSize() >= 0);
-			
-			Object[] tableNames = CollectionTools.array( schema.tableNames());
-			if( tableNames.length >= 1) {
-				Table table = schema.tableNamed(( String)tableNames[ 0]);
-				Assert.assertTrue( table.columnsSize() >= 0);
-				Assert.assertTrue( table.foreignKeyColumnsSize() >= 0);
-				Assert.assertTrue( table.foreignKeysSize() >= 0);
-				Assert.assertTrue( table.primaryKeyColumnsSize() >= 0);
-			}
-		}
-    }
-
-    private void verifyProfileNamed( String profileName) {
-    	
-    	ConnectionProfile profile = this.getProfileNamed( profileName);
-    	Assert.assertTrue( "ConnectionProfile not found", profileName.equals( profile.getName()));
-    }
-
-	// ***** Platform specific behavior *****
-
-    protected abstract String databaseVendor();
-    protected abstract String databaseVersion();
-
-    protected abstract String driverName();
-    protected abstract String driverDefinitionType();
-    protected abstract String driverDefinitionId();
-    protected abstract String driverClass();
-
-    protected abstract String getConfigName();
-
-	// ***** Behavior *****
-
-    protected void connect() {
-
-        this.getProfile().connect();
-		Assert.assertTrue( "Connect failed.", this.getProfile().isConnected());
-    }
-    
-    protected void disconnect() {
-    	
-    	this.getProfile().disconnect();
-        Assert.assertFalse( "Disconnect failed.", this.getProfile().isConnected());
-    }
-    
-	// ********** queries **********
-
-    protected Schema getSchemaNamed( String schemaName) { 
-
-	    return this.getProfile().getDatabase().schemaNamed( schemaName);
-    }
-	
-    protected Collection getTables() {
-		
-        Schema schema = this.getSchemaNamed( this.getProfile().getUserName());
-		if( schema == null) {
-			return new ArrayList();
-		}
-		return CollectionTools.collection( schema.tables());
-    }
-
-    protected Table getTableNamed( String tableName) { 
-
-	    Schema schema =  this.getSchemaNamed( this.getProfile().getUserName());
-	    Assert.assertNotNull( schema);
-	
-		return schema.tableNamed( tableName);
-    }
-
-    protected String providerId() {
-        return DTPConnectionProfileWrapper.CONNECTION_PROFILE_TYPE;
-    }
-     
-    protected String passwordIsSaved() {
-        return "true";
-    }
-	
-    protected String profileName() {
-    	return this.platformProperties.getProperty( PROFILE_NAME_PROPERTY, PROFILE_NAME_DEFAULT);
-    }    
-    
-    protected String profileDescription() {
-    	return this.platformProperties.getProperty( PROFILE_DESCRIPTION_PROPERTY, PROFILE_DESCRIPTION_DEFAULT);
-    }    
-    
-    protected String userName() {
-    	return this.platformProperties.getProperty( USER_NAME_PROPERTY, USER_NAME_DEFAULT);
-    }
-    
-    protected String userPassword() {
-    	return this.platformProperties.getProperty( USER_PASSWORD_PROPERTY, USER_PASSWORD_DEFAULT);
-    }    
-    
-    protected String databaseName() {
-    	return this.platformProperties.getProperty( DB_NAME_PROPERTY, DB_NAME_DEFAULT);
-    }
-    
-    protected String databasedriverJarList() {
-    	String dbDriverJarList = this.platformProperties.getProperty( DB_DRIVER_JAR_PROPERTY);
-    	if ( StringTools.stringIsEmpty( dbDriverJarList)) {
-    		throw new NoSuchElementException( MISSING_PROPERTY_MESSAGE);
-    	}
-    	return dbDriverJarList;
-    }
-    
-    protected String databaseUrl() {
-    	String dbUrl = this.platformProperties.getProperty( DB_URL_PROPERTY);
-    	if ( StringTools.stringIsEmpty( dbUrl)) {
-    		throw new NoSuchElementException( MISSING_PROPERTY_MESSAGE);
-    	}
-    	return dbUrl;
-    }
-
-    private ConnectionProfile getProfile() {
-
-    	return this.getProfileNamed( this.profileName());
-    }
-
-    protected ConnectionProfile getProfileNamed( String profileName) {
-    	
-    	return ConnectionProfileRepository.instance().profileNamed( profileName);
-    }
-   
-    private String getTestPluginBundleId() {
-		return JptDbTestsPlugin.BUNDLE_ID;
-	}
-
-	private IPath getDriverDefinitionLocation() {
-		return ConnectivityPlugin.getDefault().getStateLocation();
-	}
-	
-	private String getConfigPath() {
-    	return this.getConfigDir() + "/" + this.getConfigName();
-    }
-	
-	private String getConfigDir() {
-    	return PLATFORM_CONFIG_DIRECTORY;
-    }
-
-	private boolean platformIsNew() {
-		return( !this.databaseVendor().equals( this.currentDbVendor) || this.databaseVersion().equals( this.currentDbVersion));
-	}
-	
-    private void loadPlatformProperties() throws IOException {
-		
-		if( this.platformProperties == null) {
-			URL configUrl = Platform.getBundle( this.getTestPluginBundleId()).getEntry( this.getConfigPath());
-
-			this.platformProperties = new Properties();
-			this.platformProperties.load( configUrl.openStream());
-		}
-	}
-	
-	private Properties buildDriverProperties() {
-		Properties driverProperties = new Properties();
-		driverProperties.setProperty( DTPConnectionProfileWrapper.DRIVER_DEFINITION_TYPE_PROP_ID, this.driverDefinitionType());
-		driverProperties.setProperty( DTPConnectionProfileWrapper.DRIVER_JAR_LIST_PROP_ID, this.databasedriverJarList());
-		driverProperties.setProperty( IDBDriverDefinitionConstants.USERNAME_PROP_ID, this.userName());
-		driverProperties.setProperty( IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID, this.driverClass());
-		driverProperties.setProperty( IDBDriverDefinitionConstants.DATABASE_NAME_PROP_ID, this.databaseName());
-		driverProperties.setProperty( IDBDriverDefinitionConstants.PASSWORD_PROP_ID, this.userPassword());
-		driverProperties.setProperty( IDBDriverDefinitionConstants.URL_PROP_ID, this.databaseUrl());
-		driverProperties.setProperty( IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID, this.databaseVendor());
-		driverProperties.setProperty( IDBDriverDefinitionConstants.DATABASE_VERSION_PROP_ID, this.databaseVersion());
-		return driverProperties;
-	}
-
-	private Properties buildBasicProperties() {
-		Properties basicProperties = new Properties();
-		basicProperties.setProperty( IDBDriverDefinitionConstants.DATABASE_NAME_PROP_ID, this.databaseName());
-		basicProperties.setProperty( IDBDriverDefinitionConstants.USERNAME_PROP_ID, this.userName());
-		basicProperties.setProperty( IDBDriverDefinitionConstants.PASSWORD_PROP_ID, this.userPassword());
-		basicProperties.setProperty( DTPConnectionProfileWrapper.DRIVER_DEFINITION_PROP_ID, this.driverDefinitionId());
-		
-		basicProperties.setProperty( IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID, this.driverClass());
-		basicProperties.setProperty( IDBDriverDefinitionConstants.URL_PROP_ID, this.databaseUrl());
-		basicProperties.setProperty( IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID, this.databaseVendor());
-		basicProperties.setProperty( IDBDriverDefinitionConstants.DATABASE_VERSION_PROP_ID, this.databaseVersion());
-		
-		basicProperties.setProperty( DTPConnectionProfileWrapper.DATABASE_SAVE_PWD_PROP_ID, this.passwordIsSaved());
-		return basicProperties;
-	}
-
-	private void buildConnectionProfile( String profileName) throws ConnectionProfileException {
-		
-		ProfileManager profileManager = ProfileManager.getInstance();
-		Assert.assertNotNull( profileManager);
-		IConnectionProfile profile = profileManager.getProfileByName( profileName);
-		if( profile == null) {
-			Properties basicProperties = buildBasicProperties();
-			ProfileManager.getInstance().createProfile( profileName, this.profileDescription(), this.providerId(), basicProperties);
-		}
-	}
-
-	private void buildDriverDefinitionFile( String driverFileName) throws CoreException {
-		
-		XMLFileManager.setStorageLocation( this.getDriverDefinitionLocation());
-		XMLFileManager.setFileName( driverFileName);
-		IPropertySet[] propsets = new IPropertySet[ 1];
-		String driverName = this.driverName();
-		String driverId = this.driverDefinitionId();
-		PropertySetImpl propertySet = new PropertySetImpl( driverName, driverId);
-		propertySet.setProperties( driverId, this.buildDriverProperties());
-		propsets[ 0] = propertySet;
-
-		XMLFileManager.saveNamedPropertySet( propsets);
-		
-		File driverDefinitioneFile =  this.getDriverDefinitionLocation().append( driverFileName).toFile();
-		Assert.assertTrue( driverDefinitioneFile.exists());
-	}
-	
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Derby101Tests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Derby101Tests.java
deleted file mode 100644
index 7e510cf..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Derby101Tests.java
+++ /dev/null
@@ -1,64 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-/**
- *  Derby 10.1 Embedded Driver Test
- */
-public class Derby101Tests extends DTPPlatformTests {
-	
-    public static void main( String[] args) {
-        TestRunner.main( new String[] { "-c", Derby101Tests.class.getName()});
-    }
-
-    public static Test suite() {
-        return new TestSuite( Derby101Tests.class);
-    }
-    
-    public Derby101Tests( String name) {
-        super( name);
-    }
-    
-    protected String databaseVendor() {
-        return "Derby";
-    }
-
-    protected String databaseVersion() {
-        return "10.1";
-    }
-	
-    protected String providerId() {
-        return "org.eclipse.datatools.connectivity.db.derby.embedded.connectionProfile";
-    }
-    
-    protected String driverName() {
-        return "Derby Embedded JDBC Driver";
-    }
-    
-    protected String driverDefinitionType() {
-        return "org.eclipse.datatools.connectivity.db.derby101.genericDriverTemplate";
-    }
-    
-    protected String driverDefinitionId() {
-        return "DriverDefn.Derby Embedded JDBC Driver";
-    }
-    
-    protected String driverClass() {
-        return "org.apache.derby.jdbc.EmbeddedDriver";
-    }
-	
-    protected String getConfigName() {
-    	return "derby101.properties";
-    }
-}
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 70d3a3d..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle10gTests.java
+++ /dev/null
@@ -1,60 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-/**
- *  Oracle 10g Thin Driver Test
- */
-public class Oracle10gTests extends DTPPlatformTests {
-
-    public static void main( String[] args) {
-        TestRunner.main( new String[] { "-c", Oracle10gTests.class.getName()});
-    }
-
-    public static Test suite() {
-        return new TestSuite( Oracle10gTests.class);
-    }
-    
-    public Oracle10gTests( String name) {
-        super( name);
-    }
-
-	protected String databaseVendor() {
-		return "Oracle";
-	}
-
-	protected String databaseVersion() {
-		return "10";
-	}
-
-	protected String driverClass() {
-		return "oracle.jdbc.OracleDriver";
-	}
-
-	protected String driverDefinitionId() {
-		return "DriverDefn.Oracle Thin Driver";
-	}
-
-	protected String driverDefinitionType() {
-		return "org.eclipse.datatools.enablement.oracle.10.driverTemplate";
-	}
-
-	protected String driverName() {
-		return "Oracle 10g Thin Driver";
-	}
-	
-    protected String getConfigName() {
-    	return "oracle10g.properties";
-    }
-}
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 3923081..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/Oracle9iTests.java
+++ /dev/null
@@ -1,60 +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
- ******************************************************************************/
-package org.eclipse.jpt.db.tests.internal.platforms;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-/**
- *  Oracle 9i Thin Driver Test
- */
-public class Oracle9iTests extends DTPPlatformTests {
-
-    public static void main( String[] args) {
-        TestRunner.main( new String[] { "-c", Oracle9iTests.class.getName()});
-    }
-
-    public static Test suite() {
-        return new TestSuite( Oracle9iTests.class);
-    }
-    
-    public Oracle9iTests( String name) {
-        super( name);
-    }
-
-	protected String databaseVendor() {
-		return "Oracle";
-	}
-
-	protected String databaseVersion() {
-		return "9";
-	}
-
-	protected String driverClass() {
-		return "oracle.jdbc.OracleDriver";
-	}
-
-	protected String driverDefinitionId() {
-		return "DriverDefn.Oracle Thin Driver";
-	}
-
-	protected String driverDefinitionType() {
-		return "org.eclipse.datatools.enablement.oracle.9.driverTemplate";
-	}
-
-	protected String driverName() {
-		return "Oracle 9i Thin Driver";
-	}
-	
-    protected String getConfigName() {
-    	return "oracle9i.properties";
-    }
-}
diff --git a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/SQLServer2005Tests.java b/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/SQLServer2005Tests.java
deleted file mode 100644
index a0f5034..0000000
--- a/jpa/tests/org.eclipse.jpt.db.tests/src/org/eclipse/jpt/db/tests/internal/platforms/SQLServer2005Tests.java
+++ /dev/null
@@ -1,64 +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.db.tests.internal.platforms;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-/**
- *  SQL Server 2005 Driver Test
- */
-public class SQLServer2005Tests extends DTPPlatformTests {
-	
-    public static void main( String[] args) {
-        TestRunner.main( new String[] { "-c", SQLServer2005Tests.class.getName()});
-    }
-
-    public static Test suite() {
-        return new TestSuite( SQLServer2005Tests.class);
-    }
-    
-    public SQLServer2005Tests( String name) {
-        super( name);
-    }
-    
-    protected String databaseVendor() {
-        return "SQLServer";
-    }
-
-    protected String databaseVersion() {
-        return "2005";
-    }
-	
-    protected String providerId() {
-        return "org.eclipse.datatools.connectivity.db.generic.connectionProfile";
-    }
-    
-    protected String driverName() {
-        return "Microsoft SQL Server 2005 JDBC Driver";
-    }
-    
-    protected String driverDefinitionType() {
-        return "org.eclipse.datatools.enablement.msft.sqlserver.2005.driverTemplate";
-    }
-    
-    protected String driverDefinitionId() {
-        return "DriverDefn.Microsoft SQL Server 2005 JDBC Driver";
-    }
-    
-    protected String driverClass() {
-        return "com.microsoft.sqlserver.jdbc.SQLServerDriver";
-    }
-	
-    protected String getConfigName() {
-    	return "sqlserver2005.properties";
-    }
-}
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 304e861..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/.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/tests/org.eclipse.jpt.utility.tests/.cvsignore b/jpa/tests/org.eclipse.jpt.utility.tests/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
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 c74f41d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sun May 27 15:11:44 EDT 2007
-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 1870613..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,12 +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.0.0
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.jpt.utility,
- org.junit;bundle-version="[3.0.0,4.0.0)"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.jpt.utility.tests.internal;x-internal:=true,
- org.eclipse.jpt.utility.tests.internal.iterators;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 9e73bda..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>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>
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 9995768..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/plugin.properties
+++ /dev/null
@@ -1,24 +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 Utility Tests
-providerName = Eclipse.org
-
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 ed3e6f2..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/BitToolsTests.java
+++ /dev/null
@@ -1,59 +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
- ******************************************************************************/
-package org.eclipse.jpt.utility.tests.internal;
-
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.BitTools;
-
-public class BitToolsTests extends TestCase {
-
-	public BitToolsTests(String name) {
-		super(name);
-	}
-
-	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 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 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 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 }));
-	}
-
-}
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClassToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClassToolsTests.java
deleted file mode 100644
index 504b621..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClassToolsTests.java
+++ /dev/null
@@ -1,548 +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 java.lang.reflect.Array;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Vector;
-import java.util.Map.Entry;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.ClassTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
-
-public class ClassToolsTests extends TestCase {
-
-	private static String testStaticField;
-
-	public ClassToolsTests(String name) {
-		super(name);
-	}
-
-	/**
-	 * 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;
-		Field[] fields = ClassTools.allFields(java.util.Vector.class);
-		assertEquals(fieldCount, fields.length);
-		assertTrue(CollectionTools.contains(this.names(fields), "modCount"));
-		assertTrue(CollectionTools.contains(this.names(fields), "serialVersionUID"));
-		assertTrue(CollectionTools.contains(this.names(fields), "capacityIncrement"));
-		assertTrue(CollectionTools.contains(this.names(fields), "elementCount"));
-		assertTrue(CollectionTools.contains(this.names(fields), "elementData"));
-		assertTrue(fields[0].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;
-		Method[] methods = ClassTools.allMethods(java.util.Vector.class);
-		assertEquals(methodCount, methods.length);
-		assertTrue(CollectionTools.contains(this.names(methods), "wait"));
-		assertTrue(CollectionTools.contains(this.names(methods), "addElement"));
-		assertTrue(methods[0].isAccessible());
-	}
-
-	public void testNewInstanceClass() {
-		Vector<?> v = ClassTools.newInstance(java.util.Vector.class);
-		assertNotNull(v);
-		assertEquals(0, v.size());
-	}
-
-	public void testNewInstanceClassClassObject() {
-		int initialCapacity = 200;
-		Vector<?> v = ClassTools.newInstance(java.util.Vector.class, int.class, new Integer(initialCapacity));
-		assertNotNull(v);
-		assertEquals(0, v.size());
-		Object[] elementData = (Object[]) ClassTools.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 = ClassTools.newInstance(java.util.Vector.class, parmTypes, parms);
-		assertNotNull(v);
-		assertEquals(0, v.size());
-		Object[] elementData = (Object[]) ClassTools.getFieldValue(v, "elementData");
-		assertEquals(initialCapacity, elementData.length);
-
-		parms[0] = new Integer(-1);
-		boolean exCaught = false;
-		try {
-			v = ClassTools.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 = ClassTools.attemptNewInstance(java.util.Vector.class, parmTypes, parms);
-		} catch (NoSuchMethodException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchMethodException not thrown", exCaught);
-	}
-
-	public void testGetFieldValue() {
-		int initialCapacity = 200;
-		Vector<?> v = new Vector<Object>(initialCapacity);
-		Object[] elementData = (Object[]) ClassTools.getFieldValue(v, "elementData");
-		assertEquals(initialCapacity, elementData.length);
-
-		// test inherited field
-		Integer modCountInteger = (Integer) ClassTools.getFieldValue(v, "modCount");
-		int modCount = modCountInteger.intValue();
-		assertEquals(0, modCount);
-
-		boolean exCaught = false;
-		Object bogusFieldValue = null;
-		try {
-			bogusFieldValue = ClassTools.attemptToGetFieldValue(v, "bogusField");
-		} catch (NoSuchFieldException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchFieldException not thrown: " + bogusFieldValue, exCaught);
-	}
-
-	public void testExecuteMethodObjectString() {
-		Vector<String> v = new Vector<String>();
-		int size = ((Integer) ClassTools.executeMethod(v, "size")).intValue();
-		assertEquals(0, size);
-
-		v.addElement("foo");
-		size = ((Integer) ClassTools.executeMethod(v, "size")).intValue();
-		assertEquals(1, size);
-	}
-
-	public void testExecuteMethodObjectStringClassObject() {
-		Vector<String> v = new Vector<String>();
-		boolean booleanResult = ((Boolean) ClassTools.executeMethod(v, "add", Object.class, "foo")).booleanValue();
-		assertTrue(booleanResult);
-		assertTrue(v.contains("foo"));
-		Object voidResult = ClassTools.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) ClassTools.executeMethod(v, "add", parmTypes, parms)).booleanValue();
-		assertTrue(booleanResult);
-		assertTrue(v.contains("foo"));
-
-		boolean exCaught = false;
-		Object bogusMethodReturnValue = null;
-		try {
-			bogusMethodReturnValue = ClassTools.attemptToExecuteMethod(v, "bogusMethod", parmTypes, parms);
-		} catch (NoSuchMethodException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchMethodException not thrown: " + bogusMethodReturnValue, exCaught);
-	}
-
-	public void testExecuteStaticMethodClassString() {
-		Double randomObject = (Double) ClassTools.executeStaticMethod(java.lang.Math.class, "random");
-		assertNotNull(randomObject);
-		double random = randomObject.doubleValue();
-		assertTrue(random >= 0);
-		assertTrue(random < 1);
-	}
-
-	public void testExecuteStaticMethodClassStringClassObject() {
-		String s = (String) ClassTools.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) ClassTools.executeStaticMethod(java.lang.String.class, "valueOf", parmTypes, parms);
-		assertNotNull(s);
-		assertEquals("true", s);
-
-		boolean exCaught = false;
-		Object bogusStaticMethodReturnValue = null;
-		try {
-			bogusStaticMethodReturnValue = ClassTools.attemptToExecuteStaticMethod(java.lang.String.class, "bogusStaticMethod", parmTypes, parms);
-		} catch (NoSuchMethodException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchMethodException not thrown: " + bogusStaticMethodReturnValue, exCaught);
-
-		// test non-static method
-		exCaught = false;
-		try {
-			bogusStaticMethodReturnValue = ClassTools.attemptToExecuteStaticMethod(java.lang.String.class, "toString");
-		} catch (NoSuchMethodException ex) {
-			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";
-		ClassTools.setFieldValue(v, "elementData", newElementData);
-		ClassTools.setFieldValue(v, "elementCount", new Integer(1));
-		// test inherited field
-		ClassTools.setFieldValue(v, "modCount", new Integer(1));
-		assertTrue(v.contains("foo"));
-
-		boolean exCaught = false;
-		try {
-			ClassTools.attemptToSetFieldValue(v, "bogusField", "foo");
-		} catch (NoSuchFieldException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchFieldException not thrown", exCaught);
-	}
-
-	public void testSetStaticFieldValue() {
-		ClassTools.setStaticFieldValue(this.getClass(), "testStaticField", "new value");
-		assertEquals(testStaticField, "new value");
-
-		boolean exCaught = false;
-		try {
-			ClassTools.attemptToSetStaticFieldValue(this.getClass(), "bogusStaticField", "new value");
-		} catch (NoSuchFieldException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchFieldException not thrown", exCaught);
-	}
-
-	public void testShortName() {
-		assertEquals("Vector", ClassTools.shortClassNameForObject(new java.util.Vector<Object>()));
-		assertEquals("Vector", ClassTools.shortNameFor(java.util.Vector.class));
-	}
-
-	public void testNestedName() {
-		Map<String, String> map = new HashMap<String, String>();
-		map.put("foo", "bar");
-		Entry<String, String> entry = map.entrySet().iterator().next();
-		assertEquals("Entry", ClassTools.nestedClassNameForObject(entry));
-		assertEquals("Entry", ClassTools.nestedNameFor(java.util.Map.Entry.class));
-	}
-
-	public void testPackageName() {
-		assertEquals("java.util", ClassTools.packageNameFor(java.util.Vector.class));
-		assertEquals("java.util", ClassTools.packageNameFor(java.util.Map.Entry.class));
-	}
-
-	public void testArrayDepthFor() {
-		assertEquals(0, ClassTools.arrayDepthFor(java.util.Vector.class));
-		assertEquals(0, ClassTools.arrayDepthFor(int.class));
-		assertEquals(0, ClassTools.arrayDepthFor(void.class));
-		assertEquals(1, ClassTools.arrayDepthFor(java.util.Vector[].class));
-		assertEquals(1, ClassTools.arrayDepthFor(int[].class));
-		assertEquals(3, ClassTools.arrayDepthFor(java.util.Vector[][][].class));
-		assertEquals(3, ClassTools.arrayDepthFor(int[][][].class));
-	}
-
-	public void testArrayDepthForObject() {
-		assertEquals(0, ClassTools.arrayDepthForObject(new java.util.Vector<Object>()));
-		assertEquals(1, ClassTools.arrayDepthForObject(new java.util.Vector[0]));
-		assertEquals(1, ClassTools.arrayDepthForObject(new int[0]));
-		assertEquals(3, ClassTools.arrayDepthForObject(new java.util.Vector[0][0][0]));
-		assertEquals(3, ClassTools.arrayDepthForObject(new int[0][0][0]));
-	}
-
-	public void testArrayDepthForClassNamed() {
-		assertEquals(0, ClassTools.arrayDepthForClassNamed(java.util.Vector.class.getName()));
-		assertEquals(0, ClassTools.arrayDepthForClassNamed(int.class.getName()));
-		assertEquals(0, ClassTools.arrayDepthForClassNamed(void.class.getName()));
-		assertEquals(1, ClassTools.arrayDepthForClassNamed(java.util.Vector[].class.getName()));
-		assertEquals(1, ClassTools.arrayDepthForClassNamed(int[].class.getName()));
-		assertEquals(3, ClassTools.arrayDepthForClassNamed(java.util.Vector[][][].class.getName()));
-		assertEquals(3, ClassTools.arrayDepthForClassNamed(int[][][].class.getName()));
-	}
-
-	public void testElementTypeFor() {
-		assertEquals(java.util.Vector.class, ClassTools.elementTypeFor(java.util.Vector.class));
-		assertEquals(int.class, ClassTools.elementTypeFor(int.class));
-		assertEquals(void.class, ClassTools.elementTypeFor(void.class));
-		assertEquals(java.util.Vector.class, ClassTools.elementTypeFor(java.util.Vector[].class));
-		assertEquals(int.class, ClassTools.elementTypeFor(int[].class));
-		assertEquals(java.util.Vector.class, ClassTools.elementTypeFor(java.util.Vector[][][].class));
-		assertEquals(int.class, ClassTools.elementTypeFor(int[][][].class));
-	}
-
-	public void testElementTypeForObject() {
-		assertEquals(java.util.Vector.class, ClassTools.elementTypeForObject(new java.util.Vector<Object>()));
-		assertEquals(java.util.Vector.class, ClassTools.elementTypeForObject(new java.util.Vector[0]));
-		assertEquals(int.class, ClassTools.elementTypeForObject(new int[0]));
-		assertEquals(java.util.Vector.class, ClassTools.elementTypeForObject(new java.util.Vector[0][0][0]));
-		assertEquals(int.class, ClassTools.elementTypeForObject(new int[0][0][0]));
-	}
-
-	public void testElementTypeNameFor() {
-		assertEquals(java.util.Vector.class.getName(), ClassTools.elementTypeNameFor(java.util.Vector.class));
-		assertEquals(int.class.getName(), ClassTools.elementTypeNameFor(int.class));
-		assertEquals(void.class.getName(), ClassTools.elementTypeNameFor(void.class));
-		assertEquals(java.util.Vector.class.getName(), ClassTools.elementTypeNameFor(java.util.Vector[].class));
-		assertEquals(int.class.getName(), ClassTools.elementTypeNameFor(int[].class));
-		assertEquals(java.util.Vector.class.getName(), ClassTools.elementTypeNameFor(java.util.Vector[][][].class));
-		assertEquals(int.class.getName(), ClassTools.elementTypeNameFor(int[][][].class));
-	}
-
-	public void testElementTypeNameForClassNamed() {
-		assertEquals(java.util.Vector.class.getName(), ClassTools.elementTypeNameForClassNamed(java.util.Vector.class.getName()));
-		assertEquals(int.class.getName(), ClassTools.elementTypeNameForClassNamed(int.class.getName()));
-		assertEquals(void.class.getName(), ClassTools.elementTypeNameForClassNamed(void.class.getName()));
-		assertEquals(java.util.Vector.class.getName(), ClassTools.elementTypeNameForClassNamed(java.util.Vector[].class.getName()));
-		assertEquals(int.class.getName(), ClassTools.elementTypeNameForClassNamed(int[].class.getName()));
-		assertEquals(java.util.Vector.class.getName(), ClassTools.elementTypeNameForClassNamed(java.util.Vector[][][].class.getName()));
-		assertEquals(int.class.getName(), ClassTools.elementTypeNameForClassNamed(int[][][].class.getName()));
-	}
-
-	public void testClassCodes() {
-		assertEquals("byte", ClassTools.classNameForCode('B'));
-		assertEquals("char", ClassTools.classNameForCode('C'));
-		assertEquals("double", ClassTools.classNameForCode('D'));
-		assertEquals("float", ClassTools.classNameForCode('F'));
-		assertEquals("int", ClassTools.classNameForCode('I'));
-		assertEquals("long", ClassTools.classNameForCode('J'));
-		assertEquals("short", ClassTools.classNameForCode('S'));
-		assertEquals("boolean", ClassTools.classNameForCode('Z'));
-		assertEquals("void", ClassTools.classNameForCode('V'));
-
-		boolean exCaught = false;
-		try {
-			ClassTools.classNameForCode('X');
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalArgumentException not thrown", exCaught);
-	}
-
-	public void testClassNamedIsTopLevel() throws Exception {
-		assertTrue(ClassTools.classNamedIsTopLevel(java.util.Map.class.getName())); // top-level
-		assertFalse(ClassTools.classNamedIsTopLevel(java.util.Map.Entry.class.getName())); // member
-		assertFalse(ClassTools.classNamedIsTopLevel(Class.forName(munge(this.getClass().getName() + "$1$LocalClass")).getName())); // local
-		assertFalse(ClassTools.classNamedIsTopLevel(Class.forName("java.util.Vector$1").getName())); // anonymous
-
-		Object[] array = new java.util.Map[0]; // top-level
-		assertFalse(ClassTools.classNamedIsTopLevel(array.getClass().getName()));
-		array = new java.util.Map.Entry[0]; // member
-		assertFalse(ClassTools.classNamedIsTopLevel(array.getClass().getName()));
-		Class<?> localClass = Class.forName(munge(this.getClass().getName() + "$1$LocalClass")); // local
-		array = (Object[]) Array.newInstance(localClass, 0);
-		assertFalse(ClassTools.classNamedIsTopLevel(array.getClass().getName()));
-		Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
-		array = (Object[]) Array.newInstance(anonClass, 0);
-		assertFalse(ClassTools.classNamedIsTopLevel(array.getClass().getName()));
-	}
-
-	public void testClassNamedIsMember() throws Exception {
-		assertFalse(ClassTools.classNamedIsMember(java.util.Map.class.getName())); // top-level
-		assertTrue(ClassTools.classNamedIsMember(java.util.Map.Entry.class.getName())); // member
-		assertFalse(ClassTools.classNamedIsMember(Class.forName(munge(this.getClass().getName() + "$1$LocalClass")).getName())); // local
-		assertFalse(ClassTools.classNamedIsMember(Class.forName("java.util.Vector$1").getName())); // anonymous
-
-		Object[] array = new java.util.Map[0]; // top-level
-		assertFalse(ClassTools.classNamedIsMember(array.getClass().getName()));
-		array = new java.util.Map.Entry[0]; // member
-		assertFalse(ClassTools.classNamedIsMember(array.getClass().getName()));
-		Class<?> localClass = Class.forName(munge(this.getClass().getName() + "$1$LocalClass")); // local
-		array = (Object[]) Array.newInstance(localClass, 0);
-		assertFalse(ClassTools.classNamedIsMember(array.getClass().getName()));
-		Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
-		array = (Object[]) Array.newInstance(anonClass, 0);
-		assertFalse(ClassTools.classNamedIsMember(array.getClass().getName()));
-
-		// test a few edge cases
-		assertTrue(ClassTools.classNamedIsMember("java.util.Map$a1"));
-		assertTrue(ClassTools.classNamedIsMember("java.util.Map$a1$aaa$bbb"));
-		assertFalse(ClassTools.classNamedIsMember("java.util.Map$1a1$aaa"));
-		assertFalse(ClassTools.classNamedIsMember("java.util.Map$1a"));
-		assertTrue(ClassTools.classNamedIsMember("java.util.Map$a12345$b12345"));
-		assertFalse(ClassTools.classNamedIsMember("java.util.Map$12345a"));
-		assertFalse(ClassTools.classNamedIsMember("java.util.Map$333"));
-		assertFalse(ClassTools.classNamedIsMember("java.util.Map3$333"));
-	}
-
-	public void testClassNamedIsLocal() throws Exception {
-		class LocalClass {
-			void foo() {
-				System.getProperty("foo");
-			}
-		}
-		new LocalClass().foo();
-		assertFalse(ClassTools.classNamedIsLocal(java.util.Map.class.getName())); // top-level
-		assertFalse(ClassTools.classNamedIsLocal(java.util.Map.Entry.class.getName())); // member
-		assertTrue(ClassTools.classNamedIsLocal(Class.forName(munge(this.getClass().getName() + "$1$LocalClass")).getName())); // local
-		assertFalse(ClassTools.classNamedIsLocal(Class.forName("java.util.Vector$1").getName())); // anonymous
-
-		Object[] array = new java.util.Map[0]; // top-level
-		assertFalse(ClassTools.classNamedIsLocal(array.getClass().getName()));
-		array = new java.util.Map.Entry[0]; // member
-		assertFalse(ClassTools.classNamedIsLocal(array.getClass().getName()));
-		Class<?> localClass = Class.forName(munge(this.getClass().getName() + "$1$LocalClass")); // local
-		array = (Object[]) Array.newInstance(localClass, 0);
-		assertFalse(ClassTools.classNamedIsLocal(array.getClass().getName()));
-		Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
-		array = (Object[]) Array.newInstance(anonClass, 0);
-		assertFalse(ClassTools.classNamedIsLocal(array.getClass().getName()));
-
-		// test a few edge cases
-		assertFalse(ClassTools.classNamedIsLocal("java.util.Map$a1"));
-		assertFalse(ClassTools.classNamedIsLocal("java.util.Map$a1$aaa$bbb"));
-		assertTrue(ClassTools.classNamedIsLocal("java.util.Map$11$aaa"));
-		assertTrue(ClassTools.classNamedIsLocal("java.util.Map$1$a")); // eclipse naming convention
-		assertTrue(ClassTools.classNamedIsLocal("java.util.Map$2$abc")); // eclipse naming convention
-		assertTrue(ClassTools.classNamedIsLocal("java.util.Map$2$abc1")); // eclipse naming convention
-		assertTrue(ClassTools.classNamedIsLocal("java.util.Map$1a")); // jdk naming convention
-		assertTrue(ClassTools.classNamedIsLocal("java.util.Map$2abc")); // jdk naming convention
-		assertTrue(ClassTools.classNamedIsLocal("java.util.Map$2abc1")); // jdk naming convention
-		assertFalse(ClassTools.classNamedIsLocal("java.util.Map$a12345$b12345"));
-		assertTrue(ClassTools.classNamedIsLocal("java.util.Map$12345$a1234"));
-		assertFalse(ClassTools.classNamedIsLocal("java.util.Map$333"));
-		assertFalse(ClassTools.classNamedIsLocal("java.util.Map3$333"));
-	}
-
-	public void testClassNamedIsAnonymous() throws Exception {
-		assertFalse(ClassTools.classNamedIsAnonymous(java.util.Map.class.getName())); // top-level
-		assertFalse(ClassTools.classNamedIsAnonymous(java.util.Map.Entry.class.getName())); // member
-		assertFalse(ClassTools.classNamedIsAnonymous(Class.forName(munge(this.getClass().getName() + "$1$LocalClass")).getName())); // local
-		assertTrue(ClassTools.classNamedIsAnonymous(Class.forName("java.util.Vector$1").getName())); // anonymous
-
-		Object[] array = new java.util.Map[0]; // top-level
-		assertFalse(ClassTools.classNamedIsAnonymous(array.getClass().getName()));
-		array = new java.util.Map.Entry[0]; // member
-		assertFalse(ClassTools.classNamedIsAnonymous(array.getClass().getName()));
-		Class<?> localClass = Class.forName(munge(this.getClass().getName() + "$1$LocalClass")); // local
-		array = (Object[]) Array.newInstance(localClass, 0);
-		assertFalse(ClassTools.classNamedIsAnonymous(array.getClass().getName()));
-		Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
-		array = (Object[]) Array.newInstance(anonClass, 0);
-		assertFalse(ClassTools.classNamedIsAnonymous(array.getClass().getName()));
-
-		// test a few edge cases
-		assertFalse(ClassTools.classNamedIsAnonymous("java.util.Map$a1"));
-		assertFalse(ClassTools.classNamedIsAnonymous("java.util.Map$a1$aaa$bbb"));
-		assertFalse(ClassTools.classNamedIsAnonymous("java.util.Map$1a1$aaa"));
-		assertFalse(ClassTools.classNamedIsAnonymous("java.util.Map$1$a"));
-		assertFalse(ClassTools.classNamedIsAnonymous("java.util.Map$1a"));
-		assertFalse(ClassTools.classNamedIsAnonymous("java.util.Map$a12345$b12345"));
-		assertFalse(ClassTools.classNamedIsAnonymous("java.util.Map$12345$a1234"));
-		assertTrue(ClassTools.classNamedIsAnonymous("java.util.Map$333"));
-		assertTrue(ClassTools.classNamedIsAnonymous("java.util.Map3$333"));
-	}
-
-	public void testCodeForClass() {
-		assertEquals('I', ClassTools.codeForClass(int.class));
-		assertEquals('B', ClassTools.codeForClass(byte.class));
-	}
-
-	public void testCodeForClassNamed() {
-		assertEquals('I', ClassTools.codeForClassNamed(int.class.getName()));
-		assertEquals('I', ClassTools.codeForClassNamed("int"));
-		assertEquals('B', ClassTools.codeForClassNamed(byte.class.getName()));
-		assertEquals('B', ClassTools.codeForClassNamed("byte"));
-	}
-
-	public void testClassForTypeDeclaration() throws Exception {
-		assertEquals(int.class, ClassTools.classForTypeDeclaration("int", 0));
-		assertEquals(int[].class, ClassTools.classForTypeDeclaration("int", 1));
-		assertEquals(int[][][].class, ClassTools.classForTypeDeclaration("int", 3));
-
-		assertEquals(Object.class, ClassTools.classForTypeDeclaration("java.lang.Object", 0));
-		assertEquals(Object[][][].class, ClassTools.classForTypeDeclaration("java.lang.Object", 3));
-
-		assertEquals(void.class, ClassTools.classForTypeDeclaration("void", 0));
-		try {
-			ClassTools.classForTypeDeclaration(void.class.getName(), 1);
-			fail("should not get here...");
-		} catch (ClassNotFoundException ex) {
-			// expected
-		}
-	}
-
-	public void testClassNameForTypeDeclaration() throws Exception {
-		assertEquals(int.class.getName(), ClassTools.classNameForTypeDeclaration("int", 0));
-		assertEquals(int[].class.getName(), ClassTools.classNameForTypeDeclaration("int", 1));
-		assertEquals(int[][][].class.getName(), ClassTools.classNameForTypeDeclaration("int", 3));
-
-		assertEquals(Object.class.getName(), ClassTools.classNameForTypeDeclaration("java.lang.Object", 0));
-		assertEquals(Object[][][].class.getName(), ClassTools.classNameForTypeDeclaration("java.lang.Object", 3));
-
-		assertEquals(void.class.getName(), ClassTools.classNameForTypeDeclaration("void", 0));
-		try {
-			ClassTools.classNameForTypeDeclaration(void.class.getName(), 1);
-			fail("should not get here...");
-		} catch (IllegalArgumentException ex) {
-			// expected
-		}
-	}
-
-	private Iterator<String> names(Field[] fields) {
-		return new TransformationIterator<Field, String>(CollectionTools.iterator(fields)) {
-			@Override
-			protected String transform(Field field) {
-				return field.getName();
-			}
-		};
-	}
-
-	private Iterator<String> names(Method[] methods) {
-		return new TransformationIterator<Method, String>(CollectionTools.iterator(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/ClasspathTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClasspathTests.java
deleted file mode 100644
index 54beea0..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ClasspathTests.java
+++ /dev/null
@@ -1,289 +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 java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.Classpath;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-
-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().path();
-		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().path();
-		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().path();
-		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().path();
-		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().path();
-		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().path();
-		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().path();
-		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().path();
-		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().path();
-		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().path();
-		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 testConvertToClassFileName() {
-		char sc = File.separatorChar;
-		String fileName = Classpath.convertToClassFileName(java.lang.String.class);
-		assertEquals("java" + sc + "lang" + sc + "String.class", fileName);
-	}
-
-	public void testConvertToJavaFileName() {
-		char sc = File.separatorChar;
-		String fileName = Classpath.convertToJavaFileName(java.lang.String.class.getName());
-		assertEquals("java" + sc + "lang" + sc + "String.java", fileName);
-	}
-
-	public void testConvertToURLs() {
-		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")).urls();
-		int i = 0;
-		assertEquals(this.morphURL("/C:/jdk/rt.jar"), entries[i++].getPath());
-		assertEquals(this.morphURL("/C:/jdk/i18n.jar"), entries[i++].getPath());
-		assertEquals(this.morphURL("/C:/jdk/jaws.jar"), entries[i++].getPath());
-		assertEquals(this.morphURL("/C:/foo/classes"), entries[i++].getPath());
-		assertEquals(this.morphURL("/C:/bar/bar.jar"), entries[i++].getPath());
-		assertEquals(i, entries.length);
-	}
-
-	public void testEntries() {
-		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;"));
-		Classpath.Entry[] entries = cp.getEntries();
-		int i = 0;
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entries[i++].fileName());
-		assertEquals(this.morph("."), entries[i++].fileName());
-		assertEquals(this.morph("C:\\jdk\\i18n.jar"), entries[i++].fileName());
-		assertEquals(this.morph("C:\\jdk\\jaws.jar"), entries[i++].fileName());
-		assertEquals(this.morph("C:\\foo\\classes"), entries[i++].fileName());
-		assertEquals(this.morph("C:\\bar\\bar.jar"), entries[i++].fileName());
-		assertEquals(this.morph("C:\\bar\\bar.jar"), entries[i++].fileName());
-		assertEquals(i, entries.length);
-
-		cp = cp.compressed();
-		entries = cp.getEntries();
-		i = 0;
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entries[i++].fileName());
-		assertEquals(this.morph("."), entries[i++].fileName());
-		assertEquals(this.morph("C:\\jdk\\i18n.jar"), entries[i++].fileName());
-		assertEquals(this.morph("C:\\jdk\\jaws.jar"), entries[i++].fileName());
-		assertEquals(this.morph("C:\\foo\\classes"), entries[i++].fileName());
-		assertEquals(this.morph("C:\\bar\\bar.jar"), entries[i++].fileName());
-		assertEquals(i, entries.length);
-	}
-
-	public void testEntryForFileNamed() {
-		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")).entryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.fileName());
-
-		// 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")).entryForFileNamed("rt.jar");
-		assertEquals("rt.jar", entry.fileName());
-
-		// 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")).entryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.fileName());
-
-		// 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")).entryForFileNamed("rt.jar");
-		assertEquals("rt.jar", entry.fileName());
-
-		// 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")).entryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.fileName());
-
-		// 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")).entryForFileNamed("rt.jar");
-		assertEquals("rt.jar", entry.fileName());
-
-		// alone - qualified
-		entry = new Classpath(this.morph("C:\\jdk\\rt.jar")).entryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.fileName());
-
-		// alone - unqualified
-		entry = new Classpath("rt.jar").entryForFileNamed("rt.jar");
-		assertEquals("rt.jar", entry.fileName());
-
-		// 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")).entryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.fileName());
-
-		// 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")).entryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.fileName());
-
-		// 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")).entryForFileNamed("rt.jar");
-		assertEquals(this.morph("C:\\jdk\\rt.jar"), entry.fileName());
-
-		// 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")).entryForFileNamed("rt.jar");
-		assertEquals("path entry should not be found", null, entry);
-
-	}
-
-	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().classNames(), java.util.Vector.class.getName()));
-		assertTrue("File is missing from JRE class names", CollectionTools.contains(Classpath.bootClasspath().classNames(), 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, CollectionTools.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(), CollectionTools.contains(Classpath.javaExtensionDirectories(), stdExtDir));
-	}
-
-	//Commented out due to incompatibility with IBM JDK (used in Eclipse WTP Build)
-	//TODO Test should be revised to be compatible with IBM JDK
-	//	public void testJavaExtensionClasspathEntries() {
-	//		char sep = File.separatorChar;
-	//		String jdk = System.getProperty("java.version");
-	//		if (jdk.startsWith("1.4") || jdk.startsWith("1.5")) {
-	//			Collection jarNames = new ArrayList();
-	//			Classpath.Entry[] entries = Classpath.javaExtensionClasspath().getEntries();
-	//			for (int i = 0; i < entries.length; i++) {
-	//				jarNames.add(entries[i].fileName());
-	//			}
-	//			String stdExtJarName = JAVA_HOME + sep + "lib" + sep + "ext" + sep + "dnsns.jar";
-	//			assertTrue("jdk 1.4.x standard extension jar missing: " + stdExtJarName, jarNames.contains(stdExtJarName));
-	//		} else {
-	//			fail("we need to update this test for the current jdk");
-	//		}
-	//	}
-
-	//Commented out due to incompatibility with IBM JDK (used in Eclipse WTP Build)
-	//TODO Test should be revised to be compatible with IBM JDK
-	//	public void testJavaExtensionClassNames() {
-	//		String jdk = System.getProperty("java.version");
-	//		if (jdk.startsWith("1.4") || jdk.startsWith("1.5")) {
-	//			String className = "sun.net.spi.nameservice.dns.DNSNameService";
-	//			assertTrue("jdk 1.4.x standard extension class missing: " + className,
-	//					CollectionTools.contains(Classpath.javaExtensionClasspath().classNames(), className));
-	//		} 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().classNames(), className));
-		}
-	}
-
-	/**
-	 * 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 (!CollectionTools.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 (!CollectionTools.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 0279840..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/CollectionToolsTests.java
+++ /dev/null
@@ -1,1972 +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 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.List;
-import java.util.ListIterator;
-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.ReverseComparator;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-
-public class CollectionToolsTests extends TestCase {
-
-	public CollectionToolsTests(String name) {
-		super(name);
-	}
-
-	public void testAddObjectArrayObject1() {
-		Object[] a = CollectionTools.add(this.buildObjectArray1(), "twenty");
-		assertEquals(4, a.length);
-		assertTrue(CollectionTools.contains(a, "twenty"));
-		assertEquals("twenty", a[a.length-1]);
-	}
-
-	public void testAddObjectArrayObject2() {
-		String[] a = CollectionTools.add(this.buildStringArray1(), "twenty");
-		assertEquals(4, a.length);
-		assertTrue(CollectionTools.contains(a, "twenty"));
-		assertEquals("twenty", a[a.length-1]);
-	}
-
-	public void testAddObjectArrayIntObject1() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		a = CollectionTools.add(a, 2, "X");
-		assertEquals(5, a.length);
-		assertTrue(CollectionTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new Object[] { "a", "b", "X", "c", "d" }, a));
-	}
-
-	public void testAddObjectArrayIntObject2() {
-		String[] a = new String[] { "a", "b", "c", "d" };
-		a = CollectionTools.add(a, 2, "X");
-		assertEquals(5, a.length);
-		assertTrue(CollectionTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new String[] { "a", "b", "X", "c", "d" }, a));
-	}
-
-	public void testAddObjectArrayIntObjectException() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		boolean exCaught = false;
-		try {
-			a = CollectionTools.add(a, 33, "X");
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testAddCharArrayChar() {
-		char[] a = CollectionTools.add(this.buildCharArray(), 'd');
-		assertEquals(4, a.length);
-		assertTrue(CollectionTools.contains(a, 'd'));
-	}
-
-	public void testAddCharArrayIntChar() {
-		char[] a = new char[] { 'a', 'b', 'c', 'd' };
-		a = CollectionTools.add(a, 2, 'X');
-		assertEquals(5, a.length);
-		assertTrue(CollectionTools.contains(a, 'X'));
-		assertTrue(Arrays.equals(new char[] { 'a', 'b', 'X', 'c', 'd' }, a));
-	}
-
-	public void testAddIntArrayInt() {
-		int[] a = CollectionTools.add(this.buildIntArray(), 30);
-		assertEquals(4, a.length);
-		assertTrue(CollectionTools.contains(a, 30));
-	}
-
-	public void testAddIntArrayIntInt() {
-		int[] a = new int[] { 1, 2, 3, 4 };
-		a = CollectionTools.add(a, 2, 99);
-		assertEquals(5, a.length);
-		assertTrue(CollectionTools.contains(a, 99));
-		assertTrue(Arrays.equals(new int[] { 1, 2, 99, 3, 4 }, a));
-	}
-
-	public void testAddAllCollectionIterator1() {
-		List<String> l1 = this.buildStringList1();
-		List<String> l2 = this.buildStringList2();
-		Set<String> s1 = this.buildStringSet1();
-		List<String> l3 = this.buildStringList1(); // same elements as s1
-
-		assertTrue(CollectionTools.addAll(l1, l2.iterator()));
-		assertEquals(6, l1.size());
-		assertTrue(l1.containsAll(l2));
-
-		assertFalse(CollectionTools.addAll(s1, l3.iterator()));
-		assertEquals(3, s1.size());
-		assertTrue(s1.containsAll(l3));
-	}
-
-	public void testAddAllCollectionIterator2() {
-		List<Object> l1 = this.buildObjectList1();
-		List<String> l2 = this.buildStringList2();
-		Set<Object> s1 = this.buildObjectSet1();
-		List<String> l3 = this.buildStringList1(); // same elements as s1
-
-		assertTrue(CollectionTools.addAll(l1, l2.iterator()));
-		assertEquals(6, l1.size());
-		assertTrue(l1.containsAll(l2));
-
-		assertFalse(CollectionTools.addAll(s1, l3.iterator()));
-		assertEquals(3, s1.size());
-		assertTrue(s1.containsAll(l3));
-	}
-
-	public void testAddAllCollectionObjectArray1() {
-		List<String> l = this.buildStringList1();
-		String[] a = this.buildStringArray1();
-		Set<String> s = this.buildStringSet1();
-
-		assertTrue(CollectionTools.addAll(l, a));
-		assertEquals(6, l.size());
-		assertTrue(l.containsAll(CollectionTools.collection(a)));
-
-		assertFalse(CollectionTools.addAll(s, a));
-		assertEquals(3, s.size());
-		assertTrue(s.containsAll(CollectionTools.collection(a)));
-	}
-
-	public void testAddAllCollectionObjectArray2() {
-		List<Object> l = this.buildObjectList1();
-		String[] a = this.buildStringArray1();
-		Set<Object> s = this.buildObjectSet1();
-
-		assertTrue(CollectionTools.addAll(l, a));
-		assertEquals(6, l.size());
-		assertTrue(l.containsAll(CollectionTools.collection(a)));
-
-		assertFalse(CollectionTools.addAll(s, a));
-		assertEquals(3, s.size());
-		assertTrue(s.containsAll(CollectionTools.collection(a)));
-	}
-
-	public void testAddAllObjectArrayCollection1() {
-		String[] a = this.buildStringArray1();
-		Collection<String> c = this.buildStringList2();
-		String[] newArray = CollectionTools.addAll(a, c);
-
-		assertEquals(6, newArray.length);
-		assertTrue(CollectionTools.containsAll(newArray, c));
-	}
-
-	public void testAddAllObjectArrayCollection2() {
-		Object[] a = this.buildObjectArray1();
-		Collection<String> c = this.buildStringList2();
-		Object[] newArray = CollectionTools.addAll(a, c);
-
-		assertEquals(6, newArray.length);
-		assertTrue(CollectionTools.containsAll(newArray, c));
-	}
-
-	public void testAddAllObjectArrayIterator1() {
-		String[] a = this.buildStringArray1();
-		Iterator<String> i = this.buildStringList1().iterator();
-		String[] newArray = CollectionTools.addAll(a, i);
-
-		assertEquals(6, newArray.length);
-		assertTrue(CollectionTools.containsAll(newArray, this.buildStringList1()));
-	}
-
-	public void testAddAllObjectArrayIterator2() {
-		String[] a = this.buildStringArray1();
-		Iterator<Object> i = this.buildObjectList1().iterator();
-		Object[] newArray = CollectionTools.addAll(a, i);
-
-		assertEquals(6, newArray.length);
-		assertTrue(CollectionTools.containsAll(newArray, this.buildObjectList1()));
-	}
-
-	public void testAddAllObjectArrayObjectArray1() {
-		Object[] a1 = this.buildObjectArray1();
-		Object[] a2 = this.buildObjectArray2();
-		Object[] newArray = CollectionTools.addAll(a1, a2);
-
-		assertEquals(6, newArray.length);
-		assertTrue(CollectionTools.containsAll(newArray, a1));
-		assertTrue(CollectionTools.containsAll(newArray, a2));
-	}
-
-	public void testAddAllObjectArrayObjectArray2() {
-		String[] a1 = this.buildStringArray1();
-		String[] a2 = this.buildStringArray2();
-		String[] newArray = CollectionTools.addAll(a1, a2);
-
-		assertEquals(6, newArray.length);
-		assertTrue(CollectionTools.containsAll(newArray, a1));
-		assertTrue(CollectionTools.containsAll(newArray, a2));
-	}
-
-	public void testAddAllObjectArrayObjectArray3() {
-		Object[] a1 = this.buildObjectArray1();
-		String[] a2 = this.buildStringArray2();
-		Object[] newArray = CollectionTools.addAll(a1, a2);
-
-		assertEquals(6, newArray.length);
-		assertTrue(CollectionTools.containsAll(newArray, a1));
-		assertTrue(CollectionTools.containsAll(newArray, a2));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray1() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		a = CollectionTools.addAll(a, 2, new Object[] { "X", "X", "X" });
-		assertEquals(7, a.length);
-		assertTrue(CollectionTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new Object[] { "a", "b", "X", "X", "X", "c", "d" }, a));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray2() {
-		String[] a = new String[] { "a", "b", "c", "d" };
-		a = CollectionTools.addAll(a, 2, new String[] { "X", "X", "X" });
-		assertEquals(7, a.length);
-		assertTrue(CollectionTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new String[] { "a", "b", "X", "X", "X", "c", "d" }, a));
-	}
-
-	public void testAddAllObjectArrayIntObjectArray3() {
-		Object[] a = new Object[] { "a", "b", "c", "d" };
-		a = CollectionTools.addAll(a, 2, new String[] { "X", "X", "X" });
-		assertEquals(7, a.length);
-		assertTrue(CollectionTools.contains(a, "X"));
-		assertTrue(Arrays.equals(new Object[] { "a", "b", "X", "X", "X", "c", "d" }, a));
-	}
-
-	public void testAddAllCharArrayCharArray() {
-		char[] a = CollectionTools.addAll(this.buildCharArray(), new char[] { 'd', 'e' });
-		assertEquals(5, a.length);
-		assertTrue(CollectionTools.contains(a, 'd'));
-		assertTrue(CollectionTools.contains(a, 'e'));
-	}
-
-	public void testAddAllCharArrayIntCharArray() {
-		char[] a = new char[] { 'a', 'b', 'c', 'd' };
-		a = CollectionTools.addAll(a, 2, new char[] { 'X', 'X', 'X' });
-		assertEquals(7, a.length);
-		assertTrue(CollectionTools.contains(a, 'X'));
-		assertTrue(Arrays.equals(new char[] { 'a', 'b', 'X', 'X', 'X', 'c', 'd' }, a));
-	}
-
-	public void testAddAllIntArrayIntArray() {
-		int[] a = CollectionTools.addAll(this.buildIntArray(), new int[] { 30, 40 });
-		assertEquals(5, a.length);
-		assertTrue(CollectionTools.contains(a, 30));
-		assertTrue(CollectionTools.contains(a, 40));
-	}
-
-	public void testAddAllIntArrayIntIntArray() {
-		int[] a = new int[] { 1, 2, 3, 4 };
-		a = CollectionTools.addAll(a, 2, new int[] { 99, 99, 99 });
-		assertEquals(7, a.length);
-		assertTrue(CollectionTools.contains(a, 99));
-		assertTrue(Arrays.equals(new int[] { 1, 2, 99, 99, 99, 3, 4 }, a));
-	}
-
-	public void testArrayIterator() {
-		Object[] a = CollectionTools.array(this.buildStringList1().iterator());
-		assertEquals(3, a.length);
-		assertTrue(CollectionTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIteratorObjectArray1() {
-		String[] a = CollectionTools.array(this.buildStringList1().iterator(), new String[0]);
-		assertEquals(3, a.length);
-		assertTrue(CollectionTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testArrayIteratorObjectArray2() {
-		Object[] a = CollectionTools.array(this.buildStringList1().iterator(), new Object[0]);
-		assertEquals(3, a.length);
-		assertTrue(CollectionTools.containsAll(a, this.buildStringList1().iterator()));
-	}
-
-	public void testBagEnumeration1() {
-		Bag<String> b = CollectionTools.bag(this.buildStringVector1().elements());
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringVector1()));
-	}
-
-	public void testBagEnumeration2() {
-		Bag<Object> b = CollectionTools.<Object>bag(this.buildStringVector1().elements());
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringVector1()));
-	}
-
-	public void testBagIterator1() {
-		Bag<String> b = CollectionTools.bag(this.buildStringList1().iterator());
-		assertEquals(3, b.size());
-		assertTrue(b.containsAll(this.buildStringList1()));
-	}
-
-	public void testBagIterator2() {
-		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 testBagObjectArray1() {
-		Bag<String> b = CollectionTools.bag(this.buildStringArray1());
-		assertEquals(3, b.size());
-		assertTrue(CollectionTools.containsAll(b, this.buildStringArray1()));
-	}
-
-	public void testBagObjectArray2() {
-		Bag<String> b = CollectionTools.bag("foo", "bar", "baz");
-		assertEquals(3, b.size());
-		assertTrue(CollectionTools.containsAll(b, new Object[]{"foo", "bar", "baz"}));
-	}
-
-	public void testCollectionEnumeration1() {
-		Collection<String> c = CollectionTools.collection(this.buildStringVector1().elements());
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringVector1()));
-	}
-
-	public void testCollectionEnumeration2() {
-		Collection<Object> c = CollectionTools.<Object>collection(this.buildStringVector1().elements());
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringVector1()));
-	}
-
-	public void testCollectionIterator1() {
-		Collection<String> c = CollectionTools.collection(this.buildStringList1().iterator());
-		assertEquals(3, c.size());
-		assertTrue(c.containsAll(this.buildStringList1()));
-	}
-
-	public void testCollectionIterator2() {
-		Collection<Object> c = CollectionTools.<Object>collection(this.buildStringList1().iterator());
-		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, this.buildStringArray1()));
-	}
-
-	public void testContainsEnumerationObject1() {
-		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 testContainsEnumerationObject2() {
-		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 testContainsIteratorObject1() {
-		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 testContainsIteratorObject2() {
-		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));
-	}
-
-	public void testContainsObjectArrayObject() {
-		Object[] a = this.buildObjectArray1();
-		assertTrue(CollectionTools.contains(a, "one"));
-		assertFalse(CollectionTools.contains(a, null));
-		Object[] a2 = CollectionTools.add(a, null);
-		assertTrue(CollectionTools.contains(a2, null));
-	}
-
-	public void testContainsCharArrayChar() {
-		char[] a = this.buildCharArray();
-		assertTrue(CollectionTools.contains(a, 'a'));
-		assertFalse(CollectionTools.contains(a, 'z'));
-		char[] a2 = CollectionTools.add(a, 'z');
-		assertTrue(CollectionTools.contains(a2, 'z'));
-	}
-
-	public void testContainsIntArrayInt() {
-		int[] a = this.buildIntArray();
-		assertTrue(CollectionTools.contains(a, 10));
-		assertFalse(CollectionTools.contains(a, 55));
-		int[] a2 = CollectionTools.add(a, 55);
-		assertTrue(CollectionTools.contains(a2, 55));
-	}
-
-	public void testContainsAllCollectionIterator1() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1(), this.buildStringList1().iterator()));
-	}
-
-	public void testContainsAllCollectionIterator2() {
-		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 testContainsAllCollectionObjectArray1() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1(), this.buildObjectArray1()));
-	}
-
-	public void testContainsAllCollectionObjectArray2() {
-		Object[] a = new Object[] { "zero", "one", "two" };
-		assertTrue(CollectionTools.containsAll(this.buildStringList1(), a));
-	}
-
-	public void testContainsAllIteratorCollection1() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList1()));
-	}
-
-	public void testContainsAllIteratorCollection2() {
-		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 testContainsAllIteratorIterator1() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList1().iterator()));
-	}
-
-	public void testContainsAllIteratorIterator2() {
-		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 testContainsAllIteratorObjectArray() {
-		assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildObjectArray1()));
-	}
-
-	public void testContainsAllObjectArrayCollection() {
-		assertTrue(CollectionTools.containsAll(this.buildObjectArray1(), this.buildStringList1()));
-	}
-
-	public void testContainsAllObjectArrayIterator() {
-		assertTrue(CollectionTools.containsAll(this.buildObjectArray1(), this.buildStringList1().iterator()));
-	}
-
-	public void testContainsAllObjectArrayObjectArray() {
-		assertTrue(CollectionTools.containsAll(this.buildObjectArray1(), this.buildObjectArray1()));
-	}
-
-	public void testContainsAllCharArrayCharArray() {
-		assertTrue(CollectionTools.containsAll(this.buildCharArray(), this.buildCharArray()));
-	}
-
-	public void testContainsAllIntArrayIntArray() {
-		assertTrue(CollectionTools.containsAll(this.buildIntArray(), this.buildIntArray()));
-	}
-
-	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, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(-1, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, d_, e_ };
-		assertEquals(4, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(4, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(-1, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, a_, d_, e_ };
-		assertEquals(2, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(0, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(3, CollectionTools.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, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(2, CollectionTools.diffEnd(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(-1, CollectionTools.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), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(new Range(1, -1), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(new Range(0, 4), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(new Range(0, -1), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, a_, d_, e_ };
-		assertEquals(new Range(0, 2), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(new Range(0, 0), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(new Range(3, 3), CollectionTools.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), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(2, 2), CollectionTools.diffRange(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(new Range(5, -1), CollectionTools.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, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(1, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(4, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(0, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(0, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(0, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, e_, c_, d_ };
-		assertEquals(2, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(3, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(0, CollectionTools.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, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(2, CollectionTools.diffStart(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(5, CollectionTools.diffStart(array1, array2));
-	}
-
-	public void testEqualsListIteratorListIterator() {
-		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.identical(list1.listIterator(), list2.listIterator()));
-		assertTrue(CollectionTools.equals(list1.listIterator(), list2.listIterator()));
-	}
-
-	public void testGetListIteratorInt() {
-		List<String> list = this.buildStringList1();
-		String o = CollectionTools.get(list.listIterator(), 1);
-		assertEquals("one", o);
-		list.add(null);
-		o = CollectionTools.get(list.listIterator(), list.size() - 1);
-		assertNull(o);
-
-		boolean exCaught = false;
-		try {
-			CollectionTools.get(list.listIterator(), list.size());
-		} catch (IndexOutOfBoundsException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testIdenticalObjectArrayObjectArray() {
-		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(CollectionTools.identical(a1, a2));
-		a2[2] = "2000";
-		assertFalse(CollectionTools.identical(a1, a2));
-		assertTrue(Arrays.equals(a1, a2));
-	}
-
-	public void testIdenticalListIteratorListIterator() {
-		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.identical(list1.listIterator(), list2.listIterator()));
-		assertTrue(CollectionTools.equals(list1.listIterator(), list2.listIterator()));
-	}
-
-	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, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(-1, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, d_, e_ };
-		assertEquals(4, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(4, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(-1, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, a_, d_, e_ };
-		assertEquals(2, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(0, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(3, CollectionTools.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, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(2, CollectionTools.identityDiffEnd(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(-1, CollectionTools.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), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(new Range(1, -1), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(0, 4), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(new Range(0, 4), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(new Range(0, -1), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { b_, c_, a_, d_, e_ };
-		assertEquals(new Range(0, 2), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(new Range(0, 0), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(new Range(3, 3), CollectionTools.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), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(new Range(2, 2), CollectionTools.identityDiffRange(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(new Range(5, -1), CollectionTools.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, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a };
-		array2 = new String[] { a_ };
-		assertEquals(1, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(4, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(4, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(0, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[0];
-		assertEquals(0, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[0];
-		array2 = new String[0];
-		assertEquals(0, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, d, e };
-		array2 = new String[] { a_, b_, e_, c_, d_ };
-		assertEquals(2, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, c, e };
-		array2 = new String[] { a_, b_, c_, d_ };
-		assertEquals(3, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { b, c, d, e };
-		array2 = new String[] { a_, c_, d_, e_ };
-		assertEquals(0, CollectionTools.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, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, c_, d_, e_ };
-		assertEquals(2, CollectionTools.identityDiffStart(array1, array2));
-
-		array1 = new String[] { a, b, null, d, e };
-		array2 = new String[] { a_, b_, null, d_, e_ };
-		assertEquals(5, CollectionTools.identityDiffStart(array1, array2));
-	}
-
-	public void testIndexOfListIteratorObject1() {
-		List<String> list = this.buildStringList1();
-		assertEquals(1, CollectionTools.indexOf(list.listIterator(), "one"));
-		list.add(null);
-		assertEquals(list.size() - 1, CollectionTools.indexOf(list.listIterator(), null));
-	}
-
-	public void testIndexOfListIteratorObject2() {
-		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.listIterator(), one));
-		list.add(null);
-		assertEquals(list.size() - 1, CollectionTools.indexOf(list.listIterator(), null));
-	}
-
-	public void testIndexOfObjectArrayObject() {
-		Object[] a = this.buildObjectArray1();
-		assertEquals(1, CollectionTools.indexOf(a, "one"));
-		a = CollectionTools.add(a, null);
-		assertEquals(a.length - 1, CollectionTools.indexOf(a, null));
-	}
-
-	public void testIndexOfCharArrayChar() {
-		char[] a = this.buildCharArray();
-		assertEquals(1, CollectionTools.indexOf(a, 'b'));
-		a = CollectionTools.add(a, 'd');
-		assertEquals(a.length - 1, CollectionTools.indexOf(a, 'd'));
-	}
-
-	public void testIndexOfIntArrayInt() {
-		int[] a = this.buildIntArray();
-		assertEquals(1, CollectionTools.indexOf(a, 10));
-		a = CollectionTools.add(a, 30);
-		assertEquals(a.length - 1, CollectionTools.indexOf(a, 30));
-	}
-
-	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));
-	}
-
-	public void testInsertionIndexOfObjectArrayComparable() {
-		String[] a = new String[] { "A", "C", "D" };
-		assertEquals(1, CollectionTools.insertionIndexOf(a, "B"));
-
-		a = new String[] { "A", "B", "C", "D" };
-		assertEquals(2, CollectionTools.insertionIndexOf(a, "B"));
-
-		a = new String[] { "A", "B", "B", "B", "C", "D" };
-		assertEquals(4, CollectionTools.insertionIndexOf(a, "B"));
-
-		a = new String[] { "A", "B", "B", "B", "C", "D" };
-		assertEquals(6, CollectionTools.insertionIndexOf(a, "E"));
-
-		a = new String[] { "B", "B", "B", "C", "D" };
-		assertEquals(0, CollectionTools.insertionIndexOf(a, "A"));
-
-		a = new String[] { "A", "A", "B", "B", "C", "D" };
-		assertEquals(2, CollectionTools.insertionIndexOf(a, "A"));
-	}
-
-	public void testInsertionIndexOfObjectArrayObjectComparator() {
-		Comparator<String> c = new ReverseComparator<String>();
-		String[] a = new String[] { "D", "C", "A" };
-		assertEquals(2, CollectionTools.insertionIndexOf(a, "B", c));
-
-		a = new String[] { "D", "C", "B", "A" };
-		assertEquals(3, CollectionTools.insertionIndexOf(a, "B", c));
-
-		a = new String[] { "D", "C", "B", "B", "B", "A" };
-		assertEquals(5, CollectionTools.insertionIndexOf(a, "B", c));
-
-		a = new String[] { "D", "C", "B", "B", "B", "A" };
-		assertEquals(0, CollectionTools.insertionIndexOf(a, "E", c));
-
-		a = new String[] { "D", "C", "B", "B", "B" };
-		assertEquals(5, CollectionTools.insertionIndexOf(a, "A", c));
-
-		a = new String[] { "D", "C", "B", "B", "A", "A" };
-		assertEquals(6, CollectionTools.insertionIndexOf(a, "A", c));
-	}
-
-	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());
-		}
-	}
-
-	public void testLastIndexOfListIteratorObject() {
-		List<String> list = this.buildStringList1();
-		assertEquals(1, CollectionTools.lastIndexOf(list.listIterator(), "one"));
-		list.add(null);
-		assertEquals(list.size() - 1, CollectionTools.lastIndexOf(list.listIterator(), null));
-	}
-
-	public void testLastIndexOfObjectArrayObject() {
-		Object[] a = this.buildObjectArray1();
-		assertEquals(1, CollectionTools.lastIndexOf(a, "one"));
-		a = CollectionTools.add(a, null);
-		assertEquals(a.length - 1, CollectionTools.lastIndexOf(a, null));
-	}
-
-	public void testLastIndexOfCharArrayChar() {
-		char[] a = this.buildCharArray();
-		assertEquals(1, CollectionTools.lastIndexOf(a, 'b'));
-		a = CollectionTools.add(a, 'd');
-		assertEquals(a.length - 1, CollectionTools.lastIndexOf(a, 'd'));
-	}
-
-	public void testLastIndexOfIntArrayInt() {
-		int[] a = this.buildIntArray();
-		assertEquals(1, CollectionTools.lastIndexOf(a, 10));
-		a = CollectionTools.add(a, 30);
-		assertEquals(a.length - 1, CollectionTools.lastIndexOf(a, 30));
-	}
-
-	public void testListIterator1() {
-		List<String> list = CollectionTools.list(this.buildStringList1().iterator());
-		assertEquals(this.buildStringList1(), list);
-	}
-
-	public void testListIterator2() {
-		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 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());
-		}
-	}
-
-	public void testMaxCharArray() {
-		assertEquals('c', CollectionTools.max(this.buildCharArray()));
-	}
-
-	public void testMaxIntArray() {
-		assertEquals(20, CollectionTools.max(this.buildIntArray()));
-	}
-
-	public void testMinCharArray() {
-		assertEquals('a', CollectionTools.min(this.buildCharArray()));
-	}
-
-	public void testMinIntArray() {
-		assertEquals(0, CollectionTools.min(this.buildIntArray()));
-	}
-
-	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 = CollectionTools.removeAll(a1, a2);
-		assertTrue(Arrays.equals(new String[] { "A", "A", "C", "C", "D", "D", "F", "F" }, 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' }, CollectionTools.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 }, CollectionTools.removeAll(a1, a2)));
-	}
-
-	public void testRemoveObjectArrayObject1() {
-		Object[] a = this.buildObjectArray1();
-		a = CollectionTools.add(a, "three");
-		a = CollectionTools.add(a, "four");
-		a = CollectionTools.add(a, "five");
-
-		assertEquals(6, a.length);
-		assertTrue(CollectionTools.contains(a, "three"));
-		a = CollectionTools.remove(a, "three");
-		assertEquals(5, a.length);
-		assertFalse(CollectionTools.contains(a, "three"));
-		assertTrue(CollectionTools.contains(a, "four"));
-		assertTrue(CollectionTools.contains(a, "five"));
-	}
-
-	public void testRemoveObjectArrayObject2() {
-		String[] a = this.buildStringArray1();
-		a = CollectionTools.add(a, "three");
-		a = CollectionTools.add(a, "four");
-		a = CollectionTools.add(a, "five");
-
-		assertEquals(6, a.length);
-		assertTrue(CollectionTools.contains(a, "three"));
-		a = CollectionTools.remove(a, "three");
-		assertEquals(5, a.length);
-		assertFalse(CollectionTools.contains(a, "three"));
-		assertTrue(CollectionTools.contains(a, "four"));
-		assertTrue(CollectionTools.contains(a, "five"));
-	}
-
-	public void testRemoveCharArrayChar() {
-		char[] a = this.buildCharArray();
-		a = CollectionTools.add(a, 'd');
-		a = CollectionTools.add(a, 'e');
-		a = CollectionTools.add(a, 'f');
-
-		assertEquals(6, a.length);
-		assertTrue(CollectionTools.contains(a, 'd'));
-		a = CollectionTools.remove(a, 'd');
-		assertEquals(5, a.length);
-		assertFalse(CollectionTools.contains(a, 'd'));
-		assertTrue(CollectionTools.contains(a, 'e'));
-		assertTrue(CollectionTools.contains(a, 'f'));
-	}
-
-	public void testRemoveIntArrayInt() {
-		int[] a = this.buildIntArray();
-		a = CollectionTools.add(a, 30);
-		a = CollectionTools.add(a, 40);
-		a = CollectionTools.add(a, 50);
-
-		assertEquals(6, a.length);
-		assertTrue(CollectionTools.contains(a, 30));
-		a = CollectionTools.remove(a, 30);
-		assertEquals(5, a.length);
-		assertFalse(CollectionTools.contains(a, 30));
-		assertTrue(CollectionTools.contains(a, 40));
-		assertTrue(CollectionTools.contains(a, 50));
-	}
-
-	public void testRemoveAllCollectionIterator1() {
-		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);
-	}
-
-	public void testRemoveAllCollectionIterator2() {
-		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, new ArrayIterator<String>(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, new ArrayIterator<String>(a)));
-	}
-
-	public void testRemoveAllCollectionIterator3() {
-		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" };
-		assertTrue(CollectionTools.removeAll(c, new ArrayIterator<String>(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, new ArrayIterator<String>(a)));
-	}
-
-	public void testRemoveAllCollectionObjectArray1() {
-		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);
-	}
-
-	public void testRemoveAllCollectionObjectArray2() {
-		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, 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, a));
-	}
-
-	public void testRemoveAllCollectionObjectArray3() {
-		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, 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, a));
-	}
-
-	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());
-	}
-
-	public void testRemoveAllOccurrencesObjectArrayObject() {
-		String[] a = this.buildStringArray1();
-		assertEquals(3, a.length);
-		a = CollectionTools.removeAllOccurrences(a, "three");
-		assertEquals(3, a.length);
-		a = CollectionTools.removeAllOccurrences(a, "two");
-		assertEquals(2, a.length);
-		a = CollectionTools.removeAllOccurrences(a, "two");
-		assertEquals(2, a.length);
-
-		a = CollectionTools.add(a, "five");
-		a = CollectionTools.add(a, "five");
-		a = CollectionTools.add(a, "five");
-		assertEquals(5, a.length);
-		a = CollectionTools.removeAllOccurrences(a, "five");
-		assertEquals(2, a.length);
-		a = CollectionTools.removeAllOccurrences(a, "five");
-		assertEquals(2, a.length);
-
-		a = CollectionTools.add(a, null);
-		a = CollectionTools.add(a, null);
-		a = CollectionTools.add(a, null);
-		assertEquals(5, a.length);
-		a = CollectionTools.removeAllOccurrences(a, null);
-		assertEquals(2, a.length);
-		a = CollectionTools.removeAllOccurrences(a, null);
-		assertEquals(2, a.length);
-	}
-
-	public void testRemoveAllOccurrencesCharArrayChar() {
-		char[] a = this.buildCharArray();
-		assertEquals(3, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 'd');
-		assertEquals(3, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 'b');
-		assertEquals(2, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 'b');
-		assertEquals(2, a.length);
-
-		a = CollectionTools.add(a, 'g');
-		a = CollectionTools.add(a, 'g');
-		a = CollectionTools.add(a, 'g');
-		assertEquals(5, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 'g');
-		assertEquals(2, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 'g');
-		assertEquals(2, a.length);
-	}
-
-	public void testRemoveAllOccurrencesIntArrayInt() {
-		int[] a = this.buildIntArray();
-		assertEquals(3, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 55);
-		assertEquals(3, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 10);
-		assertEquals(2, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 10);
-		assertEquals(2, a.length);
-
-		a = CollectionTools.add(a, 77);
-		a = CollectionTools.add(a, 77);
-		a = CollectionTools.add(a, 77);
-		assertEquals(5, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 77);
-		assertEquals(2, a.length);
-		a = CollectionTools.removeAllOccurrences(a, 77);
-		assertEquals(2, a.length);
-	}
-
-	public void testRemoveElementAtIndexObjectArrayInt() {
-		String[] a = new String[] { "A", "B", "A", "C", "A", "D" };
-		a = CollectionTools.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 = CollectionTools.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 = CollectionTools.removeElementAtIndex(a, 3);
-		assertTrue(Arrays.equals(new int[] { 8, 6, 7, 2, 11 }, a));
-	}
-
-	public void testReplaceAllObjectArray1() {
-		Object[] a = new Object[] { "A", "B", "A", "C", "A", "D" };
-		a = CollectionTools.replaceAll(a, "A", "Z");
-		assertTrue(Arrays.equals(new Object[] { "Z", "B", "Z", "C", "Z", "D" }, a));
-	}
-
-	public void testReplaceAllObjectArray2() {
-		String[] a = new String[] { "A", "B", "A", "C", "A", "D" };
-		a = CollectionTools.replaceAll(a, "A", "Z");
-		assertTrue(Arrays.equals(new String[] { "Z", "B", "Z", "C", "Z", "D" }, a));
-	}
-
-	public void testReplaceAllCharArray() {
-		char[] a = new char[] { 'A', 'B', 'A', 'C', 'A', 'D' };
-		a = CollectionTools.replaceAll(a, 'A', 'Z');
-		assertTrue(Arrays.equals(new char[] { 'Z', 'B', 'Z', 'C', 'Z', 'D' }, a));
-	}
-
-	public void testReplaceAllIntArray() {
-		int[] a = new int[] { 0, 1, 0, 7, 0, 99 };
-		a = CollectionTools.replaceAll(a, 0, 13);
-		assertTrue(Arrays.equals(new int[] { 13, 1, 13, 7, 13, 99 }, a));
-	}
-
-	public void testRetainAllCollectionIterator1() {
-		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 testRetainAllCollectionIterator2() {
-		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");
-		
-		assertTrue(CollectionTools.retainAll(c1, c3.iterator()));
-		assertEquals(0, c1.size());
-		assertFalse(c1.contains("one"));
-		assertFalse(c1.contains("two"));
-		assertFalse(c1.contains("three"));
-	}
-
-	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 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" }, CollectionTools.retainAll(a1, a2)));
-	}
-
-	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' }, CollectionTools.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 }, CollectionTools.retainAll(a1, a2)));
-	}
-
-	public void testReverseObjectArray1() {
-		Object[] a = this.buildObjectArray1();
-		a = CollectionTools.reverse(a);
-		assertEquals("two", a[0]);
-		assertEquals("one", a[1]);
-		assertEquals("zero", a[2]);
-	}
-
-	public void testReverseObjectArray2() {
-		String[] a = this.buildStringArray1();
-		a = CollectionTools.reverse(a);
-		assertEquals("two", a[0]);
-		assertEquals("one", a[1]);
-		assertEquals("zero", a[2]);
-	}
-
-	public void testReverseCharArray() {
-		char[] a = this.buildCharArray();
-		a = CollectionTools.reverse(a);
-		assertEquals('c', a[0]);
-		assertEquals('b', a[1]);
-		assertEquals('a', a[2]);
-	}
-
-	public void testReverseIntArray() {
-		int[] a = this.buildIntArray();
-		a = CollectionTools.reverse(a);
-		assertEquals(20, a[0]);
-		assertEquals(10, a[1]);
-		assertEquals(0, a[2]);
-	}
-
-	public void testReverseListIterator1() {
-		List<String> actual = CollectionTools.reverseList(this.buildStringList1().iterator());
-		List<String> expected = this.buildStringList1();
-		Collections.reverse(expected);
-		assertEquals(expected, actual);
-	}
-
-	public void testReverseListIterator2() {
-		List<Object> actual = CollectionTools.<Object>reverseList(this.buildStringList1().iterator());
-		List<Object> expected = this.buildObjectList1();
-		Collections.reverse(expected);
-		assertEquals(expected, actual);
-	}
-
-	public void testRotateObjectArray() {
-		String[] a = this.buildStringArray1();
-		a = CollectionTools.rotate(a);
-		assertEquals("two", a[0]);
-		assertEquals("zero", a[1]);
-		assertEquals("one", a[2]);
-	}
-
-	public void testRotateObjectArrayInt() {
-		String[] a = this.buildStringArray1();
-		a = CollectionTools.rotate(a, 2);
-		assertEquals("one", a[0]);
-		assertEquals("two", a[1]);
-		assertEquals("zero", a[2]);
-	}
-
-	public void testRotateCharArray() {
-		char[] a = this.buildCharArray();
-		a = CollectionTools.rotate(a);
-		assertEquals('c', a[0]);
-		assertEquals('a', a[1]);
-		assertEquals('b', a[2]);
-	}
-
-	public void testRotateCharArrayInt() {
-		char[] a = this.buildCharArray();
-		a = CollectionTools.rotate(a, 2);
-		assertEquals('b', a[0]);
-		assertEquals('c', a[1]);
-		assertEquals('a', a[2]);
-	}
-
-	public void testRotateIntArray() {
-		int[] a = this.buildIntArray();
-		a = CollectionTools.rotate(a);
-		assertEquals(20, a[0]);
-		assertEquals(0, a[1]);
-		assertEquals(10, a[2]);
-	}
-
-	public void testRotateIntArrayInt() {
-		int[] a = this.buildIntArray();
-		a = CollectionTools.rotate(a, 2);
-		assertEquals(10, a[0]);
-		assertEquals(20, a[1]);
-		assertEquals(0, a[2]);
-	}
-
-	public void testSetIterator1() {
-		assertEquals(this.buildStringSet1(), CollectionTools.set(this.buildStringSet1().iterator()));
-	}
-
-	public void testSetIterator2() {
-		Set<String> set1 = new HashSet<String>();
-		set1.add("0");
-		set1.add("1");
-		set1.add("2");
-		set1.add("3");
-
-		Set<Object> set2 = CollectionTools.<Object>set(set1.iterator());
-		assertEquals(set1, set2);
-	}
-
-	public void testSetObjectArray() {
-		assertEquals(this.buildStringSet1(), CollectionTools.set(this.buildStringSet1().toArray()));
-	}
-
-	public void testShuffleObjectArray() {
-		String[] array1 = this.buildStringArray1();
-		String[] array2 = CollectionTools.shuffle(this.buildStringArray1());
-		assertEquals(array1.length, array2.length);
-		assertTrue(CollectionTools.containsAll(array1, array2));
-	}
-
-	public void testShuffleCharArray() {
-		char[] array1 = this.buildCharArray();
-		char[] array2 = CollectionTools.shuffle(this.buildCharArray());
-		assertEquals(array1.length, array2.length);
-		assertTrue(CollectionTools.containsAll(array1, array2));
-	}
-
-	public void testShuffleIntArray() {
-		int[] array1 = this.buildIntArray();
-		int[] array2 = CollectionTools.shuffle(this.buildIntArray());
-		assertEquals(array1.length, array2.length);
-		assertTrue(CollectionTools.containsAll(array1, array2));
-	}
-
-	public void testSingletonIterator1() {
-		Iterator<String> stream = CollectionTools.singletonIterator("foo");
-		assertTrue(stream.hasNext());
-		assertEquals("foo", stream.next());
-	}
-
-	public void testSingletonIterator2() {
-		Iterator<Object> stream = CollectionTools.<Object>singletonIterator("foo");
-		assertTrue(stream.hasNext());
-		assertEquals("foo", stream.next());
-	}
-
-	public void testSingletonIterator3() {
-		Iterator<Object> stream = CollectionTools.singletonIterator((Object) "foo");
-		assertTrue(stream.hasNext());
-		assertEquals("foo", stream.next());
-	}
-
-	public void testSizeIterator() {
-		assertEquals(3, CollectionTools.size(this.buildObjectList1().iterator()));
-	}
-
-	public void testSortedSetIterator1() {
-		assertEquals(this.buildSortedStringSet1(), CollectionTools.set(this.buildSortedStringSet1().iterator()));
-	}
-
-	public void testSortedSetIterator2() {
-		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 testSortedSetObjectArray() {
-		assertEquals(this.buildSortedStringSet1(), CollectionTools.set(this.buildSortedStringSet1().toArray()));
-	}
-
-	public void testSwapObjectArray() {
-		String[] a = this.buildStringArray1();
-		a = CollectionTools.swap(a, 1, 2);
-		assertEquals("zero", a[0]);
-		assertEquals("two", a[1]);
-		assertEquals("one", a[2]);
-	}
-
-	public void testSwapCharArray() {
-		char[] a = this.buildCharArray();
-		a = CollectionTools.swap(a, 1, 2);
-		assertEquals('a', a[0]);
-		assertEquals('c', a[1]);
-		assertEquals('b', a[2]);
-	}
-
-	public void testSwapIntArray() {
-		int[] a = this.buildIntArray();
-		a = CollectionTools.swap(a, 1, 2);
-		assertEquals(0, a[0]);
-		assertEquals(20, a[1]);
-		assertEquals(10, a[2]);
-	}
-
-	public void testRemoveDuplicateElementsList() {
-		List<String> list = this.buildStringVector1();
-		list.add("zero");
-		list.add("zero");
-		list.add("two");
-		list.add("zero");
-		list = 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 testRemoveDuplicateElementsObjectArray1() {
-		List<String> list = this.buildStringVector1();
-		list.add("zero");
-		list.add("zero");
-		list.add("two");
-		list.add("zero");
-		String[] array = CollectionTools.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 testRemoveDuplicateElementsObjectArray2() {
-		List<String> list = this.buildStringVector1();
-		list.add("zero");
-		list.add("zero");
-		list.add("two");
-		list.add("zero");
-		String[] array = CollectionTools.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 testVectorIterator1() {
-		Vector<String> v = CollectionTools.vector(this.buildStringList1().iterator());
-		assertEquals(3, v.size());
-		assertTrue(v.containsAll(this.buildStringList1()));
-	}
-
-	public void testVectorIterator2() {
-		Vector<Object> v = CollectionTools.<Object>vector(this.buildStringList1().iterator());
-		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()));
-	}
-
-	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 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/FileToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/FileToolsTests.java
deleted file mode 100644
index adcccf0..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/FileToolsTests.java
+++ /dev/null
@@ -1,594 +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 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.ClassTools;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.FileTools;
-
-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);
-	}
-
-	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);
-	}
-
-	private boolean isExecutingOnWindows() {
-		return this.isExecutingOn("Windows");
-	}
-
-	//	private boolean isExecutingOnLinux() {
-	//		return this.isExecutingOn("Linux");
-	//	}
-	//
-	private boolean isExecutingOn(String osName) {
-		return System.getProperty("os.name").indexOf(osName) != -1;
-	}
-
-	public void testPathFiles() {
-		File[] expected;
-		File[] actual;
-
-		if (this.isExecutingOnWindows()) {
-			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[]) ClassTools.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) ClassTools.executeStaticMethod(FileTools.class, "relativeParentFile", int.class, new Integer(len));
-	}
-
-	public void testConvertToRelativeFile() {
-		String prefix = this.isExecutingOnWindows() ? "C:" : "";
-		File file;
-		File dir;
-		File relativeFile;
-
-		if (this.isExecutingOnWindows()) {
-			// 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 = this.isExecutingOnWindows() ? "C:" : "";
-		File file;
-		File dir;
-		File absoluteFile;
-
-		if (this.isExecutingOnWindows()) {
-			// 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 = this.isExecutingOnWindows();
-		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 = this.isExecutingOnWindows();
-		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 (this.isExecutingOnWindows()) {
-			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 (this.isExecutingOnWindows()) {
-			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 (this.isExecutingOnWindows()) {
-			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 (this.isExecutingOnWindows()) {
-			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(ClassTools.shortClassNameForObject(this) + "." + 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/HashBagTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/HashBagTests.java
deleted file mode 100644
index 51120c9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/HashBagTests.java
+++ /dev/null
@@ -1,448 +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 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.Bag;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.HashBag;
-
-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("missing element", 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("IllegalArgumentException not thrown", exCaught);
-
-		exCaught = false;
-		try {
-			this.bag = new HashBag<String>(20, -0.66f);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalArgumentException not thrown", exCaught);
-	}
-
-	public void testAdd() {
-		// the other adds took place in setUp
-		assertTrue("incorrect return value", this.bag.add("five"));
-
-		assertTrue("missing element", this.bag.contains("one"));
-		assertTrue("missing element", this.bag.contains("two"));
-		assertTrue("missing element", this.bag.contains("three"));
-		assertTrue("missing element", this.bag.contains("four"));
-		assertTrue("missing element", this.bag.contains("five"));
-	}
-
-	public void testAddAll() {
-		Collection<String> c = this.buildCollection();
-		assertTrue("incorrect return value", this.bag.addAll(c));
-		for (String s : c) {
-			assertTrue("missing element", this.bag.contains(s));
-		}
-	}
-
-	public void testClear() {
-		assertTrue("missing element", this.bag.contains("one"));
-		assertTrue("missing element", this.bag.contains("two"));
-		assertTrue("missing element", this.bag.contains("three"));
-		assertTrue("missing element", this.bag.contains("four"));
-		assertTrue("missing element", this.bag.contains(null));
-		assertEquals("invalid size", 11, this.bag.size());
-		this.bag.clear();
-		assertFalse("malingering element", this.bag.contains("one"));
-		assertFalse("malingering element", this.bag.contains("two"));
-		assertFalse("malingering element", this.bag.contains("three"));
-		assertFalse("malingering element", this.bag.contains("four"));
-		assertFalse("malingering element", this.bag.contains(null));
-		assertEquals("invalid size", 0, this.bag.size());
-	}
-
-	public void testClone() {
-		Bag<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("missing element", this.bag.contains(null));
-		assertTrue("missing element", this.bag.contains("one"));
-		assertTrue("missing element", this.bag.contains("two"));
-		assertTrue("missing element", this.bag.contains("three"));
-		assertTrue("missing element", this.bag.contains("four"));
-		assertTrue("missing element", this.bag.contains(new String("four")));
-		assertTrue("missing element", this.bag.contains("fo" + "ur"));
-		assertFalse("element found", 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("missing element(s)", this.bag.containsAll(c));
-	}
-
-	public void testCount() {
-		assertEquals("bad count", 0, this.bag.count("zero"));
-		assertEquals("bad count", 1, this.bag.count("one"));
-		assertEquals("bad count", 2, this.bag.count("two"));
-		assertEquals("bad count", 3, this.bag.count("three"));
-		assertEquals("bad count", 4, this.bag.count("four"));
-		assertEquals("bad count", 0, this.bag.count("five"));
-	}
-
-	public void testEquals() {
-		Bag<String> bag2 = this.buildBag();
-		assertEquals("bags are not equal", this.bag, bag2);
-		bag2.add("five");
-		assertFalse("bags are equal", this.bag.equals(bag2));
-		Collection<String> c = new ArrayList<String>(this.bag);
-		assertFalse("bags are not equal to collections", this.bag.equals(c));
-	}
-
-	public void testHashCode() {
-		Bag<String> bag2 = this.buildBag();
-		assertEquals("bad hash code", this.bag.hashCode(), bag2.hashCode());
-	}
-
-	public void testIsEmpty() {
-		assertFalse("bag is empty", this.bag.isEmpty());
-		this.bag.clear();
-		assertTrue("bag is not empty", this.bag.isEmpty());
-		this.bag.add("foo");
-		assertFalse("bag is empty", this.bag.isEmpty());
-	}
-
-	public void testEmptyIterator() {
-		this.bag.clear();
-		Iterator<String> iterator = this.bag.iterator();
-		assertFalse("iterator is not empty", 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 is empty", iterator.hasNext());
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals("invalid hasNext() loop", 11, i);
-		assertFalse("iterator should be empty now", 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("iterator did not remove element", 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 is empty", iterator.hasNext());
-		while (iterator.hasNext()) {
-			iterator.next();
-			i++;
-		}
-		assertEquals("invalid hasNext() loop", 5, i);
-		assertFalse("iterator should be empty now", iterator.hasNext());
-
-		boolean exCaught = false;
-		Object element = null;
-		try {
-			element = iterator.next();
-		} catch (NoSuchElementException ex) {
-			exCaught = true;
-		}
-		assertTrue("NoSuchElementException not thrown: " + element, exCaught);
-
-		// start over
-		iterator = this.bag.uniqueIterator();
-		Object next = null;
-		while (iterator.hasNext() && !"four".equals(next)) {
-			next = iterator.next();
-		}
-		iterator.remove();
-		assertEquals("iterator did not remove all copies of element", 7, this.bag.size());
-
-		exCaught = false;
-		try {
-			iterator.remove();
-		} catch (IllegalStateException ex) {
-			exCaught = true;
-		}
-		assertTrue("IllegalStateException not thrown", exCaught);
-
-		// start over
-		iterator = this.bag.uniqueIterator();
-		this.bag.add("five");
-		exCaught = false;
-		try {
-			iterator.next();
-		} catch (ConcurrentModificationException ex) {
-			exCaught = true;
-		}
-		assertTrue("ConcurrentModificationException not thrown", 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);
-		assertTrue("WARNING - poor load factor: " + loadFactor, loadFactor > 0.20);
-		assertTrue("WARNING - poor load factor: " + loadFactor, loadFactor < 0.75);
-	}
-
-	public void testRemove() {
-		assertTrue("incorrect return value", this.bag.remove("one"));
-		assertFalse("element still present", this.bag.contains("one"));
-		assertFalse("incorrect return value", this.bag.remove("one"));
-
-		assertTrue("incorrect return value", this.bag.remove("two"));
-		assertTrue("incorrect return value", this.bag.remove("two"));
-		assertFalse("element still present", this.bag.contains("one"));
-		assertFalse("incorrect return value", this.bag.remove("one"));
-	}
-
-	public void testRemoveAll() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("one");
-		c.add("three");
-		assertTrue("incorrect return value", this.bag.removeAll(c));
-		assertFalse("element still present", this.bag.contains("one"));
-		assertFalse("element still present", this.bag.contains("three"));
-		assertFalse("incorrect return value", this.bag.remove("one"));
-		assertFalse("incorrect return value", this.bag.remove("three"));
-		assertFalse("incorrect return value", this.bag.removeAll(c));
-	}
-
-	public void testRetainAll() {
-		Collection<String> c = new ArrayList<String>();
-		c.add("one");
-		c.add("three");
-		assertTrue("incorrect return value", this.bag.retainAll(c));
-		assertTrue("element removed", this.bag.contains("one"));
-		assertTrue("element removed", this.bag.contains("three"));
-		assertFalse("element still present", this.bag.contains("two"));
-		assertFalse("element still present", this.bag.contains("four"));
-		assertFalse("incorrect return value", this.bag.remove("two"));
-		assertFalse("incorrect return value", this.bag.remove("four"));
-		assertFalse("incorrect return value", this.bag.retainAll(c));
-	}
-
-	public void testSize() {
-		assertTrue("incorrect size", 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("incorrect size", 16, this.bag.size());
-	}
-
-	public void testSerialization() throws Exception {
-		Bag<String> bag2 = TestTools.serialize(this.bag);
-
-		assertTrue("same object?", this.bag != bag2);
-		assertEquals("incorrect size", 11, bag2.size());
-		assertEquals("unequal bag", this.bag, bag2);
-		// look for similar elements
-		assertTrue("missing element", bag2.contains(null));
-		assertTrue("missing element", bag2.contains("one"));
-		assertTrue("missing element", bag2.contains("two"));
-		assertTrue("missing element", bag2.contains("three"));
-		assertTrue("missing element", 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("bad element count", 1, nullCount);
-		assertEquals("bad element count", 1, oneCount);
-		assertEquals("bad element count", 2, twoCount);
-		assertEquals("bad element count", 3, threeCount);
-		assertEquals("bad element count", 4, fourCount);
-	}
-
-	public void testToArray() {
-		Object[] a = this.bag.toArray();
-		assertEquals("incorrect length", 11, a.length);
-		assertTrue("missing element", CollectionTools.contains(a, null));
-		assertTrue("missing element", CollectionTools.contains(a, "one"));
-		assertTrue("missing element", CollectionTools.contains(a, "two"));
-		assertTrue("missing element", CollectionTools.contains(a, "three"));
-		assertTrue("missing element", CollectionTools.contains(a, "four"));
-	}
-
-	public void testToArrayObjectArray() {
-		String[] a = new String[12];
-		a[11] = "not null";
-		String[] b = this.bag.toArray(a);
-		assertEquals("different array", a, b);
-		assertEquals("incorrect length", 12, a.length);
-		assertTrue("missing element", CollectionTools.contains(a, null));
-		assertTrue("missing element", CollectionTools.contains(a, "one"));
-		assertTrue("missing element", CollectionTools.contains(a, "two"));
-		assertTrue("missing element", CollectionTools.contains(a, "three"));
-		assertTrue("missing element", CollectionTools.contains(a, "four"));
-		assertTrue("missing null element", a[11] == null);
-	}
-
-	public void testToString() {
-		String s = this.bag.toString();
-		assertTrue("invalid string prefix", s.startsWith("["));
-		assertTrue("invalid string suffix", 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("missing element toString()", s.indexOf("one") != -1);
-		assertTrue("missing element toString()", s.indexOf("two") != -1);
-		assertTrue("missing element toString()", s.indexOf("three") != -1);
-		assertTrue("missing element toString()", s.indexOf("four") != -1);
-		assertTrue("missing element toString()", 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 c962132..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/IndentingPrintWriterTests.java
+++ /dev/null
@@ -1,107 +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 java.io.StringWriter;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.IndentingPrintWriter;
-
-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/JDBCTypeTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JDBCTypeTests.java
deleted file mode 100644
index 40f152d..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JDBCTypeTests.java
+++ /dev/null
@@ -1,66 +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 java.sql.Types;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.JDBCType;
-
-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.getName());
-
-		jdbcType = JDBCType.type(Types.INTEGER);
-		assertEquals("INTEGER", jdbcType.getName());
-	}
-
-	public void testCode() {
-		JDBCType jdbcType;
-		jdbcType = JDBCType.type(Types.VARCHAR);
-		assertEquals(Types.VARCHAR, jdbcType.getCode());
-
-		jdbcType = JDBCType.type(Types.INTEGER);
-		assertEquals(Types.INTEGER, jdbcType.getCode());
-	}
-
-	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 1a0c0b8..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JavaTypeTests.java
+++ /dev/null
@@ -1,250 +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.JavaType;
-
-public class JavaTypeTests extends TestCase {
-
-	public JavaTypeTests(String name) {
-		super(name);
-	}
-
-	public void testInvalidElementTypeNull() throws Exception {
-		boolean exCaught = false;
-		try {
-			JavaType javaType = new JavaType(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 JavaType("", 0);
-			fail("invalid JavaType: " + javaType);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testInvalidElementTypeArray() throws Exception {
-		boolean exCaught = false;
-		try {
-			JavaType javaType = new JavaType(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 JavaType(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 JavaType(void.class.getName(), 2);
-			fail("invalid JavaType: " + javaType);
-		} catch (IllegalArgumentException ex) {
-			exCaught = true;
-		}
-		assertTrue(exCaught);
-	}
-
-	public void testElementTypeName() throws Exception {
-		JavaType javaType;
-		javaType = new JavaType(java.lang.Object.class);
-		assertEquals("java.lang.Object", javaType.getElementTypeName());
-
-		javaType = new JavaType(java.lang.Object[].class);
-		assertEquals("java.lang.Object", javaType.getElementTypeName());
-
-		javaType = new JavaType(int.class);
-		assertEquals("int", javaType.getElementTypeName());
-
-		javaType = new JavaType(int[].class);
-		assertEquals("int", javaType.getElementTypeName());
-
-		javaType = new JavaType(void.class);
-		assertEquals("void", javaType.getElementTypeName());
-
-		javaType = new JavaType(java.util.Map.Entry.class);
-		assertEquals("java.util.Map$Entry", javaType.getElementTypeName());
-
-		javaType = new JavaType(java.util.Map.Entry[][].class);
-		assertEquals("java.util.Map$Entry", javaType.getElementTypeName());
-	}
-
-	public void testArrayDepth() throws Exception {
-		JavaType javaType;
-		javaType = new JavaType(java.lang.Object.class);
-		assertEquals(0, javaType.getArrayDepth());
-
-		javaType = new JavaType(java.lang.Object[].class);
-		assertEquals(1, javaType.getArrayDepth());
-
-		javaType = new JavaType(int.class);
-		assertEquals(0, javaType.getArrayDepth());
-
-		javaType = new JavaType(int[].class);
-		assertEquals(1, javaType.getArrayDepth());
-
-		javaType = new JavaType(void.class);
-		assertEquals(0, javaType.getArrayDepth());
-
-		javaType = new JavaType(java.util.Map.Entry.class);
-		assertEquals(0, javaType.getArrayDepth());
-
-		javaType = new JavaType(java.util.Map.Entry[][].class);
-		assertEquals(2, javaType.getArrayDepth());
-	}
-
-	public void testIsArray() throws Exception {
-		JavaType javaType;
-		javaType = new JavaType(java.lang.Object.class);
-		assertFalse(javaType.isArray());
-
-		javaType = new JavaType(java.lang.Object[].class);
-		assertTrue(javaType.isArray());
-
-		javaType = new JavaType(int.class);
-		assertFalse(javaType.isArray());
-
-		javaType = new JavaType(int[].class);
-		assertTrue(javaType.isArray());
-
-		javaType = new JavaType(void.class);
-		assertFalse(javaType.isArray());
-
-		javaType = new JavaType(java.util.Map.Entry.class);
-		assertFalse(javaType.isArray());
-
-		javaType = new JavaType(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 JavaType(javaClass);
-		assertEquals(javaClass, javaType.javaClass());
-	}
-
-	public void testJavaClassName() throws Exception {
-		JavaType javaType;
-		javaType = new JavaType(java.lang.Object.class);
-		assertEquals("java.lang.Object", javaType.javaClassName());
-
-		javaType = new JavaType(java.lang.Object[].class);
-		assertEquals("[Ljava.lang.Object;", javaType.javaClassName());
-
-		javaType = new JavaType(int.class);
-		assertEquals("int", javaType.javaClassName());
-
-		javaType = new JavaType(int[].class);
-		assertEquals("[I", javaType.javaClassName());
-
-		javaType = new JavaType(void.class);
-		assertEquals("void", javaType.javaClassName());
-
-		javaType = new JavaType(java.util.Map.Entry.class);
-		assertEquals("java.util.Map$Entry", javaType.javaClassName());
-
-		javaType = new JavaType(java.util.Map.Entry[][].class);
-		assertEquals("[[Ljava.util.Map$Entry;", javaType.javaClassName());
-	}
-
-	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 JavaType(javaClass);
-		assertTrue(javaType.describes(javaClass));
-	}
-
-	public void testDeclaration() throws Exception {
-		JavaType javaType;
-		javaType = new JavaType(java.lang.Object.class);
-		assertEquals("java.lang.Object", javaType.declaration());
-
-		javaType = new JavaType(java.lang.Object[].class);
-		assertEquals("java.lang.Object[]", javaType.declaration());
-
-		javaType = new JavaType(int.class);
-		assertEquals("int", javaType.declaration());
-
-		javaType = new JavaType(int[].class);
-		assertEquals("int[]", javaType.declaration());
-
-		javaType = new JavaType(void.class);
-		assertEquals("void", javaType.declaration());
-
-		javaType = new JavaType(java.util.Map.Entry.class);
-		assertEquals("java.util.Map.Entry", javaType.declaration());
-
-		javaType = new JavaType(java.util.Map.Entry[][].class);
-		assertEquals("java.util.Map.Entry[][]", javaType.declaration());
-	}
-
-	public void testIsPrimitive() throws Exception {
-		JavaType javaType;
-		javaType = new JavaType(java.lang.Object.class);
-		assertFalse(javaType.isPrimitive());
-
-		javaType = new JavaType(java.lang.Object[].class);
-		assertFalse(javaType.isPrimitive());
-
-		javaType = new JavaType(int.class);
-		assertTrue(javaType.isPrimitive());
-
-		javaType = new JavaType(int[].class);
-		assertFalse(javaType.isPrimitive());
-
-		javaType = new JavaType(void.class);
-		assertTrue(javaType.isPrimitive());
-
-		javaType = new JavaType(java.util.Map.Entry.class);
-		assertFalse(javaType.isPrimitive());
-
-		javaType = new JavaType(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 82143f3..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/JptUtilityTests.java
+++ /dev/null
@@ -1,49 +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.Test;
-import junit.framework.TestSuite;
-import org.eclipse.jpt.utility.internal.ClassTools;
-import org.eclipse.jpt.utility.tests.internal.iterators.JptUtilityIteratorsTests;
-
-/**
- * decentralize test creation code
- */
-public class JptUtilityTests {
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ClassTools.packageNameFor(JptUtilityTests.class));
-
-		suite.addTest(JptUtilityIteratorsTests.suite());
-
-		suite.addTestSuite(BitToolsTests.class);
-		suite.addTestSuite(ClasspathTests.class);
-		suite.addTestSuite(ClassToolsTests.class);
-		suite.addTestSuite(CollectionToolsTests.class);
-		suite.addTestSuite(FileToolsTests.class);
-		suite.addTestSuite(HashBagTests.class);
-		suite.addTestSuite(IndentingPrintWriterTests.class);
-		suite.addTestSuite(JavaTypeTests.class);
-		suite.addTestSuite(JDBCTypeTests.class);
-		suite.addTestSuite(NameToolsTests.class);
-		suite.addTestSuite(ReverseComparatorTests.class);
-		suite.addTestSuite(StringToolsTests.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/NameToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/NameToolsTests.java
deleted file mode 100644
index 164fa49..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/NameToolsTests.java
+++ /dev/null
@@ -1,214 +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 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;
-
-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 testUniqueJavaNameForCollection() {
-		Collection<String> strings = new ArrayList<String>();
-		strings.add("Oracle");
-		strings.add("Oracle");
-		strings.add("Oracle2");
-		strings.add("Oracle1");
-
-		assertEquals("private2", NameTools.uniqueJavaNameFor("private", strings.iterator()));
-		assertEquals("class2", NameTools.uniqueJavaNameFor("class", 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("_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("$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);
-
-	}
-
-}
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/ReverseComparatorTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReverseComparatorTests.java
deleted file mode 100644
index 7ae00fd..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReverseComparatorTests.java
+++ /dev/null
@@ -1,101 +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 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;
-
-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/StringToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/StringToolsTests.java
deleted file mode 100644
index 454cb81..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/StringToolsTests.java
+++ /dev/null
@@ -1,833 +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 java.io.StringWriter;
-import java.io.Writer;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.StringTools;
-
-public class StringToolsTests extends TestCase {
-
-	public StringToolsTests(String name) {
-		super(name);
-	}
-
-	// ********** 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", new String(StringTools.pad(new char[] { 'f', 'r', 'e', 'd' }, 4)));
-		assertEquals("fred  ", new String(StringTools.pad(new char[] { 'f', 'r', 'e', 'd' }, 6)));
-		boolean exThrown = false;
-		try {
-			assertEquals("fr", new String(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 testPadOrTruncate() {
-		assertEquals("fred", StringTools.padOrTruncate("fred", 4));
-		assertEquals("fred  ", StringTools.padOrTruncate("fred", 6));
-		assertEquals("fr", StringTools.padOrTruncate("fred", 2));
-	}
-
-	public void testPadOrTruncateCharArray() {
-		assertEquals("fred", new String(StringTools.padOrTruncate(new char[] { 'f', 'r', 'e', 'd' }, 4)));
-		assertEquals("fred  ", new String(StringTools.padOrTruncate(new char[] { 'f', 'r', 'e', 'd' }, 6)));
-		assertEquals("fr", new String(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 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", new String(StringTools.zeroPad(new char[] { '1', '2', '3', '4' }, 4)));
-		assertEquals("001234", new String(StringTools.zeroPad(new char[] { '1', '2', '3', '4' }, 6)));
-		boolean exThrown = false;
-		try {
-			assertEquals("12", new String(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 testZeroPadOrTruncate() {
-		assertEquals("1234", StringTools.zeroPadOrTruncate("1234", 4));
-		assertEquals("001234", StringTools.zeroPadOrTruncate("1234", 6));
-		assertEquals("34", StringTools.zeroPadOrTruncate("1234", 2));
-	}
-
-	public void testZeroPadOrTruncateCharArray() {
-		assertEquals("1234", new String(StringTools.zeroPadOrTruncate(new char[] { '1', '2', '3', '4' }, 4)));
-		assertEquals("001234", new String(StringTools.zeroPadOrTruncate(new char[] { '1', '2', '3', '4' }, 6)));
-		assertEquals("34", new String(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());
-	}
-
-	// ********** wrapping **********
-
-	public void testWrap() {
-		this.verifyWrap("Employee", "123", "123Employee123");
-		this.verifyWrap("123", "123", "123123123");
-		this.verifyWrap("", "123", "123123");
-	}
-
-	private void verifyWrap(String string, String wrap, String expectedString) {
-		assertEquals(expectedString, StringTools.wrap(string, wrap));
-	}
-
-	public void testWrapOnWriter() {
-		this.verifyWrapOnWriter("Employee", "123", "123Employee123");
-		this.verifyWrapOnWriter("123", "123", "123123123");
-		this.verifyWrapOnWriter("", "123", "123123");
-	}
-
-	private void verifyWrapOnWriter(String string, String wrap, String expectedString) {
-		Writer writer = new StringWriter();
-		StringTools.wrapOn(string, wrap, writer);
-		assertEquals(expectedString, writer.toString());
-	}
-
-	public void testWrapOnStringBuffer() {
-		this.verifyWrapOnStringBuffer("Employee", "123", "123Employee123");
-		this.verifyWrapOnStringBuffer("123", "123", "123123123");
-		this.verifyWrapOnStringBuffer("", "123", "123123");
-	}
-
-	private void verifyWrapOnStringBuffer(String string, String wrap, String expectedString) {
-		StringBuffer sb = new StringBuffer();
-		StringTools.wrapOn(string, wrap, sb);
-		assertEquals(expectedString, sb.toString());
-	}
-
-	public void testQuote() {
-		this.verifyQuote("Employee", "\"Employee\"");
-		this.verifyQuote("123", "\"123\"");
-		this.verifyQuote("", "\"\"");
-	}
-
-	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("", "\"\"");
-	}
-
-	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("", "\"\"");
-	}
-
-	private void verifyQuoteOnStringBuffer(String string, String expectedString) {
-		StringBuffer sb = new StringBuffer();
-		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, new String(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 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, new String(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());
-	}
-
-	// ********** 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, new String(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 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 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, new String(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 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 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());
-	}
-
-	// ********** 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 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'));
-	}
-
-	// ********** conversions **********
-
-	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 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 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());
-	}
-
-}
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 04a3d84..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/TestTools.java
+++ /dev/null
@@ -1,161 +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 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 junit.framework.TestCase;
-import junit.framework.TestFailure;
-import junit.framework.TestResult;
-
-/**
- * various tools that can be used by test cases
- */
-public final class TestTools {
-
-	/**
-	 * 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();
-	}
-
-	/**
-	 * some tests require access to the Web (e.g. any tests that parse an XML
-	 * document that specifies a DTD or Schema that is loaded from the Web); use
-	 * this method to configure the JDK proxy settings
-	 */
-	public static void setUpOracleProxy() {
-		System.setProperty("http.proxyHost", "www-proxy.us.oracle.com");
-		System.setProperty("http.proxyPort", "80");
-	}
-
-	/**
-	 * some tests require access to the Web (e.g. any tests that parse an XML
-	 * document that specifies a DTD or Schema that is loaded from the Web); use
-	 * this method to configure the JDK proxy settings via the command-line
-	 */
-	public static String[] buildOracleProxyCommandLineOptions() {
-		return new String[] { "-Dhttp.proxyHost=www-proxy.us.oracle.com", "-Dhttp.proxyPort=80" };
-	}
-
-	/**
-	 * 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);
-	}
-
-	/**
-	 * execute the specified test and dump the results to the console
-	 */
-	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(": ");
-		if (result.wasSuccessful()) {
-			writer.println("OK");
-		} 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: ");
-		long elapsed = end - start;
-		writer.print(elapsed / 1000L);
-		writer.println(" sec.");
-		return stringWriter.toString();
-	}
-
-	private static final Class<TestCase> TestCase_class = TestCase.class;
-
-	/**
-	 * 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<?> tempClass = testCase.getClass(); tempClass != TestCase_class; tempClass = tempClass.getSuperclass()) {
-			Field[] fields = tempClass.getDeclaredFields();
-			for (int i = fields.length; i-- > 0;) {
-				Field field = fields[i];
-				// 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);
-			}
-		}
-	}
-
-	/**
-	 * 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());
-	}
-
-	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 3b104b9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/XMLStringEncoderTests.java
+++ /dev/null
@@ -1,135 +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.FileTools;
-import org.eclipse.jpt.utility.internal.XMLStringEncoder;
-
-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/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 d7cf76a..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ArrayIteratorTests.java
+++ /dev/null
@@ -1,126 +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.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
-
-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 = 0;
-		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] = 0;
-		integers[1] = 1;
-		integers[2] = 2;
-		int i = 0;
-		for (Iterator<Number> stream = new ArrayIterator<Number>(integers); stream.hasNext();) {
-			assertEquals(i++, stream.next().intValue());
-		}
-		assertEquals(integers.length, i);
-	}
-
-	public void testVarargs() {
-		int i = 0;
-		for (Iterator<Number> stream = new ArrayIterator<Number>(0, 1, 2); stream.hasNext();) {
-			assertEquals(i++, stream.next().intValue());
-		}
-		assertEquals(3, i);
-	}
-
-	public 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 9d82950..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ArrayListIteratorTests.java
+++ /dev/null
@@ -1,150 +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.iterators;
-
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import org.eclipse.jpt.utility.internal.iterators.ArrayListIterator;
-
-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
-	public void testGenerics() {
-		Integer[] integers = new Integer[3];
-		integers[0] = 0;
-		integers[1] = 1;
-		integers[2] = 2;
-		int i = 0;
-		for (Iterator<Number> stream = new ArrayListIterator<Number>(integers); stream.hasNext();) {
-			assertEquals(i++, stream.next().intValue());
-		}
-		assertEquals(integers.length, i);
-	}
-
-	@Override
-	public void testVarargs() {
-		int i = 0;
-		for (Iterator<Number> stream = new ArrayListIterator<Number>(0, 1, 2); stream.hasNext();) {
-			assertEquals(i++, stream.next().intValue());
-		}
-		assertEquals(3, i);
-	}
-
-	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 59cd307..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ChainIteratorTests.java
+++ /dev/null
@@ -1,119 +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.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;
-
-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();
-			}
-		};
-	}
-
-}
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 e3afdb5..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CloneIteratorTests.java
+++ /dev/null
@@ -1,252 +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.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.iterators.CloneIterator;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-public class CloneIteratorTests extends TestCase {
-	Collection<String> originalCollection;
-
-	private boolean concurrentProblem;
-	private Collection<String> concurrentCollection;
-
-	public CloneIteratorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.originalCollection = this.buildCollection();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	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.Mutator<String> eliminator = new CloneIterator.Mutator<String>() {
-			public void remove(String current) {
-				CloneIteratorTests.this.originalCollection.remove(current);
-			}
-		};
-		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.concurrentProblem = false;
-		this.concurrentCollection = new ArrayList<String>();
-		Thread thread = new Thread(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");
-		while (thread.isAlive()) {
-			// wait for the other thread to finish
-			Thread.yield();
-		}
-		assertFalse(this.concurrentProblem);
-		Collection<String> expected = new ArrayList<String>();
-		this.populateCollection(expected);
-		assertEquals(expected, this.concurrentCollection);
-	}
-
-	private Runnable buildRunnable() {
-		return new Runnable() {
-			public void run() {
-				CloneIteratorTests.this.loopWithCloneIterator();
-			}
-		};
-	}
-
-	/**
-	 * use a clone iterator to loop over the "slow" collection and copy its
-	 * contents to the concurrent collection
-	 */
-	void loopWithCloneIterator() {
-		try {
-			for (Iterator<String> stream = this.buildCloneIterator(); stream.hasNext();) {
-				this.concurrentCollection.add(stream.next());
-			}
-		} catch (Throwable t) {
-			this.concurrentProblem = true;
-		}
-	}
-
-	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
-			try {
-				Thread.sleep(100);
-			} catch (InterruptedException ex) {
-				throw new RuntimeException(ex);
-			}
-			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 c6045a9..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CloneListIteratorTests.java
+++ /dev/null
@@ -1,408 +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.iterators;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
-import org.eclipse.jpt.utility.tests.internal.TestTools;
-
-public class CloneListIteratorTests extends TestCase {
-	List<String> originalList;
-
-	private boolean concurrentProblem;
-	private List<String> concurrentList;
-
-	public CloneListIteratorTests(String name) {
-		super(name);
-	}
-
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		this.originalList = this.buildList();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		TestTools.clear(this);
-		super.tearDown();
-	}
-
-	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("IllegalStateException not thrown", 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("IllegalStateException not thrown", 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.concurrentProblem = false;
-		this.concurrentList = new ArrayList<String>();
-		Thread thread = new Thread(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");
-		while (thread.isAlive()) {
-			// wait for the other thread to finish
-			Thread.yield();
-		}
-		assertFalse(this.concurrentProblem);
-		List<String> expected = new ArrayList<String>();
-		this.populateList(expected);
-		assertEquals(expected, this.concurrentList);
-	}
-
-	private Runnable buildRunnable() {
-		return new Runnable() {
-			public void run() {
-				CloneListIteratorTests.this.loopWithCloneListIterator();
-			}
-		};
-	}
-
-	/**
-	 * use a clone iterator to loop over the "slow" collection and copy its
-	 * contents to the concurrent collection
-	 */
-	void loopWithCloneListIterator() {
-		try {
-			for (ListIterator<String> stream = this.buildCloneListIterator(); stream.hasNext();) {
-				this.concurrentList.add(stream.next());
-			}
-		} catch (Throwable t) {
-			this.concurrentProblem = true;
-		}
-	}
-
-}
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 d7173ce..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CompositeIteratorTests.java
+++ /dev/null
@@ -1,334 +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.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;
-
-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() {
-		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(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.verifyIllegalStateException(this.buildEmptyCompositeIterator1());
-	}
-
-	public void testEmptyHasAnother2() {
-		this.verifyEmptyHasAnother(this.buildEmptyCompositeIterator2());
-	}
-
-	public void testEmptyNoSuchElementException2() {
-		this.verifyNoSuchElementException(this.buildEmptyCompositeIterator2());
-	}
-
-	public void testEmptyIllegalStateException2() {
-		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 f2de1d1..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/CompositeListIteratorTests.java
+++ /dev/null
@@ -1,404 +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.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.CompositeListIterator;
-
-public class CompositeListIteratorTests extends CompositeIteratorTests {
-
-	public CompositeListIteratorTests(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));
-		}
-	}
-
-	@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));
-	}
-
-	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);
-	}
-
-	public void testPreviousIndex() {
-		// TODO
-	}
-
-	@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 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() });
-	}
-
-	Iterator<String> buildCompositeIterator(String string, ListIterator<String> iterator) {
-		return this.buildCompositeListIterator(string, iterator);
-	}
-
-	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/EmptyEnumerationTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyEnumerationTests.java
deleted file mode 100644
index 9869789..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyEnumerationTests.java
+++ /dev/null
@@ -1,53 +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.iterators;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.EmptyEnumeration;
-
-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/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 6985ad4..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyIteratorTests.java
+++ /dev/null
@@ -1,63 +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.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
-
-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 35c8efc..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EmptyListIteratorTests.java
+++ /dev/null
@@ -1,127 +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.iterators;
-
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.EmptyListIterator;
-
-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 528f101..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/EnumerationIteratorTests.java
+++ /dev/null
@@ -1,119 +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.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;
-
-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 c268245..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/FilteringIteratorTests.java
+++ /dev/null
@@ -1,285 +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.iterators;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.Filter;
-import org.eclipse.jpt.utility.internal.SimpleFilter;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
-
-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));
-		}
-	}
-
-	// test a filtered iterator with a nested iterator of a sub-type (Number vs. Integer)
-	public void testGenerics1() {
-		List<Integer> integers = new ArrayList<Integer>();
-		integers.add(new Integer(0));
-		integers.add(new Integer(1));
-		integers.add(new Integer(2));
-		integers.add(new Integer(3));
-		Iterator<Number> stream = new FilteringIterator<Number>(integers.iterator()) {
-			@Override
-			protected boolean accept(Object o) {
-				return ((Number) o).intValue() > 1;
-			}
-		};
-		assertEquals(2, CollectionTools.size(stream));
-	}
-
-	// test a filtered iterator with a nested iterator of a super-type (Integer vs. Number)
-	// i.e. trust that Filter will only return the appropriate sub-type objects
-	public void testGenerics2() {
-		List<Number> integers = new ArrayList<Number>();
-		integers.add(new Integer(0));
-		integers.add(new Long(1));
-		integers.add(new Integer(2));
-		integers.add(new Float(3));
-		Iterator<Integer> stream = new FilteringIterator<Integer>(integers.iterator()) {
-			@Override
-			protected boolean accept(Object o) {
-				return o instanceof Integer;
-			}
-		};
-		assertEquals(2, CollectionTools.size(stream));
-	}
-
-	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(Object o) {
-				return ((String) o).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(Object o) {
-				return ((String) o).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);
-			}
-		};
-	}
-
-}
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 d7f884c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/GraphIteratorTests.java
+++ /dev/null
@@ -1,183 +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.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;
-
-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);
-	}
-
-	/**
-	 * 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;
-	}
-
-	private 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/IteratorEnumerationTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/IteratorEnumerationTests.java
deleted file mode 100644
index 42d8eb4..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/IteratorEnumerationTests.java
+++ /dev/null
@@ -1,98 +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.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.IteratorEnumeration;
-
-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/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 76e6717..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/JptUtilityIteratorsTests.java
+++ /dev/null
@@ -1,53 +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.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(EmptyEnumerationTests.class);
-		suite.addTestSuite(EmptyIteratorTests.class);
-		suite.addTestSuite(EmptyListIteratorTests.class);
-		suite.addTestSuite(EnumerationIteratorTests.class);
-		suite.addTestSuite(FilteringIteratorTests.class);
-		suite.addTestSuite(GraphIteratorTests.class);
-		suite.addTestSuite(IteratorEnumerationTests.class);
-		suite.addTestSuite(PeekableIteratorTests.class);
-		suite.addTestSuite(ReadOnlyIteratorTests.class);
-		suite.addTestSuite(ReadOnlyListIteratorTests.class);
-		suite.addTestSuite(SingleElementIteratorTests.class);
-		suite.addTestSuite(SingleElementListIteratorTests.class);
-		suite.addTestSuite(TransformationIteratorTests.class);
-		suite.addTestSuite(TransformationListIteratorTests.class);
-		suite.addTestSuite(TreeIteratorTests.class);
-
-		return suite;
-	}
-
-	private JptUtilityIteratorsTests() {
-		super();
-	}
-
-}
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 1a3b47b..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/PeekableIteratorTests.java
+++ /dev/null
@@ -1,140 +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.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;
-
-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/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 4defa2e..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyIteratorTests.java
+++ /dev/null
@@ -1,118 +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.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;
-
-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 4db72f6..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/ReadOnlyListIteratorTests.java
+++ /dev/null
@@ -1,203 +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.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;
-
-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 e84657c..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SingleElementIteratorTests.java
+++ /dev/null
@@ -1,71 +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.iterators;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import junit.framework.TestCase;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementIterator;
-
-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 e3e4197..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/SingleElementListIteratorTests.java
+++ /dev/null
@@ -1,111 +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.iterators;
-
-import java.util.Iterator;
-import java.util.ListIterator;
-import org.eclipse.jpt.utility.internal.iterators.SingleElementListIterator;
-
-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/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 6ec0d08..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TransformationIteratorTests.java
+++ /dev/null
@@ -1,216 +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.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;
-
-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());
-	}
-
-}
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 fb507d5..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TransformationListIteratorTests.java
+++ /dev/null
@@ -1,306 +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.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;
-
-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());
-	}
-}
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 655d083..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/iterators/TreeIteratorTests.java
+++ /dev/null
@@ -1,197 +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.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;
-
-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();
-			}
-		};
-	}
-
-	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/test.xml b/jpa/tests/org.eclipse.jpt.utility.tests/test.xml
deleted file mode 100644
index 8598dc6..0000000
--- a/jpa/tests/org.eclipse.jpt.utility.tests/test.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<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, and library-file -->
-	<property name="plugin-name" value="org.eclipse.jpt.utility.tests"/>
-	<property name="library-file" value="${eclipse-home}/plugins/org.eclipse.test_3.1.0/library.xml"/>
-
-	<!-- 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="core-test" antfile="${library-file}" dir="${eclipse-home}">
-			<property name="plugin-name" value="${plugin-name}"/>
-			<property name="classname" value="org.eclipse.jpt.utility.tests.internal.JptUtilityTests" />
-			<property name="plugin-path" value="${eclipse-home}/plugins/${plugin-name}"/>
-		</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">
-		<ant target="collect" antfile="${library-file}" dir="${eclipse-home}">
-			<property name="includes" value="org*.xml"/>
-			<property name="output-file" value="${plugin-name}.xml"/>
-		</ant>
-	</target>
-</project>
\ No newline at end of file