This commit was manufactured by cvs2svn to create branch 'R3_0_5_patches'.
diff --git a/docs/org.eclipse.wst.validation.infopop/.project b/docs/org.eclipse.wst.validation.infopop/.project
deleted file mode 100644
index 28f5b4f..0000000
--- a/docs/org.eclipse.wst.validation.infopop/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.validation.infopop</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/docs/org.eclipse.wst.validation.infopop/META-INF/MANIFEST.MF b/docs/org.eclipse.wst.validation.infopop/META-INF/MANIFEST.MF
deleted file mode 100644
index 57cc07c..0000000
--- a/docs/org.eclipse.wst.validation.infopop/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,7 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Plugin.name
-Bundle-SymbolicName: org.eclipse.wst.validation.infopop; singleton:=true
-Bundle-Version: 1.0.201.qualifier
-Bundle-Localization: plugin
-Bundle-Vendor: %Plugin.providerName
diff --git a/docs/org.eclipse.wst.validation.infopop/ValidationPrefs_HelpContexts.xml b/docs/org.eclipse.wst.validation.infopop/ValidationPrefs_HelpContexts.xml
deleted file mode 100644
index 9a8ccfa..0000000
--- a/docs/org.eclipse.wst.validation.infopop/ValidationPrefs_HelpContexts.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS type="org.eclipse.help.contexts"?>
-
-<contexts>
-	<!-- Eclipse Validation preferences -->
-<context id="jvgp0000">
-<description>The validation preferences page allows you to view or change the default validation settings for all workbench projects. A validator is a tool that checks that resources conform to a specification, DTD, or some other set of rules.
-
-Each validator can apply to certain types of files, certain project natures, and certain project facets. When a validator applies to a project facet or nature, the workbench uses that validator only on projects that have that facet or nature. Likewise, most validators apply only to certain types of files, so the workbench uses those validators only on those types of files.
-
-Select the <b>Allow projects to override these preference settings</b> check box if you want to allow individual projects to set their own validation preferences. To configure new validation settings for an individual project, select the project in the Navigator view, right-click and select <b>Properties</b>   &gt; <b>Validation</b> .
-
-Select the <b>Suspend all validators</b> check box to prevent validation at the global level. If you select this check box, you can still enable validation at the project level.
-
-Select the <b>Save all modified resources automatically prior to validating</b> check box if you want to save any resources you have modified before the validation begins.
-
-In the list of validators, select the check boxes next to each validator you want to use at the global level. Each validator has a check box to specify whether it is used on manual validation or on build validation. Choose an alternate implementation for a validator by clicking the button in the <b>Settings</b> column. Not all validators have alternate implementations.
-
-</description>
-<topic href="../org.eclipse.jst.j2ee.doc.user/topics/tjval.html" label="Validating code in enterprise applications"/>
-<topic href="../org.eclipse.jst.j2ee.doc.user/topics/tjvalglobalpref.html" label="Overriding global validation preferences"/>
-<topic href="../org.eclipse.jst.j2ee.doc.user/topics/rvalerr.html" label="Common validation errors and solutions"/>
-</context>
-
-</contexts>
\ No newline at end of file
diff --git a/docs/org.eclipse.wst.validation.infopop/ValidationProjPrefs_HelpContexts.xml b/docs/org.eclipse.wst.validation.infopop/ValidationProjPrefs_HelpContexts.xml
deleted file mode 100644
index 489af37..0000000
--- a/docs/org.eclipse.wst.validation.infopop/ValidationProjPrefs_HelpContexts.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS type="org.eclipse.help.contexts"?>
-
-<contexts>
-	<!-- Validation settings for project -->
-
-<context id="jvpp0000">
-<description>The project validation page allows you to view or change the validation settings for a project. A validator is a tool that checks that resources conform to a specification, DTD, or some other set of rules.
-
-Each validator can apply to certain types of files, certain project natures, and certain project facets. When a validator applies to a project facet or nature, the workbench uses that validator only on projects that have that facet or nature. Likewise, most validators apply only to certain types of files, so the workbench uses those validators only on those types of files.
-
-Select the <b>Override validation preferences</b> check box if you want to override the default validation preferences set in the workbench Preferences page. If the <b>Override validation preferences</b> check box is not enabled, go to <b>Window</b>   &gt; <b>Preferences</b>   &gt; <b>Validation</b> and select the <b>Allow projects to override these preference settings</b> check box.
-
-Select the <b>Suspend all validators</b> check box to prevent validation for this project.
-
-In the list of validators, select the check boxes next to each validator you want to use for this project. Each validator has a check box to specify whether it is used on manual validation or on build validation. Choose an alternate implementation for a validator by clicking the button in the <b>Settings</b> column. Not all validators have alternate implementations.
-
-</description>
-<topic href="../org.eclipse.jst.j2ee.doc.user/topics/tjval.html" label="Validating code in enterprise applications"/>
-<topic href="../org.eclipse.jst.j2ee.doc.user/topics/tjvalglobalpref.html" label="Overriding global validation preferences"/>
-<topic href="../org.eclipse.jst.j2ee.doc.user/topics/rvalerr.html" label="Common validation errors and solutions"/>
-</context>
-
-</contexts>
\ No newline at end of file
diff --git a/docs/org.eclipse.wst.validation.infopop/about.html b/docs/org.eclipse.wst.validation.infopop/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/docs/org.eclipse.wst.validation.infopop/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/docs/org.eclipse.wst.validation.infopop/build.properties b/docs/org.eclipse.wst.validation.infopop/build.properties
deleted file mode 100644
index ac322ed..0000000
--- a/docs/org.eclipse.wst.validation.infopop/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-bin.includes = META-INF/,\
-               plugin.xml,\
-               ValidationPrefs_HelpContexts.xml,\
-               ValidationProjPrefs_HelpContexts.xml,\
-               plugin.properties,\
-               about.html
-src.includes = build.properties
diff --git a/docs/org.eclipse.wst.validation.infopop/plugin.properties b/docs/org.eclipse.wst.validation.infopop/plugin.properties
deleted file mode 100644
index b0c0709..0000000
--- a/docs/org.eclipse.wst.validation.infopop/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# NLS_MESSAGEFORMAT_VAR
-# ==============================================================================
-# Translation Instruction: section to be translated
-# ==============================================================================
-Plugin.name = WST validation infopop plug-in
-Plugin.providerName = Eclipse.org
\ No newline at end of file
diff --git a/docs/org.eclipse.wst.validation.infopop/plugin.xml b/docs/org.eclipse.wst.validation.infopop/plugin.xml
deleted file mode 100644
index aaf27bf..0000000
--- a/docs/org.eclipse.wst.validation.infopop/plugin.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension
-         point="org.eclipse.help.contexts">
-    <contexts file="ValidationProjPrefs_HelpContexts.xml" plugin="org.eclipse.wst.validation.ui" />
-	<contexts file="ValidationPrefs_HelpContexts.xml" plugin="org.eclipse.wst.validation.ui" />
-   </extension>
-
-</plugin>
diff --git a/docs/org.eclipse.wst.validation.infopop/.cvsignore b/features/org.eclipse.wst.common_core.feature.patch/.cvsignore
similarity index 100%
rename from docs/org.eclipse.wst.validation.infopop/.cvsignore
rename to features/org.eclipse.wst.common_core.feature.patch/.cvsignore
diff --git a/features/org.eclipse.wst.common_core.feature.patch/build.properties b/features/org.eclipse.wst.common_core.feature.patch/build.properties
index 6a95a8c..cb50260 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/build.properties
+++ b/features/org.eclipse.wst.common_core.feature.patch/build.properties
@@ -2,5 +2,4 @@
                license.html,\
                feature.properties,\
                epl-v10.html,\
-               eclipse_update_120.jpg,\
-               buildnotes_bug-163391.html
+               eclipse_update_120.jpg
diff --git a/features/org.eclipse.wst.common_core.feature.patch/buildnotes_bug-163391.html b/features/org.eclipse.wst.common_core.feature.patch/buildnotes_bug-163391.html
deleted file mode 100644
index 8dd9d99..0000000
--- a/features/org.eclipse.wst.common_core.feature.patch/buildnotes_bug-163391.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>Web Tools Platform Build Notes</title>
-</head>
-<body> 
-
- 	
-<h1>
-Web Tools Platform Build Notes</h1>
-
-
-<h2>Patch</h2>
-<p>
-See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=163391">bug 163391</a>:&nbsp;ResourceSetWorkbenchEditSynchronizer 
-unloads resources prematurely in headless mode.
-</p>
-
-</body>
-</head>
diff --git a/features/org.eclipse.wst.common_core.feature.patch/feature.properties b/features/org.eclipse.wst.common_core.feature.patch/feature.properties
deleted file mode 100644
index c5e99cb..0000000
--- a/features/org.eclipse.wst.common_core.feature.patch/feature.properties
+++ /dev/null
@@ -1,152 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 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
-###############################################################################
-# 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=JST Web Core Patch Feature
-
-# "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=\
-This patch provides a work around for an unintended changed in behavior with \
-respect to what members are returned from a virutal folder. \
-See bug 162974 (https://bugs.eclipse.org/bugs/show_bug.cgi?id=162974) \
-
-description=\
-This patch addresses a performance which may arise during buildpath validation.\n\
-Also see bugzilla report for bug 159325 at https://bugs.eclipse.org/bugs/show_bug.cgi?id=159325\n
-
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006 IBM Corporation and others.\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\
-    IBM Corporation - 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\
-March 17, 2005\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\
-\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/features/org.eclipse.wst.common_core.feature.patch/feature.xml b/features/org.eclipse.wst.common_core.feature.patch/feature.xml
deleted file mode 100644
index 2b953b7..0000000
--- a/features/org.eclipse.wst.common_core.feature.patch/feature.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-    id="org.eclipse.wst.common_core.feature.patch"
-    label="%featureName"
-    version="1.5.2.qualifier"
-    provider-name="%providerName">
-
-    <description>%description</description>
-
-    <copyright>%copyright</copyright>
-
-    <license url="%licenseURL">%license</license>
-
-    <url>
-        <update
-            label="%updateSiteName"
-            url="http://download.eclipse.org/webtools/updates/" />
-    </url>
-
-
-    <requires>
-        <import
-            feature="org.eclipse.wst.common_core.feature"
-            version="1.5.2.v200610140800--AXrVWXbElCl05G"
-            patch="true" />
-    </requires>
-
-    <plugin
-        id="org.eclipse.wst.common.emfworkbench.integration"
-        download-size="0"
-        install-size="0"
-        version="0.0.0"
-        unpack="false" />
-</feature>
diff --git a/features/org.eclipse.wst.common_core.feature/.cvsignore b/features/org.eclipse.wst.common_core.feature/.cvsignore
deleted file mode 100644
index 2620caa..0000000
--- a/features/org.eclipse.wst.common_core.feature/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build.xml
-org.eclipse.wst.common_core.feature_1.0.0.bin.dist.zip
diff --git a/features/org.eclipse.wst.common_core.feature/.project b/features/org.eclipse.wst.common_core.feature/.project
deleted file mode 100644
index 192f462..0000000
--- a/features/org.eclipse.wst.common_core.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common_core.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/features/org.eclipse.wst.common_core.feature/build.properties b/features/org.eclipse.wst.common_core.feature/build.properties
deleted file mode 100644
index 7f47694..0000000
--- a/features/org.eclipse.wst.common_core.feature/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/features/org.eclipse.wst.common_core.feature/eclipse_update_120.jpg b/features/org.eclipse.wst.common_core.feature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/features/org.eclipse.wst.common_core.feature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/epl-v10.html b/features/org.eclipse.wst.common_core.feature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/features/org.eclipse.wst.common_core.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/features/org.eclipse.wst.common_core.feature/feature.properties b/features/org.eclipse.wst.common_core.feature/feature.properties
deleted file mode 100644
index 6f51274..0000000
--- a/features/org.eclipse.wst.common_core.feature/feature.properties
+++ /dev/null
@@ -1,144 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 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
-###############################################################################
-# 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=WST Common Core
-
-# "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=WST common core functionality.
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006 IBM Corporation and others.\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\
-    IBM Corporation - 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\
-March 17, 2005\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\
-\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/features/org.eclipse.wst.common_core.feature/feature.xml b/features/org.eclipse.wst.common_core.feature/feature.xml
deleted file mode 100644
index 0932a3a..0000000
--- a/features/org.eclipse.wst.common_core.feature/feature.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.wst.common_core.feature"
-      label="%featureName"
-      version="1.6.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
-   </url>
-
-   <requires>
-      <import feature="org.eclipse.jem" version="1.2" match="equivalent"/>
-      <import feature="org.eclipse.emf" version="2.2" match="equivalent"/>
-   </requires>
-
-   <plugin
-         id="org.eclipse.wst.common.emfworkbench.integration"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.command.env"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"/>
-
-   <plugin
-         id="org.eclipse.wst.command.env.core"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.emf"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.environment"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.frameworks"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.modulecore"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.project.facet.core"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.uriresolver"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.validation"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.core"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/features/org.eclipse.wst.common_core.feature/license.html b/features/org.eclipse.wst.common_core.feature/license.html
deleted file mode 100644
index 2347060..0000000
--- a/features/org.eclipse.wst.common_core.feature/license.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
-<!-- saved from url=(0044)http://www.eclipse.org/legal/epl/notice.html -->
-<HTML><HEAD><TITLE>Eclipse.org Software User Agreement</TITLE>
-<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
-<BODY lang=EN-US vLink=purple link=blue>
-<H2>Eclipse Foundation Software User Agreement</H2>
-<P>January 28, 2005</P>
-<H3>Usage Of Content</H3>
-<P>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION 
-AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF 
-THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE 
-TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED 
-BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED 
-BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE 
-AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE 
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY 
-APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU 
-MAY NOT USE THE CONTENT.</P>
-<H3>Applicable Licenses</H3>
-<P>Unless otherwise indicated, all Content made available by the Eclipse 
-Foundation is provided to you under the terms and conditions of the Eclipse 
-Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this 
-Content and is also available at <A 
-href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</A>. 
-For purposes of the EPL, "Program" will mean the Content.</P>
-<P>Content includes, but is not limited to, source code, object code, 
-documentation and other files maintained in the Eclipse.org CVS repository 
-("Repository") in CVS modules ("Modules") and made available as downloadable 
-archives ("Downloads").</P>
-<P>Content may be apportioned into plug-ins ("Plug-ins"), plug-in fragments 
-("Fragments"), and features ("Features"). A Feature is a bundle of one or more 
-Plug-ins and/or Fragments and associated material. Files named "feature.xml" may 
-contain a list of the names and version numbers of the Plug-ins and/or Fragments 
-associated with a Feature. Plug-ins and Fragments are located in directories 
-named "plugins" and Features are located in directories named "features".</P>
-<P>Features may also include other Features ("Included Features"). Files named 
-"feature.xml" may contain a list of the names and version numbers of Included 
-Features.</P>
-<P>The terms and conditions governing Plug-ins and Fragments should be contained 
-in files named "about.html" ("Abouts"). The terms and conditions governing 
-Features and Included Features should be contained in files named "license.html" 
-("Feature Licenses"). Abouts and Feature Licenses may be located in any 
-directory of a Download or Module including, but not limited to the following 
-locations:</P>
-<UL>
-  <LI>The top-level (root) directory 
-  <LI>Plug-in and Fragment directories 
-  <LI>Subdirectories of the directory named "src" of certain Plug-ins 
-  <LI>Feature directories </LI></UL>
-<P>Note: if a Feature made available by the Eclipse Foundation is installed 
-using the Eclipse Update Manager, you must agree to a license ("Feature Update 
-License") during the installation process. If the Feature contains Included 
-Features, the Feature Update License should either provide you with the terms 
-and conditions governing the Included Features or inform you where you can 
-locate them. Feature Update Licenses may be found in the "license" property of 
-files named "feature.properties". Such Abouts, Feature Licenses and Feature 
-Update Licenses contain the terms and conditions (or references to such terms 
-and conditions) that govern your use of the associated Content in that 
-directory.</P>
-<P>THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL 
-OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE 
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</P>
-<UL>
-  <LI>Common Public License Version 1.0 (available at <A 
-  href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</A>) 
-
-  <LI>Apache Software License 1.1 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</A>) 
-
-  <LI>Apache Software License 2.0 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</A>) 
-
-  <LI>IBM Public License 1.0 (available at <A 
-  href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</A>) 
-
-  <LI>Metro Link Public License 1.00 (available at <A 
-  href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</A>) 
-
-  <LI>Mozilla Public License Version 1.1 (available at <A 
-  href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</A>) 
-  </LI></UL>
-<P>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR 
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License is 
-provided, please contact the Eclipse Foundation to determine what terms and 
-conditions govern that particular Content.</P>
-<H3>Cryptography</H3>
-<P>Content may contain encryption software. The country in which you are 
-currently may have restrictions on the import, possession, and use, and/or 
-re-export to another country, of encryption software. BEFORE using any 
-encryption software, please check the country's laws, regulations and policies 
-concerning the import, possession, or use, and re-export of encryption software, 
-to see if this is permitted.</P></BODY></HTML>
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/build.properties
deleted file mode 100644
index f249e9f..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/build.properties
+++ /dev/null
@@ -1,16 +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
-###############################################################################
-bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
-feature.xml,\
-feature.properties,\
-license.html
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index 022ad29..0000000
--- a/features/org.eclipse.wst.common_core.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/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.properties
deleted file mode 100644
index ac52189..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.properties
+++ /dev/null
@@ -1,143 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 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
-###############################################################################
-# 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=WST Common Core Developer Resources
-# "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 WST common core.
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006 IBM Corporation and others.\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\
-    IBM Corporation - 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\
-March 17, 2005\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\
-\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/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.xml
deleted file mode 100644
index 880429b..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.wst.common_core.feature.source"
-      label="%featureName"
-      version="1.6.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
-   </url>
-
-   <plugin
-         id="org.eclipse.wst.common_core.feature.source"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"/>
-
-</feature>
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/license.html b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/license.html
deleted file mode 100644
index c6af966..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,79 +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>March 17, 2005</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY &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>
-</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/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.html b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.html
deleted file mode 100644
index 0a8aea0..0000000
--- a/features/org.eclipse.wst.common_core.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>February 24, 2005</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/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.ini b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.ini
deleted file mode 100644
index 2dee36a..0000000
--- a/features/org.eclipse.wst.common_core.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/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.mappings b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.mappings
deleted file mode 100644
index 0dfb735..0000000
--- a/features/org.eclipse.wst.common_core.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/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/about.properties
deleted file mode 100644
index 9474fc0..0000000
--- a/features/org.eclipse.wst.common_core.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=Web Standard Tools - Common Core\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/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/build.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/build.properties
deleted file mode 100644
index f95b457..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/build.properties
+++ /dev/null
@@ -1,2 +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/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.gif b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.gif
deleted file mode 100644
index e6ad7cc..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.gif
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.png b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.png
deleted file mode 100644
index 50ae49d..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/eclipse32.png
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/plugin.properties b/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/plugin.properties
deleted file mode 100644
index c325b0a..0000000
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplatePlugin/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 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
-###############################################################################
-pluginName=Web Standard Tools - Common Core Source
-providerName=Eclipse.org
diff --git a/features/org.eclipse.wst.common_sdk.feature/.cvsignore b/features/org.eclipse.wst.common_sdk.feature/.cvsignore
deleted file mode 100644
index 413925b..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-org.eclipse.wst.common_sdk.feature_1.0.0.bin.dist.zip
-build.xml
-features
-plugins
diff --git a/features/org.eclipse.wst.common_sdk.feature/.project b/features/org.eclipse.wst.common_sdk.feature/.project
deleted file mode 100644
index fb86250..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common_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/features/org.eclipse.wst.common_sdk.feature/build.properties b/features/org.eclipse.wst.common_sdk.feature/build.properties
deleted file mode 100644
index 5391fbd..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/build.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-generate.feature@org.eclipse.wst.common_ui.feature.source=org.eclipse.wst.common_ui.feature
-bin.includes = feature.xml,\
-               epl-v10.html,\
-               license.html,\
-               eclipse_update_120.jpg,\
-               feature.properties
diff --git a/features/org.eclipse.wst.common_sdk.feature/eclipse_update_120.jpg b/features/org.eclipse.wst.common_sdk.feature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_sdk.feature/epl-v10.html b/features/org.eclipse.wst.common_sdk.feature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/features/org.eclipse.wst.common_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/features/org.eclipse.wst.common_sdk.feature/feature.properties b/features/org.eclipse.wst.common_sdk.feature/feature.properties
deleted file mode 100644
index d7bdfa2..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/feature.properties
+++ /dev/null
@@ -1,144 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 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
-###############################################################################
-# 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=WST Common Plug-in Developer Resources
-
-# "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 WST common tools
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006 IBM Corporation and others.\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\
-    IBM Corporation - 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\
-March 17, 2005\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\
-\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/features/org.eclipse.wst.common_sdk.feature/feature.xml b/features/org.eclipse.wst.common_sdk.feature/feature.xml
deleted file mode 100644
index f94d6f9..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/feature.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.wst.common_sdk.feature"
-      label="%featureName"
-      version="1.6.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
-   </url>
-
-   <includes
-         id="org.eclipse.wst.common_ui.feature.source"
-         version="0.0.0"/>
-
-</feature>
diff --git a/features/org.eclipse.wst.common_sdk.feature/license.html b/features/org.eclipse.wst.common_sdk.feature/license.html
deleted file mode 100644
index 2347060..0000000
--- a/features/org.eclipse.wst.common_sdk.feature/license.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
-<!-- saved from url=(0044)http://www.eclipse.org/legal/epl/notice.html -->
-<HTML><HEAD><TITLE>Eclipse.org Software User Agreement</TITLE>
-<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
-<BODY lang=EN-US vLink=purple link=blue>
-<H2>Eclipse Foundation Software User Agreement</H2>
-<P>January 28, 2005</P>
-<H3>Usage Of Content</H3>
-<P>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION 
-AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF 
-THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE 
-TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED 
-BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED 
-BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE 
-AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE 
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY 
-APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU 
-MAY NOT USE THE CONTENT.</P>
-<H3>Applicable Licenses</H3>
-<P>Unless otherwise indicated, all Content made available by the Eclipse 
-Foundation is provided to you under the terms and conditions of the Eclipse 
-Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this 
-Content and is also available at <A 
-href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</A>. 
-For purposes of the EPL, "Program" will mean the Content.</P>
-<P>Content includes, but is not limited to, source code, object code, 
-documentation and other files maintained in the Eclipse.org CVS repository 
-("Repository") in CVS modules ("Modules") and made available as downloadable 
-archives ("Downloads").</P>
-<P>Content may be apportioned into plug-ins ("Plug-ins"), plug-in fragments 
-("Fragments"), and features ("Features"). A Feature is a bundle of one or more 
-Plug-ins and/or Fragments and associated material. Files named "feature.xml" may 
-contain a list of the names and version numbers of the Plug-ins and/or Fragments 
-associated with a Feature. Plug-ins and Fragments are located in directories 
-named "plugins" and Features are located in directories named "features".</P>
-<P>Features may also include other Features ("Included Features"). Files named 
-"feature.xml" may contain a list of the names and version numbers of Included 
-Features.</P>
-<P>The terms and conditions governing Plug-ins and Fragments should be contained 
-in files named "about.html" ("Abouts"). The terms and conditions governing 
-Features and Included Features should be contained in files named "license.html" 
-("Feature Licenses"). Abouts and Feature Licenses may be located in any 
-directory of a Download or Module including, but not limited to the following 
-locations:</P>
-<UL>
-  <LI>The top-level (root) directory 
-  <LI>Plug-in and Fragment directories 
-  <LI>Subdirectories of the directory named "src" of certain Plug-ins 
-  <LI>Feature directories </LI></UL>
-<P>Note: if a Feature made available by the Eclipse Foundation is installed 
-using the Eclipse Update Manager, you must agree to a license ("Feature Update 
-License") during the installation process. If the Feature contains Included 
-Features, the Feature Update License should either provide you with the terms 
-and conditions governing the Included Features or inform you where you can 
-locate them. Feature Update Licenses may be found in the "license" property of 
-files named "feature.properties". Such Abouts, Feature Licenses and Feature 
-Update Licenses contain the terms and conditions (or references to such terms 
-and conditions) that govern your use of the associated Content in that 
-directory.</P>
-<P>THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL 
-OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE 
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</P>
-<UL>
-  <LI>Common Public License Version 1.0 (available at <A 
-  href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</A>) 
-
-  <LI>Apache Software License 1.1 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</A>) 
-
-  <LI>Apache Software License 2.0 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</A>) 
-
-  <LI>IBM Public License 1.0 (available at <A 
-  href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</A>) 
-
-  <LI>Metro Link Public License 1.00 (available at <A 
-  href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</A>) 
-
-  <LI>Mozilla Public License Version 1.1 (available at <A 
-  href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</A>) 
-  </LI></UL>
-<P>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR 
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License is 
-provided, please contact the Eclipse Foundation to determine what terms and 
-conditions govern that particular Content.</P>
-<H3>Cryptography</H3>
-<P>Content may contain encryption software. The country in which you are 
-currently may have restrictions on the import, possession, and use, and/or 
-re-export to another country, of encryption software. BEFORE using any 
-encryption software, please check the country's laws, regulations and policies 
-concerning the import, possession, or use, and re-export of encryption software, 
-to see if this is permitted.</P></BODY></HTML>
diff --git a/docs/org.eclipse.wst.validation.infopop/.cvsignore b/features/org.eclipse.wst.common_ui.feature.patch/.cvsignore
similarity index 100%
copy from docs/org.eclipse.wst.validation.infopop/.cvsignore
copy to features/org.eclipse.wst.common_ui.feature.patch/.cvsignore
diff --git a/features/org.eclipse.wst.common_ui.feature.patch/.project b/features/org.eclipse.wst.common_ui.feature.patch/.project
new file mode 100644
index 0000000..0dbb12b
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature.patch/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.wst.common_ui.feature.patch</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.wst.common_ui.feature.patch/build.properties b/features/org.eclipse.wst.common_ui.feature.patch/build.properties
new file mode 100644
index 0000000..cb50260
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature.patch/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+               license.html,\
+               feature.properties,\
+               epl-v10.html,\
+               eclipse_update_120.jpg
diff --git a/features/org.eclipse.wst.common_ui.feature.patch/buildnotes_org.eclipse.wst.common_ui.feature.patch.html b/features/org.eclipse.wst.common_ui.feature.patch/buildnotes_org.eclipse.wst.common_ui.feature.patch.html
new file mode 100644
index 0000000..82503c2
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature.patch/buildnotes_org.eclipse.wst.common_ui.feature.patch.html
@@ -0,0 +1,18 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="Build" content="Build">
+<title>WTP 3.0.4 Patches</title>
+</head>
+
+<body>
+
+<h1>WTP 3.0.4 Patches</h1>
+
+<h2>org.eclipse.wst.common_ui.feature</h2>
+
+<p>Bug <a href='https://bugs.eclipse.org/267144'>267144</a>. RuntimesPropertyPage needs ProgressMonitor</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.common_ui.feature/eclipse_update_120.jpg b/features/org.eclipse.wst.common_ui.feature.patch/eclipse_update_120.jpg
similarity index 100%
rename from features/org.eclipse.wst.common_ui.feature/eclipse_update_120.jpg
rename to features/org.eclipse.wst.common_ui.feature.patch/eclipse_update_120.jpg
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/epl-v10.html b/features/org.eclipse.wst.common_ui.feature.patch/epl-v10.html
similarity index 100%
rename from features/org.eclipse.wst.common_ui.feature/epl-v10.html
rename to features/org.eclipse.wst.common_ui.feature.patch/epl-v10.html
diff --git a/features/org.eclipse.wst.common_ui.feature.patch/feature.properties b/features/org.eclipse.wst.common_ui.feature.patch/feature.properties
new file mode 100644
index 0000000..52e1b78
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature.patch/feature.properties
@@ -0,0 +1,148 @@
+###############################################################################
+# Copyright (c) 2008 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
+###############################################################################
+# 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=WTP Patches for org.eclipse.wst.common_ui.feature
+
+# "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=\
+Contains fixes described in the following bugillia(s):\n\
+\n\
+Bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=267144 RuntimesPropertyPage needs ProgressMonitor\n\
+\n\
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2008 IBM Corporation and others.\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\
+    IBM Corporation - 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\
+September, 2008\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\
+\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/features/org.eclipse.wst.common_ui.feature.patch/feature.xml b/features/org.eclipse.wst.common_ui.feature.patch/feature.xml
new file mode 100644
index 0000000..c6ed5b7
--- /dev/null
+++ b/features/org.eclipse.wst.common_ui.feature.patch/feature.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.wst.common_ui.feature.patch"
+      label="%featureName"
+      version="3.0.4.qualifier"
+      provider-name="%providerName">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.wst.common_ui.feature" version="3.0.4.v200811200248-7C78ELhE8VrRVqtHp4iT8PuSwZ5W" patch="true"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.wst.common.project.facet.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.wst.common_ui.feature/license.html b/features/org.eclipse.wst.common_ui.feature.patch/license.html
similarity index 100%
rename from features/org.eclipse.wst.common_ui.feature/license.html
rename to features/org.eclipse.wst.common_ui.feature.patch/license.html
diff --git a/features/org.eclipse.wst.common_ui.feature/.cvsignore b/features/org.eclipse.wst.common_ui.feature/.cvsignore
deleted file mode 100644
index e00af7d..0000000
--- a/features/org.eclipse.wst.common_ui.feature/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build.xml
-org.eclipse.wst.common_ui.feature_1.0.0.bin.dist.zip
diff --git a/features/org.eclipse.wst.common_ui.feature/.project b/features/org.eclipse.wst.common_ui.feature/.project
deleted file mode 100644
index 221164f..0000000
--- a/features/org.eclipse.wst.common_ui.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common_ui.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/features/org.eclipse.wst.common_ui.feature/build.properties b/features/org.eclipse.wst.common_ui.feature/build.properties
deleted file mode 100644
index 7f47694..0000000
--- a/features/org.eclipse.wst.common_ui.feature/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/features/org.eclipse.wst.common_ui.feature/feature.properties b/features/org.eclipse.wst.common_ui.feature/feature.properties
deleted file mode 100644
index f3e8ae8..0000000
--- a/features/org.eclipse.wst.common_ui.feature/feature.properties
+++ /dev/null
@@ -1,144 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 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
-###############################################################################
-# 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=WST Common UI
-
-# "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=WST common UI functionality.
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006 IBM Corporation and others.\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\
-    IBM Corporation - 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\
-March 17, 2005\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\
-\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/features/org.eclipse.wst.common_ui.feature/feature.xml b/features/org.eclipse.wst.common_ui.feature/feature.xml
deleted file mode 100644
index 209f296..0000000
--- a/features/org.eclipse.wst.common_ui.feature/feature.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.wst.common_ui.feature"
-      label="%featureName"
-      version="1.6.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
-   </url>
-
-
-   <includes
-         id="org.eclipse.wst.common_core.feature"
-         version="0.0.0"/>
-
-   <requires>
-      <import feature="org.eclipse.gef" version="3.2" match="equivalent"/>
-   </requires>
-
-   <plugin
-         id="org.eclipse.wst.command.env.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.frameworks.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.infopop"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.project.facet.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.snippets"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.common.ui.properties"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.internet.proxy"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.internet.proxy.infopop"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.internet.cache"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.validation.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.command.env.infopop"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.wst.validation.infopop"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/build.properties
deleted file mode 100644
index e878555..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/build.properties
+++ /dev/null
@@ -1,19 +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
-###############################################################################
-bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
-feature.xml,\
-feature.properties,\
-license.html
-
-generate.feature@org.eclipse.wst.common_core.feature.source = org.eclipse.wst.common_core.feature
-
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/epl-v10.html b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index 022ad29..0000000
--- a/features/org.eclipse.wst.common_ui.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/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.properties
deleted file mode 100644
index 8423d38..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.properties
+++ /dev/null
@@ -1,145 +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
-###############################################################################
-# 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=WST Common UI Developer Resources
-
-# "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 WST Common UI.
-
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006 IBM Corporation and others.\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\
-    IBM Corporation - 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\
-March 17, 2005\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\
-\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/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml
deleted file mode 100644
index 4f1a618..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.wst.common_ui.feature.source"
-      label="%featureName"
-      version="1.6.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
-   </url>
-
-   <includes
-         id="org.eclipse.wst.common_core.feature"
-         version="0.0.0"/>
-
-   <includes
-         id="org.eclipse.wst.common_core.feature.source"
-         version="0.0.0"/>
-
-   <plugin
-         id="org.eclipse.wst.common_ui.feature.source"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"/>
-
-</feature>
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/license.html b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/license.html
deleted file mode 100644
index c6af966..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,79 +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>March 17, 2005</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY &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>
-</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/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.html b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.html
deleted file mode 100644
index 0a8aea0..0000000
--- a/features/org.eclipse.wst.common_ui.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>February 24, 2005</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/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.ini b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.ini
deleted file mode 100644
index 2dee36a..0000000
--- a/features/org.eclipse.wst.common_ui.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/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.mappings b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.mappings
deleted file mode 100644
index 0dfb735..0000000
--- a/features/org.eclipse.wst.common_ui.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/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/about.properties
deleted file mode 100644
index 40314ea..0000000
--- a/features/org.eclipse.wst.common_ui.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=Web Standard Tools - Common UI\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/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/build.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/build.properties
deleted file mode 100644
index 5895597..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/build.properties
+++ /dev/null
@@ -1,3 +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/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.gif b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.gif
deleted file mode 100644
index e6ad7cc..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.gif
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.png b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.png
deleted file mode 100644
index 50ae49d..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/eclipse32.png
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/plugin.properties b/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/plugin.properties
deleted file mode 100644
index 4c0b73c..0000000
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplatePlugin/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 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
-###############################################################################
-pluginName=Web Standard Tools - Common UI Source
-providerName=Eclipse.org
diff --git a/plugins/org.eclipse.jem.util/.classpath b/plugins/org.eclipse.jem.util/.classpath
index d4d58af..a988941 100644
--- a/plugins/org.eclipse.jem.util/.classpath
+++ b/plugins/org.eclipse.jem.util/.classpath
@@ -3,8 +3,7 @@
 	<classpathentry kind="src" path="jemutil"/>
 	<classpathentry kind="src" path="property_files"/>
 	<classpathentry kind="src" path="jemutil-nonworkbnech"/>
+	<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="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry sourcepath="org.eclipse.perfmsr.core.stub/perfmsr.jar" kind="lib" path="org.eclipse.perfmsr.core.stub/perfmsr.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.jem.util/.cvsignore b/plugins/org.eclipse.jem.util/.cvsignore
index ba077a4..e043cc4 100644
--- a/plugins/org.eclipse.jem.util/.cvsignore
+++ b/plugins/org.eclipse.jem.util/.cvsignore
@@ -1 +1,3 @@
 bin
+build.xml
+javaCompiler...args
diff --git a/plugins/org.eclipse.jem.util/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.jem.util/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..02c2954
--- /dev/null
+++ b/plugins/org.eclipse.jem.util/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Sun Apr 15 21:15:45 EDT 2007
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs
index d78073f..cb579cc 100644
--- a/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs
@@ -1,11 +1,15 @@
-#Tue Feb 21 10:09:19 EST 2006
+#Tue Jul 31 20:39:48 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.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
@@ -41,6 +45,7 @@
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
@@ -83,8 +88,6 @@
 org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false
-org.eclipse.jdt.core.formatter.comment.format_comments=true
 org.eclipse.jdt.core.formatter.comment.format_header=false
 org.eclipse.jdt.core.formatter.comment.format_html=true
 org.eclipse.jdt.core.formatter.comment.format_source_code=true
diff --git a/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF b/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
index 59b2475..9e05ebc 100644
--- a/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jem.util; singleton:=true
-Bundle-Version: 1.2.1.qualifier
+Bundle-Version: 2.0.101.qualifier
 Bundle-Activator: org.eclipse.jem.util.plugin.JEMUtilPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -16,10 +16,11 @@
  org.eclipse.jem.util.logger.proxy,
  org.eclipse.jem.util.logger.proxyrender,
  org.eclipse.jem.util.plugin
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.emf.ecore;bundle-version="[2.2.0,3.0.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,3.0.0)",
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)",
  org.eclipse.perfmsr.core;bundle-version="1.0.0";resolution:=optional,
- com.ibm.icu;bundle-version="[3.4.4.1,4.0.0)"
+ com.ibm.icu;bundle-version="[3.8.1.1,4.0.0)"
 Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.jem.util/about.html b/plugins/org.eclipse.jem.util/about.html
index afceed0..5acea59 100644
--- a/plugins/org.eclipse.jem.util/about.html
+++ b/plugins/org.eclipse.jem.util/about.html
@@ -6,7 +6,7 @@
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head><body lang="EN-US">
 <h2>About This Content</h2>
  
-<p>May 2, 2006</p>	
+<P>June, 2008</P>	
 <h3>License</h3>
 
 <p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
diff --git a/plugins/org.eclipse.jem.util/build.properties b/plugins/org.eclipse.jem.util/build.properties
index b40afd0..aa0d851 100644
--- a/plugins/org.eclipse.jem.util/build.properties
+++ b/plugins/org.eclipse.jem.util/build.properties
@@ -21,3 +21,4 @@
            property_files/,\
            jemutil-nonworkbnech/
 jars.compile.order = .
+extra.. = ./org.eclipse.perfmsr.core.stub/perfmsr.jar
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/LogEntry.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/LogEntry.java
index d44372b..f50bae7 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/LogEntry.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/LogEntry.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: LogEntry.java,v $
- *  $Revision: 1.5 $  $Date: 2006/05/17 20:13:45 $ 
+
+
  */
 package org.eclipse.jem.util.logger;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer.java
index 3ba7c4d..5d1e951 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: ILogRenderer.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:05:54 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxy;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer2.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer2.java
index 69ee144..f5a670f 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer2.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/ILogRenderer2.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: ILogRenderer2.java,v $
- *  $Revision: 1.4 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxy;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/JDKConsoleRenderer.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/JDKConsoleRenderer.java
index 6f0f828..c7c9d75 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/JDKConsoleRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/JDKConsoleRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: JDKConsoleRenderer.java,v $
- *  $Revision: 1.3 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxy;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/Logger.java b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/Logger.java
index 24e891a..b86ad05 100644
--- a/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/Logger.java
+++ b/plugins/org.eclipse.jem.util/jemutil-nonworkbnech/org/eclipse/jem/util/logger/proxy/Logger.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: Logger.java,v $
- *  $Revision: 1.8 $  $Date: 2006/05/17 20:13:45 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxy;
 
@@ -195,7 +195,7 @@
 		
 		try {
 			fLineSeperator = System.getProperty("line.separator"); // Diff on Win/Unix/Mac //$NON-NLS-1$
-		} catch (Throwable e) {
+		} catch (Exception e) {
 			fLineSeperator = "\n"; //$NON-NLS-1$
 		}
 	}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
index 36c8f4d..d6473fc 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
@@ -10,19 +10,23 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: ProjectResourceSetImpl.java,v $$
- *  $$Revision: 1.8 $$  $$Date: 2005/03/18 18:52:06 $$ 
+ *  $$Revision: 1.21.2.1 $$  $$Date: 2009/05/14 00:17:56 $$ 
  */
 package org.eclipse.jem.internal.util.emf.workbench;
 
 import java.io.IOException;
 import java.util.*;
 
-import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.content.IContentDescription;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.NotificationImpl;
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.*;
+import org.eclipse.emf.ecore.resource.Resource.Factory;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.emf.ecore.resource.impl.URIConverterImpl;
 import org.eclipse.emf.ecore.xmi.XMLResource;
@@ -32,7 +36,216 @@
 import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.jem.util.plugin.JEMUtilPlugin;
 
-public class ProjectResourceSetImpl extends ResourceSetImpl implements ProjectResourceSet {
+public class ProjectResourceSetImpl extends ResourceSetImpl implements FlexibleProjectResourceSet {
+	public static interface ModuleURI {
+		public static final int SUB_PROTOCOL_INDX = 0;
+		public static final int PROJECT_NAME_INDX = 1;
+		public static final int MODULE_NAME_INDX = 2;
+		public static final int CONTENT_TYPE_INDX = 3;
+	}
+	
+	public class SynchronizedResourcesEList<E extends Object & Resource> extends ResourcesEList<E> implements EList<E> {
+
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+		private final Object lock = new Object();
+
+		public void move(int newPosition, E object) {
+			
+			synchronized(lock) {
+				super.move(newPosition, object);
+			}
+
+		}
+
+		public E move(int newPosition, int oldPosition) {
+
+			synchronized(lock) {
+				return super.move(newPosition, oldPosition);
+			}
+		}
+
+		public boolean add(E o) {
+			
+			synchronized(lock) {
+				return super.add(o);
+			}
+		}
+
+		public void add(int index, E element) {
+			
+			synchronized(lock) {
+				super.add(index, element);
+			}
+
+		}
+
+		public boolean addAll(Collection<? extends E> c) {
+			
+			synchronized(lock) {
+				return super.addAll(c);
+			}
+		}
+
+		public boolean addAll(int index, Collection<? extends E> c) {
+			
+			synchronized(lock) {
+				return super.addAll(index, c);
+			}
+		}
+
+		public void clear() {
+			
+			synchronized(lock) {
+				super.clear();
+			}
+
+		}
+
+		public boolean contains(Object o) {
+			
+			synchronized(lock) {
+				return super.contains(o);
+			}
+		}
+
+		public boolean containsAll(Collection<?> c) {
+			
+			synchronized(lock) {
+				return super.containsAll(c);
+			}
+		}
+
+		public boolean equals(Object o) {
+			
+			synchronized(lock) {
+				return super.equals(o);
+			}
+		}
+
+		public E get(int index) {
+			
+			synchronized(lock) {
+				return super.get(index);
+			}
+		}
+
+		public int hashCode() {
+			
+			synchronized(lock) {
+				return super.hashCode();
+			}
+		}
+
+		public int indexOf(Object o) {
+			
+			synchronized(lock) {
+				return super.indexOf(o);
+			}
+		}
+
+		public boolean isEmpty() {
+			
+			synchronized(lock) {
+				return super.isEmpty();
+			}
+		}
+
+		public Iterator<E> iterator() {
+			
+			synchronized(lock) {
+				return super.iterator();
+			}
+		}
+
+		public int lastIndexOf(Object o) {
+			
+			synchronized(lock) {
+				return super.lastIndexOf(o);
+			}
+		}
+
+		public ListIterator<E> listIterator() {
+			
+			synchronized(lock) {
+				return super.listIterator();
+			}
+		}
+
+		public ListIterator<E> listIterator(int index) {
+			
+			synchronized(lock) {
+				return super.listIterator(index);
+			}
+		}
+
+		public boolean remove(Object o) {
+			
+			synchronized(lock) {
+				return super.remove(o);
+			}
+		}
+
+		public E remove(int index) {
+			
+			synchronized(lock) {
+				return super.remove(index);
+			}
+		}
+
+		public boolean removeAll(Collection<?> c) {
+			
+			synchronized(lock) {
+				return super.removeAll(c);
+			}
+		}
+
+		public boolean retainAll(Collection<?> c) {
+			
+			synchronized(lock) {
+				return super.retainAll(c);
+			}
+		}
+
+		public E set(int index, E element) {
+			
+			synchronized(lock) {
+				return super.set(index, element);
+			}
+		}
+
+		public int size() {
+			
+			synchronized(lock) {
+				return super.size();
+			}
+		}
+
+		public List<E> subList(int fromIndex, int toIndex) {
+			
+			synchronized(lock) {
+				return super.subList(fromIndex, toIndex);
+			}
+		}
+
+		public Object[] toArray() {
+			
+			synchronized(lock) {
+				return super.toArray();
+			}
+		}
+
+		public <T> T[] toArray(T[] a) {
+			
+			synchronized(lock) {
+				return super.toArray(a);
+			}
+		}
+
+	}
+
 	private boolean isReleasing = false;
 	private IProject project;
 	protected List resourceHandlers = new ArrayList();
@@ -61,18 +274,80 @@
 			res = getResourceFromHandlers(uri);
 		return res;
 	}
-	public Resource createResource(URI uri) {
+
+	public Resource createResource(URI uri, String contentType) {
 		if (isReleasing) return null;
 		//Check the map first when creating the resource and do not
 		//normalize if a value is found.
-		boolean isMapped = !(((URIConverterImpl.URIMap)getURIConverter().getURIMap()).getURI(uri).equals(uri));
+		boolean isMapped = detectURIMapping(uri);
+		boolean hasContentType = (getContentTypeName(uri) != null);
 		URI converted = uri;
 		if (!isMapped)
 			converted = getURIConverter().normalize(uri);
-		Resource result = createResourceFromHandlers(converted);
-		if (result == null)
-			result = super.createResource(converted);
+		else if (hasContentType)
+			converted = getURIConverter().normalize(uri);
 		
+		Resource result = createResourceFromHandlers(converted);
+		if (result == null) {
+		    Resource.Factory resourceFactory = getResourceFactoryRegistry().getFactory(uri);
+		    if (resourceFactory != null)
+		    {//We got the right factory, now use the right URI
+		      result = resourceFactory.createResource(converted);
+		      getResources().add(result);
+		    }
+		}
+			
+		
+		return result;
+	}
+
+	public Resource createResource(URI uri) {
+		return createResource(uri, ContentHandler.UNSPECIFIED_CONTENT_TYPE);
+	}
+
+	private boolean detectURIMapping(URI uri) {
+		if (uri == null) return false;
+		return !(((URIConverterImpl.URIMap)getURIConverter().getURIMap()).getURI(uri).equals(uri));
+	}
+	/**
+	 * Return the IFile for the <code>uri</code> within the Workspace. This URI is assumed to be
+	 * absolute in the following format: platform:/resource/....
+	 */
+	private IFile getPlatformFile(URI uri) {
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri)) {
+			String fileString = URI.decode(uri.path());
+			fileString = fileString.substring(JEMUtilPlugin.PLATFORM_RESOURCE.length() + 1);
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(fileString));
+		}
+		return null;
+	}
+	public Resource createResource(URI uri, Resource.Factory resourceFactory) {
+		if (isReleasing) return null;
+		//Check the map first when creating the resource and do not
+		//normalize if a value is found.
+		boolean isMapped = detectURIMapping(uri);
+		boolean hasContentType = (getContentTypeName(uri) != null);
+		URI converted = uri;
+		if (!isMapped)
+			converted = getURIConverter().normalize(uri);
+		else if (hasContentType)
+			converted = getURIConverter().normalize(uri);
+		Resource result = createResourceFromHandlers(converted);
+		if (result == null) {
+
+		    if (resourceFactory != null)
+		    {
+		      result = resourceFactory.createResource(converted);
+		      getResources().add(result);
+		      getURIResourceMap().put(uri, result);
+		      return result;
+		    }
+		    else
+		    {
+		      return null;
+		    }
+		  
+		}
 		return result;
 	}
 	/**
@@ -259,7 +534,229 @@
 	 */
 	public Resource getResource(URI uri, boolean loadOnDemand) {
 		if (isReleasing) return null;
-		return super.getResource(uri, loadOnDemand);
+
+	    Map<URI, Resource> map = getURIResourceMap();
+	    if (map != null)
+	    {
+	      Resource resource = map.get(uri);
+	      if (resource != null)
+	      {
+	        if (loadOnDemand && !resource.isLoaded())
+	        {
+	          demandLoadHelper(resource);
+	        }        
+	        return resource;
+	      }
+	    }
+	    
+	    URIConverter theURIConverter = getURIConverter();
+	    URI normalizedURI = theURIConverter.normalize(uri);
+	    List resourcesToRemove = new ArrayList();
+	    for (Resource resource : getResources())
+	    {
+	      if (theURIConverter.normalize(resource.getURI()).equals(normalizedURI)) {
+	    		  
+	    	if (getContentTypeName(uri) == null) { // loading from legacy archive api or non-typed resource
+		        if (loadOnDemand && !resource.isLoaded())
+		        {
+		          demandLoadHelper(resource);
+		        }
+		        
+		        if (map != null)
+		        {
+		          map.put(uri, resource);
+		        } 
+		        return resource;
+	    	} else  {// content type is known
+	    		boolean resourceExists = false;
+	    		IFile file = getPlatformFile(resource);
+	    		if (file != null)
+	    			resourceExists = file.exists();
+	    		String resourceContentTypeID = getContentTypeID(resource);
+	    		String uriContentTypeID = getContentTypeName(uri);
+	    		String existingMapKeyType = (findKey(resource) != null) ? getContentTypeName(findKey(resource)) : null;
+	    		if((!map.containsValue(resource) || ((map.get(uri) != null) && map.get(uri).equals(resource))) // existing resource  with alternate mapping doesn't exist in map
+	    			||  ((resourceContentTypeID != null && resourceContentTypeID.equals(uriContentTypeID)))) {
+						if (loadOnDemand && !resource.isLoaded()) {
+							demandLoadHelper(resource);
+						} // if embedded uri content type is different than resource content type, continue searching
+						if (resourceContentTypeID != null
+								&& uriContentTypeID != null) {
+							if ((resourceContentTypeID.equals(uriContentTypeID)) && existingMapKeyType == null) continue;
+							if ((!resourceContentTypeID.equals(uriContentTypeID)) || (existingMapKeyType != null && !existingMapKeyType
+									.equals(uriContentTypeID)))
+								continue;
+							else if (existingMapKeyType == null && !resourceExists) {
+								resourcesToRemove.add(resource);
+								continue;
+							}
+						} else if (uriContentTypeID != null && resourceContentTypeID == null && !resourceExists) {
+							resourcesToRemove.add(resource);
+							continue;
+						}
+								
+						if (map != null && (map.get(uri) == null)) {
+							map.put(uri, resource);
+						}
+						return resource;
+					}
+	    	}
+	      }
+	    }
+	    // Cleanup invalid resources
+	    getResources().removeAll(resourcesToRemove);
+	    Resource delegatedResource = delegatedGetResource(uri, loadOnDemand);
+	    if (delegatedResource != null)
+	    {
+	      if (map != null)
+	      {
+	        map.put(uri, delegatedResource);
+	      }
+	      return delegatedResource;
+	    }
+
+	    if (loadOnDemand)
+	    {
+	      Resource resource = demandCreateResource(uri);
+	      if (resource == null)
+	      {
+	        throw new RuntimeException("Cannot create a resource for '" + uri + "'; a registered resource factory is needed");
+	      }
+	      
+	      if (map != null)
+	      {
+	        map.put(uri, resource);
+	      }  
+
+	      demandLoadHelper(resource);
+
+	          
+	      return resource;
+	    }
+
+	    return null;
+	  
+	}
+	private IFile getPlatformFile(Resource res) {
+		IFile file = null;
+		file = getPlatformFile(res.getURI());
+		if (file == null) {
+			if (res.getResourceSet() != null) {
+				URIConverter converter = res.getResourceSet().getURIConverter();
+				URI convertedUri = converter.normalize(res.getURI());
+				if (!res.getURI().equals(convertedUri))
+					file = getPlatformFile(convertedUri);
+			}
+		}
+		return file;
+	}
+	
+	private String getContentTypeID(Resource resource) {
+		IFile file = getPlatformFile(resource);
+		IContentDescription desc = null;
+		try {
+			desc = file.getContentDescription();
+		} catch (CoreException e) {
+		}
+		if (desc != null && desc.getContentType() != null)
+			return desc.getContentType().getId();
+		return null;
+	}
+	private URI findKey(Resource resource) {
+		Map aMap = getURIResourceMap();
+		Set keys = aMap.keySet();
+		for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
+			URI name = (URI) iterator.next();
+			if (aMap.get(name).equals(resource))
+				return name;
+		}
+		return null;
+	}
+	protected static String getContentTypeName(URI uri) {
+		
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri) || !isValidFullyQualifiedModuleURI(uri))
+			return null;
+		String contentTypeIdentifier = (uri.segmentCount() > 3 ? uri.segment(ModuleURI.CONTENT_TYPE_INDX) : null);
+		if (contentTypeIdentifier != null && Platform.getContentTypeManager().getContentType(uri.segment(ModuleURI.CONTENT_TYPE_INDX)) != null)
+			return contentTypeIdentifier;
+		else
+			return null;
+	}
+	public static boolean isValidFullyQualifiedModuleURI(URI aModuleURI) {
+		if (aModuleURI.segmentCount() < 3) {
+			return false;
+		}
+		return true;
+	}
+	/*
+	 * Javadoc copied from interface.
+	 */
+	public Resource getResource(URI uri, boolean loadOnDemand, Resource.Factory resourceFactory) {
+		if (isReleasing) return null;
+		
+
+	    Map<URI, Resource> map = getURIResourceMap();
+	    if (map != null)
+	    {
+	      Resource resource = map.get(uri);
+	      if (resource != null)
+	      {
+	        if (loadOnDemand && !resource.isLoaded())
+	        {
+	          demandLoadHelper(resource);
+	        }        
+	        return resource;
+	      }
+	    }
+	    
+	    URIConverter theURIConverter = getURIConverter();
+	    URI normalizedURI = theURIConverter.normalize(uri);
+	    for (Resource resource : getResources())
+	    {
+	      if (theURIConverter.normalize(resource.getURI()).equals(normalizedURI))
+	      {
+	        if (loadOnDemand && !resource.isLoaded())
+	        {
+	          demandLoadHelper(resource);
+	        }
+	        
+	        if (map != null)
+	        {
+	          map.put(uri, resource);
+	        } 
+	        return resource;
+	      }
+	    }
+	    
+	    Resource delegatedResource = delegatedGetResource(uri, loadOnDemand);
+	    if (delegatedResource != null)
+	    {
+	      if (map != null)
+	      {
+	        map.put(uri, delegatedResource);
+	      }
+	      return delegatedResource;
+	    }
+
+	    if (loadOnDemand)
+	    {
+	      Resource resource = demandCreateResource(uri,resourceFactory);
+	      if (resource == null)
+	      {
+	        throw new RuntimeException("Cannot create a resource for '" + uri + "'; a registered resource factory is needed");
+	      }
+
+	      demandLoadHelper(resource);
+
+	      if (map != null)
+	      {
+	        map.put(uri, resource);
+	      }      
+	      return resource;
+	    }
+
+	    return null;
+	  
 	}
 
 	
@@ -270,5 +767,18 @@
 		if (getURIResourceMap() != null)
 			getURIResourceMap().clear();
 	}
+	
+	protected Resource demandCreateResource(URI uri, Factory resourceFactory) {
+		// TODO Auto-generated method stub
+		return createResource(uri,resourceFactory);
+	}
+	
+	public EList<Resource> getResources() {
+		 if (resources == null)
+		    {
+		      resources = new SynchronizedResourcesEList<Resource>();
+		    }
+		    return resources;
+	}
 
 }
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/CharacterUtil.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/CharacterUtil.java
index afe7279..d452b01 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/CharacterUtil.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/CharacterUtil.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: CharacterUtil.java,v $
- *  $Revision: 1.1 $  $Date: 2006/02/24 17:32:14 $ 
+
+
  */
 package org.eclipse.jem.util;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PerformanceMonitorUtil.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PerformanceMonitorUtil.java
index a76fdd0..e6f3a1b 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PerformanceMonitorUtil.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PerformanceMonitorUtil.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: PerformanceMonitorUtil.java,v $
- *  $Revision: 1.7 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util;
 import java.util.EventObject;
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PresentPerformanceMonitor.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PresentPerformanceMonitor.java
index 3ee5b05..d021cd5 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PresentPerformanceMonitor.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/PresentPerformanceMonitor.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: PresentPerformanceMonitor.java,v $
- *  $Revision: 1.5 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util;
 import org.eclipse.perfmsr.core.IPerformanceMonitor;
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/TimerTests.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/TimerTests.java
index 57f5b4e..7524f78 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/TimerTests.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/TimerTests.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: TimerTests.java,v $
- *  $Revision: 1.8 $  $Date: 2006/05/17 20:13:45 $ 
+
+
  */
 package org.eclipse.jem.util;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/UIContextDetermination.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/UIContextDetermination.java
index 040d39d..8955882 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/UIContextDetermination.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/UIContextDetermination.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: UIContextDetermination.java,v $$
- *  $$Revision: 1.4 $$  $$Date: 2006/08/09 15:38:22 $$ 
+ *  $$Revision: 1.5 $$  $$Date: 2007/04/10 01:09:36 $$ 
  */
 package org.eclipse.jem.util;
 import java.util.HashMap;
@@ -180,7 +180,7 @@
 						if (tester.isCurrentContextUI())
 							currentContext = UI_CONTEXT;
 					}
-				} catch (Throwable t) {
+				} catch (Exception t) {
 					Logger.getLogger().log("UIContextDetermination is proceeding in HEADLESS mode"); //$NON-NLS-1$
 				}
 			}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/FlexibleProjectResourceSet.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/FlexibleProjectResourceSet.java
new file mode 100644
index 0000000..1e231f0
--- /dev/null
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/FlexibleProjectResourceSet.java
@@ -0,0 +1,68 @@
+package org.eclipse.jem.util.emf.workbench;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.Resource.Factory;
+
+
+public interface FlexibleProjectResourceSet extends ProjectResourceSet {
+	
+	
+	/**
+	   * Returns the resource resolved by the URI.
+	   * <p>
+	   * A resource set is expected to implement the following strategy 
+	   * in order to resolve the given URI to a resource.
+	   * First it uses it's {@link #getURIConverter URI converter} to {@link URIConverter#normalize normalize} the URI 
+	   * and then to compare it with the normalized URI of each resource;
+	   * if it finds a match, 
+	   * that resource becomes the result.
+	   * Failing that,
+	   * it {@link org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#delegatedGetResource delegates} 
+	   * to allow the URI to be resolved elsewhere.
+	   * For example, 
+	   * the {@link org.eclipse.emf.ecore.EPackage.Registry#INSTANCE package registry}
+	   * is used to {@link org.eclipse.emf.ecore.EPackage.Registry#getEPackage resolve} 
+	   * the {@link org.eclipse.emf.ecore.EPackage namespace URI} of a package
+	   * to the static instance of that package.
+	   * So the important point is that an arbitrary implementation may resolve the URI to any resource,
+	   * not necessarily to one contained by this particular resource set.
+	   * If the delegation step fails to provide a result,
+	   * and if <code>loadOnDemand</code> is <code>true</code>,
+	   * a resource is {@link org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#demandCreateResource created} 
+	   * and that resource becomes the result.
+	   * If <code>loadOnDemand</code> is <code>true</code>
+	   * and the result resource is not {@link Resource#isLoaded loaded}, 
+	   * it will be {@link org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#demandLoad loaded} before it is returned.
+	   * </p>
+	   * @param uri the URI to resolve.
+	   * @param loadOnDemand whether to create and load the resource, if it doesn't already exists.
+	   * @param registeredFactory that is used to create resource if needed 
+	   * @return the resource resolved by the URI, or <code>null</code> if there isn't one and it's not being demand loaded.
+	   * @throws RuntimeException if a resource can't be demand created.
+	   * @throws org.eclipse.emf.common.util.WrappedException if a problem occurs during demand load.
+	   * @since 2.1
+	   */
+	
+	Resource getResource(URI uri, boolean loadOnDemand, Factory registeredFactory);
+	
+	/**
+	   * Creates a new resource, of the appropriate type, and returns it.
+	   * <p>
+	   * It delegates to the resource factory {@link #getResourceFactoryRegistry registry} 
+	   * to determine the {@link Resource.Factory.Registry#getFactory correct} factory,
+	   * and then it uses that factory to {@link Resource.Factory#createResource create} the resource
+	   * and add it to the {@link #getResources contents}.
+	   * If there is no registered factory, <code>null</code> will be returned;
+	   * when running within Eclipse,
+	   * a default XMI factory will be registered,
+	   * and this will never return <code>null</code>.
+	   * </p>
+	   * @param uri the URI of the resource to create.
+	   * @param resourceFactory 
+	   * @return a new resource, or <code>null</code> if no factory is registered.
+	   */
+	
+	public Resource createResource(URI uri, Resource.Factory resourceFactory);
+
+}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java
index 68c9735..2c97699 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: ProjectResourceSet.java,v $$
- *  $$Revision: 1.3 $$  $$Date: 2005/02/15 23:04:14 $$ 
+ *  $$Revision: 1.5 $$  $$Date: 2007/08/30 02:37:05 $$ 
  */
 package org.eclipse.jem.util.emf.workbench;
 
@@ -114,4 +114,6 @@
 	 * @since 1.0.0
 	 */
 	void resetNormalizedURICache();
+
+
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectUtilities.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectUtilities.java
index b339d88..eae2e81 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectUtilities.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectUtilities.java
@@ -10,18 +10,20 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: ProjectUtilities.java,v $$
- *  $$Revision: 1.4 $$  $$Date: 2005/05/11 19:01:24 $$ 
+ *  $$Revision: 1.6 $$  $$Date: 2008/03/05 19:43:18 $$ 
  */
 
 package org.eclipse.jem.util.emf.workbench;
 
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.logging.Level;
 
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.*;
 
@@ -283,7 +285,17 @@
 	public static IProject getProject(EObject aRefObject) {
 		if (aRefObject != null) {
 			Resource resource = aRefObject.eResource();
-			return getProject(resource);
+			if (resource != null)
+				return getProject(resource);
+		}
+		return null;
+	}
+	
+	public static IFile getPlatformFile(URI uri) {
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri)) {
+			String fileString = URI.decode(uri.path());
+			fileString = fileString.substring(JEMUtilPlugin.PLATFORM_RESOURCE.length() + 1);
+			return WorkbenchResourceHelperBase.getWorkspace().getRoot().getFile(new Path(fileString));
 		}
 		return null;
 	}
@@ -298,6 +310,15 @@
 	 */
 	public static IProject getProject(Resource resource) {
 		ResourceSet set = resource == null ? null : resource.getResourceSet();
+		if (set == null) {
+			URI uri = resource.getURI();
+			if (uri == null) return null;
+			IFile file = getPlatformFile(resource.getURI());
+			if (file == null) 
+				return null;
+			return file.getProject();
+		}
+			
 		if (set instanceof ProjectResourceSet)
 			return ((ProjectResourceSet) set).getProject();
 		URIConverter converter = set == null ? null : set.getURIConverter();
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchResourceHelperBase.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchResourceHelperBase.java
index 27bb8f1..f526237 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchResourceHelperBase.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/WorkbenchResourceHelperBase.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: WorkbenchResourceHelperBase.java,v $$
- *  $$Revision: 1.5 $$  $$Date: 2006/08/09 15:40:22 $$ 
+ *  $$Revision: 1.6 $$  $$Date: 2008/03/12 14:21:39 $$ 
  */
 package org.eclipse.jem.util.emf.workbench;
 
@@ -688,6 +688,7 @@
 	 * @since 1.0.0
 	 */
 	public static boolean isPlatformPluginResourceURI(URI uri) {
+		if (uri == null) return false;
 		return JEMUtilPlugin.PLATFORM_PROTOCOL.equals(uri.scheme()) && JEMUtilPlugin.PLATFORM_PLUGIN.equals(uri.segment(0));
 	}
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/AbstractWorkBenchRenderer.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/AbstractWorkBenchRenderer.java
index 4285566..b2c1473 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/AbstractWorkBenchRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/AbstractWorkBenchRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: AbstractWorkBenchRenderer.java,v $
- *  $Revision: 1.5 $  $Date: 2005/12/14 21:24:26 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
@@ -189,7 +189,7 @@
 				return WORKBENCH_DESCRIPTION;
 			} else
 				return NOLOG_DESCRIPTION;
-		} catch (Throwable t) {
+		} catch (Exception t) {
 			return NOLOG_DESCRIPTION;
 		}
 	}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/ConsoleLogRenderer.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/ConsoleLogRenderer.java
index 90b2963..0810e2d 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/ConsoleLogRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/ConsoleLogRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: ConsoleLogRenderer.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:04:14 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/DefaultPluginTraceRenderer.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/DefaultPluginTraceRenderer.java
index bedf203..0473318 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/DefaultPluginTraceRenderer.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/DefaultPluginTraceRenderer.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: DefaultPluginTraceRenderer.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:04:14 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/EclipseLogger.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/EclipseLogger.java
index 9e40f90..8591267 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/EclipseLogger.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/EclipseLogger.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: EclipseLogger.java,v $
- *  $Revision: 1.4 $  $Date: 2005/08/24 21:10:34 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/IMsgLogger.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/IMsgLogger.java
index 972ecdd..58f45d5 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/IMsgLogger.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/logger/proxyrender/IMsgLogger.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: IMsgLogger.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:04:14 $ 
+
+
  */
 package org.eclipse.jem.util.logger.proxyrender;
 
diff --git a/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/PerfMsrCorePlugin.java b/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/PerfMsrCorePlugin.java
index 2b86e9e..655ba2a 100644
--- a/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/PerfMsrCorePlugin.java
+++ b/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/PerfMsrCorePlugin.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: PerfMsrCorePlugin.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:06:47 $ 
+
+
  */
 package org.eclipse.perfmsr.core;
 
diff --git a/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/Upload.java b/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/Upload.java
index c412f52..65fa677 100644
--- a/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/Upload.java
+++ b/plugins/org.eclipse.jem.util/org.eclipse.perfmsr.core.stub/src/org/eclipse/perfmsr/core/Upload.java
@@ -9,8 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 /*
- *  $RCSfile: Upload.java,v $
- *  $Revision: 1.2 $  $Date: 2005/02/15 23:06:47 $ 
+
+
  */
 package org.eclipse.perfmsr.core;
  
diff --git a/plugins/org.eclipse.wst.common.core/.classpath b/plugins/org.eclipse.wst.common.core/.classpath
deleted file mode 100644
index 202d634..0000000
--- a/plugins/org.eclipse.wst.common.core/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src-search"/>
-	<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/plugins/org.eclipse.wst.common.core/.cvsignore b/plugins/org.eclipse.wst.common.core/.cvsignore
deleted file mode 100644
index 0f861fd..0000000
--- a/plugins/org.eclipse.wst.common.core/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-bin
-build.xml
-javaCompiler...args
-src.zip
-@dot
-temp.folder
diff --git a/plugins/org.eclipse.wst.common.core/.options b/plugins/org.eclipse.wst.common.core/.options
deleted file mode 100644
index 2e5ed2a..0000000
--- a/plugins/org.eclipse.wst.common.core/.options
+++ /dev/null
@@ -1 +0,0 @@
-org.eclipse.wst.common.search/perf=false
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.core/.project b/plugins/org.eclipse.wst.common.core/.project
deleted file mode 100644
index 6bb12ef..0000000
--- a/plugins/org.eclipse.wst.common.core/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.core</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/plugins/org.eclipse.wst.common.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.core/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 7406de6..0000000
--- a/plugins/org.eclipse.wst.common.core/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,59 +0,0 @@
-#Mon Jan 30 23:40:52 EST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.core/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.common.core/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index c68ceb4..0000000
--- a/plugins/org.eclipse.wst.common.core/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon Jan 30 19:45:41 EST 2006
-eclipse.preferences.version=1
-internal.default.compliance=default
diff --git a/plugins/org.eclipse.wst.common.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.core/META-INF/MANIFEST.MF
deleted file mode 100644
index ca5beff..0000000
--- a/plugins/org.eclipse.wst.common.core/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,18 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.wst.common.core; singleton:=true
-Bundle-Version: 1.1.100.qualifier
-Bundle-Activator: org.eclipse.wst.common.core.search.SearchPlugin
-Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.common.core.search,
- org.eclipse.wst.common.core.search.document,
- org.eclipse.wst.common.core.search.internal;x-internal:=true,
- org.eclipse.wst.common.core.search.pattern,
- org.eclipse.wst.common.core.search.scope,
- org.eclipse.wst.common.core.search.util
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,3.4.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,3.4.0)",
- org.eclipse.core.expressions;bundle-version="[3.2.0,3.4.0)"
-Eclipse-LazyStart: true
-Bundle-Vendor: %pluginProvider
diff --git a/plugins/org.eclipse.wst.common.core/about.html b/plugins/org.eclipse.wst.common.core/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.wst.common.core/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/plugins/org.eclipse.wst.common.core/build.properties b/plugins/org.eclipse.wst.common.core/build.properties
deleted file mode 100644
index cd3e92f..0000000
--- a/plugins/org.eclipse.wst.common.core/build.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-source.. = src-search/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               schema/,\
-               plugin.properties,\
-               about.html
diff --git a/plugins/org.eclipse.wst.common.core/component.xml b/plugins/org.eclipse.wst.common.core/component.xml
deleted file mode 100644
index 3e9239c..0000000
--- a/plugins/org.eclipse.wst.common.core/component.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component xmlns="http://eclipse.org/wtp/releng/tools/component-model" 
-  name="org.eclipse.wst.common.core">
-  <component-depends unrestricted="true"></component-depends>
-  <plugin id="org.eclipse.wst.common.core" fragment="false" />
-</component>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.core/plugin.properties b/plugins/org.eclipse.wst.common.core/plugin.properties
deleted file mode 100644
index ff6cdef..0000000
--- a/plugins/org.eclipse.wst.common.core/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-! Plug-in properties
-pluginName     = WST Common Core Plug-in
-pluginProvider = Eclipse.org
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.core/plugin.xml b/plugins/org.eclipse.wst.common.core/plugin.xml
deleted file mode 100644
index c82f6a0..0000000
--- a/plugins/org.eclipse.wst.common.core/plugin.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension-point id="searchParticipants" name="%searchParticipants" />      
-</plugin>
-
-
diff --git a/plugins/org.eclipse.wst.common.core/schema/searchParticipants.exsd b/plugins/org.eclipse.wst.common.core/schema/searchParticipants.exsd
deleted file mode 100644
index 367c943..0000000
--- a/plugins/org.eclipse.wst.common.core/schema/searchParticipants.exsd
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.core">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.wst.common.search" id="searchParticipants" name="%searchPArticipants"/>
-      </appInfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-         </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>
-
-   <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/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/ISearchOptions.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/ISearchOptions.java
deleted file mode 100644
index 33305e5..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/ISearchOptions.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search;
-
-/**
- * This interface provides values that can be used in the map of search options passed
- * to
- * {@link SearchEngine#search(org.eclipse.wst.common.core.search.pattern.SearchPattern, SearchRequestor, org.eclipse.wst.common.core.search.scope.SearchScope, java.util.Map, org.eclipse.core.runtime.IProgressMonitor)
- * SearchEngine.search()}.
- * <p>
- * Note that not all search participants will provide specialized behavior based on
- * use of these search options.
- * <p>
- * Also note that individual search participants may support additional options not
- * listed here. These search options should be formed so that a search participant can
- * safely ignore any that it does not understand.
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public interface ISearchOptions {
-
-	/**
-	 * Search option specifying a trade-off choice between search performance and
-	 * completeness.
-	 */
-	public static final String PRIORITY_OPTION = "org.eclipse.wst.common.core.search.PRIORITY"; //$NON_NLS_1$
-	/**
-	 * Choice for the {@link #PRIORITY_OPTION} search option that emphasizes
-	 * performance at the possible expense of accuracy. This value should be used for
-	 * all search calls made on the user interface thread. In some cases, search
-	 * results may not be complete because of inaccuracies caused by timing windows.
-	 */
-	public static final String PRIORITY_VALUE_TIMELINESS = "FAST_SEARCH"; //$NON_NLS_1$
-	/**
-	 * Choice for the {@link #PRIORITY_OPTION} search option that emphasizes
-	 * accuracy at the possible expense of timeliness. This value should never be used
-	 * for search calls made on the user interface thread, because some search
-	 * participants may choose to use time-consuming background processing to return a
-	 * complete set of matches.
-	 */
-	public static final String PRIORITY_VALUE_COMPLETENESS = "COMPLETE_SEARCH"; //$NON_NLS_1$
-	/**
-	 * Default choice for the {@link #PRIORITY_OPTION} search option.
-	 */
-	public static final String PRIORITY_VALUE_DEFAULT = PRIORITY_VALUE_TIMELINESS;
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchEngine.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchEngine.java
deleted file mode 100644
index 3fed117..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchEngine.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search;
-
-import java.util.Map;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.wst.common.core.search.document.SearchDocumentSet;
-import org.eclipse.wst.common.core.search.internal.Messages;
-import org.eclipse.wst.common.core.search.internal.SearchDocumentSetImpl;
-import org.eclipse.wst.common.core.search.pattern.SearchPattern;
-import org.eclipse.wst.common.core.search.scope.SearchScope;
-
-/**
- * The {@link SearchEngine} class provides a generic way of searching for information
- * without the need of knowing how or where that information is stored. The results
- * returned by a search could be scattered in a number of files or stored in an index.
- * Examples of the information you can search for include element declarations and
- * references, references between files, and use of qualifiers.
- * <p>
- * The search can be limited to a specified search scope, or the entire workspace can
- * be searched. Search matches are returned to the specified {@link SearchRequestor}.
- * <p>
- * This class may be instantiated; it is not intended to be subclassed.
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public class SearchEngine implements ISearchOptions
-{
-
-	/**
-	 * Searches for matches of a given search pattern using a specified set of search
-	 * participants and search scope. Search patterns can be created using factory
-	 * methods and encapsulate the description of the information to be searched for
-	 * (for example, element declarations of a specified type, in a case sensitive
-	 * manner).
-	 * @param pattern
-	 *            The pattern describing the information to search for
-	 * @param requestor
-	 *            Callback object to notify with the results of the search (each match
-	 *            is reported to {@link SearchRequestor#acceptSearchMatch(SearchMatch)})
-	 * @param participants
-	 *            The search participants that will conduct the search
-	 * @param scope
-	 *            Optional search scope to limit the source of search candidates;
-	 *            specify <code>null</code> to search the entire workspace
-	 * @param searchOptions
-	 *            Optional map of options and values defining behavior of the search;
-	 *            some options and values are provided by {@link ISearchOptions}
-	 * @param monitor
-	 *            Optional progress monitor used to report work completed
-	 * @exception CoreException
-	 *            if the search fails
-	 */
-	public void search(SearchPattern pattern, SearchRequestor requestor,
-			SearchParticipant[] participants, SearchScope scope, Map searchOptions,
-			IProgressMonitor monitor) throws CoreException
-	{
-
-		if (monitor != null && monitor.isCanceled())
-			throw new OperationCanceledException();
-
-		/* initialize progress monitor */
-		if (monitor != null)
-			monitor.beginTask(Messages.engine_searching, 100);
-
-        SearchDocumentSet set = new SearchDocumentSetImpl();
-		try
-		{
-			// requestor.beginReporting();
-            SearchScope[] scopeArray = new SearchScope[participants.length];
-			for (int i = 0, l = participants == null ? 0 : participants.length; i < l; i++)
-			{
-				if (monitor != null && monitor.isCanceled())
-					throw new OperationCanceledException();
-
-				SearchParticipant participant = participants[i];
-				SubProgressMonitor subMonitor = monitor == null ? null
-						: new SubProgressMonitor(monitor, 1000);
-				if (subMonitor != null)
-					subMonitor.beginTask("", 1000); //$NON-NLS-1$
-				try
-				{
-					if (subMonitor != null)
-						subMonitor.subTask(Messages.bind(
-								Messages.engine_searching_locatingDocuments,
-								new String[]
-								{ participant.getDescription() }));
-					participant.beginSearching(pattern, searchOptions);
-					// requestor.enterParticipant(participant);
-					// participant creates it's own search scope 
-					SearchScope newScope =
-						participant.selectDocumentLocations(pattern, scope, searchOptions, monitor);
-                    scopeArray[i] = newScope;
-					// participant creates search documents based on it's search scope
-					participant.createSearchDocuments(set, pattern, newScope, searchOptions, subMonitor);
-                }
-                catch(Exception e)
-                {                  
-                }
-			}
-            for (int i = 0, l = participants == null ? 0 : participants.length; i < l; i++)
-            {        
-                if (monitor != null && monitor.isCanceled())                                  
-                    throw new OperationCanceledException();
-                
-                SearchParticipant participant = participants[i];
-                SubProgressMonitor subMonitor = monitor == null ? null
-                    : new SubProgressMonitor(monitor, 1000);                     
-                if (subMonitor != null && subMonitor.isCanceled())
-                    throw new OperationCanceledException();
-                try
-                {
-                // locate index matches if any (note that all search matches
-                // could have been issued during index querying)
-                if (subMonitor != null)
-                    subMonitor.subTask(Messages.bind(
-                            Messages.engine_searching_matching,
-                            new String[]
-                            { participant.getDescription() }));
-                // a search document set should contain enough info to reduce the search scope even further 
-                // before finding precize locations
-                
-                // the scope could be null if the partcipant barfed and exeption in the first loop 
-                if (scopeArray[i] != null)
-                {  
-                  participant.locateMatches(set, pattern, scopeArray[i], requestor, searchOptions, subMonitor);
-                }  
-                }
-                catch (Exception e)
-                {
-                  
-                }
-                finally
-                {
-                  // requestor.exitParticipant(participant);
-                  participant.doneSearching(pattern, searchOptions);
-                }         
-            }    
-		} finally
-		{
-            set.dispose();
-			// requestor.endReporting();
-			if (monitor != null)
-				monitor.done();
-		}
-	}
-
-	/**
-	 * Searches for matches of a given search pattern. Search patterns can be created
-	 * using factory methods and encapsulate the description of the information to be
-	 * searched for (for example, element declarations of a specified type, in a case
-	 * sensitive manner).
-	 * @param pattern
-	 *            The pattern describing the information to search for
-	 * @param requestor
-	 *            Callback object to notify with the results of the search (each match
-	 *            is reported to {@link SearchRequestor#acceptSearchMatch(SearchMatch)})
-	 * @param scope
-	 *            Optional search scope to limit the source of search candidates;
-	 *            specify <code>null</code> to search the entire workspace
-	 * @param searchOptions
-	 *            Optional map of options and values defining behavior of the search;
-	 *            some options and values are provided by {@link ISearchOptions}
-	 * @param monitor
-	 *            Optional progress monitor used to report work completed
-	 * @exception CoreException
-	 *            if the search fails
-	 */
-	public void search(SearchPattern pattern, SearchRequestor requestor,
-			SearchScope scope, Map searchOptions, IProgressMonitor monitor)
-			throws CoreException
-	{
-		SearchParticipant[] participants =
-			getApplicableParticipants(pattern, searchOptions);
-        //System.out.println("participants = " + participants.length);
-		search(pattern, requestor, participants, scope, searchOptions, monitor);
-	}
-
-	/**
-	 * Queries the set of participants that support searches described by the
-	 * specified search pattern and options.
-	 * @param pattern
-	 *            The pattern describing the information to search for
-	 * @param searchOptions
-	 *            Optional map of options and values defining behavior of the search;
-	 *            some options and values are provided by {@link ISearchOptions}
-	 * @return Array of applicable search participants
-	 */
-	public SearchParticipant[] getApplicableParticipants(SearchPattern pattern,
-			Map searchOptions)
-	{
-		return SearchPlugin.getDefault().loadSearchParticipants(pattern, searchOptions);
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchMatch.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchMatch.java
deleted file mode 100644
index 4890fc5..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchMatch.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.wst.common.core.search.pattern.SearchPattern;
-
-/**
- * A search match represents the result of a search query.
- * <p>
- * This class is intended to be instantiated and subclassed by clients.
- * </p>
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- * 
- * @see SearchEngine#search(SearchPattern, SearchParticipant[], ISearchScope,
- *      SearchRequestor, org.eclipse.core.runtime.IProgressMonitor)
- */
-public class SearchMatch implements IAdaptable
-{
-
-	/**
-	 * Optional resource of the element
-	 */
-	IFile file; // resource where match is found
-
-	/**
-	 * The offset the match starts at, or -1 if unknown
-	 */
-	int offset;
-
-	/**
-	 * The length the length of the match, or -1 if unknown
-	 */
-	int length;
-
-	/**
-	 * Optional element that encloses or corresponds to the match
-	 */
-	Object object;
-
-	/**
-	 * Creates a new search match.
-	 * 
-	 * @param element
-	 *            the element that encloses or corresponds to the match, or
-	 *            <code>null</code> if none
-	 * @param offset
-	 *            the offset the match starts at, or -1 if unknown
-	 * @param length
-	 *            the length of the match, or -1 if unknown
-	 * @param participant
-	 *            the search participant that created the match
-	 * @param resource
-	 *            the resource of the element, or <code>null</code> if none
-	 */
-	public SearchMatch(Object element, int offset, int length, IFile resource)
-	{
-		this.object = element;
-		this.offset = offset;
-		this.length = length;
-		this.file = resource;
-	}
-
-	public IFile getFile()
-	{
-		return file;
-	}
-
-	public void setFile(IFile file)
-	{
-		this.file = file;
-	}
-
-	public int getLength()
-	{
-		return length;
-	}
-
-	public void setLength(int length)
-	{
-		this.length = length;
-	}
-
-	// issue (cs/eb) holding objects is a bit odd, since it implies the object's
-	// life span
-	// is the same as the SearchMatch. What happens when an object is deleted?
-	// does the SearchMatch get deleted? Aren't coordinates good enough?
-	// at the very least we should document that using this field has some
-	// consequences
-	/**
-	 * (eb) see comments for {@link #setObject(Object)}
-	 */
-	public Object getObject()
-	{
-		return object;
-	}
-
-	/**
-	 * @param object
-	 *            Object is an instance of some part of the model that represent
-	 *            the content that was searched. It may require to calculate
-	 *            some additional information that may be required by the tools
-	 *            through {@link #getObject()) (e.g. XML node namespace,
-	 *            nessesary to obtain the prefix for the refactoring tool).
-	 *            <p>
-	 *            There should be no danger here of preventing the object from
-	 *            garbage collection because instances of the search matches
-	 *            supposed to be short lived. {@link SearchMatch} is usually
-	 *            collected by {@link SearchRequestor} which itself is lived for
-	 *            the time of the search and then discarded or re-initialized.
-	 *            Usually the tool that requested a search extracts the
-	 *            information from the collected {@link SearchMatch} and after
-	 *            that {@link SearchMatch} could be garbage collected, releasing
-	 *            object that they hold to.
-	 *            </p>
-	 */
-	public void setObject(Object object)
-	{
-		this.object = object;
-	}
-
-	public int getOffset()
-	{
-		return offset;
-	}
-
-	public void setOffset(int offset)
-	{
-		this.offset = offset;
-	}
-
-	public Object getAdapter(Class adapter)
-	{
-		return Platform.getAdapterManager().getAdapter(this, adapter);
-	}
-    
-    public Map map = new HashMap(); 
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchParticipant.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchParticipant.java
deleted file mode 100644
index 95a0446..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchParticipant.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search;
-
-import java.util.Map;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.wst.common.core.search.document.SearchDocument;
-import org.eclipse.wst.common.core.search.document.SearchDocumentSet;
-import org.eclipse.wst.common.core.search.pattern.SearchPattern;
-import org.eclipse.wst.common.core.search.scope.SearchScope;
-
-/**
- * <p>
- * A search participant describes a particular extension to a generic search
- * mechanism, permitting combined search actions which will involve all required
- * participants.
- * </p>
- * <p>
- * When there is a need to search a document that has some mixed content, then
- * using a one participant will not be enough. E.g. for the searching of the JSP
- * content, a JSP participant needs to create {@link SearchDocument} that
- * contain Java compilation unit and then pass it to the default Java search
- * participant of the Java Search Engine. The same with XML: when there is an
- * XML content that default search participant could not process, but it is
- * required to be search on, a new search participant needs to be defined. That
- * search participant would know how create search document from the content and
- * then it can call default XML search participant.
- * </p>
- * <p>
- * Passing its own {@link SearchRequestor} this participant can then map the
- * match positions back to the original contents, create its own matches and
- * report them to the original requestor.
- * </p>
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- * 
- */
-public abstract class SearchParticipant implements ISearchOptions 
-{
-
-	protected static final boolean debugPerf = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.wst.common.core/perf")); //$NON-NLS-1$ //$NON-NLS-2$
-
-	protected String id;
-	/**
-	 * Creates a new search participant.
-	 */
-	protected SearchParticipant()
-	{
-		// do nothing
-	}
-
-	/**
-	 * Callback method allowing a search participant to indicate whether it supports
-	 * the specified search pattern and options.
-	 * <p>
-	 * If this method returns <code>true</code>, the participant will participate in
-	 * finding matches for the search defined by the search pattern. In this case, the
-	 * search pattern and options will be passed to the following methods of the
-	 * search participant:
-	 * <ol>
-	 * <li>{@link #beginSearching(SearchPattern, Map)}
-	 * <li>{@link #selectDocumentLocations(SearchPattern, SearchScope, Map, IProgressMonitor)}
-	 * <li>{@link #createSearchDocuments(SearchDocumentSet, SearchPattern, SearchScope, Map, IProgressMonitor)}
-	 * <li>{@link #locateMatches(SearchDocumentSet, SearchPattern, SearchScope, SearchRequestor, Map, IProgressMonitor)}
-	 * <li>{@link #doneSearching(SearchPattern, Map)}
-	 * </ol>
-	 * <p>
-	 * If this method returns <code>false</code>, none of the above methods will be
-	 * called, and the search participant contributes no matches for the search
-	 * requrest.
-	 * <p>
-	 * A search participant should only participate in a search when in understands
-	 * the search pattern. Unrecognized search options, however, can be ignored.
-	 * <p>
-	 * This method returns <code>false</code> by default. As a result, subclasses must
-	 * override this method to participate in any searches.
-	 * @param pattern The pattern describing the information to search for
-	 * @param searchOptions Map of options and values defining behavior of the search;
-	 *         <code>null</code> if no options are specified;
-	 *         some options and values are provided by {@link ISearchOptions}
-	 * @return <code>true</code> if the search participant will participate in the
-	 *         search request; <code>false</code> otherwise
-	 */
-	 public abstract boolean isApplicable(SearchPattern pattern, Map searchOptions);
-
-	/**
-	 * Notification that this participant's help is needed in a search.
-	 * <p>
-	 * This method should be re-implemented in subclasses that need to do
-	 * something when the participant is needed in a search.
-	 * </p>
-	 * @param pattern The pattern describing the information to search for
-	 * @param searchOptions Map of options and values defining behavior of the search;
-	 *         <code>null</code> if no options are specified;
-	 *         some options and values are provided by {@link ISearchOptions}
-	 */
-	public void beginSearching(SearchPattern pattern, Map searchOptions)
-	{
-		// do nothing
-	}
-
-	/**
-	 * Notification that this participant's help is no longer needed.
-	 * <p>
-	 * This method should be re-implemented in subclasses that need to do
-	 * something when the participant is no longer needed in a search.
-	 * </p>
-	 * @param pattern
-	 *            The pattern describing the information to search for
-	 * @param searchOptions
-	 *            Map of options and values defining behavior of the search;
-	 *            <code>null</code> if no options are specified;
-	 *            some options and values are provided by {@link ISearchOptions}
-	 */
-	public void doneSearching(SearchPattern pattern, Map searchOptions)
-	{
-		// do nothing
-	}
-	
-	/**
-	 * Returns a displayable name of this search participant.
-	 * <p>
-	 * This method should be re-implemented in subclasses that need to display a
-	 * meaningfull name.
-	 * </p>
-	 * 
-	 * @return the displayable name of this search participant
-	 */
-	public String getDescription()
-	{
-		return "Search participant"; //$NON-NLS-1$
-	}
-
-	/**
-	 * Returns a search document for the given path. The given document path is
-	 * a string that uniquely identifies the document. Most of the time it is a
-	 * workspace-relative path, but it can also be a file system path, or a path
-	 * inside a zip file.
-	 * <p>
-	 * Implementors of this method can either create an instance of their own
-	 * subclass of {@link SearchDocument} or return an existing instance of such
-	 * a subclass.
-	 * </p>
-	 * 
-	 * @param documentPath
-	 *            the path of the document.
-	 * @return a search document
-	 */
-	public abstract SearchDocument createSearchDocument(String documentPath);
-
-	/**
-	 * Locates the matches in the given documents. This method should be called
-	 * by the other search participant or search client once it has
-	 * pre-processed documents and delegating search to this search participant.
-	 * @param documentSet
-	 *            The documents to locate matches in
-	 * @param pattern
-	 *            The pattern describing the information to search for
-	 * @param scope
-	 *            Search scope to limit the source of search candidates;
-	 *            <code>null</code> indicates that the entire workspace is to be
-	 *            searched
-	 * @param requestor
-	 *            Callback object to notify with the results of the search (each match
-	 *            is reported to {@link SearchRequestor#acceptSearchMatch(SearchMatch)})
-	 * @param searchOptions
-	 *            Map of options and values defining behavior of the search;
-	 *            <code>null</code> if no options are specified;
-	 *            some options and values are provided by {@link ISearchOptions}
-	 * @param monitor
-	 *            Progress monitor used to report work completed; <code>null</code>
-	 *            if no progress needs to be reported
-	 * @throws CoreException
-	 *            If the requestor had problem accepting one of the matches
-	 */
-	public abstract void locateMatches(SearchDocumentSet documentSet,
-			SearchPattern pattern, SearchScope scope,
-			SearchRequestor requestor, Map searchOptions, IProgressMonitor monitor)
-			throws CoreException;
-
-	/**
-	 * 
-	 * @param document
-	 * @param pattern
-	 */
-	public abstract void populateSearchDocument(SearchDocument document,
-			SearchPattern pattern);
-
-	/**
-	 * Returns the collection of document locations to consider when performing
-	 * the given search query in the given scope. The search engine calls this
-	 * method before locating matches.
-	 * <p>
-	 * An document location represents a path workspace to the file with the
-	 * content that has potential matches
-	 * </p>
-	 * <p>
-	 * Clients are not expected to call this method.
-	 * </p>
-	 * @param pattern
-	 *            The pattern describing the information to search for
-	 * @param scope
-	 *            Search scope to limit the source of search candidates;
-	 *            <code>null</code> indicates that the entire workspace is to be
-	 *            searched
-	 * @param searchOptions
-	 *            Map of options and values defining behavior of the search;
-	 *            <code>null</code> if no options are specified;
-	 *            some options and values are provided by {@link ISearchOptions}
-	 * @param monitor
-	 *            Progress monitor used to report work completed; <code>null</code>
-	 *            if no progress needs to be reported
-	 * @return the collection of document paths to consider
-	 */
-	public SearchScope selectDocumentLocations(SearchPattern pattern,
-			SearchScope scope, Map searchOptions, IProgressMonitor monitor)
-	{	
-		return scope;
-	}
-
-	/**
-	 * <p>
-	 * This method calls the following methods for each file in the search scope:
-	 * <ol>
-	 * <li>{@link #createSearchDocument(String)}
-	 * <li>{@link #populateSearchDocument(SearchDocument, SearchPattern)}
-	 * </ol>
-	 * @param documentSet
-	 *            The documents to locate matches in
-	 * @param pattern
-	 *            The pattern describing the information to search for
-	 * @param scope
-	 *            Search scope to limit the source of search candidates;
-	 *            <code>null</code> indicates that the entire workspace is to be
-	 *            searched
-	 * @param searchOptions
-	 *            Map of options and values defining behavior of the search;
-	 *            <code>null</code> if no options are specified;
-	 *            some options and values are provided by {@link ISearchOptions}
-	 * @param monitor
-	 *            Progress monitor used to report work completed; <code>null</code>
-	 *            if no progress needs to be reported
-	 */
-	public void createSearchDocuments(SearchDocumentSet documentSet,
-			SearchPattern pattern, SearchScope scope, Map searchOptions,
-			IProgressMonitor monitor)
-	{
-		Assert.isNotNull(id, "The SearchPartipants id has not been initalized");
-		IFile[] files = scope.enclosingFiles();
-		
-		for (int i = 0; i < files.length; i++)
-		{
-			String location = files[i].getLocation().toString();
-			SearchDocument document = documentSet.getSearchDocument(location, id);
-			if(document == null && id != null){
-				documentSet.putSearchDocument(id, document = createSearchDocument(location));
-			}
-			populateSearchDocument(document, pattern); 
-			
-		}
-
-	}	
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchPlugin.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchPlugin.java
deleted file mode 100644
index cf7a9fc..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchPlugin.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search;
-
-import java.util.Map;
-
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.wst.common.core.search.internal.SearchParticipantRegistry;
-import org.eclipse.wst.common.core.search.internal.SearchParticipantRegistryReader;
-import org.eclipse.wst.common.core.search.pattern.SearchPattern;
-import org.osgi.framework.BundleContext;
-
-/**
- * The main plugin class to be used in the desktop.
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public class SearchPlugin extends Plugin implements ISearchOptions
-{
-
-	private SearchParticipantRegistry searchParticipantRegistry;
-
-	// The shared instance.
-	private static SearchPlugin plugin;
-
-	/**
-	 * The constructor.
-	 */
-	public SearchPlugin()
-	{
-		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
-	{
-		super.stop(context);
-		plugin = null;
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static SearchPlugin getDefault()
-	{
-		return plugin;
-	}
-
-	private SearchParticipantRegistry getSearchParticipantRegistry()
-	{
-		if (searchParticipantRegistry == null)
-		{
-			searchParticipantRegistry = new SearchParticipantRegistry();
-			new SearchParticipantRegistryReader(searchParticipantRegistry)
-					.readRegistry();
-		}
-		return searchParticipantRegistry;
-	}
-
-
-	public SearchParticipant getSearchParticipant(String id)
-	{
-		return getSearchParticipantRegistry().getSearchParticipant(id);
-	}
-
-	/**
-	 * Returns the registered search participants that support the specified search
-	 * pattern and options, loading and creating the search participants if necessary.
-	 * @param pattern The pattern representing a search request
-	 * @param searchOptions Map of options and values defining behavior of the search;
-	 *         <code>null</code> if no options are specified;
-	 *         some options and values are provided by {@link ISearchOptions}
-	 * @return Array of search participants that support the specified search request 
-	 */
-	SearchParticipant[] loadSearchParticipants(SearchPattern pattern, Map searchOptions)
-	{
-		return getSearchParticipantRegistry().getParticipants(pattern, searchOptions);
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchRequestor.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchRequestor.java
deleted file mode 100644
index 460b589..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/SearchRequestor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search;
-
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * Collects the results from a search engine query. Clients implement a subclass
- * to pass to <code>SearchEngine.search</code> and implement the
- * {@link #acceptSearchMatch(SearchMatch)} method.
- * <p>
- * The subclasses of the SearchRequestor could collected search matches, filter,
- * sort and group them. It's up to the client to pass the required extension of
- * the SearchRequestor to the search engine.
- * </p>
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- * 
- * @see SearchEngine
- */
-public abstract class SearchRequestor
-{
-
-	/**
-	 * Accepts the given search match.
-	 * 
-	 * @param match
-	 *            the found match
-	 * @throws CoreException
-	 */
-	public abstract void acceptSearchMatch(SearchMatch match)
-			throws CoreException;
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/ComponentDeclarationEntry.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/ComponentDeclarationEntry.java
deleted file mode 100644
index f193937..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/ComponentDeclarationEntry.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.document;
-
-import org.eclipse.wst.common.core.search.pattern.QualifiedName;
-
-/**
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- *
- */
-public class ComponentDeclarationEntry extends Entry
-{
-	QualifiedName metaName;
-    QualifiedName name;
-
-	public QualifiedName getName()
-	{
-		return name;
-	}
-
-	public void setName(QualifiedName name)
-	{
-		this.name = name;
-	}
-
-  public QualifiedName getMetaName()
-  {
-    return metaName;
-  }
-
-  public void setMetaName(QualifiedName metaName)
-  {
-    this.metaName = metaName;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/ComponentReferenceEntry.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/ComponentReferenceEntry.java
deleted file mode 100644
index d532f26..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/ComponentReferenceEntry.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.document;
-
-import org.eclipse.wst.common.core.search.pattern.QualifiedName;
-
-/**
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- *
- */
-public class ComponentReferenceEntry extends Entry
-{
-	QualifiedName name;
-
-	public QualifiedName getName()
-	{
-		return name;
-	}
-
-	public void setName(QualifiedName name)
-	{
-		this.name = name;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/Entry.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/Entry.java
deleted file mode 100644
index acd10a6..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/Entry.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.document;
-
-/**
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- *
- */
-public class Entry
-{
-  String key;
-  String category;
-
-	public Entry()
-{
-	super();
-	
-}
-
-	public String getCategory()
-	{
-		return category;
-	}
-
-	
-
-	public String getKey()
-	{
-		return key;
-	}
-
-	public void setCategory(String category)
-	{
-		this.category = category;
-	}
-
-	public void setKey(String key)
-	{
-		this.key = key;
-	}
-
-	
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/FileReferenceEntry.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/FileReferenceEntry.java
deleted file mode 100644
index 2789503..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/FileReferenceEntry.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.document;
-
-/**
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- *
- */
-public class FileReferenceEntry extends Entry
-{
-	String relativeFilePath;
-    String resolvedURI;
-	String publicIdentifier;
-
-	public String getPublicIdentifier()
-	{
-		return publicIdentifier;
-	}
-
-	public void setPublicIdentifier(String publicIdentifier)
-	{
-		this.publicIdentifier = publicIdentifier;
-	}
-
-	public String getRelativeFilePath()
-	{
-		return relativeFilePath;
-	}
-
-	public void setRelativeFilePath(String relativeFilePath)
-	{
-		this.relativeFilePath = relativeFilePath;
-	}
-
-  public String getResolvedURI()
-  {
-    return resolvedURI;
-  }
-
-  public void setResolvedURI(String resolvedURI)
-  {
-    this.resolvedURI = resolvedURI;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/SearchDocument.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/SearchDocument.java
deleted file mode 100644
index d808f19..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/SearchDocument.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.document;
-
-import org.eclipse.wst.common.core.search.SearchParticipant;
-import org.eclipse.wst.common.core.search.SearchRequestor;
-
-/**
- * A search document encapsulates a content to be searched in. A search
- * participant creates a search document based on the file locations to locate
- * matches.
- * <p>
- * This class is intended to be subclassed by clients.
- * </p>
- * issue (cs/eb) does a search participant always create a SearchDocument?
- * 
- * <p>
- * SearchParticipant or search client create search documents for the search
- * pass where precise locations of the matches will be determined by calling
- * {@link SearchParticipan#locateMatches}
- * </p>
- * <p>
- * SearchParticipant knows how to create search document that it can process.
- * </p>
- * <p>
- * The intent of the separation of the {@link SearchDocument} from the
- * {@link SearchParticipant} is to enable the other search participants to
- * process parts of the document. For example, if XML document has a fragment
- * that it can not process, e.g. Java, then XML participant would create
- * SearchDocument for that fragment which contains Java compilation unit, and
- * pass it to the Java search participant. Passing its own
- * {@link SearchRequestor} this participant can then map the match positions
- * back to the original contents, create its own matches and report them to the
- * original requestor.
- * </p>
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- * 
- * @see SearchParticipant
- */
-public abstract class SearchDocument
-{
-
-	private String documentPath;
-	private SearchParticipant participant; 
-
-	/**
-	 * Creates a new search document. The given document path is a string that
-	 * uniquely identifies the document. Most of the time it is a
-	 * workspace-relative path, but it can also be a file system path, or a path
-	 * inside a zip file.
-	 * 
-	 * @param documentPath
-	 *            the path to the document, or <code>null</code> if none
-	 */
-	protected SearchDocument(String documentPath, SearchParticipant participant)
-	{
-		this.documentPath = documentPath;
-		this.participant = participant;
-	}
-
-	public abstract Entry[] getEntries(String category, String key, int matchRule);
-
-	/**
-	 * Returns the model of this document. Model may be different from actual
-	 * resource at corresponding document path due to preprocessing.
-	 * <p>
-	 * This method must be implemented in subclasses.
-	 * </p>
-	 * 
-	 * @return the model of this document, or <code>null</code> if none
-	 */
-	public abstract Object getModel();
-	
-	
-	/**
-	 * Returns the participant that created this document.
-	 * 
-	 * @return the participant that created this document
-	 */
-	public final SearchParticipant getParticipant() {
-		return this.participant;
-	}
-	
-	
-//	 this class represents a collection of information
-//	 that has been produced by a search participant
-//	 typically after a file has been processed
-//	 an Entry is typically course grained info that results from the SearchParticipants
-//	 first step ... and is used to compute more accurate SearchMatches during a SearchParticipants 2nd step
-
-	/**
-	 * Returns the path to the original document.
-	 * 
-	 * @return the path to the document
-	 */
-	public final String getPath()
-	{
-		return this.documentPath;
-	} 
-	
-	public abstract void putEntry(Entry entry);
-    
-    public void dispose()
-    {      
-    }
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/SearchDocumentSet.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/SearchDocumentSet.java
deleted file mode 100644
index 42fb34c..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/document/SearchDocumentSet.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.document;
-
-/**
- * The class is used to manage a set of search documents
- * that have been constructed by various participants
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- *
- */
-public abstract class SearchDocumentSet
-{
-  public abstract SearchDocument getSearchDocument(String resourcePath, String participantId);
-  public abstract SearchDocument[] getSearchDocuments(String participantId);
-  public abstract void putSearchDocument(String participantId, SearchDocument document);
-  public abstract SearchDocument _tempGetSearchDocumetn(String resourcePath);
-  public abstract void dispose();
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/Messages.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/Messages.java
deleted file mode 100644
index cc3522b..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/Messages.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-// issue (cs) is this a UI issue?  where does the framework need to expose stings?
-public class Messages extends NLS
-{
-
-	private static final String BUNDLE_NAME = "org.eclipse.wst.common.core.internal.messages";//$NON-NLS-1$
-
-	public static String engine_searching;
-
-	public static String engine_searching_locatingDocuments;
-
-	public static String engine_searching_matching;
-
-	private Messages()
-	{
-		// Do not instantiate
-	}
-
-	static
-	{
-		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchDocumentSetImpl.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchDocumentSetImpl.java
deleted file mode 100644
index e3f6c33..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchDocumentSetImpl.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.internal;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.common.core.search.document.SearchDocument;
-import org.eclipse.wst.common.core.search.document.SearchDocumentSet;
-
-public class SearchDocumentSetImpl extends SearchDocumentSet
-{
-    public Map documentPathMap = new HashMap(); //path --> documetn
-	Map documentMap = new HashMap();  // participantId - > list (document)
-	
-	public SearchDocumentSetImpl()
-	{
-		super();
-	}
-    
-    public SearchDocument _tempGetSearchDocumetn(String resourcePath)
-    {      
-       return (SearchDocument)documentPathMap.get(resourcePath);      
-    }
-    
-    public SearchDocument getSearchDocument(String resourcePath, String participantId)
-	{
-		if(resourcePath == null){
-			return null;
-		}
-		SearchDocument[] documents = getSearchDocuments(participantId);
-		for (int i = 0; i < documents.length; i++)
-		{
-			SearchDocument document = documents[i];
-			if(resourcePath.equals(document.getPath())){
-				return document;
-			}
-		}
-		return null;
-	}
-
-	public SearchDocument[] getSearchDocuments(String participantId)
-	{
-		
-		Object object = documentMap.get(participantId);
-		List documentList = null;
-		if(object instanceof List){
-			documentList = (List)object;
-		}
-		else{
-			documentMap.put(participantId, documentList = new ArrayList());
-		}
-		return (SearchDocument[]) documentList.toArray(new SearchDocument[documentList.size()]);
-		
-	}
-
-	public void putSearchDocument(String participantId, SearchDocument document)
-	{
-		Object object = documentMap.get(participantId);
-		List documentList = null;
-		if(object instanceof List){
-			documentList = (List)object;
-		}
-		else{
-			documentMap.put(participantId, documentList = new ArrayList());
-		}
-		documentList.add(document);
-        documentPathMap.put(document.getPath(), document);
-	}
-
-    
-    public void dispose()
-    {
-      try
-      {
-      for (Iterator i = documentMap.values().iterator(); i.hasNext(); )
-      {
-        Object o = i.next();
-        if (o instanceof List)
-        {  
-          for (Iterator j = ((List)o).iterator(); j.hasNext(); )
-          {
-            Object o2 = j.next();
-            if (o2 instanceof SearchDocument)
-            {  
-               SearchDocument searchDocument = (SearchDocument)o2;
-               searchDocument.dispose();
-            }   
-          }          
-        }       
-      }
-      }
-      catch (Exception e)
-      {
-        e.printStackTrace();
-      }
-    }
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchParticipantDescriptor.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchParticipantDescriptor.java
deleted file mode 100644
index 8e39e12..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchParticipantDescriptor.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.internal;
-
-import org.eclipse.core.expressions.EvaluationResult;
-import org.eclipse.core.expressions.Expression;
-import org.eclipse.core.expressions.ExpressionConverter;
-import org.eclipse.core.expressions.ExpressionTagNames;
-import org.eclipse.core.expressions.IEvaluationContext;
-import org.eclipse.core.runtime.Assert; 
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.wst.common.core.search.SearchParticipant;
-
-public class SearchParticipantDescriptor
-{
-
-	private IConfigurationElement fElement;
-
-	private SearchParticipant participant;
-
-	public SearchParticipantDescriptor(IConfigurationElement element)
-	{
-		this.fElement = element;
-	}
-
-	public SearchParticipant getSearchParticipant()
-	{
-		if (participant == null)
-		{
-			try
-			{
-				participant = (SearchParticipant) fElement
-						.createExecutableExtension("class"); //$NON-NLS-1$
-			} catch (Exception e)
-			{
-				// e.printStackTrace();
-			}
-		}
-		return participant;
-	}
-
-	public boolean matches(IEvaluationContext context) throws CoreException
-	{
-		IConfigurationElement[] elements = fElement
-				.getChildren(ExpressionTagNames.ENABLEMENT);
-		if (elements.length == 0)
-			return false;
-		Assert.isTrue(elements.length == 1);
-		Expression exp = ExpressionConverter.getDefault().perform(elements[0]);
-		return convert(exp.evaluate(context));
-	}
-
-	private boolean convert(EvaluationResult eval)
-	{
-		if (eval == EvaluationResult.FALSE)
-			return false;
-		return true;
-	}
-
-	/**
-	 * @deprecated No replacement
-	 */
-	public String[] getSupportedContentTypes()
-	{
-		return new String[0];
-	}
-
-	/**
-	 * @deprecated No replacement
-	 */
-	public void addSupportedContentTypeId(String contentTypeId)
-	{
-	}
-	
-	public String getElementId(){
-		return fElement.getAttribute("id");
-		
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchParticipantRegistry.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchParticipantRegistry.java
deleted file mode 100644
index a169e91..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchParticipantRegistry.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.internal;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.eclipse.core.expressions.EvaluationContext;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.wst.common.core.search.SearchParticipant;
-import org.eclipse.wst.common.core.search.pattern.SearchPattern;
-
-public class SearchParticipantRegistry
-{
-
-	protected Map idMap = new HashMap(); // maps searchParticipant id to a
-											// searchParticipant descriptor
-
-	public SearchParticipantRegistry()
-	{
-	}
-
-	public void putSearchParticipant(String id,
-			SearchParticipantDescriptor searchParticipantDescriptor)
-	{
-		idMap.put(id, searchParticipantDescriptor);
-	}
-
-	public String[] getSearchParticipantIds()
-	{
-		Set ids = idMap.keySet();
-		return (String[]) ids.toArray(new String[ids.size()]);
-	}
-
-	public Collection getSearchParticipants()
-	{
-		return idMap.values();
-	}
-
-
-	public SearchParticipant getSearchParticipant(String id)
-	{
-		SearchParticipantDescriptor searchParticipantDescriptor = null;
-		if (id != null)
-		{
-			searchParticipantDescriptor = (SearchParticipantDescriptor) idMap
-					.get(id);
-		}
-		return searchParticipantDescriptor != null ? searchParticipantDescriptor
-				.getSearchParticipant()
-				: null;
-
-	}
-
-	public SearchParticipant[] getParticipants(SearchPattern pattern, Map searchOptions)
-	{
-
-		EvaluationContext evalContext = createEvaluationContext(pattern);
-		List result = new ArrayList();
-		for (Iterator iter = getSearchParticipants().iterator(); iter.hasNext();)
-		{
-			SearchParticipantDescriptor descriptor = (SearchParticipantDescriptor) iter
-					.next();
-			try
-			{
-				if (descriptor.matches(evalContext))
-				{
-					try
-					{
-						SearchParticipant participant = descriptor
-								.getSearchParticipant();
-						if (!SearchParticipant.class.isInstance(participant))
-							throw new ClassCastException();
-						if (participant.isApplicable(pattern, searchOptions))
-						{
-							result.add(participant);
-						}
-					} catch (ClassCastException e)
-					{
-						iter.remove();
-					}
-				}
-
-			} catch (CoreException e)
-			{
-				iter.remove();
-			}
-
-		}
-
-		return (SearchParticipant[]) result
-				.toArray(new SearchParticipant[result.size()]);
-	}
-
-	private static EvaluationContext createEvaluationContext(
-			SearchPattern pattern)
-	{
-		EvaluationContext result = new EvaluationContext(null, pattern);
-		result.addVariable("pattern", pattern); //$NON-NLS-1$
-		return result;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchParticipantRegistryReader.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchParticipantRegistryReader.java
deleted file mode 100644
index 7757ce3..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/SearchParticipantRegistryReader.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.internal;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.Platform;
-
-public class SearchParticipantRegistryReader
-{
-	protected static final String EXTENSION_POINT_ID = "searchParticipants"; //$NON-NLS-1$
-
-	protected static final String TAG_NAME = "searchParticipant"; //$NON-NLS-1$
-
-	protected static final String ATT_CLASS = "class"; //$NON-NLS-1$
-
-	protected static final String ATT_ID = "id"; //$NON-NLS-1$
-
-	protected String pluginId, extensionPointId;
-
-	protected SearchParticipantRegistry registry;
-
-	public SearchParticipantRegistryReader(SearchParticipantRegistry registry)
-	{
-		this.registry = registry;
-	}
-
-	public void readRegistry()
-	{
-		String bundleid = "org.eclipse.wst.common.core"; //$NON-NLS-1$
-		IExtensionPoint point = Platform.getExtensionRegistry()
-				.getExtensionPoint(bundleid, EXTENSION_POINT_ID);
-		if (point != null)
-		{
-			IConfigurationElement[] elements = point.getConfigurationElements();
-			for (int i = 0; i < elements.length; i++)
-			{
-				readElement(elements[i]);
-			}
-		}
-	}
-
-	protected void readElement(IConfigurationElement element)
-	{
-		if (element.getName().equals(TAG_NAME))
-		{
-			String contributorClass = element.getAttribute(ATT_CLASS);
-			String id = element.getAttribute(ATT_ID);
-			if (id != null)
-			{
-				if (contributorClass != null)
-				{
-					SearchParticipantDescriptor descriptor = new SearchParticipantDescriptor(
-							element);
-					registry.putSearchParticipant(id, descriptor);
-				}
-			}
-		}
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/messages.properties b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/messages.properties
deleted file mode 100644
index e3a01a8..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/internal/messages.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2005, 2006 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
-###############################################################################
-### Search messages.
-
-engine_searching = Searching...
-engine_searching_locatingDocuments = {0}: locate search documents...
-engine_searching_matching = {0}: locate matches...
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/ComponentDeclarationPattern.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/ComponentDeclarationPattern.java
deleted file mode 100644
index 16f3ffe..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/ComponentDeclarationPattern.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.pattern;
-
-/**
- *
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- *
- */
-public class ComponentDeclarationPattern extends ComponentSearchPattern
-{
-
-	public ComponentDeclarationPattern(QualifiedName name,
-			QualifiedName metaName, int matchRule)
-	{
-		super(null, name, metaName, matchRule);
-
-	}
-
-	public ComponentDeclarationPattern(QualifiedName name,
-			QualifiedName metaName)
-	{
-		super(null, name, metaName);
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/ComponentReferencePattern.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/ComponentReferencePattern.java
deleted file mode 100644
index 2f1e101..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/ComponentReferencePattern.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.pattern;
-
-import org.eclipse.core.resources.IFile;
-
-/**
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- *
- */
-public class ComponentReferencePattern extends ComponentSearchPattern
-{
-
-	public ComponentReferencePattern(IFile file, QualifiedName elementQName,
-			QualifiedName typeQName, int matchRule)
-	{
-		super(file, elementQName, typeQName, matchRule);
-
-	}
-
-	public ComponentReferencePattern(IFile file, QualifiedName elementQName,
-			QualifiedName typeQName)
-	{
-		super(file, elementQName, typeQName);
-
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/ComponentSearchPattern.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/ComponentSearchPattern.java
deleted file mode 100644
index 4741a10..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/ComponentSearchPattern.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.pattern;
-
-import org.eclipse.core.resources.IFile;
-
-/**
- * This class defines generic component pattern. Usually there are two types of
- * component search patterns: pattern for component declaration and for
- * component definition.
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public abstract class ComponentSearchPattern extends SearchPattern
-{
-
-	QualifiedName name;
-
-	QualifiedName metaName;
-
-	IFile file; // (optional) location where component is defined
-
-	public ComponentSearchPattern(IFile file, QualifiedName elementQName,
-			QualifiedName typeQName, int matchRule)
-	{
-		super(matchRule);
-		this.file = file;
-		name = elementQName;
-		metaName = typeQName;
-
-	}
-
-	public ComponentSearchPattern(IFile file, QualifiedName elementQName,
-			QualifiedName typeQName)
-	{
-
-		this.file = file;
-		name = elementQName;
-		metaName = typeQName;
-
-	}
-
-	public IFile getFile()
-	{
-		return file;
-	}
-
-	public QualifiedName getMetaName()
-	{
-		return metaName;
-	}
-
-	public QualifiedName getName()
-	{
-		return name;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/FileReferencePattern.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/FileReferencePattern.java
deleted file mode 100644
index 27c1165..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/FileReferencePattern.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.pattern;
-
-import org.eclipse.core.resources.IFile;
-
-/**
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- *
- */
-public class FileReferencePattern extends SearchPattern
-{
-
-	IFile file;
-
-	public FileReferencePattern(IFile file)
-	{
-		this.file = file;
-	}
-
-	public FileReferencePattern(IFile file, int matchRule)
-	{
-		super(matchRule);
-		this.file = file;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/QualifiedName.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/QualifiedName.java
deleted file mode 100644
index 0f7ab17..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/QualifiedName.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.pattern;
-
-/**
- * This data class represents a qualified name, consisting of a local name and a
- * qualifier
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-// issue (cs) should this go in the 'matching' package (BTW... rename
-// matching->pattern)
-public class QualifiedName
-{
-
-	private String qualifier;
-
-	private String name;
-
-	private static final String NS_DELIM_1 = "{"; //$NON-NLS-1$
-
-	private static final String NS_DELIM_2 = "}"; //$NON-NLS-1$
-
-	/**
-	 * Constructor Creates a qualified name from a namespace and local name.
-	 * 
-	 * @param namespace
-	 * @param localName
-	 */
-	public QualifiedName(String namespace, String localName)
-	{
-
-		super();
-
-		this.qualifier = namespace;
-		if (namespace != null && namespace.length() == 0)
-		{
-			this.qualifier = null;
-		}
-		if (this.qualifier != null && this.qualifier.length() == 0)
-		{
-			this.qualifier = null;
-		}
-
-		this.name = localName;
-		if (localName != null && localName.length() == 0)
-		{
-			this.name = null;
-		}
-
-	}
-
-	/**
-	 * Returns the namespace component of the qualified name.
-	 * 
-	 * @return The namespace; <code>null</code> if none is specified
-	 */
-	public String getNamespace()
-	{
-		return this.qualifier;
-	}
-
-	/**
-	 * Returns the local name component of the qualified name.
-	 * 
-	 * @return The local name; <code>null</code> if none is specified
-	 */
-	public String getLocalName()
-	{
-		return this.name;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Object#equals(java.lang.Object)
-	 */
-	public boolean equals(Object obj)
-	{
-		boolean isEqual = false;
-		if (this == obj)
-		{
-		  isEqual = true;
-		}
-		else
-		{	
-		  if (obj instanceof QualifiedName)
-		  {
-			QualifiedName that = (QualifiedName) obj;
-		    isEqual = isMatch(this.getNamespace(), that.getNamespace()) &&
-		              isMatch(this.getLocalName(), that.getLocalName());	
-		  }  
-		}
-		return isEqual;
-	}
-	
-	protected boolean isMatch(String a, String b)
-	{
-	  return a != null ? a.equals(b) : a == b;
-	}	
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Object#hashCode()
-	 */
-	public int hashCode()
-	{
-		int hash = 0;
-		if (this.qualifier != null)
-		{
-			hash += this.qualifier.hashCode();
-		}
-		if (this.name != null)
-		{
-			hash += this.name.hashCode();
-		}
-		return hash;
-	}
-
-	/**
-	 * Returns a string representation of the qualified name, of the form:
-	 * {namespace}localname. If no namespace is specified, the string has the
-	 * form: {}localname. Note that the string format may change in the future.
-	 * 
-	 * @return The string value
-	 */
-	public String toString()
-	{
-
-		return appendStrings(new String[]
-		{ NS_DELIM_1, // {
-				this.qualifier, NS_DELIM_2, // }
-				this.name });
-
-	}
-
-	/**
-	 * Factory-like method to create a QName object from the string form of a
-	 * QName. The string must have the same format as returned by
-	 * QName.toString().
-	 * 
-	 * @param qnameString -
-	 *            String form of a QName
-	 * @return The created QName object created from the specified string
-	 * @throws IllegalArgumentException -
-	 *             Missing namespace delimiters
-	 */
-	public static QualifiedName valueOf(String qnameString)
-			throws IllegalArgumentException
-	{
-
-		String namespace = null;
-		String localName = null;
-		if (qnameString == null || qnameString.length() == 0)
-		{
-			// Both namespace and local name are null.
-		} else if (qnameString.startsWith(NS_DELIM_1))
-		{
-			// The QName has the notation specifying a namespace.
-			int index = qnameString.indexOf(NS_DELIM_2);
-			if (index == -1)
-			{
-				// The end delimiter for the namespace was not found. The QName
-				// string
-				// is malformed.
-				throw new IllegalArgumentException(
-						"qnameString = " + qnameString); //$NON-NLS-1$
-			}
-			namespace = qnameString.substring(1, index);
-			localName = qnameString.substring(index + 1);
-		} else
-		{
-			// Assume no namespace is specified and the string is a local name.
-			localName = qnameString;
-		}
-		return new QualifiedName(namespace, localName);
-
-	}
-
-	/**
-	 * Creates a single string by appending together an array of strings,
-	 * skipping null strings.
-	 * 
-	 * @param strings -
-	 *            Strings to be appended together
-	 * @return Resulting string
-	 */
-	public static String appendStrings(String[] strings)
-	{
-
-		String result = null;
-		if (strings != null)
-		{
-			StringBuffer tokenBuffer = new StringBuffer();
-			int maxCount = strings.length;
-			String string;
-			for (int i = 0; i < maxCount; i++)
-			{
-				string = strings[i];
-				if (string != null && string.length() > 0)
-				{
-					tokenBuffer.append(string);
-				}// if
-			}// for
-			result = tokenBuffer.toString();
-		}// if
-		return result;
-
-	}// appendStrings()
-
-}// class QName
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/SearchPattern.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/SearchPattern.java
deleted file mode 100644
index df0aaf6..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/pattern/SearchPattern.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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.wst.common.core.search.pattern;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.Platform;
-
-/**
- * A search defines how search results are found.
- * 
- * This class is intended to be subclassed by clients.
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public abstract class SearchPattern implements IAdaptable
-{
-
-	/**
-	 * Match rule: The search pattern matches the search result only if cases
-	 * are the same. Can be combined to previous rules, e.g.
-	 * {@link #R_EXACT_MATCH} | {@link #R_CASE_SENSITIVE}
-	 */
-	public static final int R_CASE_SENSITIVE = 8;
-
-	// Rules for pattern matching: (exact, prefix, pattern) [ | case sensitive]
-	/**
-	 * Match rule: The search pattern matches exactly the search result, that
-	 * is, the source of the search result equals the search pattern.
-	 */
-	public static final int R_EXACT_MATCH = 0;
-
-	/**
-	 * Match rule: The search pattern contains one or more wild cards ('*')
-	 * where a wild-card can replace 0 or more characters in the search result.
-	 */
-	public static final int R_PATTERN_MATCH = 2;
-
-	/**
-	 * Match rule: The search pattern is a prefix of the search result.
-	 */
-	public static final int R_PREFIX_MATCH = 1;
-
-	/**
-	 * Match rule: The search pattern contains a regular expression.
-	 */
-	public static final int R_REGEXP_MATCH = 4;
-
-	private int matchRule;
-
-	public SearchPattern()
-	{
-		this.matchRule = R_EXACT_MATCH | R_CASE_SENSITIVE;
-	}
-
-	public SearchPattern(int matchRule)
-	{
-		this.matchRule = matchRule;
-
-	}
-
-	public final int getMatchRule()
-	{
-		return this.matchRule;
-	}
-
-	public Object getAdapter(Class adapter)
-	{
-		return Platform.getAdapterManager().getAdapter(this, adapter);
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/ContentTypeSearchScope.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/ContentTypeSearchScope.java
deleted file mode 100644
index c67af17..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/ContentTypeSearchScope.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 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.wst.common.core.search.scope;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.content.IContentDescription;
-import org.eclipse.core.runtime.content.IContentType;
-import org.eclipse.core.runtime.content.IContentTypeManager;
-
-/**
- * Scope that has filterers files based on content types. It can limit other
- * scopes with the given file content types.
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public class ContentTypeSearchScope extends SearchScopeImpl
-{
-
-	private List validContentIds = new ArrayList();
-
-	public ContentTypeSearchScope(SearchScope scope, String[] validContentTypes)
-	{
-		if (validContentTypes != null)
-		{
-			for (int i = 0; i < validContentTypes.length; i++)
-			{
-				this.validContentIds.add(validContentTypes[i]);
-			}
-		}
-		if (scope.enclosingFiles() != null)
-		{
-			for (int i = 0; i < scope.enclosingFiles().length; i++)
-			{
-				IFile file = (IFile) scope.enclosingFiles()[i];
-				acceptFile(file);
-			}
-		}
-
-	}
-
-	protected boolean acceptFile(IFile file)
-	{
-
-		if (file == null)
-		{
-			return false;
-		} else
-		{
-			try
-			{
-				IContentDescription description = file.getContentDescription();
-				if (description != null)
-				{
-					IContentType contentType = description.getContentType();
-					if (contentType != null)
-					{
-						// TODO use IContentType.isKindOf
-						for (Iterator iter = validContentIds.iterator(); iter
-								.hasNext();)
-						{
-							String contentId = (String) iter.next();
-							IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
-							IContentType supportedContentType = contentTypeManager.getContentType(contentId);
-							if (supportedContentType != null)
-							{
-								if (contentType.isKindOf(supportedContentType))
-								{
-									files.add(file);
-									projects.add(file.getProject());
-									return true;
-								}
-							}
-
-						}
-
-					}
-				}
-			} catch (CoreException e)
-			{
-				// ignore the file
-			}
-		}
-		return false;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/ProjectSearchScope.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/ProjectSearchScope.java
deleted file mode 100644
index 12ace71..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/ProjectSearchScope.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 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.wst.common.core.search.scope;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-
-/**
- *
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public class ProjectSearchScope extends SearchScopeImpl
-{
-
-	/**
-	 * Creates a scope that ecloses workspace path and eclosing project
-	 * 
-	 * @param workspacePath -
-	 *            path to the resource in the workspace, e.g.
-	 *            /MyProject/MyFile.xml
-	 */
-	public ProjectSearchScope(IPath workspacePath)
-	{
-		super();
-		initialize(workspacePath);
-
-	}
-
-	protected void initialize(IPath workspacePath)
-	{
-		IResource resource = ResourcesPlugin.getWorkspace().getRoot()
-				.findMember(workspacePath);
-		if (resource != null)
-		{
-			IProject project = resource.getProject();
-			traverseContainer(project);
-		}
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/SearchScope.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/SearchScope.java
deleted file mode 100644
index 1dd3efd..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/SearchScope.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 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.wst.common.core.search.scope;
-
-import org.eclipse.core.resources.IFile;
-
-/**
- * A <code>SearchScope</code> defines where search result should be found by a
- * <code>SearchEngine</code> (e.g. project, workspace).
- * 
- * Clients must pass an instance of this class to the <code>search(...)</code>
- * methods. Such an instance can be created using the following factory methods
- * on <code>SearchScope</code>: <code>newSearchScope(IResource[])</code>,
- * <code>newWorkspaceScope()</code>
- * 
- * The default implementaion of the search scope has no filter, and at creation
- * does not contain any files, It could accept any workspace file.
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public abstract class SearchScope
-{
-	/**
-	 * Returns the path to the workspace files that belong in this search scope.
-	 * (see <code>IResource.getFullPath()</code>). For example,
-	 * /MyProject/MyFile.txt
-	 * 
-	 * @return an array of files in the workspace that belong to this scope.
-	 */
-	public abstract IFile[] enclosingFiles();
-
-
-
-	
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/SearchScopeImpl.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/SearchScopeImpl.java
deleted file mode 100644
index 33c4c69..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/SearchScopeImpl.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 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.wst.common.core.search.scope;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-
-/**
- *
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public class SearchScopeImpl extends SearchScope
-{
-
-	protected List files = new ArrayList();
-
-	protected HashSet projects = new HashSet();
-
-	public SearchScopeImpl()
-	{
-		super();
-	}
-
-	/**
-	 * Checks whether the resource at the given path is belongs to this scope.
-	 * Resource path could be added to the scope, if scope conditions are met.
-	 * if {@link ISearchScope.encloses(String resourcePath)} returns false and
-	 * then this method is called and returns true, next call to
-	 * {@link ISearchScope.eclipses(String resourcePath)} should return true.
-	 * 
-	 * @param file -
-	 *            workspace file
-	 * @return whether the resource is enclosed by this scope
-	 */
-	protected boolean acceptFile(IFile file)
-	{
-		if (file == null)
-		{
-			return false;
-		}
-		files.add(file);
-		projects.add(file.getProject());
-		return true;
-
-	}
-
-	/**
-	 * Checks whether the resource at the given path is enclosed by this scope.
-	 * 
-	 * @param resourcePath -
-	 *            workspace relative resource path
-	 * @return whether the resource is enclosed by this scope
-	 */
-	protected boolean encloses(String resourcePath)
-	{
-		IResource resource = ResourcesPlugin.getWorkspace().getRoot()
-				.findMember(resourcePath);
-		if (resource == null)
-			return false;
-		return (files.contains(resource));
-	}
-
-	/**
-	 * Returns the path to the workspace files that belong in this search scope.
-	 * (see <code>IResource.getFullPath()</code>). For example,
-	 * /MyProject/MyFile.txt
-	 * 
-	 * @return an array of files in the workspace that belong to this scope.
-	 */
-	public IFile[] enclosingFiles()
-	{
-		if (files == null)
-			return new IFile[0];
-		return (IFile[]) files.toArray(new IFile[files.size()]);
-	}
-
-	/**
-	 * Returns the paths to the enclosing projects for this search scope. (see
-	 * <code>IResource.getFullPath()</code>). For example, /MyProject
-	 * 
-	 * @return an array of paths to the enclosing projects.
-	 */
-	protected IProject[] enclosingProjects()
-	{
-
-		return (IProject[]) projects.toArray(new IProject[projects.size()]);
-
-	}
-	
-	protected void traverseContainer(IContainer container)
-	{
-
-		IResourceVisitor visitor = new IResourceVisitor()
-		{
-			public boolean visit(IResource resource)
-			{
-				if (resource.getType() == IResource.FILE)
-					acceptFile((IFile) resource);
-				return true;
-			}
-		};
-		try
-		{
-			container.accept(visitor);
-		} catch (CoreException e)
-		{
-			// ignore resource
-		}
-
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/SelectionSearchScope.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/SelectionSearchScope.java
deleted file mode 100644
index 4ffcd3e..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/SelectionSearchScope.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 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.wst.common.core.search.scope;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IResource;
-
-/**
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public class SelectionSearchScope extends SearchScopeImpl
-{
-
-	protected IResource[] resources;
-
-	/**
-	 * Creates a scope that ecloses workspace path and eclosing project
-	 * 
-	 * @param workspacePath -
-	 *            path to the resource in the workspace, e.g.
-	 *            /MyProject/MyFile.xml
-	 */
-	public SelectionSearchScope(IResource[] resources)
-	{
-		super();
-		this.resources = resources;
-		initialize();
-
-	}
-
-	protected void initialize()
-	{
-		if (resources == null)
-			return;
-		for (int index = 0; index < resources.length; index++)
-		{
-			IResource resource = resources[index];
-			if (resource != null)
-			{
-				if (resource.getType() == IResource.FOLDER)
-				{
-					traverseContainer((IFolder) resource);
-				} else if (resource.getType() == IResource.FILE)
-				{
-					acceptFile((IFile) resource);
-				}
-			}
-
-		}
-
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/WorkingSetSearchScope.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/WorkingSetSearchScope.java
deleted file mode 100644
index cab1a19..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/WorkingSetSearchScope.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 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.wst.common.core.search.scope;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IAdaptable;
-
-/**
- * This class is required to wrap the content of an IWorkingSet.
- * We can't use IWorkingSet directly because it's part of an eclipse.ui
- * component. Therefore, we need to create this object as a surrogate.
- * <br>
- * Usage: We get the array IAdaptable[] of the IWorkingSet object and use this
- * array as argument for all methods of this class including the constructor.
- */
-public class WorkingSetSearchScope extends SearchScopeImpl{
-	
-	/**
-	 * Creates an empty scope when no resources is given.
-	 */
-	public WorkingSetSearchScope(){
-		super();
-	}
-  
-	/**
-	 * Intended to be used with an IWorkingSet
-	 * <br>
-	 * For example:
-	 * <pre>
-	 * IWorkingSet oneWorkingSet;
-	 * ...
-	 * IAdaptable[] elements = oneWorkingSet.getElements();
-	 * WorkingSetSearchScope scope = new WorkingSetSearchScope(elements);
-	 * </pre>
-	 */
-	public WorkingSetSearchScope(IAdaptable[] elements)
-	{
-		super();
-		addElementsOfWorkingSet(elements);
-	}
-	
-	/**
-	 * Intended to be used with an IWorkingSet
-	 * <br>
-	 * For example:
-	 * <pre>
-	 * WorkingSetSearchScope scope = ..; 
-	 * ...
-	 * IWorkingSet anotherWorkingSet; 
-	 * IAdaptable[] elements = anotherWorkingSet.getElements();
-	 * scope.addAWorkingSetToScope(elements);
-	 * </pre>
-	 */
-	public void addAWorkingSetToScope(IAdaptable[] elements){
-		addElementsOfWorkingSet(elements);
-	}
-	
-	private void addElementsOfWorkingSet(IAdaptable[] elements){
-		for (int j = 0; j < elements.length; j++){
-			IContainer container = (IContainer) elements[j].getAdapter(IContainer.class);
-			if ( container != null ){
-				traverseContainer(container);
-			}
-			else{
-				IFile aFile = (IFile) elements[j].getAdapter(IFile.class);
-				if ( aFile != null)
-					acceptFile(aFile);
-			}
-		}
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/WorkspaceSearchScope.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/WorkspaceSearchScope.java
deleted file mode 100644
index e01c201..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/scope/WorkspaceSearchScope.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 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.wst.common.core.search.scope;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-
-/**
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-public class WorkspaceSearchScope extends SearchScopeImpl
-{
-
-	protected IResource currentResource;
-
-	/**
-	 * Creates a scope that ecloses workspace path and eclosing project
-	 * 
-	 * @param workspacePath -
-	 *            path to the resource in the workspace, e.g.
-	 *            /MyProject/MyFile.xml
-	 */
-	public WorkspaceSearchScope()
-	{
-		super();
-		initialize();
-
-	}
-
-	protected void initialize()
-	{
-		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-		traverseContainer(root);
-
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/util/CollectingSearchRequestor.java b/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/util/CollectingSearchRequestor.java
deleted file mode 100644
index d227f93..0000000
--- a/plugins/org.eclipse.wst.common.core/src-search/org/eclipse/wst/common/core/search/util/CollectingSearchRequestor.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 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.wst.common.core.search.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.wst.common.core.search.SearchMatch;
-import org.eclipse.wst.common.core.search.SearchRequestor;
-
-/**
- * Collects the results returned by a <code>ISearchEngine</code>.
- * 
- * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
- * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
- * </p>
- */
-// issue should you move this to a util package? what does jdt do?
-public class CollectingSearchRequestor extends SearchRequestor
-{
-	private ArrayList fFound;
-
-	public CollectingSearchRequestor()
-	{
-		fFound = new ArrayList();
-	}
-
-	/**
-	 * @return a List of {@link SearchMatch}es (not sorted)
-	 */
-	public List/* <SearchMatch> */getResults()
-	{
-		return fFound;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.core.search.internal.provisional.SearchRequestor#acceptSearchMatch(org.eclipse.wst.common.search.internal.provisional.SearchMatch)
-	 */
-	public void acceptSearchMatch(SearchMatch match) throws CoreException
-	{
-		fFound.add(match);
-
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.emf/.classpath b/plugins/org.eclipse.wst.common.emf/.classpath
index de9605d..96202d8 100644
--- a/plugins/org.eclipse.wst.common.emf/.classpath
+++ b/plugins/org.eclipse.wst.common.emf/.classpath
@@ -2,7 +2,11 @@
 <classpath>
 	<classpathentry kind="src" path="wtpemf/"/>
 	<classpathentry kind="src" path="workbench/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="org/eclipse/wst/common/**"/>
+		</accessrules>
+	</classpathentry>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.common.emf/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.emf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6c7418f
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,63 @@
+#Sat Mar 24 02:06:02 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
index 60c439d..9328000 100644
--- a/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
@@ -2,16 +2,18 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.emf; singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.204.qualifier
 Bundle-Activator: org.eclipse.wst.common.internal.emf.plugin.EcoreUtilitiesPlugin
 Bundle-Vendor: %pluginProvider
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.internal.emf.plugin;x-internal:=true,
  org.eclipse.wst.common.internal.emf.resource;x-friends:="org.eclipse.wst.common.modulecore",
  org.eclipse.wst.common.internal.emf.utilities;x-internal:=true
-Require-Bundle: org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.wst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)"
-Eclipse-AutoStart: true
+Require-Bundle: org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.jem.util;bundle-version="[2.0.100,3.0.0)"
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.wst.common.emf/about.html b/plugins/org.eclipse.wst.common.emf/about.html
index 4ec5989..2199df3 100644
--- a/plugins/org.eclipse.wst.common.emf/about.html
+++ b/plugins/org.eclipse.wst.common.emf/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>May 2, 2006</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/plugins/org.eclipse.wst.common.emf/build.properties b/plugins/org.eclipse.wst.common.emf/build.properties
index b37b0c5..ed37cff 100644
--- a/plugins/org.eclipse.wst.common.emf/build.properties
+++ b/plugins/org.eclipse.wst.common.emf/build.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2003, 2004 IBM Corporation and others.
+# Copyright (c) 2003, 2006 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
 ###############################################################################
diff --git a/plugins/org.eclipse.wst.common.emf/plugin.properties b/plugins/org.eclipse.wst.common.emf/plugin.properties
index 88459b7..fc83d04 100644
--- a/plugins/org.eclipse.wst.common.emf/plugin.properties
+++ b/plugins/org.eclipse.wst.common.emf/plugin.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2005, 2006 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
+###############################################################################
 PackageURIMap=PackageURIMap
 pluginName=EMF Utilities
 pluginProvider=Eclipse.org
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapter.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapter.java
index f536105..5034c7a 100644
--- a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapter.java
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapter.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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
+ *******************************************************************************/
 /*
  * Created on Oct 26, 2004
  *
@@ -15,98 +25,103 @@
 
 
 
-
-
 /**
- * The ResourceSynchronizedIsLoadingAdapter is used to synchronize the loading 
+ * The ResourceSynchronizedIsLoadingAdapter is used to synchronize the loading
  * of EMF resources. This is the Eclipse version of ResourceIsLoadingAdapter,
- * and uses the Eclipse ILock technology to acquire a semaphore until the 
+ * and uses the Eclipse ILock technology to acquire a semaphore until the
  * Resource is loaded. the waitForResourceToLoad() method will pause until
- * either (a) the Resource has loaded, the Adapter is notified, and the 
+ * either (a) the Resource has loaded, the Adapter is notified, and the
  * semaphore is released or (b) the DELAY timeout is exceeded, which prevents
- * full deadlock. 
+ * full deadlock.
  * 
- * @author mdelder 
+ * @author mdelder
  */
 public class ResourceSynchronizedIsLoadingAdapter extends ResourceIsLoadingAdapter {
-    
-    private final ILock loadingLock;
-    
-    /**
-     * The delay is default to 5 minutes. This is the upward threshhold. The lock
-     * will wait up to DELAY milliseconds to acquire the lock, and bail if not. It 
-     * does not mean that it will wait DELAY milliseconds always. In general, the 
-     * wait should be almost instanteous -- just as long as document loading remains
-     * speedy. 
-     */
-    private static final long DELAY = 300000; 
-    
-    public ResourceSynchronizedIsLoadingAdapter() {
-        loadingLock = Platform.getJobManager().newLock();
-        if(loadingLock != null)
-            loadingLock.acquire();
-    }    
-    
-    
-    /* (non-Javadoc)
-     * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapter#waitForResourceToLoad()
-     */
-    public void waitForResourceToLoad() { 
-        
-        if(loadingLock == null)
-            return;
-        
-        boolean lockAcquired = false;
-        try {
-            if( loadingLock != null ) 
-                if( !(lockAcquired = loadingLock.acquire(DELAY)) )  
-                    logWarning(); 
-        } catch (Throwable t) { 
-        } finally {
-            if(lockAcquired)
-                loadingLock.release();
-        }
-        
-    }
-    
-    
-    /**
-     * 
-     */
-    private void logWarning() { 
-        Notifier target = getTarget();
-        if(target == null || !(target instanceof Resource)) { 
-            Resource resource = (Resource) target;
-            System.err.println("[WARNING] Could not acquire Semaphore Lock for Resource: \""+resource.getURI() + "\" in " + getClass());
-        }
-        
-    }
+
+	private final ILock loadingLock;
+
+	/**
+	 * The delay is default to 5 minutes. This is the upward threshhold. The
+	 * lock will wait up to DELAY milliseconds to acquire the lock, and bail
+	 * if not. It does not mean that it will wait DELAY milliseconds always.
+	 * In general, the wait should be almost instanteous -- just as long as
+	 * document loading remains speedy.
+	 */
+	private static final long DELAY = 300000;
+
+	public ResourceSynchronizedIsLoadingAdapter() {
+		loadingLock = Platform.getJobManager().newLock();
+		if (loadingLock != null)
+			loadingLock.acquire();
+	}
 
 
-    /* (non-Javadoc)
-     * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
-     */
-    public void notifyChanged(Notification notification) { 
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapter#waitForResourceToLoad()
+	 */
+	public void waitForResourceToLoad() {
 
-		if (notification.getNotifier() != null) {		    
-			//listen for the remove of the loading adapter
+		if (loadingLock == null)
+			return;
+
+		boolean lockAcquired = false;
+		try {
+			if (loadingLock != null)
+				if (!(lockAcquired = loadingLock.acquire(DELAY)))
+					logWarning();
+		}
+		catch (InterruptedException e) {
+			// ignore, just continue
+		}
+		finally {
+			if (lockAcquired)
+				loadingLock.release();
+		}
+
+	}
+
+
+	/**
+	 * 
+	 */
+	private void logWarning() {
+		Notifier target = getTarget();
+		if (target == null || !(target instanceof Resource)) {
+			Resource resource = (Resource) target;
+			System.err.println("[WARNING] Could not acquire Semaphore Lock for Resource: \"" + resource.getURI() + "\" in " + getClass());
+		}
+
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
+	 */
+	public void notifyChanged(Notification notification) {
+
+		if (notification.getNotifier() != null) {
+			// listen for the remove of the loading adapter
 			if (isSetLoadedResourceNotification(notification)) {
-			    if(loadingLock != null)
-			        loadingLock.release();
-				removeIsLoadingSupport();  				
+				if (loadingLock != null)
+					loadingLock.release();
+				removeIsLoadingSupport();
 			}
-		}         
-    }
-    
-    
-    /* (non-Javadoc)
-     * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapter#forceRelease()
-     */
-    public void forceRelease() { 
-        try {
-	        if(loadingLock != null && loadingLock.getDepth() > 0)
-	            loadingLock.release();
-        } catch(Throwable t) {}
-    }
+		}
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.ibm.wtp.internal.emf.utilities.ResourceIsLoadingAdapter#forceRelease()
+	 */
+	public void forceRelease() {
+		if (loadingLock != null && loadingLock.getDepth() > 0)
+			loadingLock.release();
+	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapterFactory.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapterFactory.java
index b3d4495..1990e8a 100644
--- a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapterFactory.java
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/ResourceSynchronizedIsLoadingAdapterFactory.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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
+ *******************************************************************************/
 /*
  * Created on Oct 26, 2004
  *
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/EcoreUtilitiesPlugin.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/EcoreUtilitiesPlugin.java
index d21bec3..1c24c05 100644
--- a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/EcoreUtilitiesPlugin.java
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/EcoreUtilitiesPlugin.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -52,4 +52,4 @@
 		//use a synchronized loading adapter factory
 		ResourceIsLoadingAdapterFactory.INSTANCE = new ResourceSynchronizedIsLoadingAdapterFactory();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PackageURIMapReader.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PackageURIMapReader.java
index 68b9fe4..d1c39b0 100644
--- a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PackageURIMapReader.java
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PackageURIMapReader.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -68,4 +68,4 @@
 		String uri = element.getAttribute(URI_ATT_NAME);
 		reg.registerPrefixToPackageURI(prefix, uri);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PluginRendererFactoryDefaultHandler.java b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PluginRendererFactoryDefaultHandler.java
index c24392a..ee80757 100644
--- a/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PluginRendererFactoryDefaultHandler.java
+++ b/plugins/org.eclipse.wst.common.emf/workbench/org/eclipse/wst/common/internal/emf/plugin/PluginRendererFactoryDefaultHandler.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -49,4 +49,4 @@
 	}
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/AbstractRendererImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/AbstractRendererImpl.java
index 9112aef..cff83b7 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/AbstractRendererImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/AbstractRendererImpl.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 
@@ -149,4 +151,4 @@
 	public boolean isBatchMode() {
 		return false;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.java
index 2419be7..db9fe94 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import java.io.IOException;
@@ -269,19 +271,53 @@
             }
         }
     }
+	public void loadExisting(Map options) throws IOException {
+
+		
+        ResourceIsLoadingAdapter adapter = null;
+        if (isLoaded) {
+            adapter = ResourceIsLoadingAdapter.findAdapter(this);
+            if (adapter != null) 
+                adapter.waitForResourceToLoad();
+            return;
+        }
+        synchronized (this) {            
+            adapter = ResourceIsLoadingAdapter.findAdapter(this);
+            if (adapter == null && !isLoaded) 
+                addSynchronizationLoadingAdapter();
+        }
+        if(adapter != null)
+            adapter.waitForResourceToLoad();
+        else {
+            try {
+                load((InputStream) null, options);
+            } catch(IOException ioe) {
+                removeLoadingSynchronizationAdapter();
+                throw ioe;
+            } catch(RuntimeException re) {
+                removeLoadingSynchronizationAdapter();
+                throw re;
+            } catch(Error e) {
+                removeLoadingSynchronizationAdapter();
+                throw e;
+            }
+        }
+    }
 	
 	  /**
      * 
      */
-    private void addSynchronizationLoadingAdapter() {
+    protected void addSynchronizationLoadingAdapter() {
+    	synchronized (eAdapters()) {
         if (ResourceIsLoadingAdapter.findAdapter(this) == null)
             eAdapters().add(ResourceIsLoadingAdapterFactory.INSTANCE.createResourceIsLoadingAdapter());
+    	}
     }
 
     /**
      * 
      */
-    private void removeLoadingSynchronizationAdapter() {
+    protected void removeLoadingSynchronizationAdapter() {
         ResourceIsLoadingAdapter adapter = ResourceIsLoadingAdapter.findAdapter(this);
         if (adapter != null) {
             adapter.forceRelease();
@@ -335,4 +371,4 @@
 
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/DefaultTranslatorFactory.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/DefaultTranslatorFactory.java
index 7518472..06abce5 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/DefaultTranslatorFactory.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/DefaultTranslatorFactory.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -98,4 +98,4 @@
 
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
index 0e76b51..124c727 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
@@ -1,13 +1,17 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -15,7 +19,6 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.Notifier;
@@ -61,6 +64,9 @@
 	protected Translator[] childTranslators;
 
 	protected boolean isRoot = false;
+	
+	private static final String PLATFORM = "org.eclipse.core.runtime.Platform"; //$NON-NLS-1$
+	private static final String ISRUNNING = "isRunning"; //$NON-NLS-1$
 
 	private class DependencyAdapter extends org.eclipse.emf.common.notify.impl.AdapterImpl {
 
@@ -126,9 +132,27 @@
 
 	protected void initChildTranslators() {
 		List children = new ArrayList();
-		
-		// Get extended child translators if in OSGI mode
-		if (Platform.isRunning()) {
+		boolean isRunning = false; //is the OSGI platform running ?
+		try {
+			// If the Platform class can be found, then continue to check if the OSGI platform is running
+			Class clazz = Class.forName(PLATFORM);
+			Method m = clazz.getMethod(ISRUNNING, null);
+			isRunning = ((Boolean)m.invoke(clazz, null)).booleanValue();
+		} catch (ClassNotFoundException e) {
+		     // Ignore because this must be in a non_OSGI environment
+		} catch (SecurityException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		} catch (NoSuchMethodException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		} catch (IllegalArgumentException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		} catch (IllegalAccessException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		} catch (InvocationTargetException e) {
+			 // Ignore because this must be in a non_OSGI environment
+		}	
+		//Check for extended child translators because we are in OSGI mode
+		if (isRunning) {
 			Translator[] extendedChildren = TranslatorService.getInstance().getTranslators();
 	        for (int i = 0; i < extendedChildren.length; i++) {
 	        	if (extendedChildren[i] != null)
@@ -136,6 +160,7 @@
 	        }
 		}
 		
+		
 		children.addAll(Arrays.asList(fTranslator.getChildren(getTarget(), fRenderer.getVersionID())));
 
 		VariableTranslatorFactory factory = fTranslator.getVariableTranslatorFactory();
@@ -198,9 +223,12 @@
 	}
 
 	protected String shortClassName(Object o) {
-		String cn = o.getClass().getName();
-		int i = cn.lastIndexOf('.');
-		return cn.substring(i + 1, cn.length());
+		if (o != null) {
+			String cn = o.getClass().getName();
+			int i = cn.lastIndexOf('.');
+			return cn.substring(i + 1, cn.length());
+		}
+		return null;
 	}
 
 	/*
@@ -302,7 +330,10 @@
 					continue;
 				// A node has been reordered in the list
 				Node reorderNode = adapter.getNode();
-				Node insertBeforeNode = (Node) domChildren.get(i);
+				Node insertBeforeNode = reorderNode;
+				if (i < domChildren.size() && domChildren.get(i) != reorderNode) {
+					insertBeforeNode = (Node) domChildren.get(i);
+				}
 				domChildren.remove(reorderNode);
 				domChildren.add(i, reorderNode);
 				if (reorderNode != insertBeforeNode) {
@@ -417,9 +448,11 @@
 		}
 
 		// Remove any remaining adapters.
-		for (; i < mofChildren.size(); i++) {
-			removeMOFValue((EObject) mofChildren.get(i), map);
-		}
+		//make a copy so we remove all items - bug 192468 
+				Object[] childrenArray = mofChildren.toArray();
+				for (; i < childrenArray.length; i++) {
+					removeMOFValue((EObject) childrenArray[i], map);
+		 		}
 
 		// The adapters cannot be updated as they created. We must wait until
 		// all of the adapters are created and removed before updating,
@@ -448,8 +481,8 @@
 		EMF2DOMAdapter adapter = (EMF2DOMAdapter) EcoreUtil.getExistingAdapter(value, EMF2DOMAdapter.ADAPTER_CLASS);
 		if (adapter != null) {
 			// Remove the adapter from BOTH the MOF Object and the DOM Nodes
-			value.eAdapters().remove(adapter);
 			removeAdapters(adapter.getNode());
+			value.eAdapters().remove(adapter);
 		}
 
 		EStructuralFeature feature = translator.getFeature();
@@ -574,8 +607,8 @@
 	protected EMF2DOMAdapter getExistingAdapter(EObject refObject) {
 		EMF2DOMAdapter adapter = (EMF2DOMAdapter) EcoreUtil.getExistingAdapter(refObject, EMF2DOMAdapter.ADAPTER_CLASS);
 		if (adapter != null && adapter.isMOFProxy()) {
-			refObject.eAdapters().remove(adapter);
 			removeDOMAdapter(adapter.getNode(), adapter);
+			refObject.eAdapters().remove(adapter);
 			adapter = null;
 		}
 		return adapter;
@@ -623,7 +656,7 @@
 		try {
 			removeDOMChild(parentNode, childNode, false);
 			parentNode.insertBefore(childNode, insertBeforeNode);
-		} catch (Throwable e) {
+		} catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
@@ -660,7 +693,7 @@
 			if (removeAdapter)
 				removeAdapters(childNode);
 			parentNode.removeChild(childNode);
-		} catch (Throwable e) { 
+		} catch (Exception e) { 
 			e.printStackTrace();
 		}
 	}
@@ -679,7 +712,6 @@
 					localTarget.eAdapters().remove(adapter);
 			}
 		}
-
 		NodeList nl = node.getChildNodes();
 		for (int i = 0; i < nl.getLength(); i++) {
 			Node n = nl.item(i);
@@ -769,8 +801,8 @@
 		EMF2DOMAdapter adapter = (EMF2DOMAdapter) EcoreUtil.getAdapter(mofObject.eAdapters(), EMF2DOMAdapter.ADAPTER_CLASS);
 
 		if (adapter != null && adapter.isMOFProxy()) {
-			mofObject.eAdapters().remove(adapter);
 			removeAdapters(adapter.getNode());
+			mofObject.eAdapters().remove(adapter);
 			adapter = null;
 		}
 		if (adapter == null)
@@ -974,7 +1006,8 @@
 			publicId = docType.getPublicId();
 			systemId = docType.getSystemId();
 		}
-		if (!(StringUtil.stringsEqual(publicId, resource.getPublicId()) && StringUtil.stringsEqual(systemId, resource.getSystemId())))
+		if ((!(StringUtil.stringsEqual(publicId, resource.getPublicId()) && StringUtil.stringsEqual(systemId, resource.getSystemId()))) || 
+				((resource.getPublicId() == null) || resource.getSystemId() == null))
 			resource.setDoctypeValues(publicId, systemId);
 	}
 
@@ -1683,12 +1716,25 @@
 		map.clearList(mofObject);
 
 		// Go through the list of nodes and update the MOF collection
+		int addIndex = 0;
 		for (int i = 0; i < nodeChildren.size(); i++) {
 			Node child = (Node) nodeChildren.get(i);
 			Object attributeValue = extractValue(child, map, mofObject);
-			if (attributeValue != null)
-				map.setMOFValue(mofObject, attributeValue, i);
-
+			boolean advanceAddIndex = true;
+			if (attributeValue != null){
+				if(map.getFeature() != null && map.getFeature().isUnique() && mofObject.eGet(map.getFeature()) != null && mofObject.eGet(map.getFeature()) instanceof List && ((List) mofObject.eGet(map.getFeature())).contains(attributeValue)){
+					advanceAddIndex = false;
+					String domName = map.domNameAndPath != null ? map.domNameAndPath : "attribute"; //$NON-NLS-1$
+					org.eclipse.jem.util.logger.proxy.Logger.getLogger().logError(new IllegalArgumentException("The 'no duplicates' constraint is violated by "+domName+" = "+attributeValue));
+					handleInvalidMultiNodes(child.getNodeName());
+				} else {
+					map.setMOFValue(mofObject, attributeValue, addIndex);
+				}
+				if(advanceAddIndex){
+					addIndex ++;
+				}
+			}
+			
 			// Adapt the node so update will occur.
 			addDOMAdapter(child);
 		}
@@ -1753,4 +1799,4 @@
 
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMRenderer.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMRenderer.java
index 206860d..53fbdc7 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMRenderer.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMRenderer.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import java.io.IOException;
@@ -261,4 +263,4 @@
 		return getResource().getVersionID();
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXDocumentHandler.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXDocumentHandler.java
index 1ec3dbe..a25bb63 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXDocumentHandler.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXDocumentHandler.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -207,4 +207,4 @@
 	//		//System.err.println(obj);
 	//	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXRenderer.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXRenderer.java
index 7bd2634..86f721f 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXRenderer.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXRenderer.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -172,4 +172,4 @@
 	public int getVersionID() {
 		return getResource().getVersionID();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java
index c5d0807..6955734 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java
@@ -175,7 +175,7 @@
 	 * @return
 	 */
 	private boolean shouldRenderDomPath(EObject target, Translator currentChildTranslator, List mofChildren) {
-		return !currentChildTranslator.isEmptyContentSignificant() || (currentChildTranslator.shouldRenderEmptyDOMPath(target) || mofChildren.size() > 0);
+		return  (currentChildTranslator.shouldRenderEmptyDOMPath(target) || mofChildren.size() > 0);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/FileNameResourceFactoryRegistry.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/FileNameResourceFactoryRegistry.java
index 74b6bc5..41b3dab 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/FileNameResourceFactoryRegistry.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/FileNameResourceFactoryRegistry.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import java.util.HashMap;
@@ -45,7 +47,11 @@
 	}
 
 	public synchronized Resource.Factory getFactory(URI uri) {
+		return getFactory(uri, null);
+	}
 
+	public Resource.Factory getFactory(URI uri, String contentType)
+	{
 		Resource.Factory resourceFactory = null;
 		if(uri != null && uri.lastSegment() != null) {
 			ResourceFactoryDescriptor descriptor = getDescriptor(uri);
@@ -55,7 +61,7 @@
 			}	
 		}
 		if(resourceFactory == null)
-			resourceFactory = super.getFactory(uri);
+			resourceFactory = super.getFactory(uri, contentType);
 		return resourceFactory; 
 	}
 
@@ -69,9 +75,12 @@
 		addDescriptor(new StaticResourceFactoryDescriptor(lastSegment, aFactory));		
 	} 
 
-	protected final synchronized ResourceFactoryDescriptor getDescriptor(URI uri) {
+	protected synchronized ResourceFactoryDescriptor getDescriptor(URI uri) {
 		return (ResourceFactoryDescriptor) descriptors.get(uri.lastSegment());
 	}
+	protected synchronized Map getDescriptors() {
+		return descriptors;
+	}
 
 	protected final synchronized Resource.Factory getFactory(ResourceFactoryDescriptor descriptor) {  
 		Resource.Factory factory = (Factory) factories.get(descriptor);
@@ -81,8 +90,8 @@
 		return factory;
 	}
 
-	protected final void addDescriptor(ResourceFactoryDescriptor descriptor) { 
+	protected void addDescriptor(ResourceFactoryDescriptor descriptor) { 
 		descriptors.put(descriptor.getShortSegment(), descriptor);
 	}
  
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IDTranslator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IDTranslator.java
index 15755f0..64bf6a0 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IDTranslator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IDTranslator.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -72,4 +72,4 @@
 
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IRootObjectResource.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IRootObjectResource.java
new file mode 100644
index 0000000..7048136
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/IRootObjectResource.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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.wst.common.internal.emf.resource;
+
+import org.eclipse.emf.ecore.EObject;
+
+public interface IRootObjectResource {
+
+	public EObject getRootObject();
+
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MappedXMIHelper.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MappedXMIHelper.java
index ac27864..f0939a2 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MappedXMIHelper.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MappedXMIHelper.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import java.util.HashMap;
@@ -292,4 +294,4 @@
 			return XMLHelper.DATATYPE_SINGLE;
 		return super.getFeatureKind(feature);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java
index abfcc83..91ed5bc 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java
@@ -16,6 +16,7 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
+import org.w3c.dom.Node;
 
 /**
  * @author schacher
@@ -78,6 +79,15 @@
 		return false;
 	}
 
-
+	public boolean shouldIndentEndTag(Node node) {
+		if (node.getNodeName().equals(getDOMPath())) {
+			return super.shouldIndentEndTag(node);
+		}
+		Translator delegate = getDelegateFor(node.getNodeName(), null);
+		if (delegate != null) {
+			return delegate.shouldIndentEndTag(node);
+		}
+		return super.shouldIndentEndTag(node);
+	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/NamespaceTranslator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/NamespaceTranslator.java
index b266883..3c23ed4 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/NamespaceTranslator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/NamespaceTranslator.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -109,4 +109,4 @@
 		}
 		return false;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedResource.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedResource.java
index 4aafc23..45faf2b 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedResource.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedResource.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 
@@ -125,4 +127,4 @@
 	 * If the resource is no longer being accessed, then remove it from the resource set.
 	 */
 	void unloadIfNecessary();
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedXMIResourceImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedXMIResourceImpl.java
index 1c0e098..64b9a5c 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedXMIResourceImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ReferencedXMIResourceImpl.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 
@@ -24,7 +26,6 @@
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.internal.emf.utilities.IDUtil;
 
@@ -313,15 +314,26 @@
 	 * @see org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl#doUnload()
 	 */
 	protected void doUnload() {
-		if (isTrackingModification() && editReferenceCount < 1) //do not turn off modification if
-			// we still have a write count
-			setTrackingModification(false);
-		super.doUnload();
-		setForceRefresh(false);
-		setModified(false); //dcb - this is required to ensure that resources without files are
-		// marked as not modified.
-		if (readReferenceCount == 0 && editReferenceCount == 0) {
-			getResourceSet().getResources().remove(this);
+		
+		try {
+			// Using load lock to ensure no other threads will attempt a load during the unload process
+			addSynchronizationLoadingAdapter();
+			waitForResourceToLoadIfNecessary();
+			
+			if (isTrackingModification() && editReferenceCount < 1) //do not turn off modification if
+				// we still have a write count
+				setTrackingModification(false);
+			super.doUnload();
+			setForceRefresh(false);
+			setModified(false); //dcb - this is required to ensure that resources without files are
+			// marked as not modified.
+			if (readReferenceCount == 0 && editReferenceCount == 0 && getResourceSet() != null) {
+				getResourceSet().getResources().remove(this);
+			}
+		
+		} finally {
+			//Removing the load lock
+			removeLoadingSynchronizationAdapter();
 		}
 			
 	}
@@ -331,13 +343,14 @@
 	 * The resource has been unloaded, and there are no references. Treat the resource like a new
 	 * Resource
 	 */
-	private void resetAsNew() {
-		readReferenceCount = 1;
-		isNew = true;
-	}
+	// never used
+//	private void resetAsNew() {
+//		readReferenceCount = 1;
+//		isNew = true;
+//	}
 
 	/**
-	 * @see Resource#save(Object)
+	 * @see org.eclipse.emf.ecore.resource.Resource#save(Object)
 	 */
 	public void save(Map options) throws IOException {
 		notifyAboutToSave();
@@ -400,4 +413,4 @@
 	  }
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Renderer.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Renderer.java
index 6768cd1..4a9c37d 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Renderer.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Renderer.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -59,4 +59,4 @@
 	void setBatchMode(boolean isBatch);
 	
 	boolean isBatchMode();
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RendererFactory.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RendererFactory.java
index 9f294d3..19c133c 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RendererFactory.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RendererFactory.java
@@ -8,10 +8,9 @@
  **************************************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Iterator;
+import java.util.Map;
+import java.util.WeakHashMap;
 
 
 public abstract class RendererFactory {
@@ -56,7 +55,8 @@
 
 		private static final Notifier INSTANCE = new Notifier();
 
-		private final Collection resourceFactoryListeners = new ArrayList();
+		// use a WeakHashMap for a weak HashSet
+		private final Map resourceFactoryListeners = new WeakHashMap();
 
 		private Notifier() {
 		}
@@ -72,17 +72,11 @@
 				 * work
 				 */
 				if (rendererFactory != RendererFactory.getDefaultRendererFactory()) {
-					WeakReference wref = null;
-					Listener listener = null;
 					synchronized (resourceFactoryListeners) {
-						for (Iterator i = resourceFactoryListeners.iterator(); i.hasNext();) {
-							wref = (WeakReference) i.next();
-							listener = (Listener) wref.get();
+						for (Iterator i = resourceFactoryListeners.keySet().iterator(); i.hasNext();) {
+							Listener listener = (Listener) i.next();
 							//System.out.println("Notifying Listener: " + listener);
-							if (listener != null)
-								listener.updateRendererFactory(rendererFactory);
-							else
-								i.remove();
+							listener.updateRendererFactory(rendererFactory);
 						}
 					}
 				}
@@ -92,29 +86,13 @@
 		public void addListener(Listener l) {
 			//System.out.println("Adding listener: " + l);
 			synchronized (resourceFactoryListeners) {
-				resourceFactoryListeners.add(new WeakReference(l));
+				resourceFactoryListeners.put(l, null);
 			}
 		}
 
 		public void removeListener(Listener listenerToRemove) {
-			final int length = resourceFactoryListeners.size();
-			if (length > 0) {
-				WeakReference wref = null;
-				Listener listener = null;
-				synchronized (resourceFactoryListeners) {
-					for (Iterator i = resourceFactoryListeners.iterator(); i.hasNext();) {
-						wref = (WeakReference) i.next();
-						listener = (Listener) wref.get();
-						if (listener != null) {
-							if (listener == listenerToRemove) {
-								i.remove();
-								break;
-							}
-						} else {
-							i.remove();
-						}
-					}
-				}
+			synchronized (resourceFactoryListeners) {
+				resourceFactoryListeners.remove(listenerToRemove);
 			}
 		}
 
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ResourceFactoryDescriptor.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ResourceFactoryDescriptor.java
index 247ae5d..10850e9 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ResourceFactoryDescriptor.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/ResourceFactoryDescriptor.java
@@ -1,15 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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.wst.common.internal.emf.resource;
 
+import org.eclipse.core.runtime.content.IContentType;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
 
@@ -24,14 +25,39 @@
 	 */
 	public abstract boolean isEnabledFor(URI fileURI);
 	
-
+	/**
+	 * The contentType is one optional way that a ResourceFactory
+	 * might apply to a URI. Clients should call {@link isEnabledFor} 
+	 * instead of comparing the content Types when searching for an
+	 * applicable descriptor from a set.  
+	 * 
+	 * <p><b>Subclasses may return null.(optional)</b></p>
+	 *  
+	 * @return The content type that this descriptor is applicable to.
+	 */
+	public IContentType getContentType(){
+		return null;
+	}
+	
+	/**
+	 * In the case where more than one factory is defined for the same fileName, 
+	 * and creation is passed a uri only a default factory is needed
+	 * 
+	 *  
+	 * @return The boolean describing the default factory
+	 */
+	public boolean isDefault(){
+		return true;
+	}
+	
 	/**
 	 * The short segment is one possible way that a ResourceFactory
 	 * might apply to a URI. Clients should call {@link isEnabledFor} 
 	 * instead of comparing the short segments when searching for an
 	 * applicable descriptor from a set.  
 	 * 
-	 * <p><b>Subclasses may NOT return null.</b></p>
+	 * <p><b>Subclasses may NOT return null unless they also override
+	 * {@link #hashCode()} and {@link #equals(Object)}.</b></p>
 	 *  
 	 * @return The short segment that this descriptor is applicable to.
 	 */
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RootTranslator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RootTranslator.java
index 18f8d84..f5640e9 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RootTranslator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/RootTranslator.java
@@ -1,15 +1,18 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 
 public class RootTranslator extends Translator {
@@ -28,7 +31,7 @@
 	 * @see com.ibm.etools.emf2xml.impl.Translator#setMOFValue(Notifier, Object, int)
 	 */
 	public void setMOFValue(Notifier owner, Object value, int newIndex) {
-		((Resource) owner).getContents().add(newIndex, value);
+		((Resource) owner).getContents().add(newIndex, (EObject)value);
 	}
 
 	/**
@@ -46,7 +49,7 @@
 	 */
 	public void setMOFValue(Resource res, Object value) {
 		if (res != null && value != null)
-			res.getContents().add(value);
+			res.getContents().add((EObject)value);
 	}
 
 	/*
@@ -59,4 +62,4 @@
 	}
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/StaticResourceFactoryDescriptor.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/StaticResourceFactoryDescriptor.java
index 491b4c6..8caf4ea 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/StaticResourceFactoryDescriptor.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/StaticResourceFactoryDescriptor.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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.wst.common.internal.emf.resource;
 
 import org.eclipse.core.runtime.Assert;
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java
index 685181c..ab28074 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 
@@ -26,6 +28,7 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
 import org.eclipse.wst.common.internal.emf.utilities.FeatureValueConverter;
+import org.w3c.dom.Node;
 
 
 public class Translator {
@@ -268,6 +271,10 @@
 		return (fStyle & END_TAG_NO_INDENT) == 0;
 	}
 
+	public boolean shouldIndentEndTag(Node node) {
+		return shouldIndentEndTag();
+	}
+
 	public boolean isEmptyContentSignificant() {
 		return ((fStyle & EMPTY_TAG) != 0) || ((fStyle & EMPTY_CONTENT_IS_SIGNIFICANT) != 0);
 	}
@@ -628,7 +635,7 @@
 	 */
 	public void setMOFValue(Resource res, Object value) {
 		if (res != null && value != null)
-			res.getContents().add(value);
+			res.getContents().add((EObject)value);
 	}
 
 	public void removeMOFValue(Notifier owner, Object value) {
@@ -789,4 +796,4 @@
 		return (fStyle & COMMENT_FEATURE) != 0;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java
index 1fa8f5f..5d09434 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.resource;
 
 import java.io.IOException;
@@ -28,7 +30,7 @@
 import org.eclipse.wst.common.internal.emf.utilities.StringUtil;
 import org.xml.sax.EntityResolver;
 
-public abstract class TranslatorResourceImpl extends ReferencedXMIResourceImpl implements TranslatorResource {
+public abstract class TranslatorResourceImpl extends ReferencedXMIResourceImpl implements TranslatorResource, IRootObjectResource{
 	static final public EStructuralFeature ID_FEATURE = EcorePackage.eINSTANCE.getEClass_EIDAttribute();
 	protected static final String DEFAULT_ENCODING = "UTF-8"; //$NON-NLS-1$
 	protected static final String DEFAULT_VERSION = "1.0"; //$NON-NLS-1$
@@ -81,7 +83,7 @@
 	public String getPublicId() {
 		return publicId;
 	}
-
+	
 	/**
 	 * Return the first element in the EList.
 	 */
@@ -379,18 +381,16 @@
 	}
 
 	public void load(Map options) throws IOException {
-		synchronized (this) {
-			if (isLoaded)
+		
+			if (isLoaded())
 				return;
-			// System.out.println(Thread.currentThread() + "
-			// TranslatorResource.load(): " + this);
+			
 			if (renderer.useStreamsForIO()) {
 				super.load(options);
 			}
-			else if (!isLoaded) {
-				load((InputStream) null, options);
+			else if (!isLoaded()) {
+				isShared();
+				loadExisting(options);
 			}
-		}
-
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/XMLEncoderDecoder.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/XMLEncoderDecoder.java
index 7898757..d7b7f3b 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/XMLEncoderDecoder.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/XMLEncoderDecoder.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -167,4 +167,4 @@
 		}
 		return null;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryDescriptor.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryDescriptor.java
index a852031..e6e559b 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryDescriptor.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryDescriptor.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 import org.eclipse.emf.common.notify.AdapterFactory;
@@ -14,4 +16,4 @@
 
 	public AdapterFactory createAdapterFactory();
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryUtil.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryUtil.java
index 706f9ea..36d9173 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryUtil.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/AdapterFactoryUtil.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 import java.util.List;
@@ -42,4 +44,4 @@
 		descriptors.clear();
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/Assert.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/Assert.java
index b375851..3a44751 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/Assert.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/Assert.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -128,4 +128,4 @@
 		}
 		return expression;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CloneablePublic.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CloneablePublic.java
index b243775..2c39fbc 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CloneablePublic.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CloneablePublic.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -14,11 +14,13 @@
  */
 package org.eclipse.wst.common.internal.emf.utilities;
 
+import org.eclipse.emf.common.notify.Adapter;
+
 /**
  * Interface that exposes the clone method, for objects that need to generically copy other
  * cloneable objects
  */
-public interface CloneablePublic extends Cloneable {
+public interface CloneablePublic extends Cloneable, Adapter.Internal {
 	Object clone();
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CommandContext.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CommandContext.java
index 913139c..4dcb883 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CommandContext.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CommandContext.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -82,4 +82,4 @@
 			resourceSet = new ResourceSetImpl();
 		return resourceSet;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CopyGroup.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CopyGroup.java
index 79b3b1e..a23928c 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CopyGroup.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/CopyGroup.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java
index 3e80a89..44f9669 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DOMUtilities.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -700,4 +700,4 @@
 		defaultEntityResolver = resolver;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DanglingHREFException.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DanglingHREFException.java
index 21f9254..debd006 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DanglingHREFException.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DanglingHREFException.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -32,4 +32,4 @@
 	}
 
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultFeatureValueConverter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultFeatureValueConverter.java
index 9227060..ea56697 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultFeatureValueConverter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultFeatureValueConverter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -19,6 +19,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
 
 /**
  * Insert the type's description here. Creation date: (5/10/2001 2:49:49 PM)
@@ -225,39 +226,71 @@
 		EClassifier meta = anAttribute.getEType();
 		if (meta.eClass() == EcorePackage.eINSTANCE.getEEnum())
 			return convertToEnum(aValue, anAttribute);
-		switch (meta.getClassifierID()) {
-			case EcorePackage.ESTRING :
+		if (meta.getEPackage() instanceof EcorePackage)
+		{
+			switch (meta.getClassifierID()) {
+				case EcorePackage.ESTRING :
+					return convertToString(aValue);
+				case EcorePackage.EBOOLEAN_OBJECT :
+				case EcorePackage.EBOOLEAN :
+					return convertToBoolean(aValue);
+				case EcorePackage.EINTEGER_OBJECT :
+				case EcorePackage.EINT :
+					return convertToInteger(aValue);
+				case EcorePackage.EFLOAT_OBJECT :
+				case EcorePackage.EFLOAT :
+					return convertToFloat(aValue);
+				case EcorePackage.ECHARACTER_OBJECT :
+				case EcorePackage.ECHAR :
+					return convertToCharacter(aValue);
+				case EcorePackage.ELONG_OBJECT :
+				case EcorePackage.ELONG :
+					return convertToLong(aValue);
+				case EcorePackage.EBYTE_OBJECT :
+				case EcorePackage.EBYTE :
+					return convertToByte(aValue);
+				case EcorePackage.EDOUBLE_OBJECT :
+				case EcorePackage.EDOUBLE :
+					return convertToDouble(aValue);
+				case EcorePackage.ESHORT_OBJECT :
+				case EcorePackage.ESHORT :
+					return convertToShort(aValue);
+				//		case EcorePackage.EENUM:
+				//			return convertToEnum(aValue, anAttribute);
+				case EcorePackage.EOBJECT :
+					return convertToMofObject(aValue);
+				case EcorePackage.EJAVA_OBJECT :
+					return convertToJavaObject(aValue);
+			}
+		}
+		else if (meta.getEPackage() instanceof XMLTypePackage)
+		{
+			switch (meta.getClassifierID()) {
+			case XMLTypePackage.STRING :
 				return convertToString(aValue);
-			case EcorePackage.EBOOLEAN_OBJECT :
-			case EcorePackage.EBOOLEAN :
+			case XMLTypePackage.BOOLEAN_OBJECT :
+			case XMLTypePackage.BOOLEAN :
 				return convertToBoolean(aValue);
-			case EcorePackage.EINTEGER_OBJECT :
-			case EcorePackage.EINT :
+			case XMLTypePackage.INT_OBJECT :
+			case XMLTypePackage.INTEGER :
+			case XMLTypePackage.INT :
 				return convertToInteger(aValue);
-			case EcorePackage.EFLOAT_OBJECT :
-			case EcorePackage.EFLOAT :
+			case XMLTypePackage.FLOAT_OBJECT :
+			case XMLTypePackage.FLOAT :
 				return convertToFloat(aValue);
-			case EcorePackage.ECHARACTER_OBJECT :
-			case EcorePackage.ECHAR :
-				return convertToCharacter(aValue);
-			case EcorePackage.ELONG_OBJECT :
-			case EcorePackage.ELONG :
+			case XMLTypePackage.LONG_OBJECT :
+			case XMLTypePackage.LONG :
 				return convertToLong(aValue);
-			case EcorePackage.EBYTE_OBJECT :
-			case EcorePackage.EBYTE :
+			case XMLTypePackage.BYTE_OBJECT :
+			case XMLTypePackage.BYTE :
 				return convertToByte(aValue);
-			case EcorePackage.EDOUBLE_OBJECT :
-			case EcorePackage.EDOUBLE :
+			case XMLTypePackage.DOUBLE_OBJECT :
+			case XMLTypePackage.DOUBLE :
 				return convertToDouble(aValue);
-			case EcorePackage.ESHORT_OBJECT :
-			case EcorePackage.ESHORT :
+			case XMLTypePackage.SHORT_OBJECT :
+			case XMLTypePackage.SHORT :
 				return convertToShort(aValue);
-			//		case EcorePackage.EENUM:
-			//			return convertToEnum(aValue, anAttribute);
-			case EcorePackage.EOBJECT :
-				return convertToMofObject(aValue);
-			case EcorePackage.EJAVA_OBJECT :
-				return convertToJavaObject(aValue);
+			}
 		}
 		return aValue;
 	}
@@ -318,4 +351,4 @@
 		String errorString = java.text.MessageFormat.format(FAILED_CONVERSION_PATTERN, new String[]{aValue.toString(), aString});
 		throw new FeatureValueConversionException(errorString);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultOverridableResourceFactoryRegistry.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultOverridableResourceFactoryRegistry.java
index c3777bf..927c0a4 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultOverridableResourceFactoryRegistry.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/DefaultOverridableResourceFactoryRegistry.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -37,6 +37,11 @@
 	}
 
 	public Resource.Factory getFactory(URI uri) {
+		return getFactory(uri, null);
+	}
+
+	public Resource.Factory getFactory(URI uri, String contentType)
+	{
 		Object resourceFactory = null;
 		if (resourceFactory == null) {
 			String protocol = uri.scheme();
@@ -47,7 +52,7 @@
 				if (resourceFactory == null) {
 					resourceFactory = delegatedGetFactory(uri);
 					if (resourceFactory == GLOBAL_FACTORY) {
-						resourceFactory = (Factory) extensionToFactoryMap.get(Resource.Factory.Registry.DEFAULT_EXTENSION);
+						resourceFactory = extensionToFactoryMap.get(Resource.Factory.Registry.DEFAULT_EXTENSION);
 						if (resourceFactory == null)
 							resourceFactory = GLOBAL_FACTORY;
 					}
@@ -67,4 +72,4 @@
 	protected Factory delegatedGetFactory(URI uri) {
 		return Resource.Factory.Registry.INSTANCE.getFactory(uri);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopySession.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopySession.java
index ca678b8..0308041 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopySession.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopySession.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java
index fa24556..22d91e0 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExceptionHelper.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExceptionHelper.java
index b5fc133..7d629af 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExceptionHelper.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExceptionHelper.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -67,4 +67,4 @@
 		}
 		return sb.toString();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExtendedEcoreUtil.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExtendedEcoreUtil.java
index 8489833..e9cf914 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExtendedEcoreUtil.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ExtendedEcoreUtil.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 import java.io.FileNotFoundException;
@@ -269,4 +271,4 @@
 		return (o1 == null ^ o2 == null) || (o1 == null || !o1.equals(o2));
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommand.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommand.java
index d040995..5ed817b 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommand.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommand.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -34,4 +34,4 @@
 	 */
 	public boolean execute(IResource resource, IResourceDelta delta, ICommandContext context) throws CoreException;
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommandContext.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommandContext.java
index bee3f61..e642717 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommandContext.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ICommandContext.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -34,4 +34,4 @@
 	 * @return
 	 */
 	public ResourceSet getResourceSet();
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IDUtil.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IDUtil.java
index 374ae13..388986c 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IDUtil.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IDUtil.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 import org.eclipse.emf.ecore.EClass;
@@ -67,4 +69,4 @@
 		return metaO.getName();
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IsLoadingProxyAdapter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IsLoadingProxyAdapter.java
index d90669b..a75b865 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IsLoadingProxyAdapter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/IsLoadingProxyAdapter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -90,4 +90,4 @@
 		targetObject = null;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/NamespaceAdapter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/NamespaceAdapter.java
index a21a016..0bdac76 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/NamespaceAdapter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/NamespaceAdapter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -202,4 +202,4 @@
 		return result;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/PleaseMigrateYourCodeError.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/PleaseMigrateYourCodeError.java
index 0df81e3..5a548d6 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/PleaseMigrateYourCodeError.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/PleaseMigrateYourCodeError.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -22,4 +22,4 @@
 	public PleaseMigrateYourCodeError() {
 		super(WFTUtilsResourceHandler.PleaseMigrateYourCodeError_ERROR_0);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapter.java
index 3d47574..d36ea59 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapter.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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
+ *******************************************************************************/
 /*
  * Created on Oct 26, 2004
  *
@@ -32,9 +42,10 @@
          * removeIsLoadingSupport() will coordinate with this 
          * synchronization.
          */
-        synchronized (aResource) {
-            adapter = (ResourceIsLoadingAdapter) EcoreUtil.getAdapter(aResource.eAdapters(), ResourceIsLoadingAdapter.class);
+        synchronized(aResource.eAdapters()) {
+        	adapter = (ResourceIsLoadingAdapter) EcoreUtil.getAdapter(aResource.eAdapters(), ResourceIsLoadingAdapter.class);
         }
+        
         return adapter;
     }
 
@@ -78,7 +89,7 @@
          */
         if (getTarget() != null) {
             //System.out.println("ResourceIsLoadingAdapter Synchronizing on " + getTarget());
-            synchronized (getTarget()) {
+            synchronized (getTarget().eAdapters()) {
                 getTarget().eAdapters().remove(this);
             }
         }
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapterFactory.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapterFactory.java
index 0723342..5899f5d 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapterFactory.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/ResourceIsLoadingAdapterFactory.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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
+ *******************************************************************************/
 /*
  * Created on Oct 26, 2004
  *
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorService.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorService.java
index 6641b47..4012a7b 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorService.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/TranslatorService.java
@@ -28,7 +28,8 @@
 	/**
 	 * Static empty array used when no extensions found
 	 */
-	private static final Translator[] NO_TRANSLATORS = new Translator[0];
+	// never used
+	//private static final Translator[] NO_TRANSLATORS = new Translator[0];
 	
 	/**
 	 * Singleton instance of the Translator service
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WFTUtilsResourceHandler.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WFTUtilsResourceHandler.java
index 0ed13f8..6506318 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WFTUtilsResourceHandler.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WFTUtilsResourceHandler.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emf.utilities;
 
 
@@ -43,4 +45,4 @@
 	public static String getString(String key, Object[] args) {
 		return NLS.bind(key, args);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WriteBackHelper.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WriteBackHelper.java
index 967e7e4..7a0aa43 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WriteBackHelper.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/WriteBackHelper.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -133,4 +133,4 @@
 	protected void warn(Resource res, Exception e) {
 		System.err.println(WFTUtilsResourceHandler.getString(WFTUtilsResourceHandler.Warning__Could_not_write_b_WARN_, new Object[]{res.getURI()}));
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/wftutils.properties b/plugins/org.eclipse.wst.common.emf/wtpemf/wftutils.properties
index 8c7b45a..4b2e2ae 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/wftutils.properties
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/wftutils.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2003, 2004 IBM Corporation and others.
+# Copyright (c) 2003, 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
 ###############################################################################
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath b/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath
index 377edbf..fe45152 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/.classpath
@@ -2,7 +2,13 @@
 <classpath>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="property_file"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="org/eclipse/wst/common/**"/>
+			<accessrule kind="accessible" pattern="org/eclipse/wst/validation/**"/>
+			<accessrule kind="accessible" pattern="org/eclipse/jem/**"/>
+		</accessrules>
+	</classpathentry>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.emfworkbench.integration/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..46468f9
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,62 @@
+#Sat Mar 24 02:06:45 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
index aff5c7d..6afb47c 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.emfworkbench.integration; singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.202.qualifier
 Bundle-Activator: org.eclipse.wst.common.internal.emfworkbench.integration.EMFWorkbenchEditPlugin
 Bundle-Vendor: %pluginVendor
 Bundle-Localization: plugin
@@ -10,15 +10,17 @@
  org.eclipse.wst.common.internal.emfworkbench.edit;x-internal:=true,
  org.eclipse.wst.common.internal.emfworkbench.integration;x-internal:=true,
  org.eclipse.wst.common.internal.emfworkbench.validateedit;x-internal:=true
-Require-Bundle: org.eclipse.wst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.emf.edit;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.wst.common.emf;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.xsd;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.wst.validation;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)"
-Eclipse-AutoStart: true
+Require-Bundle: org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.jem.util;bundle-version="[2.0.100,3.0.0)",
+ org.eclipse.emf.edit;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.wst.common.emf;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.validation;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,2.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.4,
+ J2SE-1.5
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html b/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html
index 4ec5989..2199df3 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>May 2, 2006</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties
index 3a6ba45..cdc1ce7 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005 IBM Corporation and others.
+# Copyright (c) 2005, 2006 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
@@ -13,4 +13,4 @@
 Adapter_Factory_Extension=Adapter Factory Extension
 ModifierHelperFactory=ModifierHelperFactory
 pluginName=EMF Workbench Edit Plug-in
-pluginVendor=Eclipse.org
\ No newline at end of file
+pluginVendor=Eclipse.org
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml
index adb8868..5673b57 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/plugin.xml
@@ -33,5 +33,15 @@
       class="org.eclipse.wst.common.internal.emfworkbench.EmfPackagePropertyTester">
     </propertyTester>
   </extension>
+  
+  <extension 
+       point="org.eclipse.jem.util.uiContextSensitiveClass">
+       <uiContextSensitiveClass
+          key="ValidateEditContext"
+          className="org.eclipse.wst.common.internal.emfworkbench.validateedit.ValidateEditHeadlessContext"
+          context="Headless">
+      </uiContextSensitiveClass>
+  </extension>
+  
    
 </plugin>
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/DynamicGrowthModel.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/DynamicGrowthModel.java
index 8aed2ee..d6a9a6d 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/DynamicGrowthModel.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/DynamicGrowthModel.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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.wst.common.internal.emfworkbench;
 
 import java.util.HashMap;
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
index 378788b..66c6b35 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EMFWorkbenchContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -105,11 +105,11 @@
 				editModel.access(accessorKey);
 			}
 		} else {
+			if (editModel.isDisposed() || editModel.isDisposing()) {
+				editModel = createEditModelForWrite(editModelID, params);
+				cacheEditModel(editModel, params);
+			}
 			synchronized (editModel) {
-				if (editModel.isDisposed() || editModel.isDisposing()) {
-					editModel = createEditModelForWrite(editModelID, params);
-					cacheEditModel(editModel, params);
-				}
 				editModel.access(accessorKey);
 			}
 		}
@@ -136,11 +136,11 @@
 					editModel.access(accessorKey);
 				}
 			} else {
+				if (editModel.isDisposed() || editModel.isDisposing()) {
+					editModel = createEditModelForRead(editModelID, params);
+					cacheEditModel(editModel, params);
+				}
 				synchronized (editModel) {
-					if (editModel.isDisposed() || editModel.isDisposing()) {
-						editModel = createEditModelForRead(editModelID, params);
-						cacheEditModel(editModel, params);
-					}
 					EditModelLeastUsedCache.getInstance().access(editModel);
 					editModel.access(accessorKey);
 				}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EditModelLeastUsedCache.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EditModelLeastUsedCache.java
index 4559083..0401cb7 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EditModelLeastUsedCache.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EditModelLeastUsedCache.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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.wst.common.internal.emfworkbench;
 
 import java.util.Collection;
@@ -88,6 +98,7 @@
 	 */
 	public void optimizeLRUSizeIfNecessary() {
 		EditModel model = null;
+		
 		synchronized (lru) {
 			if (lru.size() > threshhold) {
 				// remove oldest element and release the edit model.
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfPackagePropertyTester.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfPackagePropertyTester.java
index c685199..9959402 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfPackagePropertyTester.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/EmfPackagePropertyTester.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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.wst.common.internal.emfworkbench;
 
 import org.eclipse.core.expressions.PropertyTester;
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/PassthruResourceSet.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/PassthruResourceSet.java
index 863e0dd..d1b36ea 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/PassthruResourceSet.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/PassthruResourceSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -47,7 +47,7 @@
 				return false;
 			ResourceSet set = WorkbenchResourceHelperBase.getResourceSet(((Resource) object).getURI());
 			if (set != null)
-				return set.getResources().add(object);
+				return set.getResources().add((Resource)object);
 
 			return super.add(object);
 		}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.java
index fd8d587..6296984 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryDescriptor.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryDescriptor.java
index bf2c38c..e72153d 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryDescriptor.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/AdapterFactoryDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistry.java
index 9fae464..5f0f82d 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistry.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistryException.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistryException.java
index a49c8a0..a5aa1cb 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistryException.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ClientAccessRegistryException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java
index 33b554e..0a8d2f8 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -57,7 +57,7 @@
 	protected static LockManager lockManager = new LockManager();
 	protected static Map projectLocks = new Hashtable();
 
-	protected static ILock getProjectLockObject(IProject aProject){
+	public static ILock getProjectLockObject(IProject aProject){
 		if(null == aProject){
 			return null;
 		}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
index 0733b32..facd9cb 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -304,7 +304,7 @@
 			return this.factory;
 		}
 
-		private void initializeResources() {
+		private synchronized void initializeResources() {
 
 			if (editModelResources == null) {
 				if (configurationElement != null) {
@@ -312,10 +312,12 @@
 					editModelResources = new ArrayList();
 
 					IConfigurationElement[] resources = configurationElement.getChildren(EditModelResource.EDIT_MODEL_RESOURCE_ELEMENT);
+					IConfigurationElement[] resExtensions = configurationElement.getChildren(EDIT_MODEL_RESOURCE_EXTENSION);
+					// set the configurationElement to null- keeps code from reentering
+					discardConfigurationElementIfNecessary();
 					for (int j = 0; j < resources.length; j++) {
 						editModelResources.add(new EditModelResource(resources[j]));
 					}
-					IConfigurationElement[] resExtensions = configurationElement.getChildren(EDIT_MODEL_RESOURCE_EXTENSION);
 					if (resExtensions == null || resExtensions.length == 0) {
 						editModelExtensions = Collections.EMPTY_LIST;
 					} else {
@@ -325,9 +327,9 @@
 							editModelExtensions.add(extension);
 						}
 					}
-					discardConfigurationElementIfNecessary();
 				} else {
 					editModelResources = Collections.EMPTY_LIST;
+					editModelExtensions = Collections.EMPTY_LIST;
 				}
 			}
 		}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ReadOnlyClientAccessRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ReadOnlyClientAccessRegistry.java
index dc8f9c8..e845428 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ReadOnlyClientAccessRegistry.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/ReadOnlyClientAccessRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/Snapshot.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/Snapshot.java
index 91e6f2d..a2b64b4 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/Snapshot.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/Snapshot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedEditModel.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedEditModel.java
index b17f88c..e46fa9a 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedEditModel.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ComposedEditModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/DynamicAdapterFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/DynamicAdapterFactory.java
index 5e40cb9..37571ee 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/DynamicAdapterFactory.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/DynamicAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EMFWorkbenchEditPlugin.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EMFWorkbenchEditPlugin.java
index 234fe1d..e409b3b 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EMFWorkbenchEditPlugin.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EMFWorkbenchEditPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.java
index 3418c3b..d22d645 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
+/*******************************************************************************
+ * Copyright (c) 2003, 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.internal.emfworkbench.integration;
 
 
@@ -35,7 +37,6 @@
 import org.eclipse.core.runtime.SafeRunner;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.command.CommandStack;
 import org.eclipse.emf.common.command.CommandStackListener;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
@@ -232,7 +233,7 @@
 	}
 
 	/**
-	 * This is called with the {@link CommandStack}'s state has changed.
+	 * This is called with the {@linkorg.eclipse.emf.common.command.CommandStack}'s state has changed.
 	 */
 	public void commandStackChanged(java.util.EventObject event) {
 		if (dirtyModelEvent == null)
@@ -506,15 +507,18 @@
 			addEditModelResource(res);
 		}
 		Collection resourceExtensions = EditModelRegistry.getInstance().getEditModelExtensions(getEditModelID());
-		if (resourceExtensions.isEmpty()) {
-			knownResourceExtensions = Collections.EMPTY_LIST;
-		} else {
+		/* bug 170690 - initialize knownResourceExtensions if necessary, and change reference from iter to it */
+		if (knownResourceExtensions == null)
+		{
+			knownResourceExtensions = new ArrayList();
+		}
+		if (!resourceExtensions.isEmpty())
+		{
 			knownResourceExtensions.addAll(resourceExtensions);
 			Iterator it = resourceExtensions.iterator();
 			ResourceSetWorkbenchEditSynchronizer sync = (ResourceSetWorkbenchEditSynchronizer) getEmfContext().getResourceSet().getSynchronizer();
 			while (it.hasNext()) {
-				String extension = (String) iter.next();
-				sync.enableAutoload(extension);
+				sync.enableAutoload(it.next().toString());
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModelModifier.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModelModifier.java
index 53d88ec..c0ed86a 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModelModifier.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModelModifier.java
@@ -338,6 +338,11 @@
 		return aHelper.createNewObjectFromFeature();
 	}
 
+	
+	/**
+	 * Used to remove an object on unset.  Makes the object a proxy  
+	 * on execute and redo commands.  Undo will remove the proxy.
+	 */
 	public class ProxyWrappingCommand extends AbstractCommand {
 		protected Command baseCommand = null;
 		protected EObject eObject = null;
@@ -368,6 +373,7 @@
 		}
 
 		public void redo() {
+			ExtendedEcoreUtil.becomeProxy(eObject, resource);
 			baseCommand.redo();
 		}
 
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelper.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelper.java
index 1936a2c..ad949b3 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelper.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ModifierHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ProjectResourceSetEditImpl.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ProjectResourceSetEditImpl.java
index aa8f271..07a326e 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ProjectResourceSetEditImpl.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ProjectResourceSetEditImpl.java
@@ -18,6 +18,7 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.ContentHandler;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl;
 import org.eclipse.wst.common.internal.emf.resource.ReferencedResource;
@@ -43,11 +44,14 @@
 	 * 
 	 * @see org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl#createResource(org.eclipse.emf.common.util.URI)
 	 */
-	public Resource createResource(URI uri) {
-		Resource result = super.createResource(uri);
+	public Resource createResource(URI uri, String contentType) {
+		Resource result = super.createResource(uri, contentType);
 		if (result != null && WorkbenchResourceHelper.isReferencedResource(result))
 			WorkbenchResourceHelper.cacheSynchronizationStamp((ReferencedResource) result);
 		return result;
 	}
 
+	public Resource createResource(URI uri) {
+		return createResource(uri, ContentHandler.UNSPECIFIED_CONTENT_TYPE);
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
index 1f79b68..3718afe 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -16,9 +16,11 @@
  */
 package org.eclipse.wst.common.internal.emfworkbench.integration;
 
+import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -33,7 +35,9 @@
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.emf.common.util.URI;
@@ -57,8 +61,63 @@
 public class ResourceSetWorkbenchEditSynchronizer extends ResourceSetWorkbenchSynchronizer implements IResourceDeltaVisitor {
 	private static final String CLASS_EXTENSION = "class"; //$NON-NLS-1$
 	private static final String JAVA_EXTENSION = "java"; //$NON-NLS-1$
+	private static final String JAVA_ARCHIVE = "jar"; //$NON-NLS-1$
 	private Set recentlySavedFiles = new HashSet();
 	private Map ignoredFilesCache = new HashMap();
+	private class SavedFileKey {
+		private WeakReference res;
+		private IFile savedFile;
+		public SavedFileKey(Resource res, IFile savedFile) {
+			super();
+			this.res = new WeakReference(res);
+			this.savedFile = savedFile;
+		}
+		public Resource getRes() {
+			return this.res == null ? null : (Resource)res.get();
+		}
+		public void setRes(Resource res) {
+			this.res = new WeakReference(res);
+		}
+		public IFile getSavedFile() {
+			return savedFile;
+		}
+		public void setSavedFile(IFile savedFile) {
+			this.savedFile = savedFile;
+		}
+		public int hashCode() {
+			final int prime = 31;
+			int result = 1;
+			result = prime * result + getOuterType().hashCode();
+			result = prime * result + ((getRes() == null) ? 0 : getRes().hashCode());
+			result = prime * result + ((savedFile == null) ? 0 : savedFile.hashCode());
+			return result;
+		}
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			SavedFileKey other = (SavedFileKey) obj;
+			if (!getOuterType().equals(other.getOuterType()))
+				return false;
+			if (getRes() == null) {
+				if (other.getRes() != null)
+					return false;
+			} else if (!getRes().equals(other.getRes()))
+				return false;
+			if (savedFile == null) {
+				if (other.savedFile != null)
+					return false;
+			} else if (!savedFile.equals(other.savedFile))
+				return false;
+			return true;
+		}
+		private ResourceSetWorkbenchEditSynchronizer getOuterType() {
+			return ResourceSetWorkbenchEditSynchronizer.this;
+		}
+	}
 
 	/** The emf resources to be removed from the resource set as a result of a delta */
 	protected List deferredRemoveResources = new ArrayList();
@@ -76,7 +135,7 @@
 	public ResourceSetWorkbenchEditSynchronizer(ResourceSet aResourceSet, IProject aProject) {
 		super(aResourceSet, aProject);
 	}
-
+		
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -180,6 +239,7 @@
 	private void primAcceptDelta(IResourceDelta delta, IResourceChangeEvent event) {
 		if (delta != null) {
 			try {
+				currentProjectDelta = null;
 				delta.accept(ResourceSetWorkbenchEditSynchronizer.this);
 			} catch (Exception e) {
 				Logger.getLogger().logError(e);
@@ -219,8 +279,6 @@
 					currentProjectDelta = delta;
 					return true;
 				}
-				// added line
-				currentProjectDelta = null;
 				return false;
 			}
 			if (resource.getType() == IResource.FILE && isInterrestedInFile((IFile) resource)) {
@@ -262,53 +320,88 @@
 	 * @post Return true if a <code>Resource</code> was queued up to be reloaded.
 	 */
 	protected boolean addedResource(IFile aFile) {
-        boolean didProcess = false;
-        Resource resource = getResource(aFile);
-        if ((resource != null) || (recentlySavedFiles.contains(resource))){
-                /*
-                 * The IFile was just added to the workspace but we have a resource
-                 * in memory.  Need to decide if it should be unloaded.
-                 */
-                if (resource.isModified()) {
-                        if (WorkbenchResourceHelper.isReferencedResource(resource)) {
-                                ReferencedResource refRes = (ReferencedResource) resource;
-                                if (refRes.shouldForceRefresh()) {
-                                        deferredUnloadResources.add(resource);
-                                        didProcess = true;
-                                }
-                        }
-                } else {
-                        /*Unload if found and is not modified.*/
-                        deferredUnloadResources.add(resource);
-                        didProcess = true;
-                }
-        } else {                
-                //Process resource as a refresh.
-                URI uri = URI.createPlatformResourceURI(aFile.getFullPath().toString());
-                if ((autoloadResourcesURIs.contains(uri)) || (autoloadResourcesExts.contains(aFile.getFileExtension()))) {
-                        deferredLoadResources.add(uri);
-                        didProcess = true;
-                }
-        }
-        return didProcess;
-}
+		boolean didProcess = false;
+		List resources = getResources(aFile);
+		for (Iterator iterator = resources.iterator(); iterator.hasNext();) {
+			Resource resource = (Resource) iterator.next();
+
+			if (resource != null) {
+				if (recentlySavedFilesContains(resource)) {
+
+					/*
+					 * The IFile was just added to the workspace but we have a
+					 * changed resource in memory. Need to decide if it should
+					 * be unloaded.
+					 */
+					if (resource.isModified()) {
+						if (WorkbenchResourceHelper.isReferencedResource(resource)) {
+							ReferencedResource refRes = (ReferencedResource) resource;
+							if (refRes.shouldForceRefresh()) {
+								deferredUnloadResources.add(resource);
+								didProcess = true;
+							}
+						}
+					}
+				} else {
+					/* Unload if found and is not modified but inconsistent. */
+					if (resource.isLoaded()) {
+						if (WorkbenchResourceHelper.isReferencedResource(resource)) {
+							if (!WorkbenchResourceHelper.isConsistent((ReferencedResource) resource)) {
+								deferredUnloadResources.add(resource);
+								didProcess = true;
+							}
+						} else {
+							deferredUnloadResources.add(resource);
+							didProcess = true;
+						}
+					} else {
+						/* Process autoload resources on added file */
+						URI uri = URI.createPlatformResourceURI(aFile.getFullPath().toString());
+						if ((autoloadResourcesURIs.contains(uri)) || (autoloadResourcesExts.contains(aFile.getFileExtension()))) {
+							deferredLoadResources.add(uri);
+							didProcess = true;
+						}
+					}
+				}
+			}
+		}
+		return didProcess;
+	}
+
+	private synchronized boolean recentlySavedFilesContains(Resource resource) {
+		for (Iterator iterator = recentlySavedFiles.iterator(); iterator.hasNext();) {
+			SavedFileKey key = (SavedFileKey) iterator.next();
+			if (key.getRes() != null && (key.getRes().getURI().equals(resource.getURI()) && key.getRes().getClass().equals(resource.getClass())))
+				return true;
+			}
+		return false;
+	}
 
 	protected boolean processResource(IFile aFile, boolean isRemove) {
-		Resource resource = getResource(aFile);
-		if ((resource != null) || (recentlySavedFiles.contains(resource))){
-			if (resource.isModified()) {
-				if (WorkbenchResourceHelper.isReferencedResource(resource)) {
-					ReferencedResource refRes = (ReferencedResource) resource;
-					if (!refRes.shouldForceRefresh())
-						return false; //Do not do anything
-				} else
-					return false;
+		List resources = getResources(aFile);
+        for (Iterator iterator = resources.iterator(); iterator.hasNext();) {
+			Resource resource = (Resource) iterator.next();
+			if ((resource != null)) {
+				if (recentlySavedFilesContains(resource)) {
+					if (resource.isModified()) {
+						if (WorkbenchResourceHelper.isReferencedResource(resource)) {
+							ReferencedResource refRes = (ReferencedResource) resource;
+							if (!refRes.shouldForceRefresh())
+								continue; // Do not do anything
+						} else
+							continue;
+					}
+				}
+				if (isRemove)
+					deferredRemoveResources.add(resource);
+				else if (resource.isLoaded()) {
+					if (WorkbenchResourceHelper.isReferencedResource(resource)) {
+						if (!WorkbenchResourceHelper.isConsistent((ReferencedResource) resource))
+							deferredUnloadResources.add(resource);
+					} else
+						deferredUnloadResources.add(resource);
+				}
 			}
-			
-			if (isRemove)
-				deferredRemoveResources.add(resource);
-			else if (resource.isLoaded() && !(WorkbenchResourceHelper.isReferencedResource(resource) && WorkbenchResourceHelper.isConsistent((ReferencedResource)resource)))
-				deferredUnloadResources.add(resource);
 		}
 		return false;
 	}
@@ -338,6 +431,28 @@
 		
 		return resourceSet.getResource(URI.createPlatformResourceURI(aFile.getFullPath().toString()), false);
 	}
+	
+	protected List getResources(IFile aFile) {
+
+		List resources = new ArrayList();
+		List allResources = resourceSet.getResources();
+		for (Iterator iterator = allResources.iterator(); iterator.hasNext();) {
+			Resource res = (Resource) iterator.next();
+			URI resURI = res.getURI();
+			String resURIString = "";
+			if (resURI.path() != null) {
+				IPath resURIPath;
+				if (WorkbenchResourceHelper.isPlatformResourceURI(resURI))
+					resURIPath = new Path(URI.decode(resURI.path())).removeFirstSegments(2);
+				else
+					resURIPath = new Path(URI.decode(resURI.path())).removeFirstSegments(1);
+				resURIString = resURIPath.toString();
+			}
+			if (!resURIString.equals("") && aFile.getFullPath().toString().indexOf(resURIString) != -1)
+				resources.add(res);
+		}
+		return resources;
+	}
 
 
 	/**
@@ -345,21 +460,63 @@
 	 */
 	public void preSave(IFile aFile) {
 		if (aFile != null) {
-			recentlySavedFiles.add(aFile);
+			recentlySavedFilesAdd(aFile,null);
 			ignoredFilesCache.remove(aFile);
 		}
 	}
+	
+	/**
+	 * This method should be called prior to writing to an IFile from a MOF resource.
+	 */
+	public void preSave(IFile aFile, Resource res) {
+		if (aFile != null) {
+			recentlySavedFilesAdd(aFile, res);
+			ignoredFilesCache.remove(aFile);
+		}
+	}
+
+	private synchronized boolean recentlySavedFilesAdd(IFile file, Resource res) {
+		return recentlySavedFiles.add(new SavedFileKey(res, file));
+	}
 
 	/**
 	 * This method should be called after a preSave if the save fails
 	 */
 	public void removeFromRecentlySavedList(IFile aFile) {
 		if (aFile != null) {
-			recentlySavedFiles.remove(aFile);
+			recentlySavedFilesForceRemove(aFile);
 			ignoredFilesCache.remove(aFile);
 		}
 	}
 
+	private synchronized boolean recentlySavedFilesRemove(IFile file) {
+		
+		boolean removedFromList = false;
+		for (Iterator iterator = recentlySavedFiles.iterator(); iterator.hasNext();) {
+			SavedFileKey key = (SavedFileKey) iterator.next();
+			if (key.savedFile != null && key.savedFile.equals(file)) {
+				List resources = getResources(file);
+				if (key.getRes() == null || resources.contains(key.getRes()) ) {
+					iterator.remove();
+					removedFromList = true;
+				}
+			}
+		}
+		return removedFromList;
+	}
+	private synchronized boolean recentlySavedFilesForceRemove(IFile file) {
+		
+		boolean removedFromList = false;
+		for (Iterator iterator = recentlySavedFiles.iterator(); iterator.hasNext();) {
+			SavedFileKey key = (SavedFileKey) iterator.next();
+			if (key.savedFile != null && key.savedFile.equals(file)) {
+					iterator.remove();
+					removedFromList = true;
+			}
+		}
+		return removedFromList;
+	}
+
 	/**
 	 * This method should be called just after writing to an IFile from a MOF resource.
 	 * 
@@ -382,11 +539,11 @@
 	 */
 	protected boolean isInterrestedInFile(IFile aFile) {
 		String extension = aFile.getFileExtension();
-		if (CLASS_EXTENSION.equals(extension) || JAVA_EXTENSION.equals(extension))
+		if (CLASS_EXTENSION.equals(extension) || JAVA_EXTENSION.equals(extension) || JAVA_ARCHIVE.equals(extension))
 			return false;
-		if (recentlySavedFiles.remove(aFile)) {
-			cacheIgnored(aFile);
-			return false;
+		if (recentlySavedFilesRemove(aFile)) {
+				cacheIgnored(aFile);
+				return false;
 		}
 		return !hasIgnored(aFile);
 	}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorImpl.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorImpl.java
index 729443f..b00b6f9 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorImpl.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/validateedit/ResourceStateValidatorImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.environment/.classpath b/plugins/org.eclipse.wst.common.environment/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/plugins/org.eclipse.wst.common.environment/.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/plugins/org.eclipse.wst.common.environment/.cvsignore b/plugins/org.eclipse.wst.common.environment/.cvsignore
deleted file mode 100644
index 3609926..0000000
--- a/plugins/org.eclipse.wst.common.environment/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-bin
-build.xml
-temp.folder
-@dot
-src.zip
-javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.environment/.options b/plugins/org.eclipse.wst.common.environment/.options
deleted file mode 100644
index 07f6325..0000000
--- a/plugins/org.eclipse.wst.common.environment/.options
+++ /dev/null
@@ -1,25 +0,0 @@
-# Debugging options for the org.eclipse.wst.env plugin.
-
-# Turn on debugging master switch for the org.eclipse.wst.common.environment plugin.
-org.eclipse.wst.common.environment/debug=true
-
-# Turn on different tracing level
-org.eclipse.wst.common.environment/trace/info=true
-org.eclipse.wst.common.environment/trace/warning=true
-org.eclipse.wst.common.environment/trace/error=true
-
-# Turn on data flow tracing
-org.eclipse.wst.common.environment/trace/data=true
-
-# Turn on command tracing
-org.eclipse.wst.common.environment/trace/command=true
-
-# Turn on emitter tracing
-org.eclipse.wst.common.environment/trace/emitter=true
-
-# Turn on web service ant tracing
-org.eclipse.wst.common.environment/trace/ws_ant=true
-
-# Turn on web service detailed command engine tracing
-org.eclipse.wst.common.environment/trace/ws_dt_cmd_engine=true
-
diff --git a/plugins/org.eclipse.wst.common.environment/.project b/plugins/org.eclipse.wst.common.environment/.project
deleted file mode 100644
index aa72ec5..0000000
--- a/plugins/org.eclipse.wst.common.environment/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.environment</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/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index bd896db..0000000
--- a/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,57 +0,0 @@
-#Mon Jan 30 10:37:36 EST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=ignore
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.pde.prefs
deleted file mode 100644
index 6e43cd0..0000000
--- a/plugins/org.eclipse.wst.common.environment/.settings/org.eclipse.pde.prefs
+++ /dev/null
@@ -1,12 +0,0 @@
-#Mon Jan 30 10:40:26 EST 2006
-compilers.p.deprecated=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=1
-compilers.p.unknown-attribute=0
-compilers.p.unknown-class=0
-compilers.p.unknown-element=1
-compilers.p.unknown-resource=0
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.use-project=true
-eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.wst.common.environment/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.environment/META-INF/MANIFEST.MF
deleted file mode 100644
index 2b4cc7c..0000000
--- a/plugins/org.eclipse.wst.common.environment/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,18 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.wst.common.environment
-Bundle-Version: 1.0.100.qualifier
-Bundle-Activator: org.eclipse.wst.common.internal.environment.plugin.EnvironmentPlugin
-Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.common.environment,
- org.eclipse.wst.common.environment.uri,
- org.eclipse.wst.common.internal.environment.eclipse;x-internal:=true,
- org.eclipse.wst.common.internal.environment.plugin;x-internal:=true,
- org.eclipse.wst.common.internal.environment.relative;x-internal:=true,
- org.eclipse.wst.common.internal.environment.uri.file;x-internal:=true
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,3.3.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,3.4.0)",
- org.eclipse.osgi.util;bundle-version="[3.1.100,3.2.0)"
-Bundle-Vendor: %providerName
-Eclipse-LazyStart: true 
diff --git a/plugins/org.eclipse.wst.common.environment/about.html b/plugins/org.eclipse.wst.common.environment/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.wst.common.environment/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/plugins/org.eclipse.wst.common.environment/build.properties b/plugins/org.eclipse.wst.common.environment/build.properties
deleted file mode 100644
index d3ee390..0000000
--- a/plugins/org.eclipse.wst.common.environment/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html,\
-               plugin.properties,\
-               .options
diff --git a/plugins/org.eclipse.wst.common.environment/plugin.properties b/plugins/org.eclipse.wst.common.environment/plugin.properties
deleted file mode 100644
index c41575f..0000000
--- a/plugins/org.eclipse.wst.common.environment/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 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
-###############################################################################
-
-pluginName=Enviornment Plug-in
-providerName=Eclipse.org
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/Choice.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/Choice.java
deleted file mode 100644
index 7ec982c..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/Choice.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.common.environment;
-
-/**
- * 
- * This class is used by the IStatusHandler interface.
- * It allows code that is reporting status to specify choices to the user
- * which this reporting code can react to. 
- *
- * @since 1.0
- */
-public class Choice {
-
-  private char   shortcut = ' '; 
-  private String label = null;
-  private String description = null;
-  	
-	/**
-	 * Constructor for Choice.
-	 */
-	public Choice() {
-	}
-
-	/**
-	 * Constructor for Choice.
-	 * @param shortcut the single letter shortcut for this choice.
-	 * @param label the label to be displayed to the user for this choice.
-	 */
-	public Choice(char shortcut, String label) {
-		this.shortcut = shortcut;
-		this.label = label;
-	}
-	
-	/**
-	 * Constructor for Choice.
-   * @param shortcut the single letter shortcut for this choice.
-   * @param label the label to be displayed to the user for this choice.
-	 * @param description the description for this choice.
-	 */
-	public Choice(char shortcut, String label, String description) {
-		this.shortcut = shortcut;
-		this.label = label;
-		this.description = description;
-	}
-
-	/**
-	 * Gets the label.
-	 * @return Returns a String
-	 */
-	public String getLabel() {
-		return label;
-	}
-
-	/**
-	 * Sets the label.
-	 * @param label The label to set
-	 */
-	public void setLabel(String label) {
-		this.label = label;
-	}
-
-	/**
-	 * Gets the description.
-	 * @return Returns a String
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-	/**
-	 * Sets the description.
-	 * @param description The description to set
-	 */
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	/**
-	 * Gets the shortcut.
-	 * @return Returns a char
-	 */
-	public char getShortcut() {
-		return shortcut;
-	}
-
-	/**
-	 * Sets the shortcut.
-	 * @param shortcut The shortcut to set
-	 */
-	public void setShortcut(char shortcut) {
-		this.shortcut = shortcut;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentException.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentException.java
deleted file mode 100644
index 6e3f70b..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment;
-
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * This is the exception class for conditions raised by the IEnvironment.
- * 
- * @since 1.0
- */
-public class EnvironmentException extends Exception
-{
-  /**
-   * Comment for <code>serialVersionUID</code>
-   */
-  private static final long serialVersionUID = 3978983275899402036L;
-  
-  /**
-   * The status for this exception.
-   */
-  protected IStatus status = null;
-  
-  /**
-   * Creates a new EnvironmentException.
-   */
-  public EnvironmentException ()
-  {
-    super();
-  }
-
-  /**
-   * Creates a new EnvironmentException.
-   * 
-   * @param status the status for this exception.
-   */
-  public EnvironmentException ( IStatus status )
-  {
-    super(status == null ? null : status.getMessage());
-    this.status = status;
-  }
-
-  /**
-   * Returns the Status object.
-   * 
-   * @return the status for this exception.
-   */
-  public IStatus getStatus()
-  {
-    return status;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentService.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentService.java
deleted file mode 100644
index 5663fec..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/EnvironmentService.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.environment;
-
-import org.eclipse.wst.common.environment.uri.IURIScheme;
-import org.eclipse.wst.common.environment.uri.URIException;
-import org.eclipse.wst.common.internal.environment.eclipse.ConsoleEclipseEnvironment;
-
-/**
- * 
- * This class creates a console environment.  It also contains static
- * conviences methods for creating an ILog object as well as an Eclipse and
- * File Scheme.
- * 
- * @since 1.0
- *
- */
-public class EnvironmentService
-{
-  static private IEnvironment environment;
-  
-  /**
-   * 
-   * @return returns an Eclipse console environment.
-   */
-  public static IEnvironment getEclipseConsoleEnvironment()
-  {
-    if( environment == null ) environment = new ConsoleEclipseEnvironment();
-    
-    return environment; 
-  }  
-  
-  /**
-   * 
-   * @return returns an Eclipse logger.
-   */
-  public static ILog getEclipseLog()
-  {
-    IEnvironment environment = getEclipseConsoleEnvironment();
-    
-    return environment.getLog();
-  }
-  
-  /**
-   * 
-   * @return returns an Eclipse scheme.
-   */
-  public static IURIScheme getEclipseScheme()
-  {
-    IEnvironment environment = getEclipseConsoleEnvironment();
-    IURIScheme   scheme      = null;
-    
-    try
-    {
-      scheme = environment.getURIFactory().newURIScheme( "platform" );
-    }
-    catch( URIException exc )
-    {    
-    }
-    
-    return scheme;
-  }  
-  
-  /**
-   * 
-   * @return returns a File scheme.
-   */
-  public static IURIScheme getFileScheme()
-  {
-    IEnvironment environment = getEclipseConsoleEnvironment();
-    IURIScheme   scheme      = null;
-    
-    try
-    {
-      scheme = environment.getURIFactory().newURIScheme( "file" );
-    }
-    catch( URIException exc )
-    {    
-    }
-    
-    return scheme;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IEnvironment.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IEnvironment.java
deleted file mode 100644
index 568a4f4..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IEnvironment.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment;
-
-import org.eclipse.wst.common.environment.uri.IURIFactory;
-
-
-/**
- * An IEnvironment provides the means for getting a 
- * <ol>
- * <li>A log for writing messages to a logging facility,</li>
- * <li>A progress monitor for receiving progress information,</li>
- * <li>A status handler for receiving and processing status reports,</li>
- * <li>A factory for the handling of URIs (resources).</li>
- * </ol>
- * 
- * @since 1.0
- */
-public interface IEnvironment
-{
-  /**
-   * Returns a logging facility.
-   * 
-   * @return returns a logging facility.
-   */
-  public ILog getLog ();
-
-  /**
-   * Returns a status handler.
-   * 
-   * @return returns a status handler.
-   */
-  public IStatusHandler getStatusHandler ();
-
-  /**
-   * Returns a IURI factory.
-   * Hint: Implementers should insure that the Factory they return
-   * has a reference to this IEnvironment so that IURI objects can
-   * report progress and announce status.
-   * 
-   * @return returns a URI factory.
-   */
-  public IURIFactory getURIFactory ();
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/ILog.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/ILog.java
deleted file mode 100644
index 925ed24..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/ILog.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.common.environment;
-
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * ILog objects provide a means for logging information for FFDC etc.
- * 
- * @since 1.0
- */
-public interface ILog
-{
-  /**
-   * This constant indicates that a logging message is Ok.
-   */
-  public static final int OK = 0;
-  
-  /**
-   * This constant indicates that a logging message is informational.
-   */
-  public static final int INFO = 1;
-  
-  /**
-   * This constant indicates that a logging message is warning.
-   */
-  public static final int WARNING = 2;
-  
-  /**
-   * This constant indicates that a logging message is an error.
-   */
-  public static final int ERROR = 4;
-
-  /**
-   * Returns true if logging is enabled.
-   * There is no requirement to call this method before attempting
-   * a call to one of the <code>log</code> methods, as they will
-   * quietly do nothing if logging is disabled. This method can be
-   * useful, however, anywhere the cost of building up the parameters
-   * to a log method might be high and best avoided except when logging
-   * is enabled.
-   * @return True if logging is enabled, and false otherwise.
-   */
-  public boolean isEnabled ();
-  
-  /**
-   * Returns true if this debug option is set to true.
-   * 
-   * @param option this debug option string.
-   * @return returns true if this debug option is set to true.
-   */
-  public boolean isEnabled (String option);
-
-  /**
-   * Logs a <code>Throwable</code>.
-   * @param severity The severity of the logging entry.
-   * @param messageNum  The message number.
-   * @param caller The object (for non-static methods) or class (for
-   * static methods) doing the logging.
-   * @param method The simple name of the method doing the loging.
-   * @param throwable The Throwable to log.
-   */
-  public void log ( int severity, int messageNum, Object caller, String method, Throwable throwable );
-  
-  /**
-   * Logs a <code>Throwable</code>.
-   * @param severity The severity of the logging entry.
-   * @param option this debug option string.
-   * @param messageNum The message number.
-   * @param caller The object (for non-static methods) or class (for
-   * static methods) doing the logging.
-   * @param method The simple name of the method doing the loging.
-   * @param throwable The Throwable to log.
-   */
-  public void log ( int severity, String option, int messageNum, Object caller, String method, Throwable throwable );
-
-  /**
-   * Logs a <code>Status</code>.
-   * @param severity The severity of the logging entry.
-   * @param messageNum  The message number.
-   * @param caller The object (for non-static methods) or class (for
-   * static methods) doing the logging.
-   * @param method The simple name of the method doing the loging.
-   * @param status The Status to log.
-   */
-  public void log ( int severity, int messageNum, Object caller, String method, IStatus status );
-  
-  /**
-   * Logs a <code>Status</code>.
-   * @param severity The severity of the logging entry.
-   * @param option this debug option string.
-   * @param messageNum  The message number.
-   * @param caller The object (for non-static methods) or class (for
-   * static methods) doing the logging.
-   * @param method The simple name of the method doing the loging.
-   * @param status The Status to log.
-   */
-  public void log ( int severity, String option, int messageNum, Object caller, String method, IStatus status );
-
-  /**
-   * Logs an <code>Object</code>.
-   * @param severity The severity of the logging entry.
-   * @param messageNum  The message number.
-   * @param caller The object (for non-static methods) or class (for
-   * static methods) doing the logging.
-   * @param method The simple name of the method doing the loging.
-   * @param object The Object to log.
-   */
-  public void log ( int severity, int messageNum, Object caller, String method, Object object );
-  
-  /**
-   * Logs an <code>Object</code>.
-   * @param severity The severity of the logging entry.
-   * @param option this debug option string.
-   * @param messageNum  The message number.
-   * @param caller The object (for non-static methods) or class (for
-   * static methods) doing the logging.
-   * @param method The simple name of the method doing the loging.
-   * @param object The Object to log.
-   */
-  public void log ( int severity, String option, int messageNum, Object caller, String method, Object object );
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IStatusHandler.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IStatusHandler.java
deleted file mode 100644
index 9c3aee6..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/IStatusHandler.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.common.environment;
-
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * Processes status events raised by the caller and returns an
- * indication of choices made by the recipient of the status and
- * may raise an exception against the caller to have them abort
- * procesing.
- * 
- * @since 1.0
- */
-public interface IStatusHandler
-{
-  /**
-   * Reports the given Status and set of possible responses.
-   * 
-   * @param status the status to report.
-   * @param choices the choices that will be displayed to the user.
-   * @return returns the choice made by the user/handler.
-   */
-  public Choice report ( IStatus status, Choice[] choices );
-  
-  /**
-   * Reports the given Status with implied options to either
-   * continue or abort.
-   * @param status the status to report.
-   * @throws StatusException Throws an exception if the handler decides the caller
-   * should stop processing.
-   */
-  public void report ( IStatus status ) throws StatusException;
-  
-  /**
-   * Report the given Error Status.  No user feedback is provided.
-   * @param status the error status to report.
-   */
-  public void reportError( IStatus status );
-  
-  /**
-   * Report the given Info Status.  No user feedback is provided.
-   * @param status the info status to report.
-   */
-  public void reportInfo( IStatus status );
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/NullStatusHandler.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/NullStatusHandler.java
deleted file mode 100644
index 3e22891..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/NullStatusHandler.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.common.environment;
-
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * 
- * This class provides a default implementation of the IStatusHandler interface.
- * 
- * @since 1.0
- *
- */
-public class NullStatusHandler implements IStatusHandler
-{
-  
-  /**
-   * @see org.eclipse.env.common.IStatusHandler#report(org.eclipse.core.runtime.IStatus, org.eclipse.env.common.Choice[])
-   */
-  public Choice report(IStatus status, Choice[] choices) 
-  {
-  	Choice result = null;
-  	
-  	// Always take the first choice if available.
-    if( choices != null && choices.length > 0 )
-    {
-    	result = choices[0];
-    }
-    
-    return result;
-  }
-
-  /**
-   * @see org.eclipse.env.common.IStatusHandler#report(org.eclipse.core.runtime.IStatus)
-   */
-  public void report(IStatus status) throws StatusException
-  {
-  }
-  
-  /*
-   * Report and error.
-   */
-  private boolean reportErrorStatus(IStatus status)
-  {
-    return false;
-  }
-  
-  /**
-   * @see org.eclipse.wst.common.environment.IStatusHandler#reportError(org.eclipse.core.runtime.IStatus)
-   */
-  public void reportError(IStatus status)
-  {
-    reportErrorStatus( status );
-  }
-  
-  /**
-   * @see org.eclipse.wst.common.environment.IStatusHandler#reportInfo(org.eclipse.core.runtime.IStatus)
-   */
-  public void reportInfo(IStatus status)
-  {
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/StatusException.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/StatusException.java
deleted file mode 100644
index e747ed0..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/StatusException.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment;
-
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * This is the exception class used by StatusHandlers to tell their
- * callers that processing should stop.
- * 
- * @since 1.0
- */
-public class StatusException extends EnvironmentException
-{
-  /**
-   * Comment for <code>serialVersionUID</code>
-   * */
-  private static final long serialVersionUID = 3618141160322119992L;
-
-  /**
-   * The Choice that lead to the exception being thrown,
-   * if any (ie. may be null).
-   */
-  protected Choice choice;
-
-  /**
-   * Creates a new StatusException with the given Status.
-   * @param status the status for this exception.
-   */
-  public StatusException( IStatus status )
-  {
-    super( status );  
-  }
-  
-  /**
-   * Creates a new StatusException with the given Choice.
-   * The Choice may be null.
-   * @param choice the choice for this exception.
-   */
-  public StatusException ( Choice choice )
-  {
-    super();
-    this.choice = choice;
-  }
-
-  /**
-   * Creates a new StatusException with the given Choice
-   * and status object. The Choice may be null.
-   * 
-   * @param status the status for this exception.
-   * @param choice the choice for this exception.
-   */
-  public StatusException ( IStatus status, Choice choice )
-  {
-    super(status);
-    this.choice = choice;
-  }
-
-  /**
-   * @return Returns the Choice object inside this exception.
-   */
-  public Choice getChoice ()
-  {
-    return choice;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURI.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURI.java
deleted file mode 100644
index 9352326..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURI.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment.uri;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-
-/**
- * A IURI represents a Univeral Resource Identifer.
- * 
- * @since 1.0
- */
-public interface IURI
-{
-  /**
-   * @return Returns the string form of the IURI.
-   * The resource need not exist.
-   */
-  public String toString ();
-
-  /**
-   * @return Returns the IURIScheme for the scheme of this IURI.
-   * The resource need not exist.
-   */
-  public IURIScheme getURIScheme ();
-
-  /**
-   * @return Returns true iff the resource identified by this IURI exists.
-   */
-  public boolean isPresent ();
-
-  /**
-   * @return Returns true iff the resource identified by this IURI exists
-   * and is a leaf. Returns true always for non-hierarchical schemes.
-   */
-  public boolean isLeaf ();
-
-  /**
-   * @return Returns true iff the resource identified by this IURI exists
-   * and is readable. A readable leaf resource indicates that an
-   * input stream can be opened on the resource. A readable folder
-   * resource indicates that the children of the folder, if any,
-   * can be determined via the list() or visit() methods.
-   */
-  public boolean isReadable ();
-
-  /**
-   * @return Returns true iff the resource identified by this IURI exists
-   * and is writable. A writable leaf resource indicates that an
-   * output stream can be opened on the resource. A writable folder
-   * resource indicates that new resources can be created in the folder.
-   */
-  public boolean isWritable ();
-
-  /**
-   * @return Returns true iff this IURI belongs to a hierarchical scheme.
-   * The resource need not exist.
-   * this.isHierarchical() == this.getURIScheme().isHierarchical().
-   */
-  public boolean isHierarchical ();
-
-  /**
-   * @return Returns true iff this IURI is a relative IURI.
-   * The resource need not exist.
-   */
-  public boolean isRelative ();
-
-  /**
-   * @return Returns the IURI of the folder containing this IURI.
-   * The resource need not exist.
-   * @throws URIException if there is no parent URI.
-   */
-  public IURI parent () throws URIException;
-
-  /**
-   * @param relativeURI a relative URI.
-   * @return Returns a new, normalized IURI formed by appending the given
-   * relative IURI to this IURI. Both URIs must be hierarchical.
-   * The resulting IURI will always be hierarchical. The given
-   * IURI must be relative. This IURI can be relative or absolute.
-   * the resulting IURI will be equivalently relative or absolute.
-   * @throws URIException if relativeURI is not relative.
-   */
-  public IURI append ( IURI relativeURI ) throws URIException;
-
-  /**
-   * @return Gets an InputStream for reading from the resource
-   * identified by this leaf or non-hierarchical IURI.
-   * 
-   * @throws URIException if a stream for this URI can not be created.
-   */
-  public InputStream getInputStream () throws URIException;
-
-  /**
-   * @return Gets an OutputStream for writing to the resource
-   * identified by this leaf or non-hierarchical IURI.
-   * @throws URIException if a stream for this URI can not be created.
-   */
-  public OutputStream getOutputStream () throws URIException;
-
-  /**
-   * Creates a new, empty resource at the location identified by
-   * the IURI. On completion, this.isLeaf() == true. If a leaf
-   * resource already exists, this method does nothing. If a
-   * non-leaf resource already exists under this IURI, creation
-   * will fail and an exception will be thrown.
-   * @throws URIException if an error occurs touching this leaf resource.
-   */
-  public void touchLeaf () throws URIException;
-
-  /**
-   * Creates a new folder resource at the location identified by
-   * the IURI. The scheme of the IURI must be hierarchical.
-   * On completion, this.isLeaf() == false. If a folder resource
-   * already exists, this method does nothing. If a leaf resource
-   * already exists under this IURI, creation will fail and an
-   * exception will be thrown.
-   * @throws URIException if an error occurs touching this folder resource.
-   */
-  public void touchFolder () throws URIException;
-
-  /**
-   * Erases the resource identified by this IURI.
-   * @throws URIException if an error occurs erasing this resource.
-   */
-  public void erase () throws URIException;
-
-  /**
-   * Renames or moves the resource identified by this IURI
-   * to the new IURI.
-   * @param newURI the new URI name for this URI.
-   * @throws URIException if an error occurs renaming this resource.
-   */
-  public void rename ( IURI newURI ) throws URIException;
-
-  /**
-   * Visits this resource and its decendants in pre-order fashion.
-   * For each resource, whether a folder or a leaf, the given
-   * IURIVisitor's visit() method is called with the IURI of the
-   * resource. If IURIVisitor.visit() returns false, the visiting
-   * algorithm will "prune" the decendants of the resource and
-   * carry on visiting the rest of the tree. If IURIVisitor.visit()
-   * returns true, the visiting algorithm will continue its walk
-   * down the resource's descendants.
-   * @param uriVisitor the visitor that will be called for each resource visited.
-   * @throws URIException if an error occurs visiting this resource and its children.
-   */
-  public void visit ( IURIVisitor uriVisitor ) throws URIException;
-
-  /**
-   * As for visit(IURIVisitor), except only resource URIs that are
-   * accepted by the given filter are visited. If a folder resource
-   * fails to be accepted by the filter, this will not prevent the
-   * visiting algorithm from walking the resource's descendants.
-   * It remains the job of the visitor to choose whether or not to
-   * prune a branch by returning false or true.
-   * @param uriVisitor the visitor that will be called for each resource visited.
-   * @param uriFilter the resource filter.
-   * @throws URIException if an error occurs visiting this resource and its children.
-   */
-  public void visit ( IURIVisitor uriVisitor, IURIFilter uriFilter ) throws URIException;
-
-  /**
-   * Returns a list of URIs for the immediate children of the given
-   * hierarchical, non-leaf IURI. This method never returns null,
-   * though it may return a zero length array.
-   * @return returns the children for this URI.
-   * @throws URIException if an error occurs locating the children for this URI.
-   */
-  public IURI[] list () throws URIException;
-
-  /**
-   * As for list(), except only URIs that are accepted by the given
-   * filter are returned in the array. This method never returns null,
-   * though it may return a zero length array.
-   * @param uriFilter the child filter.
-   * @return returns the filtered children for this URI.
-   * @throws URIException if an error occurs locating the children for this URI.
-   */
-  public IURI[] list ( IURIFilter uriFilter ) throws URIException;
-
-  /**
-   * @return Returns true if the asURL() method is fair game,
-   * in other words, if this IURI can be converted into a URL.
-   */
-  public boolean isAvailableAsURL ();
-
-  /**
-   * @return Returns a URL object for the resource under this IURI.
-   * There are many URIs and URISchemes for which this method
-   * will fail and throw an exception. It should be used only
-   * in cases where URIs are known to be representable as URLs.
-   * @throws URIException if an error occurs returning this URL.
-   */
-  public URL asURL () throws URIException;
-
-  /**
-   * @return Returns true if the asFile() method is fair game,
-   * in other words, if this IURI can be converted into a File.
-   */
-  public boolean isAvailableAsFile ();
-
-  /**
-   * @return Returns a File object for the resource under this IURI.
-   * There are many URIs and URISchemes for which this method
-   * will fail and throw an exception. It should be used only
-   * in cases where URIs are known to be backed by physical files.
-   * @throws URIException if an error occurs returning this File.
-   */
-  public File asFile () throws URIException;
-
-  /**
-   * @return Returns the IURI as a string.
-   * Equivalent to toString().
-   */
-  public String asString ();
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFactory.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFactory.java
deleted file mode 100644
index f8a3123..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFactory.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment.uri;
-
-import java.net.URL;
-
-/**
- * This is a factory for creating new IURI and IURIScheme objects.
- * 
- * @since 1.0
- */
-public interface IURIFactory
-{
-  /**
-   * Creates and returns a new IURI for the given string.
-   * @param uri the uri to be created.
-   * @return the new URI.
-   * @throws URIException if the uri parameter is not a valid URI.
-   */
-  public IURI newURI ( String uri ) throws URIException;
-
-  /**
-   * Creates and returns a new IURI for the given URL.
-   * @param url the url to use to create this URI
-   * @return the new URI.
-   * @throws URIException if the url parameter is not a valid url.
-   */
-  public IURI newURI ( URL url ) throws URIException;
-
-  /**
-   * Creates and returns a new IURIScheme for the given scheme string.
-   * If the string contains no colons, the entire string is interpretted
-   * as the name of the scheme. If the string contains a colon, then the
-   * substring up to but excluding the first colon is interpretted as the
-   * name of the scheme, meaning the caller can pass in any IURI string in
-   * order to get a IURIScheme object.
-   * 
-   * @param schemeOrURI the scheme or URI from which to create the scheme.
-   * @return the new Scheme.
-   * @throws URIException if schemeOrUri parameter does not contain
-   * a valid scheme or URI name.
-   */
-  public IURIScheme newURIScheme ( String schemeOrURI ) throws URIException;
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFilter.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFilter.java
deleted file mode 100644
index 3e41c8e..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIFilter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment.uri;
-
-/**
- * This interface is implemented by classes that visit or list URIs.
- * Refer to {@link IURI#getChildren}.
- * 
- * @since 1.0
- */
-public interface IURIFilter
-{
-  /**
-   * Filters the given IURI.
-   * @param uri The resource to filter.
-   * @return True if the resource matches the filter,
-   * false if it does not.
-   * @param uri the uri that will be accepted or rejected.
-   * @return returns true if this uri is accepted.
-   * @throws URIException If the filter fails to analyze the resource.
-   */
-  public boolean accepts ( IURI uri ) throws URIException;
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIScheme.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIScheme.java
deleted file mode 100644
index 61177ce..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIScheme.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment.uri;
-
-import java.net.URL;
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * A IURIScheme represents a single scheme for some a family of
- * Univeral Resource Identifiers. Examples include "file", "http"
- * and "platform" (Eclipse).
- * 
- * @since 1.0
- */
-public interface IURIScheme
-{
-  /**
-   * @param uri the URI to be created.
-   * @return Returns a new IURI.
-   * @throws URIException if the uri specified is not valid or
-   * can not be created.
-   */
-  public IURI newURI ( String uri ) throws URIException;
-
-  /**
-   * @param url the url used to create the URI.
-   * @return Returns a new IURI.
-   * @throws URIException if the url specified is not valid or
-   * can not be created.
-   */
-  public IURI newURI ( URL url ) throws URIException;
-
-  /**
-   * @param uri the URI to be created.
-   * @return Returns a new IURI.
-   * @throws URIException if the uri specified is not valid or
-   * can not be created.
-   */
-  public IURI newURI ( IURI uri ) throws URIException;
-
-  /**
-   * @return Returns the proper name of the scheme.
-   */
-  public String toString ();
-
-  /**
-   * @return Returns true if and only if this is a hierarchical scheme.
-   */
-  public boolean isHierarchical ();
-
-  /**
-   * @param uri the uri to check for validity.
-   * @return Returns true if and only if the given IURI satisfies the
-   * grammatical requirements of the scheme. Absolute URIs must
-   * begin with "<scheme>:". Relative URIs must either not contain
-   * a colon, ":", or it must begin with "./".
-   */
-  public boolean isValid ( IURI uri );
-
-  /**
-   * @param uri the uri to check for validity.
-   * @return Returns a Status object indicating whether or not the given
-   * IURI is valid. The severity and message of the Status object
-   * will describe this.
-   */
-  public IStatus validate ( IURI uri );
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIVisitor.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIVisitor.java
deleted file mode 100644
index aa752eb..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/IURIVisitor.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment.uri;
-
-/**
- * This interface is implemented by classes that visit URIs.
- * Refer to {@link IURI#visit}.
- * 
- * @since 1.0
- */
-public interface IURIVisitor
-{
-  /**
-   * Visits the given IURI.
-   * @param uri The resource to visit.
-   * @return True if the resource's descendants should be visited,
-   * or false if they should not be visited.
-   * @throws URIException If the visit method fails.
-   */
-  public boolean visit ( IURI uri ) throws URIException;
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/SimpleURIFactory.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/SimpleURIFactory.java
deleted file mode 100644
index 90945ac..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/SimpleURIFactory.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment.uri;
-
-import java.net.URL;
-import java.util.Hashtable;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.common.internal.environment.eclipse.Messages;
-import org.eclipse.wst.common.internal.environment.relative.RelativeScheme;
-
-/**
- * 
- * This class provides a default implementation of the IURIFactory interface.
- * 
- * @since 1.0
- */
-public class SimpleURIFactory implements IURIFactory
-{
-  private Hashtable    schemes_ = new Hashtable();  
-  
-  /**
-   * @param uri the uri to be created.
-   * @return Creates and returns a new IURI for the given string.
-   * @throws URIException if an error occurs creating this URI.
-   */
-  public IURI newURI(String uri) throws URIException
-  {
-    IURIScheme scheme = newURIScheme( uri, false );
-    
-    return scheme.newURI( uri );
-  }
-
-  /**
-   * @param url the url to use to create this uri.
-   * @return Creates and returns a new IURI for the given URL.
-   * @throws URIException if an error occurs creating this URI.
-   */
-  public IURI newURI(URL url) throws URIException
-  {
-    IURIScheme scheme = newURIScheme( url.toString(), false );
-    
-    return scheme.newURI( url );
-  }
-
-  /**
-   * @param schemeOrURI the scheme name or URI from which this scheme is 
-   * to be created.
-   * @return Creates and returns a new IURIScheme for the given scheme string.
-   * If the string contains no colons, the entire string is interpretted
-   * as the name of the scheme. If the string contains a colon, then the
-   * substring up to but excluding the first colon is interpretted as the
-   * name of the scheme, meaning the caller can pass in any IURI string in
-   * order to get a IURIScheme object.
-   * @throws URIException if an error occurs creating this URI scheme.
-   */
-  public IURIScheme newURIScheme(String schemeOrURI) throws URIException
-  {
-    return newURIScheme( schemeOrURI, true );
-  }
-  
-  /**
-   * This method registers a scheme for a particular protocol.
-   * 
-   * @param protocol the protocol.
-   * @param scheme the scheme.
-   */
-  public void registerScheme( String protocol, IURIScheme scheme )
-  {
-    schemes_.put( protocol, scheme );
-  }
-  
-  private IURIScheme newURIScheme(String schemeOrURI, boolean checkForScheme ) throws URIException
-  {
-    IURIScheme newScheme = null;
-    
-    if( schemeOrURI == null )
-    {
-      throw new URIException( 
-              new Status( IStatus.ERROR, "id", 0, 
-                 NLS.bind( Messages.MSG_NULL_ARG_SPECIFIED, "newURIScheme"), null ) );
-    }
-    
-    int colon    = schemeOrURI.indexOf(':');
-    int slash    = schemeOrURI.indexOf('/');
-    
-    // A protocol was specified.  Note: a colon appearing after a path is not
-    // considered part of the protocol for this IURI.
-    if( ( checkForScheme && colon == -1 ) ||
-        ( colon != -1 && slash == -1) || 
-        ( colon != -1 && colon < slash ) )
-    {
-      // If colon is -1 then we will treat the entire input parameter as the protocol.
-      if( colon == -1 ) colon = schemeOrURI.length();
-      
-      String protocol = schemeOrURI.substring(0, colon );
-      newScheme       = (IURIScheme)schemes_.get( protocol );
-      
-      if( newScheme == null )
-      {
-        throw new URIException( 
-            new Status( IStatus.ERROR, "id", 0, 
-                NLS.bind( Messages.MSG_SCHEME_NOT_FOUND, schemeOrURI ), null ) );
-                
-      }
-    }
-    else if( schemeOrURI.startsWith( "/") )
-    {
-      throw new URIException( 
-          new Status( IStatus.ERROR, "id", 0,
-              NLS.bind( Messages.MSG_ABSOLUTE_PATH_WITHOUT_SCHEME, schemeOrURI ), null ) );
-      
-    }
-    else
-    {
-      newScheme = new RelativeScheme();
-    }
-    
-    return newScheme;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/URIException.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/URIException.java
deleted file mode 100644
index e1aee84..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/environment/uri/URIException.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.environment.uri;
-
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * This is the base class for most exceptions thrown by IURI classes.
- * Every URIException carries a IURI and a Status, each of which may
- * be null. The getMessage() method as inherited from Exception will
- * return the message from the URIExceptin's Status object, if any.
- * 
- * @since 1.0
- */
-public class URIException extends Exception
-{
-  /**
-   * Comment for <code>serialVersionUID</code>
-   */
-  private static final long serialVersionUID = 3258130271424756018L;
-
-  /**
-   * A Status object containing details about the exception,
-   * if applicable.
-   */
-  protected IStatus status;
-
-  /**
-   * The IURI for which the exception occured,
-   * if applicable.
-   */
-  protected IURI uri;
-
-  /**
-   * Creates a new URIException with the given Status.
-   * The status may be null.
-   * 
-   * @param status the staus for this exception.
-   */
-  public URIException ( IStatus status )
-  {
-    super();
-    this.status = status;
-  }
-
-  /**
-   * Creates a new URIException for the given Status and IURI,
-   * each of which may be null.
-   * 
-   * @param status the status for this exception.
-   * @param uri the uri that caused this exception.
-   */
-  public URIException ( IStatus status, IURI uri )
-  {
-    super(status != null ? status.getMessage() : null);
-    this.status = status;
-    this.uri = uri;
-  }
-
-  /**
-   * @return returns the Status object inside this exception.
-   */
-  public IStatus getStatus ()
-  {
-    return status;
-  }
-
-  /**
-   * @return returns the IURI inside this exception.
-   */
-  public IURI getURI ()
-  {
-    return uri;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/ConsoleEclipseEnvironment.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/ConsoleEclipseEnvironment.java
deleted file mode 100644
index 8e1c1e1..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/ConsoleEclipseEnvironment.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.internal.environment.eclipse;
-
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.environment.ILog;
-import org.eclipse.wst.common.environment.NullStatusHandler;
-import org.eclipse.wst.common.environment.IStatusHandler;
-import org.eclipse.wst.common.environment.uri.SimpleURIFactory;
-import org.eclipse.wst.common.environment.uri.IURIFactory;
-import org.eclipse.wst.common.internal.environment.uri.file.FileScheme;
-
-
-/**
- *  This class is intended for use in a headless Eclipse environment.  
- */
-public class ConsoleEclipseEnvironment implements IEnvironment
-{
-	private SimpleURIFactory  uriFactory_      = null;
-	private IStatusHandler     statusHandler_   = null;
-	  
-	public ConsoleEclipseEnvironment()
-	{
-	  this( new NullStatusHandler() );	
-	}
-	
-	public ConsoleEclipseEnvironment( IStatusHandler  statusHandler )
-	{
-	  uriFactory_      = new SimpleURIFactory();
-	  statusHandler_   = statusHandler;
-	    
-	  uriFactory_.registerScheme( "platform", new EclipseScheme( this ) );
-	  uriFactory_.registerScheme( "file", new FileScheme() );
-	}
-			
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.environment.IEnvironment#getLog()
-	 */
-	public ILog getLog() 
-	{
-		return new EclipseLog();
-	}
-		
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.environment.IEnvironment#getStatusHandler()
-	 */
-	public IStatusHandler getStatusHandler() 
-	{
-		return statusHandler_;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.environment.IEnvironment#getURIFactory()
-	 */
-	public IURIFactory getURIFactory() 
-	{
-		return uriFactory_;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseLog.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseLog.java
deleted file mode 100644
index e1d75e6..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseLog.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2006 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
- * yyyymmdd bug      Email and other contact information
- * -------- -------- -----------------------------------------------------------
- * 20060221   100364 pmoogk@ca.ibm.com - Peter Moogk
- *******************************************************************************/
-package org.eclipse.wst.common.internal.environment.eclipse;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.wst.common.environment.ILog;
-import org.eclipse.wst.common.internal.environment.plugin.EnvironmentPlugin;
-
-public class EclipseLog implements org.eclipse.wst.common.environment.ILog 
-{
-	private org.eclipse.core.runtime.ILog logger;
-	
-	public EclipseLog() 
-	{
-		Plugin plugin = EnvironmentPlugin.getInstance();
-		
-    logger = plugin.getLog();
-	}
-	
-	/**
-	 * @see org.eclipse.wst.common.environment.ILog#isEnabled()
-	 */
-	public boolean isEnabled() 
-  {
-		return Platform.inDebugMode();
-	}
-	
-	/**
-	 * @see org.eclipse.wst.common.Environment.ILog#isEnabled(java.lang.String)
-	 */
-	public boolean isEnabled(String option) {
-		return "true".equals(Platform.getDebugOption("org.eclipse.wst.common.environment/trace/"
-				+ option));
-	}
-	
-	/**
-	 * @see org.eclipse.wst.common.environment.ILog#log(int, int, java.lang.Object, java.lang.String, java.lang.Object)
-	 */
-	public void log(int severity, int messageNum, Object caller,
-			String method, Object object) 
-	{
-		
-		if (isEnabled()) {
-			switch (severity) {
-				case ILog.ERROR :
-				{
-					if (isEnabled("error"))
-					{
-						String message = getMessageNumString(messageNum) + "E "
-							+ caller + "::" + method + ": object="
-							+ object;
-						log( severity, message, null );
-					}
-					break;
-				}
-				
-				case ILog.WARNING :
-				{
-					if (isEnabled("warning"))
-					{
-						String message = getMessageNumString(messageNum)
-								+ "W " + caller + "::" + method
-								+ ": object=" + object;
-						log( severity, message, null );
-					}
-					break;
-				}
-				
-				case ILog.INFO :
-				{
-					if (isEnabled("info"))
-					{
-						String message = getMessageNumString(messageNum) + "I "
-								+ caller + "::" + method + ": object="
-								+ object;
-						log( severity, message, null );
-					}
-					break;
-				}
-			}
-		}
-		
-	}
-	
-	/**
-	 * @see org.eclipse.wst.common.environment.ILog#log(int, int, java.lang.Object, java.lang.String, org.eclipse.core.runtime.IStatus)
-	 */
-	public void log(int severity, int messageNum, Object caller,
-			String method, IStatus status) {
-		log(severity, messageNum, caller, method, (Object)status);
-	}
-	
-	/**
-	 * @see org.eclipse.wst.common.environment.ILog#log(int, int, java.lang.Object, java.lang.String, java.lang.Throwable)
-	 */
-	public void log(int severity, int messageNum, Object caller,
-			String method, Throwable throwable) {
-		log( severity, messageNum, caller, method, (Object)null );
-	}
-	
-	/**
-	 * @see org.eclipse.wst.common.environment.ILog#log(int, java.lang.String, int, java.lang.Object, java.lang.String, java.lang.Object)
-	 */
-	public void log(int severity, String option, int messageNum,
-			Object caller, String method, Object object) 
-	{
-		if (isEnabled(option))
-		{
-			String message = getMessageNumString(messageNum) + "I " + caller
-					+ "::" + method + ": object=" + object;
-			log(severity, message, null );
-		}	
-	}
-	
-	/**
-	 * @see org.eclipse.wst.common.environment.ILog#log(int, java.lang.String, int, java.lang.Object, java.lang.String, java.lang.Throwable)
-	 */
-	public void log(int severity, String option, int messageNum,
-			Object caller, String method, Throwable throwable) 
-	{
-		if (isEnabled(option)) 
-		{
-			String message = getMessageNumString(messageNum) + "I " + caller
-					+ "::" + method;
-			log( severity, message, throwable );
-		}
-	}
-	
-	/**
-	 * @see org.eclipse.wst.common.environment.ILog#log(int, java.lang.String, int, java.lang.Object, java.lang.String, org.eclipse.core.runtime.IStatus)
-	 */
-	public void log(int severity, String option, int messageNum,
-			Object caller, String method, IStatus status) 
-	{
-		logger.log( status );
-	}
-	
-	private String getMessageNumString(int messageNum) {
-		String messageNumString = "IWAB";
-		if (messageNum > 9999 || messageNum < 0)
-			messageNum = 9999; //default message number
-		messageNumString += (new Integer(messageNum)).toString();
-		return messageNumString;
-	}
-	
-	private void log( int severity, String message, Throwable exc )
-	{
-		Status status = new Status( severity, "id", 0, message, exc );
-		logger.log( status );
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseScheme.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseScheme.java
deleted file mode 100644
index 46a30c6..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseScheme.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.internal.environment.eclipse;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.environment.uri.IURI;
-import org.eclipse.wst.common.environment.uri.IURIScheme;
-import org.eclipse.wst.common.environment.uri.URIException;
-import org.eclipse.wst.common.internal.environment.relative.RelativeURI;
-
-
-public class EclipseScheme implements IURIScheme
-{
-  private IEnvironment      environment_;
-  
-  public EclipseScheme( IEnvironment environment )
-  {
-    environment_ = environment;
-  }
-  
-  public String toString()
-  {
-    return "platform";  
-  }
-  
-  /**
-   */
-  public boolean isHierarchical()
-  {
-    return true;
-  }
-
-  /**
-   */
-  public boolean isValid(IURI uri)
-  {
-    boolean result = true;
-    
-    if( uri == null ) return false;
-    
-    try
-    {
-      IURIScheme scheme = uri.getURIScheme();
-      
-      if( scheme.toString().equals( "relative") ) return scheme.isValid( uri );
-        
-      getPathFromPlatformURI( uri.toString() );
-    }
-    catch( URIException exc )
-    {
-      result = false;
-    }
-    
-    return result;
-  }
-
-  /**
-   */
-  public IURI newURI(String uri) throws URIException
-  {
-    String newURI = null;
-    
-    if( uri != null && uri.startsWith( "platform:") )
-    {
-      // The platform has been specified so keep it as is.
-      newURI = uri;
-    }
-    else if( uri == null || uri.indexOf( ":") != -1 )
-    {
-      // The platform uri is not allowed to contain some other protocol. 
-      throw new URIException(
-          new Status( IStatus.ERROR, "id", 0,
-              NLS.bind( Messages.MSG_INVALID_PLATFORM_URL,uri), null ) );
-              
-    }
-    else if( uri.startsWith( "/") )
-    {
-      // The platform scheme has not been specified so we will add it.
-      newURI = "platform:/resource" + uri;
-    }
-    
-    if( newURI == null )
-    {
-      return new RelativeURI( uri );
-    }
-    else
-    {
-      return new EclipseURI( newURI, environment_ );
-    }
-  }
-
-  /**
-   */
-  public IURI newURI(IURI uri) throws URIException
-  {
-    return newURI( uri == null ? null : uri.toString() );
-  }
-
-  /**
-   */
-  public IURI newURI(URL url) throws URIException
-  {
-    return newURI( url == null ? null : url.toString() );
-  }
-
-  /**
-   */
-  public IStatus validate(IURI uri)
-  {
-    IStatus status = null;
-    
-    try
-    {
-      IURIScheme scheme = uri.getURIScheme();
-      
-      if( scheme.toString().equals( "relative") ) return scheme.validate( uri );
-      
-      getPathFromPlatformURI( uri.toString() );
-      status = Status.OK_STATUS;
-    }
-    catch( URIException exc )
-    {
-      status = exc.getStatus(); 
-    }
-    
-    return status;
-  }
-  
-  /**
-   * Gets the "platform:/resource" IPath given a url
-   * 
-   */
-  public String getPathFromPlatformURI(String uri) throws URIException 
-  {
-    String resourceFile = null;
-    URL    url          = null;
-    
-    try
-    {
-      url = new URL( uri ); 
-    }
-    catch( MalformedURLException exc )
-    { 
-      throw new URIException(
-          new Status( IStatus.ERROR, "id", 0,
-              NLS.bind( Messages.MSG_INVALID_PLATFORM_URL, uri ), exc ) );
-    }
-    
-    if( url == null )
-    {
-      throw new URIException(
-          new Status( IStatus.ERROR, "id", 0,
-              NLS.bind( Messages.MSG_INVALID_PLATFORM_URL, uri ), null ) );
-    }
-    if( url.getProtocol().equals("platform") ) 
-    {
-      String resourceURL = url.getFile();
-      
-      if (resourceURL.startsWith("/resource")) 
-      {
-        resourceFile = resourceURL.substring(10);   // omit the "/resource" portion
-      }
-    }
-    else 
-    {
-      throw new URIException(
-          new Status( IStatus.ERROR, "id", 0,
-                      NLS.bind( Messages.MSG_INVALID_PLATFORM_URL,url.getFile() ), null ) );
-    }
-    
-    return resourceFile;
-  }
-  
-  /**
-   * 
-   * @param absolutePath an absolute IPath
-   * @return returns the platform IURI for this path.
-   */
-  public String getURLFromPath( IPath absolutePath )
-  {
-    return "platform:/resource" + absolutePath;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseURI.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseURI.java
deleted file mode 100644
index feb22d4..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/EclipseURI.java
+++ /dev/null
@@ -1,518 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.internal.environment.eclipse;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Vector;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.environment.uri.IURI;
-import org.eclipse.wst.common.environment.uri.IURIFilter;
-import org.eclipse.wst.common.environment.uri.IURIScheme;
-import org.eclipse.wst.common.environment.uri.URIException;
-import org.eclipse.wst.common.internal.environment.relative.RelativeURI;
-
-
-public class EclipseURI extends RelativeURI
-{
-  private IEnvironment   environment_;
-  private EclipseScheme  scheme_;
-  private File           file_;
-  
-  public EclipseURI( String uri, IEnvironment environment )
-  {
-    super( uri );
-    
-    environment_  = environment;
-    scheme_       = new EclipseScheme( environment );
-    file_         = getFile();
-  }
-  
-  public String toString()
-  {
-    return uri_;
-  }
-  
-  /**
-   * @see org.eclipse.env.uri.IURI#erase()
-   */
-  public void erase() throws URIException
-  {
-    try 
-    {
-      IResource file = getResource();
-      
-      if( file != null && file.exists() ) 
-      {
-        if( file instanceof IFile )
-        {
-          FileResourceUtils.deleteFile( (IFile)file,
-                                        environment_.getStatusHandler() );
-        }
-        else if( file instanceof IFolder )
-        {
-          FileResourceUtils.deleteFolder( (IFolder)file,
-                                          environment_.getStatusHandler() );          
-        }
-      }
-      
-    }
-    catch( Exception exc ) 
-    {      
-      throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );
-    }
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#getInputStream()
-   */
-  public InputStream getInputStream() throws URIException
-  {
-    try 
-    {
-      // If a class cast exception is throw it will be propogated as
-      // a URIException.
-      IFile file = (IFile)getResource();
-
-      //call getContents on the eclipse File object
-      if( file != null ) 
-      {
-        return file.getContents();
-      }
-    }
-    catch( Throwable exc ) 
-    {
-      throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );
-    }
-    
-    return null;
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#getOutputStream()
-   */
-  public OutputStream getOutputStream() throws URIException
-  {
-    // Ensure that the parent folder exists.
-    IURI parent = parent();
-    
-    if( !parent.isPresent() )
-    {
-      parent().touchFolder();
-    }
-    
-    return getOutStream();
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#getURIScheme()
-   */
-  public IURIScheme getURIScheme()
-  {
-    return scheme_;
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#isLeaf()
-   */
-  public boolean isLeaf()
-  {
-    boolean result = false;
-  
-    try
-    {
-      IResource resource = getResource();
-      
-      if( resource != null && 
-          resource.exists() && 
-          resource.getType() == IResource.FILE )
-      {  
-        result = true;
-      }
-    }
-    catch( URIException exc )
-    {
-      // This IURI does not exist.
-      result = false;
-    }
-   
-    return result;
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#isPresent()
-   */
-  public boolean isPresent()
-  {
-    boolean result = false;
-    
-    try
-    {
-      IResource resource = getResource();
-      
-      if( resource != null && resource.exists() )
-       {  
-        result = true;
-      }
-    }
-    catch( URIException exc )
-    {
-      // This IURI does not exist.
-      result = false;
-    }
-    
-    return result;
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#isReadable()
-   */
-  public boolean isReadable()
-  {
-    boolean result = false;
-    
-    try
-    {
-      IResource resource = getResource();
-      
-      if( resource != null && resource.isAccessible() )
-       {  
-        result = true;
-      }
-    }
-    catch( URIException exc )
-    {
-      // This IURI does not exist.
-      result = false;
-    }
-    
-    return result;
-   }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#isRelative()
-   */
-  public boolean isRelative()
-  { 
-    return false;
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#isWritable()
-   */
-  public boolean isWritable()
-  {
-    boolean result = false;
-    
-    try
-    {
-      IResource resource = getResource();
-      
-      if( resource != null && 
-          resource.isAccessible() && 
-          !resource.getResourceAttributes().isReadOnly() )
-       {  
-        result = true;
-      }
-    }
-    catch( URIException exc )
-    {
-      // This IURI does not exist.
-      result = false;
-    }
-    
-    return result;
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#list()
-   */
-  public IURI[] list() throws URIException
-  {
-    IResource resource    = getResource();
-    IURI[]     uriChildren = new IURI[0];
-    
-    if( resource.getType() == IResource.FOLDER )
-    {
-      IFolder     folder   = (IFolder)resource;
-      
-      try
-      {
-        IResource[] children    = folder.members();  
-  
-        uriChildren = new IURI[children.length];
-        
-        for( int index = 0; index < children.length; index++ )
-        {
-          IPath path = children[index].getFullPath();
-          uriChildren[index] = new EclipseURI( scheme_.getURLFromPath(path), environment_  );
-        }
-      }
-      catch( CoreException exc )
-      {
-      }
-    }
-    
-    return uriChildren;
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#list(org.eclipse.env.uri.IURIFilter)
-   */
-  public IURI[] list(IURIFilter uriFilter) throws URIException
-  {
-    IResource resource = getResource();
-    IURI[]     result   = new IURI[0];
-    
-    if( resource.getType() == IResource.FOLDER )
-     {
-      IFolder     folder   = (IFolder)resource;
-      
-      try
-      {
-        IResource[] children    = folder.members();       
-        Vector      uriChildren = new Vector();
-        
-        for( int index = 0; index < children.length; index++ )
-         {
-          IPath path = children[index].getFullPath();
-          IURI   uri  = new EclipseURI( scheme_.getURLFromPath(path), environment_ );
-          
-          if( uriFilter.accepts( uri ) )
-          {
-            uriChildren.add( uri );
-          }
-        }
-        
-        result = (IURI[])uriChildren.toArray( new IURI[0] );
-      }
-      catch( CoreException exc )
-      {
-      }
-    }
-    
-    return result;
-  }
-   
-  /**
-   * @see org.eclipse.env.uri.IURI#rename(org.eclipse.env.uri.IURI)
-   */
-  public void rename(IURI newURI ) throws URIException
-  {
-    if( newURI == null || !(newURI instanceof EclipseURI) ) return;
-    
-    try
-    {
-      EclipseURI newEclipseURI = (EclipseURI)newURI;
-      IPath      newPath       = new Path( scheme_.getPathFromPlatformURI( newEclipseURI.uri_ ) ).makeAbsolute();
-      IResource  resource      = getResource();
-      
-      if( resource != null )
-      {
-        resource.move( newPath, true, null );
-      }
-    }
-    catch( CoreException exc )
-    {
-      exc.printStackTrace();
-      throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ) );
-    }
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#touchFolder()
-   */
-  public void touchFolder() throws URIException
-  {
-    IResource resource = getResource();
-    
-    if( resource != null )
-    { 
-      if( resource.getType() == IResource.FOLDER )
-      {
-        IFolder folder = (IFolder)resource;
-        
-        try
-        {
-          if( folder.members().length > 0 )
-          {
-            throw new URIException( 
-                new Status( IStatus.ERROR, "id", 0, 
-                    NLS.bind( Messages.MSG_ERROR_FOLDER_HAS_CHILDREN, folder.toString() ), null ),
-                this );
-								
-          }
-        }
-        catch( CoreException exc )
-        {        
-          throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );
-        }
-      }
-      else
-      {
-         //??? Not sure what to do if touching a folder and the IURI exists and it is not a folder.
-      }
-    }
-    else
-    {
-      IPath newPath = new Path( scheme_.getPathFromPlatformURI( uri_ ) ).makeAbsolute();
-      
-      try
-      {
-        FileResourceUtils.makeFolderPath( newPath,
-			  	                                environment_.getStatusHandler() );
-      }
-      catch( CoreException exc )
-      {
-        throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );
-      }
-    }
-  }
-
-  /**
-   * @see org.eclipse.env.uri.IURI#touchLeaf()
-   */
-  public void touchLeaf() throws URIException
-  {
-    IResource resource = getResource();
-    
-    if( resource != null )
-    {
-      // The resource already exists so do nothing.
-    }    
-    else
-    {
-      // Get the parent for this leaf and create it if required.
-      IURI parent = parent();
-      
-      if( !parent.isPresent() )
-      {  
-        parent().touchFolder();
-      }
-      
-      try
-      {
-        // Get an output stream to the specified file and immediately close it.
-        // This should create a 0 byte file.
-        getOutStream().close();
-      }
-      catch( IOException exc )
-      {
-        throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );
-      }
-    }
-
-  }
-
-  private IResource getResource() throws URIException
-  {    
-    IPath  path             = new Path( scheme_.getPathFromPlatformURI(uri_) );
-    String absolutePathname = path.makeAbsolute().toString();
-   
-    return FileResourceUtils.findResource(absolutePathname);
-  }
-  
-  /**
-   * @see org.eclipse.env.uri.IURI#getOutputStream()
-   */
-  private OutputStream getOutStream() throws URIException
-  {
-    IPath        file   = new Path( scheme_.getPathFromPlatformURI( uri_ ) ).makeAbsolute();
-    OutputStream stream = null;
-    
-    stream = FileResourceUtils.newFileOutputStream ( file,
- 			                                               environment_.getStatusHandler() );    
-    return stream;
-  }
-  
-  /**
-   * Returns a File object for the resource under this IURI.
-   * There are many URIs and URISchemes for which this method
-   * will fail and throw an exception. It should be used only
-   * in cases where URIs are known to be backed by physical files.
-   */
-  public File asFile ()
-  {
-  	return file_;
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.wst.common.environment.uri.IURI#isAvailableAsFile()
-   */
-  public boolean isAvailableAsFile() 
-  {
-  	return file_ != null;
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#asURL()
-   */
-  public URL asURL() throws URIException
-  {
-    URL url = null;
-    
-    try
-    {
-      url = new URL( uri_ );
-    }
-    catch( MalformedURLException exc )
-    {
-      throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this ); 
-    }
-    
-    return url;
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isAvailableAsURL()
-   */
-  public boolean isAvailableAsURL()
-  {
-    URL theURL = null;
-    
-    try
-    {
-      theURL = asURL();  
-    }
-    catch( URIException exc )
-    {  
-    }
-    
-    return theURL != null ;
-  }
-
-  private File getFile()
-  {
-    String platformRes = "platform:/resource";
-    File   result      = null;
-    
-    if (uri_.startsWith(platformRes))
-    {
-      result = new File(ResourcesPlugin.getWorkspace().getRoot().getLocation().removeTrailingSeparator().append(uri_.substring(platformRes.length(), uri_.length())).toString());
-    }
-    
-    return result;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceOutputStream.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceOutputStream.java
deleted file mode 100644
index d1a21f1..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceOutputStream.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.common.internal.environment.eclipse;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.wst.common.environment.IStatusHandler;
-
-
-
-/**
-* This class defines an output stream that writes to an
-* {@link org.eclipse.core.resources.IFile IFile}.
-*/
-public class FileResourceOutputStream extends OutputStream
-{
-
-  IPath                 fFilePath;
-  IStatusHandler         fStatusHandler;
-  ByteArrayOutputStream fByteArrayOutputStream;
-  boolean               fOpen;
-
-  /**
-  * Constructs an output stream that can be used to write to the
-  * given <code>file</code>. The workspace is neither examined nor
-  * altered during construction. All resource creation is deferred
-  * until later in the stream's lifecycle, such as during writing
-  * or closure.
-  * <b>Note:</b> The preferred mechanism for creating a stream that
-  * writes to an IFile is to call the static factory method
-  * {@link FileResourceUtils#newFileOutputStream FileResourceUtils.newFileOutputStream()}
-  * and work with the resulting <code>OutputStream</code>.
-  * Direct construction of a FileResourceOutputStream is not recommended.
-  * @param file The {@link org.eclipse.core.resources.IFile IFile}
-  * handle of the file resource to create. The project implied by the
-  * pathname of the file must already exist,
-  * that is, this method cannot be used to create projects.
-  * @param progressMonitor The progress monitor for the operation, or null.
-  */
-  public FileResourceOutputStream ( 
-  			IPath           filePath, 
-  			IStatusHandler   statusHandler
-  			)
-  {
-    fFilePath = filePath;
-    fStatusHandler = statusHandler;
-    fByteArrayOutputStream = new ByteArrayOutputStream();
-    fOpen = true;
-  }
-
-  /**
-  * Closes the stream.
-  * @throws IOException If an error occurs while closing the stream.
-  * For example, if this stream was constructed with overwriteFile = false
-  * and a file of the same name already exists, then an IOException will
-  * be thrown either now or during an earlier {@link #write write}.
-  */
-  public void close ()
-  throws IOException
-  {
-    if (!fOpen) return;
-    fOpen = false;
-    fByteArrayOutputStream.close();
-    byte[] buffer = fByteArrayOutputStream.toByteArray();
-    ByteArrayInputStream tempInputStream = new ByteArrayInputStream(buffer);
-    try
-    {
-      FileResourceUtils.createFile(fFilePath, tempInputStream, fStatusHandler);
-    }
-    catch (CoreException e)
-    {
-      throw new IOException(e.getMessage());
-    }
-  }
-
-  /**
-  * Flushes the stream. This does not imply the File resource
-  * will be created or become visible within the workbench.
-  * @throws IOException If an error occurs. For example, if this
-  * stream was constructed with overwriteFile = false and a file of the
-  * same name already exists, then an IOException may be thrown at
-  * this point.
-  */
-  public void flush ()
-  throws IOException
-  {
-    fByteArrayOutputStream.flush();
-  }
-
-  /**
-  * Writes all bytes from the given array to the stream.
-  * @param b The array of bytes to write.
-  * @throws IOException If an error occurs. For example, if this
-  * stream was constructed with overwriteFile = false and a file of the
-  * same name already exists, then an IOException may be thrown at
-  * this point.
-  */
-  public void write ( byte[] b )
-  throws IOException
-  {
-    fByteArrayOutputStream.write(b);
-  }
-
-  /**
-  * Writes bytes from the given array beginning at some offset
-  * and continuing for some number of bytes (len) to the stream.
-  * @param b The array of bytes to write.
-  * @param off The offset into the array to begin writing.
-  * @param len The number of bytes to write.
-  * @throws IOException If an error occurs. For example, if this
-  * stream was constructed with overwriteFile = false and a file of the
-  * same name already exists, then an IOException may be thrown at
-  * this point.
-  */
-  public void write ( byte[] b, int off, int len )
-  {
-    fByteArrayOutputStream.write(b,off,len);
-  }
-
-  /**
-  * Writes a single byte to the stream.
-  * @param b The byte to write.
-  * @throws IOException If an error occurs. For example, if this
-  * stream was constructed with overwriteFile = false and a file of the
-  * same name already exists, then an IOException may be thrown at
-  * this point.
-  */
-  public void write ( int b )
-  {
-    fByteArrayOutputStream.write(b);
-  }
-}
-
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceUtils.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceUtils.java
deleted file mode 100644
index cde954f..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/FileResourceUtils.java
+++ /dev/null
@@ -1,550 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.common.internal.environment.eclipse;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Vector;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.common.environment.Choice;
-import org.eclipse.wst.common.environment.StatusException;
-import org.eclipse.wst.common.environment.IStatusHandler;
-
-
-
-/**
-* This class contains useful methods for working with Eclipse resources.
-*/
-public final class FileResourceUtils
-{
-  //
-  // Keeps the IWorkspace hanging around. See getWorkspace().
-  //
-  private static IWorkspace workspace_ = null;
-  //
-  // Keeps the IWorkspaceRoot hanging around. See getWorkspaceRoot().
-  //
-  private static IWorkspaceRoot root_ = null;
-
- /**
-  * Returns the IWorkspaceRoot object.
-  * @return The IWorkspaceRoot object.
-  */
-  public static IWorkspaceRoot getWorkspaceRoot ()
-  {
-    if (root_ == null)
-    {
-      root_ = ResourcesPlugin.getWorkspace().getRoot();
-    }
-    return root_;
-  }
-
- /**
-  * Returns the IWorkspace object.
-  * @return The IWorkspace object.
-  */
-  public static IWorkspace getWorkspace ()
-  {
-    if (workspace_ == null)
-    {
-      if (root_ == null)
-      {
-        root_ = ResourcesPlugin.getWorkspace().getRoot();
-      }
-      
-      workspace_ = root_.getWorkspace();
-    }
-    
-    return workspace_;
-  }
-  
-  /**
-   * 
-   * @return returns an array of three common choices. (ie. Yes, yes all, and cancel )
-   */
-  public static Choice[] getThreeStateFileOptions() 
-  {
-    Vector choices = new Vector();
-    
-    choices.add(new Choice( 'Y', Messages.LABEL_YES ));
-    choices.add(new Choice( 'A', Messages.LABEL_YES_TO_ALL ));
-    choices.add(new Choice( 'C', Messages.LABEL_CANCEL ));
-    
-    return (Choice[])choices.toArray(new Choice[choices.size()]);
-  }
-  
-  /**
-  * Returns an
-  * {@link org.eclipse.core.resources.IResource IResource}
-  * of the given absolute pathname or null if no such resource exists.
-  * @param absolutePathname The absolute path of the resource.
-  * @return The <code>IResource</code>.
-  */
-  public static IResource findResource ( String absolutePathname )
-  {
-    if (absolutePathname == null)
-    {
-      return null;
-    }
-    
-    return findResource(new Path(absolutePathname));
-  }
-
-  /**
-  * Returns an
-  * {@link org.eclipse.core.resources.IResource IResource}
-  * of the given absolute path or null if no such resource exists.
-  * @param absolutePath The absolute <code>IPath</code> of the resource.
-  * @return The <code>IResource</code>.
-  */
-  public static IResource findResource ( IPath absolutePath )
-  {
-    if (absolutePath == null)
-    {
-      return null;
-    }
-    
-    return FileResourceUtils.getWorkspaceRoot().findMember(absolutePath);
-  }
-  
-  /**
-   * Copies a file from a plugin's installation location
-   * to an Eclipse folder.
-   * @param plugin The plugin containing the files to copy.
-   * Must not be null.
-   * @param sourcePath The path, relative to the <code>plugin</code>
-   * install location, containing the files to copy.
-   * If null, then the plugin install location is the source path
-   * (ie. null is equivalent to ".").
-   * @param pathname The pathname of the file to copy.
-   * The pathname is relative to the <code>plugin sourcePath</code>.
-   * Must not be null.
-   * @param targetPath The absolute Eclipse path of the folder to
-   * which the file will be copied. The relative pathname of the
-   * file is preserved.
-   * Must not be null.
-   * @param createFolders The intermediate folder creation policy, one of
-   * {@link #CREATE CREATE} or {@link #DONT_CREATE DONT_CREATE}.
-   * <ul>
-   * <li><code>CREATE</code> -
-   * If any intermediate folders in the given <code>absolutePath</code>
-   * do not exist, they will be created.
-   * <li><code>DONT_CREATE</code> -
-   * If any intermediate folders in the given <code>absolutePath</code>
-   * do not exist, the method will throw a <code>CoreException</code>.
-   * </ul>
-   * @param overwriteFile The policy for existing files, one of
-   * {@link #OVERWRITE OVERWRITE} or {@link #DONT_OVERWRITE DONT_OVERWRITE}.
-   * <ul>
-   * <li><code>OVERWRITE</code> -
-   * If a resource of the same name as the given
-   * <code>absolutePath</code> already exists and is a file,
-   * it will be replaced.
-   * If the resource already exists and it is not a file,
-   * then no file will be created and
-   * a <code>CoreException</code> will be thrown.
-   * <li><code>DONT_OVERWRITE</code> -
-   * If any resource of the same name as the given
-   * <code>absolutePath</code> already exists,
-   * then no file will be created and
-   * a <code>CoreException</code> will be thrown.
-   * </ul>
-   * @param progressMonitor The progress monitor for the operation, or null.
-   * @throws CoreException An exception containing an
-   * {@link org.eclipse.core.runtime.IStatus IStatus}
-   * with a severity of <code>IStatus.ERROR</code> and a
-   * locale-specific description of the cause.
-   */
-   static public void copyFile( Plugin plugin,
-                                IPath sourcePath,
-                                IPath pathname,
-                                IPath targetPath,
-                                IStatusHandler statusMonitor )
-     throws CoreException
-   {
-     try
-     {
-       IPath target = targetPath.append(pathname);
-       IPath source = sourcePath == null ? pathname : sourcePath.append(pathname);
-       InputStream input = plugin.openStream(source);
-       createFile(target, input, statusMonitor);
-     }
-     catch (IOException e)
-     {
-       throw new CoreException(new Status(IStatus.ERROR,
-                               plugin.getBundle().getSymbolicName(),
-                               0,
-                               Messages.MSG_ERROR_IO,e));
-     }
-   }
-   
-  /**
-   * Deletes a file under a container.
-   * The container must already exist.
-   * @param file - the IFile to be deleted
-   * @param progressMonitor
-   * @param statusMonitor
-   * @return True if the file does not exist or if it exists and is successfully deleted. False otherwise.
-   */
-  public static boolean deleteFile( IFile file,
-                                    IStatusHandler statusMonitor)
-    throws CoreException
-  {
-    if (file.exists())
-    {      
-      //We have permission to overwrite so check if file is read-only
-      if (file.isReadOnly())
-      {        
-        IFile[] files = new IFile[1];
-        files[0] = file;
-        IStatus status = getWorkspace().validateEdit(files, null);
-        
-        if( status.getSeverity() == IStatus.ERROR )
-        {
-          statusMonitor.reportError( status );
-          return false;
-        }
-      }
-      
-      file.delete(true, null);
-    }
-    //At this point, either the file did not exist or we successfully deleted
-    // it. Return success.
-    return true;
-  }
-
-  /**
-   * Deletes a folder under a container.
-   * @param folder - the IFolder to be deleted
-   * @param progressMonitor
-   * @param statusMonitor
-   * @return True if the folder does not exist or if it exists and is successfully deleted along with its members. False otherwise.
-   */
-   public static boolean deleteFolder( IFolder folder,
-                                       IStatusHandler statusMonitor )
-     throws CoreException
-   {
-     if (!folder.exists()) return true;
-
-     boolean     deleted   = true;
-     IResource[] resources = folder.members();
-     
-     for (int i=0; i<resources.length; i++)
-     {
-       IResource resource = resources[i];
-       if (resource instanceof IFile)
-       {
-         deleted = deleteFile((IFile)resource, statusMonitor);
-       }
-       if (resource instanceof IFolder)
-       {
-         deleted = deleteFolder( (IFolder)resource, statusMonitor);
-       }
-
-       if( !deleted ) break;
-     }
-     
-     if( deleted )
-     {
-       folder.delete(true, true, null);
-       return true;
-     }
-     else
-       return false;
-   }
-
-  /**
-  * Creates a file of the given <code>absolutePath</code>
-  * and returns its handle as an <code>IFile</code>.
-  * If the file cannot be created, a
-  * <code>CoreException</code> containing an
-  * <code>IStatus</code> object is thrown.
-  * @param absolutePath The absolute path of the file to create.
-  * The project at the beginning of the path must already exist,
-  * that is, this method cannot be used to create projects.
-  * @param progressMonitor The progress monitor for the operation, or null.
-  * @return The {@link org.eclipse.core.resources.IFile IFile}
-  * handle of the file.
-  * @throws CoreException An exception containing an
-  * {@link org.eclipse.core.runtime.IStatus IStatus}
-  * with a severity of <code>IStatus.ERROR</code> and a
-  * locale-specific description of the cause.
-  */
-  public static IFile createFile (
-    IPath           absolutePath,
-    InputStream     inputStream,
-    IStatusHandler   statusHandler )
-
-    throws CoreException 
-  {    
-    if (!absolutePath.isAbsolute())
-    {
-      throw new CoreException(new Status(IStatus.ERROR, "ResourceUtils",0, NLS.bind( Messages.MSG_ERROR_PATH_NOT_ABSOLUTE, absolutePath.toString() ),null));
-    }
-    if (absolutePath.segmentCount() < 1)
-    {
-      throw new CoreException(new Status(IStatus.ERROR,"ResourceUtils",0,NLS.bind( Messages.MSG_ERROR_PATH_EMPTY, absolutePath.toString() ),null));
-    }
-    if (absolutePath.segmentCount() < 2)
-    {
-      throw new CoreException(new Status(IStatus.ERROR,"ResourceUtils",0,NLS.bind( Messages.MSG_ERROR_PATH_NOT_FOLDER, absolutePath.toString() ),null));
-    }
-    IContainer parent   = makeFolderPath(absolutePath.removeLastSegments(1), statusHandler);
-    String     fileName = absolutePath.lastSegment();
-    
-    return makeFile(parent, fileName, inputStream, statusHandler);
-  }
-
-  /**
-  * Creates under the given <code>project</code>
-  * a file of the given <code>relativePath</code>
-  * and returns its handle as an <code>IFile</code>.
-  * If the file cannot be created, a
-  * <code>CoreException</code> containing an
-  * <code>IStatus</code> object is thrown.
-  * @param absolutePath The absolute path of the file to create.
-  * The project at the beginning of the path must already exist,
-  * that is, this method cannot be used to create projects.
-  * @param createFolders The intermediate folder creation policy, one of
-  * {@link #CREATE CREATE} or {@link #DONT_CREATE DONT_CREATE}.
-  * <ul>
-  * <li><code>CREATE</code> -
-  * If any intermediate folders in the given <code>absolutePath</code>
-  * do not exist, they will be created.
-  * <li><code>DONT_CREATE</code> -
-  * If any intermediate folders in the given <code>absolutePath</code>
-  * do not exist, the method will throw a <code>CoreException</code>.
-  * </ul>
-  * @param overwriteFile The policy for existing files, one of
-  * {@link #OVERWRITE OVERWRITE} or {@link #DONT_OVERWRITE DONT_OVERWRITE}.
-  * <ul>
-  * <li><code>OVERWRITE</code> -
-  * If a resource of the same name as the given
-  * <code>absolutePath</code> already exists and is a file,
-  * it will be replaced.
-  * If the resource already exists and it is not a file,
-  * then no file will be created and
-  * a <code>CoreException</code> will be thrown.
-  * <li><code>DONT_OVERWRITE</code> -
-  * If any resource of the same name as the given
-  * <code>absolutePath</code> already exists,
-  * then no file will be created and
-  * a <code>CoreException</code> will be thrown.
-  * </ul>
-  * @param progressMonitor The progress monitor for the operation, or null.
-  * @return The {@link org.eclipse.core.resources.IFile IFile}
-  * handle of the file.
-  * @throws CoreException An exception containing an
-  * {@link org.eclipse.core.runtime.IStatus IStatus}
-  * with a severity of <code>IStatus.ERROR</code> and a
-  * locale-specific description of the cause.
-  */
-  public static IFile createFile (
-    IProject        project,
-    IPath           relativePath,
-    InputStream     inputStream,
-    IStatusHandler   statusMonitor )
- 
-    throws CoreException 
-  {
-    IPath absolutePath = project.getFullPath().append(relativePath);
-    return createFile(absolutePath, inputStream, statusMonitor);
-  }
-
-  /**
-  * Creates an output stream that can be used to write to the
-  * given <code>file</code>. Actual changes to the workspace
-  * may occur during creation of the stream, while writing to
-  * the stream, or when the stream is closed.
-  * A <code>CoreException</code> containing
-  * an <code>IStatus</code> will be thrown
-  * at some point in the lifecycle of the stream
-  * if the file resource cannot be created.
-  * @param file The {@link org.eclipse.core.resources.IFile IFile}
-  * handle of the file resource to create. The project implied by the
-  * pathname of the file must already exist,
-  * that is, this method cannot be used to create projects.
-  * @param progressMonitor The progress monitor for the operation, or null.
-  * @return An <code>OutputStream</code> tied to the file resource.
-  * Actual checks of or changes to the workspace may occur as early during
-  * stream creation, closure, or any time in between.
-  * @throws CoreException An exception containing an
-  * {@link org.eclipse.core.runtime.IStatus IStatus}
-  * with a severity of <code>IStatus.ERROR</code> and a
-  * locale-specific description of the cause.
-  * Reasons include:
-  * <ol>
-  * <li>The project of the given file's path does not exist.
-  * <li>A non-file resource of the same name of the given file
-  * already exists.
-  * <li>A file resource of the same name of the given file
-  * already exists, and <code>overwriteFile</code> is false.
-  * <li>One or more intermediate folders to the given file
-  * do not exist, and <code>createFolders</code> is false.
-  * </ol>
-  */
-
-  public static OutputStream newFileOutputStream (
-       IPath            file,
-       IStatusHandler    statusHandler )
- 
-  {
-    return new FileResourceOutputStream(file, statusHandler);
-  }
-
-  //----------------------------------------------------------------------
-  // Naughty bits...
-  //----------------------------------------------------------------------
-
-  //
-  // Creates a path of folders.
-  // Do not call with an absolutePath of less than one segment.
-  //
-  /**
-   * Creates a path of folders.
-   * Do not call with an absolutePath of less than one segment.
-   * @param resourceContext the resource context for making folders.
-   * @param absolutePath the path of folders that will be created.
-   * @param progressMonitor the progress monitor to be used.
-   * @param statusHandler the status handler.
-   * @return returns the IContainer of the created folder.
-   */
-  public static IContainer makeFolderPath (
-    IPath            absolutePath,
-    IStatusHandler    statusHandler )
-  
-    throws CoreException
-  {
-    if (absolutePath.segmentCount() <= 1)
-    {
-      return getWorkspaceRoot().getProject(absolutePath.segment(0));
-    }
-    else
-    {
-      IContainer parent = makeFolderPath(absolutePath.removeLastSegments(1), statusHandler );
-      String folderName = absolutePath.lastSegment();
-      
-      return makeFolder(parent,folderName, statusHandler );
-    }
-  }
-  //
-  // Creates a folder under a container.
-  // The container must already exist.
-  //
- private static IFolder makeFolder (
-    IContainer       parent,
-    String           folderName,
-    IStatusHandler    statusHandler )
-  
-  throws CoreException
-  {
-    IResource child  = parent.findMember(folderName);
-    
-    if( child == null )
-    {      
-      IFolder folder = parent.getFolder(new Path(folderName));
-      folder.create(true,true,null);
-      return folder;
-    }
-    else if( child.getType() == IResource.FOLDER )
-    {
-      return (IFolder)child;
-    }
-    else
-    {
-      throw new CoreException(
-        new Status( IStatus.ERROR, 
-                    "ResourceUtils",
-                    0, 
-					NLS.bind( Messages.MSG_ERROR_RESOURCE_NOT_FOLDER, parent.getFullPath().append(folderName).toString()),
-			null ) );
-    }
-  }
-
-  //
-  // Creates a file under a container.
-  // The container must already exist.
-  //
- private static IFile makeFile (
-    IContainer       parent,
-    String           fileName,
-    InputStream      inputStream,
-    IStatusHandler    statusHandler )
- 
-    throws CoreException
-  {
-    IResource child  = parent.findMember(fileName);
-    
-    if( child != null )
-    {
-      if( child.getType() == IResource.FILE )
-      {        
-        //We have permission to overwrite so check if file is read-only
-        if( child.getResourceAttributes().isReadOnly() )
-        {
-          IFile[] files = new IFile[1];
-          files[0] = (IFile)child;
-          
-          IStatus status = getWorkspace().validateEdit(files,null);
-          
-          try
-          {
-            statusHandler.report( status );
-          }
-          catch( StatusException exc )
-          {
-            return null;
-          }
-        }
-
-        //Change the contents of the existing file.
-        IFile file = parent.getFile( new Path(fileName) );
-        file.setContents( inputStream, true, true, null );
-        
-        return file;
-      
-      }
-      else
-      {
-        throw new CoreException( 
-          new Status( IStatus.ERROR,
-                      "ResourceUtils",
-                      0, 
-				      NLS.bind( Messages.MSG_ERROR_RESOURCE_NOT_FILE, parent.getFullPath().append(fileName)),
-					  null ) );
-      }
-    }
-    else
-    {
-      //Create a new file.
-      IFile file = parent.getFile( new Path(fileName) );
-      file.create( inputStream, true, null);
-      
-      return file;
-    }
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/Messages.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/Messages.java
deleted file mode 100644
index 4c08ea1..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/Messages.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.internal.environment.eclipse;
-
-import org.eclipse.osgi.util.NLS;
-
-public class Messages extends NLS
-{
-  private static final String BUNDLE_NAME = "org.eclipse.wst.common.internal.environment.eclipse.environment";
-  
-  public static String MSG_NULL_ARG_SPECIFIED;
-  public static String MSG_SCHEME_NOT_FOUND;
-  public static String MSG_ABSOLUTE_PATH_WITHOUT_SCHEME;
-  public static String MSG_URI_NOT_RELATIVE; 
-  public static String MSG_ERROR_UNEXPECTED_ERROR; 
-  public static String MSG_INVALID_PLATFORM_URL; 
-  public static String MSG_INVALID_FILE_URL;
-  public static String MSG_ERROR_PATH_NOT_ABSOLUTE; 
-  public static String MSG_ERROR_PATH_EMPTY; 
-  public static String MSG_ERROR_PATH_NOT_FOLDER; 
-  public static String MSG_ERROR_RESOURCE_NOT_FOLDER; 
-  public static String MSG_ERROR_RESOURCE_NOT_FILE; 
-  public static String MSG_ERROR_FOLDER_HAS_CHILDREN; 
-  public static String MSG_ERROR_IO; 
-  public static String LABEL_YES; 
-  public static String LABEL_YES_TO_ALL; 
-  public static String LABEL_CANCEL; 
-  
-  static
-  {
-    NLS.initializeMessages( BUNDLE_NAME, Messages.class );
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/environment.properties b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/environment.properties
deleted file mode 100644
index 6fb49d6..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/eclipse/environment.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2004 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
-###############################################################################
-
-#
-# Messages for SimpleURIFactory
-#
-MSG_NULL_ARG_SPECIFIED=Null specified as argument to {0}.
-MSG_SCHEME_NOT_FOUND=Scheme not found for URI {0}.
-MSG_ABSOLUTE_PATH_WITHOUT_SCHEME=Absolute path specified without a scheme for URI {0}.
-
-#
-# Common Messages
-#
-MSG_URI_NOT_RELATIVE=URL: {0} is not relative.
-MSG_ERROR_UNEXPECTED_ERROR=Unexpected exception occured.
-MSG_INVALID_PLATFORM_URL=Invalid URL: {0} for an Eclipse platform.
-MSG_INVALID_FILE_URL=Invalid URL: {0} for the file protocol
-
-#
-# Messages for ResouceUtils
-#
-MSG_ERROR_PATH_NOT_ABSOLUTE=Path {0} is not absolute for creating a file.
-MSG_ERROR_PATH_EMPTY=Path {0} is empty while creating a file.
-MSG_ERROR_PATH_NOT_FOLDER=Path {0} is not a folder for creating a file.
-MSG_ERROR_RESOURCE_NOT_FOLDER=Resource {0} is not a folder.
-MSG_ERROR_RESOURCE_NOT_FILE=The following path is not a resource: {0}.
-MSG_ERROR_FOLDER_HAS_CHILDREN=Can not create folder: {0} that already has children.
-MSG_ERROR_IO=An input/output error occurred while processing the resource "{0}".
-
-LABEL_YES=Yes
-LABEL_YES_TO_ALL=Yes All
-LABEL_CANCEL=Cancel
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/plugin/EnvironmentPlugin.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/plugin/EnvironmentPlugin.java
deleted file mode 100644
index 4330459..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/plugin/EnvironmentPlugin.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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
- * yyyymmdd bug      Email and other contact information
- * -------- -------- -----------------------------------------------------------
- * 20060221   100364 pmoogk@ca.ibm.com - Peter Moogk
- *******************************************************************************/
-package org.eclipse.wst.common.internal.environment.plugin;
-
-
-import org.eclipse.core.runtime.Plugin;
-
-/**
-* This is the plugin class for the org.eclipse.wst.common.internal.environment.plugin.EnvironmentPlugin.
-*/
-public class EnvironmentPlugin extends Plugin
-{	
-	/**
-	 * The instance of this plugin.
-	 */
-	private static EnvironmentPlugin instance;
-
-	/**
-	 * Constructor for use by the Eclipse platform only.
-	 */
-	public EnvironmentPlugin()
-	{
-		super();
-		instance = this;
-	}
-	
-	/**
-	 * Returns the instance of this plugin.
-	 */
-	static public EnvironmentPlugin getInstance ()
-	{
-		return instance;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeScheme.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeScheme.java
deleted file mode 100644
index b993a11..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeScheme.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.internal.environment.relative;
-
-import java.net.URL;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.wst.common.environment.uri.IURI;
-import org.eclipse.wst.common.environment.uri.IURIScheme;
-import org.eclipse.wst.common.environment.uri.URIException;
-
-
-public class RelativeScheme implements IURIScheme
-{
-
-  public String toString()
-  {
-    return "relative";  
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#isHierarchical()
-   */
-  public boolean isHierarchical()
-  {
-    return true;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#isValid(org.eclipse.env.uri.URI)
-   */
-  public boolean isValid(IURI uri)
-  {
-    return !uri.toString().startsWith( "/" );
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#newURI(java.lang.String)
-   */
-  public IURI newURI(String uri) throws URIException
-  {
-    return new RelativeURI( uri );
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#newURI(org.eclipse.env.uri.URI)
-   */
-  public IURI newURI(IURI uri) throws URIException
-  {
-    return new RelativeURI( uri.toString() );
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#newURI(java.net.URL)
-   */
-  public IURI newURI(URL url) throws URIException
-  {
-    return new RelativeURI( url.toString() );
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#validate(org.eclipse.env.uri.URI)
-   */
-  public IStatus validate(IURI uri)
-  {
-    IStatus result = null;
-    
-    if( isValid( uri ) )
-    {
-      result = Status.OK_STATUS;
-    }
-    else
-    {
-      result = new Status( IStatus.ERROR, "id", 0, "",null );      
-    }
-    
-    return result;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeURI.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeURI.java
deleted file mode 100644
index 1196111..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/relative/RelativeURI.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.internal.environment.relative;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.common.environment.uri.IURI;
-import org.eclipse.wst.common.environment.uri.IURIFilter;
-import org.eclipse.wst.common.environment.uri.IURIScheme;
-import org.eclipse.wst.common.environment.uri.IURIVisitor;
-import org.eclipse.wst.common.environment.uri.URIException;
-import org.eclipse.wst.common.internal.environment.eclipse.Messages;
-
-
-public class RelativeURI implements IURI
-{
-  protected String uri_;
-  
-  public RelativeURI( String uri )
-  {
-    uri_ = uri;   
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#append(org.eclipse.env.uri.URI)
-   */
-  public IURI append(IURI relativeURI) throws URIException
-  {
-    if( !relativeURI.isRelative()) 
-     {      
-      throw new URIException( 
-          new Status( IStatus.ERROR, "id", 0,
-              NLS.bind( Messages.MSG_URI_NOT_RELATIVE, relativeURI.toString() ), null ) );
-      
-    }
-    
-    String newURI = uri_ + "/" + relativeURI.toString();
-    
-    return getURIScheme().newURI( newURI );
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#asFile()
-   */
-  public File asFile() 
-  {
-    return null;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#asString()
-   */
-  public String asString()
-  {
-    return uri_;
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#toString()
-   */
-  public String toString()
-  {
-    return uri_;
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#asURL()
-   */
-  public URL asURL() throws URIException
-  {
-    return null;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#erase()
-   */
-  public void erase() throws URIException
-  {
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#getInputStream()
-   */
-  public InputStream getInputStream() throws URIException
-  {
-    return null;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#getOutputStream()
-   */
-  public OutputStream getOutputStream() throws URIException
-  {
-    return null;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#getURIScheme()
-   */
-  public IURIScheme getURIScheme()
-  {
-    return new RelativeScheme();
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isAvailableAsFile()
-   */
-  public boolean isAvailableAsFile()
-  {
-    return false;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isAvailableAsURL()
-   */
-  public boolean isAvailableAsURL()
-  {
-    return false;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isHierarchical()
-   */
-  public boolean isHierarchical()
-  {
-    return true;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isLeaf()
-   */
-  public boolean isLeaf()
-  {
-    return false;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isPresent()
-   */
-  public boolean isPresent()
-  {
-    return false;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isReadable()
-   */
-  public boolean isReadable()
-  {
-    return false;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isRelative()
-   */
-  public boolean isRelative()
-  {
-    return true;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isWritable()
-   */
-  public boolean isWritable()
-  {
-    return false;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#list()
-   */
-  public IURI[] list() throws URIException
-  {
-    return new IURI[0];
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#list(org.eclipse.env.uri.URIFilter)
-   */
-  public IURI[] list(IURIFilter uriFilter) throws URIException
-  {
-    return new IURI[0];
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#parent()
-   */
-  public IURI parent() throws URIException
-  {
-    int lastSlash  = uri_.lastIndexOf( '/' );
-    int firstSlash = uri_.indexOf( '/' );
-    
-    // If there is a parent, then it must start with a slash
-    // and end with a slash.
-    if( lastSlash == -1 || firstSlash == -1 ) return null;
-        
-    return getURIScheme().newURI( uri_.substring(0, lastSlash ) );
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#rename(org.eclipse.env.uri.URI)
-   */
-  public void rename(IURI newURI) throws URIException
-  {
-    uri_ = newURI.toString();
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#touchFolder()
-   */
-  public void touchFolder() throws URIException
-  {
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#touchLeaf()
-   */
-  public void touchLeaf() throws URIException
-  {
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#visit(org.eclipse.env.uri.URIVisitor, org.eclipse.env.uri.URIFilter)
-   */
-  public void visit(IURIVisitor uriVisitor, IURIFilter uriFilter)
-    throws URIException
-  {
-    boolean continueVisit = true;
-    
-    // If the filter accepts this we will visit it.
-    if( uriFilter.accepts( this ) )
-    {
-      continueVisit = uriVisitor.visit( this );  
-    }
-       
-    IURI[] children  = list();
-    
-    for( int index = 0; index < children.length && continueVisit; index++ )
-    {
-      children[index].visit( uriVisitor, uriFilter );
-    }  
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#visit(org.eclipse.env.uri.URIVisitor)
-   */
-  public void visit(IURIVisitor uriVisitor) throws URIException
-  {
-    boolean continueVisit = uriVisitor.visit( this );  
-    
-    IURI[] children  = list();
-    
-    for( int index = 0; index < children.length && continueVisit; index++ )
-     {
-      children[index].visit( uriVisitor );
-    }  
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileScheme.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileScheme.java
deleted file mode 100644
index 7655f52..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileScheme.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.internal.environment.uri.file;
-
-import java.net.URL;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.common.environment.uri.IURI;
-import org.eclipse.wst.common.environment.uri.IURIScheme;
-import org.eclipse.wst.common.environment.uri.URIException;
-import org.eclipse.wst.common.internal.environment.eclipse.Messages;
-import org.eclipse.wst.common.internal.environment.relative.RelativeScheme;
-import org.eclipse.wst.common.internal.environment.relative.RelativeURI;
-
-
-public class FileScheme extends RelativeScheme
-{
-  public String toString()
-  {
-    return "file";  
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#isValid(org.eclipse.env.uri.URI)
-   */
-  public boolean isValid(IURI uri)
-  { 
-    boolean result = false;
-    
-    if( uri == null ) return false;
-    
-    IURIScheme scheme = uri.getURIScheme();
-      
-    if( scheme.toString().equals( "relative") ) return scheme.isValid( uri );
-        
-    String uriString = uri.toString();
-      
-    if( uriString != null && uriString.startsWith( "file:" ) )
-    {
-      result = true;
-    }  
-    
-    return result;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#newURI(java.lang.String)
-   */
-  public IURI newURI(String uri) throws URIException
-  {
-    String newURI = null;
-    
-    if( uri != null && uri.startsWith( "file:") )
-    {
-      // The file protocol has been specified so keep it as is.
-      newURI = uri;
-    }
-    else if( uri == null || uri.indexOf( ":") != -1 )
-    {
-      // The file uri is not allowed to contain some other protocol. 
-      throw new URIException(
-          new Status( IStatus.ERROR, "id", 0,
-              NLS.bind( Messages.MSG_INVALID_FILE_URL,uri), null ) );
-              
-    }
-    else if( uri.startsWith( "/") )
-    {
-      // The file scheme has not been specified so we will add it.
-      newURI = "file:" + uri;
-    }
-    
-    if( newURI == null )
-    {
-      return new RelativeURI( uri );
-    }
-    else
-    {
-      return new FileURI( newURI );
-    }
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#newURI(org.eclipse.env.uri.URI)
-   */
-  public IURI newURI(IURI uri) throws URIException
-  {
-    return newURI( uri == null ? null : uri.toString() );
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URIScheme#newURI(java.net.URL)
-   */
-  public IURI newURI(URL url) throws URIException
-  {
-    return newURI( url == null ? null : url.toString() );
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileURI.java b/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileURI.java
deleted file mode 100644
index 5d95b0b..0000000
--- a/plugins/org.eclipse.wst.common.environment/src/org/eclipse/wst/common/internal/environment/uri/file/FileURI.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.internal.environment.uri.file;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Vector;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.wst.common.environment.uri.IURI;
-import org.eclipse.wst.common.environment.uri.URIException;
-import org.eclipse.wst.common.environment.uri.IURIFilter;
-import org.eclipse.wst.common.environment.uri.IURIScheme;
-import org.eclipse.wst.common.internal.environment.relative.RelativeURI;
-
-
-public class FileURI extends RelativeURI 
-{
-  private File file_ = null;
-  
-  public FileURI( String uri )
-  {
-    super( uri );
-    
-    if( getURIScheme().isValid( this ) )
-    {
-      file_ = new File( uri.substring( 5, uri.length() ) );
-    }
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#asFile()
-   */
-  public File asFile() 
-  {
-    return file_;
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#erase()
-   */
-  public void erase() throws URIException
-  {
-    deleteFile( file_ );
-  }
-
-  private void deleteFile( File file )
-  {
-    if( file.isDirectory() )
-    {
-      File[] children = file.listFiles();
-      
-      for( int index = 0; index < children.length; index++ )
-      {
-        File child = children[index];
-        
-        if( child.isDirectory() )
-        {
-          deleteFile( child );
-        }
-        else
-        {
-          child.delete();
-        }
-      }
-    }
-    
-    file.delete();
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#getInputStream()
-   */
-  public InputStream getInputStream() throws URIException
-  {
-    FileInputStream stream = null;
-    
-    try
-    {
-      File parent = file_.getParentFile();
-      parent.mkdirs();
-      
-      stream = new FileInputStream( file_ );  
-    }
-    catch( IOException exc )
-    {
-      throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );
-    }
-    
-    return stream;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#getOutputStream()
-   */
-  public OutputStream getOutputStream() throws URIException
-  {
-    FileOutputStream stream = null;
-    
-    try
-    {
-      File parent = file_.getParentFile();
-      parent.mkdirs();
-      
-      stream = new FileOutputStream( file_ );  
-    }
-    catch( IOException exc )
-    {
-      throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );
-    }
-    
-    return stream;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#getURIScheme()
-   */
-  public IURIScheme getURIScheme()
-  {
-    return new FileScheme();
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isAvailableAsFile()
-   */
-  public boolean isAvailableAsFile()
-  {
-    return file_ != null;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isAvailableAsURL()
-   */
-  public boolean isAvailableAsURL()
-  {
-    return file_ != null;
-  }
-  
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#asURL()
-   */
-  public URL asURL() throws URIException
-  {
-    URL url = null;
-    
-    try
-    {
-      url = file_ == null ? null : file_.toURL();
-    }
-    catch( MalformedURLException exc )
-    {
-      throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );      
-    }
-    
-    return url;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isLeaf()
-   */
-  public boolean isLeaf()
-  {
-    return file_.isFile();
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isPresent()
-   */
-  public boolean isPresent()
-  {
-    return file_.exists();
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isReadable()
-   */
-  public boolean isReadable()
-  {
-    return file_.canRead();
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#isWritable()
-   */
-  public boolean isWritable()
-  {
-    return file_.canWrite();
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#list()
-   */
-  public IURI[] list() throws URIException
-  {
-    File[] children = file_.listFiles();
-    IURI[]  URIs     = new IURI[0];
-    
-    if( children != null )
-    {
-      int   length   = children.length;
-      
-      URIs = new IURI[length];
-    
-      for( int index = 0; index < length; index++ )
-      {
-        URIs[index] = new FileURI( "file:" + children[index].getAbsolutePath() );
-      }
-    }
-    
-    return URIs;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#list(org.eclipse.env.uri.URIFilter)
-   */
-  public IURI[] list(IURIFilter uriFilter) throws URIException
-  {
-    File[]   children = file_.listFiles();
-    int      length   = children == null ? 0 : children.length;
-    Vector   URIs     = new Vector();
-    
-    for( int index = 0; index < length; index++ )
-    {
-      IURI newURI = new FileURI( "file:" + children[index].getAbsolutePath() );
-      
-      if( uriFilter.accepts( newURI) )
-      {
-        URIs.add( newURI );
-      } 
-    }
-    
-    return (IURI[])URIs.toArray( new IURI[0] );
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#rename(org.eclipse.env.uri.URI)
-   */
-  public void rename(IURI newURI) throws URIException
-  {
-    try
-    {
-      uri_ = newURI.toString();
-      URL newURL = new URL( uri_ );
-      file_.renameTo( new File( newURL.getPath() ) );
-    }
-    catch( MalformedURLException exc )
-    {
-      throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );      
-    }
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#touchFolder()
-   */
-  public void touchFolder() throws URIException
-  {
-    file_.mkdirs();
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.env.uri.URI#touchLeaf()
-   */
-  public void touchLeaf() throws URIException
-  {
-    try
-    {
-      // Ensure that the parent folders are created.
-      File parent = file_.getParentFile();
-      parent.mkdirs();
-      
-      file_.createNewFile();
-    }
-    catch( IOException exc )
-    {
-      throw new URIException( new Status( IStatus.ERROR, "id", 0, exc.getMessage(), exc ), this );      
-    }
-  }
-
-  public boolean isRelative()
-  {
-    return false;
-  }    
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/.classpath b/plugins/org.eclipse.wst.common.frameworks.ui/.classpath
deleted file mode 100644
index 014fb18..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="wtp_ui/"/>
-	<classpathentry kind="src" path="property_files"/>
-	<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/plugins/org.eclipse.wst.common.frameworks.ui/.cvsignore b/plugins/org.eclipse.wst.common.frameworks.ui/.cvsignore
deleted file mode 100644
index a1a7a15..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-bin
-temp.folder
-build.xml
-wtp_ui.jar
-@dot
-src.zip
-javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/.project b/plugins/org.eclipse.wst.common.frameworks.ui/.project
deleted file mode 100644
index 47885fd..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.frameworks.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.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index 1e81075..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,21 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.wst.common.frameworks.ui; singleton:=true
-Bundle-Version: 1.1.1.qualifier
-Bundle-Activator: org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin
-Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.common.frameworks.internal.datamodel.ui;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.dialog.ui;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.eclipse.ui;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.operation.extensionui;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.ui;x-internal:=true
-Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.frameworks;visibility:=reexport;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.wst.common.environment;bundle-version="[1.0.100,1.1.0)"
-Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/about.html b/plugins/org.eclipse.wst.common.frameworks.ui/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/plugins/org.eclipse.wst.common.frameworks.ui/build.properties b/plugins/org.eclipse.wst.common.frameworks.ui/build.properties
deleted file mode 100644
index feb73fb..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 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
-###############################################################################
-output.. = bin/
-bin.includes = plugin.xml,\
-               .,\
-               META-INF/,\
-               plugin.properties,\
-               about.html
-source.. = wtp_ui/,\
-                    property_files/
-src.includes = schema/,\
-               plugin.properties
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.properties b/plugins/org.eclipse.wst.common.frameworks.ui/plugin.properties
deleted file mode 100644
index 16df5dc..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 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
-###############################################################################
-Cut=Cut
-FLEXIBLE_PROJECT_PREFERENCE=J2EE Project Modules
-providerName=Eclipse.org
-pluginName=WTP UI Plug-in
-WTP_UI_Action=WTP UI Action
-Extended_Viewers=Extended Viewers
-Extendable_Wizard=Extendable Wizard
-Extendable_Wizard_Page=Extendable Wizard Page
-DataModelWizard=DataModelWizard
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml b/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml
deleted file mode 100644
index e98a3bc..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-     <extension-point id="wtpuiAction" name="%WTP_UI_Action" schema="schema/wtpuiAction.exsd"/>
-   <extension-point id="extendedViewer" name="%Extended_Viewers" schema="schema/extendedViewer.exsd"/>
-   <extension-point id="extendableWizard" name="%Extendable_Wizard" schema="schema/extendableWizard.exsd"/>
-   <extension-point id="wizardPageGroup" name="%Extendable_Wizard_Page" schema="schema/extendableWizardPage.exsd"/>
-   <extension-point id="DataModelWizardExtension" name="%DataModelWizard" schema="schema/DataModelWizardExtension.exsd"/>
-
-   <extension
-         id="UITester"
-         point="org.eclipse.jem.util.uiTester">
-      <uiTester
-            className="org.eclipse.wst.common.frameworks.internal.ui.UITesterImpl">
-      </uiTester>
-   </extension>
-   <extension
-         id="context.Sensitive.Class.saveHandler"
-         name="Save Handler - Headless Context Class"
-         point="org.eclipse.jem.util.uiContextSensitiveClass">
-      <uiContextSensitiveClass
-            key="saveHandler"
-            context="UI"
-            className="org.eclipse.wst.common.frameworks.internal.ui.SaveHandlerUI">
-      </uiContextSensitiveClass>
-   </extension>
-   <extension
-         id="org.eclipse.wst.common.frameworks.internal.ui.EnablementDetermination"
-         name="UI Enablement Determination"
-         point="org.eclipse.jem.util.uiContextSensitiveClass">
-      <uiContextSensitiveClass
-            key="org.eclipse.wst.common.frameworks.internal.EnablementDetermination"
-            context="UI"
-            className="org.eclipse.wst.common.frameworks.internal.ui.UIEnablementManager">
-      </uiContextSensitiveClass>
-   </extension>
-   <extension
-         point="org.eclipse.wst.common.frameworks.WTPActivityBridgeHelper">
-      <WTPActivityBridgeHelper
-            class="org.eclipse.wst.common.frameworks.internal.ui.WTPActivityBridgeHelperImpl">
-      </WTPActivityBridgeHelper>
-   </extension>
-   <!--
-   <extension
-         point="org.eclipse.wst.common.frameworks.internals.OperationExtension">
-      <operationExtension
-            postOperationClass="org.eclipse.wst.common.frameworks.internal.operation.extension.ui.PostPasteActionOperation"
-            id="org.eclipse.wst.common.frameworks.internal.operation.extension.ui.PasteActionOperation"/>
-   </extension>
-   -->
-   
-</plugin>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/prepareforpii.xml b/plugins/org.eclipse.wst.common.frameworks.ui/prepareforpii.xml
deleted file mode 100644
index d2dca48..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/prepareforpii.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<project name="PrepareForPII" default="main" basedir=".">
-		
-	<!-- Setup temp variables -->
-	<target name="init">
-		<property name="nlsDir" value="d:/NLS/Corona/0526"/>
-		<property name="plugin" value="com.ibm.wtp.common.ui"/>
-		<property name="plugindir" value="d:/workspaceCorona/${plugin}"/>
-		<property name="outputDir" value="${nlsDir}/${plugin}"/>
-		
-	
-	</target>
-
-	<!-- Create the destination dir -->
-	<target name="nlsDir" depends="init">
-		<mkdir dir="${nlsDir}"/>
-	</target>
-	
-	<!-- Create the destination dir -->
-	<target name="plugindir" depends="nlsDir">
-		<delete dir="${outputDir}"/>
-		<mkdir dir="${outputDir}"/>
-	</target>
-
-	<!-- Move the files to the correct locations in the workspace. -->
-	<target name="main" depends="plugindir">
-	
-		<messageIdGen folderPath = "${plugindir}" componentId = "E" />
-		
-		<copy todir = "${outputDir}/property_files" >
-			 <fileset dir="${plugindir}/property_files">
-           	  <include name="**/*.properties"/>
-  			 </fileset>
-  		</copy>
-  		
-  		<copy file="${plugindir}/plugin.properties" todir="${outputDir}"/>
-  		
-	</target>
-</project>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/property_files/messages.properties b/plugins/org.eclipse.wst.common.frameworks.ui/property_files/messages.properties
deleted file mode 100644
index fbdef12..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/property_files/messages.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2006 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
-###############################################################################
-WizardNewProjectCreationPage_projectContentsLabel = Project contents:
-WizardNewProjectCreationPage_useDefaultLabel = Use &default
-WizardNewProjectCreationPage_locationLabel = Director&y:
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties b/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties
deleted file mode 100644
index aea4095..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 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
-###############################################################################
-IActionWTPOperation_UI_0=No action available for execution.
-WTPActionDialog_UI_0=Select the optional dependent actions you would like to execute.
-WTPOptionalOperationDataModel_UI_0=Root tree can not be selected.
-WTPOptionalOperationDataModel_UI_1=No operations are selected.
-MasterDescriptor_ERROR_2=IWAE0005E WTPUIOperation elements require exactly one <selectionEnablement />.
-WTPOperationAction_UI_0=Operation Status
-WTPOperationAction_UI_1=Problem executing operation.
-TimerQueue_ERROR_0=IWAE0006E Can't start a TimerQueue that is already running
-ExtendedWizardPage_ERROR_0=IWAE0007E Cannot modify id after it has already been set.
-ExtendedWizardPage_ERROR_1=IWAE0008E The id cannot be null
-MasterDescriptor_UI_1=No \" {0} \" attribute defined
-Timer_UI_0=Invalid delay: {0}
-Timer_UI_1=Invalid initial delay: {0}
-WTPWizard_UI_0=Wizard Error: {0}
-WTPWizard_UI_1=An error has occurred when {0} finished.
-WTPWizard_UI_2=Wizard Warning: {0}
-ExtendableWizard_UI_0=Wizard page failed to be created in {0} {1}
-WizardPageExtensionManager_UI_0=Element: {0} does not allow page insertion after.
-WizardPageExtensionManager_UI_1={0} will not be created
-WizardPageExtensionManager_UI_2=Circular dependancy, element: {0} check: {1}
-WizardPageExtensionManager_UI_3=Editor does not allow page insertions
-WizardPageExtensionManager_UI_4=Parent Class Not Found Error: {0} \r\n for attribute: {1} in plugin {2} \r\nPage not created
-Delete_UI_0=Delete
-Name_=Project name:
-Browse_=Browse...
-Project_location_=Project Location:
-MULTIPLE_MODULE_PREF_TEXT=Allow Multiple modules per project
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/DataModelWizardExtension.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/DataModelWizardExtension.exsd
deleted file mode 100644
index 40c75b4..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/DataModelWizardExtension.exsd
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="DataModelWizardExtension" name="Data Model Wizard Extension"/>
-      </appInfo>
-      <documentation>
-         An extension to a specific Data Model Wizard.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="DataModelWizard"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  a fully qualified identifier of the target extension point
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  an optional identifier of the extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  an optional name of the extension instance
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="DataModelWizard">
-      <complexType>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  an optional identifier of the data model wizard extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="class" type="string">
-            <annotation>
-               <documentation>
-                  the fully qualified classname of the data model wizard class implementation
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which accompanies 
-this distribution, and is available at &lt;a
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizard.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizard.exsd
deleted file mode 100644
index 9749927..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizard.exsd
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="extendableWizard" name="Extendable Wizard"/>

-      </appInfo>

-      <documentation>

-         This declares a data model wizard as a valid extendable wizard.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="extendableWizard" minOccurs="1" maxOccurs="unbounded"/>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="extendableWizard">

-      <complexType>

-         <attribute name="id" type="string" use="required">

-            <annotation>

-               <documentation>

-                  A required id for the data model wizard instance to be extended

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         1.0

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-All rights reserved. This program and the accompanying materials are made 

-available under the terms of the Eclipse Public License v1.0 which accompanies 

-this distribution, and is available at &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizardPage.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizardPage.exsd
deleted file mode 100644
index 504c8f6..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendableWizardPage.exsd
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="wizardPageGroup" name="Extendable Wizard Page"/>

-      </appInfo>

-      <documentation>

-         This allows you to add an data model wizard page to a predefined extensable data model wizard.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <choice>

-               <element ref="wizardPageGroup"/>

-            </choice>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="wizardPageGroup">

-      <complexType>

-         <sequence>

-            <choice>

-               <element ref="factory"/>

-            </choice>

-         </sequence>

-         <attribute name="wizardID" type="string" use="required">

-            <annotation>

-               <documentation>

-                  This must match the id defined in the extendableWizard element in the extendableWizard extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="allowsExtendedPagesAfter" type="string">

-            <annotation>

-               <documentation>

-                  optional setting to specify whether this page allows extended pages after itself, default it true

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="pageGroupInsertionID" type="string">

-            <annotation>

-               <documentation>

-                  If this page is to immediately after another page, this must match the pageID of the page to insert after.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="pageGroupID" type="string">

-            <annotation>

-               <documentation>

-                  optional setting for the page group ID

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="factory">

-      <complexType>

-         <attribute name="className" type="string" use="required">

-            <annotation>

-               <documentation>

-                  This class is an instancof com.ibm.wtp.common.ui.wizard.extensions.WizardExtensionFactory

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         1.0

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-All rights reserved. This program and the accompanying materials are made 

-available under the terms of the Eclipse Public License v1.0 which accompanies 

-this distribution, and is available at &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendedViewer.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendedViewer.exsd
deleted file mode 100644
index aa8908a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/extendedViewer.exsd
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="extendedViewer" name="Extended Viewers"/>

-      </appInfo>

-      <documentation>

-         The extendedViewer extension point allows the contribution of new function to an existing viewer.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="extendedViewer"/>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="extendedViewer">

-      <complexType>

-         <attribute name="viewerID" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a required id for the extendedViewer instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="parentViewerID" type="string">

-            <annotation>

-               <documentation>

-                  an optional id used to specify a parent viewer

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="factoryClass" type="string" use="required">

-            <annotation>

-               <documentation>

-                  the fully qualified name of the associated factory class

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="icon" type="string">

-            <annotation>

-               <documentation>

-                  the optional path to an icon image

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="label" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a required label description for the extended viewer

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="functionGroupID" type="string">

-            <annotation>

-               <documentation>

-                  an optional setting to associate the extended viewer with a specific function group id

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-All rights reserved. This program and the accompanying materials are made 

-available under the terms of the Eclipse Public License v1.0 which accompanies 

-this distribution, and is available at &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/wtpuiAction.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/wtpuiAction.exsd
deleted file mode 100644
index 1f8861b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/schema/wtpuiAction.exsd
+++ /dev/null
@@ -1,367 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="wtpuiAction" name="WTP UI Action"/>

-      </appInfo>

-      <documentation>

-         This extension point is for WTP Operations which need to be tied to a generic UI action, such as CUT, COPY, PASTE, DELETE, and RENAME.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <choice>

-               <element ref="masterOperation"/>

-               <element ref="slaveOperation"/>

-            </choice>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="masterOperation">

-      <annotation>

-         <documentation>

-            A masterOperation enables an existing WTP Operation to be used in a UI action. Generic Ids aggregate a set of masterOperations for the same Abstract action (like a &quot;CUT&quot; operation). WTP Operations are themselves extendible, so for any masterOperation defined, there may be any number of pre|post operations. These pre|post operation can have slaveOperation elements defined which indicate the pre|post operation may be run independently.

-         </documentation>

-      </annotation>

-      <complexType>

-         <sequence>

-            <element ref="selectionEnablement"/>

-         </sequence>

-         <attribute name="extendedGenericId" type="string" use="required">

-            <annotation>

-               <documentation>

-                  The ID of the Generic Action you would like to contribute to. (e.g. The id for CUT, COPY, PASTE, DELETE, RENAME).

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="operationClass" type="string">

-            <annotation>

-               <documentation>

-                  The fully qualified class of your operation. Your operation must be a WTPOperation and must provide a no-arguments default constructor. If this attribute is not provided, the getDefaultOperation() returned by the dataModel will be used.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string" use="required">

-            <annotation>

-               <documentation>

-                  A name to display in the dialog for your action (if the operation is optional). You can use the standard &quot;%key&quot; for translatable text stored in plugin.properties.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="description" type="string">

-            <annotation>

-               <documentation>

-                  A description to display in the dialog for your action (if the operation is optional). You can use the standard &quot;%key&quot; for translatable text stored in plugin.properties.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="populatorClass" type="string" use="required">

-            <annotation>

-               <documentation>

-                  The populatorClass knows how to provide a WTP Operation Data Model based on a given selection. The getDefaultOperation() method of the data model will be ignored if the operationClass is provided.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="alwaysExecute" type="boolean">

-            <annotation>

-               <documentation>

-                  optional setting to determine execution context

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="overrideId" type="string">

-            <annotation>

-               <documentation>

-                  optional setting to define an overridable id

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  optional identification for operation instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="selectionEnablement">

-      <annotation>

-         <documentation>

-            The selectionEnablement element allows you to filter which kinds of selection your object is applicable to using Standard Eclipse Action Expresions.

-         </documentation>

-      </annotation>

-      <complexType>

-         <choice>

-            <element ref="objectClass"/>

-            <element ref="or"/>

-         </choice>

-      </complexType>

-   </element>

-

-   <element name="slaveOperation">

-      <annotation>

-         <documentation>

-            The slaveOperation element defines display information for operations which extend a declared master operation. If a pre|post operation of a master does not have a corresponding slaveOperation element, then the pre|post operation will be consider required, and not be displayed to the user.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="operationClass" type="string" use="required">

-            <annotation>

-               <documentation>

-                  The fully qualified class of your operation. Your operation must be a WTPOperation and must provide a no-arguments default constructor. For slave operations, the data model of the master operation will be provided. Therefore, slaves cannot override the data model using a seperate populatorClass.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string" use="required">

-            <annotation>

-               <documentation>

-                  A name to display in the dialog for your action (if the operation is optional). You can use the standard &quot;%key&quot; for translatable text stored in plugin.properties.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="description" type="string">

-            <annotation>

-               <documentation>

-                  A description to display in the dialog for your action (if the operation is optional). You can use the standard &quot;%key&quot; for translatable text stored in plugin.properties.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="or">

-      <complexType>

-         <choice>

-            <element ref="objectClass"/>

-            <element ref="and"/>

-            <element ref="objectState"/>

-         </choice>

-      </complexType>

-   </element>

-

-   <element name="objectClass">

-      <complexType>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  fully qualified name of the object class

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="adaptable" type="string">

-            <annotation>

-               <documentation>

-                  optional setting to specify the object class as adaptable

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="and">

-      <complexType>

-         <choice>

-            <element ref="objectClass"/>

-            <element ref="or"/>

-         </choice>

-      </complexType>

-   </element>

-

-   <element name="objectState">

-      <complexType>

-         <attribute name="value" type="string">

-            <annotation>

-               <documentation>

-                  optional setting for the value of a specific object state

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  optional setting for an object state name to check the selected object&apos;s value is matching with

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         1.0

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         &lt;!-- The examples in this section have been commented out because they reference only extension point IDs. These examples must be corrected before being included in the documentation. --&gt;

-&lt;!--

-The following example declares two Master Operations (&lt;code&gt;com.acme.ui.operation.MasterOperationA&lt;/code&gt; and &lt;code&gt;com.acme.ui.operation.MasterOperationB&lt;/code&gt;) which are attached to the Generic ID &lt;code&gt;com.acme.ui.WTPOptionalOperationTest&lt;/code&gt;. 

-The scenario has Master A which has as a pre-operation of Slave A and a post-operation of Slave C. Slave A is made optional by the &lt;code&gt;slaveOperation&lt;/code&gt; element, while Slave C will always be run (no &lt;code&gt;slaveOperation&lt;/code&gt; is given to run it seperately). Slave A further has an optional pre-operation (Slave B) that can be executed indepently of either Slave A or Master A.

---&gt;

-&lt;!--

-&lt;pre&gt;

-   &lt;extension

-         point=&quot;org.eclipse.wst.common.frameworks.ui.wtpuiAction&quot;&gt;

-      &lt;masterOperation

-            populatorClass=&quot;com.acme.ui.operation.AcmeOperationPopulator&quot;

-            name=&quot;%master_a_name&quot;

-            operationClass=&quot;com.acme.ui.operation.MasterOperationA&quot;

-            extendedGenericId=&quot;com.acme.ui.WTPOptionalOperationTest&quot;

-            description=&quot;%master_a_description&quot;&gt;

-      &lt;/masterOperation&gt; 

-   &lt;slaveOperation

-            name=&quot;Slave A&quot;

-            operationClass=&quot;com.acme.ui.operation.SlaveOperationA&quot;&gt;

-      &lt;/slaveOperation&gt; 

-      &lt;slaveOperation

-            name=&quot;Slave B&quot;

-            operationClass=&quot;com.acme.ui.operation.SlaveOperationB&quot;&gt;

-      &lt;/slaveOperation&gt;      

-      &lt;masterOperation

-            populatorClass=&quot;com.acme.ui.operation.AcmeOperationPopulator&quot;

-            name=&quot;EAR Project Action&quot;

-            operationClass=&quot;com.acme.ui.operation.MasterOperationB&quot;

-            extendedGenericId=&quot;com.acme.ui.WTPOptionalOperationTest&quot;&gt;

-            &lt;selectionEnablement&gt; 

-             &lt;objectState name=&quot;projectNature&quot; value=&quot;org.eclipse.jst.j2ee.EARNature&quot; /&gt;

-            &lt;/selectionEnablement&gt;

-      &lt;/masterOperation&gt;   

-   &lt;/extension&gt;

-&lt;/pre&gt;   

---&gt;

-&lt;!--

-For each of the slaveOperations referenced above, you must have a corresponding WTP Operation Extension declared similar to the following:

---&gt;

-&lt;!--

-&lt;pre&gt; 

-   &lt;extension

-         id=&quot;wtpuiAciton.Acme.Extensions&quot;

-         point=&quot;org.eclipse.wst.common.frameworks.ExtendableOperation&quot;&gt;

-      &lt;extendableOperation

-            class=&quot;com.acme.ui.operation.MasterOperationA&quot;

-            id=&quot;com.acme.ui.operation.MasterOperationA&quot;&gt;

-      &lt;/extendableOperation&gt;

-      &lt;extendableOperation

-            class=&quot;com.acme.ui.operation.SlaveOperationA&quot;

-            id=&quot;com.acme.ui.operation.SlaveOperationA&quot;&gt;

-      &lt;/extendableOperation&gt;

-   &lt;/extension&gt;

-   &lt;extension

-         point=&quot;org.eclipse.wst.common.frameworks.OperationExtension&quot;&gt;--&gt;

-      &lt;!-- Made optional by the above declaration --&gt;

-      &lt;!--&lt;operationExtension

-            preOperationClass=&quot;com.acme.ui.operation.SlaveOperationA&quot;

-            id=&quot;com.acme.ui.operation.MasterOperationA&quot;&gt;

-      &lt;/operationExtension&gt;--&gt;

-      &lt;!-- Made optional by the above declaration --&gt;

-      &lt;!--&lt;operationExtension

-            postOperationClass=&quot;com.acme.ui.operation.SlaveOperationB&quot;

-            id=&quot;com.acme.ui.operation.SlaveOperationA&quot;&gt;

-      &lt;/operationExtension&gt;--&gt;   

-      &lt;!-- Non-optional operation, will always run --&gt;

-      &lt;!--&lt;operationExtension

-            postOperationClass=&quot;com.acme.ui.operation.SlaveOperationC&quot;

-            id=&quot;com.acme.ui.operation.MasterOperationA&quot;&gt;

-      &lt;/operationExtension&gt;  

-   &lt;/extension&gt; 

-&lt;/pre&gt;

---&gt;

-&lt;!--

-In general, users extending existing actions only need to declare the following: 

---&gt;

-&lt;!--

-&lt;pre&gt;

- &lt;extension

-         point=&quot;org.eclipse.wst.common.frameworks.OperationExtension&quot;&gt;--&gt; 

- &lt;!-- The action referenced must be declared as extensible by the   org.eclipse.wst.common.frameworks.ExtendableOperation extension point --&gt;         

-      &lt;!--&lt;operationExtension

-            preOperationClass=&quot;...YOUR CLASS...&quot;            

-            id=&quot;...ID OF EXISTING OPERATION...&quot;&gt; 

-      &lt;/operationExtension&gt; 

- &lt;/extension&gt;      

-&lt;/pre&gt;      

---&gt;

-&lt;!--

-And if your operation is optional declare the slaveOperation:

---&gt;

-&lt;!--

-&lt;pre&gt; 

-   &lt;extension

-         point=&quot;org.eclipse.wst.common.frameworks.ui.wtpuiAction&quot;&gt; 

-   &lt;slaveOperation

-            name=&quot;..NAME OF YOUR OPERATION...&quot;

-            description=&quot;...DESCRIPTION OF YOUR ACTION...&quot;

-            operationClass=&quot;...YOUR CLASS...&quot;&gt;

-      &lt;/slaveOperation&gt; 

-   &lt;/extension&gt;      

-&lt;/pre&gt;

---&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-All rights reserved. This program and the accompanying materials are made 

-available under the terms of the Eclipse Public License v1.0 which accompanies 

-this distribution, and is available at &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/AddablePageGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/AddablePageGroup.java
deleted file mode 100644
index 53c3360..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/AddablePageGroup.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import org.eclipse.jface.wizard.IWizardPage;
-
-public interface AddablePageGroup extends  IDMPageGroup
-{
-  public void addPage( IWizardPage page );
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelSynchHelper.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelSynchHelper.java
deleted file mode 100644
index f634a6e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelSynchHelper.java
+++ /dev/null
@@ -1,569 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.CheckboxTreeViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.StructuredViewer;
-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.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.swt.widgets.Widget;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelPropertyDescriptor;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
-import org.eclipse.wst.common.frameworks.internal.ui.TimedModifyListener;
-
-/**
- * This class is EXPERIMENTAL and is subject to substantial changes.
- */
-public class DataModelSynchHelper implements IDataModelListener {
-	protected static final boolean isLinux = System.getProperty("os.name").equals("Linux"); //$NON-NLS-1$ //$NON-NLS-2$
-
-	protected IDataModel dataModel;
-	protected Map widgetToPropertyHash;
-	protected Map propertyToWidgetHash;
-	protected Map widgetToDepControls;
-
-	protected String currentProperty;
-	protected Widget currentWidget;
-	protected Widget currentWidgetFromEvent; // TODO M4 see if this should be set with for
-	// listeners
-	protected boolean ignoreModifyEvent = false;
-
-	private class ModifyTextListener implements ModifyListener {
-		public void modifyText(ModifyEvent e) {
-			if (ignoreModifyEvent)
-				return;
-			Text text = (Text) e.getSource();
-			if (currentWidget == text)
-				return;
-			String propertyName = (String) widgetToPropertyHash.get(text);
-			setProperty(propertyName, text.getText());
-		}
-	}
-
-	private ModifyTextListener modifyTextListener;
-	private TimedModifyListener timedModifyListener;
-
-	private class ComboListener implements SelectionListener, ModifyListener {
-
-		public void modifyText(ModifyEvent e) {
-			if (ignoreModifyEvent)
-				return;
-			Combo combo = (Combo) e.getSource();
-			if (currentWidget == combo)
-				return;
-
-			try {
-				currentWidgetFromEvent = combo;
-				String propertyName = (String) widgetToPropertyHash.get(combo);
-				DataModelPropertyDescriptor[] descriptors = dataModel.getValidPropertyDescriptors(propertyName);
-				String description = combo.getText();
-				// On a combo selection linux fires 2 events;
-				// the first clears the value which needs to be ignored when the type is not String
-				// the second sets the new value
-				if (isLinux && description.length() == 0 && descriptors.length != 0 && !(descriptors[0].getPropertyValue() instanceof String)) {
-					return;
-				}
-				for (int i = 0; i < descriptors.length; i++) {
-					if (description.equals(descriptors[i].getPropertyDescription())) {
-						setProperty(propertyName, descriptors[i].getPropertyValue());
-						return;
-					}
-				}
-				setProperty(propertyName, combo.getText());
-			} finally {
-				currentWidgetFromEvent = null;
-			}
-		}
-
-		public void widgetSelected(SelectionEvent e) {
-			Combo combo = (Combo) e.getSource();
-			if (currentWidget == combo)
-				return;
-			String propertyName = (String) widgetToPropertyHash.get(combo);
-			if (combo.getSelectionIndex() >= 0) {
-				DataModelPropertyDescriptor[] descriptors = dataModel.getValidPropertyDescriptors(propertyName);
-				String description = combo.getItem(combo.getSelectionIndex());
-				for (int i = 0; i < descriptors.length; i++) {
-					if (description.equals(descriptors[i].getPropertyDescription())) {
-						setProperty(propertyName, descriptors[i].getPropertyValue());
-						return;
-					}
-				}
-				setProperty(propertyName, combo.getItem(combo.getSelectionIndex()));
-			}
-		}
-
-		public void widgetDefaultSelected(SelectionEvent e) {
-		}
-	}
-
-	private ComboListener comboListener;
-
-	private class CheckboxSelectionListener implements SelectionListener {
-		public void widgetSelected(SelectionEvent e) {
-			Button button = (Button) e.getSource();
-			if (currentWidget == button)
-				return;
-			String propertyName = (String) widgetToPropertyHash.get(button);
-			setProperty(propertyName, new Boolean(button.getSelection()));
-		}
-
-		public void widgetDefaultSelected(SelectionEvent e) {
-		}
-	}
-
-	private CheckboxSelectionListener checkboxSelectionListener;
-
-	public DataModelSynchHelper(IDataModel model) {
-		this.dataModel = model;
-		dataModel.addListener(this);
-	}
-
-	private CheckBoxViewerListener checkBoxViewerStateListener;
-
-	private class CheckBoxViewerListener implements ICheckStateListener {
-		public void checkStateChanged(CheckStateChangedEvent event) {
-			StructuredViewer viewer = (StructuredViewer) event.getSource();
-			CheckboxTableViewer checkBoxTableViewer;
-			CheckboxTreeViewer checkBoxTreeViewer;
-			Object[] items = null;
-			if (viewer instanceof CheckboxTableViewer) {
-				checkBoxTableViewer = (CheckboxTableViewer) viewer;
-				items = checkBoxTableViewer.getCheckedElements();
-			} else if (viewer instanceof CheckboxTreeViewer) {
-				checkBoxTreeViewer = (CheckboxTreeViewer) viewer;
-				items = checkBoxTreeViewer.getCheckedElements();
-			}
-			String propertyName = (String) widgetToPropertyHash.get(viewer.getControl());
-			setPropertyItems(propertyName, items);
-		}
-	}
-
-	public void propertyChanged(DataModelEvent event) {
-		String propertyName = event.getPropertyName();
-		int flag = event.getFlag();
-		if (flag == DataModelEvent.ENABLE_CHG)
-			setEnablement(propertyName, event.isPropertyEnabled());
-		else
-			synchUIWithModel(propertyName, flag);
-	}
-
-	protected void setProperty(String propertyName, Object value) {
-		currentProperty = propertyName;
-		try {
-			dataModel.setProperty(propertyName, value);
-		} finally {
-			currentProperty = null;
-		}
-	}
-
-	protected void setPropertyItems(String propertyName, Object[] items) {
-		currentProperty = propertyName;
-		try {
-			dataModel.setProperty(propertyName, items);
-		} finally {
-			currentProperty = null;
-		}
-	}
-
-	/**
-	 * Sets the UI to have the property value defined in the model
-	 * 
-	 * @param propertyName
-	 * @link IDataModelListener for the flag values.
-	 */
-	public void synchUIWithModel(final String propertyName, final int flag) {
-		if (null != propertyToWidgetHash && propertyToWidgetHash.containsKey(propertyName)) {
-			Display.getDefault().syncExec(new Runnable() {
-				public void run() {
-					try {
-						currentWidget = (Widget) propertyToWidgetHash.get(propertyName);
-						if (currentWidget != null && currentWidget != currentWidgetFromEvent) {
-							//We must hold a copy in a temp variable because setting the widget value
-							//may trigger an event that will cause this method to be called again.
-							Widget widget = currentWidget;
-							try {
-								ignoreModifyEvent = true;
-								if (currentWidget instanceof Text)
-									setWidgetValue(propertyName, flag, (Text) currentWidget);
-								else if (currentWidget instanceof Combo) {
-									setWidgetValue(propertyName, flag, (Combo) currentWidget);
-								} else if (currentWidget instanceof Button)
-									setWidgetValue(propertyName, flag, (Button) currentWidget);
-								else if (currentWidget instanceof Label)
-									setWidgetValue(propertyName, flag, (Label) currentWidget);
-								else if (currentWidget instanceof List)
-									setWidgetValue(propertyName, flag, (List) currentWidget);
-								else if (currentWidget instanceof Table)
-									setWidgetValue(propertyName, flag, (Table) currentWidget);
-								else if (currentWidget instanceof Tree)
-									setWidgetValue(propertyName, flag, (Tree) currentWidget);
-							} finally {
-								ignoreModifyEvent = false;
-							}
-							//Pass the copy of the currentWidget
-							setEnablement((Control) widget, dataModel.isPropertyEnabled(propertyName));
-						}
-					} finally {
-						currentWidget = null;
-					}
-				}
-			});
-		}
-	}
-
-	/**
-	 * @param control
-	 * @param enabled
-	 */
-	protected void setEnablement(Control control, boolean enabled) {
-		if (control.isEnabled() != enabled)
-			control.setEnabled(enabled);
-		setDependentControlEnablement(control, enabled);
-	}
-
-	private void setEnablement(final String propertyName, final boolean enabled) {
-		if (propertyToWidgetHash != null) {
-			Display.getDefault().syncExec(new Runnable() {
-				public void run() {
-					Control control = (Control) propertyToWidgetHash.get(propertyName);
-					if (control != null) {
-						setEnablement(control, enabled);
-					}
-				}
-			});
-		}
-	}
-
-	/**
-	 * @param control
-	 * @param enabled
-	 */
-	private void setDependentControlEnablement(Control control, boolean enabled) {
-		if (widgetToDepControls != null) {
-			Control[] dependents = (Control[]) widgetToDepControls.get(control);
-			if (dependents != null) {
-				Control dep = null;
-				for (int i = 0; i < dependents.length; i++) {
-					dep = dependents[i];
-					if (dep.isEnabled() != enabled)
-						dep.setEnabled(enabled);
-				}
-			}
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Button button) {
-		if ((button.getStyle() & SWT.CHECK) == SWT.CHECK || (button.getStyle() & SWT.RADIO) == SWT.RADIO) {
-			boolean checked = dataModel.getBooleanProperty(propertyName);
-			if (button.getSelection() != checked) {
-				button.setSelection(checked);
-			}
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Combo combo) {
-		if (flag == DataModelEvent.VALID_VALUES_CHG || combo.getItemCount() == 0) {
-			// Display properties should only fire if the contents change.
-			DataModelPropertyDescriptor[] descriptors = dataModel.getValidPropertyDescriptors(propertyName);
-			String[] items = new String[descriptors.length];
-			for (int i = 0; i < descriptors.length; i++) {
-				items[i] = descriptors[i].getPropertyDescription();
-			}
-			combo.setItems(items);
-		}
-		String newText = dataModel.getPropertyDescriptor(propertyName).getPropertyDescription();
-		int selIndex = combo.getSelectionIndex();
-		if (selIndex < 0 || !newText.equals(combo.getItem(selIndex))) {
-			String[] items = combo.getItems();
-			for (int i = 0; i < items.length; i++) {
-				if (items[i].equals(newText)) {
-					combo.select(i);
-					return;
-				}
-			}
-		}
-		combo.setText(newText);
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Text text) {
-		String newText = dataModel.getStringProperty(propertyName);
-		if (!newText.equals(text.getText())) {
-			text.setText(newText);
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Table table) {
-		Object[] elements = (Object[]) dataModel.getProperty(propertyName);
-		if (elements == null || elements.length == 0) {
-			setTableItemsChecked(table.getItems(), false);
-			return;
-		}
-		java.util.List elementList = Arrays.asList(elements);
-		TableItem[] tableItems = table.getItems();
-		for (int i = 0; i < tableItems.length; i++) {
-			TableItem item = tableItems[i];
-			if (elementList.contains(item.getData()))
-				item.setChecked(true);
-			else
-				item.setChecked(false);
-		}
-	}
-
-	protected void setTableItemsChecked(TableItem[] tableItems, boolean b) {
-		for (int i = 0; i < tableItems.length; i++)
-			tableItems[i].setChecked(b);
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Tree tree) {
-		Object[] elements = (Object[]) dataModel.getProperty(propertyName);
-		if (elements == null)
-			return;
-		java.util.List elementList = Arrays.asList(elements);
-		TreeItem[] treeItems = tree.getItems();
-		if (elementList.size() == 0) {
-			setTreeItemsGrey(treeItems, false);
-			return;
-		}
-		if (treeItems.length > 0)
-			setTreeItemChecked(treeItems, elementList);
-	}
-
-	public void setTreeItemsGrey(TreeItem[] treeItems, boolean b) {
-		for (int i = 0; i < treeItems.length; i++) {
-			TreeItem item = treeItems[i];
-			item.setGrayed(b);
-			setTreeItemsGrey(treeItems[i].getItems(), b);
-		}
-	}
-
-	protected void setTreeItemChecked(TreeItem[] treeItems, java.util.List items) {
-		for (int i = 0; i < treeItems.length; i++) {
-			if (items.contains(treeItems[i].getData())){
-				treeItems[i].setChecked(true);
-				treeItems[i].setGrayed(false);
-			}else{
-				treeItems[i].setGrayed(true);
-			}
-			TreeItem[] childernItems = treeItems[i].getItems();
-			if (childernItems.length > 0) {
-				treeItems[i].setExpanded(true);
-				setTreeItemChecked(childernItems, items);
-			}
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, Label label) {
-		String newText = dataModel.getStringProperty(propertyName);
-		if (!newText.equals(label.getText())) {
-			label.setText(newText);
-		}
-	}
-
-	protected void setWidgetValue(String propertyName, int flag, List list) {
-		Object newContents = dataModel.getProperty(propertyName);
-		if (newContents == null) {
-			list.setItems(new String[0]);
-			return;
-		}
-		if (newContents instanceof java.util.List) {
-			java.util.List modelContents = (java.util.List) newContents;
-			String[] items = new String[modelContents.size()];
-			for (int i = 0; i < modelContents.size(); i++) {
-				items[i] = modelContents.get(i).toString();
-			}
-			list.setItems(items);
-		} else if (newContents instanceof String[]) {
-			list.setItems((String[]) newContents);
-		}
-	}
-
-	public void synchAllUIWithModel() {
-		if (null != propertyToWidgetHash) {
-			Collection keys = propertyToWidgetHash.keySet();
-			if (!keys.isEmpty()) {
-				Iterator propertyNames = keys.iterator();
-				String propertyName = null;
-				while (propertyNames.hasNext()) {
-					propertyName = (String) propertyNames.next();
-					synchUIWithModel(propertyName, DataModelEvent.VALUE_CHG);
-				}
-			}
-		}
-	}
-
-	protected void synchComposite(Widget widget, String propertyName, Control[] depControls) {
-		if (null == widgetToPropertyHash)
-			widgetToPropertyHash = new HashMap();
-		if (propertyToWidgetHash == null)
-			propertyToWidgetHash = new HashMap();
-		widgetToPropertyHash.put(widget, propertyName);
-		propertyToWidgetHash.put(propertyName, widget);
-		if (depControls != null) {
-			if (widgetToDepControls == null)
-				widgetToDepControls = new HashMap();
-			widgetToDepControls.put(widget, depControls);
-		}
-		synchUIWithModel(propertyName, DataModelEvent.VALUE_CHG);
-	}
-
-	public void synchText(Text text, String propertyName, Control[] dependentControls) {
-		synchText(text, propertyName, false, dependentControls);
-	}
-
-	public void synchText(Text text, String propertyName, boolean isTimeModified, Control[] dependentControls) {
-		synchComposite(text, propertyName, dependentControls);
-		if (isTimeModified)
-			text.addModifyListener(getTimedListener());
-		else
-			text.addModifyListener(getModifyTextListener());
-	}
-
-	public void synchLabel(Label label, String propertyName, Control[] dependentControls) {
-		synchComposite(label, propertyName, dependentControls);
-	}
-
-	/**
-	 * Use this to synch the contents of the <code>list</code> to the List elements returned from
-	 * the <code>propertyName</code>.
-	 */
-	public void synchList(List list, String propertyName, Control[] dependentControls) {
-		synchComposite(list, propertyName, dependentControls);
-	}
-
-	/**
-	 * Use this to synch the value of the specified Combo with the specified propertyName. The
-	 * possible values displayed to the user are determined by return of
-	 * IDataModel.getValidPropertyDescriptors(String).
-	 * 
-	 * @param combo
-	 * @param propertyName
-	 * @param dependentControls
-	 */
-	public void synchCombo(Combo combo, String propertyName, Control[] dependentControls) {
-		synchComposite(combo, propertyName, dependentControls);
-		if (null == comboListener) {
-			comboListener = new ComboListener();
-		}
-		combo.addSelectionListener(comboListener);
-		combo.addModifyListener(comboListener);
-	}
-
-	/**
-	 * Use this to sync the state of the specified checkbox with the value of the specified
-	 * propertyName. The specified propertyName must contain a java.lang.Boolean typed Object.
-	 * 
-	 * @param checkbox
-	 * @param propertyName
-	 * @param dependentControls
-	 */
-	public void synchCheckbox(Button checkbox, String propertyName, Control[] dependentControls) {
-		synchComposite(checkbox, propertyName, dependentControls);
-		if (null == checkboxSelectionListener) {
-			checkboxSelectionListener = new CheckboxSelectionListener();
-		}
-		checkbox.addSelectionListener(checkboxSelectionListener);
-	}
-
-	public void synchCheckBoxTableViewer(CheckboxTableViewer tableViewer, String propertyName, Control[] dependentControls) {
-		synchComposite(tableViewer.getControl(), propertyName, dependentControls);
-		if (null == checkBoxViewerStateListener) {
-			checkBoxViewerStateListener = new CheckBoxViewerListener();
-		}
-		tableViewer.addCheckStateListener(checkBoxViewerStateListener);
-	}
-
-	public void synchCheckBoxTreeViewer(CheckboxTreeViewer treeViewer, String propertyName, Control[] dependentControls) {
-		treeViewer.expandAll();
-		synchComposite(treeViewer.getControl(), propertyName, dependentControls);
-		if (null == checkBoxViewerStateListener) {
-			checkBoxViewerStateListener = new CheckBoxViewerListener();
-		}
-		treeViewer.addCheckStateListener(checkBoxViewerStateListener);
-	}
-
-	public void synchRadio(Button radio, String propertyName, Control[] dependentControls) {
-		// Uses checkbox syncher
-		synchCheckbox(radio, propertyName, dependentControls);
-	}
-
-	private TimedModifyListener getTimedListener() {
-		if (timedModifyListener == null)
-			timedModifyListener = new TimedModifyListener(new ActionListener() {
-				public void actionPerformed(ActionEvent e) {
-					Widget w = (Widget) e.getSource();
-					if (currentWidget == w || w.isDisposed())
-						return;
-					String propertyName = (String) widgetToPropertyHash.get(w);
-					setTextProperty(propertyName, (Text) w);
-				}
-			}) {
-				public void modifyText(ModifyEvent e) {
-					if (ignoreModifyEvent)
-						return;
-					super.modifyText(e);
-				}
-			};
-		return timedModifyListener;
-	}
-
-	protected void setTextProperty(String propertyName, Text text) {
-		setProperty(propertyName, text.getText());
-	}
-
-	private ModifyTextListener getModifyTextListener() {
-		if (null == modifyTextListener)
-			modifyTextListener = new ModifyTextListener();
-		return modifyTextListener;
-	}
-
-	public IDataModel getDataModel() {
-		return dataModel;
-	}
-
-	public void dispose() {
-		dataModel.removeListener(this);
-		checkboxSelectionListener = null;
-		currentWidget = null;
-		modifyTextListener = null;
-		propertyToWidgetHash = null;
-		timedModifyListener = null;
-		widgetToDepControls = null;
-		widgetToPropertyHash = null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java
deleted file mode 100644
index 3f15bec..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizard.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider;
-import org.eclipse.wst.common.frameworks.internal.datamodel.IDataModelPausibleOperation;
-import org.eclipse.wst.common.frameworks.internal.dialog.ui.WarningDialog;
-import org.eclipse.wst.common.frameworks.internal.eclipse.ui.EclipseEnvironment;
-import org.eclipse.wst.common.frameworks.internal.ui.ErrorDialog;
-import org.eclipse.wst.common.frameworks.internal.ui.PageGroupManager;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPCommonUIResourceHandler;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-
-
-/**
- * This class is EXPERIMENTAL and is subject to substantial changes.
- */
-public abstract class DataModelWizard extends Wizard implements IDMPageHandler {
-	private PageGroupManager pageGroupManager;
-	private IDataModel dataModel;
-	private AddablePageGroup rootPageGroup;
-	private IDataModelPausibleOperation rootOperation;
-
-	// private IWizardPage firstpage;
-
-	public DataModelWizard(IDataModel dataModel) {
-		this.dataModel = dataModel;
-	}
-
-	public DataModelWizard() {
-	}
-
-	protected abstract IDataModelProvider getDefaultProvider();
-
-	/**
-	 * @return the wizard ID that clients should extend to add to this wizard
-	 */
-	public final String getWizardID() {
-		return getDataModel().getID();
-	}
-
-	/**
-	 * 
-	 * @return returns the root operation for this wizard.
-	 */
-	protected IDataModelPausibleOperation getRootOperation() {
-		return (IDataModelPausibleOperation)getDataModel().getDefaultOperation();
-	}
-
-	/**
-	 * This is finalized to handle the adding of extended pages. Clients should override
-	 * doAddPages() to add their pages.
-	 */
-	public final void addPages() {
-		init();
-		doAddPages();
-	}
-
-	/**
-	 * Subclasses should override this method to add pages.
-	 */
-	protected void doAddPages() {
-	}
-
-	// TODO make this final
-	public IWizardPage getStartingPage() {
-		pageGroupManager.reset();
-		return getNextPage(null);
-	}
-
-	/**
-	 * Subclasses wishing to control the page ordering should do so by overriding
-	 * getNextPage(String, String) and getPreviousPage(String, String)
-	 * 
-	 * @link #getNextPage(String, String)
-	 * @link #getPreviousPage(String, String)
-	 */
-	// TODO make this final
-	public IWizardPage getNextPage(IWizardPage page) {
-
-		IWizardPage currentPage = pageGroupManager.getCurrentPage();
-
-		pageGroupManager.moveForwardOnePage();
-
-		IWizardPage nextPage = pageGroupManager.getCurrentPage();
-
-		// If an error occured then the current page and the next page will be the same.
-		if (currentPage != nextPage && nextPage != null) {
-			nextPage.setWizard(this);
-			nextPage.setPreviousPage(currentPage);
-		}
-
-		return currentPage == nextPage ? null : nextPage;
-	}
-
-	public String getNextPage(String currentPageName, String expectedNextPageName) {
-		return expectedNextPageName;
-	}
-
-	/**
-	 * Subclasses wishing to control the page ordering should do so by overriding
-	 * getNextPage(String, String) and getPreviousPage(String, String)
-	 * 
-	 * @link #getNextPage(String, String)
-	 * @link #getPreviousPage(String, String)
-	 */
-	// TODO make this final
-	public IWizardPage getPreviousPage(IWizardPage page) {
-		return page != null ? page.getPreviousPage() : null;
-	}
-
-	public String getPreviousPage(String currentPageName, String expectedPreviousPageName) {
-		return expectedPreviousPageName;
-	}
-
-	public boolean canFinish() {
-		if (!super.canFinish() || !getDataModel().isValid()) {
-			return false;
-		}
-
-		return true;
-	}
-
-	public PageGroupManager getPageGroupManager() {
-		return pageGroupManager;
-	}
-
-	// TODO need to implement this. Perhaps in the PageGroupManager
-	//
-	protected void resetAfterFinishError() {
-		// IWizardPage[] pages = getPages();
-		// for (int i = 0; i < pages.length; i++) {
-		// DataModelWizardPage wtpPage = (DataModelWizardPage) pages[i];
-		// wtpPage.validatePage(true);
-		// }
-	}
-
-	protected boolean isExecuting() {
-		return executing;
-	}
-	
-	private boolean executing = false;
-	
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
-	 */
-	public final boolean performFinish() {
-		try {
-			executing = true;
-			if (prePerformFinish()) {
-				storeDefaultSettings();
-
-				final IStatus st = runOperations();
-
-				if (st.getSeverity() == IStatus.ERROR) {
-					WTPUIPlugin.log(st);
-					ErrorDialog.openError(getShell(), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_0, new Object[]{getWindowTitle()}), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_1, new Object[]{getWindowTitle()}), new CoreException(st), 0, false);
-				} else if(st.getSeverity() == IStatus.WARNING){
-					WarningDialog.openWarning(getShell(), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_2, new Object[]{getWindowTitle()}), st.getMessage(), st, IStatus.WARNING);
-				}
-
-				postPerformFinish();
-			}
-		} catch (Throwable exc) {
-			WTPUIPlugin.log(exc);
-			ErrorDialog.openError(getShell(), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_0, new Object[]{getWindowTitle()}), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_1, new Object[]{getWindowTitle()}), exc, 0, false);
-		} finally {
-			executing = false;
-		}
-
-		return true;
-	}
-
-	private IStatus runOperations() {
-		final IStatus[] status = new IStatus[1];
-		class CatchThrowableRunnableWithProgress implements IRunnableWithProgress {
-			public Throwable caught = null;
-
-			public void run(IProgressMonitor pm) {
-				try {
-					if (rootOperation == null) {
-						//This will be the typical case because most wizards will
-						//not initialize the root operation during init.
-						rootOperation = getRootOperation();
-					}
-					status[0] = rootOperation.execute(pm, null);
-				} catch (Throwable e) {
-					caught = e;
-				}
-			}
-		}
-		CatchThrowableRunnableWithProgress runnable = new CatchThrowableRunnableWithProgress();
-
-		try {
-			getContainer().run(runForked(), isCancelable(), runnable);
-		} catch (Throwable e) {
-			runnable.caught = e;
-		}
-		if (runnable.caught != null) {
-			Logger.getLogger().logError(runnable.caught);
-			status[0] = new Status(IStatus.ERROR, "id", 0, runnable.caught.getMessage(), runnable.caught); //$NON-NLS-1$
-			ErrorDialog.openError(getShell(), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_0, new Object[]{getWindowTitle()}), WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WTPWizard_UI_1, new Object[]{getWindowTitle()}), runnable.caught, 0, false);
-		}
-		return status[0];
-	}
-
-	public boolean performCancel() {
-		pageGroupManager.undoAllCurrentOperations();
-
-		return true;
-	}
-
-	/**
-	 * Subclass can override to perform any tasks prior to running the operation. Return true to
-	 * have the operation run and false to stop the execution of the operation.
-	 * 
-	 * @return
-	 */
-	protected boolean prePerformFinish() {
-		return true;
-	}
-
-	/**
-	 * Subclasses should override to perform any actions necessary after performing Finish.
-	 */
-	protected void postPerformFinish() throws InvocationTargetException {
-	}
-
-	protected void storeDefaultSettings() {
-		pageGroupManager.storeDefaultSettings(this);
-	}
-
-	public void storeDefaultSettings(IWizardPage page) {
-		if (page instanceof DataModelWizardPage)
-			((DataModelWizardPage) page).storeDefaultSettings();
-	}
-
-
-	/**
-	 * Subclasses may override if they need to do something special when storing the default
-	 * settings for a particular page.
-	 * 
-	 * @param page
-	 * @param pageIndex
-	 */
-	protected void storeDefaultSettings(IWizardPage page, int pageIndex) {
-		storeDefaultSettings(page);
-	}
-
-	/**
-	 * Subclasses should override if the running operation is allowed to be cancelled. The default
-	 * is false.
-	 * 
-	 * @return
-	 */
-	protected boolean isCancelable() {
-		return false;
-	}
-
-	/**
-	 * Subclasses should override to return false if the running operation cannot be run forked.
-	 * 
-	 * @return
-	 */
-	protected boolean runForked() {
-		return true;
-	}
-
-	public void setDataModel(IDataModel model) {
-		this.dataModel = model;
-	}
-
-	/**
-	 * @return Returns the model.
-	 */
-	public IDataModel getDataModel() {
-		if (null == dataModel) {
-			dataModel = DataModelFactory.createDataModel(getDefaultProvider());
-		}
-
-		return dataModel;
-	}
-
-	public void dispose() {
-		super.dispose();
-		if (null != rootPageGroup) {
-			List pages = rootPageGroup.getPages(dataModel);
-			for (Iterator it = pages.iterator(); it.hasNext();)
-			{
-				Object page = it.next();
-				if (page instanceof IWizardPage)
-				{
-					((IWizardPage)page).dispose();
-				}
-			}
-		}
-		if (null != dataModel) {
-			dataModel.dispose();
-		}
-	}
-
-	/**
-	 * The default is to return a SimplePageGroup. Subclasses may want to overrided this method to
-	 * return a different root page group for the wizard.
-	 * 
-	 * @return
-	 */
-	protected AddablePageGroup createRootPageGroup() {
-		String id = getWizardID();
-		// For the root page group the wizard id and the group id are the same.
-		SimplePageGroup pageGroup = new SimplePageGroup(id, id);
-		pageGroup.setPageHandler(this);
-		return pageGroup;
-	}
-
-	/**
-	 * Creates the default environment for this wizard.
-	 * 
-	 * @return
-	 */
-	protected IEnvironment createEnvironment() {
-		return new EclipseEnvironment();
-	}
-
-	public void addPage(IWizardPage page) {
-		rootPageGroup.addPage(page);
-	}
-
-	private void init() {
-		rootPageGroup = createRootPageGroup();
-		if (needsToRunOperationsBeforeFinish()) {
-			rootOperation = getRootOperation();
-			pageGroupManager = new PageGroupManager(rootOperation, rootPageGroup);
-		} else {
-			pageGroupManager = new PageGroupManager(getDataModel(), rootPageGroup);
-		}
-	}
-	
-	/**
-	 * Subclasses should override to return true if they require the running
-	 * of the operation during page turning.
-	 * 
-	 * @return A boolean defaulted to false.
-	 */
-	protected boolean needsToRunOperationsBeforeFinish() {
-		return false;
-	}
-
-	public boolean needsPreviousAndNextButtons() {
-		return super.needsPreviousAndNextButtons() || getPageGroupManager().hasMultiplePages();
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardFactory.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardFactory.java
deleted file mode 100644
index eec76f6..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.operation.extensionui.DataModelWizardExtensionReader;
-
-public class DataModelWizardFactory {
-
-	private static DataModelWizardExtensionReader reader;
-
-	/**
-	 * Looks up the appropriate DataModelWizard by the specified id and
-	 * constructs a new DataModelWizard using a new instance of the IDataModel
-	 * looked up with the same id. If the DataModelWizard is not found then a
-	 * RuntimeException is thrown.
-	 * 
-	 * @param id
-	 *            the id of the DataModelWizard
-	 * @return a new DataModelWizard
-	 */
-	public static DataModelWizard createWizard(String id) {
-		return createWizard(DataModelFactory.createDataModel(id));
-	}
-
-	/**
-	 * Looks up the appropriate DataModelWizard using the id retured from
-	 * <code>dataModel.getID()</code>.
-	 * 
-	 * @param dataModel
-	 * @return a new DataModelWizard
-	 */
-	public static DataModelWizard createWizard(IDataModel dataModel) {
-		return loadWizard(dataModel);
-	}
-
-	private static DataModelWizard loadWizard(IDataModel dataModel) {
-		if (null == reader) {
-			reader = new DataModelWizardExtensionReader();
-		}
-		return reader.getWizard(dataModel);
-	}
-
-	/**
-	 * Looks up the appropriate DataModelWizard using the name of the specified
-	 * class as the id. This method is equavalent to
-	 * <code>createWizard(classID.getName())</code>.
-	 * 
-	 * @param classID
-	 *            the class whose name is the id of the DataModelWizard
-	 * @return a new DataModelWizard
-	 */
-	public static DataModelWizard createWizard(Class dataModelProviderID) {
-		return createWizard(dataModelProviderID.getName());
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardPage.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardPage.java
deleted file mode 100644
index 288022d..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/DataModelWizardPage.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-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.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-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.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.ui.ValidationStatus;
-
-/**
- * This class is EXPERIMENTAL and is subject to substantial changes.
- */
-public abstract class DataModelWizardPage extends WizardPage implements Listener, IDataModelListener {
-	protected static final int NEXT = 1;
-	protected static final int PREVIOUS = 2;
-	protected static final int COMPOSITE_BORDER = SWT.NULL;
-	private ValidationStatus status = new ValidationStatus();
-	private boolean isValidating = false;
-	protected boolean isFirstTimeToPage = true;
-	protected IDataModel model;
-	private Map validationMap;
-	private String[] validationPropertyNames;
-	protected DataModelSynchHelper synchHelper;
-	private String infopopID;
-	private DataModelWizard wizard;
-	private IWizardPage previousPage;
-
-	/**
-	 * J2EEWizardPage constructor comment.
-	 * 
-	 * @param pageName
-	 *            java.lang.String
-	 */
-	protected DataModelWizardPage(IDataModel model, String pageName) {
-		super(pageName);
-		this.model = model;
-		model.addListener(this);
-		synchHelper = initializeSynchHelper(model);
-	}
-
-	/**
-	 * @return
-	 */
-	public DataModelSynchHelper initializeSynchHelper(IDataModel dm) {
-		return new DataModelSynchHelper(dm);
-	}
-
-	/**
-	 * J2EEWizardPage constructor comment.
-	 * 
-	 * @param pageName
-	 *            java.lang.String
-	 * @param title
-	 *            java.lang.String
-	 * @param titleImage
-	 *            org.eclipse.jface.resource.ImageDescriptor
-	 */
-	protected DataModelWizardPage(IDataModel model, String pageName, String title, org.eclipse.jface.resource.ImageDescriptor titleImage) {
-		super(pageName, title, titleImage);
-		this.model = model;
-		model.addListener(this);
-		synchHelper = initializeSynchHelper(model);
-	}
-
-	/**
-	 * Creates the top level control for this dialog page under the given parent composite. This
-	 * method has been abstract and it uses the template pattern to get the correct items setup in
-	 * the correct order. See the set of methods below that are called in this method.
-	 * <p>
-	 * Implementors are responsible for ensuring that the created control can be accessed via
-	 * <code>getControl</code>
-	 * </p>
-	 * 
-	 * @param parent
-	 *            the parent composite
-	 */
-	public final void createControl(org.eclipse.swt.widgets.Composite parent) {
-		Composite top = createTopLevelComposite(parent);
-		setControl(top);
-		setupInfopop(top);
-		setDefaults();
-		addListeners();
-		initializeValidationProperties();
-	}
-
-	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));
-		}
-	}
-
-	public boolean canFlipToNextPage() {
-		// TODO why is that last getNextPage() call here???
-		return isPageComplete() && ((null != wizard && wizard.getPageGroupManager().hasNextPage() || null != getNextPage()));
-	}
-
-	/*
-	 * (non-Javadoc) Method declared on IWizardPage.
-	 */
-	public void setWizard(IWizard newWizard) {
-		super.setWizard(newWizard);
-		if (newWizard instanceof DataModelWizard) {
-			wizard = (DataModelWizard) newWizard;
-		}
-	}
-
-	public IWizardPage getPreviousPage() {
-		return previousPage;
-	}
-
-	public void setPreviousPage(IWizardPage page) {
-		super.setPreviousPage(page);
-		previousPage = page;
-	}
-
-	/**
-	 * 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() {
-	}
-
-	/**
-	 * The page is being made current and visible. Subclasses may extend.
-	 */
-	protected void enter() {
-		try {
-			// Check to see if we are moving back one page.
-			if (null != wizard && wizard.getPreviousPage(wizard.getPageGroupManager().getCurrentPage()) == this) {
-				wizard.getPageGroupManager().moveBackOnePage();
-			}
-
-			validatePage(showValidationErrorsOnEnter());
-		} finally {
-			isFirstTimeToPage = false;
-		}
-	}
-
-	/**
-	 * The default behavior is to return true unless it is the first time entering this page in
-	 * which case we check to see if there is a previous page and return true if there is not.
-	 * Subclasses should override if they do not want this default behavior.
-	 */
-	protected boolean showValidationErrorsOnEnter() {
-		return !isFirstTimeToPage();
-	}
-
-	/**
-	 * The default behavior is to return true unless it is the first time entering this page in
-	 * which case we check to see if there is a previous page and return true if there is not.
-	 * Subclasses should override if they do not want this default behavior.
-	 * 
-	 * @deprecated - use showValidatoinErrorsOnEnter instead
-	 */
-	protected boolean shouldValidateOnEnter() {
-		return showValidationErrorsOnEnter();
-	}
-
-	/**
-	 * 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);
-	}
-
-	/**
-	 * The <code>DialogPage</code> implementation of this <code>IDialogPage</code> method sets
-	 * the control to the given visibility state. Subclasses may extend.
-	 */
-
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		if (visible) {
-			enter();
-		} else
-			exit();
-	}
-
-	/**
-	 * 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() {
-		validatePage(true);
-	}
-
-	protected void validatePage(boolean showMessage) {
-		if (!isValidating) {
-			isValidating = true;
-			try {
-				validateControlsBase();
-				updateControls();
-				if (showMessage)
-					setErrorMessage();
-				setPageComplete(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() {
-	}
-
-	/**
-	 * Gets the isFirstTimeToPage.
-	 * 
-	 * @return Returns a boolean
-	 */
-	protected boolean isFirstTimeToPage() {
-		return isFirstTimeToPage;
-	}
-
-	// protected void setJavaStatusMessage(IStatus javaStatus, Integer statusKey, String message) {
-	// if (javaStatus.getSeverity() == IStatus.WARNING)
-	// setWarningStatus(statusKey, message);
-	// else
-	// setErrorStatus(statusKey, message);
-	// }
-
-	/**
-	 * @param b
-	 */
-	public void setFirstTimeToPage(boolean b) {
-		isFirstTimeToPage = b;
-	}
-
-	private boolean gotDataModelWizard = false;
-	private DataModelWizard dataModelWizard = null;
-	protected DataModelWizard getDataModelWizard(){
-		if(!gotDataModelWizard){
-			gotDataModelWizard = true;
-			IWizard wizard = getWizard();
-			if(wizard instanceof DataModelWizard){
-				dataModelWizard = (DataModelWizard)wizard;
-			}
-		}
-		return dataModelWizard;
-	}
-	
-	
-	/*
-	 * 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) {
-		DataModelWizard w = getDataModelWizard();
-		if(w == null || !w.isExecuting()){
-			String propertyName = event.getPropertyName();
-			if (validationPropertyNames != null && (event.getFlag() == DataModelEvent.VALUE_CHG || (!isPageComplete() && event.getFlag() == DataModelEvent.VALID_VALUES_CHG))) {
-				for (int i = 0; i < validationPropertyNames.length; i++) {
-					if (validationPropertyNames[i].equals(propertyName)) {
-						validatePage(showValidationErrorsOnEnter());
-						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;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java
deleted file mode 100644
index 8f2f412..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroup.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import java.util.List;
-
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public interface IDMPageGroup 
-{
-  public String getWizardID();
-  
-  public String getPageGroupID();
-  
-  public String getPageGroupInsertionID();
-  
-  public boolean getAllowsExtendedPages();
-  
-  public String getRequiredDataOperationToRun();
-  
-  public List getPages(IDataModel dataModel);
-  
-  public IDMPageHandler getPageHandler( IDataModel dataModel );
-  
-  public IDMPageGroupHandler getPageGroupHandler( IDataModel dataModel );
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroupHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroupHandler.java
deleted file mode 100644
index c170e5c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageGroupHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-/**
- * 
- * The wizard framework allows page groups to be inserted after other page group.
- * If more than one page group inserts itself after a particular page group it may
- * not be deterministic which page group should follow each other.  This class
- * allows a particular page group to determine the order in which subsequent page
- * groups should be ordered.
- * 
- * For example: A page group T has three page groups X, Y, and Z that have registered
- *              via the wizardPageGroup extension point to follow it.
- *              The wizard framework will call getNextGroup with:
- *              
- *                 T.getNextGroup( null, { "X", "Y", "Z" } )
- *                 
- *              This method should return either "X", "Y", "Z", or null if no page group
- *              should follow.  If "Y" was returned then a subequent call
- *              will be made by the framework with:
- *              
- *                 T.getNextGroup( "Y", { "X", "Y", "Z" } )
- *                 
- *              Again this method should return either "X", "Y", "Z", or null if no page
- *              group should follow this page group "Y".
- *              
- * Note: any page group can have a page group handler associated with it so this method
- *       call is recursive in nature.  For example: the page group Y might have page
- *       groups Y1, Y2, and Y3 following it.  This would result in the following calls:
- *       
- *                 T.getNextGroup( null, { "X", "Y", "Z" } )  // "Y" is selected using Ts handler.
- *                 Y.getNextGroup( null, { "Y1", "Y2", "Y3" } ) // "Y1" is selected using Ys handler.
- *                 
- *                 For this example Y1 has no page groups following it.
- *                 
- *                 T.getNextGroup( "Y", { "X", "Y", "Z" } )  // null is selected using Ts handler.
- *                 
- *                 For this example, the T handler decided that no page group followed Y not even X or Z.
- *
- */
-public interface IDMPageGroupHandler 
-{
-  /**
-   * 
-   * @param currentPageGroupID the current page group ID.  This value will be null the first time 
-   *                           this method is called.
-   * @param pageGroupIDs a list of page group IDs that follow the page group for this handler.
-   * @return returns the page group id that should follow currentPageGroupID, or it
-   * should return null if no page group follows currentPageGroupID.
-   * 
-   */
-  public String getNextPageGroup( String currentPageGroupID, String[] pageGroupIDs );
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageHandler.java
deleted file mode 100644
index a4419a3..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/IDMPageHandler.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-/**
- * This interface is EXPERIMENTAL and is subject to substantial changes.
- */
-public interface IDMPageHandler {
-
-	/**
-	 * return this as the page name if the expectedNextPageName or expectedPreviousPageName should
-	 * be skipped
-	 */
-	public static final String SKIP_PAGE = "IDMExtendedPageHandler.SKIP_PAGE"; //$NON-NLS-1$
-
-	/**
-	 * prefix this string with the name of the page which occurs before the page that should be
-	 * returned. E.G. suppose your page contributions know about pages A, B and C, and you want the
-	 * to skip pages B and C, when going to the next page from A. To do this, return PAGE_AFTER+C.
-	 * The framework will then ask the wizard for the page that normally comes after page C.
-	 * PAGE_BEFORE works similarly.
-	 */
-	public static final String PAGE_AFTER = "IDMExtendedPageHandler.PAGE_AFTER"; //$NON-NLS-1$
-
-	/**
-	 * same as PAGE_AFTER, except for returing the page before.
-	 */
-	public static final String PAGE_BEFORE = "IDMExtendedPageHandler.PAGE_BEFORE"; //$NON-NLS-1$
-
-	/**
-	 * Return the name of the page that should be next
-	 * 
-	 * @param currentPageName
-	 *            the page the wizard is currently on
-	 * @param expectedNextPageName
-	 *            the page that would normally be next
-	 * @return
-	 */
-	public String getNextPage(String currentPageName, String expectedNextPageName);
-
-	/**
-	 * Return the name of the page that should be previous
-	 * 
-	 * @param currentPageName
-	 *            the page the wizard is currently on
-	 * @param expectedNextPageName
-	 *            the page that would normally be previous
-	 * @return
-	 */
-	public String getPreviousPage(String currentPageName, String expectedPreviousPageName);
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java
deleted file mode 100644
index 0e936ef..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/datamodel/ui/SimplePageGroup.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel.ui;
-
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public class SimplePageGroup implements AddablePageGroup {
-	private String groupID;
-	private String wizardID;
-	private boolean allowExtendedPages;
-	private String requiredDataOperation;
-	private Set    dataModelIDs;
-
-	private IDMPageHandler pageHandler;
-	private IDMPageGroupHandler pageGroupHandler;
-	private Vector pages;
-
-	public SimplePageGroup(String groupID, String wizardID, boolean allowExtendedPages, String requireDataOperation) {
-		this.groupID = groupID;
-		this.wizardID = wizardID;
-		this.allowExtendedPages = allowExtendedPages;
-		this.requiredDataOperation = requireDataOperation;
-		pages = new Vector();
-	}
-
-	public SimplePageGroup(String groupID, String wizardID) {
-		this(groupID, wizardID, true, null);
-	}
-
-	public void addPage(IWizardPage page) {
-		pages.add(page);
-	}
-
-	public void addPages(IWizardPage[] newPages) {
-		for (int index = 0; index < newPages.length; index++) {
-			pages.add(newPages[index]);
-		}
-	}
-
-	public boolean getAllowsExtendedPages() {
-		return allowExtendedPages;
-	}
-
-	public void setPageGroupHandler(IDMPageGroupHandler handler) {
-		pageGroupHandler = handler;
-	}
-
-	public IDMPageGroupHandler getPageGroupHandler(IDataModel dataModel) {
-		return pageGroupHandler;
-	}
-
-	public void setPageHandler(IDMPageHandler handler) {
-		pageHandler = handler;
-	}
-
-	public IDMPageHandler getPageHandler(IDataModel dataModel) {
-		return pageHandler;
-	}
-
-	public List getPages(IDataModel dataModel) {
-		return pages;
-	}
-	
-	public IWizardPage[] getExtendedPages(IDataModel dataModel) {
-		return (IWizardPage[]) pages.toArray(new IWizardPage[0]);
-	}
-
-	public String getPageGroupID() {
-		return groupID;
-	}
-
-	public String getPageGroupInsertionID() {
-		return null;
-	}
-
-	public String getRequiredDataOperationToRun() {
-		return requiredDataOperation;
-	}
-
-	public String getWizardID() {
-		return wizardID;
-	}
-
-	public Set getDataModelIDs() {
-		return dataModelIDs;
-	}
-
-	public void setDataModelIDs(Set dataModelIDs) {
-		this.dataModelIDs = dataModelIDs;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/ErrorDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/ErrorDialog.java
deleted file mode 100644
index 620d136..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/ErrorDialog.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class ErrorDialog extends MessageDialog
-{
-
-  /**
-   * Creates an error dialog. Note that the dialog will have no visual
-   * representation (no widgets) until it is told to open.
-   * <p>
-   * Normally one should use <code>openError</code> to create and open one of
-   * these. This constructor is useful only if the error object being displayed
-   * contains child items <it>and</it> you need to specify a mask which will
-   * be used to filter the displaying of these children.
-   * </p>
-   * 
-   * @param parentShell
-   *            the shell under which to create this dialog
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   */
-  public ErrorDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    super(parentShell, dialogTitle, message, status, displayMask);
-  }
-
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create OK and Details buttons
-    createButton(
-      parent,
-      StatusDialogConstants.OK_ID,
-      IDialogConstants.OK_LABEL,
-      true);
-    if (status.isMultiStatus() || status.getException() != null )
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-  }
-
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_ERROR);
-  }
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/InfoDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/InfoDialog.java
deleted file mode 100644
index cfc565a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/InfoDialog.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class InfoDialog extends MessageDialog
-{
-  /**
-   * Creates an error dialog. Note that the dialog will have no visual
-   * representation (no widgets) until it is told to open.
-   * <p>
-   * Normally one should use <code>openError</code> to create and open one of
-   * these. This constructor is useful only if the error object being displayed
-   * contains child items <it>and</it> you need to specify a mask which will
-   * be used to filter the displaying of these children.
-   * </p>
-   * 
-   * @param parentShell
-   *            the shell under which to create this dialog
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   */
-  public InfoDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    super(parentShell, dialogTitle, message, status, displayMask);
-  }
-
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create OK and Details buttons
-    createButton(
-      parent,
-      StatusDialogConstants.OK_ID,
-      IDialogConstants.OK_LABEL,
-      true);
-    if (status.isMultiStatus() )
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-  }
-
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_INFORMATION);
-  }
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/MessageDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/MessageDialog.java
deleted file mode 100644
index a1915e5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/MessageDialog.java
+++ /dev/null
@@ -1,636 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import java.io.BufferedReader;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Vector;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.common.environment.Choice;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class MessageDialog extends Dialog
-{
-  protected Composite parent;
-
-  /**
-   * Reserve room for this many list items.
-   */
-  protected static final int LIST_ITEM_COUNT = 7;
-
-  /**
-   * The Details button.
-   */
-  protected Button detailsButton;
-
-  /**
-   * The title of the dialog.
-   */
-  protected String title;
-
-  /**
-   * The message to display.
-   */
-  protected String message;
-
-  /**
-   * The SWT list control that displays the error details.
-   */
-  protected List list;
-  protected Text details;
-
-  /**
-   * Indicates whether the error details viewer is currently created.
-   */
-  protected boolean listCreated = false;
-  protected boolean detailsCreated = false;
-
-  /**
-   * Filter mask for determining which status items to display.
-   */
-  protected int displayMask = 0xFFFF;
-
-  /**
-   * The main status object.
-   */
-  protected IStatus status;
-  
-  private Point savedSize = null;
-
-  /**
-   * List of the main error object's detailed errors (element type: <code>Status</code>).
-   */
-  protected java.util.List statusList;
-  /**
-   * Creates an error dialog. Note that the dialog will have no visual
-   * representation (no widgets) until it is told to open.
-   * <p>
-   * Normally one should use <code>openError</code> to create and open one of
-   * these. This constructor is useful only if the error object being displayed
-   * contains child items <it>and</it> you need to specify a mask which will
-   * be used to filter the displaying of these children.
-   * </p>
-   * 
-   * @param parentShell
-   *            the shell under which to create this dialog
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   */
-  public MessageDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    super(parentShell);
-      this.title = dialogTitle == null ? JFaceResources.getString("Problem_Occurred") : //$NON-NLS-1$
-  dialogTitle;
-    this.message = message == null ? status.getMessage() : JFaceResources.format("Reason", new Object[] { message, status.getMessage()}); //$NON-NLS-1$
-    this.status = status;
-    statusList = Arrays.asList(status.getChildren());
-    this.displayMask = displayMask;
-    setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
-  }
-  /*
-   * (non-Javadoc) Method declared on Dialog. Handles the pressing of the Ok or
-   * Details button in this dialog. If the Ok button was pressed then close
-   * this dialog. If the Details button was pressed then toggle the displaying
-   * of the error details area. Note that the Details button will only be
-   * visible if the error being displayed specifies child details.
-   */
-  protected void buttonPressed(int id)
-  {
-    if (id == StatusDialogConstants.DETAILS_ID)
-    { // was the details button pressed?
-      toggleDetailsArea();
-    }
-    else
-    {
-      super.buttonPressed(id);
-    }
-  }
-  /*
-   * (non-Javadoc) Method declared in Window.
-   */
-  protected void configureShell(Shell shell)
-  {
-    super.configureShell(shell);
-    shell.setText(title);
-  }
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create OK and Details buttons
-    createButton(
-      parent,
-      StatusDialogConstants.OK_ID,
-      IDialogConstants.OK_LABEL,
-      true);
-    if (status.isMultiStatus() || status.getException() != null )
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-    
-    parent.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ));
-  }
-
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_INFORMATION);
-  }
-
-  /*
-   * (non-Javadoc) Method declared on Dialog. Creates and returns the contents
-   * of the upper part of the dialog (above the button bar).
-   */
-  protected Control createDialogArea(Composite parent)
-  {
-    this.parent = parent;
-
-    // create composite
-    Composite composite = (Composite) super.createDialogArea(parent);
-    Composite imageAndLabel = new Composite(composite, SWT.NONE);
-    GridLayout gl = new GridLayout();
-    gl.numColumns = 2;
-    imageAndLabel.setLayout(gl);
-    composite.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ));
-    
-    // create image
-    Image image = getDialogImage();
-    if (image != null)
-    {
-      Label label = new Label(imageAndLabel, 0);
-      image.setBackground(label.getBackground());
-      label.setImage(image);
-      label.setLayoutData(
-        new GridData(
-          GridData.HORIZONTAL_ALIGN_CENTER
-            | GridData.VERTICAL_ALIGN_BEGINNING));
-    }
-
-    // create message
-    if (message != null)
-    {
-      Text text = new Text(imageAndLabel, SWT.READ_ONLY|SWT.WRAP);
-      text.setText(message);
-      GridData data =
-        new GridData(
-          GridData.GRAB_HORIZONTAL
-            | GridData.GRAB_VERTICAL
-            | GridData.HORIZONTAL_ALIGN_FILL
-            | GridData.VERTICAL_ALIGN_CENTER);
-      data.widthHint =
-        convertHorizontalDLUsToPixels(
-          IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
-     
-      text.setLayoutData(data);
-      text.setFont(parent.getFont());
-    }
-
-    return composite;
-  }
-
-  protected List createDropDownList(Composite parent)
-  {
-    // create the list
-    list = new List(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-
-    // fill the list
-    populateList(list);
-
-    GridData data =
-      new GridData(
-        GridData.HORIZONTAL_ALIGN_FILL
-          | GridData.GRAB_HORIZONTAL
-          | GridData.VERTICAL_ALIGN_FILL
-          | GridData.GRAB_VERTICAL);
-    data.heightHint = list.getItemHeight() * LIST_ITEM_COUNT;
-    list.setLayoutData(data);
-    listCreated = true;
-    return list;
-  }
-  protected Text createDropDownDetails(Composite parent)
-  {
-    details = new Text(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
-    //details.setEditable(false);
-    Color color = new Color(parent.getShell().getDisplay(), 255, 255, 255);
-    details.setBackground(color);
-    populateDetails(details, status, 0);
-    GridData data =
-      new GridData(
-        GridData.HORIZONTAL_ALIGN_FILL
-          | GridData.GRAB_HORIZONTAL
-          | GridData.VERTICAL_ALIGN_FILL
-          | GridData.GRAB_VERTICAL);
-    details.setLayoutData(data);
-    details.setSelection(0);
-    detailsCreated = true;
-    return details;
-  }
-  /*
-   * (non-Javadoc) Method declared on Window.
-   */
-  /**
-   * Extends <code>Window.open()</code>. Opens an error dialog to display
-   * the error. If you specified a mask to filter the displaying of these
-   * children, the error dialog will only be displayed if there is at least one
-   * child status matching the mask.
-   */
-  public int open()
-  {
-    if (shouldDisplay(status, displayMask))
-    {
-      return super.open();
-    }
-    return 0;
-  }
-  /**
-   * This essentially does the work of a factory Opens an error dialog to
-   * display the given error. Use this method if the error object being
-   * displayed does not contain child items, or if you wish to display all such
-   * items without filtering.
-   * 
-   * @param parent
-   *            the parent shell of the dialog, or <code>null</code> if none
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @return the code of the button that was pressed that resulted in this
-   *         dialog closing. This will be <code>Dialog.OK</code> if the OK
-   *         button was pressed, or <code>Dialog.CANCEL</code> if this
-   *         dialog's close window decoration or the ESC key was used.
-   */
-  public static int openMessage(
-    Shell parent,
-    String dialogTitle,
-    String message,
-    IStatus status)
-  {
-
-    switch (status.getSeverity())
-    {
-      case IStatus.INFO :
-        return openInfo(
-          parent,
-          dialogTitle,
-          message,
-          status,
-          IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR);
-      case IStatus.WARNING :
-        return openWarning(
-          parent,
-          dialogTitle,
-          message,
-          status,
-          IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR);
-      default :
-        return openError(
-          parent,
-          dialogTitle,
-          message,
-          status,
-          IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR);
-    }
-
-  }
-
-  public static int openMessage(
-    Shell parent,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    Choice[] options)
-  {
-
-    return openOptions(
-      parent,
-      dialogTitle,
-      message,
-      status,
-      IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR,
-      options);
-  }
-
-  /**
-   * Opens an error dialog to display the given error. Use this method if the
-   * error object being displayed contains child items <it>and</it> you wish
-   * to specify a mask which will be used to filter the displaying of these
-   * children. The error dialog will only be displayed if there is at least one
-   * child status matching the mask.
-   * 
-   * @param parentShell
-   *            the parent shell of the dialog, or <code>null</code> if none
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   * @return the code of the button that was pressed that resulted in this
-   *         dialog closing. This will be <code>Dialog.OK</code> if the OK
-   *         button was pressed, or <code>Dialog.CANCEL</code> if this
-   *         dialog's close window decoration or the ESC key was used.
-   */
-  public static int openError(
-    Shell parentShell,
-    String title,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    ErrorDialog dialog =
-      new ErrorDialog(parentShell, title, message, status, displayMask);
-    return dialog.open();
-  }
-
-  public static int openInfo(
-    Shell parentShell,
-    String title,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    InfoDialog dialog =
-      new InfoDialog(parentShell, title, message, status, displayMask);
-    return dialog.open();
-  }
-
-  public static int openWarning(
-    Shell parentShell,
-    String title,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    WarningDialog dialog =
-      new WarningDialog(parentShell, title, message, status, displayMask);
-    return dialog.open();
-  }
-
-  public static int openOptions(
-    Shell parentShell,
-    String title,
-    String message,
-    IStatus status,
-    int displayMask,
-    Choice[] options)
-  {
-    OptionsDialog dialog =
-      new OptionsDialog(
-        parentShell,
-        title,
-        message,
-        status,
-        displayMask,
-        options);
-    dialog.open();
-    return dialog.getReturnCode();
-  }
-
-  /**
-   * Populates the list using this error dialog's status object. This walks the
-   * child stati of the status object and displays them in a list. The format
-   * for each entry is status_path : status_message If the status's path was
-   * null then it (and the colon) are omitted.
-   */
-  private void populateList(List list)
-  {
-    Iterator enumeration = statusList.iterator();
-    while (enumeration.hasNext())
-    {
-      IStatus childStatus = (IStatus) enumeration.next();
-      populateList(list, childStatus, 0);
-    }
-  }
-  private void populateList(List list, IStatus status, int nesting)
-  {
-    if (!status.matches(displayMask))
-    {
-      return;
-    }
-    StringBuffer sb = new StringBuffer();
-    for (int i = 0; i < nesting; i++)
-    {
-      sb.append("  "); //$NON-NLS-1$
-    }
-    sb.append(status.getMessage());
-    list.add(sb.toString());
-    IStatus[] children = status.getChildren();
-    for (int i = 0; i < children.length; i++)
-    {
-      populateList(list, children[i], nesting + 1);
-    }
-  }
-  private void populateDetails(Text text, IStatus status, int nesting)
-  {
-    if (!status.matches(displayMask))
-    {
-      return;
-    }
-        
-    String    tabChars    = repeat( ' ', nesting * 2 );
-    String    messageLine = tabChars + status.getMessage() + System.getProperty("line.separator"); //$NON-NLS-1$
-    Throwable except      = status.getException();
-    
-    text.append( messageLine );
-    
-    if( except != null )
-    {
-      String[] trace = getStackTrace( except );
-      
-      for( int index = 0; index < trace.length; index++ )
-      {
-        text.append( tabChars + "    " + trace[index] + System.getProperty("line.separator") ); //$NON-NLS-1$ //$NON-NLS-2$
-      }
-    }
-    
-    IStatus[] children = status.getChildren();
-    for (int i = 0; i < children.length; i++)
-    {
-      populateDetails(text, children[i], nesting + 1);
-    }
-  }
-  /**
-   * Returns whether the given status object should be displayed.
-   * 
-   * @param status
-   *            a status object
-   * @param mask
-   *            a mask as per <code>Status.matches</code>
-   * @return <code>true</code> if the given status should be displayed, and
-   *         <code>false</code> otherwise
-   */
-  protected static boolean shouldDisplay(IStatus status, int mask)
-  {
-    IStatus[] children = status.getChildren();
-    if (children == null || children.length == 0)
-    {
-      return status.matches(mask);
-    }
-    for (int i = 0; i < children.length; i++)
-    {
-      if (children[i].matches(mask))
-        return true;
-    }
-    return false;
-  }
-  /**
-   * Toggles the unfolding of the details area. This is triggered by the user
-   * pressing the details button.
-   */
-  private void toggleDetailsArea()
-  {
-    Point windowSize = getShell().getSize();
-    int   newHeight  = -1;
-    
-    if (detailsCreated)
-    {
-      details.dispose();
-      detailsCreated = false;
-      detailsButton.setText(IDialogConstants.SHOW_DETAILS_LABEL);
-      
-      // Without the following computeSize call the setSize call below throws an array out of bounds exception.
-      // Very weird.
-      getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      
-      newHeight = savedSize.y;
-    }
-    else
-    {
-      if( savedSize == null ) savedSize = windowSize;
-        
-      details = createDropDownDetails((Composite) getContents());
-      detailsButton.setText(IDialogConstants.HIDE_DETAILS_LABEL);
-      newHeight = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
-    }
-
-
-    newHeight = newHeight > 400 ? 400 : newHeight;
-    
-    getShell().setSize( new Point(windowSize.x, newHeight) );
-  }
-  
-  private String[] getStackTrace( Throwable exc )
-  {
-    Vector       lines        = new Vector();
-    StringWriter stringWriter = new StringWriter();
-    PrintWriter  printWriter  = new PrintWriter( stringWriter );
-    
-    exc.printStackTrace( printWriter );
-    
-    try
-    {
-      printWriter.close();
-      stringWriter.close();
-    }
-    catch( Exception nestedExc )
-    {
-      return new String[0];
-    }
-    
-    StringReader stringReader = new StringReader( stringWriter.toString() );
-    BufferedReader reader     = new BufferedReader( stringReader );
-    String         line       = null;
-    
-    try
-    {
-      line = reader.readLine();
-    
-      while( line != null )
-      {
-        lines.add( line.trim() );
-        line = reader.readLine();
-      }
-    }
-    catch( Exception nestedExc )
-    {
-      return new String[0];
-    }
-    
-    return (String[])lines.toArray( new String[0] );
-  }
-  
-  private String repeat( char the_char, int count )
-  {
-    StringBuffer buf = new StringBuffer( count );
-
-    for( int index = 0; index < count; index++ )
-    {
-      buf.append( the_char );
-    }
-
-    return buf.toString();
-  }
-  
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/OptionsDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/OptionsDialog.java
deleted file mode 100644
index 21869b2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/OptionsDialog.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.common.environment.Choice;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class OptionsDialog extends MessageDialog
-{
-  private Choice[] choices;
-  private int returnCode_;
-
-  public OptionsDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask,
-    Choice[] choices)
-  {
-    super(parentShell, dialogTitle, message, status, displayMask);
-    this.choices = choices;
-  }
-
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create a button for each options
-    for (int i = 0; i < choices.length; i++)
-    {
-      createButton(parent, choices[i].getShortcut(), choices[i].getLabel(), true);
-    }
-    if (status.isMultiStatus() )
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-  }
-
-  protected void buttonPressed(int id)
-  {
-    if (id == StatusDialogConstants.DETAILS_ID)
-      // was the Details button pressed?
-      super.buttonPressed(id);
-    else
-    {
-      setReturnCode(id);
-      close();
-    }
-  }
-
-  protected void setReturnCode(int id)
-  {
-    returnCode_ = id;
-  }
-
-  public int getReturnCode()
-  {
-    return returnCode_;
-  }
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    switch (status.getSeverity())
-    {
-      case IStatus.INFO :
-        return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_INFORMATION);
-      case IStatus.WARNING :
-        return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_WARNING);
-      default :
-        return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_ERROR);
-    }
-  }
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/StatusDialogConstants.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/StatusDialogConstants.java
deleted file mode 100644
index e3ca36b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/StatusDialogConstants.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-/**
-* Constants for status dialogs
-*/
-public interface StatusDialogConstants {
-
-  /*
-  * Button ID for the "Yes" button
-  */
-  public static final int YES_ID = 2;
-  /*
-  * Button ID for the "Yes to all" button
-  */
-  public static final int YES_TO_ALL_ID = 4;
-  /*
-  * Button ID for the "Cancel" button
-  */
-  public static final int CANCEL_ID = 1;
-  /*
-  * Button ID for the "OK" button
-  */
-  public static final int OK_ID = 0;
-  /*
-  * Button ID for the "Details" button
-  */
-  public static final int DETAILS_ID = 13;
-
-  /*
-  * Button label for the "Yes" button
-  */
- // public static final String YES_LABEL = EnvironmentPlugin.getInstance().getMessage("%STATUS_DIALOG_YES_LABEL");
-  /*
-  * Button label for the "Yes to all" button
-  */
- // public static final String YES_TO_ALL_LABEL = EnvironmentPlugin.getInstance().getMessage("%STATUS_DIALOG_YES_TO_ALL_LABEL");
-  /*
-  * Button label for the "Cancel" button
-  */
- // public static final String CANCEL_LABEL = EnvironmentPlugin.getInstance().getMessage("%STATUS_DIALOG_CANCEL_LABEL");
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/WarningDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/WarningDialog.java
deleted file mode 100644
index 6c66d82..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/dialog/ui/WarningDialog.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.dialog.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-
-
-/**
- * A dialog to display one or more errors to the user, as contained in an
- * <code>Status</code> object. If an error contains additional detailed
- * information then a Details button is automatically supplied, which shows or
- * hides an error details viewer when pressed by the user.
- *  
- */
-public class WarningDialog extends MessageDialog
-{
-  /**
-   * Creates an error dialog. Note that the dialog will have no visual
-   * representation (no widgets) until it is told to open.
-   * <p>
-   * Normally one should use <code>openError</code> to create and open one of
-   * these. This constructor is useful only if the error object being displayed
-   * contains child items <it>and</it> you need to specify a mask which will
-   * be used to filter the displaying of these children.
-   * </p>
-   * 
-   * @param parentShell
-   *            the shell under which to create this dialog
-   * @param dialogTitle
-   *            the title to use for this dialog, or <code>null</code> to
-   *            indicate that the default title should be used
-   * @param message
-   *            the message to show in this dialog, or <code>null</code> to
-   *            indicate that the error's message should be shown as the
-   *            primary message
-   * @param status
-   *            the error to show to the user
-   * @param displayMask
-   *            the mask to use to filter the displaying of child items, as per
-   *            <code>Status.matches</code>
-   */
-  public WarningDialog(
-    Shell parentShell,
-    String dialogTitle,
-    String message,
-    IStatus status,
-    int displayMask)
-  {
-    super(parentShell, dialogTitle, message, status, displayMask);
-  }
-
-  /*
-   * (non-Javadoc) This should also be overwritten Method declared on Dialog.
-   */
-  protected void createButtonsForButtonBar(Composite parent)
-  {
-    // create OK, Cancel and Details buttons
-    createButton(
-      parent,
-      StatusDialogConstants.OK_ID,
-      IDialogConstants.OK_LABEL,
-      true);
-    createButton(
-      parent,
-      StatusDialogConstants.CANCEL_ID,
-      IDialogConstants.CANCEL_LABEL,
-      false);
-    if (status.isMultiStatus())
-    {
-      detailsButton =
-        createButton(
-          parent,
-          StatusDialogConstants.DETAILS_ID,
-          IDialogConstants.SHOW_DETAILS_LABEL,
-          false);
-    }
-  }
-
-  /*
-   * This is one of the few methods that needs to be overwritten by the
-   * subclasses. The image names can be found in the Dialog class
-   */
-  protected Image getDialogImage()
-  {
-    // create image
-    return PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_WARNING);
-  }
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseEnvironment.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseEnvironment.java
deleted file mode 100644
index f9562a9..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseEnvironment.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.eclipse.ui;
-
-import org.eclipse.wst.common.environment.EnvironmentService;
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.environment.ILog;
-import org.eclipse.wst.common.environment.IStatusHandler;
-import org.eclipse.wst.common.environment.uri.IURIFactory;
-import org.eclipse.wst.common.environment.uri.IURIScheme;
-import org.eclipse.wst.common.environment.uri.SimpleURIFactory;
-
-
-/**
- * This class implements an IEnvironment class for the Eclipse IEnvironment.
- * This IEnvironment currently supports the "platform" protocol and the "file"
- * protocol.
- *
- */
-public class EclipseEnvironment implements IEnvironment
-{
-  private SimpleURIFactory uriFactory_      = null;
-  private IStatusHandler    statusHandler_   = null;
-  private ILog              logger_          = null;
-  
-  public EclipseEnvironment()
-  {
-    this( new EclipseStatusHandler() );  
-  }
-  
-  public EclipseEnvironment( IStatusHandler   statusHandler )
-  {
-    IURIScheme eclipseScheme = EnvironmentService.getEclipseScheme();
-    IURIScheme fileScheme    = EnvironmentService.getFileScheme();
-    
-    uriFactory_      = new SimpleURIFactory();
-    statusHandler_   = statusHandler;
-    
-    uriFactory_.registerScheme( "platform", eclipseScheme ); //$NON-NLS-1$
-    uriFactory_.registerScheme( "file", fileScheme ); //$NON-NLS-1$
-  }
-  
-  /**
-   * @see org.eclipse.wst.common.environment.IEnvironment#getLog()
-   */
-  public ILog getLog()
-  {
-	  if( logger_ == null )
-    {  
-      logger_ = EnvironmentService.getEclipseLog(); 
-    };
-	
-    return logger_;
-  }
-   
-  /**
-   * @see org.eclipse.wst.common.environment.IEnvironment#getStatusHandler()
-   */
-  public IStatusHandler getStatusHandler()
-  {
-    return statusHandler_;
-  }
-
-  /** (non-Javadoc)
-   * @see org.eclipse.wst.common.environment.IEnvironment#getURIFactory()
-   */
-  public IURIFactory getURIFactory()
-  {
-    return uriFactory_;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseStatusHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseStatusHandler.java
deleted file mode 100644
index a8dc82e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/EclipseStatusHandler.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.eclipse.ui;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.common.environment.Choice;
-import org.eclipse.wst.common.environment.StatusException;
-import org.eclipse.wst.common.environment.IStatusHandler;
-import org.eclipse.wst.common.frameworks.internal.dialog.ui.MessageDialog;
-import org.eclipse.wst.common.frameworks.internal.dialog.ui.StatusDialogConstants;
-
-
-/**
- * This is the Eclipse UI version of the IStatusHandler
- */
-public class EclipseStatusHandler implements IStatusHandler
-{
-  private Shell        shell_;
-  
-  public EclipseStatusHandler()
-  {
-    this( new Shell() );
-  }
-
-  public EclipseStatusHandler(Shell shell)
-  {
-    shell_ = shell;
-  }
-  
-  /**
-   * @see org.eclipse.env.common.IStatusHandler#report(org.eclipse.env.common.Status, org.eclipse.env.common.Choice[])
-   */
-  public Choice report(IStatus status, Choice[] choices) 
-  {
-    int result =
-    MessageDialog.openMessage(
-        shell_,
-        Messages.TITLE_WARNING,
-				null,
-				status,
-				choices);
-    for (int i = 0; i < choices.length; i++)
-     {
-      if (choices[i].getShortcut() == result)
-        return choices[i];
-    }
-    
-    return null;
-  }
-
-  /**
-   * @see org.eclipse.env.common.IStatusHandler#report(org.eclipse.env.common.Status)
-   */
-  public void report(IStatus status) throws StatusException
-  {
-    boolean userOk = false;
-    
-    switch (status.getSeverity())
-    {
-      // an error has been reported and we need to stop executing the comming
-      // commands
-      case Status.ERROR :
-      {
-        userOk = reportErrorStatus(status);
-        break;
-      }
-      case Status.WARNING :
-      {
-        userOk = reportWarning(status);
-        break;
-      }     
-      case Status.INFO :
-      {
-        userOk = true;
-        reportInfo(status);
-        break;
-      }
-    }
-    
-    if( !userOk ) throw new StatusException( status );
-  }
-  
-  private boolean reportWarning(IStatus status)
-  {
-    int userResponse =
-      MessageDialog.openMessage(
-        shell_,
-        Messages.TITLE_WARNING,
-        null,
-        status);
-    return (userResponse == StatusDialogConstants.OK_ID);
-  }
-
-  private boolean reportErrorStatus(IStatus status)
-  {
-    MessageDialog.openMessage(
-      shell_,
-      Messages.TITLE_ERROR,
-      null,
-      status);
-    return false;
-  }
-  
-  /**
-   * @see org.eclipse.wst.common.environment.IStatusHandler#reportError(org.eclipse.core.runtime.IStatus)
-   */
-  public void reportError(IStatus status)
-  {
-    reportErrorStatus( status );
-  }
-  
-  /**
-   * @see org.eclipse.wst.common.environment.IStatusHandler#reportInfo(org.eclipse.core.runtime.IStatus)
-   */
-  public void reportInfo(IStatus status)
-  {
-    MessageDialog.openMessage(
-        shell_,
-        Messages.TITLE_INFO,
-        null,
-        status);
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/Messages.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/Messages.java
deleted file mode 100644
index f5d1103..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/Messages.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.eclipse.ui;
-
-import org.eclipse.osgi.util.NLS;
-
-public class Messages extends NLS
-{
-  private static final String BUNDLE_NAME = "org.eclipse.wst.common.frameworks.internal.eclipse.ui.environment"; //$NON-NLS-1$
-  
-  public static String TITLE_WARNING;
-  public static String TITLE_ERROR;
-  public static String TITLE_INFO;
-  
-  static
-  {
-    NLS.initializeMessages( BUNDLE_NAME, Messages.class );
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties
deleted file mode 100644
index eefde94..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/eclipse/ui/environment.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 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
-###############################################################################
-
-TITLE_WARNING=Warning:
-TITLE_ERROR=Error:
-TITLE_INFO=Info:
-
-
-
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/CommonUIPluginConstants.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/CommonUIPluginConstants.java
deleted file mode 100644
index 60b55eb..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/CommonUIPluginConstants.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Jan 16, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-/**
- * @author blancett
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public interface CommonUIPluginConstants {
-	public static final String PLUGIN_ID = "org.eclipse.wst.common.frameworks.ui"; //$NON-NLS-1$
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardExtensionFactory.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardExtensionFactory.java
deleted file mode 100644
index b9f0cff..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardExtensionFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-
-/**
- * This interface is EXPERIMENTAL and is subject to substantial changes.
- */
-public abstract class DMWizardExtensionFactory {
-
-	public DMWizardExtensionFactory() {
-		super();
-	}
-
-	public abstract DataModelWizardPage[] createPageGroup(IDataModel dataModel, String pageGroupID);
-
-	/*
-	 * this is optional
-	 */
-	public IDMPageHandler createPageHandler(IDataModel dataModel, String pageGroupID) 
-	{
-	  return null;
-	}
-		
-	/**
-	 * This page group handler can be optionally overriden.
-	 */
-	public IDMPageGroupHandler createPageGroupHandler( IDataModel dataModel, String pageGroupID )
-	{
-	  return null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageElement.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageElement.java
deleted file mode 100644
index ac041c2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageElement.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import java.util.HashSet;
-import java.util.Set;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.AbstractRegistryDescriptor;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-import org.eclipse.wst.common.frameworks.internal.enablement.IdentifiableComparator;
-
-public class DMWizardPageElement extends AbstractRegistryDescriptor implements Comparable {
-	static final String ELEMENT_PAGE_GROUP = "wizardPageGroup"; //$NON-NLS-1$
-	static final String ATT_PAGE_ID = "pageGroupID"; //$NON-NLS-1$
-	static final String ATT_WIZARD_ID = "wizardID"; //$NON-NLS-1$
-	static final String ATT_REQUIRES_DATA_OPERATION_ID = "requiresDataOperationId"; //$NON-NLS-1$
-	static final String ATT_DATA_MODEL_IDS = "dataModelIds"; //$NON-NLS-1$
-	static final String ATT_ALLOWS_EXTENDED_PAGES_AFTER = "allowsExtendedPagesAfter"; //$NON-NLS-1$
-	static final String ATT_PAGE_INSERTION_ID = "pageGroupInsertionID"; //$NON-NLS-1$
-	static final String ELEMENT_FACTORY = "factory"; //$NON-NLS-1$
-
-	protected DMWizardPageFactoryElement wizardPageFactoryElement;
-	protected String pluginID;
-	protected String wizardID;
-	public String pageGroupID;
-	protected String wizardFactoryElement;
-	protected boolean allowsExtendedPagesAfter;
-	protected String requiresDataOperationId;
-	protected Set dataModelIDs;
-	protected String pageInsertionID;
-	private int loadOrder;
-	private static int loadOrderCounter;
-
-
-	private int type;
-
-	public DMWizardPageElement(IConfigurationElement element1) {
-		super(element1);
-		pluginID = element1.getDeclaringExtension().getNamespace();
-		wizardID = element1.getAttribute(ATT_WIZARD_ID);
-		pageGroupID = element1.getAttribute(ATT_PAGE_ID);
-		requiresDataOperationId = element1.getAttribute(ATT_REQUIRES_DATA_OPERATION_ID);
-		dataModelIDs = getDataModelIds( element1 );
-		readAllowsExtendedPageAfter(element1);
-		pageInsertionID = element1.getAttribute(ATT_PAGE_INSERTION_ID);
-		readFactory(element1);
-		validateSettings();
-		loadOrder = loadOrderCounter++;
-	}
-
-  private Set getDataModelIds(IConfigurationElement element )
-  {
-    HashSet ids    = new HashSet();
-    String  idList = element.getAttribute(ATT_DATA_MODEL_IDS);
-    
-    if( idList != null )
-    {
-      String[] dataModelIDs = idList.split( " *"); //$NON-NLS-1$
-    
-      for( int index = 0; index < dataModelIDs.length; index++ )
-      {
-        ids.add( dataModelIDs[index] );  
-      }
-    }
-    
-    return ids;
-  }
-  
-	private void validateSettings() {
-		if (wizardID == null || wizardPageFactoryElement == null) {
-			Logger.getLogger().logError("Incomplete page extension specification."); //$NON-NLS-1$
-		}
-	}
-
-
-	private void readAllowsExtendedPageAfter(IConfigurationElement element1) {
-		String allowsPageAfterValue = element1.getAttribute(ATT_ALLOWS_EXTENDED_PAGES_AFTER);
-		allowsExtendedPagesAfter = allowsPageAfterValue == null ? false : Boolean.valueOf(allowsPageAfterValue).booleanValue();
-	}
-
-	private void readFactory(IConfigurationElement element1) {
-		IConfigurationElement[] factories = element1.getChildren(ELEMENT_FACTORY);
-		if (factories != null && factories.length > 0) {
-			wizardPageFactoryElement = new DMWizardPageFactoryElement(factories[0], pageGroupID);
-		}
-	}
-
-	public IDMPageHandler createPageHandler(IDataModel dataModel) {
-		if (wizardPageFactoryElement != null)
-			return wizardPageFactoryElement.createPageHandler(dataModel);
-		return null;
-	}
-
-	public DataModelWizardPage[] createPageGroup(IDataModel dataModel) {
-		if (wizardPageFactoryElement != null)
-			return wizardPageFactoryElement.createPageGroup(dataModel);
-		return null;
-	}
-
-	public IDMPageGroupHandler createPageGroupHandler(IDataModel dataModel) {
-		return wizardPageFactoryElement == null ? null : wizardPageFactoryElement.createPageGroupHandler(dataModel);
-	}
-
-	public int compareTo(Object o) {
-		return IdentifiableComparator.getInstance().compare(this, o);
-		/*
-		 * if (o == null) return GREATER_THAN; WizardPageElement element = (WizardPageElement) o; if
-		 * (getID() == null && element.getID() == null) return compareLoadOrder(element); if
-		 * (getID() == null) return GREATER_THAN; else if (element.getID() == null) return
-		 * LESS_THAN;
-		 * 
-		 * int priority = getPriority(); int elementPriority =element.getPriority();
-		 * 
-		 * if (priority == elementPriority) return compareLoadOrder(element); if (priority <
-		 * elementPriority) return GREATER_THAN; if (priority > elementPriority) return LESS_THAN;
-		 * return EQUAL;
-		 */
-	}
-
-	/**
-	 * @return
-	 */
-	public boolean allowsExtendedPagesAfter() {
-		return allowsExtendedPagesAfter;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getPluginID() {
-		return pluginID;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getPageID() {
-		return pageGroupID;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getPageInsertionID() {
-		return pageInsertionID;
-	}
-
-	/**
-	 * @return
-	 */
-	public int getType() {
-		return type;
-	}
-
-	/**
-	 * @return
-	 */
-	public int getLoadOrder() {
-		return loadOrder;
-	}
-
-
-	/**
-	 * @return Returns the allowsExtendedPagesAfter.
-	 */
-	public boolean isAllowsExtendedPagesAfter() {
-		return allowsExtendedPagesAfter;
-	}
-
-	/**
-	 * @param allowsExtendedPagesAfter
-	 *            The allowsExtendedPagesAfter to set.
-	 */
-	public void setAllowsExtendedPagesAfter(boolean allowsExtendedPagesAfter) {
-		this.allowsExtendedPagesAfter = allowsExtendedPagesAfter;
-	}
-
-	public String getRequiresDataOperationId() {
-		return requiresDataOperationId;
-	}
-
-
-	public void setRequiresDataOperationId(String dataOperationId) {
-		requiresDataOperationId = dataOperationId;
-	}
-
-	public Set getDataModelIDs() {
-		return dataModelIDs;
-	}
-
-	public void setDataModelID(Set newDataModelIDs) {
-		dataModelIDs = newDataModelIDs;
-	}
-
-	/**
-	 * @return Returns the wizardFactoryElement.
-	 */
-	public String getWizardFactoryElement() {
-		return wizardFactoryElement;
-	}
-
-	/**
-	 * @param wizardFactoryElement
-	 *            The wizardFactoryElement to set.
-	 */
-	public void setWizardFactoryElement(String wizardFactoryElement) {
-		this.wizardFactoryElement = wizardFactoryElement;
-	}
-
-	/**
-	 * @return Returns the wizardID.
-	 */
-	public String getWizardID() {
-		return wizardID;
-	}
-
-	/**
-	 * @param wizardID
-	 *            The wizardID to set.
-	 */
-	public void setWizardID(String wizardID) {
-		this.wizardID = wizardID;
-	}
-
-	/**
-	 * @return Returns the wizardPageFactoryElement.
-	 */
-	public DMWizardPageFactoryElement getWizardPageFactoryElement() {
-		return wizardPageFactoryElement;
-	}
-
-	/**
-	 * @param wizardPageFactoryElement
-	 *            The wizardPageFactoryElement to set.
-	 */
-	public void setWizardPageFactoryElement(DMWizardPageFactoryElement wizardPageFactoryElement) {
-		this.wizardPageFactoryElement = wizardPageFactoryElement;
-	}
-
-
-	/**
-	 * @param pageID
-	 *            The pageID to set.
-	 */
-	public void setPageID(String pageID) {
-		this.pageGroupID = pageID;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.AbstractRegistryDescriptor#getID()
-	 */
-	public String getID() {
-		return getPageID();
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageExtensionManager.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageExtensionManager.java
deleted file mode 100644
index 1e633c5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageExtensionManager.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementManager;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPCommonUIResourceHandler;
-
-public class DMWizardPageExtensionManager {
-
-	public static final String ORG_ECLIPSE_UI = "org.eclipse.ui"; //$NON-NLS-1$
-
-	protected static DMWizardPageExtensionManager instance = null;
-
-	HashMap wizardPluginIDMap = null;
-
-	TreeMap wizardPageElements = null;
-
-	// private TreeSet wizardExtPageElements = null;
-	List nonSyncedPageElementList = null;
-
-	private WizardPageExtensionReader reader = null;
-
-	private DMWizardPageExtensionManager() {
-		setupWizardPluginIDMap();
-		readFromRegistry();
-		postReadFromRegistry();
-	}
-
-	private void setupWizardPluginIDMap() {
-		wizardPluginIDMap = new HashMap();
-		// get editor plugin and save it to a hash map
-		// Note: editors extension id is different from editor id
-
-		IExtensionPoint[] point = new IExtensionPoint[]{Platform.getExtensionRegistry().getExtensionPoint(ORG_ECLIPSE_UI, "exportWizards"), //$NON-NLS-1$
-					Platform.getExtensionRegistry().getExtensionPoint(ORG_ECLIPSE_UI, "importWizards"), //$NON-NLS-1$
-					Platform.getExtensionRegistry().getExtensionPoint(ORG_ECLIPSE_UI, "newWizards"), //$NON-NLS-1$
-					Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.wst.common.frameworks.ui", "extendableWizard")}; //$NON-NLS-1$ //$NON-NLS-2$
-
-		for (int x = 0; x < point.length; x++) {
-			IConfigurationElement[] elements = point[x].getConfigurationElements();
-			for (int i = 0; i < elements.length; i++) {
-				String wizardID = elements[i].getAttribute("id"); //$NON-NLS-1$
-				String pluginID = elements[i].getDeclaringExtension().getNamespace();
-				wizardPluginIDMap.put(wizardID, pluginID);
-			}
-		}
-	}
-
-	private void readFromRegistry() {
-		wizardPageElements = new TreeMap();
-		// wizardExtPageElements = new TreeSet();
-		nonSyncedPageElementList = new ArrayList();
-		// Read all page extensions into editorPageElements
-		reader = new WizardPageExtensionReader();
-		reader.readRegistry();
-
-	}
-
-	protected class WizardPageExtensionReader extends RegistryReader {
-
-		public WizardPageExtensionReader() {
-			super(CommonUIPluginConstants.PLUGIN_ID, DMWizardPageElement.ELEMENT_PAGE_GROUP);
-		}
-
-		public boolean readElement(IConfigurationElement element) {
-			if (!DMWizardPageElement.ELEMENT_PAGE_GROUP.equals(element.getName()))
-				return false;
-			DMWizardPageElement newElement = new DMWizardPageElement(element);
-
-			// put the element into a hashmap, wizardID as key,
-			// list of page elements as object
-			String wizardID = newElement.getWizardID();
-			if (!wizardPageElements.containsKey(wizardID)) {
-				wizardPageElements.put(wizardID, createPageMapEntry(newElement));
-			} else {
-				TreeMap pageMap = (TreeMap) wizardPageElements.get(wizardID);
-				insertPageElement(pageMap, newElement);
-			}
-
-			return true;
-		}
-
-		public void insertPageElement(TreeMap pageMap, DMWizardPageElement newElement) {
-			if (newElement.pageInsertionID == null) {
-				pageMap.put(newElement, new TreeSet());
-			} else {
-				String elementName = newElement.pageInsertionID;
-				DMWizardPageElement parentElement = getPageElement(elementName, pageMap);
-				insertExtPageElement(pageMap, parentElement, newElement);
-			}
-
-			newElement.getPageInsertionID();
-
-		}
-
-		private void insertExtPageElement(TreeMap pageMap, DMWizardPageElement parentElement, DMWizardPageElement newElement) {
-			if (parentElement == null) {
-				nonSyncedPageElementList.add(newElement);
-				return;
-			}
-			if (!parentElement.allowsExtendedPagesAfter()) {
-				Logger.getLogger().logError(WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_0, new Object[]{parentElement.getPageID()}));
-				Logger.getLogger().logError(WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_1, new Object[]{newElement.getPageID()}));
-				return;
-			}
-			TreeSet set = (TreeSet) pageMap.get(parentElement);
-			set.add(newElement);
-
-			if (newElement.allowsExtendedPagesAfter)
-				pageMap.put(newElement, new TreeSet());
-
-			if (nonSyncedPageElementList.contains(newElement))
-				nonSyncedPageElementList.remove(newElement);
-		}
-
-		private DMWizardPageElement getPageElement(String elementName, TreeMap map) {
-			Set keySet = map.keySet();
-			for (Iterator iter = keySet.iterator(); iter.hasNext();) {
-				DMWizardPageElement element = (DMWizardPageElement) iter.next();
-				if (element.getPageID().equals(elementName))
-					return element;
-			}
-			return null;
-
-		}
-
-		private TreeMap createPageMapEntry(DMWizardPageElement newElement) {
-			TreeMap pageMap = new TreeMap();
-			TreeSet pageExtensionSet = new TreeSet();
-			pageMap.put(newElement, pageExtensionSet);
-			return pageMap;
-
-		}
-
-	}
-
-	public boolean hasExtensionElements(String wizardID) {
-		TreeMap treeMap = (TreeMap) wizardPageElements.get(wizardID);
-		return treeMap.isEmpty();
-	}
-
-	public DMWizardPageElement[] getPageElements(String wizardID) {
-		TreeMap elementMap = (TreeMap) wizardPageElements.get(wizardID);
-		if (elementMap == null || elementMap.isEmpty()) {
-			return new DMWizardPageElement[0];
-		}
-		ArrayList alreadyVistedList = new ArrayList(elementMap.size());
-		Set allPageElementsList = elementMap.keySet();
-		ArrayList orderedPageList = new ArrayList(elementMap.size());
-
-		for (Iterator iter = allPageElementsList.iterator(); iter.hasNext();) {
-			DMWizardPageElement element = (DMWizardPageElement) iter.next();
-			if (alreadyVistedList.contains(element))
-				continue;
-			if (EnablementManager.INSTANCE.getIdentifier(element.getID(), null).isEnabled()) {
-				orderedPageList.add(element);
-				TreeSet treeSet = (TreeSet) elementMap.get(element);
-				if (treeSet != null && !treeSet.isEmpty())
-					flatenTreeSet(treeSet, allPageElementsList, alreadyVistedList, orderedPageList, elementMap);
-			}
-		}
-		return getPageArray(orderedPageList);
-
-	}
-
-	private DMWizardPageElement[] getPageArray(ArrayList orderedPageList) {
-		DMWizardPageElement[] pageElements = new DMWizardPageElement[orderedPageList.size()];
-		for (int i = 0; i < orderedPageList.size(); i++) {
-			pageElements[i] = (DMWizardPageElement) orderedPageList.get(i);
-		}
-		return pageElements;
-	}
-
-	private void flatenTreeSet(TreeSet treeSet, Set allPageElementsList, ArrayList alreadyVistedList, ArrayList orderedPageList, TreeMap elementMap) {
-		for (Iterator iter = treeSet.iterator(); iter.hasNext();) {
-			DMWizardPageElement element = (DMWizardPageElement) iter.next();
-			if (alreadyVistedList.contains(element)) {
-				Logger.getLogger().logError(WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_2, new Object[]{element.getPageID(), DMWizardPageElement.ATT_PAGE_INSERTION_ID})); 
-				return;
-			}
-			if (allPageElementsList.contains(element)) {
-				TreeSet set = (TreeSet) elementMap.get(element);
-				orderedPageList.add(element);
-				alreadyVistedList.add(element);
-				flatenTreeSet(set, allPageElementsList, alreadyVistedList, orderedPageList, elementMap);
-			} else {
-				orderedPageList.add(element);
-				alreadyVistedList.add(element);
-			}
-
-		}
-
-	}
-
-	// if child elements are read in before parent element. Do post read.
-	protected ArrayList listRemoveObjects;
-
-	private void postReadFromRegistry() {
-		listRemoveObjects = new ArrayList(nonSyncedPageElementList.size());
-		for (int i = 0; i < nonSyncedPageElementList.size(); i++) {
-			DMWizardPageElement element = (DMWizardPageElement) nonSyncedPageElementList.get(i);
-			TreeMap pageMap = (TreeMap) wizardPageElements.get(element.wizardID);
-			if (element.pageInsertionID == null) {
-				addToFirstAvialiable(pageMap, element);
-			} else if (reader != null && pageMap != null)
-				reader.insertPageElement(pageMap, element);
-		}
-		nonSyncedPageElementList.removeAll(listRemoveObjects);
-		if (!nonSyncedPageElementList.isEmpty())
-			logMissingClassError();
-		nonSyncedPageElementList.clear();
-
-	}
-
-	/**
-	 * @param pageMap
-	 * @param element
-	 */
-	private void addToFirstAvialiable(TreeMap pageMap, DMWizardPageElement newElement) {
-		boolean insertNotFound = true;
-		for (Iterator iter = pageMap.keySet().iterator(); iter.hasNext();) {
-			DMWizardPageElement element = (DMWizardPageElement) iter.next();
-			if (element.allowsExtendedPagesAfter) {
-				TreeSet set = (TreeSet) pageMap.get(element);
-				set.add(newElement);
-				listRemoveObjects.add(newElement);
-				return;
-			}
-		}
-		if (insertNotFound) {
-			Logger logger = Logger.getLogger();
-			logger.logError(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_3);
-		}
-
-	}
-
-	private void logMissingClassError() {
-		Logger logger = Logger.getLogger();
-		for (int i = 0; i < nonSyncedPageElementList.size(); i++) {
-			DMWizardPageElement element = (DMWizardPageElement) nonSyncedPageElementList.get(i);
-			logger.logError(WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.WizardPageExtensionManager_UI_4, new Object[]{element.pageInsertionID, element.getPageID(), element.pluginID}));
-		}
-		nonSyncedPageElementList.clear();
-
-	}
-
-	/**
-	 * Gets the instance.
-	 * 
-	 * @return Returns a EjbPageExtensionRegistry
-	 */
-	public static DMWizardPageExtensionManager getInstance() {
-		if (instance == null) {
-			instance = new DMWizardPageExtensionManager();
-		}
-		return instance;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageFactoryElement.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageFactoryElement.java
deleted file mode 100644
index 17a766c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DMWizardPageFactoryElement.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Oct 20, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.ConfigurationElementWrapper;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public class DMWizardPageFactoryElement extends ConfigurationElementWrapper {
-
-	static final String ATT_CLASS_NAME = "className"; //$NON-NLS-1$
-
-	protected String className;
-	protected DMWizardExtensionFactory wizardPageFactory;
-	protected boolean isPageFactoryInitialized;
-	protected String pageGroupID;
-
-	/**
-	 * @param element
-	 */
-	public DMWizardPageFactoryElement(IConfigurationElement element, String pageGroupID) {
-		super(element);
-		className = element.getAttribute(ATT_CLASS_NAME);
-		this.pageGroupID = pageGroupID;
-	}
-
-	public IDMPageHandler createPageHandler(IDataModel dataModel) {
-		if (!isPageFactoryInitialized)
-			initPageFactory();
-		if (wizardPageFactory == null)
-			return null;
-
-		IDMPageHandler handler = wizardPageFactory.createPageHandler(dataModel, pageGroupID);
-		return handler;
-	}
-
-	public DataModelWizardPage[] createPageGroup(IDataModel dataModel) {
-		if (!isPageFactoryInitialized)
-			initPageFactory();
-
-		if (wizardPageFactory == null)
-			return null;
-
-		DataModelWizardPage[] pages = wizardPageFactory.createPageGroup(dataModel, pageGroupID);
-		
-		return pages;
-	}
-
-	public IDMPageGroupHandler createPageGroupHandler( IDataModel dataModel )
-	{
-	  if (!isPageFactoryInitialized) initPageFactory();
-		
-	  if( wizardPageFactory == null ) return null;
-	  
-	  return wizardPageFactory.createPageGroupHandler( dataModel, pageGroupID );
-	}
-		
-	private void initPageFactory() {
-		try {
-			wizardPageFactory = (DMWizardExtensionFactory) element.createExecutableExtension(ATT_CLASS_NAME);
-		} catch (CoreException e) {
-			Logger.getLogger().logError("Error getting page factory: " + className); //$NON-NLS-1$ 
-			Logger.getLogger().logError(e);
-		} finally {
-			isPageFactoryInitialized = true;
-		}
-	}
-
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DataModelWizardExtensionReader.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DataModelWizardExtensionReader.java
deleted file mode 100644
index 5ce7b73..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/DataModelWizardExtensionReader.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import java.util.HashMap;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizard;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-
-public class DataModelWizardExtensionReader extends RegistryReader {
-
-	private static final String EXTENSION = "DataModelWizardExtension"; //$NON-NLS-1$
-	private static final String ELEMENT = "DataModelWizard"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
-
-	private HashMap extensions;
-
-	public DataModelWizardExtensionReader() {
-		super(WTPUIPlugin.PLUGIN_ID, EXTENSION);
-	}
-
-	public boolean readElement(IConfigurationElement element) {
-		if (!element.getName().equals(ELEMENT))
-			return false;
-		String id = element.getAttribute(ATTRIBUTE_ID);
-		if (null == id || id.trim().length() == 0) {
-			Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + ELEMENT + " is missing " + ATTRIBUTE_ID)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		String className = element.getAttribute(ATTRIBUTE_CLASS);
-		if (null == className || className.trim().length() == 0) {
-			Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + ELEMENT + " is missing " + ATTRIBUTE_CLASS)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		addExtension(id, element);
-		return true;
-	}
-
-	private void addExtension(String id, IConfigurationElement element) {
-		if (extensions.containsKey(id)) {
-			Logger.getLogger().logError(new RuntimeException("Duplicate " + ELEMENT + " " + ATTRIBUTE_ID + " " + id)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		extensions.put(id, element);
-	}
-
-	protected IConfigurationElement getExtension(String id) {
-		if (extensions == null) {
-			extensions = new HashMap();
-			readRegistry();
-		}
-		IConfigurationElement element = (IConfigurationElement) extensions.get(id);
-		if (null == element) {
-			throw new RuntimeException("Extension:" + EXTENSION + " Element:" + ELEMENT + " not found for " + ATTRIBUTE_ID + ": " + id); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		}
-		return element;
-	}
-
-	public DataModelWizard getWizard(IDataModel dataModel) {
-		DataModelWizard wizard = null;
-		IConfigurationElement element = getExtension(dataModel.getID());
-
-		try {
-			wizard = (DataModelWizard) element.createExecutableExtension(ATTRIBUTE_CLASS);
-			wizard.setDataModel(dataModel);
-		} catch (CoreException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-
-		return wizard;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/ExtensibleViewRegistry.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/ExtensibleViewRegistry.java
deleted file mode 100644
index c6aee2c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/ExtensibleViewRegistry.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-
-
-/**
- * @author mdelder
- */
-public class ExtensibleViewRegistry extends RegistryReader {
-
-	private static ExtensibleViewRegistry INSTANCE = null;
-	private Map extendedViewerMap = null;
-	private Map descriptorMap = null;
-
-	protected interface Elements {
-		public static final String EXTENDED_VIEWER = "extendedViewer"; //$NON-NLS-1$
-		public static final String VIEWER_ID = "viewerID"; //$NON-NLS-1$
-		public static final String PARENT_VIEWER_ID = "parentViewerID"; //$NON-NLS-1$
-		public static final String FACTORY_CLASS = "factoryClass"; //$NON-NLS-1$
-		public static final String ICON = "icon"; //$NON-NLS-1$
-		public static final String LABEL = "label"; //$NON-NLS-1$
-		public static final String FUNCTION_GROUP_ID = "functionGroupID"; //$NON-NLS-1$
-	}
-
-	/**
-	 *  
-	 */
-	private ExtensibleViewRegistry() {
-		super(WTPUIPlugin.PLUGIN_ID, WTPUIPlugin.EXTENDED_VIEWER_REGISTRY_EXTENSION_POINT);
-	}
-
-	public static ExtensibleViewRegistry getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new ExtensibleViewRegistry();
-			INSTANCE.readRegistry();
-		}
-		return INSTANCE;
-	}
-
-	public Descriptor getDescriptor(String viewerID) {
-		return (Descriptor) getDescriptorMap().get(viewerID);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.internal.registry.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
-	 */
-	public boolean readElement(IConfigurationElement element) {
-		if (element.getName().equals(Elements.EXTENDED_VIEWER)) {
-			Descriptor descriptor = new Descriptor(element);
-			getDescriptorMap().put(descriptor.getViewerID(), descriptor);
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * @return Returns the extendedViewerMap.
-	 */
-	protected Map getExtendedViewerMap() {
-		if (extendedViewerMap == null)
-			extendedViewerMap = new HashMap();
-		return extendedViewerMap;
-	}
-
-	/**
-	 * @return Returns the descriptorMap.
-	 */
-	protected Map getDescriptorMap() {
-		if (descriptorMap == null)
-			descriptorMap = new HashMap();
-		return descriptorMap;
-	}
-
-	public class Descriptor {
-
-		private String viewerID = null;
-		private String parentViewerID = null;
-		private String factoryClass = null;
-		private String icon = null;
-		private String label = null;
-		private String functionGroupID = null;
-
-		private String toStringCache = null;
-		private IConfigurationElement element = null;
-
-		/**
-		 *  
-		 */
-		public Descriptor(IConfigurationElement element) {
-			this.element = element;
-
-			this.viewerID = this.element.getAttribute(ExtensibleViewRegistry.Elements.VIEWER_ID);
-			this.parentViewerID = this.element.getAttribute(ExtensibleViewRegistry.Elements.PARENT_VIEWER_ID);
-			this.factoryClass = this.element.getAttribute(ExtensibleViewRegistry.Elements.FACTORY_CLASS);
-			this.icon = this.element.getAttribute(ExtensibleViewRegistry.Elements.ICON);
-			this.label = this.element.getAttribute(ExtensibleViewRegistry.Elements.LABEL);
-			this.functionGroupID = this.element.getAttribute(ExtensibleViewRegistry.Elements.FUNCTION_GROUP_ID);
-		}
-
-		public IExtensibleViewFactory createFactoryInstance() {
-			IExtensibleViewFactory factoryInstance = null;
-			try {
-				factoryInstance = (IExtensibleViewFactory) this.element.createExecutableExtension(getFactoryClass());
-			} catch (CoreException e) {
-				WTPUIPlugin.getLogger().logError(e);
-			}
-			return factoryInstance;
-		}
-
-		/**
-		 * @return Returns the factoryClass.
-		 */
-		public String getFactoryClass() {
-			return factoryClass;
-		}
-
-		/**
-		 * @return Returns the functionGroupID.
-		 */
-		public String getFunctionGroupID() {
-			return functionGroupID;
-		}
-
-		/**
-		 * @return Returns the icon.
-		 */
-		public String getIcon() {
-			return icon;
-		}
-
-		/**
-		 * @return Returns the label.
-		 */
-		public String getLabel() {
-			return label;
-		}
-
-		/**
-		 * @return Returns the parentViewerID.
-		 */
-		public String getParentViewerID() {
-			return parentViewerID;
-		}
-
-		/**
-		 * @return Returns the viewerID.
-		 */
-		public String getViewerID() {
-			return viewerID;
-		}
-
-		public String toString() {
-			if (toStringCache == null)
-				toStringCache = "ExtensibleViewRegistry.Info [viewerID=\"" + getViewerID() + "\",parentViewerID=\"" + getParentViewerID() + "\",factoryClass=" + getFactoryClass() + "\",functionGroupID=\"" + getFunctionGroupID() + "\"]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-			return toStringCache;
-		}
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IExtensibleViewFactory.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IExtensibleViewFactory.java
deleted file mode 100644
index 261938b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IExtensibleViewFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-/**
- * @author mdelder
- */
-public interface IExtensibleViewFactory {
-
-
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IOperationNode.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IOperationNode.java
deleted file mode 100644
index 747b5ca..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/operation/extensionui/IOperationNode.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on May 5, 2004
- * 
- * TODO To change the template for this generated file go to Window -
- * Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operation.extensionui;
-
-/**
- * @author mdelder
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Generation - Code and Comments
- */
-public interface IOperationNode {
-
-	public IOperationNode[] getChildren();
-
-	public boolean isChecked();
-
-	/**
-	 * Same as calling setChecked(checked, true)
-	 * 
-	 * @param checked
-	 */
-	public void setChecked(boolean checked);
-
-	public String getName();
-
-	public String getDescription();
-
-	public IOperationNode getParent();
-
-	/**
-	 * @return
-	 */
-	public boolean isAlwaysExecute();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/AbstractWTPUIPlugin.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/AbstractWTPUIPlugin.java
deleted file mode 100644
index 583f298..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/AbstractWTPUIPlugin.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Dec 10, 2003
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.ResourceBundle;
-
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jem.util.logger.proxyrender.DefaultPluginTraceRenderer;
-import org.eclipse.jem.util.logger.proxyrender.IMsgLogger;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-public abstract class AbstractWTPUIPlugin extends AbstractUIPlugin implements IMsgLogger {
-	protected static Logger logger = null;
-	public ResourceBundle resourceBundle;
-	protected static AbstractWTPUIPlugin instance = null; 
-
-	/**
-	 * @param descriptor
-	 */
-	public AbstractWTPUIPlugin() {
-		super();
-		instance = this;
-	}
-
-	public Logger getMsgLogger() {
-		if (logger == null) {
-			logger = Logger.getLogger(getPluginID());
-			setRenderer(logger);
-		}
-		return logger;
-	}
-
-	public abstract String getPluginID();
-
-	/**
-	 * @param aLogger
-	 */
-	protected void setRenderer(Logger aLogger) {
-		new DefaultPluginTraceRenderer(aLogger);
-	}
-	
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.runtime.Plugin#startup()
-	 */
-	public void start(BundleContext context) throws Exception  {
-		super.start(context);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ClosableWizardDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ClosableWizardDialog.java
deleted file mode 100644
index 7316c8b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ClosableWizardDialog.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on Mar 24, 2004
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author DABERG
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public class ClosableWizardDialog extends WizardDialog {
-	/**
-	 * @param parentShell
-	 * @param newWizard
-	 */
-	public ClosableWizardDialog(Shell parentShell, IWizard newWizard) {
-		super(parentShell, newWizard);
-	}
-
-	public void finishAndClose() {
-		super.finishPressed();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java
deleted file mode 100644
index 22caa6d..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DMPageGroupElementImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroup;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-import org.eclipse.wst.common.frameworks.internal.operation.extensionui.DMWizardPageElement;
-
-public class DMPageGroupElementImpl implements IDMPageGroup {
-	private DMWizardPageElement pageElement;
-
-	public DMPageGroupElementImpl(IConfigurationElement element) {
-		pageElement = new DMWizardPageElement(element);
-	}
-
-	public boolean getAllowsExtendedPages() {
-		return pageElement.allowsExtendedPagesAfter();
-	}
-
-	public String getRequiredDataOperationToRun() {
-		return pageElement.getRequiresDataOperationId();
-	}
-
-	public Set getDataModelIDs() {
-		return pageElement.getDataModelIDs();
-	}
-
-	public IDMPageGroupHandler getPageGroupHandler(IDataModel dataModel) {
-		return pageElement.createPageGroupHandler(dataModel);
-	}
-
-	public List getPages(IDataModel dataModel){
-		return Arrays.asList(pageElement.createPageGroup(dataModel));
-	}
-	
-	public IDMPageHandler getPageHandler(IDataModel dataModel) {
-		return pageElement.createPageHandler(dataModel);
-	}
-
-	public String getPageGroupID() {
-		return pageElement.getPageID();
-	}
-
-	public String getPageGroupInsertionID() {
-		return pageElement.getPageInsertionID();
-	}
-
-	public String getWizardID() {
-		return pageElement.getWizardID();
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DisplayUtility.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DisplayUtility.java
deleted file mode 100644
index 647f58e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/DisplayUtility.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on Apr 19, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.swt.widgets.Display;
-
-/**
- * @author mdelder
- */
-public class DisplayUtility {
-
-	public static void asyncExec(Runnable runnable) {
-
-		Display d = Display.getCurrent();
-		if (d == null)
-			Display.getDefault().asyncExec(runnable);
-		else
-			runnable.run();
-
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ErrorDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ErrorDialog.java
deleted file mode 100644
index 6c24426..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ErrorDialog.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.SWTError;
-import org.eclipse.swt.SWTException;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * Added a Details button to the MessageDialog to show the exception stack trace.
- * 
- * Borrowed from an eclipse InternalErrorDialog
- */
-public class ErrorDialog extends MessageDialog {
-	protected static final String[] LABELS_OK = {IDialogConstants.OK_LABEL};
-	protected static final String[] LABELS_OK_CANCEL = {IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL};
-	protected static final String[] LABELS_OK_DETAILS = {IDialogConstants.OK_LABEL, IDialogConstants.SHOW_DETAILS_LABEL};
-	protected static final String[] LABELS_OK_CANCEL_DETAILS = {IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL, IDialogConstants.SHOW_DETAILS_LABEL};
-	private Throwable detail;
-	private int detailButtonID = -1;
-	private Text text;
-	private String message;
-	//Workaround. SWT does not seem to set the default button if
-	//there is not control with focus. Bug: 14668
-	private int defaultButtonIndex = 0;
-	/**
-	 * Size of the text in lines.
-	 */
-	private static final int TEXT_LINE_COUNT = 15;
-
-	public ErrorDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, Throwable detail, int dialogImageType, String[] dialogButtonLabels, int defaultIndex) {
-		super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex);
-		defaultButtonIndex = defaultIndex;
-		this.detail = detail;
-		message = dialogMessage;
-		setShellStyle(getShellStyle() | SWT.APPLICATION_MODAL | SWT.RESIZE);
-	}
-
-	//Workaround. SWT does not seem to set rigth the default button if
-	//there is not control with focus. Bug: 14668
-	public int open() {
-		create();
-		Button b = getButton(defaultButtonIndex);
-		b.setFocus();
-		b.getShell().setDefaultButton(b);
-		return super.open();
-	}
-
-	/**
-	 * Set the detail button;
-	 */
-	public void setDetailButton(int index) {
-		detailButtonID = index;
-	}
-
-	/*
-	 * (non-Javadoc) Method declared on Dialog.
-	 */
-	protected void buttonPressed(int buttonId) {
-		if (buttonId == detailButtonID) {
-			toggleDetailsArea();
-		} else {
-			setReturnCode(buttonId);
-			close();
-		}
-	}
-
-	/**
-	 * Toggles the unfolding of the details area. This is triggered by the user pressing the details
-	 * button.
-	 */
-	private void toggleDetailsArea() {
-		Point windowSize = getShell().getSize();
-		Point oldSize = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		if (text != null) {
-			text.dispose();
-			text = null;
-			getButton(detailButtonID).setText(IDialogConstants.SHOW_DETAILS_LABEL);
-		} else {
-			createDropDownText((Composite) getContents());
-			getButton(detailButtonID).setText(IDialogConstants.HIDE_DETAILS_LABEL);
-		}
-		Point newSize = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		getShell().setSize(new Point(windowSize.x, windowSize.y + (newSize.y - oldSize.y)));
-	}
-
-	/**
-	 * Create this dialog's drop-down list component.
-	 * 
-	 * @param parent
-	 *            the parent composite
-	 * @return the drop-down list component
-	 */
-	protected void createDropDownText(Composite parent) {
-		// create the list
-		text = new Text(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-		// print the stacktrace in the text field
-		try {
-			ByteArrayOutputStream baos = new ByteArrayOutputStream();
-			PrintStream ps = new PrintStream(baos);
-			detail.printStackTrace(ps);
-			if ((detail instanceof SWTError) && (((SWTError) detail).throwable != null)) {
-				ps.println("\n*** Stack trace of contained exception ***"); //$NON-NLS-1$
-				((SWTError) detail).throwable.printStackTrace(ps);
-			} else if ((detail instanceof SWTException) && (((SWTException) detail).throwable != null)) {
-				ps.println("\n*** Stack trace of contained exception ***"); //$NON-NLS-1$
-				((SWTException) detail).throwable.printStackTrace(ps);
-			}
-			ps.flush();
-			baos.flush();
-			text.setText(baos.toString());
-		} catch (IOException e) {
-		}
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL);
-		data.heightHint = text.getLineHeight() * TEXT_LINE_COUNT;
-		text.setLayoutData(data);
-	}
-
-	public static boolean openError(Shell parent, String title, String message, Throwable detail, int defaultIndex, boolean showCancel) {
-		String[] labels;
-		if (detail == null)
-			labels = showCancel ? LABELS_OK_CANCEL : LABELS_OK;
-		else
-			labels = showCancel ? LABELS_OK_CANCEL_DETAILS : LABELS_OK_DETAILS;
-		ErrorDialog dialog = new ErrorDialog(parent, title, null, // accept
-					// the
-					// default
-					// window
-					// icon
-					message, detail, ERROR, labels, defaultIndex);
-		if (detail != null)
-			dialog.setDetailButton(labels.length - 1);
-		return dialog.open() == 0;
-	}
-
-	protected Control createDialogArea(Composite parent) {
-		// create a composite with standard margins and spacing
-		Composite composite = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
-		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
-		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-		composite.setFont(parent.getFont());
-		((GridLayout) composite.getLayout()).numColumns = 2;
-		// create image
-		Image image = composite.getDisplay().getSystemImage(SWT.ICON_ERROR);
-		if (image != null) {
-			Label label = new Label(composite, 0);
-			image.setBackground(label.getBackground());
-			label.setImage(image);
-			label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_BEGINNING));
-		}
-		// create message
-		if (message != null) {
-			Label label = new Label(composite, SWT.WRAP);
-			label.setText(message);
-			GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
-			data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
-			label.setLayoutData(data);
-			label.setFont(parent.getFont());
-		}
-		return composite;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ExecutionListener.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ExecutionListener.java
deleted file mode 100644
index 2cc778a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ExecutionListener.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.core.runtime.IStatus;
-
-public interface ExecutionListener
-{
-  public IStatus execute();
-  
-  public void undoExecute();
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/GenericWizardNode.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/GenericWizardNode.java
deleted file mode 100644
index 60769c2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/GenericWizardNode.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.IWizardNode;
-import org.eclipse.swt.graphics.Point;
-
-/**
- * @version 1.0
- * @author
- */
-public abstract class GenericWizardNode implements IWizardNode {
-
-	protected IWizard wizard;
-
-	/**
-	 * Constructor for GenericWizardNode.
-	 */
-	public GenericWizardNode() {
-		super();
-	}
-
-	/*
-	 * @see IWizardNode#dispose()
-	 */
-	public void dispose() {
-		if (wizard != null)
-			wizard.dispose();
-	}
-
-	/*
-	 * @see IWizardNode#getContents()
-	 */
-	public Point getContents() {
-		return null;
-	}
-
-	public final IWizard getWizard() {
-		if (wizard == null)
-			wizard = createWizard();
-		return wizard;
-	}
-
-	/**
-	 * Subclasses must override to create the wizard
-	 */
-	protected abstract IWizard createWizard();
-
-	/*
-	 * @see IWizardNode#isContentCreated()
-	 */
-	public boolean isContentCreated() {
-		return wizard != null;
-	}
-
-	/**
-	 * @see org.eclipse.jface.wizard.IWizardNode#getExtent()
-	 */
-	public Point getExtent() {
-		return null;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/InternalCommonWorkbenchMessages.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/InternalCommonWorkbenchMessages.java
deleted file mode 100644
index 99fb6f8..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/InternalCommonWorkbenchMessages.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2006 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 - Initial API and implementation
- **********************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.osgi.util.NLS;
-
-public class InternalCommonWorkbenchMessages extends NLS {
-	private static final String BUNDLE_NAME = "messages";//$NON-NLS-1$
-
-
-	public static String WizardNewProjectCreationPage_projectContentsLabel;
-	public static String WizardNewProjectCreationPage_useDefaultLabel;
-	public static String WizardNewProjectCreationPage_locationLabel;
-
-
-
-	static {
-		// load message values from bundle file
-		NLS.initializeMessages(BUNDLE_NAME, InternalCommonWorkbenchMessages.class);
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListMessageDialog.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListMessageDialog.java
deleted file mode 100644
index aed38af..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListMessageDialog.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on Aug 5, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-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.List;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author dfholt
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Generation - Code and Comments
- */
-public class ListMessageDialog extends MessageDialog {
-	protected String[] listItems;
-	protected List list;
-
-	/**
-	 * EJBSelectiveImportDialog constructor comment.
-	 * 
-	 * @param parentShell
-	 *            org.eclipse.swt.widgets.Shell
-	 * @param dialogTitle
-	 *            java.lang.String
-	 * @param dialogTitleImage
-	 *            org.eclipse.swt.graphics.Image
-	 * @param dialogMessage
-	 *            java.lang.String
-	 * @param dialogImageType
-	 *            int
-	 * @param dialogButtonLabels
-	 *            java.lang.String[]
-	 * @param defaultIndex
-	 *            int
-	 */
-	public ListMessageDialog(org.eclipse.swt.widgets.Shell parentShell, String dialogTitle, org.eclipse.swt.graphics.Image dialogTitleImage, String dialogMessage, int dialogImageType, java.lang.String[] dialogButtonLabels, int defaultIndex) {
-		super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex);
-	}
-
-	/**
-	 * ListMessageDialog constructor comment.
-	 * 
-	 * @param parentShell
-	 *            org.eclipse.swt.widgets.Shell
-	 * @param dialogTitle
-	 *            java.lang.String
-	 * @param dialogTitleImage
-	 *            org.eclipse.swt.graphics.Image
-	 * @param dialogMessage
-	 *            java.lang.String
-	 * @param dialogImageType
-	 *            int
-	 * @param dialogButtonLabels
-	 *            java.lang.String[]
-	 * @param defaultIndex
-	 *            int
-	 */
-	public ListMessageDialog(org.eclipse.swt.widgets.Shell parentShell, String dialogTitle, org.eclipse.swt.graphics.Image dialogTitleImage, String dialogMessage, int dialogImageType, java.lang.String[] dialogButtonLabels, int defaultIndex, String[] names) {
-		super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex);
-		listItems = names;
-	}
-
-	/**
-	 * Creates and returns the contents of an area of the dialog which appears below the message and
-	 * above the button bar.
-	 * <p>
-	 * The default implementation of this framework method returns <code>null</code>. Subclasses
-	 * may override.
-	 * </p>
-	 * 
-	 * @param the
-	 *            parent composite to contain the custom area
-	 * @return the custom area control, or <code>null</code>
-	 */
-	protected Control createCustomArea(Composite parent) {
-
-		Composite composite = new Composite(parent, 0);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 1;
-		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
-		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-		if (listItems != null) {
-			list = new List(composite, SWT.BORDER);
-			GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
-			list.setLayoutData(data);
-			list.setItems(listItems);
-		}
-
-		return composite;
-
-	}
-
-	/**
-	 * Convenience method to open a simple confirm (OK/Cancel) dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 * @return <code>true</code> if the user presses the OK button, <code>false</code> otherwise
-	 */
-	public static boolean openConfirm(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, QUESTION, new String[]{IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL}, 0, items); // OK
-		// is
-		// the
-		// default
-		return dialog.open() == 0;
-	}
-
-	/**
-	 * Convenience method to open a standard error dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 */
-	public static void openError(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, ERROR, new String[]{IDialogConstants.OK_LABEL}, 0, items); // ok is the
-		// default
-		dialog.open();
-		return;
-	}
-
-	/**
-	 * Convenience method to open a standard information dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 */
-	public static void openInformation(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, INFORMATION, new String[]{IDialogConstants.OK_LABEL}, 0, items);
-		// ok is the default
-		dialog.open();
-		return;
-	}
-
-	/**
-	 * Convenience method to open a simple Yes/No question dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 * @return <code>true</code> if the user presses the OK button, <code>false</code> otherwise
-	 */
-	public static boolean openQuestion(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, QUESTION, new String[]{IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}, 0, items); // yes
-		// is
-		// the
-		// default
-		return dialog.open() == 0;
-	}
-
-	/**
-	 * Convenience method to open a standard warning dialog.
-	 * 
-	 * @param parent
-	 *            the parent shell of the dialog, or <code>null</code> if none
-	 * @param title
-	 *            the dialog's title, or <code>null</code> if none
-	 * @param message
-	 *            the message
-	 */
-	public static void openWarning(Shell parent, String title, String message, String[] items) {
-		ListMessageDialog dialog = new ListMessageDialog(parent, title, null, // accept the default
-					// window icon
-					message, WARNING, new String[]{IDialogConstants.OK_LABEL}, 0, items); // ok is
-		// the
-		// default
-		dialog.open();
-		return;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListenerList.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListenerList.java
deleted file mode 100644
index db72ea5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ListenerList.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.awt.event.ActionListener;
-
-public class ListenerList {
-	private final static ActionListener[] NULL_ARRAY = new ActionListener[0];
-	protected transient ActionListener[] listenerList = NULL_ARRAY;
-
-	/**
-	 * Add the listener as a listener of the specified type.
-	 * 
-	 * @param t
-	 *            the type of the listener to be added
-	 * @param l
-	 *            the listener to be added
-	 */
-	public synchronized void add(ActionListener l) {
-		if (l == null)
-			return;
-		if (listenerList == NULL_ARRAY) {
-			// if this is the first listener added,
-			// initialize the lists
-			listenerList = new ActionListener[]{l};
-		} else {
-			// Otherwise copy the array and add the new listener
-			int i = listenerList.length;
-			ActionListener[] tmp = new ActionListener[i + 1];
-			System.arraycopy(listenerList, 0, tmp, 0, i);
-
-			tmp[i + 1] = l;
-
-			listenerList = tmp;
-		}
-	}
-
-	/**
-	 * Return the total number of listeners for this listenerlist
-	 */
-	public int getListenerCount() {
-		return listenerList.length;
-	}
-
-	public ActionListener[] getListenerList() {
-		return listenerList;
-	}
-
-	public synchronized void remove(ActionListener l) {
-		if (l == null)
-			return;
-		int index = -1;
-		for (int i = listenerList.length - 1; i >= 0; i -= 1) {
-			if (listenerList[i].equals(l)) {
-				index = i;
-				break;
-			}
-		}
-		if (index != -1) {
-			ActionListener[] tmp = new ActionListener[listenerList.length - 1];
-			// Copy the list up to index
-			System.arraycopy(listenerList, 0, tmp, 0, index);
-			// Copy from two past the index, up to
-			// the end of tmp (which is two elements
-			// shorter than the old list)
-			if (index < tmp.length)
-				System.arraycopy(listenerList, index + 1, tmp, index, tmp.length - index);
-			// set the listener array to the new array or null
-			listenerList = (tmp.length == 0) ? NULL_ARRAY : tmp;
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/NewProjectGroup.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/NewProjectGroup.java
deleted file mode 100644
index d86a61a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/NewProjectGroup.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.io.File;
-
-import org.eclipse.core.runtime.Path;
-import org.eclipse.swt.SWT;
-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.graphics.Font;
-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.DirectoryDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-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.operations.IProjectCreationPropertiesNew;
-
-public class NewProjectGroup implements IProjectCreationPropertiesNew {
-	private IDataModel model;
-	public Text projectNameField = null;
-	protected Text locationPathField = null;
-	protected Button browseButton = null;
-	// constants
-	private static final int SIZING_TEXT_FIELD_WIDTH = 305;
-	// default values
-	private String defProjectNameLabel = WTPCommonUIResourceHandler.Name_;
-	private String defBrowseButtonLabel = WTPCommonUIResourceHandler.Browse_;
-	private static final String defDirDialogLabel = "Directory"; //$NON-NLS-1$
-
-	private DataModelSynchHelper synchHelper;
-
-	public NewProjectGroup(Composite parent, IDataModel model) {
-		this.model = model;
-		synchHelper = new DataModelSynchHelper(model);
-		buildComposites(parent);
-	}
-
-	/**
-	 * Create the controls within this composite
-	 */
-	public void buildComposites(Composite parent) {
-		createProjectNameGroup(parent);
-		createProjectLocationGroup(parent);
-		projectNameField.setFocus();
-	}
-
-	private final void createProjectNameGroup(Composite parent) {
-		Font font = parent.getFont();
-		// project specification group
-		Composite projectGroup = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 2;
-		projectGroup.setLayout(layout);
-		projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		// new project label
-		Label projectLabel = new Label(projectGroup, SWT.NONE);
-		projectLabel.setFont(font);
-		projectLabel.setText(defProjectNameLabel);
-
-		// new project name entry field
-		projectNameField = new Text(projectGroup, SWT.BORDER);
-		GridData data = new GridData(GridData.FILL_HORIZONTAL);
-		data.widthHint = SIZING_TEXT_FIELD_WIDTH;
-		projectNameField.setLayoutData(data);
-		projectNameField.setFont(font);
-		synchHelper.synchText(projectNameField, PROJECT_NAME, new Control[]{projectLabel});
-	}
-
-	/**
-	 * Creates the project location specification controls.
-	 * 
-	 * @param parent
-	 *            the parent composite
-	 */
-	private final void createProjectLocationGroup(Composite parent) {
-
-		Font font = parent.getFont();
-		// project specification group
-		Group projectGroup = new Group(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 3;
-		projectGroup.setLayout(layout);
-		projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		projectGroup.setFont(font);
-		projectGroup.setText(InternalCommonWorkbenchMessages.WizardNewProjectCreationPage_projectContentsLabel);
-
-		final Button useDefaultsButton = new Button(projectGroup, SWT.CHECK | SWT.RIGHT);
-		useDefaultsButton.setText(InternalCommonWorkbenchMessages.WizardNewProjectCreationPage_useDefaultLabel);
-		useDefaultsButton.setFont(font);
-		synchHelper.synchCheckbox(useDefaultsButton, USE_DEFAULT_LOCATION, null);
-
-		GridData buttonData = new GridData();
-		buttonData.horizontalSpan = 3;
-		useDefaultsButton.setLayoutData(buttonData);
-
-		createUserSpecifiedProjectLocationGroup(projectGroup);
-	}
-
-	private void createUserSpecifiedProjectLocationGroup(Composite projectGroup) {
-		Font font = projectGroup.getFont();
-		// location label
-		final Label locationLabel = new Label(projectGroup, SWT.NONE);
-		locationLabel.setFont(font);
-		locationLabel.setText(InternalCommonWorkbenchMessages.WizardNewProjectCreationPage_locationLabel);
-
-		// project location entry field
-		locationPathField = new Text(projectGroup, SWT.BORDER);
-		GridData data = new GridData(GridData.FILL_HORIZONTAL);
-		data.widthHint = SIZING_TEXT_FIELD_WIDTH;
-		locationPathField.setLayoutData(data);
-		locationPathField.setFont(font);
-
-		// browse button
-		browseButton = new Button(projectGroup, SWT.PUSH);
-		browseButton.setFont(font);
-		browseButton.setText(defBrowseButtonLabel);
-		browseButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				handleLocationBrowseButtonPressed();
-			}
-		});
-
-		final IDataModel localModel = model;
-
-		class LocationListener implements ModifyListener, IDataModelListener {
-			private boolean typing = false;
-
-			public void modifyText(ModifyEvent e) {
-				if (!localModel.getBooleanProperty(USE_DEFAULT_LOCATION)) {
-					try {
-						typing = true;
-						localModel.setProperty(USER_DEFINED_LOCATION, locationPathField.getText());
-					} finally {
-						typing = false;
-					}
-				}
-			}
-
-			public void propertyChanged(DataModelEvent event) {
-				boolean useDefault = localModel.getBooleanProperty(USE_DEFAULT_LOCATION);
-				if (USE_DEFAULT_LOCATION.equals(event.getPropertyName())) {
-					locationLabel.setEnabled(!useDefault);
-					locationPathField.setEnabled(!useDefault);
-					browseButton.setEnabled(!useDefault);
-					if (useDefault) {
-						locationPathField.setText(localModel.getStringProperty(DEFAULT_LOCATION));
-					} else {
-						locationPathField.setText(localModel.getStringProperty(USER_DEFINED_LOCATION));
-					}
-				} else if (!typing) {
-					if ((useDefault && DEFAULT_LOCATION.equals(event.getPropertyName())) || (!useDefault && USER_DEFINED_LOCATION.equals(event.getPropertyName()))) {
-						locationPathField.setText((String) event.getProperty());
-					}
-				}
-			}
-		}
-
-		LocationListener listener = new LocationListener();
-
-		listener.propertyChanged(new DataModelEvent(model, USE_DEFAULT_LOCATION, IDataModel.VALUE_CHG));
-
-		locationPathField.addModifyListener(listener);
-		model.addListener(listener);
-	}
-
-	/**
-	 * Open an appropriate directory browser
-	 */
-	protected void handleLocationBrowseButtonPressed() {
-		DirectoryDialog dialog = new DirectoryDialog(locationPathField.getShell());
-		dialog.setMessage(defDirDialogLabel);
-		String dirName = model.getStringProperty(USER_DEFINED_LOCATION);
-		if (dirName.trim().length() == 0) {
-			dirName = new Path(model.getStringProperty(DEFAULT_LOCATION)).removeLastSegments(1).toOSString();
-		}
-
-		if ((dirName != null) && (dirName.length() != 0)) {
-			File path = new File(dirName);
-			if (path.exists()) {
-				dialog.setFilterPath(dirName);
-			}
-		}
-		String selectedDirectory = dialog.open();
-		if (selectedDirectory != null) {
-			model.setProperty(USER_DEFINED_LOCATION, selectedDirectory);
-		}
-	}
-
-	public void dispose() {
-		model.removeListener(synchHelper);
-		synchHelper.dispose();
-		model = null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/OverlayIcon.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/OverlayIcon.java
deleted file mode 100644
index 8ff7b0a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/OverlayIcon.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Point;
-
-public class OverlayIcon extends org.eclipse.jface.resource.CompositeImageDescriptor {
-	// //$NON-NLS-1$
-	static final int DEFAULT_WIDTH = 16;
-	static final int DEFAULT_HEIGHT = 16;
-	private Point fSize = null;
-	private ImageDescriptor fBase;
-	private ImageDescriptor fOverlays[][];
-
-	public OverlayIcon(ImageDescriptor base, ImageDescriptor[][] overlays) {
-		fBase = base;
-		if (fBase == null)
-			fBase = ImageDescriptor.getMissingImageDescriptor();
-		fOverlays = overlays;
-		fSize = new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT);
-	}
-
-	public OverlayIcon(ImageDescriptor base, ImageDescriptor[][] overlays, Point size) {
-		fBase = base;
-		if (fBase == null)
-			fBase = ImageDescriptor.getMissingImageDescriptor();
-		fOverlays = overlays;
-		fSize = size;
-	}
-
-	protected void drawBottomLeft(ImageDescriptor[] overlays) {
-		if (overlays == null)
-			return;
-		int length = overlays.length;
-		int x = 0;
-		for (int i = 0; i < 3; i++) {
-			if (i < length && overlays[i] != null) {
-				ImageData id = overlays[i].getImageData();
-				drawImage(id, x, getSize().y - id.height);
-				x += id.width;
-			}
-		}
-	}
-
-	protected void drawBottomRight(ImageDescriptor[] overlays) {
-		if (overlays == null)
-			return;
-		int length = overlays.length;
-		int x = getSize().x;
-		for (int i = 2; i >= 0; i--) {
-			if (i < length && overlays[i] != null) {
-				ImageData id = overlays[i].getImageData();
-				x -= id.width;
-				drawImage(id, x, getSize().y - id.height);
-			}
-		}
-	}
-
-	protected void drawCompositeImage(int width, int height) {
-		ImageData bg = fBase.getImageData();
-		drawImage(bg, 0, 0);
-
-		if (fOverlays != null) {
-			if (fOverlays.length > 0)
-				drawTopRight(fOverlays[0]);
-
-			if (fOverlays.length > 1)
-				drawBottomRight(fOverlays[1]);
-
-			if (fOverlays.length > 2)
-				drawBottomLeft(fOverlays[2]);
-
-			if (fOverlays.length > 3)
-				drawTopLeft(fOverlays[3]);
-		}
-	}
-
-	protected void drawTopLeft(ImageDescriptor[] overlays) {
-		if (overlays == null)
-			return;
-		int length = overlays.length;
-		int x = 0;
-		for (int i = 0; i < 3; i++) {
-			if (i < length && overlays[i] != null) {
-				ImageData id = overlays[i].getImageData();
-				drawImage(id, x, 0);
-				x += id.width;
-			}
-		}
-	}
-
-	protected void drawTopRight(ImageDescriptor[] overlays) {
-		if (overlays == null)
-			return;
-		int length = overlays.length;
-		int x = getSize().x;
-		for (int i = 2; i >= 0; i--) {
-			if (i < length && overlays[i] != null) {
-				ImageData id = overlays[i].getImageData();
-				x -= id.width;
-				drawImage(id, x, 0);
-			}
-		}
-	}
-
-	protected Point getSize() {
-		return fSize;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java
deleted file mode 100644
index 620c43e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/PageGroupManager.java
+++ /dev/null
@@ -1,561 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Stack;
-import java.util.Vector;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.datamodel.IDataModelPausibleOperation;
-import org.eclipse.wst.common.frameworks.internal.datamodel.IDataModelPausibleOperationEvent;
-import org.eclipse.wst.common.frameworks.internal.datamodel.IDataModelPausibleOperationListener;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizard;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroup;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-import org.eclipse.wst.common.frameworks.internal.operation.extensionui.CommonUIPluginConstants;
-
-public class PageGroupManager {
-	private IDataModelPausibleOperation rootOperation;
-	private IDMPageGroup rootPageGroup;
-	private HashMap groupTable;
-	private HashSet operationsRun;
-	private Stack pageGroupStack;
-	private IDataModel dataModel;
-	private StackEntry savedTopEntry;
-	private int savedStackSize;
-
-	private IConfigurationElement[] elements;
-
-	private final String ELEMENT_PAGE_GROUP = "wizardPageGroup"; //$NON-NLS-1$
-
-	private String pauseAfterExecution = null;
-
-	public PageGroupManager(IDataModel dataModel, IDMPageGroup rootPageGroup) {
-
-		this.dataModel = dataModel;
-		this.groupTable = new HashMap();
-		this.pageGroupStack = new Stack();
-		this.rootPageGroup = rootPageGroup;
-
-
-		PageGroupEntry rootPageGroupEntry = new PageGroupEntry(rootPageGroup);
-		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(CommonUIPluginConstants.PLUGIN_ID, ELEMENT_PAGE_GROUP);
-		elements = point.getConfigurationElements();
-		groupTable.put(this.rootPageGroup.getPageGroupID(), rootPageGroupEntry);
-
-		if (this.rootPageGroup.getAllowsExtendedPages()) {
-			// Find all the page groups that follow this root page group.
-			loadExtendedPages(rootPageGroup);
-		}
-	}
-
-	public PageGroupManager(IDataModelPausibleOperation rootOperation, IDMPageGroup rootPageGroup) {
-		this(rootOperation.getDataModel(), rootPageGroup);
-		this.operationsRun = new HashSet();
-
-		rootOperation.addOperationListener(new IDataModelPausibleOperationListener() {
-			public int notify(IDataModelPausibleOperationEvent event) {
-				switch (event.getExecutionType()) {
-					case IDataModelPausibleOperationEvent.ROLLBACK :
-						if (event.getOperationType() == IDataModelPausibleOperationEvent.MAIN_FINISHED) {
-							operationsRun.remove(event.getOperation().getID());
-						}
-						break;
-					case IDataModelPausibleOperationEvent.EXECUTE :
-						if (event.getOperationType() == IDataModelPausibleOperationEvent.MAIN_FINISHED) {
-							operationsRun.add(event.getOperation().getID());
-							if (null != pauseAfterExecution && event.getOperation().getID().equals(pauseAfterExecution)) {
-								return IDataModelPausibleOperationListener.PAUSE;
-							}
-						}
-						break;
-				}
-				return IDataModelPausibleOperationListener.CONTINUE;
-			}
-		});
-	}
-
-	public void addGroupAfter(String pageGroupID, IDMPageGroup pageInsertGroup) {
-		PageGroupEntry pageGroupEntry = (PageGroupEntry) groupTable.get(pageGroupID);
-
-		if (pageGroupEntry.pageGroup.getAllowsExtendedPages()) {
-			addPageGroup(pageGroupEntry.pageGroup, pageInsertGroup);
-		}
-	}
-
-	public void moveForwardOnePage() {
-		boolean pageFound = false;
-
-		if (pageGroupStack.empty()) {
-			PageGroupEntry rootEntry = (PageGroupEntry) groupTable.get(rootPageGroup.getPageGroupID());
-			pageGroupStack.push(new StackEntry(rootEntry, -1));
-		}
-
-		saveStackInfo();
-
-		try {
-			pageFound = findNextPage(true);
-		} catch (Throwable exc) {
-			Logger.getLogger().logError(exc);
-			if (rootOperation != null) {
-				try {
-					rootOperation.rollBack(null, null);
-				} catch (ExecutionException e) {
-					Logger.getLogger().logError(e);
-				}
-			}
-			pageFound = false;
-		}
-
-		if (pageFound == false) {
-			// If we moved forward and there wasn't a page then we will restore the stack.
-			// Normally, this wouldn't happen since a call to hasNextPage would have indicated
-			// that there wasn't a page.
-			restoreStackInfo();
-		}
-	}
-
-	public void moveBackOnePage() {
-		if (pageGroupStack.empty())
-			return;
-
-		StackEntry topEntry = (StackEntry) pageGroupStack.peek();
-
-		// Pop the last page.
-		if (!topEntry.pagesReturned.empty())
-			topEntry.pagesReturned.pop();
-
-		// Now find the previous page.
-		boolean foundPreviousPage = findPreviousPageInGroup();
-
-		while (!foundPreviousPage && !pageGroupStack.empty()) {
-			if (rootOperation != null) {
-				if (topEntry.ranOperations) {
-					try {
-						rootOperation.rollBack(null, null);
-					} catch (ExecutionException e) {
-						Logger.getLogger().logError(e);
-					}
-				}
-			}
-
-			pageGroupStack.pop();
-
-			if (!pageGroupStack.empty()) {
-				foundPreviousPage = findPreviousPageInGroup();
-				topEntry = (StackEntry) pageGroupStack.peek();
-			}
-		}
-	}
-
-	public void reset() {
-		pageGroupStack.clear();
-	}
-
-	public IWizardPage getCurrentPage() {
-		IWizardPage page = null;
-
-		if (!pageGroupStack.empty()) {
-			StackEntry topEntry = (StackEntry) pageGroupStack.peek();
-			int pageIndex = topEntry.getTopPageIndex();
-
-			page = pageIndex == -1 ? null : (IWizardPage) topEntry.pageGroupEntry.getPages().get(pageIndex);
-		}
-
-		return page;
-	}
-
-	private Boolean hasMulitplePages;
-
-	public boolean hasMultiplePages() {
-		if (null == hasMulitplePages) {
-			int pageCount = 0;
-			PageGroupEntry rootEntry = (PageGroupEntry) groupTable.get(rootPageGroup.getPageGroupID());
-			pageCount += rootEntry.getPages().size();
-			for (int i = 0; pageCount < 2 && i < rootEntry.groupsThatFollow.size(); i++) {
-				pageCount += ((PageGroupEntry) rootEntry.groupsThatFollow.get(i)).getPages().size();
-			}
-			hasMulitplePages = pageCount > 1 ? Boolean.TRUE : Boolean.FALSE;
-		}
-		return hasMulitplePages.booleanValue();
-	}
-
-	public boolean hasNextPage() {
-		boolean pageFound = false;
-
-		saveStackInfo();
-
-		if (pageGroupStack.empty()) {
-			PageGroupEntry rootEntry = (PageGroupEntry) groupTable.get(rootPageGroup.getPageGroupID());
-			pageGroupStack.push(new StackEntry(rootEntry, -1));
-		}
-
-		pageFound = findNextPage(false);
-		restoreStackInfo();
-
-		return pageFound;
-	}
-
-	public void undoAllCurrentOperations() {
-		while (!pageGroupStack.empty()) {
-			moveBackOnePage();
-		}
-	}
-
-	private boolean findPreviousPageInGroup() {
-		StackEntry topEntry = (StackEntry) pageGroupStack.peek();
-		boolean pageFound = false;
-
-		if (!topEntry.pagesReturned.empty()) {
-			topEntry.pagesComplete = false;
-			pageFound = true;
-		}
-
-		return pageFound;
-	}
-
-	private boolean findNextPage(boolean runOperations) {
-		StackEntry topEntry = (StackEntry) pageGroupStack.peek();
-		int newPageIndex = topEntry.findNextPageIndex();
-		boolean pageFound = false;
-
-		if (newPageIndex == -1) {
-			// Our page handler didn't find a page so we will see if there is a page group that
-			// follows this page group that can find a page.
-			topEntry.pagesComplete = true;
-
-			StackEntry nextStackEntry = findNextPageGroup(pageGroupStack);
-
-			if (nextStackEntry != null) {
-				IDMPageGroup pageGroup = nextStackEntry.pageGroupEntry.pageGroup;
-				String requiresOperationsId = pageGroup.getRequiredDataOperationToRun();
-
-				// If this group requires an operation and it has not already been run
-				// then we need to run it.
-				if (rootOperation != null && runOperations && requiresOperationsId != null && !operationsRun.contains(requiresOperationsId)) {
-					pauseAfterExecution = requiresOperationsId;
-					IStatus status = null;
-					try {
-						status = rootOperation.resume(null, null);
-					} catch (ExecutionException e) {
-						Logger.getLogger().logError(e);
-					}
-					nextStackEntry.ranOperations = true;
-
-					if (status.getSeverity() == IStatus.ERROR) {
-						// TODO need a better error feedback mechanism here.
-						throw new IllegalArgumentException(status.getMessage());
-					}
-				}
-
-				pageGroupStack.push(nextStackEntry);
-				pageFound = findNextPage(runOperations);
-			}
-		} else {
-			// We found a new page in the page handler.
-			pageFound = true;
-			topEntry.pagesReturned.push(new Integer(newPageIndex));
-		}
-
-		return pageFound;
-	}
-
-	private void saveStackInfo() {
-		if (!pageGroupStack.empty()) {
-			savedTopEntry = new StackEntry((StackEntry) pageGroupStack.peek());
-		}
-		savedStackSize = pageGroupStack.size();
-	}
-
-	private void restoreStackInfo() {
-		if (savedStackSize == 0) {
-			pageGroupStack.removeAllElements();
-		} else {
-			pageGroupStack.setSize(savedStackSize - 1);
-			pageGroupStack.push(savedTopEntry);
-		}
-	}
-
-	private void loadExtendedPages(IDMPageGroup pageGroup) {
-		String wizardId = rootPageGroup.getWizardID();
-		String pageGroupId = pageGroup.getPageGroupID();
-		int length = elements.length;
-
-		for (int index = 0; index < length; index++) {
-			DMPageGroupElementImpl pageInsertGroup = new DMPageGroupElementImpl(elements[index]);
-			String pageInsertGroupId = pageInsertGroup.getPageGroupInsertionID();
-			if (pageInsertGroup.getWizardID().equals(wizardId) && (null == pageInsertGroupId || pageInsertGroupId.equals(pageGroupId))) {
-				addPageGroup(pageGroup, pageInsertGroup);
-
-				// If this page group has page then add them
-				if (pageInsertGroup.getAllowsExtendedPages()) {
-					loadExtendedPages(pageInsertGroup);
-				}
-			}
-		}
-	}
-
-	private void addPageGroup(IDMPageGroup pageGroup, IDMPageGroup insertedPageGroup) {
-		PageGroupEntry pageGroupEntry = (PageGroupEntry) groupTable.get(pageGroup.getPageGroupID());
-		PageGroupEntry nextGroupEntry = (PageGroupEntry) groupTable.get(insertedPageGroup.getPageGroupID());
-
-		if (pageGroupEntry == null) {
-			pageGroupEntry = new PageGroupEntry(pageGroup);
-			groupTable.put(pageGroup.getPageGroupID(), pageGroupEntry);
-		}
-
-		if (nextGroupEntry == null) {
-			nextGroupEntry = new PageGroupEntry(insertedPageGroup);
-			groupTable.put(insertedPageGroup.getPageGroupID(), nextGroupEntry);
-		}
-
-		pageGroupEntry.groupsThatFollow.add(nextGroupEntry);
-	}
-
-	public StackEntry findNextPageGroup(Stack stack) {
-		StackEntry topEntry = (StackEntry) stack.peek();
-		PageGroupEntry nextPageGroup = topEntry.getNextPageGroup(null);
-		int parentIndex = topEntry.parentGroupIndex;
-		int prevParentIndex = stack.size() - 1;
-
-		// Recurse up through the parents to find the next group if needed.
-		while (parentIndex != -1 && nextPageGroup == null) {
-			StackEntry parentStackEntry = (StackEntry) stack.elementAt(parentIndex);
-
-			nextPageGroup = parentStackEntry.getNextPageGroup(topEntry.getId());
-			prevParentIndex = parentIndex;
-			parentIndex = parentStackEntry.parentGroupIndex;
-			topEntry = parentStackEntry;
-		}
-
-		return nextPageGroup == null ? null : new StackEntry(nextPageGroup, prevParentIndex);
-	}
-
-	private class StackEntry {
-		public PageGroupEntry pageGroupEntry;
-		public Stack pagesReturned; // Element = Interger of page indexes.
-		public boolean pagesComplete;
-		public int parentGroupIndex;
-		public boolean ranOperations;
-
-		public StackEntry(PageGroupEntry newPageGroupEntry, int parentIndex) {
-			pageGroupEntry = newPageGroupEntry;
-			pagesReturned = new Stack();
-			pagesComplete = false;
-			parentGroupIndex = parentIndex;
-			ranOperations = false;
-		}
-
-		public StackEntry(StackEntry stackEntry) {
-			pageGroupEntry = stackEntry.pageGroupEntry;
-			pagesReturned = new Stack();
-			pagesComplete = stackEntry.pagesComplete;
-			parentGroupIndex = stackEntry.parentGroupIndex;
-			ranOperations = stackEntry.ranOperations;
-			pagesReturned.addAll(stackEntry.pagesReturned);
-		}
-
-		public String getId() {
-			return pageGroupEntry.pageGroup.getPageGroupID();
-		}
-
-		public int findNextPageIndex() {
-			int result = -1;
-
-			if (!pagesComplete) {
-				List pages = pageGroupEntry.getPages();
-
-				int pageIndex = getTopPageIndex();
-				String pageId = pageIndex == -1 ? null : ((IWizardPage) pages.get(pageIndex)).getName();
-				String expectedId = pageIndex + 1 >= pages.size() ? null : ((IWizardPage) pages.get(pageIndex + 1)).getName();
-				String newPageId = null;
-
-				try {
-					newPageId = pageGroupEntry.getPageHandler().getNextPage(pageId, expectedId);
-				} catch (Throwable exc) {
-					Logger.getLogger().logError(exc);
-				}
-
-				if (newPageId != null && newPageId.equals(IDMPageHandler.SKIP_PAGE) && pageIndex >= 0 && pageIndex < pages.size() - 2) {
-					result = pageIndex + 2;
-				} else {
-					result = pageGroupEntry.checkForSpecialIds(newPageId);
-				}
-			}
-
-			return result;
-		}
-
-		public PageGroupEntry getNextPageGroup(String afterId) {
-			PageGroupEntry result = null;
-			String nextGroupID = null;
-			String[] groupIDList = getGroupIDList();
-
-			try {
-				nextGroupID = pageGroupEntry.getPageGroupHandler().getNextPageGroup(afterId, groupIDList);
-			} catch (Throwable exc) {
-				Logger.getLogger().logError(exc);
-			}
-
-			if (nextGroupID != null) {
-				// Find this string in the list.
-				for (int index = 0; index < groupIDList.length; index++) {
-					if (groupIDList[index].equals(nextGroupID)) {
-						result = (PageGroupEntry) pageGroupEntry.groupsThatFollow.elementAt(index);
-						break;
-					}
-				}
-			}
-
-			return result;
-		}
-
-		private String[] getGroupIDList() {
-			String[] result = new String[pageGroupEntry.groupsThatFollow.size()];
-
-			for (int index = 0; index < pageGroupEntry.groupsThatFollow.size(); index++) {
-				PageGroupEntry entry = (PageGroupEntry) pageGroupEntry.groupsThatFollow.elementAt(index);
-
-				result[index] = entry.pageGroup.getPageGroupID();
-			}
-
-			return result;
-		}
-
-		private int getTopPageIndex() {
-			return pagesReturned.empty() ? -1 : ((Integer) pagesReturned.peek()).intValue();
-		}
-	}
-
-	private class PageGroupEntry {
-		public IDMPageGroup pageGroup;
-		public Vector groupsThatFollow;
-		private IDMPageHandler pageHandler;
-		private IDMPageGroupHandler pageGroupHandler;
-		private boolean initialized;
-
-		public PageGroupEntry(IDMPageGroup newPageGroup) {
-			pageGroup = newPageGroup;
-			groupsThatFollow = new Vector();
-			initialized = false;
-		}
-
-		public IDMPageHandler getPageHandler() {
-			if (!initialized)
-				init();
-
-			return pageHandler;
-		}
-
-		public IDMPageGroupHandler getPageGroupHandler() {
-			if (!initialized)
-				init();
-
-			return pageGroupHandler;
-		}
-
-		public List getPages() {
-			if (!initialized)
-				init();
-
-			return pageGroup.getPages(dataModel);
-		}
-
-		public PageGroupEntry(PageGroupEntry originalEntry) {
-			pageGroup = originalEntry.pageGroup;
-			groupsThatFollow = originalEntry.groupsThatFollow;
-			pageHandler = originalEntry.pageHandler;
-			pageGroupHandler = originalEntry.pageGroupHandler;
-		}
-
-		private void init() {
-			try {
-				pageHandler = pageGroup.getPageHandler(dataModel);
-				pageGroupHandler = pageGroup.getPageGroupHandler(dataModel);
-			} catch (Throwable exc) {
-				Logger.getLogger().logError(exc);
-			}
-
-			if (pageHandler == null)
-				pageHandler = new SimplePageHandler();
-
-			if (pageGroupHandler == null)
-				pageGroupHandler = new SimplePageGroupHandler();
-
-			initialized = true;
-		}
-
-		private int checkForSpecialIds(String pageId) {
-			int result = -1;
-
-			List pages = getPages();
-
-			if (pages.isEmpty() || pageId == null)
-				return -1;
-
-			if (pageId.startsWith(IDMPageHandler.PAGE_AFTER)) {
-				String afterID = pageId.substring(IDMPageHandler.PAGE_AFTER.length(), pageId.length());
-				result = getIndexOf(afterID);
-				result = result >= 0 && result < pages.size() - 1 ? result + 1 : -1;
-			} else if (pageId.startsWith(IDMPageHandler.PAGE_BEFORE)) {
-				String beforeID = pageId.substring(IDMPageHandler.PAGE_BEFORE.length(), pageId.length());
-				result = getIndexOf(beforeID);
-				result = result >= 1 && result < pages.size() ? result - 1 : -1;
-			} else {
-				result = getIndexOf(pageId);
-			}
-
-			return result;
-		}
-
-		private int getIndexOf(String pageId) {
-			int result = -1;
-
-			List pages = getPages();
-			for (int index = 0; index < pages.size(); index++) {
-				if (((IWizardPage) pages.get(index)).getName().equals(pageId)) {
-					result = index;
-					break;
-				}
-			}
-
-			return result;
-		}
-
-		public boolean isInitialized() {
-			return initialized;
-		}
-	}
-
-	public void storeDefaultSettings(DataModelWizard wizard) {
-		Iterator pageGroups = groupTable.values().iterator();
-		while (pageGroups.hasNext()) {
-			PageGroupEntry pageGroup = (PageGroupEntry) pageGroups.next();
-			if (pageGroup.isInitialized()) {
-				Iterator pages = pageGroup.getPages().iterator();
-				while (pages.hasNext()) {
-					IWizardPage page = (IWizardPage) pages.next();
-					wizard.storeDefaultSettings(page);
-				}
-			}
-		}
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableOperationWrapper.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableOperationWrapper.java
deleted file mode 100644
index 4b26000..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableOperationWrapper.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.operations.IUndoableOperation;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-
-public class RunnableOperationWrapper implements IRunnableWithProgress {
-
-	private IUndoableOperation undoableOperation;
-	private IStatus status;
-
-	public RunnableOperationWrapper(IUndoableOperation undoableOperation) {
-		this.undoableOperation = undoableOperation;
-	}
-
-	public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-		try {
-			status = undoableOperation.execute(monitor, null);
-			if(status.getSeverity() == IStatus.ERROR){
-				throw new InvocationTargetException(status.getException());
-			}
-		} catch (ExecutionException e) {
-			throw new InvocationTargetException(e);
-		}
-	}
-
-	public IStatus getStatus() {
-		return status;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableWithProgressWrapper.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableWithProgressWrapper.java
deleted file mode 100644
index 3df3904..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/RunnableWithProgressWrapper.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-
-import org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress;
-
-/**
- * This is a wrapper for our IHeadlessRunnableWithProgress to the IRunnableWithProgress. This class
- * needs to be used when running the operation from a IRunnableContext.
- * 
- * @see IRunnableContext
- * @see JavaUIPlugin#getRunnableWithProgress Creation date: (5/8/2001 1:28:45 PM)
- * @author: Administrator
- */
-public class RunnableWithProgressWrapper implements org.eclipse.jface.operation.IRunnableWithProgress {
-	// //$NON-NLS-1$
-	private IHeadlessRunnableWithProgress headlessRunnable;
-
-	/**
-	 * RunnableWithProgressWrapper constructor comment.
-	 */
-	public RunnableWithProgressWrapper(IHeadlessRunnableWithProgress aHeadlessRunnableWithProgress) {
-		setHeadlessRunnable(aHeadlessRunnableWithProgress);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (5/8/2001 1:29:52 PM)
-	 * 
-	 * @return com.ibm.etools.j2ee.operations.IHeadlessRunnableWithProgress
-	 */
-	protected org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress getHeadlessRunnable() {
-		return headlessRunnable;
-	}
-
-	/**
-	 * Runs this operation. Progress should be reported to the given progress monitor. This method
-	 * is usually invoked by an <code>IRunnableContext</code>'s<code>run</code> method, which
-	 * supplies the progress monitor. A request to cancel the operation should be honored and
-	 * acknowledged by throwing <code>InterruptedException</code>.
-	 * 
-	 * @param monitor
-	 *            the progress monitor to use to display progress and receive requests for
-	 *            cancelation
-	 * @exception InvocationTargetException
-	 *                if the run method must propagate a checked exception, it should wrap it inside
-	 *                an <code>InvocationTargetException</code>; runtime exceptions are
-	 *                automatically wrapped in an <code>InvocationTargetException</code> by the
-	 *                calling context
-	 * @exception InterruptedException
-	 *                if the operation detects a request to cancel, using
-	 *                <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing
-	 *                <code>InterruptedException</code>
-	 * 
-	 * @see IRunnableContext#run
-	 */
-	public void run(org.eclipse.core.runtime.IProgressMonitor monitor) throws java.lang.reflect.InvocationTargetException, java.lang.InterruptedException {
-		getHeadlessRunnable().run(monitor);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (5/8/2001 1:29:52 PM)
-	 * 
-	 * @param newHeadlessRunnable
-	 *            com.ibm.etools.j2ee.operations.IHeadlessRunnableWithProgress
-	 */
-	protected void setHeadlessRunnable(org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress newHeadlessRunnable) {
-		headlessRunnable = newHeadlessRunnable;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SaveHandlerUI.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SaveHandlerUI.java
deleted file mode 100644
index e316218..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SaveHandlerUI.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.common.frameworks.internal.ISaveHandler;
-import org.eclipse.wst.common.frameworks.internal.SaveFailedException;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-
-public class SaveHandlerUI implements ISaveHandler {
-	public static final String SAVE_FAILED = WTPCommonPlugin.getResourceString("16"); //$NON-NLS-1$
-	public static final String BEGINNING_MESSAGE = WTPCommonPlugin.getResourceString("17"); //$NON-NLS-1$
-	protected boolean isYesToAll = false;
-	protected int referenceCount = 0;
-
-	/**
-	 * SaveHandlerUI constructor comment.
-	 */
-	public SaveHandlerUI() {
-		super();
-	}
-
-	/**
-	 * access method comment.
-	 */
-	public void access() {
-		referenceCount++;
-	}
-
-	protected Shell getParentShellForDialog() {
-		if (Display.getCurrent() != null)
-			return Display.getCurrent().getActiveShell();
-
-		return null;
-	}
-
-	protected Display getDisplay() {
-		Display result = Display.getCurrent();
-		return result == null ? Display.getDefault() : result;
-	}
-
-	public void handleSaveFailed(SaveFailedException ex, IProgressMonitor monitor) {
-		if (referenceCount > 1)
-			//Let the outermost reference handle it
-			throw ex;
-		String exMsg = ex.getInnerMostNestedException() == null ? ex.getMessage() : ex.getInnerMostNestedException().getMessage();
-		final String message = BEGINNING_MESSAGE + ":\n" + exMsg;//$NON-NLS-1$
-		getDisplay().syncExec(new Runnable() {
-			public void run() {
-				MessageDialog.openError(getParentShellForDialog(), SAVE_FAILED, message);
-			}
-		});
-		if (monitor != null)
-			monitor.setCanceled(true);
-		else
-			throw ex;
-	}
-
-	protected boolean promptUserToSaveReadOnly(IFile aFile) {
-
-		String[] buttonStrings = {WTPCommonPlugin.getResourceString("Yes_UI_"), WTPCommonPlugin.getResourceString("Yes_To_All_UI_"), WTPCommonPlugin.getResourceString("No_UI_")}; //$NON-NLS-3$ = "No" //$NON-NLS-2$ = "Yes To All" //$NON-NLS-1$ = "Yes"
-		String title = WTPCommonPlugin.getResourceString("Saving_Read-Only_File_UI_"); //$NON-NLS-1$ = "Saving Read-Only File"
-		String message = WTPCommonPlugin.getResourceString("2concat_INFO_", (new Object[]{aFile.getFullPath()})); //$NON-NLS-1$ = "The file {0} is read-only and cannot be saved.  Would you like to make it editable and save anyway?"
-
-		final MessageDialog dialog = new MessageDialog(getParentShellForDialog(), title, null, // accept
-					// the
-					// default
-					// window
-					// icon
-					message, MessageDialog.QUESTION, buttonStrings, 0); // Yes is the default
-
-		final int[] ret = new int[1];
-		getDisplay().syncExec(new Runnable() {
-			public void run() {
-				dialog.setBlockOnOpen(true);
-				ret[0] = dialog.open();
-			}
-		});
-
-		switch (ret[0]) {
-			case 0 : {
-				return true;
-			}
-			case 1 : {
-				isYesToAll = true;
-				return true;
-			}
-			case 2 : {
-				return false;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * release method comment.
-	 */
-	public void release() {
-		referenceCount--;
-		if (referenceCount == 0)
-			isYesToAll = false;
-
-	}
-
-	/**
-	 * shouldContinueAndMakeFileEditable method comment.
-	 */
-	public boolean shouldContinueAndMakeFileEditable(IFile aFile) {
-		boolean yes = isYesToAll || promptUserToSaveReadOnly(aFile);
-		if (yes)
-			aFile.getResourceAttributes().setReadOnly(false);
-		return yes;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageGroupHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageGroupHandler.java
deleted file mode 100644
index c68ee57..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageGroupHandler.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageGroupHandler;
-
-public class SimplePageGroupHandler implements IDMPageGroupHandler {
-	public String getNextPageGroup(String currentPageGroupID, String[] pageGroupIDs) {
-		if (pageGroupIDs == null || pageGroupIDs.length == 0)
-			return null;
-
-		if (currentPageGroupID == null)
-			return pageGroupIDs[0];
-
-		String result = null;
-
-		for (int index = 0; index < pageGroupIDs.length; index++) {
-			if (pageGroupIDs[index].equals(currentPageGroupID)) {
-				// We found the currentPageGroupID, so we want to return the next one in the
-				// array if there is one.
-				if (index + 1 < pageGroupIDs.length) {
-					result = pageGroupIDs[index + 1];
-				} else {
-					result = null;
-				}
-
-				break;
-			}
-		}
-
-		return result;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageHandler.java
deleted file mode 100644
index 44db38f..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/SimplePageHandler.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 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
- **************************************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.wst.common.frameworks.internal.datamodel.ui.IDMPageHandler;
-
-public class SimplePageHandler implements IDMPageHandler
-{
-  public String getNextPage(String currentPageName, String expectedNextPageName) 
-  {
-    return expectedNextPageName;
-  }
-
-  public String getPreviousPage(String currentPageName, String expectedPreviousPageName) 
-  {
-	return expectedPreviousPageName;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedKeyListener.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedKeyListener.java
deleted file mode 100644
index 7f3c7b4..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedKeyListener.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.awt.event.ActionListener;
-
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseTrackListener;
-import org.eclipse.swt.widgets.Widget;
-
-/**
- * Insert the type's description here. Creation date: (8/30/2001 4:00:28 PM)
- * 
- * @author: Administrator
- */
-public class TimedKeyListener extends Timer implements KeyListener, MouseListener, MouseTrackListener, ModifyListener {
-
-	protected Widget monitoringTarget;
-
-	private final static int TIME_LIMIT = 200;
-
-	/**
-	 * J2EETimedKeyListener constructor comment.
-	 * 
-	 * @param delay
-	 *            int
-	 * @param listener
-	 *            java.awt.event.ActionListener
-	 */
-	public TimedKeyListener(int delay, ActionListener listener) {
-		super(delay, listener);
-		setRepeats(false);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (8/30/2001 4:43:33 PM)
-	 * 
-	 * @param a
-	 *            java.awt.event.ActionListener
-	 */
-	public TimedKeyListener(ActionListener listener) {
-		this(TIME_LIMIT, listener);
-	}
-
-	/**
-	 * Sent when a key is pressed on the system keyboard.
-	 * 
-	 * @param e
-	 *            an event containing information about the key press
-	 */
-	public void keyPressed(org.eclipse.swt.events.KeyEvent e) {
-	}
-
-	/**
-	 * Sent when a key is released on the system keyboard.
-	 * 
-	 * @param e
-	 *            an event containing information about the key release
-	 */
-	public void keyReleased(org.eclipse.swt.events.KeyEvent e) {
-		// Replaced with SWT.Modify -- see modifyText() in this class
-		//        monitoringTarget = (Widget) e.getSource();
-		//        restart();
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(MouseEvent)
-	 */
-	public void mouseDoubleClick(MouseEvent e) {
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseListener#mouseDown(MouseEvent)
-	 */
-	public void mouseDown(MouseEvent e) {
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseListener#mouseUp(MouseEvent)
-	 */
-	public void mouseUp(MouseEvent e) {
-		monitoringTarget = (Widget) e.getSource();
-		restart();
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseTrackListener#mouseEnter(MouseEvent)
-	 */
-	public void mouseEnter(MouseEvent e) {
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseTrackListener#mouseExit(MouseEvent)
-	 */
-	public void mouseExit(MouseEvent e) {
-	}
-
-	/**
-	 * @see org.eclipse.swt.events.MouseTrackListener#mouseHover(MouseEvent)
-	 */
-	public void mouseHover(MouseEvent e) {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.ui.util.Timer#getSource()
-	 */
-	protected Object getSource() {
-		return monitoringTarget;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
-	 */
-	public void modifyText(ModifyEvent e) {
-		monitoringTarget = (Widget) e.getSource();
-		restart();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedModifyListener.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedModifyListener.java
deleted file mode 100644
index 98045fe..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimedModifyListener.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-/**
- * This class perform the same function as the J2EETimedKeyListener but using the Modify SWT event
- * instead of the KeyUp. Creation date: (9/10/2001 11:46:51 AM)
- * 
- * @author: Administrator
- */
-import java.awt.event.ActionListener;
-
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Widget;
-
-public class TimedModifyListener extends TimedKeyListener implements ModifyListener {
-	/**
-	 * J2EETimedModefyListener constructor comment.
-	 * 
-	 * @param delay
-	 *            int
-	 * @param listener
-	 *            java.awt.event.ActionListener
-	 */
-	public TimedModifyListener(int delay, ActionListener listener) {
-		super(delay, listener);
-	}
-
-	/**
-	 * J2EETimedModefyListener constructor comment.
-	 * 
-	 * @param listener
-	 *            java.awt.event.ActionListener
-	 */
-	public TimedModifyListener(ActionListener listener) {
-		super(listener);
-	}
-
-	/*
-	 * Re/Start the timer
-	 */
-	public void modifyText(org.eclipse.swt.events.ModifyEvent e) {
-		monitoringTarget = (Widget) e.getSource();
-		restart();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/Timer.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/Timer.java
deleted file mode 100644
index 0e1f6c2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/Timer.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-
-public class Timer {
-	/**
-	 * DoPostEvent is a runnable class that fires actionEvents to the listeners on the
-	 * EventDispatchThread, via invokeLater.
-	 * 
-	 * @see #post
-	 */
-	class DoPostEvent implements Runnable {
-		public void run() {
-			if (eventQueued) {
-				fireActionPerformed(new ActionEvent(getSource(), 0, null));
-				cancelEvent();
-			}
-		}
-
-		Timer getTimer() {
-			return Timer.this;
-		}
-	}
-
-	protected ListenerList listenerList = new ListenerList();
-	boolean eventQueued = false;
-	int initialDelay, delay;
-	boolean repeats = true, coalesce = true;
-	private Runnable doPostEvent;
-	// These fields are maintained by TimerQueue.
-	// eventQueued can also be reset by the TimerQueue, but will only ever
-	// happen in applet case when TimerQueues thread is destroyed.
-	long expirationTime;
-	Timer nextTimer;
-	boolean running;
-
-	/**
-	 * Creates a Timer that will notify its listeners every <i>delay </i> milliseconds.
-	 * 
-	 * @param delay
-	 *            The number of milliseconds between listener notification
-	 * @param listener
-	 *            An initial listener
-	 * @see #setInitialDelay
-	 * @see #setRepeats
-	 */
-	public Timer(int delay, ActionListener listener) {
-		super();
-		this.delay = delay;
-		this.initialDelay = delay;
-
-		doPostEvent = new DoPostEvent();
-
-		if (listener != null) {
-			addActionListener(listener);
-		}
-	}
-
-	/**
-	 * Adds an actionListener to the Timer
-	 */
-	public void addActionListener(ActionListener listener) {
-		listenerList.add(listener);
-	}
-
-	synchronized void cancelEvent() {
-		eventQueued = false;
-	}
-
-	/**
-	 * Notify all listeners that have registered interest for notification on this event type. The
-	 * event instance is lazily created using the parameters passed into the fire method.
-	 * 
-	 * @see EventListenerList
-	 */
-	protected void fireActionPerformed(ActionEvent e) {
-		// Guaranteed to return a non-null array
-		ActionListener[] listeners = listenerList.getListenerList();
-
-		// Process the listeners last to first, notifying
-		// those that are interested in this event
-		for (int i = listeners.length - 1; i >= 0; i -= 1) {
-			listeners[i].actionPerformed(e);
-		}
-	}
-
-	/**
-	 * Returns the Timer's delay.
-	 * 
-	 * @see #setDelay
-	 */
-	public int getDelay() {
-		return delay;
-	}
-
-	/**
-	 * Returns the Timer's initial delay.
-	 * 
-	 * @see #setDelay
-	 */
-	public int getInitialDelay() {
-		return initialDelay;
-	}
-
-	/**
-	 * Returns <b>true </b> if the Timer coalesces multiple pending <b>performCommand() </b>
-	 * messages.
-	 * 
-	 * @see #setCoalesce
-	 */
-	public boolean isCoalesce() {
-		return coalesce;
-	}
-
-	/**
-	 * Returns <b>true </b> if the Timer will send a <b>actionPerformed() </b> message to its
-	 * listeners multiple times.
-	 * 
-	 * @see #setRepeats
-	 */
-	public boolean isRepeats() {
-		return repeats;
-	}
-
-	/**
-	 * Returns <b>true </b> if the Timer is running.
-	 * 
-	 * @see #start
-	 */
-	public boolean isRunning() {
-		return timerQueue().containsTimer(this);
-	}
-
-	synchronized void post() {
-		if (!eventQueued) {
-			eventQueued = true;
-			org.eclipse.swt.widgets.Display.getDefault().asyncExec(doPostEvent);
-		}
-	}
-
-	/**
-	 * Removes an ActionListener from the Timer.
-	 */
-	public void removeActionListener(ActionListener listener) {
-		listenerList.remove(listener);
-	}
-
-	/**
-	 * Restarts a Timer, canceling any pending firings, and causing it to fire with its initial
-	 * dely.
-	 */
-	public void restart() {
-		stop();
-		start();
-	}
-
-	/**
-	 * Sets whether the Timer coalesces multiple pending ActionEvent firings. A busy application may
-	 * not be able to keep up with a Timer's message generation, causing multiple
-	 * <b>actionPerformed() </b> message sends to be queued. When processed, the application sends
-	 * these messages one after the other, causing the Timer's listeners to receive a sequence of
-	 * <b>actionPerformed() </b> messages with no delay between them. Coalescing avoids this
-	 * situation by reducing multiple pending messages to a single message send. Timers coalesce
-	 * their message sends by default.
-	 */
-	public void setCoalesce(boolean flag) {
-		coalesce = flag;
-	}
-
-	/**
-	 * Sets the Timer's delay, the number of milliseconds between successive <b>actionPerfomed()
-	 * </b> messages to its listeners
-	 * 
-	 * @see #setInitialDelay
-	 */
-	public void setDelay(int delay) {
-		if (delay < 0) {
-			String msg = WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.Timer_UI_0, new Object[]{Integer.toString(delay)});
-			throw new IllegalArgumentException(msg);
-		}
-		this.delay = delay;
-	}
-
-	/**
-	 * Sets the Timer's initial delay. This will be used for the first "ringing" of the Timer only.
-	 * Subsequent ringings will be spaced using the delay property.
-	 * 
-	 * @see #setDelay
-	 */
-	public void setInitialDelay(int initialDelay) {
-		if (initialDelay < 0) {
-			String msg = WTPCommonUIResourceHandler.getString(WTPCommonUIResourceHandler.Timer_UI_1, new Object[]{Integer.toString(initialDelay)});
-			throw new IllegalArgumentException(msg);
-		}
-		this.initialDelay = initialDelay;
-	}
-
-	/**
-	 * If <b>flag </b> is <b>false </b>, instructs the Timer to send <b>actionPerformed() </b> to
-	 * its listeners only once, and then stop.
-	 */
-	public void setRepeats(boolean flag) {
-		repeats = flag;
-	}
-
-	/**
-	 * Starts the Timer, causing it to send <b>actionPerformed() </b> messages to its listeners.
-	 * 
-	 * @see #stop
-	 */
-	public void start() {
-		timerQueue().addTimer(this, System.currentTimeMillis() + getInitialDelay());
-	}
-
-	/**
-	 * Stops a Timer, causing it to stop sending <b>actionPerformed() </b> messages to its Target.
-	 * 
-	 * @see #start
-	 */
-	public void stop() {
-		timerQueue().removeTimer(this);
-		cancelEvent();
-	}
-
-	/**
-	 * Returns the timer queue.
-	 */
-	TimerQueue timerQueue() {
-		return TimerQueue.singleton();
-	}
-
-	/**
-	 * Return the source for the ActionEvent that is fired.
-	 * 
-	 * @return
-	 */
-	protected Object getSource() {
-		return this;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimerQueue.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimerQueue.java
deleted file mode 100644
index a85cf25..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/TimerQueue.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-
-
-
-class TimerQueue implements Runnable {
-	private static TimerQueue singleton;
-	Timer firstTimer;
-	boolean running;
-	private static final Object classLock = new Object();
-
-	/**
-	 * Constructor for TimerQueue.
-	 */
-	public TimerQueue() {
-		super();
-
-		// Now start the TimerQueue thread.
-		start();
-	}
-
-	synchronized void addTimer(Timer timer, long expirationTime) {
-		Timer previousTimer;
-		Timer nextTimer;
-
-		// If the Timer is already in the queue, then ignore the add.
-		if (timer.running) {
-			return;
-		}
-
-		previousTimer = null;
-		nextTimer = firstTimer;
-
-		// Insert the Timer into the linked list in the order they will
-		// expire. If two timers expire at the same time, put the newer entry
-		// later so they expire in the order they came in.
-
-		while (nextTimer != null) {
-			if (nextTimer.expirationTime > expirationTime)
-				break;
-
-			previousTimer = nextTimer;
-			nextTimer = nextTimer.nextTimer;
-		}
-
-		if (previousTimer == null) {
-			firstTimer = timer;
-		} else {
-			previousTimer.nextTimer = timer;
-		}
-
-		timer.expirationTime = expirationTime;
-		timer.nextTimer = nextTimer;
-		timer.running = true;
-		notify();
-	}
-
-	synchronized boolean containsTimer(Timer timer) {
-		return timer.running;
-	}
-
-	/**
-	 * If there are a ton of timers, this method may never return. It loops checking to see if the
-	 * head of the Timer list has expired. If it has, it posts the Timer and reschedules it if
-	 * necessary.
-	 */
-	synchronized long postExpiredTimers() {
-		Timer timer;
-		long currentTime;
-		long timeToWait;
-
-		// The timeToWait we return should never be negative and only be zero
-		// when we have no Timers to wait for.
-
-		do {
-			timer = firstTimer;
-			if (timer == null)
-				return 0;
-
-			currentTime = System.currentTimeMillis();
-			timeToWait = timer.expirationTime - currentTime;
-
-			if (timeToWait <= 0) {
-				try {
-					timer.post(); // have timer post an event
-				} catch (SecurityException e) {
-				}
-
-				// Remove the timer from the queue
-				removeTimer(timer);
-
-				// This tries to keep the interval uniform at
-				// the cost of drift.
-				if (timer.isRepeats()) {
-					addTimer(timer, currentTime + timer.getDelay());
-				}
-			}
-
-			// Allow other threads to call addTimer() and removeTimer()
-			// even when we are posting Timers like mad. Since the wait()
-			// releases the lock, be sure not to maintain any state
-			// between iterations of the loop.
-
-			try {
-				wait(1);
-			} catch (InterruptedException e) {
-			}
-		} while (timeToWait <= 0);
-
-		return timeToWait;
-	}
-
-	synchronized void removeTimer(Timer timer) {
-		Timer previousTimer;
-		Timer nextTimer;
-		boolean found;
-
-		if (!timer.running)
-			return;
-
-		previousTimer = null;
-		nextTimer = firstTimer;
-		found = false;
-
-		while (nextTimer != null) {
-			if (nextTimer == timer) {
-				found = true;
-				break;
-			}
-
-			previousTimer = nextTimer;
-			nextTimer = nextTimer.nextTimer;
-		}
-
-		if (!found)
-			return;
-
-		if (previousTimer == null) {
-			firstTimer = timer.nextTimer;
-		} else {
-			previousTimer.nextTimer = timer.nextTimer;
-		}
-
-		timer.expirationTime = 0;
-		timer.nextTimer = null;
-		timer.running = false;
-	}
-
-	public synchronized void run() {
-		long timeToWait;
-
-		try {
-			while (running) {
-				timeToWait = postExpiredTimers();
-				try {
-					wait(timeToWait);
-				} catch (InterruptedException e) {
-				}
-			}
-		} catch (ThreadDeath td) {
-			running = false;
-			// Mark all the timers we contain as not being queued.
-			Timer timer = firstTimer;
-			while (timer != null) {
-				timer.eventQueued = false;
-				timer = timer.nextTimer;
-			}
-			synchronized (this) {
-				if (!this.running)
-					start();
-			}
-			throw td;
-		}
-	}
-
-	public static TimerQueue singleton() {
-		if (singleton == null)
-			synchronized (classLock) {
-				singleton = new TimerQueue();
-			}
-		return singleton;
-	}
-
-	synchronized void start() {
-		if (running) {
-			throw new RuntimeException(WTPCommonUIResourceHandler.TimerQueue_ERROR_0);
-		}
-		Thread timerThread = new Thread(this, "TimerQueue");//$NON-NLS-1$
-		try {
-			timerThread.setDaemon(true);
-		} catch (SecurityException e) {
-		}
-		timerThread.start();
-		running = true;
-	}
-
-	synchronized void stop() {
-		running = false;
-		notify();
-	}
-
-	public synchronized String toString() {
-		StringBuffer buf;
-		Timer nextTimer;
-
-		buf = new StringBuffer();
-		buf.append("TimerQueue (");//$NON-NLS-1$
-
-		nextTimer = firstTimer;
-		while (nextTimer != null) {
-			buf.append(nextTimer.toString());
-
-			nextTimer = nextTimer.nextTimer;
-			if (nextTimer != null)
-				buf.append(", ");//$NON-NLS-1$
-		}
-
-		buf.append(")");//$NON-NLS-1$
-		return buf.toString();
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementIdentifier.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementIdentifier.java
deleted file mode 100644
index af51b65..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementIdentifier.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 12, 2004
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.ui.activities.IActivityManager;
-import org.eclipse.ui.activities.IIdentifier;
-import org.eclipse.ui.activities.IIdentifierListener;
-import org.eclipse.ui.activities.IdentifierEvent;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementIdentifier;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementIdentifierEvent;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementManager;
-
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-class UIEnablementIdentifier extends EnablementIdentifier implements IIdentifierListener {
-
-	private IIdentifier activityIdentifier;
-
-	/**
-	 * @param id
-	 * @param project
-	 */
-	public UIEnablementIdentifier(String id, IProject project) {
-		super(id, project);
-		IActivityManager manager = getActivityManager();
-		if (manager != null) {
-			activityIdentifier = getActivityManager().getIdentifier(id);
-			activityIdentifier.addIdentifierListener(this);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.activities.IIdentifierListener#identifierChanged(org.eclipse.ui.activities.IdentifierEvent)
-	 */
-	public void identifierChanged(IdentifierEvent identifierEvent) {
-		boolean enabledChanged = resetEnabled();
-		EnablementIdentifierEvent evt = new EnablementIdentifierEvent(this, false, enabledChanged);
-		fireIdentifierChanged(evt);
-	}
-
-	protected IActivityManager getActivityManager() {
-		return ((UIEnablementManager) IEnablementManager.INSTANCE).getActivityManager();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclispe.wst.common.frameworks.internal.enablement.EnablementIdentifier#getNewEnabled()
-	 */
-	protected boolean getNewEnabled() {
-		IIdentifier identifier = getActivityIdentifier();
-		if (identifier != null)
-			return identifier.isEnabled() && super.getNewEnabled();
-		else
-			return false;
-	}
-
-	
-	protected IIdentifier getActivityIdentifier() {
-		if (activityIdentifier == null){
-			IActivityManager manager = getActivityManager();
-			if (manager != null) {
-				activityIdentifier = getActivityManager().getIdentifier(getId());
-				activityIdentifier.addIdentifierListener(this);
-			}
-		}
-		return activityIdentifier;
-	}
-
-
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementManager.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementManager.java
deleted file mode 100644
index b8de6a4..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIEnablementManager.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 3, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.activities.IActivityManager;
-import org.eclipse.ui.activities.IWorkbenchActivitySupport;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementIdentifier;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementManager;
-
-/**
- * @author mdelder
- */
-public class UIEnablementManager extends EnablementManager {
-
-	private IWorkbenchActivitySupport activitySupport = null;
-
-	public UIEnablementManager() {
-		super();
-	}
-
-	protected IActivityManager getActivityManager() {
-		if (getActivitySupport() != null)
-			return getActivitySupport().getActivityManager();
-		else
-			return null;
-	}
-
-	/**
-	 * @return Returns the activitySupport.
-	 */
-	protected IWorkbenchActivitySupport getActivitySupport() {
-		if (activitySupport == null)
-			activitySupport = initActivitySupport();
-		return activitySupport;
-	}
-
-	private IWorkbenchActivitySupport initActivitySupport() {
-		IWorkbench work = null;
-		try {
-			work = PlatformUI.getWorkbench();
-		} catch (IllegalStateException ex) {
-			//Not initialized yet
-		}
-		return (work != null) ? work.getActivitySupport() : null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.enablement.EnablementManager#createIdentifier(java.lang.String,
-	 *      org.eclipse.core.resources.IProject)
-	 */
-	protected EnablementIdentifier createIdentifier(String identifierId, IProject project) {
-		return new UIEnablementIdentifier(identifierId, project);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIOperationHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIOperationHandler.java
deleted file mode 100644
index 53ccd53..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UIOperationHandler.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Aug 5, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.common.frameworks.internal.operations.IOperationHandler;
-
-
-/**
- * @author dfholt
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Generation - Code and Comments
- */
-public class UIOperationHandler implements IOperationHandler {
-	protected Shell parentShell;
-	final public static String DEFAULT_INFORMATION = "Information"; //$NON-NLS-1$
-	final public static String DEFAULT_ERROR = "Error"; //$NON-NLS-1$
-	final public static String DEFAULT_CONFIRM = "Confirm"; //$NON-NLS-1$
-	protected String informationTitle = DEFAULT_INFORMATION;
-	protected String confirmTitle = DEFAULT_CONFIRM;
-	protected String errorTitle = DEFAULT_ERROR;
-
-	/**
-	 * UIOperationHandler constructor comment.
-	 */
-	public UIOperationHandler() {
-		super();
-	}
-
-	/**
-	 * UIOperationHandler constructor comment.
-	 */
-	public UIOperationHandler(Shell parent) {
-		super();
-		parentShell = parent;
-	}
-
-	/**
-	 * A decision needs to made as to whether an action/operation can continue
-	 */
-	public boolean canContinue(String message) {
-		return MessageDialog.openQuestion(getParentShell(), getConfirmTitle(), message);
-	}
-
-	/**
-	 * A decision needs to made as to whether an action/operation can continue
-	 */
-	public boolean canContinue(String message, String[] items) {
-		return ListMessageDialog.openQuestion(getParentShell(), getConfirmTitle(), message, items);
-	}
-
-	/**
-	 * A decision needs to made as to whether an action/operation can continue. The boolean array
-	 * will return two booleans. The first indicates their response to the original question and the
-	 * second indicates if they selected the apply to all check box.
-	 * 
-	 * Return the return code for the dialog. 0 = Yes, 1 = Yes to all, 2 = No
-	 */
-	public int canContinueWithAllCheck(String message) {
-		MessageDialog dialog = new MessageDialog(getParentShell(), getConfirmTitle(), null, // accept
-					// the
-					// default
-					// window
-					// icon
-					message, MessageDialog.QUESTION, new String[]{IDialogConstants.YES_LABEL, IDialogConstants.YES_TO_ALL_LABEL, IDialogConstants.NO_LABEL}, 1); // yes
-		// is
-		// the
-		// default
-		return dialog.open();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.ibm.etools.j2ee.operations.IOperationHandler#canContinueWithAllCheckAllowCancel(java.lang.String)
-	 */
-	public int canContinueWithAllCheckAllowCancel(String message) {
-		MessageDialog dialog = new MessageDialog(getParentShell(), getConfirmTitle(), null, // accept
-					// the
-					// default
-					// window
-					// icon
-					message, MessageDialog.QUESTION, new String[]{IDialogConstants.YES_LABEL, IDialogConstants.YES_TO_ALL_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL}, 1); // yes
-		// is
-		// the
-		// default
-		return dialog.open();
-	}
-
-	/**
-	 * An error has occurred
-	 */
-	public void error(String message) {
-		MessageDialog.openError(getParentShell(), getErrorTitle(), message);
-	}
-
-	/**
-	 * The dialog title to be used for confirmations
-	 */
-	public java.lang.String getConfirmTitle() {
-		return confirmTitle;
-	}
-
-	/**
-	 * The dialog title to be used for errors
-	 */
-	public java.lang.String getErrorTitle() {
-		return errorTitle;
-	}
-
-	/**
-	 * The dialog title to be used for information
-	 */
-	public java.lang.String getInformationTitle() {
-		return informationTitle;
-	}
-
-	public Shell getParentShell() {
-		if (parentShell == null)
-			parentShell = WTPUIPlugin.getPluginWorkbench().getActiveWorkbenchWindow().getShell();
-
-		return parentShell;
-	}
-
-	/**
-	 * An informational message needs to be presented
-	 */
-	public void inform(String message) {
-		MessageDialog.openInformation(getParentShell(), getInformationTitle(), message);
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (8/9/2001 11:51:36 AM)
-	 * 
-	 * @param newConfirmTitle
-	 *            java.lang.String
-	 */
-	public void setConfirmTitle(java.lang.String newConfirmTitle) {
-		confirmTitle = newConfirmTitle;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (8/9/2001 11:51:36 AM)
-	 * 
-	 * @param newErrorTitle
-	 *            java.lang.String
-	 */
-	public void setErrorTitle(java.lang.String newErrorTitle) {
-		errorTitle = newErrorTitle;
-	}
-
-	/**
-	 * Insert the method's description here. Creation date: (8/9/2001 11:51:36 AM)
-	 * 
-	 * @param newInformationTitle
-	 *            java.lang.String
-	 */
-	public void setInformationTitle(java.lang.String newInformationTitle) {
-		informationTitle = newInformationTitle;
-	}
-
-	/**
-	 * @see com.ibm.etools.j2ee.operations.IOperationHandler#getContext()
-	 */
-	public Object getContext() {
-		return getParentShell();
-	}
-
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UITesterImpl.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UITesterImpl.java
deleted file mode 100644
index 695fdd3..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/UITesterImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Oct 27, 2003
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.jem.util.UITester;
-import org.eclipse.ui.PlatformUI;
-
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public class UITesterImpl implements UITester {
-
-	/**
-	 *  
-	 */
-	public UITesterImpl() {
-		super();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.UITester#isCurrentContextUI()
-	 */
-	public boolean isCurrentContextUI() {
-		try {
-			return PlatformUI.isWorkbenchRunning() || PlatformUI.getWorkbench().isClosing();
-		} catch (Exception e) {
-			//Ignore, workbench must not be running
-			return false;
-		}
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ValidationStatus.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ValidationStatus.java
deleted file mode 100644
index 71c5673..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/ValidationStatus.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.swt.widgets.Control;
-
-/**
- * This object encompas a set of Validation status Creation date: (9/10/2001 5:35:12 PM)
- * 
- * @author: Administrator
- */
-public class ValidationStatus {
-
-	// TODO make all these vars private and change errMsgs & errStatus to maps so the same methods
-	// can be used as with warnings & info
-	Hashtable errMsgs = new Hashtable();
-	Hashtable errStatus = new Hashtable();
-	Hashtable tControls = new Hashtable();
-	Map warnMsgs;
-	Map warnStatus;
-	Map infoMsgs;
-	Map infoStatus;
-
-	/**
-	 * ValidationStatus constructor comment.
-	 */
-	public ValidationStatus() {
-		super();
-	}
-
-	/*
-	 * Look for any error. If there is more than one, return errors according to their key. i.e.,
-	 * lower key errors will be returned first.
-	 */
-	public String getLastErrMsg() {
-		//TODO once ivars are changed to maps, pass this to getLastMsg()
-		Enumeration e = errStatus.keys();
-		String[] errs = new String[errStatus.size()];
-		for (int i = 0; i < errs.length; i++)
-			errs[i] = null;
-		boolean foundOne = false;
-		while (e.hasMoreElements()) {
-			Integer key = (Integer) e.nextElement();
-			if (!((Boolean) errStatus.get(key)).booleanValue()) {
-				errs[key.intValue() % errs.length] = (String) errMsgs.get(key);
-				foundOne = true;
-			}
-		}
-		if (foundOne)
-			for (int i = 0; i < errs.length; i++)
-				if (errs[i] != null)
-					return errs[i];
-		return null;
-	}
-
-	private Map getWarningMsgs() {
-		if (warnMsgs == null)
-			warnMsgs = new HashMap();
-		return warnMsgs;
-	}
-
-	private Map getWarningStatusMap() {
-		if (warnStatus == null)
-			warnStatus = new HashMap();
-		return warnStatus;
-	}
-
-	private Map getInfoMsgs() {
-		if (infoMsgs == null)
-			infoMsgs = new HashMap();
-		return infoMsgs;
-	}
-
-	private Map getInfoStatusMap() {
-		if (infoStatus == null)
-			infoStatus = new HashMap();
-		return infoStatus;
-	}
-
-	public String getLastWarningMsg() {
-		return getLastMsg(warnStatus, warnMsgs);
-	}
-
-	public String getLastInfoMsg() {
-		return getLastMsg(infoStatus, infoMsgs);
-	}
-
-	/*
-	 * Look for any status. If there is more than one, return status according to their key. i.e.,
-	 * lower key status will be returned first.
-	 */
-	private String getLastMsg(Map statusMap, Map msgMap) {
-		if (statusMap == null)
-			return null;
-		Iterator e = statusMap.keySet().iterator();
-		String[] infos = new String[statusMap.size()];
-		for (int i = 0; i < infos.length; i++)
-			infos[i] = null;
-		boolean foundOne = false;
-		while (e.hasNext()) {
-			Integer key = (Integer) e.next();
-			if (!((Boolean) statusMap.get(key)).booleanValue()) {
-				infos[key.intValue() % infos.length] = (String) msgMap.get(key);
-				foundOne = true;
-			}
-		}
-		if (foundOne)
-			for (int i = 0; i < infos.length; i++)
-				if (infos[i] != null)
-					return infos[i];
-		return null;
-	}
-
-	public String getLastErrMsgAndFocus() {
-
-		Enumeration e = errStatus.keys();
-
-		Integer theOne = null;
-		while (e.hasMoreElements()) {
-			Integer key = (Integer) e.nextElement();
-			if (!((Boolean) errStatus.get(key)).booleanValue()) {
-				if (theOne == null || key.intValue() < theOne.intValue()) {
-					theOne = key;
-				}
-			}
-		}
-		if (theOne != null) {
-			Control control = (Control) tControls.get(theOne);
-			if (control != null) {
-				control.setFocus();
-			}
-			return ((String) errMsgs.get(theOne));
-		}
-		return null;
-	}
-
-	public boolean hasError(Integer key) {
-		Boolean stat = (Boolean) errStatus.get(key);
-		if (stat != null)
-			return stat.booleanValue();
-		return true;
-	}
-
-	public void setControl(Integer key, Control control) {
-		tControls.put(key, control);
-	}
-
-	public void setErrorStatus(Integer key, Boolean status, String msg) {
-		errMsgs.put(key, msg);
-		errStatus.put(key, status);
-	}
-
-	public void setErrorStatus(Integer key, String msg) {
-		errMsgs.put(key, msg);
-		errStatus.put(key, new Boolean(false));
-	}
-
-	public void setWarningStatus(Integer key, String msg) {
-		getWarningMsgs().put(key, msg);
-		getWarningStatusMap().put(key, new Boolean(false));
-	}
-
-	public void setInfoStatus(Integer key, String msg) {
-		getInfoMsgs().put(key, msg);
-		getInfoStatusMap().put(key, new Boolean(false));
-	}
-
-	public void setOKStatus(Integer key) {
-		errMsgs.put(key, ""); //$NON-NLS-1$
-		errStatus.put(key, new Boolean(true));
-		if (warnMsgs != null)
-			warnMsgs.put(key, ""); //$NON-NLS-1$
-		if (warnStatus != null)
-			warnStatus.put(key, new Boolean(true));
-		if (infoMsgs != null)
-			infoMsgs.put(key, ""); //$NON-NLS-1$
-		if (infoStatus != null)
-			infoStatus.put(key, new Boolean(true));
-	}
-
-	public void setStatus(Integer key, boolean ok, String msg) {
-		errMsgs.put(key, msg);
-		errStatus.put(key, new Boolean(ok));
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityBridgeHelperImpl.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityBridgeHelperImpl.java
deleted file mode 100644
index a8440eb..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityBridgeHelperImpl.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on May 4, 2004
- * 
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.ui.IPluginContribution;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.activities.IActivityManager;
-import org.eclipse.ui.activities.IIdentifier;
-import org.eclipse.ui.activities.IWorkbenchActivitySupport;
-import org.eclipse.ui.activities.WorkbenchActivityHelper;
-import org.eclipse.wst.common.frameworks.internal.activities.WTPActivityBridgeHelper;
-
-
-/**
- * @author jsholl
- *  
- */
-public class WTPActivityBridgeHelperImpl implements WTPActivityBridgeHelper {
-
-	private IWorkbenchActivitySupport workbenchActivitySupport = null;
-	private IActivityManager activityManager = null;
-
-	public WTPActivityBridgeHelperImpl() {
-		workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();
-		activityManager = workbenchActivitySupport.getActivityManager();
-	}
-
-	public void enableActivity(String activityID, boolean enabled) {
-		Set enabledActivities = activityManager.getEnabledActivityIds();
-		Set newEnabledActivities = null;
-		if (enabled && !enabledActivities.contains(activityID)) {
-			newEnabledActivities = new HashSet();
-			newEnabledActivities.addAll(enabledActivities);
-			newEnabledActivities.add(activityID);
-		}
-		if (!enabled && enabledActivities.contains(activityID)) {
-			newEnabledActivities = new HashSet();
-			newEnabledActivities.addAll(enabledActivities);
-			newEnabledActivities.remove(activityID);
-		}
-		if (null != newEnabledActivities) {
-			workbenchActivitySupport.setEnabledActivityIds(newEnabledActivities);
-		}
-	}
-
-	public Set getEnabledActivityIds() {
-		return activityManager.getEnabledActivityIds();
-	}
-
-	public void setEnabledActivityIds(Set activityIDs) {
-		workbenchActivitySupport.setEnabledActivityIds(activityIDs);
-	}
-
-	public Set getActivityIDsFromContribution(final String localID, final String pluginID) {
-		IIdentifier identifier = activityManager.getIdentifier(WorkbenchActivityHelper.createUnifiedId(new IPluginContribution() {
-			public String getLocalId() {
-				return localID;
-			}
-
-			public String getPluginId() {
-				return pluginID;
-			}
-		}));
-		return identifier.getActivityIds();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityHelper.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityHelper.java
deleted file mode 100644
index 37a0221..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPActivityHelper.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on Apr 9, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.ui.IPluginContribution;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.activities.IIdentifier;
-import org.eclipse.ui.activities.IWorkbenchActivitySupport;
-
-/**
- * @author jsholl
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class WTPActivityHelper {
-
-	/**
-	 * @return whether the UI is set up to filter contributions (has defined activity categories).
-	 */
-	public static final boolean isFiltering() {
-		return !PlatformUI.getWorkbench().getActivitySupport().getActivityManager().getDefinedActivityIds().isEmpty();
-	}
-
-	public static boolean allowUseOf(Object object) {
-		if (!isFiltering())
-			return true;
-		if (object instanceof IPluginContribution) {
-			IPluginContribution contribution = (IPluginContribution) object;
-			if (contribution.getPluginId() != null) {
-				IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();
-				IIdentifier identifier = workbenchActivitySupport.getActivityManager().getIdentifier(createUnifiedId(contribution));
-				return identifier.isEnabled();
-			}
-		}
-		return true;
-	}
-
-
-	public static final String createUnifiedId(IPluginContribution contribution) {
-		if (contribution.getPluginId() != null)
-			return contribution.getPluginId() + '/' + contribution.getLocalId();
-		return contribution.getLocalId();
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPCommonUIResourceHandler.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPCommonUIResourceHandler.java
deleted file mode 100644
index 0394fdf..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPCommonUIResourceHandler.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on May 23, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @author vijayb
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Style - Code Templates
- */
-public class WTPCommonUIResourceHandler extends NLS {
-	private static final String BUNDLE_NAME = "wtpcommonui";//$NON-NLS-1$
-
-	private WTPCommonUIResourceHandler() {
-		// Do not instantiate
-	}
-
-	public static String Project_location_;
-	public static String WTPOperationAction_UI_1;
-	public static String MasterDescriptor_UI_1;
-	public static String WTPOptionalOperationDataModel_UI_1;
-	public static String WTPOperationAction_UI_0;
-	public static String WTPOptionalOperationDataModel_UI_0;
-	public static String MULTIPLE_MODULE_PREF_TEXT;
-	public static String IActionWTPOperation_UI_0;
-	public static String MasterDescriptor_ERROR_2;
-	public static String Name_;
-	public static String WTPWizard_UI_0;
-	public static String WTPWizard_UI_1;
-	public static String WTPWizard_UI_2;
-	public static String Browse_;
-	public static String ExtendableWizard_UI_0;
-	public static String ExtendedWizardPage_ERROR_1;
-	public static String ExtendedWizardPage_ERROR_0;
-	public static String WTPActionDialog_UI_0;
-	public static String TimerQueue_ERROR_0;
-	public static String Timer_UI_1;
-	public static String Timer_UI_0;
-	public static String WizardPageExtensionManager_UI_4;
-	public static String WizardPageExtensionManager_UI_3;
-	public static String WizardPageExtensionManager_UI_2;
-	public static String WizardPageExtensionManager_UI_1;
-	public static String WizardPageExtensionManager_UI_0;
-	public static String Delete_UI_0;
-
-	static {
-		NLS.initializeMessages(BUNDLE_NAME, WTPCommonUIResourceHandler.class);
-	}
-
-	public static String getString(String key, Object[] args) {
-		return NLS.bind(key, args);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPGenericActionIds.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPGenericActionIds.java
deleted file mode 100644
index faaa453..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPGenericActionIds.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on Jun 16, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-/**
- * @author mdelder
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Style - Code Templates
- */
-public interface WTPGenericActionIds {
-
-	String CUT = "org.eclipse.wst.common.generic.Cut"; //$NON-NLS-1$
-	String COPY = "org.eclipse.wst.common.generic.Copy"; //$NON-NLS-1$
-	String PASTE = "org.eclipse.wst.common.generic.Paste"; //$NON-NLS-1$
-	String RENAME = "org.eclipse.wst.common.generic.Rename"; //$NON-NLS-1$
-	String DELETE = "org.eclipse.wst.common.generic.Delete"; //$NON-NLS-1$
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPUIPlugin.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPUIPlugin.java
deleted file mode 100644
index 75bbbf2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WTPUIPlugin.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.eclipse.core.commands.operations.IUndoableOperation;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class WTPUIPlugin extends AbstractUIPlugin {
-
-	public static final String PLUGIN_ID = "org.eclipse.wst.common.frameworks.ui"; //$NON-NLS-1$
-	public static final String EXTENDED_VIEWER_REGISTRY_EXTENSION_POINT = "extendedViewer"; //$NON-NLS-1$
-	// The shared instance.
-	private static WTPUIPlugin plugin;
-	// Resource bundle.
-	private ResourceBundle resourceBundle;
-
-	/**
-	 * The constructor.
-	 */
-	public WTPUIPlugin() {
-		super();
-		plugin = this;
-		try {
-			resourceBundle = ResourceBundle.getBundle("org.eclipse.wst.common.frameworks.internal.ui.WTPUIPluginResources"); //$NON-NLS-1$
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
-	}
-
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createErrorStatus(String message) {
-		return createErrorStatus(message, null);
-	}
-
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createErrorStatus(String message, Throwable exception) {
-		return new Status(IStatus.ERROR, PLUGIN_ID, -1, message, exception);
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static WTPUIPlugin getDefault() {
-		return plugin;
-	}
-
-	public static Logger getLogger() {
-		return Logger.getLogger(PLUGIN_ID);
-	}
-
-	/**
-	 * Returns the workspace instance.
-	 */
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	/**
-	 * Return the workbench
-	 * 
-	 * This method is internal to the j2ee plugin and must not be called by any other plugins.
-	 */
-
-	public static IWorkbench getPluginWorkbench() {
-		return getDefault().getWorkbench();
-
-	}
-
-	public static RunnableOperationWrapper getRunnableWithProgress(final IUndoableOperation operation) {
-		return new RunnableOperationWrapper(operation);
-	}
-
-	public static IRunnableWithProgress getRunnableWithProgress(IHeadlessRunnableWithProgress aHeadlessRunnableWithProgress) {
-		return new RunnableWithProgressWrapper(aHeadlessRunnableWithProgress);
-	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle, or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle bundle = WTPUIPlugin.getDefault().getResourceBundle();
-		try {
-			return (bundle != null ? bundle.getString(key) : key);
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		return resourceBundle;
-	}
-    
-    public static void log( final Throwable e )
-    {
-        final String msg = e.getMessage() + ""; //$NON-NLS-1$
-        log( new Status( IStatus.ERROR, PLUGIN_ID, IStatus.OK, msg, e ) );
-    }
-
-    public static void log( final IStatus status )
-    {
-        getDefault().getLog().log( status );
-    }
-    
-    public static void log( final String msg )
-    {
-        log( new Status( IStatus.ERROR, PLUGIN_ID, IStatus.OK, msg, null ) );
-    }
-    
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WorkspaceModifyComposedOperation.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WorkspaceModifyComposedOperation.java
deleted file mode 100644
index fed29fc..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/WorkspaceModifyComposedOperation.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.ui;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-
-/**
- * An operation which delegates its work to a runnable that modifies the workspace.
- * <p>
- * This class may be instantiated; it is not intended to be subclassed.
- * </p>
- */
-public class WorkspaceModifyComposedOperation extends org.eclipse.ui.actions.WorkspaceModifyOperation {
-	protected List fRunnables;
-
-	public WorkspaceModifyComposedOperation(ISchedulingRule rule) {
-		super(rule);
-	}
-
-	/**
-	 * Creates a new operation which will delegate its work to the given runnable.
-	 */
-	public WorkspaceModifyComposedOperation() {
-		super();
-	}
-
-	public WorkspaceModifyComposedOperation(ISchedulingRule rule, List nestedRunnablesWithProgress) {
-		super(rule);
-		fRunnables = nestedRunnablesWithProgress;
-	}
-
-	public WorkspaceModifyComposedOperation(List nestedRunnablesWithProgress) {
-		super();
-		fRunnables = nestedRunnablesWithProgress;
-	}
-
-	/**
-	 * Creates a new operation which will delegate its work to the given runnable.
-	 * 
-	 * @param content
-	 *            the runnable to delegate to when this operation is executed
-	 */
-	public WorkspaceModifyComposedOperation(IRunnableWithProgress nestedOp) {
-		super();
-		getRunnables().add(nestedOp);
-	}
-
-	public boolean addRunnable(IRunnableWithProgress nestedOp) {
-		return getRunnables().add(nestedOp);
-	}
-
-	protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-		int size = fRunnables.size();
-		monitor.beginTask("", size);//$NON-NLS-1$
-		for (int i = 0; i < fRunnables.size(); i++) {
-			IRunnableWithProgress op = (IRunnableWithProgress) fRunnables.get(i);
-			op.run(new SubProgressMonitor(monitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
-		}
-	}
-
-	protected List getRunnables() {
-		if (fRunnables == null)
-			fRunnables = new ArrayList(3);
-		return fRunnables;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.html b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.html
deleted file mode 100644
index fb8fe10..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<html>
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
-<title>wtp operation api overview</title>
-</head>
-<body>
-<p>
-			The WTP Wizard API allows clients to build wizards in conjunction with
-			the WTP Operation Framework quickly and with minimal effort.
-		</p>
-<table width="500">
-<tr>
-<td>
-<p>Under Construction.</p>
-</td>
-</tr>
-</table>
-<table cellpadding="10" cellspacing="10">
-<tr>
-<td>
-<p>
-<img src="escape_out_to_source_folder level/overview/your_image.jpg"></p>
-</td>
-</tr>
-<tr>
-<td>
-<p>
-<i>Figure 1: Image description</i>
-</p>
-</td>
-</tr>
-</table>
-</body>
-</html>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.xml b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.xml
deleted file mode 100644
index e217a53..0000000
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/package.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html>
-	<head>
-		<meta
-			name="root"
-			content="../../../../../../" />
-		<title>wtp operation api overview</title>
-	</head>
-
-	<body>
-		<abstract>
-			The WTP Wizard API allows clients to build wizards in conjunction with
-			the WTP Operation Framework quickly and with minimal effort.
-		</abstract>
-		<p>Under Construction.</p>
-		<img src="escape_out_to_source_folder level/overview/your_image.jpg" caption="Image description" />
-	</body>
-</html>
diff --git a/plugins/org.eclipse.wst.common.frameworks/.classpath b/plugins/org.eclipse.wst.common.frameworks/.classpath
deleted file mode 100644
index 2bf4212..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/"/>
-	<classpathentry kind="src" path="src-non_workbench/"/>
-	<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/plugins/org.eclipse.wst.common.frameworks/.cvsignore b/plugins/org.eclipse.wst.common.frameworks/.cvsignore
deleted file mode 100644
index 59285f6..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/.cvsignore
+++ /dev/null
@@ -1,10 +0,0 @@
-bin
-build.xml
-temp.folder
-common_core.jar
-common.jar
-common_coresrc.zip
-commonsrc.zip
-@dot
-src.zip
-javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.frameworks/.options b/plugins/org.eclipse.wst.common.frameworks/.options
deleted file mode 100644
index 2eaab8a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/.options
+++ /dev/null
@@ -1,3 +0,0 @@
-org.eclipse.wtp.common/debug/logtrace=false
-org.eclipse.wtp.common/debug/logtracefile=false
-org.eclipse.wtp.common/debug/loglevel=WARNING
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/.project b/plugins/org.eclipse.wst.common.frameworks/.project
deleted file mode 100644
index 30f458a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.frameworks</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.wst.common.frameworks/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.frameworks/META-INF/MANIFEST.MF
deleted file mode 100644
index 202e404..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,24 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.wst.common.frameworks; singleton:=true
-Bundle-Version: 1.1.1.qualifier
-Bundle-Activator: org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin
-Bundle-Vendor: %provider
-Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.common.frameworks.datamodel,
- org.eclipse.wst.common.frameworks.datamodel.properties,
- org.eclipse.wst.common.frameworks.internal;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.activities;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.datamodel;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.enablement;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.enablement.nonui;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.operations;x-internal:=true,
- org.eclipse.wst.common.frameworks.internal.plugin;x-internal:=true
-Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.commands;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.wst.common.environment;bundle-version="[1.0.100,1.1.0)";visibility:=reexport,
- org.eclipse.emf.ecore;bundle-version="[2.2.0,2.3.0)"
-Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.wst.common.frameworks/about.html b/plugins/org.eclipse.wst.common.frameworks/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/plugins/org.eclipse.wst.common.frameworks/build.properties b/plugins/org.eclipse.wst.common.frameworks/build.properties
deleted file mode 100644
index 4701114..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/build.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 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
-###############################################################################
-bin.includes = plugin.xml,\
-               .options,\
-               META-INF/,\
-               plugin.properties,\
-               about.html,\
-               .
-jars.compile.order = .
-src.includes = schema/,\
-               component.xml
-output.. = bin/
-source.. = src-non_workbench/,\
-           src/
diff --git a/plugins/org.eclipse.wst.common.frameworks/component.xml b/plugins/org.eclipse.wst.common.frameworks/component.xml
deleted file mode 100644
index 761526a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/component.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component  xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.wst.common.frameworks">
-  <description url=""></description>
-  <component-depends unrestricted="true"></component-depends>
-  <plugin id="org.eclipse.wst.common.frameworks" fragment="false"/>
-  <plugin id="org.eclipse.wst.common.frameworks.ui" fragment="false"/>
-  <plugin id="org.eclipse.wst.common.environment" fragment="false"/>
-
-  <package name="org.eclipse.wst.common.environment">
-    <type name="Choice" subclass="false" instantiate="false" />
-    <type name="EnvironmentException" subclass="false" instantiate="false" />
-    <type name="EnvironmentService" subclass="false" instantiate="false" />
-    <type name="IEnvironment" implement="false" />
-    <type name="ILog" implement="false" />
-    <type name="IStatusHandler" implement="false" />
-    <type name="NullStatusHandler" subclass="false" instantiate="false" />
-    <type name="StatusException" subclass="false" instantiate="false" />
-  </package>
- 
-  <package name="org.eclipse.wst.common.environment.uri">
-    <type name="IURI" implement="false" />
-    <type name="IURIFactory" implement="false" />
-    <type name="IURIFilter" implement="false" />
-    <type name="IURIScheme" implement="false" />
-    <type name="IURIVisitor" implement="false" />
-    <type name="SimpleURIFactory" subclass="false" instantiate="false" />
-    <type name="URIException" subclass="false" instantiate="false" />
-  </package>
-
-  <package name="org.eclipse.wst.common.frameworks.datamodel"></package>
-</component>
diff --git a/plugins/org.eclipse.wst.common.frameworks/plugin.properties b/plugins/org.eclipse.wst.common.frameworks/plugin.properties
deleted file mode 100644
index d6bce97..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/plugin.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 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
-###############################################################################
-provider=Eclipse.org
-pluginName=Common Frameworks
-OperationExtension=OperationExtension
-Function_Extension_Group=Function Extension Group
-WTPActivityBridgeHelper=WTPActivityBridgeHelper
-DataModelProvider=DataModelProvider
diff --git a/plugins/org.eclipse.wst.common.frameworks/plugin.xml b/plugins/org.eclipse.wst.common.frameworks/plugin.xml
deleted file mode 100644
index 0f4338a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/plugin.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-   <extension-point id="OperationExtension" name="%OperationExtension" schema="schema/OperationExtension.exsd"/>
-   <extension-point id="functionGroup" name="%Function_Extension_Group" schema="schema/functionGroup.exsd"/>
-   <extension-point id="WTPActivityBridgeHelper" name="%WTPActivityBridgeHelper" schema="schema/WTPActivityBridgeHelper.exsd"/>
-   <extension-point id="DataModelProviderExtension" name="%DataModelProvider" schema="schema/DataModelProviderExtension.exsd"/>
-   
-   <extension
-         id="context.Sensitive.Class.saveHandler"
-         name="Save Handler - Headless Context Class"
-         point="org.eclipse.jem.util.uiContextSensitiveClass">
-      <uiContextSensitiveClass
-            key="saveHandler"
-            context="Headless"
-            className="org.eclipse.wst.common.frameworks.internal.SaveHandlerHeadless">
-      </uiContextSensitiveClass>
-   </extension>
-   <extension
-         id="org.eclipse.wst.common.frameworks.internal.enablement"
-         point="org.eclipse.jem.util.uiContextSensitiveClass">
-      <uiContextSensitiveClass
-            key="org.eclipse.wst.common.frameworks.internal.EnablementDetermination"
-            context="Headless"
-            className="org.eclipse.wst.common.frameworks.internal.enablement.EnablementManager">
-      </uiContextSensitiveClass>
-   </extension>
-
-</plugin>
diff --git a/plugins/org.eclipse.wst.common.frameworks/prepareforpii.xml b/plugins/org.eclipse.wst.common.frameworks/prepareforpii.xml
deleted file mode 100644
index 638c7dc..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/prepareforpii.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<project name="PrepareForPII" default="main" basedir=".">
-		
-	<!-- Setup temp variables -->
-	<target name="init">
-		<property name="nlsDir" value="d:/NLS/Corona/0526"/>
-		<property name="plugin" value="com.ibm.wtp.common"/>
-		<property name="plugindir" value="d:/workspaceCorona/${plugin}"/>
-		<property name="outputDir" value="${nlsDir}/${plugin}"/>
-		
-	
-	</target>
-
-	<!-- Create the destination dir -->
-	<target name="nlsDir" depends="init">
-		<mkdir dir="${nlsDir}"/>
-	</target>
-	
-	<!-- Create the destination dir -->
-	<target name="plugindir" depends="nlsDir">
-		<delete dir="${outputDir}"/>
-		<mkdir dir="${outputDir}"/>
-	</target>
-
-	<!-- Move the files to the correct locations in the workspace. -->
-	<target name="main" depends="plugindir">
-	
-		<messageIdGen folderPath = "${plugindir}" componentId = "E" />
-		
-		<copy todir = "${outputDir}/src" >
-			 <fileset dir="${plugindir}/src">
-           	  <include name="**/*.properties"/>
-  			 </fileset>
-  		</copy>
-
-  		
-	</target>
-</project>
diff --git a/plugins/org.eclipse.wst.common.frameworks/schema/DataModelProviderExtension.exsd b/plugins/org.eclipse.wst.common.frameworks/schema/DataModelProviderExtension.exsd
deleted file mode 100644
index 301984a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/schema/DataModelProviderExtension.exsd
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.frameworks">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.wst.common.frameworks" id="DataModelProviderExtension" name="Data Model Provider"/>
-      </appInfo>
-      <documentation>
-         This can be used to extend an existing data model provider with a custom data model provider.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="DataModelProvider" minOccurs="0" maxOccurs="1"/>
-            <element ref="ProviderDefinesType" minOccurs="0" maxOccurs="1"/>
-            <element ref="ProviderImplementsType" minOccurs="0" maxOccurs="1"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  a fully qualified identifier of the target extension point
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  an optional identifier of the extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  an optional name of the extension instance
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="DataModelProvider">
-      <complexType>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  an optional identifier for the data model provider extension
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  required fully qualified classname of the data model provider to extend
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="ProviderDefinesType">
-      <complexType>
-         <attribute name="providerType" type="string" use="required">
-            <annotation>
-               <documentation>
-                  the type the data model provider defines
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="providerID" type="string" use="required">
-            <annotation>
-               <documentation>
-                  required identifier for the defined type
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="ProviderImplementsType">
-      <complexType>
-         <attribute name="providerType" type="string" use="required">
-            <annotation>
-               <documentation>
-                  fully qualified type the data model provider implements
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="providerID" type="string" use="required">
-            <annotation>
-               <documentation>
-                  required identifier for the implemented type
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which accompanies 
-this distribution, and is available at &lt;a
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/plugins/org.eclipse.wst.common.frameworks/schema/OperationExtension.exsd b/plugins/org.eclipse.wst.common.frameworks/schema/OperationExtension.exsd
deleted file mode 100644
index d6f1ea2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/schema/OperationExtension.exsd
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks" id="OperationExtension" name="Operation Extension"/>

-      </appInfo>

-      <documentation>

-         This is the methodology for extending an existing operation by adding either a pre operation to be executed prior, or a post operation to be executed after the original operation.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="operationExtension"/>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string" use="required">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="operationExtension">

-      <complexType>

-         <sequence>

-         </sequence>

-         <attribute name="preOperationClass" type="string">

-            <annotation>

-               <documentation>

-                  optional fully qualified name of the pre-operation class

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="postOperationClass" type="string">

-            <annotation>

-               <documentation>

-                  optional fully qualified name of the post-operation class

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string" use="required">

-            <annotation>

-               <documentation>

-                  required id of the operation to extend

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-All rights reserved. This program and the accompanying materials are made 

-available under the terms of the Eclipse Public License v1.0 which accompanies 

-this distribution, and is available at &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks/schema/WTPActivityBridgeHelper.exsd b/plugins/org.eclipse.wst.common.frameworks/schema/WTPActivityBridgeHelper.exsd
deleted file mode 100644
index 67d50e7..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/schema/WTPActivityBridgeHelper.exsd
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks" id="WTPActivityBridgeHelper" name="WTP Activity Bridge Helper"/>

-      </appInfo>

-      <documentation>

-         This is used to declare an activity bridge helper which is useful when enabling capabilities.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="WTPActivityBridgeHelper"/>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="WTPActivityBridgeHelper">

-      <complexType>

-         <attribute name="class" type="string" use="required">

-            <annotation>

-               <documentation>

-                  fully qualified class name for the WTPActivityBridgeHelper class

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-All rights reserved. This program and the accompanying materials are made 

-available under the terms of the Eclipse Public License v1.0 which accompanies 

-this distribution, and is available at &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks/schema/functionGroup.exsd b/plugins/org.eclipse.wst.common.frameworks/schema/functionGroup.exsd
deleted file mode 100644
index 1809594..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/schema/functionGroup.exsd
+++ /dev/null
@@ -1,186 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.frameworks">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.frameworks" id="functionGroup" name="Function Extension Group"/>

-      </appInfo>

-      <documentation>

-         A functionGroup provides a grouping of related function that can be contributed to the tools.  For example, a third party component may want to contribute actions, editor pages, edit model resources, and many other functions specific to a given product.  By associating all these functions with a group id, a mechanism is exposed for users to selectively enable and disable baskets of function.  Extension points that allow for a &quot;groupID&quot; attribute generally will hide those functions when the group id is disabled.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <choice>

-            <element ref="functionGroup" minOccurs="1" maxOccurs="unbounded"/>

-            <element ref="functionGroupPatternBinding" minOccurs="1" maxOccurs="unbounded"/>

-         </choice>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="functionGroup">

-      <annotation>

-         <documentation>

-            Extension point definition for a group.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="functionGroupID" type="string" use="required">

-            <annotation>

-               <documentation>

-                  A unique id for the group.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string" use="required">

-            <annotation>

-               <documentation>

-                  A human readable name.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="description" type="string" use="required">

-            <annotation>

-               <documentation>

-                  A short description of the group.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="icon" type="string">

-            <annotation>

-               <documentation>

-                  Optional path to an icon image.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="url" type="string">

-            <annotation>

-               <documentation>

-                  Optional url for the function group.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="priority" type="string" use="required">

-            <annotation>

-               <documentation>

-                  Ordering magnitude of plugins

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="initializerClassName" type="string" use="required">

-            <annotation>

-               <documentation>

-                  Class used to determine plugin enablement

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="functionGroupPatternBinding">

-      <annotation>

-         <documentation>

-            This element allows one to bind function groups to patterns.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="functionGroupID" type="string" use="required">

-            <annotation>

-               <documentation>

-                  The unique identifier of the function group to bind.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="pattern" type="string" use="required">

-            <annotation>

-               <documentation>

-                  The pattern to be bound. Patterns are regular expressions which match unique identifiers.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         1.0

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         &lt;pre&gt;

-   &lt;extension

-         point=&quot;org.eclipse.wst.common.frameworks.functionGroup&quot;&gt;

-      &lt;functionGroup

-            name=&quot;Acme Co. Function Extension&quot;

-            functionGroupID=&quot;com.acme.acmepro&quot;

-            description=&quot;The AcmePro Extensions add integration to the Acme Web Server.&quot;

-            enabledByDefault=&quot;true&quot;

-            icon=&quot;...&quot;

-            url=&quot;http://www.acme.com/&quot;/&gt;

-   &lt;/extension&gt;

-&lt;/pre&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-All rights reserved. This program and the accompanying materials are made 

-available under the terms of the Eclipse Public License v1.0 which accompanies 

-this distribution, and is available at &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.frameworks/src-non_workbench/org/eclipse/wst/common/frameworks/internal/enablement/nonui/IWFTWrappedException.java b/plugins/org.eclipse.wst.common.frameworks/src-non_workbench/org/eclipse/wst/common/frameworks/internal/enablement/nonui/IWFTWrappedException.java
deleted file mode 100644
index d92bafd..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src-non_workbench/org/eclipse/wst/common/frameworks/internal/enablement/nonui/IWFTWrappedException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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.wst.common.frameworks.internal.enablement.nonui;
-
-/**
- * Common interface for ArchiveRuntime and ArchiveWrapped exceptions, which can contain nested
- * exceptions
- */
-public interface IWFTWrappedException {
-	/**
-	 * Return the messages from this and all nested exceptions, in order from outermost to innermost
-	 */
-	public String[] getAllMessages();
-
-	/**
-	 * Return the messages from this and all nested exceptions, in order from outermost to
-	 * innermost, concatenated as one
-	 */
-	public String getConcatenatedMessages();
-
-	public Exception getInnerMostNestedException();
-
-	public String getMessage();
-
-	public java.lang.Exception getNestedException();
-
-	public void printStackTrace();
-
-	public void printStackTrace(java.io.PrintStream s);
-
-	public void printStackTrace(java.io.PrintWriter s);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src-non_workbench/org/eclipse/wst/common/frameworks/internal/enablement/nonui/WFTWrappedException.java b/plugins/org.eclipse.wst.common.frameworks/src-non_workbench/org/eclipse/wst/common/frameworks/internal/enablement/nonui/WFTWrappedException.java
deleted file mode 100644
index 9a59c94..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src-non_workbench/org/eclipse/wst/common/frameworks/internal/enablement/nonui/WFTWrappedException.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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.wst.common.frameworks.internal.enablement.nonui;
-
-//import com.ibm.etools.wft.nls.WFTUtilsResourceHandler;
-
-
-
-/**
- * Insert the type's description here. Creation date: (04/03/01 11:12:51 AM)
- * 
- * @author: Administrator
- */
-public class WFTWrappedException extends java.lang.reflect.InvocationTargetException {
-	/**
-	 * Comment for <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = -6885044277377784429L;
-
-	/**
-	 * WFTWrappedException constructor comment.
-	 */
-	protected WFTWrappedException() {
-		super();
-	}
-
-	/**
-	 * WFTWrappedException constructor comment.
-	 * 
-	 * @param target
-	 *            java.lang.Throwable
-	 */
-	public WFTWrappedException(Throwable target) {
-		super(target);
-	}
-
-	/**
-	 * WFTWrappedException constructor comment.
-	 * 
-	 * @param target
-	 *            java.lang.Throwable
-	 * @param s
-	 *            java.lang.String
-	 */
-	public WFTWrappedException(Throwable target, String s) {
-		super(target, s);
-	}
-
-	/**
-	 * Print out a stack trace to the system err.
-	 */
-	public void printStackTrace() {
-		printStackTrace(System.err);
-	}
-
-	/**
-	 * Prints the exception to System.err. If we have a nested exception, print its stack.
-	 */
-	public void printStackTrace(java.io.PrintStream s) {
-		if (getTargetException() != null) {
-			s.println(this);
-			//TODO add this back in
-			// s.println(WFTUtilsResourceHandler.getString("Stack_trace_of_nested_exce_ERROR_"));
-			// //$NON-NLS-1$ = "Stack trace of nested exception:"
-			getTargetException().printStackTrace(s);
-		} else {
-			super.printStackTrace(s);
-		}
-	}
-
-	/**
-	 * Prints the exception to System.err. If we have a nested exception, print its stack.
-	 */
-	public void printStackTrace(java.io.PrintWriter s) {
-		if (getTargetException() != null) {
-			s.println(this);
-			//TODO add this back in
-			// s.println(WFTUtilsResourceHandler.getString("Stack_trace_of_nested_exce_ERROR_"));
-			// //$NON-NLS-1$ = "Stack trace of nested exception:"
-			getTargetException().printStackTrace(s);
-		} else {
-			super.printStackTrace(s);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src-non_workbench/org/eclipse/wst/common/frameworks/internal/enablement/nonui/WorkbenchUtil.java b/plugins/org.eclipse.wst.common.frameworks/src-non_workbench/org/eclipse/wst/common/frameworks/internal/enablement/nonui/WorkbenchUtil.java
deleted file mode 100644
index 67cac79..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src-non_workbench/org/eclipse/wst/common/frameworks/internal/enablement/nonui/WorkbenchUtil.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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.wst.common.frameworks.internal.enablement.nonui;
-
-public class WorkbenchUtil {
-
-	protected static boolean WorkbenchRunning = false;
-
-	private WorkbenchUtil() {
-		super();
-	}
-
-	/**
-	 * workbenchIsRunning() - test whether or not we are running in the workbench environment.
-	 * 
-	 * @see JavaPlugin.startup()
-	 */
-	public static boolean workbenchIsRunning() {
-		return WorkbenchRunning;
-	}
-
-	/**
-	 * Set to true if you are running in a Workbench environment.
-	 * 
-	 * @see JavaPlugin.startup()
-	 */
-	public static void setWorkbenchIsRunning(boolean aBoolean) {
-		WorkbenchRunning = aBoolean;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelOperation.java
deleted file mode 100644
index 562cebd..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelOperation.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.operations.AbstractOperation;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.wst.common.environment.IEnvironment;
-
-/**
- * <p>
- * Abstract implementation for an IDataModelOperation.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation
- * 
- * @since 1.0
- */
-public abstract class AbstractDataModelOperation extends AbstractOperation implements IDataModelOperation {
-
-	/**
-	 * <p>
-	 * Convenience IStatus.OK.
-	 * </p>
-	 */
-	protected static final IStatus OK_STATUS = IDataModelProvider.OK_STATUS;
-
-	private String id;
-	private IEnvironment environment;
-
-	/**
-	 * <p>
-	 * The IDataModel used by this IDataModelOperation
-	 * </p>
-	 */
-	protected IDataModel model;
-
-	/**
-	 * <p>
-	 * Default constructor.
-	 * </p>
-	 */
-	public AbstractDataModelOperation() {
-		super(""); //$NON-NLS-1$
-		this.id = getClass().getName();
-	}
-
-	/**
-	 * <p>
-	 * Constructor taking an IDataModel
-	 * </p>
-	 * 
-	 * @param model
-	 *            the IDataModel used to drive this operation
-	 */
-	public AbstractDataModelOperation(IDataModel model) {
-		super(""); //$NON-NLS-1$ // TODO add a label property to IDataModel???
-		this.model = model;
-		this.id = getClass().getName();
-	}
-
-	/**
-	 * <p>
-	 * Default implementation of setID().
-	 * <p>
-	 * 
-	 * @see IDataModelOperation#setID(String)
-	 */
-	public void setID(String id) {
-		this.id = id;
-	}
-
-	/**
-	 * <p>
-	 * Default implementation of getID().
-	 * </p>
-	 * 
-	 * @see IDataModelOperation#getID()
-	 */
-	public String getID() {
-		return id;
-	}
-
-	/**
-	 * <p>
-	 * Default implementation of setDataModel()
-	 * </p>
-	 * 
-	 * @see IDataModelOperation#setDataModel(IDataModel)
-	 */
-	public void setDataModel(IDataModel model) {
-		this.model = model;
-	}
-
-	/**
-	 * <p>
-	 * Default implementation of getDataModel()
-	 * </p>
-	 * 
-	 * @see IDataModelOperation#getDataModel()
-	 */
-	public IDataModel getDataModel() {
-		return model;
-	}
-
-	/**
-	 * <p>
-	 * Default implementation of getSchedulingRule() returns
-	 * <code>ResourcesPlugin.getWorkspace().getRoot()</code>.
-	 * </p>
-	 * 
-	 * @see IDataModelOperation#getSchedulingRule()
-	 */
-	public ISchedulingRule getSchedulingRule() {
-		return ResourcesPlugin.getWorkspace().getRoot();
-	}
-
-	/**
-	 * <p>
-	 * Default implementation of getOperationExecutionFlags() returns
-	 * <code>IWorkspace.AVOID_UPDATE</code>.
-	 * </p>
-	 * 
-	 * @see IDataModelOperation#getOperationExecutionFlags()
-	 */
-	public int getOperationExecutionFlags() {
-		return IWorkspace.AVOID_UPDATE;
-	}
-
-	/**
-	 * <p>
-	 * The framework will set the environment on this operation before it is executed. The operation
-	 * can then use the environment to report status, log information, and access resources in an
-	 * environment neutral way.
-	 * </p>
-	 * 
-	 * @param env
-	 *            the environment.
-	 * 
-	 */
-	public final void setEnvironment(IEnvironment env) {
-		environment = env;
-	}
-
-	/**
-	 * <p>
-	 * An operation can call this method to get the environment that has been set by the operations
-	 * framework.
-	 * </p>
-	 * 
-	 * @return returns an environment.
-	 */
-	public final IEnvironment getEnvironment() {
-		return environment;
-	}
-
-	/**
-	 * <p>
-	 * Default empty implementation of redo.
-	 * </p>
-	 */
-	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return Status.OK_STATUS;
-	}
-
-	/**
-	 * <p>
-	 * Default empty implementation of undo.
-	 * </p>
-	 */
-	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return Status.OK_STATUS;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelProvider.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelProvider.java
deleted file mode 100644
index 57f3302..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/AbstractDataModelProvider.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * <p>
- * A default implementation of <code>IDataModelProvider</code>.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider
- * @since 1.0
- */
-public abstract class AbstractDataModelProvider implements IDataModelProvider {
-
-	/**
-	 * <p>
-	 * The IDataModel for this provider.
-	 * </p>
-	 */
-	protected IDataModel model = null;
-
-	public Set getPropertyNames() {
-		return new HashSet();
-	}
-	
-	/**
-	 * <p>
-	 * A default implementation of init(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#init()
-	 */
-	public void init() {
-	}
-
-	/**
-	 * </p>
-	 * An implemenation of setDataModel().
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#setDataModel(IDataModel)
-	 */
-	public final void setDataModel(IDataModel dataModel) {
-		this.model = dataModel;
-	}
-
-	/**
-	 * <p>
-	 * An implemenation of getDataModel().
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#getDataModel()
-	 */
-	public final IDataModel getDataModel() {
-		return model;
-	}
-
-
-	/**
-	 * </p>
-	 * A default impleneation of propertySet(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the name of the property that has been set
-	 * @param propertyValue
-	 *            the value the property has been set
-	 * 
-	 * @see IDataModelProvider#propertySet(String, Object)
-	 */
-	public boolean propertySet(String propertyName, Object propertyValue) {
-		return true;
-	}
-
-	/**
-	 * <p>
-	 * A default implemenation of getDefaultProperty(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the specified property
-	 * 
-	 * @see IDataModelProvider#getDefaultProperty(String)
-	 */
-	public Object getDefaultProperty(String propertyName) {
-		if(ALLOW_EXTENSIONS.equals(propertyName)){
-			return Boolean.TRUE;
-		} else if(RESTRICT_EXTENSIONS.equals(propertyName)){
-			return Collections.EMPTY_LIST;
-		}
-		return null;
-	}
-
-	/**
-	 * <p>
-	 * A default implemenation of isPropertyEnabled(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the specified property
-	 * @see IDataModelProvider#isPropertyEnabled(String)
-	 */
-	public boolean isPropertyEnabled(String propertyName) {
-		return true;
-	}
-
-	/**
-	 * <p>
-	 * A default implemenation of validate(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @param name
-	 *            the name of the property or nested IDataModel being validated.
-	 * 
-	 * @see IDataModelProvider#validate(String)
-	 */
-	public IStatus validate(String name) {
-		return null;
-	}
-
-	/**
-	 * <p>
-	 * A default implemenation of getPropertyDescriptor(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the specified property
-	 * @see IDataModelProvider#getPropertyDescriptor(String)
-	 */
-	public DataModelPropertyDescriptor getPropertyDescriptor(String propertyName) {
-		return null;
-	}
-
-	/**
-	 * <p>
-	 * A default implemenation of getValidPropertyDescriptors(). Subclasses should override as
-	 * necessary.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the specified property
-	 * @see IDataModelProvider#getValidPropertyDescriptors(String)
-	 */
-	public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
-		return null;
-	}
-
-	/**
-	 * <p>
-	 * A default implemenation of getExtendedContext(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#getExtendedContext()
-	 */
-	public List getExtendedContext() {
-		return null;
-	}
-
-	/**
-	 * <p>
-	 * A default implemenation of getDefaultOperation(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#getDefaultOperation()
-	 */
-	public IDataModelOperation getDefaultOperation() {
-		return null;
-	}
-
-	/**
-	 * <p>
-	 * A default implemenation of getName(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#getID()
-	 */
-	public String getID() {
-		return this.getClass().getName();
-	}
-
-	/**
-	 * <p>
-	 * A default implemenation of dispose(). Subclasses should override as necessary.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#dispose()
-	 */
-	public void dispose() {
-	}
-
-	/**
-	 * <p>
-	 * Convenience method for getting a property from the backing IDataModel.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @return the property value
-	 * 
-	 * @see IDataModel#getProperty(String)
-	 */
-	protected final Object getProperty(String propertyName) {
-		return model.getProperty(propertyName);
-	}
-
-	/**
-	 * <p>
-	 * Convenience method for setting a property on the backing IDataModel.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @param propertyValue
-	 *            the property value
-	 * 
-	 * @see IDataModel#setProperty(String, Object)
-	 */
-	protected final void setProperty(String propertyName, Object propertyValue) {
-		model.setProperty(propertyName, propertyValue);
-	}
-
-	/**
-	 * <p>
-	 * Convenience method for getting a boolean property from the backing IDataModel.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @return the boolean value of the property
-	 * 
-	 * @see IDataModel#getBooleanProperty(String)
-	 */
-	protected final boolean getBooleanProperty(String propertyName) {
-		return model.getBooleanProperty(propertyName);
-	}
-
-	/**
-	 * <p>
-	 * Convenience method for setting a boolean property on the backing IDataModel.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @param propertyValue
-	 *            the boolean property value
-	 * 
-	 * @see IDataModel#setBooleanProperty(String, boolean)
-	 */
-	protected final void setBooleanProperty(String propertyName, boolean propertyValue) {
-		model.setBooleanProperty(propertyName, propertyValue);
-	}
-
-	/**
-	 * <p>
-	 * Convenience method for getting an int property from the backing IDataModel.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @return the int value of the property
-	 * 
-	 * @see IDataModel#getIntProperty(String)
-	 */
-	protected final int getIntProperty(String propertyName) {
-		return model.getIntProperty(propertyName);
-	}
-
-	/**
-	 * <p>
-	 * Convenience method for setting an int property on the backing IDataModel.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @param propertyValue
-	 *            the int property value
-	 * 
-	 * @see IDataModel#setIntProperty(String, int)
-	 */
-	protected final void setIntProperty(String propertyName, int propertyValue) {
-		model.setIntProperty(propertyName, propertyValue);
-	}
-
-	/**
-	 * <p>
-	 * Convenience method for getting a String property from the backing IDataModel.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @return the String value of the property
-	 * 
-	 * @see IDataModel#getStringProperty(String)
-	 */
-	protected final String getStringProperty(String propertyName) {
-		return model.getStringProperty(propertyName);
-	}
-
-	/**
-	 * <p>
-	 * Convenience method for checking if a property is set from the backing IDataModel.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @return <code>true</code> if the property is set, <code>false</code> otherwise.
-	 */
-	protected final boolean isPropertySet(String propertyName) {
-		return model.isPropertySet(propertyName);
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelEvent.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelEvent.java
deleted file mode 100644
index 402b0bc..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelEvent.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-/**
- * <p>
- * This event is used to communicate property changes from IDataModels to their IDataModelListeners.
- * </p>
- * <p>
- * This class may be instantiated; it is not intended to be subclassed.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModel#addListener(IDataModelListener)
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelListener
- * 
- * @since 1.0
- */
-public final class DataModelEvent {
-
-	/**
-	 * <p>
-	 * A flag used to specify the property's value has changed.
-	 * </p>
-	 * 
-	 * @see IDataModel#getProperty(String)
-	 * @see #getFlag()
-	 */
-	public static final int VALUE_CHG = 1;
-
-	/**
-	 * Internal. Clients should not use.
-	 */
-	static final int DEFAULT_CHG = 2;
-
-	/**
-	 * <p>
-	 * A flag used to specify the property's enablment has changed.
-	 * </p>
-	 * 
-	 * @see IDataModel#isPropertyEnabled(String)
-	 * @see #getFlag()
-	 */
-	public static final int ENABLE_CHG = 3;
-
-	/**
-	 * <p>
-	 * A flag used to specify the property's valid values have changed.
-	 * </p>
-	 * 
-	 * @see IDataModel#getValidPropertyDescriptors(String)
-	 * @see #getFlag()
-	 */
-	public static final int VALID_VALUES_CHG = 4;
-
-
-	private IDataModel dataModel;
-	private String propertyName;
-	private int flag;
-
-	/**
-	 * <p>
-	 * Constructor for DataModelEvent.
-	 * </p>
-	 * 
-	 * @param dataModel
-	 *            the IDataModel whose property has changed
-	 * @param propertyName
-	 *            the name of the changed property
-	 * @param flag
-	 *            contains a flag specifiying the event type
-	 */
-	public DataModelEvent(IDataModel dataModel, String propertyName, int flag) {
-		this.dataModel = dataModel;
-		this.propertyName = propertyName;
-		this.flag = flag;
-	}
-
-	/**
-	 * <p>
-	 * Returns the IDataModel whose property has changed.
-	 * </p>
-	 * 
-	 * @return the IDataModel whose property has changed.
-	 */
-	public IDataModel getDataModel() {
-		return dataModel;
-	}
-
-	/**
-	 * <p>
-	 * Returns the name of the changed property.
-	 * </p>
-	 * 
-	 * @return the name of the changed property.
-	 */
-	public String getPropertyName() {
-		return propertyName;
-	}
-
-	/**
-	 * <p>
-	 * Returns the flag indicating the event type. Valid types are:
-	 * <ul>
-	 * <li><code>PROPERTY_CHG</code></li>
-	 * <li><code>VALID_VALUES_CHG</code></li>
-	 * <li><code>ENABLE_CHG</code></li>
-	 * </ul>
-	 * </p>
-	 * 
-	 * @return the flag indicating the event type.
-	 */
-	public int getFlag() {
-		return flag;
-	}
-
-	/**
-	 * <p>
-	 * Convenience method to return the IDataModel's property. This is equavalent to:
-	 * <code>getDataModel().getProperty(getPropertyName())</code>.
-	 * </p>
-	 * 
-	 * @return the dataModel's property.
-	 * @see IDataModel#getProperty(String)
-	 */
-	public Object getProperty() {
-		return dataModel.getProperty(propertyName);
-	}
-
-	/**
-	 * <p>
-	 * Convenience method to return the IDataModel property's enablement state. This is equavalent
-	 * to: <code>getDataModel().isPropertyEnabled(getPropertyName())</code>.
-	 * </p>
-	 * 
-	 * @return the dataModel property's enablement state.
-	 * @see IDataModel#isPropertyEnabled(String)
-	 */
-	public boolean isPropertyEnabled() {
-		return dataModel.isPropertyEnabled(propertyName);
-	}
-
-	/**
-	 * <p>
-	 * Convenience method to return the IDataModel property's valid property descriptors. This is
-	 * equavalent to: <code>getDataModel().getValidPropertyDescriptors(getPropertyName())</code>.
-	 * </p>
-	 * 
-	 * @return the dataModel property's valid property descriptors.
-	 * @see IDataModel#getValidPropertyDescriptors(String)
-	 */
-	public DataModelPropertyDescriptor[] getValidPropertyDescriptors() {
-		return dataModel.getValidPropertyDescriptors(propertyName);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelFactory.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelFactory.java
deleted file mode 100644
index 8f1d5fd..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelFactory.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.datamodel.DataModelExtensionReader;
-import org.eclipse.wst.common.frameworks.internal.datamodel.DataModelImpl;
-
-/**
- * <p>
- * DataModelFactory is used to create IDataModel instances.
- * </p>
- * 
- * @since 1.0
- */
-public class DataModelFactory {
-
-	private static DataModelExtensionReader reader;
-
-	private DataModelFactory() {
-	}
-
-	/**
-	 * <p>
-	 * Looks up the appropriate IDataModelProvider by the specified id and constructs a new
-	 * IDataModel. If the IDataModelProvider is not found then a RuntimeException is logged and null
-	 * is returned.
-	 * </p>
-	 * 
-	 * @param dataModelProviderID
-	 *            the id of the IDataModelProvider
-	 * @return a new IDataModel
-	 */
-	public static IDataModel createDataModel(String dataModelProviderID) {
-		IDataModelProvider provider = loadProvider(dataModelProviderID);
-		if (provider == null)
-			return null;
-		return createDataModel(provider);
-	}
-
-	private static IDataModelProvider loadProvider(String id) {
-		if (null == reader) {
-			reader = new DataModelExtensionReader();
-		}
-		return reader.getProvider(id);
-	}
-
-	/**
-	 * <p>
-	 * Looks up the appropriate dataModelProviderIDs by the specified dataModelProviderKindID.
-	 * </p>
-	 * 
-	 * @param dataModelProviderKindID
-	 *            the String id of the dataModelProviderKindID
-	 * 
-	 * @return the array of valid dataModelProviderIDs or an empty array if there are none.
-	 */
-	public static String[] getDataModelProviderIDsForKind(String dataModelProviderKindID) {
-		String[] validProviderIDs = loadProviderForProviderKind(dataModelProviderKindID);
-		return null != validProviderIDs ? validProviderIDs : new String[0];
-	}
-
-
-	private static String[] loadProviderForProviderKind(String providerKind) {
-		if (null == reader) {
-			reader = new DataModelExtensionReader();
-		}
-		return reader.getProviderDescriptorsForProviderKind(providerKind);
-	}
-
-	/**
-	 * <p>
-	 * Builds an {@link IDataModel} using the specified Class. This Class will
-	 * normally be a sub interface of {@link IDataModelProperties}. If the
-	 * Class it is an {@link IDataModelProperties}.class then this method will
-	 * attempt to use the {@link IDataModelProperties#_provider_class} field to
-	 * load the {@link IDataModelProvider} with which to back the
-	 * {@link IDataModel}. If this fails, or if the Class is not an interface,
-	 * then this method is equavalent to
-	 * <code>createDataModel(aClass.getName())</code>.
-	 * </p>
-	 * 
-	 * @param aClass
-	 *            an {@link IDataModelProperties}.class or the class whose name
-	 *            is the id of the IDataModelProvider
-	 * @return a new IDataModel
-	 */
-	public static IDataModel createDataModel(Class aClass) {
-		if(aClass.isInterface()){
-				try{
-					Class clazz = (Class)aClass.getField("_provider_class").get(null);
-					if(clazz != null){
-						IDataModelProvider provider = (IDataModelProvider)clazz.newInstance();
-						return createDataModel(provider);
-					}
-				} catch (NoSuchFieldException e) {
-					//ignore; the interface may not have defined the field and is relying on extensions.
-				} catch (IllegalArgumentException e) {
-					Logger.getLogger().logError(e);
-				} catch (SecurityException e) {
-					Logger.getLogger().logError(e);
-				} catch (IllegalAccessException e) {
-					Logger.getLogger().logError(e);
-				} catch (InstantiationException e) {
-					Logger.getLogger().logError(e);
-				}  
-		}
-		return createDataModel(aClass.getName());
-	}
-
-	/**
-	 * <p>
-	 * Creates a new IDataModel using the the specified instance of an IDataModelProvider.
-	 * </p>
-	 * 
-	 * @param provider
-	 * @return a new IDataModel
-	 */
-	public static IDataModel createDataModel(IDataModelProvider provider) {
-		if (null == provider) {
-			throw new NullPointerException();
-		}
-		DataModelImpl dataModel = new DataModelImpl(provider);
-		return dataModel;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelPropertyDescriptor.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelPropertyDescriptor.java
deleted file mode 100644
index 2154ecc..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/DataModelPropertyDescriptor.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-/**
- * <p>
- * A DataModelPropertyDescriptor provides a human readible description for an IDataModel
- * propertyValue.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModel#getPropertyDescriptor(String)
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModel#getValidPropertyDescriptors(String)
- * 
- * @since 1.0
- */
-public final class DataModelPropertyDescriptor {
-
-	/**
-	 * <p>
-	 * A convenience method which returns an array of DataModelPropertyDescriptors. If
-	 * <code>values</code> is <code>null</code> then a 0 length array is returned. Otherwise for
-	 * each <code>values[i]</code> in the array, a new DataModelPropertyDescriptors is created
-	 * using <code>new DataModelPropertyDescriptors(values[i]);</code>.
-	 * </p>
-	 * 
-	 * @param values
-	 *            the array of property values
-	 * @return the constructed DataModelPropertyDescriptors array
-	 */
-	public static DataModelPropertyDescriptor[] createDescriptors(Object[] values) {
-		if (null == values) {
-			return new DataModelPropertyDescriptor[0];
-		}
-		DataModelPropertyDescriptor[] descriptors = new DataModelPropertyDescriptor[values.length];
-		for (int i = 0; i < descriptors.length; i++) {
-			descriptors[i] = new DataModelPropertyDescriptor(values[i]);
-		}
-		return descriptors;
-	}
-
-	/**
-	 * <p>
-	 * A convenience method which returns an array of DataModelPropertyDescriptors. If
-	 * <code>values</code> is <code>null</code> then a 0 length array is returned. Otherwise for
-	 * each <code>values[i]</code> and <code>descriptions[i]</code> in the arrays, a new
-	 * DataModelPropertyDescriptor is created using
-	 * <code>new DataModelPropertyDescriptor(values[i], descriptions[i]);</code>. Both arrays
-	 * must be the same length.
-	 * </p>
-	 * 
-	 * @param values
-	 *            the array of property values
-	 * @param descriptions
-	 *            the array of property descriptions cooresponding the values array
-	 * @return the constructed DataModelPropertyDescriptors array
-	 */
-	public static DataModelPropertyDescriptor[] createDescriptors(Object[] values, String[] descriptions) {
-		if (null == values) {
-			return new DataModelPropertyDescriptor[0];
-		}
-		DataModelPropertyDescriptor[] descriptors = new DataModelPropertyDescriptor[values.length];
-		for (int i = 0; i < descriptors.length; i++) {
-			descriptors[i] = new DataModelPropertyDescriptor(values[i], descriptions[i]);
-		}
-		return descriptors;
-
-	}
-
-	private Object propertyValue;
-	private String propertyDescription;
-
-	/**
-	 * <p>
-	 * This is equavalent to calling <code>DataModelPropertyDescriptor(propertyValue, null)</code>.
-	 * </p>
-	 * 
-	 * @param propertyValue
-	 *            the propery value
-	 */
-	public DataModelPropertyDescriptor(Object propertyValue) {
-		this.propertyValue = propertyValue;
-	}
-
-	/**
-	 * <p>
-	 * Creates a new DataModelPropertyDescriptor with the specified propertyValue and
-	 * propertyDescription.
-	 * </p>
-	 * 
-	 * @param propertyValue
-	 *            the property value
-	 * @param propertyDescription
-	 *            the human readible proeprty descriptionF
-	 */
-	public DataModelPropertyDescriptor(Object propertyValue, String propertyDescription) {
-		this.propertyValue = propertyValue;
-		this.propertyDescription = propertyDescription;
-	}
-
-	/**
-	 * <p>
-	 * Returns the property value.
-	 * </p>
-	 * 
-	 * @return the property value
-	 */
-	public Object getPropertyValue() {
-		return propertyValue;
-	}
-
-	/**
-	 * <p>
-	 * Returns a human readible property description. If a non null description has been specified,
-	 * then it will be returned. Otherwise, the property value's <code>toString()</code> will be
-	 * returned if it is not null. Otherwise the empty String (<code>""</code>) will be
-	 * returned. <code>null</code> will never be returned.
-	 * </p>
-	 * 
-	 * @return the human readible property description, never <code>null</code>
-	 */
-	public String getPropertyDescription() {
-		if (null != propertyDescription) {
-			return propertyDescription;
-		}
-		String str = (null != propertyValue) ? propertyValue.toString() : null;
-		return (null != str) ? str : ""; //$NON-NLS-1$
-	}
-	
-	public String toString(){
-		return getPropertyDescription();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModel.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModel.java
deleted file mode 100644
index 164c5c7..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModel.java
+++ /dev/null
@@ -1,747 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * <p>
- * IDataModels are the core piece of a framework used to simplify data collection, operation
- * execution, and Wizard generation.
- * </p>
- * <p>
- * IDataModels are primarily an intelligent mechanism for managing data. Each IDataModel tracks
- * specific Objects known as "properties". Each property may be set or get using its property name.
- * A Collection of property names for an IDataModel instance may be retreived using
- * <code>getAllProperties()</code>. In addition to getting/setting properties, IDataModels may
- * also provide default values for unset properties, human readable descriptors for properties,
- * enumerations of valid property values, validation for properties, and enablement for properties.
- * </p>
- * <p>
- * IDataModels may also be nested (and unnested) recursively within another. When one IDataModel is
- * nested within another, then client code may access all properties on the former through the
- * latter. This is especially useful when the same IDataModel (tracking the same properties) may be
- * used within the context of several different broader scenarios. Nesting may apply to any
- * IDataModel, and may be abitraryly deep (even cylical if you dare). Nesting offers flexibility,
- * especially for extension by 3rd party clients.
- * </p>
- * <p>
- * Each IDataModel may also supply an IDataModelOperation (a subclass of
- * org.eclipse.core.commands.operations.IUndoableOperation) for execution. When executed within the
- * IDataModel framework all these operations are inherently and abitrarily extendable.
- * </p>
- * <p>
- * Each IDataModel may also indirectly supply a DataModelWizard. This indirection is necessary to
- * spilt UI dependencies from the core IDataModel framework. DataModelWizards are also inherently
- * extendable.
- * </p>
- * <p>
- * IDataModels are not meant to be instantiated directly, rather they are built from an
- * IDataModelProvider. Clients wishing to define their own IDataModel must do so by implementing an
- * IDataModelProvider. Clients wishing to utilize an IDataModel must create it using the
- * DataModelFactory with the associated IDataModelProvider.
- * </p>
- * 
- * <p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider
- * @see org.eclipse.wst.common.frameworks.datamodel.DataModelFactory
- * 
- * @since 1.0
- */
-public interface IDataModel {
-
-	/**
-	 * <p>
-	 * Returns the unique ID which identifies this IDataModel instance. The same ID should be used
-	 * by the default operation (if any) for clients to extend or instantiate directly, the
-	 * DataModelWizard (if any) for clients to extend or instantiate directly.
-	 * </p>
-	 * <p>
-	 * Note, this is not the same as a hashcode. Multiple IDataModel instances created with the same
-	 * IDataModelProvider type will all have the same ID.
-	 * </p>
-	 * <p>
-	 * An IDataModel implementor defines this in IDataModelProvider.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#getID()
-	 * 
-	 * @return the unique ID for this IDataModel
-	 */
-	public String getID();
-
-	/**
-	 * <p>
-	 * Returns the default operation to execute against this IDataModel. The returned operation is
-	 * derived from the operation supplied by the backing IDataModelProvider. The returned type is
-	 * IDataModelManagerOperation which adds additional functionality to the returned
-	 * IDataModelOperation.
-	 * </p>
-	 * <p>
-	 * An IDataModel implementor defines this in IDataModelProvider.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#getDefaultOperation()
-	 * 
-	 * @return the default operation
-	 */
-	public IDataModelOperation getDefaultOperation();
-
-	/**
-	 * <p>
-	 * This method only pertains to IDataModels for extedended operations. The returned extended
-	 * context is used by the IDataModelOperation framework to determine whether a particular
-	 * extended operation should execute. The returned list is should contain Objects adaptable to
-	 * IProject. This IDataModel's function groups are looked up through the extension mechanism. If
-	 * a function group is defined, it is first checked for enablement. Then each adapted IProject
-	 * is inspected to verify it handles the function group. If all these conditions are met, then
-	 * the extended operation associated with this IDataModel is executed; otherwise it is skipped.
-	 * If no function group is defined, or no extended context is defined (i.e. this method returns
-	 * an empty list, or the objects in the returned list are not adaptable to IProject) then the
-	 * extended operation will execute (it will never be skipped).
-	 * </p>
-	 * <p>
-	 * An IDataModel implementor defines this in IDataModelProvider.
-	 * </p>
-	 * <p>
-	 * This method should not be called by clients.
-	 * </p>
-	 * 
-	 * @return a List of Objects adaptable to IProject
-	 * 
-	 * @see IDataModelProvider#getExtendedContext()
-	 */
-	public List getExtendedContext();
-
-	/**
-	 * <p>
-	 * Returns the property value for the specified propertyName.
-	 * </p>
-	 * <p>
-	 * If the specified propertyName is not a property then a RuntimeException will be thrown.
-	 * </p>
-	 * <p>
-	 * Before the property is returned, first the owning IDataModel must be located. If the
-	 * specified propertyName is a base property {@link #isBaseProperty(String)}, then this
-	 * IDataModel is the owner. Otherwise, a recursive search through the nested IDataModels is
-	 * conducted to locate the owning IDataModel. If more than one nested IDataModel defines the
-	 * property, then the first one located is considered the owning IDataModel.
-	 * </p>
-	 * <p>
-	 * Once the owning IDataModel is found the property is checked to see if it is set
-	 * {@link #isPropertySet(String)}. If the property is set, the set value is returned. If the
-	 * property is not set, its default is returned {@link #getDefaultProperty(String)}.
-	 * </p>
-	 * <p>
-	 * There are convenience methods for getting primitive <code>int</code> and
-	 * <code>boolean</code> types as well as Strings.
-	 * <ul>
-	 * <li>{@link #getIntProperty(String)}</li>
-	 * <li>{@link #getBooleanProperty(String)}</li>
-	 * <li>{@link #getStringProperty(String)}</li>
-	 * </ul>
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @return the property
-	 * 
-	 * @see #setProperty(String, Object)
-	 * @see #getBooleanProperty(String)
-	 * @see #getIntProperty(String)
-	 * @see #getStringProperty(String)
-	 */
-	public Object getProperty(String propertyName);
-
-	/**
-	 * <p>
-	 * Returns the default property value for the specified propertyName.
-	 * </p>
-	 * <p>
-	 * An IDataModel implementor defines this in IDataModelProvider.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#getDefaultProperty(String)
-	 */
-	public Object getDefaultProperty(String propertyName);
-
-	/**
-	 * <p>
-	 * A convenience method for getting ints. If the property is set then this method is equavalent
-	 * to:
-	 * </p>
-	 * <p>
-	 * <code>((Integer)getProperty(propertyName)).intValue();</code>
-	 * </p>
-	 * <p>
-	 * <code>-1</code> is returned if a call to getProperty(propertyName) returns
-	 * <code>null</code>.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @return the int value of the property
-	 * @see #setProperty(String, Object)
-	 * @see #setIntProperty(String, int)
-	 */
-	public int getIntProperty(String propertyName);
-
-	/**
-	 * <p>
-	 * A convenience method for getting booleans. If the property is set then this method is
-	 * equavalent to:
-	 * </p>
-	 * <p>
-	 * <code>((Boolean)getProperty(propertyName)).booleanValue();</code>
-	 * </p>
-	 * <p>
-	 * <code>false</code> is returned if a call to getProperty(propertyName) returns
-	 * <code>null</code>.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name
-	 * @return the boolean value of the property
-	 * @see #setProperty(String, Object)
-	 * @see #setBooleanProperty(String, boolean)
-	 */
-	public boolean getBooleanProperty(String propertyName);
-
-	/**
-	 * <p>
-	 * A convenience method for getting Strings. If the property is set then this method is
-	 * equavalent to:
-	 * </p>
-	 * <p>
-	 * <code>(String)getProperty(propertyName)</code>
-	 * </p>
-	 * <p>
-	 * <code>""</code> is returned if a call to getProperty(propertyName) returns
-	 * <code>null</code>.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 * @see #setProperty(String, Object)
-	 */
-	public String getStringProperty(String propertyName);
-
-	/**
-	 * <p>
-	 * Sets the specified propertyName to the specified propertyValue. Subsequent calls to
-	 * {@link #getProperty(String)} will return the same propertyValue.
-	 * </p>
-	 * <p>
-	 * When a propertyValue other than <code>null</code> is set, then the property is considered
-	 * "set" (see {@link #isPropertySet(String)}), conversly, a propertyValue of <code>null</code>
-	 * is considered "unset".
-	 * </p>
-	 * <p>
-	 * If the specified propertyName is not a property (see {@link #isProperty(String)}) then a
-	 * RuntimeException will be thrown.
-	 * </p>
-	 * <p>
-	 * There are convenience methods for setting primitive <code>int</code> and
-	 * <code>boolean</code> types as well as Strings.
-	 * <ul>
-	 * <li>{@link #setIntProperty(String, int)}</li>
-	 * <li>{@link #setBooleanProperty(String, boolean)}</li>
-	 * <li>{@link #setStringProperty(String, String)}</li>
-	 * </ul>
-	 * </p>
-	 * <p>
-	 * An IDataModel implementor may define additional post set logic in
-	 * {@link IDataModelProvider#propertySet(String, Object)}.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the name of the property to set
-	 * @param propertyValue
-	 *            the value to set the property
-	 * 
-	 * 
-	 * @see #getProperty(String)
-	 * @see #isPropertySet(String)
-	 * @see #isProperty(String)
-	 * @see IDataModelProvider#propertySet(String, Object)
-	 */
-	public void setProperty(String propertyName, Object propertyValue);
-
-	/**
-	 * <p>
-	 * A convenience method for setting ints. This method is equavalent to:
-	 * <p>
-	 * <code>setProperty(propertyName, new Integer(propertyValue));</code>
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the name of the property
-	 * @param propertyValue
-	 *            the <code>int</code> value of the property
-	 * @see #setProperty(String, Object)
-	 * @see #getIntProperty(String)
-	 */
-	public void setIntProperty(String propertyName, int propertyValue);
-
-	/**
-	 * <p>
-	 * A convenience method for setting booleans. This method is equavalent to:
-	 * <p>
-	 * <code>setProperty(propertyName, (value) ? Boolean.TRUE : Boolean.FALSE);</code>
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the name of the property
-	 * @param propertyValue
-	 *            the <code>boolean</code> value of the property
-	 * @see #setProperty(String, Object)
-	 * @see #getBooleanProperty(String)
-	 */
-	public void setBooleanProperty(String propertyName, boolean propertyValue);
-
-	/**
-	 * <p>
-	 * A convenience method for setting Strings. This method is equavalent to:
-	 * <p>
-	 * <code>setProperty(propertyName, propertyValue);</code>
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the name of the property
-	 * @param propertyValue
-	 *            the value of the property
-	 * @see #setProperty(String, Object)
-	 * @see #getStringProperty(String)
-	 */
-	public void setStringProperty(String propertyName, String propertyValue);
-
-	/**
-	 * <p>
-	 * This method is used to nest the specified IDataModel within this IDataModel. The
-	 * <code>nestedModelName</code> argument should be a unique String to identify this particular
-	 * nested IDataModel. The same String is required when accessing the nested IDataModel using
-	 * either {@link #getNestedModel(String)} or {@link #removeNestedModel(String)}. If the
-	 * specified nested IDataModel has already been nested under this IDataModel or it is the same
-	 * instance as this IDataModel, then calling this method will have no effect.
-	 * </p>
-	 * 
-	 * @param nestedModelName
-	 *            the name of the IDataModel to be nested
-	 * @param dataModel
-	 *            the IDataModel to be nested
-	 * @return <code>true</code> if the nesting was successful, <code>false</code> otherwise.
-	 * 
-	 * @see #getNestedModel(String)
-	 * @see #removeNestedModel(String)
-	 */
-	public boolean addNestedModel(String nestedModelName, IDataModel dataModel);
-
-	/**
-	 * <p>
-	 * Remove the specified nestedModel.
-	 * </p>
-	 * 
-	 * @param nestedModelName
-	 *            the name of the nested IDataModel to remove.
-	 * @return the IDataModel removed, or <code>null</code> if the nested model does not exist or
-	 *         if the specified name is null.
-	 */
-	public IDataModel removeNestedModel(String nestedModelName);
-
-	/**
-	 * <p>
-	 * Returns <code>true</code> if a nested model exists (at the top level only) with the
-	 * specified name and <code>false</code> otherwise.
-	 * </p>
-	 * 
-	 * @param nestedModelName
-	 *            the name of the nested IDataModel to check.
-	 * @return Returns <code>true</code> if a nested model exists (at the top level only) with the
-	 *         specified name and <code>false</code> otherwise.
-	 */
-	public boolean isNestedModel(String nestedModelName);
-
-	/**
-	 * <p>
-	 * Returns the nested IDataModel identified the by the specified name. A RuntimeException is
-	 * thrown if there is no such nested IDataModel (i.e. isNestedModel() would return
-	 * <code>false</code>).
-	 * </p>
-	 * 
-	 * @param nestedModelName
-	 *            the name of the nested IDataModel to get.
-	 * @return the nested IDataModel
-	 */
-	public IDataModel getNestedModel(String nestedModelName);
-
-	/**
-	 * <p>
-	 * Returns a Collection of all nested IDataModels, or an empty Collection if none exist.
-	 * </p>
-	 * 
-	 * @return a Collection of all nested IDataModels, or an empty Collection if none exist.
-	 */
-	public Collection getNestedModels();
-
-	/**
-	 * <p>
-	 * Returns a Collection of all nested IDataModels names, or an empty Collection if none exist.
-	 * </p>
-	 * 
-	 * @return a Collection of all nested IDataModels names, or an empty Collection if none exist.
-	 */
-	public Collection getNestedModelNames();
-
-	/**
-	 * <p>
-	 * Returns a Collection of all nesting (the inverse of nested) IDataModels, or an empty
-	 * Collection if none exist.
-	 * </p>
-	 * 
-	 * @return a Collection of all nesting (the inverse of nested) IDataModels, or an empty
-	 *         Collection if none exist.
-	 */
-	public Collection getNestingModels();
-
-	/**
-	 * <p>
-	 * Returns a Collection of all base properties (not including nested properties), or an empty
-	 * Collection if none exist.
-	 * </p>
-	 * 
-	 * @return a Collection of all base properties (not including nested properties), or an empty
-	 *         Collection if none exist.
-	 */
-	public Collection getBaseProperties();
-
-	/**
-	 * <p>
-	 * Returns a Collection of all properties of recursively nested IDataModels, or an empty
-	 * Collection if none exist.
-	 * </p>
-	 * 
-	 * @return a Collection of all properties of recursively nested IDataModels, or an empty
-	 *         Collection if none exist.
-	 */
-	public Collection getNestedProperties();
-
-	/**
-	 * <p>
-	 * Returns a Collection of all properties (the union of getBaseProperties() and
-	 * getNestedProperties()), or an empty Collection if none exist.
-	 * </p>
-	 * 
-	 * @return a Collection of all properties (the union of getBaseProperties() and
-	 *         getNestedProperties()), or an empty Collection if none exist.
-	 */
-	public Collection getAllProperties();
-
-	/**
-	 * <p>
-	 * Returns <code>true</code> if the specified propertyName is a valid propertyName for this
-	 * root IDataModel only. Nested IDataModels are not checked, though it is possible for a nested
-	 * IDataModel to contain the same property.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name to check
-	 * @return <code>true</code> if this property is a base property, <code>false</code>
-	 *         otherwise.
-	 * 
-	 * @see #isProperty(String)
-	 * @see #isNestedProperty(String)
-	 */
-	public boolean isBaseProperty(String propertyName);
-
-	/**
-	 * <p>
-	 * Returns <code>true</code> if the specified propertyName is a valid propertyName for this
-	 * DataModel or any of its (recursively) nested IDataModels.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name to check
-	 * @return <code>true</code> if this is a property, <code>false</code> otherwise.
-	 * 
-	 * @see #isBaseProperty(String)
-	 */
-	public boolean isProperty(String propertyName);
-
-	/**
-	 * <p>
-	 * Returns <code>true</code> if the specified propertyName is a valid propertyName for any of
-	 * its (recursively) nested IDataModels. The root IDataModel is not checked, though it is
-	 * possible for the root IDataModel to contain the same property.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name to check
-	 * @return <code>true</code> if the property is nested, <code>false</code> otherwise.
-	 * @see #isBaseProperty(String)
-	 */
-	public boolean isNestedProperty(String propertyName);
-
-	/**
-	 * <p>
-	 * Returns <code>true</code> if the specified property has been set on the IDataModel. If it
-	 * has not been set, then a call to get the same property will return the default value.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name to check
-	 * @return <code>true</code> if the property is set, <code>false</code> otherwise.
-	 */
-	public boolean isPropertySet(String propertyName);
-
-	/**
-	 * <p>
-	 * Returns <code>true</code> if the specified property is enabled and <code>false</code>
-	 * otherwise.
-	 * </p>
-	 * <p>
-	 * An IDataModel implementor defines this in IDataModelProvider.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#isPropertyEnabled(String)
-	 * 
-	 * @param propertyName
-	 *            the property name to check
-	 * @return <code>true</code> if the specified property is enabled and <code>false</code>
-	 *         otherwise.
-	 */
-	public boolean isPropertyEnabled(String propertyName);
-
-	/**
-	 * <p>
-	 * Returns <code>false</code> if the the IStatus returned by validateProperty(String) is ERROR
-	 * and <code>true</code> otherwise.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the property name to check
-	 * @return <code>false</code> if the the IStatus returned by validateProperty(String) is ERROR
-	 *         and <code>true</code> otherwise.
-	 */
-	public boolean isPropertyValid(String propertyName);
-
-	/**
-	 * <p>
-	 * Returns an IStatus for the specified property. Retuns an IStatus.OK if the returned value is
-	 * valid with respect itself, other properites, and broader context of the IDataModel.
-	 * IStatus.ERROR is returned if the returned value is invalid. IStatus.WARNING may also be
-	 * returned if the value is not optimal.
-	 * </p>
-	 * <p>
-	 * An IDataModel implementor defines this in IDataModelProvider.
-	 * </p>
-	 * 
-	 * @see IDataModelProvider#validate(String)
-	 */
-	public IStatus validateProperty(String propertyName);
-
-	/**
-	 * <p>
-	 * Returns <code>false</code> if the IStatus returned by validate(true) is ERROR and
-	 * <code>true</code> otherwise.
-	 * </p>
-	 * 
-	 * @return <code>false</code> if the IStatus returned by validate(true) is ERROR and
-	 *         <code>true</code> otherwise.
-	 */
-	public boolean isValid();
-
-	/**
-	 * <p>
-	 * Equavalent to calling <code>validate(true)</code>.
-	 * </p>
-	 * 
-	 * @return an IStatus
-	 */
-	public IStatus validate();
-
-	/**
-	 * <p>
-	 * Iterates over all base properties and nested models IDs and calls validate(String). This
-	 * method returns when any call to validate(String) returns an IStatus error and
-	 * stopAtFirstFailure is set to true.
-	 * <p>
-	 * 
-	 * @param stopAtFirstFailure
-	 *            whether validation should stop at the first failure
-	 * @return an IStatus
-	 */
-	public IStatus validate(boolean stopAtFirstFailure);
-
-
-
-	/**
-	 * <p>
-	 * Returns a DataModelPropertyDescriptor for the specified property. The
-	 * <code>getPropertyValue()</code> method on the returned DataModelPropertyDescriptor will be
-	 * the same value as returned by <code>getPropertyValue(propertyName)</code>.
-	 * </p>
-	 * <p>
-	 * Following the example introduced in {@link #getValidPropertyDescriptors(String)}, suppose
-	 * the <code>SHIRT_SIZE</code> property is currently set to 1. A call to this method would
-	 * return a DataModelPropertyDescriptor whose <code>getPropertyValue()</code> returns
-	 * <code>1</code> and whose <code>getPropertyDescription()</code> returns <code>small</code>.
-	 * </p>
-	 * <p>
-	 * Also, note that even if a particular property is not confined to a finite set of values as
-	 * defined by {@link #getValidPropertyDescriptors(String)}this method will always return a
-	 * valid DataModelPropertyDescriptor.
-	 * </p>
-	 * 
-	 * <p>
-	 * An IDataModel implementor defines this in IDataModelProvider.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 * @return the DataModelPropertyDescriptor for the specified property
-	 * 
-	 * @see #getValidPropertyDescriptors(String)
-	 */
-	public DataModelPropertyDescriptor getPropertyDescriptor(String propertyName);
-
-	/**
-	 * <p>
-	 * Returns a DataModelPropertyDescriptor array consisting of all valid
-	 * DataModelPropertyDescriptors for the specified property. Each
-	 * {@link DataModelPropertyDescriptor} contains a value and a human readible description for the
-	 * value. The set of all values in the returned array are those values which are valid for the
-	 * IDataModel. This value set only makes sense when valid property values conform to a well
-	 * defined finite set. If no such value set exists for the property, then a 0 length array is
-	 * returned. <code>null</code> is never returned.
-	 * </p>
-	 * <p>
-	 * As an example, suppose there is a property called <code>SHIRT_SIZE</code> which is an
-	 * <code>Integer</code> type. Also suppse that valid shirt sizes are only small, medium, or
-	 * large. However, the actual values representing small, medium, and large are 1, 2, and 3
-	 * respectively. A call to <code>getValidPropertyDescriptors(SHIRT_SIZE)</code> would return a
-	 * DataModelPropertyDescriptor array where the value, description pairs would be {(1, small),
-	 * (2, medium), (3, large)}.
-	 * </p>
-	 * <p>
-	 * An IDataModel implementor defines this in IDataModelProvider.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            then name of the property to check
-	 * @return the array of valid DataModelPropertyDescriptors
-	 * @see #getPropertyDescriptor(String)
-	 */
-	public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName);
-
-	/**
-	 * <p>
-	 * Adds the specified IDataModelListener to listen for DataModelEvents. If the specified
-	 * listener has already been added, calling this method will have no effect.
-	 * </p>
-	 * 
-	 * @param dataModelListener
-	 *            the new listener to add.
-	 * 
-	 * @see #removeListener(IDataModelListener)
-	 */
-	public void addListener(IDataModelListener dataModelListener);
-
-	/**
-	 * <p>
-	 * Remove the specified IDataModelListener. If the specified listener is not a registered
-	 * listenr on this IDataModel, then calling this method will have no effect.
-	 * </p>
-	 * 
-	 * @param dataModelListener
-	 *            the listener to remove.
-	 * @see #addListener(IDataModelListener)
-	 */
-	public void removeListener(IDataModelListener dataModelListener);
-
-	/**
-	 * <p>
-	 * A constant used for notification.
-	 * </p>
-	 * 
-	 * @see DataModelEvent#VALUE_CHG
-	 * @see #notifyPropertyChange(String, int)
-	 */
-	public static final int VALUE_CHG = DataModelEvent.VALUE_CHG;
-	/**
-	 * <p>
-	 * A constant used for notification. This contant is different from the others because it does
-	 * not map to an event type on DataModelEvent. When notifying with this type, a check is first
-	 * done to see whether the property is set. If the property is <empf>NOT</emph> set, then a
-	 * <code>VALUE_CHG</code> is fired, otherwise nothing happens.
-	 * </p>
-	 * 
-	 * @see #notifyPropertyChange(String, int)
-	 */
-	public static final int DEFAULT_CHG = DataModelEvent.DEFAULT_CHG;
-	/**
-	 * <p>
-	 * A constant used for notification.
-	 * </p>
-	 * 
-	 * @see DataModelEvent#ENABLE_CHG
-	 * @see #notifyPropertyChange(String, int)
-	 */
-	public static final int ENABLE_CHG = DataModelEvent.ENABLE_CHG;
-	/**
-	 * <p>
-	 * A constant used for notification.
-	 * </p>
-	 * 
-	 * @see DataModelEvent#VALID_VALUES_CHG
-	 * @see #notifyPropertyChange(String, int)
-	 */
-	public static final int VALID_VALUES_CHG = DataModelEvent.VALID_VALUES_CHG;
-
-	/**
-	 * <p>
-	 * Notify all listeners of a property change. <code>eventType</code> specifies the type of
-	 * change. Acceptible values for eventType are <code>VALUE_CHG</code>,
-	 * <code>DEFAULT_CHG</code>, <code>ENABLE_CHG</code>, <code>VALID_VALUES_CHG</code>. If
-	 * the eventType is <code>DEFAULT_CHG</code> and the specified property is set, then this
-	 * method will do nothing.
-	 * </p>
-	 * <p>
-	 * Typically this method should only be invoked by an IDataModelProvider from its propertySet
-	 * implementation.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the name of the property changing
-	 * @param eventType
-	 *            the type of event to fire
-	 * 
-	 * @see #VALUE_CHG
-	 * @see #DEFAULT_CHG
-	 * @see #ENABLE_CHG
-	 * @see #VALID_VALUES_CHG
-	 * @see DataModelEvent
-	 */
-	public void notifyPropertyChange(String propertyName, int eventType);
-
-	/**
-	 * <p>
-	 * A typical dispose method used to clean up any resources not handled by general garbage
-	 * collection.
-	 * </p>
-	 * 
-	 */
-	public void dispose();
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelListener.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelListener.java
deleted file mode 100644
index d50aa4a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelListener.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-/**
- * <p>
- * The interface required when listening for DataModelEvents from an IDataModel.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModel#addListener(IDataModelListener)
- * @see org.eclipse.wst.common.frameworks.datamodel.DataModelEvent
- * 
- * @since 1.0
- */
-public interface IDataModelListener {
-
-	/**
-	 * <p>
-	 * Sent when DataModelEvents occur.
-	 * </p>
-	 * 
-	 * @param event
-	 *            the DataModelEvent
-	 */
-	public void propertyChanged(DataModelEvent event);
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelOperation.java
deleted file mode 100644
index 87cc589..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelOperation.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-import org.eclipse.core.commands.operations.IUndoableOperation;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.wst.common.environment.IEnvironment;
-
-/**
- * <p>
- * IDataModelOperation defines an IDataModel driven undoable operation. Every IDataModelOperation
- * may be extended by third party clients using the extended operation framework.
- * </p>
- * 
- * <p>
- * This interface is not intended to be implemented by clients. Clients should subclass
- * {@link AbstractDataModelOperation}.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModel
- * 
- * @since 1.0
- */
-public interface IDataModelOperation extends IUndoableOperation {
-
-	/**
-	 * <p>
-	 * Sets the unique operation id. Typically, clients should not invoke this method.
-	 * </p>
-	 * 
-	 * @param id
-	 *            the unique operation id
-	 */
-	public void setID(String id);
-
-	/**
-	 * <p>
-	 * Returns the unique operation id.
-	 * </p>
-	 * 
-	 * @return the unique operation id
-	 */
-	public String getID();
-
-	/**
-	 * <p>
-	 * Sets the IDataModel for this operation.
-	 * </p>
-	 * 
-	 * @param model
-	 *            the IDataModel used to run this operation
-	 */
-	public void setDataModel(IDataModel model);
-
-	/**
-	 * <p>
-	 * Returns this operation's IDataModel.
-	 * </p>
-	 * 
-	 * @return this operation's IDataModel.
-	 */
-	public IDataModel getDataModel();
-
-	/**
-	 * <p>
-	 * Returns the ISchedulingRule used for executing this job using
-	 * {@link IWorkspace#run(org.eclipse.core.resources.IWorkspaceRunnable, ISchedulingRule, int, org.eclipse.core.runtime.IProgressMonitor)}.
-	 * If <code>null</code> is returned, then IWorkspace.getRoot() is used as the ISchedulingRule
-	 * during execution.
-	 * </p>
-	 * 
-	 * @return the ISchedulingRule
-	 * 
-	 * @see #getOperationExecutionFlags()
-	 * @see IWorkspace#run(org.eclipse.core.resources.IWorkspaceRunnable, ISchedulingRule, int,
-	 *      org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public ISchedulingRule getSchedulingRule();
-
-	/**
-	 * <p>
-	 * Returns the OperationExecutionFlags used for executing this Operation as a workspace job.
-	 * {@link IWorkspace#run(org.eclipse.core.resources.IWorkspaceRunnable, ISchedulingRule, int, org.eclipse.core.runtime.IProgressMonitor)}.
-	 * </p>
-	 * 
-	 * @return the OperationExecutionFlags
-	 * 
-	 * @see #getSchedulingRule()
-	 * @see IWorkspace#run(org.eclipse.core.resources.IWorkspaceRunnable, ISchedulingRule, int,
-	 *      org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public int getOperationExecutionFlags();
-
-	/**
-	 * <p>
-	 * The framework will set the environment on this operation before it is executed. The operation
-	 * can then use the environment to report status, log information, and access resources in an
-	 * environment neutral way.
-	 * <p>
-	 * 
-	 * @param environment
-	 *            the IEnvironment to set.
-	 */
-	public void setEnvironment(IEnvironment environment);
-
-	/**
-	 * Returns the IEvironment set in {@link #setEnvironment(IEnvironment)}}
-	 * 
-	 * @return the set IEnvironment
-	 * 
-	 * @see #setEnvironment(IEnvironment)
-	 */
-	public IEnvironment getEnvironment();
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProperties.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProperties.java
deleted file mode 100644
index 93245bc..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProperties.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-/**
- * <p>
- * IDataModelProperties provides the base interface for all Data Model
- * Properties interfaces. Sub interface classes (e.g.
- * <code>some.company.IFooDataModelProperties.class</code>) should be used to
- * create instances of IDataModels using the
- * {@link DataModelFactory#createDataModel(Class)} method. In order for this
- * mechanism to work, the backing {@link IDataModelProvider} class must be
- * registerd to support the sub IDataModelProperties interface in one of two
- * ways. This registration should be performed by the model developer.
- * </p>
- * <p>
- * The first way to register the correct {@link IDataModelProvider} class is for
- * the interface to define a public static final Class _provider_class field
- * which is set to the {@link IDataModelProvider} class, e.g.
- * </p>
- * <p>
- * <code>public static final Class _provider_class = some.company.FooDataModelProvider.class</code>
- * </p>
- * The mechanism is recommended whenever the {@link IDataModelProperties} and
- * {@link IDataModelProvider} classes are both defined in the same plugin scope.
- * A second mechanism using the DataModelProviderExtension extension point is
- * available when the {@link IDataModelProvider} class is definend outside the
- * {@link IDataModelProperties} plugin scope.
- * 
- * <p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider
- * @see org.eclipse.wst.common.frameworks.datamodel.DataModelFactory
- * 
- * @since 1.0
- */
-public interface IDataModelProperties {
-
-	/**
-	 * A boolean property defaults to Boolean.TRUE. If this is set to Boolean.FALSE no extended
-	 * operations will be executed.
-	 */
-	public static final String ALLOW_EXTENSIONS = "IDataModelProperties.ALLOW_EXTENSIONS"; //$NON-NLS-1$
-	
-	/**
-	 * A List containing String objects, defautls to an empty List. If this list contains elements
-	 * and ALLOW_EXTENSIONS is set to Boolean.TRUE, then only extended operations not identified in
-	 * this list will be executed. These strings should either be the operation id or the fully
-	 * qualified operation class name.
-	 */
-	public static final String RESTRICT_EXTENSIONS = "IDataModelProperties.RESTRICT_EXTENSIONS"; //$NON-NLS-1$
-	
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProvider.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProvider.java
deleted file mode 100644
index c49ff3e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/IDataModelProvider.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.datamodel;
-
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-
-/**
- * IDataModelProviders are used by the DataMdoelFactory to construct IDataModels.
- * 
- * <p>
- * This interface is not intended to be implemented by clients. Clients should subclass
- * {@link AbstractDataModelProvider}.
- * </p>
- * 
- * @since 1.0
- */
-public interface IDataModelProvider extends IDataModelProperties {
-
-	public static IStatus OK_STATUS = new Status(IStatus.OK, "org.eclipse.wst.common.frameworks.internal", 0, "OK", null); //$NON-NLS-1$ //$NON-NLS-2$
-
-	public void setDataModel(IDataModel dataModel);
-
-	/**
-	 * <p>
-	 * Returns the backing IDataModel for this provider.
-	 * </p>
-	 * 
-	 * @return the backing IDataModel
-	 */
-	public IDataModel getDataModel();
-
-	/**
-	 * <p>
-	 * Returns a list of property names for which this provider is responsible. This method is
-	 * called only once during initialization.
-	 * </p>
-	 * 
-	 * @return the array of valid property names.
-	 */
-	public Set getPropertyNames();
-
-	/**
-	 * <p>
-	 * Providers should perform additional initialization here.
-	 * </p>
-	 */
-	public void init();
-
-	/**
-	 * <p>
-	 * This is where the provider should define how default properties should be computed.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the specified property
-	 * @return the default property value
-	 */
-	public Object getDefaultProperty(String propertyName);
-
-
-	/**
-	 * <p>
-	 * This is where the provider should define how property enablements are computed.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 *            the specified property
-	 * @return <code>true</code> if the property is enabled, <code>false</code> otherwise.
-	 */
-	public boolean isPropertyEnabled(String propertyName);
-
-	/**
-	 * IDataModelProviders should perform property validation here. All calls to
-	 * IDataModel.validateProperty(String) are routed to the appropriate IDatModelProvider. When
-	 * IDataModel.validate() or IDataModel.validate(boolean) are called to validate the entire
-	 * IDataModel, any nested model names are also passed through to the IDataModelProvider for a
-	 * chance to validate the nested IDataModel in an appropriate manner.
-	 * 
-	 * @param name
-	 * @return an IStatus
-	 */
-	public IStatus validate(String name);
-
-	/**
-	 * <p>
-	 * This is a special callback hook for the IDataModel provider to be notified of a setProperty()
-	 * call invoked on the backing IDataModel. This method is called after the actual value has been
-	 * stored by the IDataModel but before any general notifications are fired to its listeners.
-	 * Thus this IDataModelProvider may react to updates apropriately by setting other properties,
-	 * notifying default changes, notifying valid value changes, etc.
-	 * </p>
-	 * 
-	 * @param propertyName
-	 * @param propertyValue
-	 * @return <code>true</code> to fire a VALUE_CHG DataModelEvent.
-	 */
-	public boolean propertySet(String propertyName, Object propertyValue);
-
-	public DataModelPropertyDescriptor getPropertyDescriptor(String propertyName);
-
-	public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName);
-
-	public List getExtendedContext();
-
-	public IDataModelOperation getDefaultOperation();
-
-	public String getID();
-
-	public void dispose();
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/package.xml b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/package.xml
deleted file mode 100644
index 855e7a4..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/package.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html>
-    <head>
-        <meta
-            name="root"
-            content="../../../../../../" />
-        <title>Component creation and Referenced Component api overview</title>
-    </head>
-
-    <body>  
-		<abstract>
-        This package includes API  for Data Model Provider framework for builing executable
-        and undoable operations using data models, their providers and provider interfaces that
-        contain the properties used by the providers to set and retrieve these propertiese. 
-		</abstract>
-
-	<a href="#top">top</a>
-    </body>
-</html>    
-    
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/properties/package.xml b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/properties/package.xml
deleted file mode 100644
index caaf774..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/datamodel/properties/package.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html>
-    <head>
-        <meta
-            name="root"
-            content="../../../../../../../" />
-        <title>Component creation and Referenced Component api overview</title>
-    </head>
-
-    <body>  
-		<abstract>
-        This package includes API that defines the propeties that can be set on a flexible
-        project datamodel to drive the the wizard and operations.
-		</abstract>
-
-	<a href="#top">top</a>
-    </body>
-</html>    
-    
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/AbstractRegistryDescriptor.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/AbstractRegistryDescriptor.java
deleted file mode 100644
index d4069c5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/AbstractRegistryDescriptor.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 12, 2004
- *
- */
-package org.eclipse.wst.common.frameworks.internal;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.wst.common.frameworks.internal.enablement.FunctionGroupRegistry;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementIdentifier;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementManager;
-import org.eclipse.wst.common.frameworks.internal.enablement.Identifiable;
-
-
-/**
- * @author schacher
- * 
- * Common superclass for enablement-aware (e.g., using function groups or activiities) extension
- * points.
- */
-public abstract class AbstractRegistryDescriptor extends ConfigurationElementWrapper implements Identifiable {
-
-	protected Integer priority;
-
-	public AbstractRegistryDescriptor(IConfigurationElement anElement) {
-		super(anElement);
-	}
-
-	public IEnablementIdentifier getEnablementIdentifier(IProject project) {
-		return IEnablementManager.INSTANCE.getIdentifier(getID(), project);
-	}
-
-	public abstract String getID();
-
-	public int getPriority() {
-		if (priority == null)
-			priority = new Integer(FunctionGroupRegistry.getInstance().getFunctionPriority(getID()));
-		return priority.intValue();
-	}
-
-	public boolean isEnabled(IProject p) {
-		IEnablementIdentifier id = getEnablementIdentifier(p);
-		return id.isEnabled();
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/AdaptabilityUtility.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/AdaptabilityUtility.java
deleted file mode 100644
index 9e8a19d..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/AdaptabilityUtility.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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.wst.common.frameworks.internal;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.Platform;
-
-/**
- * @author mdelder
- *  
- */
-public class AdaptabilityUtility {
-
-
-	public static Object getAdapter(Object element, Class adapter) {
-		if (element == null)
-			return null;
-		else if (element instanceof IAdaptable)
-			return ((IAdaptable) element).getAdapter(adapter);
-		else
-			return Platform.getAdapterManager().getAdapter(element, adapter);
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ConfigurationElementWrapper.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ConfigurationElementWrapper.java
deleted file mode 100644
index 1f3572a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ConfigurationElementWrapper.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on Oct 20, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public class ConfigurationElementWrapper {
-
-	protected IConfigurationElement element;
-
-	/**
-	 *  
-	 */
-	public ConfigurationElementWrapper(IConfigurationElement element) {
-		super();
-		this.element = element;
-	}
-
-
-
-	/**
-	 * @return Returns the element.
-	 */
-	protected IConfigurationElement getElement() {
-		return element;
-	}
-
-	/**
-	 * Return the plugin id of the configuration element
-	 * 
-	 * @return
-	 */
-	public String getPluginId() {
-		String pluginId = null;
-
-		if (element != null) {
-			IExtension extension = element.getDeclaringExtension();
-
-			if (extension != null) {
-				pluginId = extension.getNamespace();
-				// TODO jsholl is this correct???
-			}
-		}
-
-		return pluginId;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/DoNotUseMeThisWillBeDeletedPost15.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/DoNotUseMeThisWillBeDeletedPost15.java
deleted file mode 100644
index 434c535..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/DoNotUseMeThisWillBeDeletedPost15.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal;
-
-/**
- * Other things to delete:
- * 
- * The wtpuiAction extension point and schema in org.eclipse.wst.common.frameworks.ui
- */
-
-
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface/method/field
- * 
- * @deprecated
- * 
- */
-
-/**
- * This interface is being used to track code slated for removal. Any class or interface
- * implementing or extending this interface respectively should not be used. All such classes and
- * interfaces have been deprecated and are no longer supported and will be deleted post WTP 1.5.
- * 
- * Any method or field with javadoc referencing this interface should not be used and will be
- * deleted post WTP 1.5
- * 
- * @deprecated
- */
-public interface DoNotUseMeThisWillBeDeletedPost15 {
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ExceptionHelper.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ExceptionHelper.java
deleted file mode 100644
index 517d65b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ExceptionHelper.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Utility class to factor common code for implementers of IArchiveWrappedException
- */
-public class ExceptionHelper {
-	/**
-	 * Utility class; cannot be instantiated
-	 */
-	private ExceptionHelper() {
-		super();
-	}
-
-	/**
-	 * Return the messages from
-	 * 
-	 * @exception and
-	 *                all nested exceptions, in order from outermost to innermost
-	 */
-	public static java.lang.String[] getAllMessages(IWrappedException exception) {
-		List messages = new ArrayList(4);
-		messages.add(exception.getMessage());
-		Exception nested = exception.getNestedException();
-		while (nested != null) {
-			messages.add(nested.getMessage());
-			if (nested instanceof IWrappedException)
-				nested = ((IWrappedException) nested).getNestedException();
-			else
-				nested = null;
-		}
-		return (String[]) messages.toArray(new String[messages.size()]);
-	}
-
-	/**
-	 * Return the messages from
-	 * 
-	 * @exception and
-	 *                all nested exceptions, in order from outermost to innermost, concatenated as
-	 *                one
-	 */
-	public static String getConcatenatedMessages(IWrappedException exception) {
-		String[] messages = getAllMessages(exception);
-		StringBuffer sb = new StringBuffer(256);
-		for (int i = 0; i < messages.length; i++) {
-			sb.append(messages[i]);
-			if (i < messages.length - 1)
-				sb.append('\n');
-		}
-		return sb.toString();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/HashUtil.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/HashUtil.java
deleted file mode 100644
index 6e48a2e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/HashUtil.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.eclipse.wst.common.frameworks.internal;
-
-public class HashUtil {
-
-	public static int SEED = 11;
-	private static int MULTI = 31;
-	
-	public static int hash(int seed, int i){
-		return seed * MULTI + i;
-	}
-	
-	public static int hash(int seed, Object obj){
-		return hash(seed, null != obj ? obj.hashCode() : SEED);
-	}
-	
-	public static int hash(int seed, boolean b){
-		return hash(seed, b ? 1 : SEED);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ISaveHandler.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ISaveHandler.java
deleted file mode 100644
index f67ce31..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/ISaveHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
-
-/**
- * Defines the API for coping with attempts to overwrite read-only files or save failures
- */
-public interface ISaveHandler {
-	public void access();
-
-	public void handleSaveFailed(SaveFailedException ex, IProgressMonitor monitor);
-
-	public void release();
-
-	public boolean shouldContinueAndMakeFileEditable(IFile aFile);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/IWrappedException.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/IWrappedException.java
deleted file mode 100644
index 7b3f3ae..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/IWrappedException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal;
-
-/**
- * Common interface for ArchiveRuntime and ArchiveWrapped exceptions, which can contain nested
- * exceptions
- */
-public interface IWrappedException {
-	/**
-	 * Return the messages from this and all nested exceptions, in order from outermost to innermost
-	 */
-	public String[] getAllMessages();
-
-	/**
-	 * Return the messages from this and all nested exceptions, in order from outermost to
-	 * innermost, concatenated as one
-	 */
-	public String getConcatenatedMessages();
-
-	public Exception getInnerMostNestedException();
-
-	public String getMessage();
-
-	public java.lang.Exception getNestedException();
-
-	public void printStackTrace();
-
-	public void printStackTrace(java.io.PrintStream s);
-
-	public void printStackTrace(java.io.PrintWriter s);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/Messages.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/Messages.java
deleted file mode 100644
index d8756a9..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/Messages.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on Nov 21, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * @author DABERG
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public abstract class Messages {
-	//Resource bundle.
-	protected ResourceBundle resourceBundle;
-
-	/**
-	 * The constructor.
-	 */
-	public Messages() {
-		initializeBundle();
-	}
-
-	protected abstract void initializeBundle();
-
-	/**
-	 * Returns the string from the resource bundle, or 'key' if not found.
-	 */
-	protected String doGetResourceString(String key) {
-		try {
-			return (resourceBundle != null ? resourceBundle.getString(key) : key);
-		} catch (MissingResourceException e) {
-			return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-	}
-
-	protected String doGetResourceString(String key, Object[] args) {
-		String pattern = doGetResourceString(key);
-		if (pattern != null)
-			return MessageFormat.format(pattern, args);
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SaveFailedException.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SaveFailedException.java
deleted file mode 100644
index 7763509..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SaveFailedException.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal;
-
-/**
- * Runtime exception that could get thrown during save of an edit model; clients should use
- * {@link #getConcatenatedMessages}to get all the messages of this and all nested exceptions to
- * report the failure.
- */
-public class SaveFailedException extends WrappedRuntimeException {
-	/**
-	 * Comment for <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = -4640018901910731240L;
-
-	/**
-	 * SaveFailedException constructor comment.
-	 */
-	public SaveFailedException() {
-		super();
-	}
-
-	/**
-	 * SaveFailedException constructor comment.
-	 * 
-	 * @param e
-	 *            java.lang.Exception
-	 */
-	public SaveFailedException(Exception e) {
-		super(e);
-	}
-
-	/**
-	 * SaveFailedException constructor comment.
-	 * 
-	 * @param s
-	 *            java.lang.String
-	 */
-	public SaveFailedException(String s) {
-		super(s);
-	}
-
-	/**
-	 * SaveFailedException constructor comment.
-	 * 
-	 * @param s
-	 *            java.lang.String
-	 * @param e
-	 *            java.lang.Exception
-	 */
-	public SaveFailedException(String s, Exception e) {
-		super(s, e);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SaveHandlerHeadless.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SaveHandlerHeadless.java
deleted file mode 100644
index a9c07ce..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SaveHandlerHeadless.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.enablement.nonui.IWFTWrappedException;
-
-/**
- * Insert the type's description here. Creation date: (10/19/2001 11:40:59 AM)
- * 
- * @author: Administrator
- */
-public class SaveHandlerHeadless implements ISaveHandler {
-	/**
-	 * HeadlessSaveHandler constructor comment.
-	 */
-	public SaveHandlerHeadless() {
-		super();
-	}
-
-	/**
-	 * access method comment.
-	 */
-	public void access() {
-	}
-
-	/**
-	 * handleSaveFailed method comment.
-	 */
-	public void handleSaveFailed(SaveFailedException ex, org.eclipse.core.runtime.IProgressMonitor monitor) {
-		throw ex;
-	}
-
-	public static boolean isFailedWriteFileFailure(IWFTWrappedException ex) {
-		Exception nested = ex.getInnerMostNestedException();
-		if (nested == null)
-			return false;
-
-		return isFailedWriteFileFailure(nested);
-	}
-
-	public static boolean isFailedWriteFileFailure(Exception ex) {
-		if (ex instanceof IWFTWrappedException)
-			return isFailedWriteFileFailure((IWFTWrappedException) ex);
-		else if (ex instanceof CoreException)
-			return isFailedWriteFileFailure((CoreException) ex);
-		return false;
-	}
-
-	public static boolean isFailedWriteFileFailure(CoreException ex) {
-		org.eclipse.core.runtime.IStatus status = ex.getStatus();
-		if (status == null)
-			return false;
-		Throwable nested = status.getException();
-		if (nested instanceof CoreException)
-			return isFailedWriteFileFailure((CoreException) nested);
-		return status.getCode() == org.eclipse.core.resources.IResourceStatus.FAILED_WRITE_LOCAL;
-	}
-
-	/**
-	 * release method comment.
-	 */
-	public void release() {
-	}
-
-	/**
-	 * shouldContinueAndMakeFileEditable method comment.
-	 */
-	public boolean shouldContinueAndMakeFileEditable(org.eclipse.core.resources.IFile aFile) {
-		if (aFile == null)
-			return false;
-		String error = WTPResourceHandler.getString("Unable_to_save_read-only_f_ERROR_", new Object[]{aFile.getFullPath()}); //$NON-NLS-1$ = "Unable to save read-only file: "
-		Logger.getLogger().logError(error);
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SaveHandlerRegister.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SaveHandlerRegister.java
deleted file mode 100644
index 7dee26d..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/SaveHandlerRegister.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal;
-
-import org.eclipse.jem.util.UIContextDetermination;
-
-
-/**
- * A registry for the default ISaveHandler to use when saving edit models
- */
-public class SaveHandlerRegister {
-	private static ISaveHandler saveHandler;
-
-	/**
-	 * This is a utility class and should not be instantiated
-	 */
-	protected SaveHandlerRegister() {
-		super();
-	}
-
-	public static ISaveHandler getSaveHandler() {
-		if (saveHandler == null)
-			saveHandler = (ISaveHandler) UIContextDetermination.createInstance("saveHandler"); //$NON-NLS-1$
-		return saveHandler;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPPlugin.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPPlugin.java
deleted file mode 100644
index 9c4627a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPPlugin.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Dec 10, 2003
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal;
-
-import java.util.ResourceBundle;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jem.util.logger.proxyrender.DefaultPluginTraceRenderer;
-import org.eclipse.jem.util.logger.proxyrender.IMsgLogger;
-import org.eclipse.wst.common.frameworks.internal.enablement.nonui.WorkbenchUtil;
-import org.osgi.framework.BundleContext;
-
-public abstract class WTPPlugin extends Plugin implements IMsgLogger {
-	protected static Logger logger = null;
-	protected static WTPPlugin instance = null; 
-	public ResourceBundle resourceBundle;
-
-	/**
-	 * @param descriptor
-	 */
-	public WTPPlugin() {
-		super();
-		instance = this;
-	}
-
-	public Logger getMsgLogger() {
-		if (logger == null) {
-			logger = Logger.getLogger(getPluginID());
-			setRenderer(logger);
-		}
-		return logger;
-	}
-
-	/**
-	 * @param aLogger
-	 */
-	protected void setRenderer(Logger aLogger) {
-		new DefaultPluginTraceRenderer(aLogger);
-	}
-
-	public Logger getLogger() {
-		return getMsgLogger();
-	}
-	public static boolean isPlatformCaseSensitive() {
-		return Platform.OS_MACOSX.equals(Platform.getOS()) ? false : new
-				java.io.File("a").compareTo(new java.io.File("A")) != 0;  //$NON-NLS-1$//$NON-NLS-2$
-	}
-
-	public abstract String getPluginID();
-	
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.runtime.Plugin#startup()
-	 */
-	public void start(BundleContext context) throws Exception  {
-		super.start(context);
-		WorkbenchUtil.setWorkbenchIsRunning(true);
-	}
-	
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPProjectUtilities.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPProjectUtilities.java
deleted file mode 100644
index f202607..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPProjectUtilities.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Nov 4, 2003
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-
-/**
- * @author jsholl
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public class WTPProjectUtilities {
-
-	/**
-	 * Adds a old nauture to a project, FIRST, this is used to make project backward compatible
-	 */
-	public static void addOldNatureToProject(IProject proj, String natureId) throws CoreException {
-		IProjectDescription description = proj.getDescription();
-		String[] prevNatures = description.getNatureIds();
-
-		//check if the old nature does not exist
-		boolean addNature = true;
-		for (int i = 0; i < prevNatures.length; i++) {
-			String nature = prevNatures[i];
-			if (nature.equals(natureId)) {
-				addNature = false;
-				break;
-			}
-		}
-		if (addNature) {
-			String[] newNatures = new String[prevNatures.length + 1];
-			System.arraycopy(prevNatures, 0, newNatures, 1, prevNatures.length);
-			newNatures[0] = natureId;
-			description.setNatureIds(newNatures);
-			proj.setDescription(description, IResource.AVOID_NATURE_CONFIG, null);
-		}
-	}
-
-	/**
-	 * Adds a nature in the project in the index specified
-	 */
-	public static void addOldNatureToProject(IProject proj, String natureId, int index) throws CoreException {
-		IProjectDescription description = proj.getDescription();
-		String[] prevNatures = description.getNatureIds();
-
-		//check if the old nature does not exist
-		boolean addNature = true;
-		for (int i = 0; i < prevNatures.length; i++) {
-			String nature = prevNatures[i];
-			if (nature.equals(natureId)) {
-				addNature = false;
-				break;
-			}
-		}
-		if (addNature) {
-			String[] newNatures = new String[prevNatures.length + 1];
-			System.arraycopy(prevNatures, 0, newNatures, 0, index);
-
-			newNatures[index] = natureId;
-			System.arraycopy(prevNatures, index, newNatures, index + 1, prevNatures.length - index);
-			description.setNatureIds(newNatures);
-			proj.setDescription(description, IResource.AVOID_NATURE_CONFIG, null);
-		}
-	}
-
-	/**
-	 * Adds a nauture to a project, FIRST
-	 */
-	public static void addNatureToProject(IProject proj, String natureId) throws CoreException {
-		IProjectDescription description = proj.getDescription();
-		String[] prevNatures = description.getNatureIds();
-		String[] newNatures = new String[prevNatures.length + 1];
-		System.arraycopy(prevNatures, 0, newNatures, 1, prevNatures.length);
-		newNatures[0] = natureId;
-		description.setNatureIds(newNatures);
-		proj.setDescription(description, null);
-	}
-
-	/**
-	 * Adds a nature to a project, LAST
-	 */
-	public static void addNatureToProjectLast(IProject proj, String natureId) throws CoreException {
-		IProjectDescription description = proj.getDescription();
-		String[] prevNatures = description.getNatureIds();
-		String[] newNatures = new String[prevNatures.length + 1];
-		System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
-		newNatures[prevNatures.length] = natureId;
-		description.setNatureIds(newNatures);
-		proj.setDescription(description, null);
-	}
-
-	/**
-	 * remove a nature from the project
-	 */
-	public static void removeNatureFromProject(IProject project, String natureId) throws CoreException {
-		IProjectDescription description = project.getDescription();
-		String[] prevNatures = description.getNatureIds();
-		int size = prevNatures.length;
-		int newsize = 0;
-		String[] newNatures = new String[size];
-		boolean matchfound = false;
-		for (int i = 0; i < size; i++) {
-			if (prevNatures[i].equals(natureId)) {
-				matchfound = true;
-				continue;
-			}
-			newNatures[newsize++] = prevNatures[i];
-		}
-		if (!matchfound)
-			throw new CoreException(new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, "The nature id " + natureId + " does not exist on the project " + project.getName(), null)); //$NON-NLS-1$ //$NON-NLS-2$
-		String[] temp = newNatures;
-		newNatures = new String[newsize];
-		System.arraycopy(temp, 0, newNatures, 0, newsize);
-		description.setNatureIds(newNatures);
-		project.setDescription(description, null);
-	}
-
-	public static IProject getProject(Object object) {
-		IProject result = null;
-
-		if (object instanceof IProject)
-			result = (IProject) object;
-		else if (object instanceof IResource)
-			result = ((IResource) object).getProject();
-		else if (object instanceof IAdaptable)
-			result = (IProject) ((IAdaptable) object).getAdapter(IProject.class);
-
-		return result;
-	}
-
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPResourceHandler.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPResourceHandler.java
deleted file mode 100644
index 6d82d66..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WTPResourceHandler.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * @author Administrator
- * 
- *  
- */
-public class WTPResourceHandler {
-
-	private static ResourceBundle fgResourceBundle;
-
-	/**
-	 * Returns the resource bundle used by all classes in this Project
-	 */
-	public static ResourceBundle getResourceBundle() {
-		try {
-			return ResourceBundle.getBundle("wtp_common"); //$NON-NLS-1$
-		} catch (MissingResourceException e) {
-			// does nothing - this method will return null and
-			// getString(String) will return the key
-			// it was called with
-		}
-		return null;
-	}
-
-	public static String getString(String key) {
-		if (fgResourceBundle == null) {
-			fgResourceBundle = getResourceBundle();
-		}
-
-		if (fgResourceBundle != null) {
-			try {
-				return fgResourceBundle.getString(key);
-			} catch (MissingResourceException e) {
-				return "!" + key + "!"; //$NON-NLS-2$//$NON-NLS-1$
-			}
-		}
-		return "!" + key + "!"; //$NON-NLS-2$//$NON-NLS-1$
-	}
-
-	public static String getString(String key, Object[] args) {
-
-		try {
-			return MessageFormat.format(getString(key), args);
-		} catch (IllegalArgumentException e) {
-			return getString(key);
-		}
-
-	}
-
-	public static String getString(String key, Object[] args, int x) {
-
-		return getString(key);
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedException.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedException.java
deleted file mode 100644
index cd2aba8..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedException.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal;
-
-public class WrappedException extends java.lang.reflect.InvocationTargetException {
-	/**
-	 * Comment for <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = -9221925581603648538L;
-
-	/**
-	 * WFTWrappedException constructor comment.
-	 */
-	protected WrappedException() {
-		super();
-	}
-
-	/**
-	 * WFTWrappedException constructor comment.
-	 * 
-	 * @param target
-	 *            java.lang.Throwable
-	 */
-	public WrappedException(Throwable target) {
-		super(target);
-	}
-
-	/**
-	 * WFTWrappedException constructor comment.
-	 * 
-	 * @param target
-	 *            java.lang.Throwable
-	 * @param s
-	 *            java.lang.String
-	 */
-	public WrappedException(Throwable target, String s) {
-		super(target, s);
-	}
-
-	/**
-	 * Print out a stack trace to the system err.
-	 */
-	public void printStackTrace() {
-		printStackTrace(System.err);
-	}
-
-	/**
-	 * Prints the exception to System.err. If we have a nested exception, print its stack.
-	 */
-	public void printStackTrace(java.io.PrintStream s) {
-		if (getTargetException() != null) {
-			s.println(this);
-			s.println("Stack trace of nested exception:"); //$NON-NLS-1$
-			getTargetException().printStackTrace(s);
-		} else {
-			super.printStackTrace(s);
-		}
-	}
-
-	/**
-	 * Prints the exception to System.err. If we have a nested exception, print its stack.
-	 */
-	public void printStackTrace(java.io.PrintWriter s) {
-		if (getTargetException() != null) {
-			s.println(this);
-			s.println("Stack trace of nested exception:"); //$NON-NLS-1$
-			getTargetException().printStackTrace(s);
-		} else {
-			super.printStackTrace(s);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedRuntimeException.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedRuntimeException.java
deleted file mode 100644
index 35ed923..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/WrappedRuntimeException.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal;
-
-public class WrappedRuntimeException extends RuntimeException implements IWrappedException {
-	/**
-	 * Comment for <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = 2684637746275620101L;
-	/** The exception which necessitated this runtime exception, if one exists */
-	protected Exception nestedException;
-
-	public WrappedRuntimeException() {
-		super();
-	}
-
-	public WrappedRuntimeException(Exception e) {
-		super();
-		setNestedException(e);
-	}
-
-	public WrappedRuntimeException(String s) {
-		super(s);
-	}
-
-	public WrappedRuntimeException(String s, Exception e) {
-		super(s);
-		setNestedException(e);
-	}
-
-	/**
-	 * Return the messages from this and all nested exceptions, in order from outermost to innermost
-	 */
-	public java.lang.String[] getAllMessages() {
-		return ExceptionHelper.getAllMessages(this);
-	}
-
-	/**
-	 * Return the messages from this and all nested exceptions, in order from outermost to
-	 * innermost, concatenated as one
-	 */
-	public java.lang.String getConcatenatedMessages() {
-		return ExceptionHelper.getConcatenatedMessages(this);
-	}
-
-	/**
-	 * getInnerMostNestedException method comment.
-	 */
-	public java.lang.Exception getInnerMostNestedException() {
-		Exception n = getNestedException();
-		if (n == null)
-			return this;
-		else if (n instanceof IWrappedException)
-			return ((IWrappedException) n).getInnerMostNestedException();
-		else
-			return n;
-	}
-
-	/**
-	 * @return java.lang.Exception
-	 */
-	public java.lang.Exception getNestedException() {
-		return nestedException;
-	}
-
-	/**
-	 * Print out a stack trace to the system err.
-	 */
-	public void printStackTrace() {
-		printStackTrace(System.err);
-	}
-
-	/**
-	 * Prints the exception to System.err. If we have a nested exception, print its stack.
-	 */
-	public void printStackTrace(java.io.PrintStream s) {
-		if (nestedException != null) {
-			s.println(this);
-			s.println("Stack trace of nested exception:"); //$NON-NLS-1$
-			nestedException.printStackTrace(s);
-		} else {
-			super.printStackTrace(s);
-		}
-	}
-
-	/**
-	 * Prints the exception to System.err. If we have a nested exception, print its stack.
-	 */
-	public void printStackTrace(java.io.PrintWriter s) {
-		if (nestedException != null) {
-			s.println(this);
-			s.println("Stack trace of nested exception:"); //$NON-NLS-1$
-			nestedException.printStackTrace(s);
-		} else {
-			super.printStackTrace(s);
-		}
-	}
-
-	/**
-	 * @param newNestedException
-	 *            java.lang.Exception
-	 */
-	public void setNestedException(java.lang.Exception newNestedException) {
-		nestedException = newNestedException;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/activities/WTPActivityBridge.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/activities/WTPActivityBridge.java
deleted file mode 100644
index 3538ea4..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/activities/WTPActivityBridge.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on May 4, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.activities;
-
-import java.util.Collections;
-import java.util.Set;
-
-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.Platform;
-import org.eclipse.jem.util.logger.proxy.Logger;
-
-/**
- * @author jsholl
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Generation - Code and Comments
- */
-public class WTPActivityBridge {
-	private static final String PLUGIN_ID = "org.eclipse.wst.common.frameworks"; //$NON-NLS-1$
-	private static final String EXTENSION_POINT = "WTPActivityBridgeHelper"; //$NON-NLS-1$
-	private static final String LISTENER_CLASS = "class"; //$NON-NLS-1$
-
-	private static WTPActivityBridge INSTANCE = null;
-	private WTPActivityBridgeHelper[] listeners;
-
-	public static WTPActivityBridge getInstance() {
-		if (null == INSTANCE) {
-			INSTANCE = new WTPActivityBridge();
-		}
-		return INSTANCE;
-	}
-
-	private WTPActivityBridge() {
-		loadExtensionPoints();
-	}
-
-	public void enableActivity(String activityID, boolean enabled) {
-		for (int i = 0; i < listeners.length; i++) {
-			listeners[i].enableActivity(activityID, enabled);
-		}
-	}
-
-	public Set getEnabledActivityIds() {
-		for (int i = 0; i < listeners.length; i++) {
-			return listeners[i].getEnabledActivityIds();
-		}
-		return Collections.EMPTY_SET;
-	}
-
-	public void setEnabledActivityIds(Set activityIDs) {
-		for (int i = 0; i < listeners.length; i++) {
-			listeners[i].setEnabledActivityIds(activityIDs);
-		}
-	}
-
-	public Set getActivityIDsFromContribution(String localID, String pluginID) {
-		for (int i = 0; i < listeners.length; i++) {
-			return listeners[i].getActivityIDsFromContribution(localID, pluginID);
-		}
-		return Collections.EMPTY_SET;
-	}
-
-	private void loadExtensionPoints() {
-		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(PLUGIN_ID, EXTENSION_POINT);
-		if (point == null)
-			return;
-		IConfigurationElement[] elements = point.getConfigurationElements();
-		listeners = new WTPActivityBridgeHelper[elements.length];
-		for (int i = 0; i < elements.length; i++) {
-			if (null == elements[i].getAttribute(LISTENER_CLASS)) {
-				logError(elements[i], "No " + LISTENER_CLASS + " defined."); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-			try {
-				listeners[i] = (WTPActivityBridgeHelper) elements[i].createExecutableExtension(LISTENER_CLASS);
-			} catch (CoreException e) {
-				logError(elements[i], "Error loading " + LISTENER_CLASS + ":" + elements[i].getAttribute(LISTENER_CLASS)); //$NON-NLS-1$ //$NON-NLS-2$
-				e.printStackTrace();
-			}
-		}
-	}
-
-	public static void logError(IConfigurationElement element, String text) {
-		IExtension extension = element.getDeclaringExtension();
-		StringBuffer buf = new StringBuffer();
-		buf.append("Plugin " + extension.getNamespace() + ", extension " + extension.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
-		buf.append("\n" + text); //$NON-NLS-1$
-		Logger.getLogger().logError(buf.toString());
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/activities/WTPActivityBridgeHelper.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/activities/WTPActivityBridgeHelper.java
deleted file mode 100644
index 4378df1..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/activities/WTPActivityBridgeHelper.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-/*
- * Created on May 4, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.activities;
-
-import java.util.Set;
-
-/**
- * @author jsholl
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java -
- * Code Generation - Code and Comments
- */
-public interface WTPActivityBridgeHelper {
-
-	public void enableActivity(String activityID, boolean enabled);
-
-	public Set getEnabledActivityIds();
-
-	public void setEnabledActivityIds(Set activityIDs);
-
-	public Set getActivityIDsFromContribution(String localID, String pluginID);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelExtensionReader.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelExtensionReader.java
deleted file mode 100644
index 86adbc6..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelExtensionReader.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-public class DataModelExtensionReader extends RegistryReader {
-
-	private static final String EXTENSION = "DataModelProviderExtension"; //$NON-NLS-1$
-
-	private static final String PROVIDER_ELEMENT = "DataModelProvider"; //$NON-NLS-1$
-	private static final String DEFINES_TYPE_ELEMENT = "ProviderDefinesType"; //$NON-NLS-1$
-	private static final String IMPLEMENTS_TYPE_ELEMENT = "ProviderImplementsType"; //$NON-NLS-1$
-
-	private static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_PROVIDER_TYPE = "providerType"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_PROVIDER_ID = "providerID"; //$NON-NLS-1$
-//	private static final String ATTRIBUTE_FG = "functionGroupID"; //$NON-NLS-1$
-
-	private HashMap providerExtensions;
-	private HashMap definesExtensions;
-	private HashMap implementsExtensions;
-
-	private boolean hasInitialized = false;
-
-	public DataModelExtensionReader() {
-		super(WTPCommonPlugin.PLUGIN_ID, EXTENSION);
-	}
-
-	public boolean readElement(IConfigurationElement element) {
-		if (element.getName().equals(PROVIDER_ELEMENT)) {
-			String id = element.getAttribute(ATTRIBUTE_ID);
-			if (null == id || id.trim().length() == 0) {
-				Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + PROVIDER_ELEMENT + " is missing " + ATTRIBUTE_ID)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-			String className = element.getAttribute(ATTRIBUTE_CLASS);
-			if (null == className || className.trim().length() == 0) {
-				Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + PROVIDER_ELEMENT + " is missing " + ATTRIBUTE_CLASS)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-			addProviderExtension(id, element);
-		} else if (element.getName().equals(DEFINES_TYPE_ELEMENT)) {
-			String type = element.getAttribute(ATTRIBUTE_PROVIDER_TYPE);
-			if (null == type || type.trim().length() == 0) {
-				Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + DEFINES_TYPE_ELEMENT + " is missing " + ATTRIBUTE_PROVIDER_TYPE)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-			String id = element.getAttribute(ATTRIBUTE_PROVIDER_ID);
-			if (null == id || id.trim().length() == 0) {
-				Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + DEFINES_TYPE_ELEMENT + " is missing " + ATTRIBUTE_PROVIDER_ID)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-			addDefinesExtension(type, id);
-		} else if (element.getName().equals(IMPLEMENTS_TYPE_ELEMENT)) {
-			String type = element.getAttribute(ATTRIBUTE_PROVIDER_TYPE);
-			if (null == type || type.trim().length() == 0) {
-				Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + DEFINES_TYPE_ELEMENT + " is missing " + ATTRIBUTE_PROVIDER_TYPE)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-			String id = element.getAttribute(ATTRIBUTE_PROVIDER_ID);
-			if (null == id || id.trim().length() == 0) {
-				Logger.getLogger().logError(new RuntimeException("Extension:" + EXTENSION + " Element:" + DEFINES_TYPE_ELEMENT + " is missing " + ATTRIBUTE_PROVIDER_ID)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-			addImplementsExtension(type, id);
-		}
-		return true;
-	}
-
-	private void addProviderExtension(String id, IConfigurationElement element) {
-		if (providerExtensions.containsKey(id)) {
-			Logger.getLogger().logError(new RuntimeException("Duplicate " + PROVIDER_ELEMENT + " " + ATTRIBUTE_ID + " " + id)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		providerExtensions.put(id, element);
-	}
-
-	private void addDefinesExtension(String type, String id) {
-		if (definesExtensions.containsKey(type)) {
-			Logger.getLogger().logError(new RuntimeException("Duplicate " + PROVIDER_ELEMENT + " " + ATTRIBUTE_PROVIDER_TYPE + " " + type)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		definesExtensions.put(type, id);
-	}
-
-	private void addImplementsExtension(String type, String id) {
-		List cache;
-		if (implementsExtensions.containsKey(type))
-			cache = (List) implementsExtensions.get(type);
-		else
-			cache = new ArrayList();
-		cache.add(id);
-		implementsExtensions.put(type, cache);
-	}
-
-	protected IConfigurationElement getProviderExtension(String id) {
-		readRegistryIfNecessary();
-		IConfigurationElement element = (IConfigurationElement) providerExtensions.get(id);
-		if (null == element) {
-			Logger.getLogger().log(new RuntimeException("Extension:" + EXTENSION + " Element:" + PROVIDER_ELEMENT + " not found for " + ATTRIBUTE_ID + ": " + id)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		}
-		return element;
-	}
-
-	protected String getDefinesExtension(String providerType) {
-		readRegistryIfNecessary();
-		String element = (String) definesExtensions.get(providerType);
-		if (null == element) {
-			Logger.getLogger().log(new RuntimeException("Extension:" + EXTENSION + " Element:" + DEFINES_TYPE_ELEMENT + " not found for " + ATTRIBUTE_PROVIDER_TYPE + ": " + providerType)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		}
-		return element;
-	}
-
-	public String[] getProviderDescriptorsForProviderKind(String providerType) {
-		readRegistryIfNecessary();
-		List providerList = new ArrayList();
-		providerList.add(getDefinesExtension(providerType));
-		if (implementsExtensions.containsKey(providerType)) {
-			List implementsIds = (List) implementsExtensions.get(providerType);
-			if (implementsIds != null && !implementsIds.isEmpty()) {
-				providerList.addAll(implementsIds);
-			}
-		}
-		String[] providerArray = new String[providerList.size()];
-		for (int i = 0; i < providerArray.length; i++) {
-			providerArray[i] = (String) providerList.get(i);
-		}
-		return providerArray;
-	}
-
-	private void readRegistryIfNecessary() {
-		if (!hasInitialized) {
-			providerExtensions = new HashMap();
-			definesExtensions = new HashMap();
-			implementsExtensions = new HashMap();
-			readRegistry();
-			hasInitialized = true;
-		}
-	}
-
-	public IDataModelProvider getProvider(String id) {
-		IDataModelProvider provider = null;
-		IConfigurationElement element = getProviderExtension(id);
-		if (element == null)
-			return null;
-		try {
-			provider = (IDataModelProvider) element.createExecutableExtension(ATTRIBUTE_CLASS);
-		} catch (CoreException e) {
-			Logger.getLogger().logError(e);
-		}
-		return provider;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelImpl.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelImpl.java
deleted file mode 100644
index c247553..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelImpl.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelPropertyDescriptor;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelProperties;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider;
-import org.eclipse.wst.common.frameworks.internal.WTPResourceHandler;
-
-public final class DataModelImpl implements IDataModel, IDataModelListener {
-
-	private static final String PROPERTY_NOT_LOCATED_ = WTPResourceHandler.getString("20"); //$NON-NLS-1$
-	private static final String NESTED_MODEL_NOT_LOCATED = WTPResourceHandler.getString("21"); //$NON-NLS-1$
-
-	private static final DataModelPropertyDescriptor[] NO_DESCRIPTORS = new DataModelPropertyDescriptor[0];
-
-	private Collection basePropertyNames;
-	private Collection allPropertyNames;
-	private Collection nestedPropertyNames; // lazily initialzed when nested models added
-	private Map propertyValues = new Hashtable();
-	private Map nestedModels;
-	private Set nestingModels;
-	private List listeners;
-
-	private IDataModelProvider provider;
-
-	public DataModelImpl(IDataModelProvider dataModelProvider) {
-		init(dataModelProvider);
-	}
-
-	private void init(IDataModelProvider dataModelProvider) {
-		this.provider = dataModelProvider;
-		dataModelProvider.setDataModel(this);
-		Collection propertyNames = dataModelProvider.getPropertyNames();
-		HashSet properties = new HashSet();
-		properties.addAll(propertyNames);
-
-		properties.add(IDataModelProperties.ALLOW_EXTENSIONS);
-		properties.add(IDataModelProperties.RESTRICT_EXTENSIONS);
-		basePropertyNames = Collections.unmodifiableCollection(properties);
-		allPropertyNames = new HashSet();
-		allPropertyNames.addAll(basePropertyNames);
-		dataModelProvider.init();
-	}
-
-	public boolean isBaseProperty(String propertyName) {
-		return basePropertyNames.contains(propertyName);
-	}
-
-	public Collection getBaseProperties() {
-		return Collections.unmodifiableCollection(basePropertyNames);
-	}
-
-	public boolean isProperty(String propertyName) {
-		return allPropertyNames.contains(propertyName);
-	}
-
-	public Collection getAllProperties() {
-		return Collections.unmodifiableCollection(allPropertyNames);
-	}
-
-	public boolean isNestedProperty(String propertyName) {
-		return null != nestedPropertyNames && nestedPropertyNames.contains(propertyName);
-	}
-
-	public Collection getNestedProperties() {
-		return Collections.unmodifiableCollection(nestedPropertyNames);
-	}
-
-	private void checkValidPropertyName(String propertyName) {
-		if (!isProperty(propertyName)) {
-			throw new RuntimeException(PROPERTY_NOT_LOCATED_ + propertyName);
-		}
-	}
-
-	private DataModelImpl getOwningDataModel(String propertyName) {
-		checkValidPropertyName(propertyName);
-		return searchNestedModels(propertyName);
-	}
-
-	private DataModelImpl searchNestedModels(String propertyName) {
-		if (isBaseProperty(propertyName)) {
-			return this;
-		} else if (nestedModels != null) {
-			DataModelImpl dataModel = null;
-			Object[] keys = nestedModels.keySet().toArray();
-			for (int i = 0; i < keys.length; i++) {
-				dataModel = (DataModelImpl) nestedModels.get(keys[i]);
-				if (dataModel.isProperty(propertyName)) {
-					return dataModel.searchNestedModels(propertyName);
-				}
-			}
-		}
-		throw new RuntimeException(PROPERTY_NOT_LOCATED_ + propertyName);
-	}
-
-	public Object getProperty(String propertyName) {
-		DataModelImpl dataModel = getOwningDataModel(propertyName);
-		if (dataModel.propertyValues.containsKey(propertyName)) {
-			return dataModel.propertyValues.get(propertyName);
-		}
-		return dataModel.provider.getDefaultProperty(propertyName);
-	}
-
-	public Object getDefaultProperty(String propertyName) {
-		DataModelImpl dataModel = getOwningDataModel(propertyName);
-		return dataModel.provider.getDefaultProperty(propertyName);
-	}
-
-	public int getIntProperty(String propertyName) {
-		Object prop = getProperty(propertyName);
-		if (prop == null)
-			return -1;
-		return ((Integer) prop).intValue();
-	}
-
-	public boolean getBooleanProperty(String propertyName) {
-		Object prop = getProperty(propertyName);
-		if (prop == null)
-			return false;
-		return ((Boolean) prop).booleanValue();
-	}
-
-	public String getStringProperty(String propertyName) {
-		Object prop = getProperty(propertyName);
-		if (prop == null)
-			return ""; //$NON-NLS-1$
-		return (String) prop;
-	}
-
-	public boolean isPropertySet(String propertyName) {
-		DataModelImpl dataModel = getOwningDataModel(propertyName);
-		return dataModel.propertyValues.containsKey(propertyName);
-	}
-
-	public boolean isPropertyEnabled(String propertyName) {
-		DataModelImpl dataModel = getOwningDataModel(propertyName);
-		return dataModel.provider.isPropertyEnabled(propertyName);
-	}
-
-
-	public void setProperty(String propertyName, Object propertyValue) {
-		DataModelImpl dataModel = getOwningDataModel(propertyName);
-		dataModel.internalSetProperty(propertyName, propertyValue);
-	}
-
-	private void internalSetProperty(String propertyName, Object propertyValue) {
-		Object oldValue = propertyValues.get(propertyName);
-		if (valueChanged(propertyValue, oldValue)) {
-			if (null != propertyValue)
-				propertyValues.put(propertyName, propertyValue);
-			else if (propertyValues.containsKey(propertyName))
-				propertyValues.remove(propertyName);
-			if (provider.propertySet(propertyName, propertyValue)) {
-				notifyPropertyChange(propertyName, DataModelEvent.VALUE_CHG);
-			}
-		}
-	}
-
-	private boolean valueChanged(Object o1, Object o2) {
-		return o1 != o2 && ((o1 != null && !o1.equals(o2)) || !o2.equals(o1));
-	}
-
-	public void setIntProperty(String propertyName, int value) {
-		setProperty(propertyName, new Integer(value));
-	}
-
-	public void setBooleanProperty(String propertyName, boolean value) {
-		setProperty(propertyName, (value) ? Boolean.TRUE : Boolean.FALSE);
-	}
-
-	public void setStringProperty(String propertyName, String value) {
-		setProperty(propertyName, value);
-	}
-
-	public boolean addNestedModel(String modelName, IDataModel dataModel) {
-		if (this == dataModel) {
-			return false;
-		}
-		if (null == nestedModels) {
-			nestedModels = new Hashtable();
-			nestedPropertyNames = new HashSet();
-		}
-		DataModelImpl nestedDataModel = (DataModelImpl) dataModel;
-		if (null == nestedDataModel.nestingModels) {
-			nestedDataModel.nestingModels = new HashSet();
-		}
-		if (nestedDataModel.nestingModels.contains(this)) {
-			return false;
-		}
-		nestedDataModel.nestingModels.add(this);
-
-		nestedModels.put(modelName, nestedDataModel);
-
-		addNestedProperties(nestedDataModel.allPropertyNames);
-		nestedDataModel.addListener(this);
-		return true;
-	}
-
-	private void addNestedProperties(Collection nestedProperties) {
-		boolean propertiesAdded = allPropertyNames.addAll(nestedProperties);
-		propertiesAdded = nestedPropertyNames.addAll(nestedProperties) || propertiesAdded;
-		// Pass the new properties up the nesting chain
-		if (propertiesAdded && nestingModels != null) {
-			Iterator iterator = nestingModels.iterator();
-			while (iterator.hasNext()) {
-				((DataModelImpl) iterator.next()).addNestedProperties(nestedProperties);
-			}
-		}
-	}
-
-	public Collection getNestedModels() {
-		return nestedModels != null ? Collections.unmodifiableCollection(nestedModels.values()) : Collections.EMPTY_SET;
-	}
-
-	public Collection getNestedModelNames() {
-		return nestedModels != null ? Collections.unmodifiableCollection(nestedModels.keySet()) : Collections.EMPTY_SET;
-	}
-
-	public Collection getNestingModels() {
-		return nestingModels != null ? Collections.unmodifiableCollection(nestingModels) : Collections.EMPTY_SET;
-	}
-
-	public IDataModel removeNestedModel(String modelName) {
-		if (!isNestedModel(modelName)) {
-			return null;
-		}
-		DataModelImpl model = (DataModelImpl) nestedModels.remove(modelName);
-		model.nestingModels.remove(this);
-		removeNestedProperties(model.allPropertyNames);
-		model.removeListener(this);
-		if (nestedModels.isEmpty()) {
-			nestedModels = null;
-		}
-		return model;
-	}
-
-	private void removeNestedProperties(Collection nestedProperties) {
-		Iterator iterator = nestedProperties.iterator();
-		String property = null;
-		boolean keepProperty = false;
-		Set nestedPropertiesToRemove = null;
-		while (iterator.hasNext()) {
-			keepProperty = false;
-			property = (String) iterator.next();
-			if (basePropertyNames.contains(property)) {
-				keepProperty = true;
-			}
-			if (!keepProperty && nestedModels != null) {
-				Iterator nestedModelsIterator = nestedModels.values().iterator();
-				while (!keepProperty && nestedModelsIterator.hasNext()) {
-					DataModelImpl nestedModel = (DataModelImpl) nestedModelsIterator.next();
-					if (nestedModel.isProperty(property)) {
-						keepProperty = true;
-					}
-				}
-			}
-			if (!keepProperty) {
-				if (null == nestedPropertiesToRemove) {
-					nestedPropertiesToRemove = new HashSet();
-				}
-				nestedPropertiesToRemove.add(property);
-			}
-		}
-
-		if (null != nestedPropertiesToRemove) {
-			allPropertyNames.removeAll(nestedPropertiesToRemove);
-			nestedPropertyNames.removeAll(nestedPropertiesToRemove);
-			if (nestingModels != null) {
-				Iterator nestingModelsIterator = nestingModels.iterator();
-				while (nestingModelsIterator.hasNext()) {
-					((DataModelImpl) nestingModelsIterator.next()).removeNestedProperties(nestedPropertiesToRemove);
-				}
-			}
-		}
-	}
-
-	public boolean isNestedModel(String modelName) {
-		return modelName != null && null != nestedModels && nestedModels.containsKey(modelName);
-	}
-
-	public IDataModel getNestedModel(String modelName) {
-		IDataModel dataModel = (null != nestedModels && null != modelName) ? (IDataModel) nestedModels.get(modelName) : null;
-		if (null == dataModel) {
-			throw new RuntimeException(NESTED_MODEL_NOT_LOCATED + modelName);
-		}
-		return dataModel;
-	}
-
-	public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
-		DataModelImpl dataModel = getOwningDataModel(propertyName);
-		DataModelPropertyDescriptor[] descriptors = dataModel.provider.getValidPropertyDescriptors(propertyName);
-		return descriptors == null ? NO_DESCRIPTORS : descriptors;
-	}
-
-	public DataModelPropertyDescriptor getPropertyDescriptor(String propertyName) {
-		DataModelImpl dataModel = getOwningDataModel(propertyName);
-		DataModelPropertyDescriptor descriptor = dataModel.provider.getPropertyDescriptor(propertyName);
-		return descriptor == null ? new DataModelPropertyDescriptor(getProperty(propertyName)) : descriptor;
-	}
-
-	public void notifyPropertyChange(String propertyName, int flag) {
-		if (flag == DEFAULT_CHG) {
-			if (isPropertySet(propertyName)) {
-				return;
-			}
-			flag = VALUE_CHG;
-		}
-		notifyListeners(new DataModelEvent(this, propertyName, flag));
-	}
-
-	private void notifyListeners(DataModelEvent event) {
-		if (listeners != null && !listeners.isEmpty()) {
-			IDataModelListener listener;
-			for (int i = 0; i < listeners.size(); i++) {
-				listener = (IDataModelListener) listeners.get(i);
-				if (listener != event.getDataModel()) {
-					listener.propertyChanged(event);
-				}
-			}
-		}
-	}
-
-	public void propertyChanged(DataModelEvent event) {
-		notifyListeners(event);
-	}
-
-	public IStatus validate() {
-		return validate(true);
-	}
-
-	public IStatus validate(boolean stopOnFirstFailure) {
-		IStatus status = null;
-		IStatus propStatus;
-		String propName;
-		Iterator it;
-		for (int i = 0; i < 2; i++) {
-			switch (i) {
-				case 0 :
-					it = basePropertyNames.iterator();
-					break;
-				case 1 :
-				default :
-					it = getNestedModelNames().iterator();
-			}
-			while (it.hasNext()) {
-				propName = (String) it.next();
-				propStatus = provider.validate(propName);
-				if (propStatus != null) {
-					if (status == null || status.isOK())
-						status = propStatus;
-					else {
-						if (status.isMultiStatus())
-							((MultiStatus) status).merge(propStatus);
-						else {
-							MultiStatus multi = new MultiStatus("org.eclipse.wst.common.frameworks.internal", 0, "", null); //$NON-NLS-1$ //$NON-NLS-2$
-							multi.merge(status);
-							multi.merge(propStatus);
-							status = multi;
-						}
-					}
-					if (stopOnFirstFailure && status != null && !status.isOK() && status.getSeverity() == IStatus.ERROR)
-						return status;
-				}
-			}
-		}
-
-		if (status == null)
-			return IDataModelProvider.OK_STATUS;
-		return status;
-	}
-
-	public void addListener(IDataModelListener listener) {
-		if (listener != null) {
-			if (listeners == null) {
-				listeners = new ArrayList();
-				listeners.add(listener);
-			} else if (!listeners.contains(listener))
-				listeners.add(listener);
-		}
-	}
-
-	public void removeListener(IDataModelListener listener) {
-		if (listeners != null && listener != null)
-			listeners.remove(listener);
-	}
-
-	/**
-	 * Return true if the model doesn't have any errors.
-	 * 
-	 * @return boolean
-	 */
-	public boolean isValid() {
-		return validate(true).getSeverity() != IStatus.ERROR;
-	}
-
-	public boolean isPropertyValid(String propertyName) {
-		return validateProperty(propertyName).getSeverity() != IStatus.ERROR;
-	}
-
-	public IStatus validateProperty(String propertyName) {
-		DataModelImpl dataModel = getOwningDataModel(propertyName);
-		IStatus status = dataModel.provider.validate(propertyName);
-		return status == null ? IDataModelProvider.OK_STATUS : status;
-	}
-
-	public List getExtendedContext() {
-		List extendedContext = provider.getExtendedContext();
-		return extendedContext == null ? Collections.EMPTY_LIST : extendedContext;
-	}
-
-	public void dispose() {
-		provider.dispose();
-	}
-
-	public IDataModelOperation getRawOperation() {
-		IDataModelOperation providerOp = provider.getDefaultOperation();
-		if (null == providerOp) {
-			providerOp = new AbstractDataModelOperation(this) {
-				public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-					return OK_STATUS;
-				}
-			};
-		}
-		return providerOp;
-	}
-
-	public IDataModelOperation getDefaultOperation() {
-		return new DataModelPausibleOperationImpl(getRawOperation());
-	}
-
-	public String toString() {
-		return "IDataModel, provider=" + provider.toString(); //$NON-NLS-1$
-	}
-
-	public String getID() {
-		String id = provider.getID();
-		return null != id ? id : ""; //$NON-NLS-1$
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationEventImpl.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationEventImpl.java
deleted file mode 100644
index 7a40b04..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationEventImpl.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-
-public class DataModelPausibleOperationEventImpl implements IDataModelPausibleOperationEvent {
-
-	private IDataModelOperation operation;
-	private int operationType;
-	private int executionType;
-
-	public DataModelPausibleOperationEventImpl(IDataModelOperation operation, int operationType, int executionType) {
-		this.operation = operation;
-		this.operationType = operationType;
-		this.executionType = executionType;
-	}
-
-	public IDataModelOperation getOperation() {
-		return operation;
-	}
-
-	public int getOperationType() {
-		return operationType;
-	}
-
-	public int getExecutionType() {
-		return executionType;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.java
deleted file mode 100644
index 34bb866..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.java
+++ /dev/null
@@ -1,587 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Stack;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelProperties;
-import org.eclipse.wst.common.frameworks.internal.AdaptabilityUtility;
-import org.eclipse.wst.common.frameworks.internal.WTPResourceHandler;
-import org.eclipse.wst.common.frameworks.internal.enablement.IEnablementManager;
-import org.eclipse.wst.common.frameworks.internal.operations.ComposedExtendedOperationHolder;
-import org.eclipse.wst.common.frameworks.internal.operations.OperationStatus;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-public class DataModelPausibleOperationImpl extends WrappedOperation implements IDataModelPausibleOperation {
-
-	// Stack of StackEntries to be executed
-	protected Stack operationStackToExecute = null;
-
-	// Stack of StackEntries already executed
-	protected Stack undoStack = null;
-	protected Stack redoStack = null;
-
-	protected OperationStackEntry rootStackEntry = null;
-
-	protected List operationListeners;
-
-	protected int executionState = NOT_STARTED;
-
-	public DataModelPausibleOperationImpl(IDataModelOperation rootOperation) {
-		super(rootOperation);
-	}
-
-	public void addOperationListener(IDataModelPausibleOperationListener operationListener) {
-		if (null == operationListeners) {
-			operationListeners = new ArrayList();
-		}
-		operationListeners.add(operationListener);
-	}
-
-	public void removeOperationListener(IDataModelPausibleOperationListener operationListener) {
-		if (null != operationListeners) {
-			operationListeners.remove(operationListener);
-		}
-	}
-
-	public int getExecutionState() {
-		return executionState;
-	}
-
-	protected static final int EXECUTE_IMPL = 0;
-	protected static final int UNDO_IMPL = 1;
-	protected static final int REDO_IMPL = 2;
-	protected static final int ROLLBACK_IMPL = 3;
-	protected static final int RESUME_IMPL = 4;
-
-	private static Hashtable threadToExtendedOpControl = new Hashtable();
-
-	protected IStatus cacheThreadAndContinue(IProgressMonitor monitor, IAdaptable info, int runType) throws ExecutionException {
-		final Thread currentThread = Thread.currentThread();
-		final boolean isTopLevelOperation = !threadToExtendedOpControl.containsKey(currentThread);
-		try {
-			if (isTopLevelOperation) {
-				threadToExtendedOpControl.put(currentThread, this);
-			}
-			switch (runType) {
-				case EXECUTE_IMPL :
-					return executeImpl(monitor, info);
-				case UNDO_IMPL :
-					return undoImpl(monitor, info);
-				case REDO_IMPL :
-					return redoImpl(monitor, info);
-				case ROLLBACK_IMPL :
-					return rollBackImpl(monitor, info);
-				case RESUME_IMPL :
-					return resumeImpl(monitor, info);
-			}
-		} finally {
-			if (isTopLevelOperation) {
-				threadToExtendedOpControl.remove(currentThread);
-			}
-		}
-		throw new RuntimeException();
-	}
-
-	public IStatus resume(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return cacheThreadAndContinue(monitor, info, RESUME_IMPL);
-	}
-
-	protected IStatus resumeImpl(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		switch (executionState) {
-			case NOT_STARTED :
-				return executeImpl(monitor, info);
-			case PAUSED_EXECUTE :
-			case COMPLETE_ROLLBACK :
-				return doExecute(monitor, info);
-			case PAUSED_UNDO :
-				return doUndo(monitor, info);
-			case PAUSED_REDO :
-				return redoImpl(monitor, info);
-		}
-		throw new RuntimeException();
-	}
-
-	public boolean canRedo() {
-		return (COMPLETE_UNDO == executionState) && super.canRedo();
-	}
-
-	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return cacheThreadAndContinue(monitor, info, REDO_IMPL);
-	}
-
-	protected IStatus redoImpl(IProgressMonitor monitor, IAdaptable info) {
-		return doRedo(monitor, info);
-	}
-
-	protected IStatus doRedo(IProgressMonitor monitor, IAdaptable info) {
-		try {
-			executionState = RUNNING_REDO;
-			OperationStatus returnStatus = null;
-			int shouldContinue = IDataModelPausibleOperationListener.CONTINUE;
-			while (IDataModelPausibleOperationListener.CONTINUE == shouldContinue && !redoStack.isEmpty()) {
-				OperationStackEntry stackEntry = (OperationStackEntry) redoStack.peek();
-				IDataModelOperation operation = stackEntry.getOperation();
-				DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_STARTING, IDataModelPausibleOperationEvent.REDO);
-				shouldContinue = notifyOperationListeners(event);
-				if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
-					continue;
-				}
-				undoStack.push(redoStack.pop());
-				returnStatus = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.REDO, returnStatus);
-				event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_FINISHED, IDataModelPausibleOperationEvent.REDO);
-				shouldContinue = notifyOperationListeners(event);
-
-			}
-			return returnStatus == null ? Status.OK_STATUS : returnStatus;
-		} finally {
-			executionState = redoStack.isEmpty() ? COMPLETE_REDO : PAUSED_REDO;
-		}
-	}
-
-	public boolean canUndo() {
-		return (executionState == COMPLETE_EXECUTE || executionState == COMPLETE_REDO) && super.canUndo();
-	}
-
-	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return cacheThreadAndContinue(monitor, info, UNDO_IMPL);
-	}
-
-	protected IStatus undoImpl(IProgressMonitor monitor, IAdaptable info) {
-		redoStack = new Stack();
-		return doUndo(monitor, info);
-	}
-
-	protected IStatus doUndo(IProgressMonitor monitor, IAdaptable info) {
-		try {
-			executionState = RUNNING_UNDO;
-			OperationStatus returnStatus = null;
-			int shouldContinue = IDataModelPausibleOperationListener.CONTINUE;
-			while (IDataModelPausibleOperationListener.CONTINUE == shouldContinue && !undoStack.isEmpty()) {
-				OperationStackEntry stackEntry = (OperationStackEntry) undoStack.peek();
-				IDataModelOperation operation = stackEntry.getOperation();
-				DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_STARTING, IDataModelPausibleOperationEvent.UNDO);
-				shouldContinue = notifyOperationListeners(event);
-				if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
-					continue;
-				}
-				redoStack.push(undoStack.pop());
-				returnStatus = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.UNDO, returnStatus);
-				event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_FINISHED, IDataModelPausibleOperationEvent.UNDO);
-				shouldContinue = notifyOperationListeners(event);
-
-			}
-			return returnStatus == null ? Status.OK_STATUS : returnStatus;
-		} finally {
-			executionState = undoStack.isEmpty() ? COMPLETE_UNDO : PAUSED_UNDO;
-		}
-	}
-
-	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return cacheThreadAndContinue(monitor, info, EXECUTE_IMPL);
-	}
-
-	protected IStatus executeImpl(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		try {
-			executionState = RUNNING_EXECUTE;
-			undoStack = new Stack();
-			operationStackToExecute = new Stack();
-			rootStackEntry = new OperationStackEntry(null, rootOperation);
-			operationStackToExecute.push(rootStackEntry);
-			DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(rootOperation, IDataModelPausibleOperationEvent.NODE_STARTING, IDataModelPausibleOperationEvent.EXECUTE);
-			if (IDataModelPausibleOperationListener.CONTINUE == notifyOperationListeners(event)) {
-				return doExecute(monitor, info);
-			}
-			return Status.OK_STATUS;
-		} finally {
-			executionState = operationStackToExecute.isEmpty() ? COMPLETE_EXECUTE : PAUSED_EXECUTE;
-		}
-	}
-
-	protected IStatus doExecute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		try {
-			OperationStatus returnStatus = null;
-			int shouldContinue = IDataModelPausibleOperationListener.CONTINUE;
-			while (IDataModelPausibleOperationListener.CONTINUE == shouldContinue && !operationStackToExecute.isEmpty()) {
-				OperationStackEntry stackEntry = (OperationStackEntry) operationStackToExecute.peek();
-				OperationStackEntry preStackEntry = stackEntry.getNextPreOperation();
-				if (null != preStackEntry) {
-					operationStackToExecute.push(preStackEntry);
-					DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(preStackEntry.getOperation(), IDataModelPausibleOperationEvent.NODE_STARTING, IDataModelPausibleOperationEvent.EXECUTE);
-					shouldContinue = notifyOperationListeners(event);
-					continue;
-				}
-				IDataModelOperation stackEntryOperation = stackEntry.getOperationForExecution();
-				if (null != stackEntryOperation) {
-					DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(stackEntryOperation, IDataModelPausibleOperationEvent.MAIN_STARTING, IDataModelPausibleOperationEvent.EXECUTE);
-					shouldContinue = notifyOperationListeners(event);
-					if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
-						continue;
-					}
-					returnStatus = runOperation(stackEntryOperation, monitor, info, IDataModelPausibleOperationEvent.EXECUTE, returnStatus);
-					undoStack.push(stackEntry);
-					event = new DataModelPausibleOperationEventImpl(stackEntryOperation, IDataModelPausibleOperationEvent.MAIN_FINISHED, IDataModelPausibleOperationEvent.EXECUTE);
-					shouldContinue = notifyOperationListeners(event);
-					if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
-						continue;
-					}
-				}
-				OperationStackEntry postStackEntry = stackEntry.getNextPostOperation();
-				if (null != postStackEntry) {
-					operationStackToExecute.push(postStackEntry);
-					DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(postStackEntry.getOperation(), IDataModelPausibleOperationEvent.NODE_STARTING, IDataModelPausibleOperationEvent.EXECUTE);
-					shouldContinue = notifyOperationListeners(event);
-					continue;
-				}
-				operationStackToExecute.pop();
-				DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(stackEntry.getOperation(), IDataModelPausibleOperationEvent.NODE_FINISHED, IDataModelPausibleOperationEvent.EXECUTE);
-				shouldContinue = notifyOperationListeners(event);
-			}
-			return returnStatus == null ? Status.OK_STATUS : returnStatus;
-		} finally {
-			executionState = operationStackToExecute.isEmpty() ? COMPLETE_EXECUTE : PAUSED_EXECUTE;
-		}
-	}
-
-	public IStatus rollBack(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return cacheThreadAndContinue(monitor, info, ROLLBACK_IMPL);
-	}
-
-	protected IStatus rollBackImpl(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		if (PAUSED_EXECUTE == executionState || PAUSED_ROLLBACK == executionState) {
-			try {
-				executionState = RUNNING_ROLLBACK;
-				OperationStatus returnStatus = null;
-				int shouldContinue = IDataModelPausibleOperationListener.CONTINUE;
-				while (IDataModelPausibleOperationListener.CONTINUE == shouldContinue && !undoStack.isEmpty()) {
-					OperationStackEntry stackEntry = (OperationStackEntry) undoStack.peek();
-					IDataModelOperation operation = stackEntry.getOperation();
-					DataModelPausibleOperationEventImpl event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_STARTING, IDataModelPausibleOperationEvent.ROLLBACK);
-					shouldContinue = notifyOperationListeners(event);
-					if (IDataModelPausibleOperationListener.PAUSE == shouldContinue) {
-						continue;
-					}
-					undoStack.pop();
-					OperationStackEntry executionTopStackEntry = stackEntry.rollBackOneOperation();
-					if (operationStackToExecute.contains(executionTopStackEntry)) {
-						while (operationStackToExecute.peek() != executionTopStackEntry) {
-							operationStackToExecute.pop();
-						}
-					} else {
-						Stack parentStack = new Stack();
-						parentStack.push(executionTopStackEntry);
-						OperationStackEntry entry = executionTopStackEntry.parent;
-						while (!operationStackToExecute.contains(entry)) {
-							parentStack.push(entry);
-							entry = entry.parent;
-						}
-						while (operationStackToExecute.peek() != entry) {
-							operationStackToExecute.pop();
-						}
-						while (!parentStack.isEmpty()) {
-							operationStackToExecute.push(parentStack.pop());
-						}
-					}
-					returnStatus = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.UNDO, returnStatus);
-					event = new DataModelPausibleOperationEventImpl(operation, IDataModelPausibleOperationEvent.MAIN_FINISHED, IDataModelPausibleOperationEvent.ROLLBACK);
-					shouldContinue = notifyOperationListeners(event);
-				}
-				return returnStatus == null ? Status.OK_STATUS : returnStatus;
-			} finally {
-				executionState = undoStack.isEmpty() ? COMPLETE_ROLLBACK : PAUSED_ROLLBACK;
-			}
-		}
-		throw new RuntimeException();
-	}
-
-	private int notifyOperationListeners(DataModelPausibleOperationEventImpl event) {
-		if (null != operationListeners) {
-			IDataModelPausibleOperationListener listener = null;
-			for (int i = 0; i < operationListeners.size(); i++) {
-				listener = (IDataModelPausibleOperationListener) operationListeners.get(i);
-				if (IDataModelPausibleOperationListener.PAUSE == listener.notify(event)) {
-					return IDataModelPausibleOperationListener.PAUSE;
-				}
-			}
-		}
-		return IDataModelPausibleOperationListener.CONTINUE;
-	}
-
-	protected OperationStatus addStatus(OperationStatus returnStatus, IStatus status) {
-		if (returnStatus == null) {
-			returnStatus = new OperationStatus(status.getMessage(), status.getException());
-			returnStatus.setSeverity(status.getSeverity());
-			returnStatus.add(status);
-		} else {
-			returnStatus.add(status);
-		}
-		return returnStatus;
-	}
-
-	private OperationStatus addExtendedStatus(OperationStatus returnStatus, IStatus aStatus) {
-		if (returnStatus == null) {
-			returnStatus = new OperationStatus(new IStatus[]{WTPCommonPlugin.OK_STATUS});
-		}
-		returnStatus.addExtendedStatus(aStatus);
-		return returnStatus;
-	}
-
-	private OperationStatus runOperation(final IDataModelOperation operation, final IProgressMonitor monitor, final IAdaptable info, final int executionType, OperationStatus returnStatus) {
-		if (rootOperation == operation) {
-			IStatus status = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.EXECUTE);
-			if (!status.isOK()) {
-				returnStatus = addStatus(returnStatus, status);
-			}
-		} else {
-			try {
-				IStatus status = runOperation(operation, monitor, info, IDataModelPausibleOperationEvent.EXECUTE);
-				if (!status.isOK()) {
-					returnStatus = addExtendedStatus(returnStatus, status);
-				}
-			} catch (Exception e) {
-				IStatus status = new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, WTPResourceHandler.getString("25", new Object[]{operation.getClass().getName()}), e); //$NON-NLS-1$
-				returnStatus = addExtendedStatus(returnStatus, status);
-			}
-		}
-		return returnStatus;
-	}
-
-	private IStatus runOperation(final IDataModelOperation operation, final IProgressMonitor monitor, final IAdaptable info, final int executionType) {
-		IWorkspaceRunnableWithStatus workspaceRunnable = new IWorkspaceRunnableWithStatus(info) {
-			public void run(IProgressMonitor pm) throws CoreException {
-				try {
-					switch (executionType) {
-						case IDataModelPausibleOperationEvent.EXECUTE :
-							this.setStatus(operation.execute(pm, info));
-							break;
-						case IDataModelPausibleOperationEvent.UNDO :
-							this.setStatus(operation.undo(pm, info));
-							break;
-						case IDataModelPausibleOperationEvent.REDO :
-							this.setStatus(operation.redo(pm, info));
-							break;
-					}
-					if (null == this.getStatus()) {
-						this.setStatus(Status.OK_STATUS);
-					}
-				} catch (Exception e) {
-					this.setStatus(new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, WTPResourceHandler.getString("25", new Object[]{operation.getClass().getName()}), e)); //$NON-NLS-1$
-					WTPCommonPlugin.getDefault().getLogger().logError(e);
-				}
-			}
-		};
-
-		ISchedulingRule rule = operation.getSchedulingRule();
-		if (null == rule) {
-			rule = ResourcesPlugin.getWorkspace().getRoot();
-		}
-
-		try {
-			ResourcesPlugin.getWorkspace().run(workspaceRunnable, rule, operation.getOperationExecutionFlags(), monitor);
-		} catch (CoreException e) {
-			workspaceRunnable.setStatus(new Status(IStatus.ERROR, WTPCommonPlugin.PLUGIN_ID, 0, WTPResourceHandler.getString("25", new Object[]{operation.getClass().getName()}), e)); //$NON-NLS-1$
-		}
-		return workspaceRunnable.getStatus();
-	}
-
-	protected class OperationStackEntry {
-
-		private IDataModelOperation operation;
-		private IDataModelOperation operationForExecution;
-
-		private boolean extendedOpsInitialized = false;
-
-		private ComposedExtendedOperationHolder extOpHolder = null;
-
-		private int preOpIndex = 0;
-		private int postOpIndex = 0;
-
-		private OperationStackEntry[] preOpStackEntries = null;
-		private OperationStackEntry[] postOpStackEntries = null;
-
-		public OperationStackEntry parent = null;
-
-		public OperationStackEntry(OperationStackEntry parent, IDataModelOperation operation) {
-			this.parent = parent;
-			this.operation = operation;
-			this.operationForExecution = operation;
-		}
-
-		public OperationStackEntry rollBackOneOperation() {
-			postOpIndex = 0;
-			operationForExecution = operation;
-			if (preOpIndex == 0 && parent != null) {
-				return parent.rollBackExtended(this);
-			}
-			return this;
-		}
-
-		private OperationStackEntry rollBackExtended(OperationStackEntry extendedEntry) {
-			while (postOpIndex > 0) {
-				int index = --postOpIndex;
-				if (postOpStackEntries[index] == extendedEntry) {
-					postOpStackEntries[index] = null;
-					return this;
-				}
-			}
-			while (preOpIndex > 0) {
-				int index = --preOpIndex;
-				if (preOpStackEntries[index] == extendedEntry) {
-					preOpStackEntries[index] = null;
-					if (index != 0) {
-						return this;
-					}
-				}
-			}
-			if (null != parent) {
-				return parent.rollBackExtended(this);
-			}
-			return this;
-		}
-
-		public OperationStackEntry getNextPreOperation() {
-			if (!extendedOpsInitialized) {
-				initExtendedOps();
-			}
-			if (extOpHolder == null) {
-				return null;
-			}
-			List ops = extOpHolder.getPreOps();
-			if (ops == null || ops.size() <= preOpIndex) {
-				return null;
-			}
-
-			while (preOpIndex < ops.size()) {
-				int index = preOpIndex++;
-				IDataModelOperation op = (IDataModelOperation) ops.get(index);
-				if (shouldExecuteExtended(op.getID())) {
-					op.setDataModel(getDataModel());
-					op.setEnvironment(getEnvironment());
-					preOpStackEntries[index] = new OperationStackEntry(this, op);
-					return preOpStackEntries[index];
-				}
-			}
-			return null;
-		}
-
-		public String toString() {
-			return getOperationID();
-		}
-
-		public String getOperationID() {
-			return operation.getID();
-		}
-
-		public IDataModelOperation getOperation() {
-			return operation;
-		}
-
-		public boolean executed() {
-			return null != operationForExecution;
-		}
-
-		/**
-		 * The root operation is only returned once; this way it is known whether it has been
-		 * executed yet or not.
-		 * 
-		 * @return
-		 */
-		public IDataModelOperation getOperationForExecution() {
-			try {
-				return operationForExecution;
-			} finally {
-				operationForExecution = null;
-			}
-		}
-
-		public OperationStackEntry getNextPostOperation() {
-			if (!extendedOpsInitialized) {
-				initExtendedOps();
-			}
-			if (extOpHolder == null) {
-				return null;
-			}
-			List ops = extOpHolder.getPostOps();
-			if (ops == null || ops.size() <= postOpIndex) {
-				return null;
-			}
-
-			while (postOpIndex < ops.size()) {
-				int index = postOpIndex++;
-				IDataModelOperation op = (IDataModelOperation) ops.get(index);
-				if (shouldExecuteExtended(op.getID())) {
-					op.setDataModel(getDataModel());
-					op.setEnvironment(getEnvironment());
-					postOpStackEntries[index] = new OperationStackEntry(this, op);
-					return postOpStackEntries[index];
-				}
-			}
-			return null;
-
-		}
-
-		private void initExtendedOps() {
-			if (shouldExecuteExtended(operation.getID())) {
-				extOpHolder = ComposedExtendedOperationHolder.createExtendedOperationHolder(operation.getID());
-				if (null != extOpHolder) {
-					if (extOpHolder.hasPreOps()) {
-						preOpStackEntries = new OperationStackEntry[extOpHolder.getPreOps().size()];
-					}
-					if (extOpHolder.hasPostOps()) {
-						postOpStackEntries = new OperationStackEntry[extOpHolder.getPostOps().size()];
-					}
-				}
-			}
-			extendedOpsInitialized = true;
-		}
-	}
-
-	protected boolean shouldExecuteExtended(String operationID) {
-		// Check the top most level operation first
-		DataModelPausibleOperationImpl threadRootOperation = (DataModelPausibleOperationImpl) threadToExtendedOpControl.get(Thread.currentThread());
-		if (threadRootOperation != this && threadRootOperation.getDataModel() != getDataModel() && !threadRootOperation.shouldExecuteExtended(operationID)) {
-			return false;
-		}
-		// No extended operations are being executed
-		boolean allowExtensions = getDataModel().getBooleanProperty(IDataModelProperties.ALLOW_EXTENSIONS);
-		if (!allowExtensions) {
-			return false;
-		}
-		// This specific operation should not be executed
-		List restrictedExtensions = (List) getDataModel().getProperty(IDataModelProperties.RESTRICT_EXTENSIONS);
-		if (restrictedExtensions.contains(operationID)) {
-			return false;
-		}
-		// This specific function group should not be executed
-		List extendedContext = getDataModel().getExtendedContext();
-		for (int contextCount = 0; contextCount < extendedContext.size(); contextCount++) {
-			IProject project = (IProject) AdaptabilityUtility.getAdapter(extendedContext.get(contextCount), IProject.class);
-			if (null != project && !IEnablementManager.INSTANCE.getIdentifier(operationID, project).isEnabled()) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperation.java
deleted file mode 100644
index 86b9cbb..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperation.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.operations.IUndoableOperation;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-
-/**
- * <p>
- * IDataModelManagerOperation is an IDataModelOperation returned from
- * {@link IDataModel#getDefaultOperation()}. This Operation wraps the IDataModelOperation returned
- * from the IDatModelProvider backing the IDataModel that created it.
- * </p>
- * <p>
- * This operation supports pre and post operation execution. Pre and post operations are
- * IDataModelOperations registered through the OperationExtension extension point which are executed
- * before and after the primary operation.
- * </p>
- * <p>
- * <b>Example 1</b> <br>
- * Suppose an IDataModelProvider returns IDataModelOperation X as its default operation, and this
- * IDataModelManagerOperation is wrapping X. Also suppose operation A is registered as a pre
- * operation to X and operation B is registered as a post operation to X. When this
- * IDataModelManagerOperation is executed the following operations will be executed in this order:
- * A, X, B which may be thought as a preorder execution of the following tree:
- * </p>
- * 
- * <pre>
- *           X
- *          / \
- *         A   B
- *         
- *   execution = A.execute(),  X.execute(), B.execute()
- *   undo = B.undo(), X.undo(), A.undo()
- *   redo = A.redo(), X.redo(), B.redo()
- * </pre>
- * 
- * <p>
- * <b>Example 2</b> <br>
- * If A had a pre operation C and post operation D, and B had a pre operation E and post operation F
- * then the tree would look like:
- * </p>
- * 
- * <pre>
- *            X
- *           / \
- *          /   \
- *         A     B
- *        / \   / \
- *       C   D E   F
- *   
- *   execution = C.execute(), A.execute(),  D.execute(), X.execute(), E.execute(), B.execute(), F.execute()
- *   undo = F.undo(), B.undo(), E.undo(), X.undo(), D.undo(), A.undo(), C.undo()
- *   redo = C.redo(), A.redo(),  D.redo(), X.redo(), E.redo(), B.redo(), F.redo()
- * </pre>
- * 
- * </p>
- * <b>Example 3</b> <br>
- * If there is more than one pre operation or post operation for a particular operation, then there
- * is no defined ordering of those pre and post operation with respect to each other, other than
- * that it will be consistent. For example suppose operation X had only two pre operations, A and B,
- * and two post operations, C and D. The execution tree would be one of the following:
- * </p>
- * 
- * <pre>
- *         X              X              X              X
- *        / \            / \            / \            / \
- *      AB   CD        BA   CD        AB   DC        BA   DC
- *   
- *    exec = ABXCD   exec = BAXCD   exec = ABXDC   exec = BAXDC
- *    undo = DCXBA   undo = DCXAB   undo = CDXBA   undo = CDXAB 
- *    redo = ABXCD   redo = BAXCD   redo = ABXDC   redo = BAXDC
- * </pre>
- * 
- * <p>
- * During execution, rollback, undo, and redo, {@link IDataModelPausibleOperationEvent}s are fired to all
- * registered {@link IDataModelPausibleOperationListener}s giving each of them an opportunity to pause the
- * operation by returning {@link IDataModelPausibleOperationListener#PAUSE}.
- * {@link IDataModelPausibleOperationEvent} has more details on when these events are fired.
- * </p>
- * <p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * 
- * @see IDataModel#getDefaultOperation()
- * 
- * @since 1.5
- */
-public interface IDataModelPausibleOperation extends IDataModelOperation {
-
-	/**
-	 * <p>
-	 * The exeuction state when the operation never been executed. When the operation is in this
-	 * state it may only be executed.
-	 * </p>
-	 * 
-	 * @see IUndoableOperation#execute(IProgressMonitor, IAdaptable)
-	 */
-	public static final int NOT_STARTED = 0;
-	/**
-	 * <p>
-	 * The exeuction state while the operation is executing. When the operation is in this state it
-	 * may only be paused by an {@link IDataModelPausibleOperationListener}.
-	 * </p>
-	 * 
-	 * @see IUndoableOperation#execute(IProgressMonitor, IAdaptable)
-	 * @see IDataModelPausibleOperationListener
-	 */
-	public static final int RUNNING_EXECUTE = 1;
-	/**
-	 * <p>
-	 * The exeuction state while the operation is rolling back. When the operation is in this state
-	 * it may only be paused by an {@link IDataModelPausibleOperationListener}.
-	 * </p>
-	 * 
-	 * @see #rollBack(IProgressMonitor, IAdaptable)
-	 * @see IDataModelPausibleOperationListener
-	 */
-	public static final int RUNNING_ROLLBACK = 2;
-	/**
-	 * <p>
-	 * The exeuction state while the operation is redoing. When the operation is in this state it
-	 * may only be paused by an {@link IDataModelPausibleOperationListener}.
-	 * </p>
-	 * 
-	 * @see IUndoableOperation#undo(IProgressMonitor, IAdaptable)
-	 * @see IDataModelPausibleOperationListener
-	 */
-	public static final int RUNNING_UNDO = 3;
-	/**
-	 * <p>
-	 * The exeuction state while the operaiton is redoing. When the operation is in this state it
-	 * may only be paused by an {@link IDataModelPausibleOperationListener}.
-	 * </p>
-	 * 
-	 * @see IUndoableOperation#redo(IProgressMonitor, IAdaptable)
-	 * @see IDataModelPausibleOperationListener
-	 */
-	public static final int RUNNING_REDO = 4;
-	/**
-	 * <p>
-	 * The exeuction state when the operation has been paused while it was executing. When the
-	 * operation is in this state it may either be resumed to continue execution or rolled back to
-	 * undo the partial execution.
-	 * </p>
-	 * 
-	 * @see #resume(IProgressMonitor, IAdaptable)
-	 * @see #rollBack(IProgressMonitor, IAdaptable)
-	 */
-	public static final int PAUSED_EXECUTE = 5;
-	/**
-	 * <p>
-	 * The exeuction state when the operation has been paused while it was rolling back. When the
-	 * operation is in this state it may either be resumed to continue rolling back or executed
-	 * which continue the foward execution from the point where the rollback was paused
-	 * </p>
-	 * 
-	 * @see #resume(IProgressMonitor, IAdaptable)
-	 * @see IUndoableOperation#execute(IProgressMonitor, IAdaptable)
-	 */
-	public static final int PAUSED_ROLLBACK = 6;
-	/**
-	 * <p>
-	 * The exeuction state when the operation has been paused while it was undoing. When the
-	 * operation is in this state it may be only be resumed to continue undoing.
-	 * </p>
-	 * 
-	 * @see #resume(IProgressMonitor, IAdaptable)
-	 */
-	public static final int PAUSED_UNDO = 7;
-	/**
-	 * <p>
-	 * The exeuction state when the operation has been paused while it was redoing. When the
-	 * operation is in this state it may only be resumed to continue redoing.
-	 * </p>
-	 * 
-	 * @see #resume(IProgressMonitor, IAdaptable)
-	 */
-	public static final int PAUSED_REDO = 8;
-	/**
-	 * <p>
-	 * The exeuction state when the operation finished execution. When the operation is in this
-	 * state it may only be undone.
-	 * </p>
-	 * 
-	 * @see IUndoableOperation#undo(IProgressMonitor, IAdaptable)
-	 */
-	public static final int COMPLETE_EXECUTE = 9;
-	/**
-	 * <p>
-	 * The exeuction state when the operation finished rolling back. When the operation is in this
-	 * state it may only be executed.
-	 * </p>
-	 * 
-	 * @see IUndoableOperation#execute(IProgressMonitor, IAdaptable)
-	 */
-	public static final int COMPLETE_ROLLBACK = 10;
-	/**
-	 * <p>
-	 * The exeuction state when the operation finished undoing. When the operation is in this state
-	 * it may only be redone.
-	 * </p>
-	 * 
-	 * @see IUndoableOperation#redo(IProgressMonitor, IAdaptable)
-	 */
-	public static final int COMPLETE_UNDO = 11;
-	/**
-	 * <p>
-	 * The exeuction state when the operation finished redoing. When the operation is in this state
-	 * it may only be udone.
-	 * </p>
-	 * 
-	 * @see IUndoableOperation#undo(IProgressMonitor, IAdaptable)
-	 */
-	public static final int COMPLETE_REDO = 12;
-
-
-	/**
-	 * <p>
-	 * Returns the current execution state of the operation. Returns one of:
-	 * <ul>
-	 * <li>{@link #NOT_STARTED}</li>
-	 * <li>{@link #RUNNING_EXECUTE}</li>
-	 * <li>{@link #RUNNING_ROLLBACK}</li>
-	 * <li>{@link #RUNNING_UNDO}</li>
-	 * <li>{@link #RUNNING_REDO}</li>
-	 * <li>{@link #PAUSED_EXECUTE}</li>
-	 * <li>{@link #PAUSED_ROLLBACK}</li>
-	 * <li>{@link #PAUSED_UNDO}</li>
-	 * <li>{@link #PAUSED_REDO}</li>
-	 * <li>{@link #COMPLETE_EXECUTE}</li>
-	 * <li>{@link #COMPLETE_ROLLBACK}</li>
-	 * <li>{@link #COMPLETE_UNDO}</li>
-	 * <li>{@link #COMPLETE_REDO}</li>
-	 * </ul>
-	 * <p>
-	 * 
-	 * @return The current execution state.
-	 */
-	public int getExecutionState();
-
-	/**
-	 * <p>
-	 * Resumes execution if the operation is curently paused. An operation is paused if
-	 * {@link #getExecutionState()} returns any of {@link #PAUSED_EXECUTE},
-	 * {@link #PAUSED_ROLLBACK}, {@link #PAUSED_UNDO}, or {@link #PAUSED_REDO}.
-	 * </p>
-	 * 
-	 * @param monitor
-	 *            the progress monitor (or <code>null</code>) to use for reporting progress to
-	 *            the user.
-	 * @param info
-	 *            the IAdaptable (or <code>null</code>) provided by the caller in order to supply
-	 *            UI information for prompting the user if necessary. When this parameter is not
-	 *            <code>null</code>, it should minimally contain an adapter for the
-	 *            org.eclipse.swt.widgets.Shell.class.
-	 * 
-	 * @return the IStatus of the resume. The status severity should be set to <code>OK</code> if
-	 *         the operation was successful, and <code>ERROR</code> if it was not. Any other
-	 *         status is assumed to represent an incompletion of the resume.
-	 */
-	public IStatus resume(IProgressMonitor monitor, IAdaptable info) throws ExecutionException;
-
-	/**
-	 * <p>
-	 * Rolls back the partial execution if the operation is currently in
-	 * {@link #getExecutionState()} returns eiter {@link #PAUSED_EXECUTE} or
-	 * {@link #PAUSED_ROLLBACK}.
-	 * </p>
-	 * 
-	 * @param monitor
-	 *            the progress monitor (or <code>null</code>) to use for reporting progress to
-	 *            the user.
-	 * @param info
-	 *            the IAdaptable (or <code>null</code>) provided by the caller in order to supply
-	 *            UI information for prompting the user if necessary. When this parameter is not
-	 *            <code>null</code>, it should minimally contain an adapter for the
-	 *            org.eclipse.swt.widgets.Shell.class.
-	 * 
-	 * @return the IStatus of the resume. The status severity should be set to <code>OK</code> if
-	 *         the operation was successful, and <code>ERROR</code> if it was not. Any other
-	 *         status is assumed to represent an incompletion of the resume.
-	 * 
-	 */
-	public IStatus rollBack(IProgressMonitor monitor, IAdaptable info) throws ExecutionException;
-
-	/**
-	 * <p>
-	 * Adds an operation listener to listen for operation events.
-	 * </p>
-	 * 
-	 * @param operationListener
-	 *            the IOperationListener to add.
-	 */
-	public void addOperationListener(IDataModelPausibleOperationListener operationListener);
-
-	/**
-	 * <p>
-	 * Removes the specified IOperationLinstener.
-	 * <p>
-	 * 
-	 * @param operationListener
-	 *            The IOperatoinListener to remove.
-	 */
-	public void removeOperationListener(IDataModelPausibleOperationListener operationListener);
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationEvent.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationEvent.java
deleted file mode 100644
index 08139c8..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationEvent.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-
-/**
- * <p>
- * These events are fired to {@link IDataModelPausibleOperationListener}s from {@link IDataModelPausibleOperation}s during execution, rollback, undo,
- * and redo.
- * </p>
- * 
- * <p>
- * <b>Example 2</b> from {@link IDataModelPausibleOperation}<br>
- * <pre>
- *          X
- *         / \
- *        /   \
- *       A     B
- *      / \   / \
- *     C   D E   F
- * </pre>
- * In the example above, the events will be fired in the following order during an execution:
- * <table border=1>
- * <tr><th>operation</th><th>operation type</th><th>execution type</th></tr>
- * <tr><td>X</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>A</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>C</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>C</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>C</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>C</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>A</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>A</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>D</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>D</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>D</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>D</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>A</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>X</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>X</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>B</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>E</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>E</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>E</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>E</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>B</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>B</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>F</td><td>NODE_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>F</td><td>MAIN_STARTING</td><td>EXECUTE</td></tr>
- * <tr><td>F</td><td>MAIN_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>F</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>B</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
- * <tr><td>X</td><td>NODE_FINISHED</td><td>EXECUTE</td></tr>
- * </table>
- * </p>
- * <p>
- * <b>Example 2</b> from {@link IDataModelPausibleOperation}<br>
- * <pre>
- *          X
- *         / \
- *        /   \
- *       A     B
- *      / \   / \
- *     C   D E   F
- * </pre>
- * In the example above, the events will be fired in the following order during a rollback:
- * <table border=1>
- * <tr><th>operation</th><th>operation type</th><th>execution type</th></tr>
- * <tr><td>F</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
- * <tr><td>F</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
- * <tr><td>B</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
- * <tr><td>B</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
- * <tr><td>E</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
- * <tr><td>E</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
- * <tr><td>X</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
- * <tr><td>X</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
- * <tr><td>D</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
- * <tr><td>D</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
- * <tr><td>A</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
- * <tr><td>A</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
- * <tr><td>C</td><td>MAIN_STARTING</td><td>ROLLBACK</td></tr>
- * <tr><td>C</td><td>MAIN_FINISHED</td><td>ROLLBACK</td></tr>
- * </table>
- * </p>
- * <p>
- * <b>Example 2</b> from {@link IDataModelPausibleOperation}<br>
- * <pre>
- *          X
- *         / \
- *        /   \
- *       A     B
- *      / \   / \
- *     C   D E   F
- * </pre>
- * In the example above, the events will be fired in the following order during an undo:
- * <table border=1>
- * <tr><th>operation</th><th>operation type</th><th>execution type</th></tr>
- * <tr><td>F</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>F</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>B</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>B</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>E</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>E</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>X</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>X</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>D</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>D</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>A</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>A</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>C</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>C</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * </table>
- * </p>
- * <p>
- * <b>Example 2</b> from {@link IDataModelPausibleOperation}<br>
- * <pre>
- *          X
- *         / \
- *        /   \
- *       A     B
- *      / \   / \
- *     C   D E   F
- * </pre>
- * In the example above, the events will be fired in the following order during a redo:
- * <table border=1>
- * <tr><th>operation</th><th>operation type</th><th>execution type</th></tr>
- * <tr><td>C</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>C</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>A</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>A</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>D</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>D</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>X</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>X</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>E</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>E</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>B</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>B</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * <tr><td>F</td><td>MAIN_STARTING</td><td>UNDO</td></tr>
- * <tr><td>F</td><td>MAIN_FINISHED</td><td>UNDO</td></tr>
- * </table>
- * </p>
- * <p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * 
- * @since 1.5
- */
-public interface IDataModelPausibleOperationEvent {
-
-	/**
-	 * <p>
-	 * The operation type set when an operation execution traversal is about to start within the
-	 * tree of operations handled by the owning {@link IDataModelPausibleOperation}. This operation
-	 * type is only set when the execution type is set to {@link #EXECUTE}. Using the example
-	 * above, events with this operation type will be fired according to an in order traversal of
-	 * the tree; i.e. XACDBEF
-	 * </p>
-	 */
-	public static final int NODE_STARTING = 1;
-	/**
-	 * <p>
-	 * The operation type set when an operation execution traversal finishes within the tree of
-	 * operations handled by the owning {@link IDataModelPausibleOperation}. This operation type is
-	 * only set when the execution type is set to {@link #EXECUTE}. Using the example above, events
-	 * with this operation type will be fired according to a post order traversal of the tree; i.e.
-	 * CDAEFBX
-	 * </p>
-	 */
-	public static final int NODE_FINISHED = 2;
-	/**
-	 * <p>
-	 * The operation type set right before an operation is going to do its work. This operation type
-	 * may be used with all exection types. Using the example above, events with this operiton type
-	 * will be fired according to the following tree traversal: CADXBEF
-	 * <p>
-	 */
-	public static final int MAIN_STARTING = 3;
-	/**
-	 * <p>
-	 * The operation type set immediatly after an operation finshed doing its work. This operation
-	 * type may be used with all exection types. Using the example above, events with this operiton
-	 * type will be fired according to the following tree traversal: CADXBEF
-	 * <p>
-	 */
-	public static final int MAIN_FINISHED = 4;
-
-	/**
-	 * <p>
-	 * The execution type set when during execution.
-	 * </p>
-	 */
-	public static final int EXECUTE = 0;
-	/**
-	 * <p>
-	 * The execution type set when during rollback.
-	 * </p>
-	 */
-	public static final int ROLLBACK = 1;
-	/**
-	 * <p>
-	 * The execution type set when during undo.
-	 * </p>
-	 */
-	public static final int UNDO = 2;
-	/**
-	 * <p>
-	 * The execution type set when during redo.
-	 * </p>
-	 */
-	public static final int REDO = 3;
-
-	/**
-	 * <p>
-	 * Returns the operation in question. This operation will be one of the operations within the
-	 * tree of operations handled by the owning {@link IDataModelPausibleOperation}.
-	 * </p>
-	 * 
-	 * @return the operation.
-	 */
-	public IDataModelOperation getOperation();
-
-	/**
-	 * <p>
-	 * Returns the type of operation with respect to the {@link IDataModelPausibleOperation}
-	 * executing it. This will be one of {@link #NODE_STARTING}, {@link #NODE_FINISHED},
-	 * {@link #MAIN_STARTING}, or {@link #MAIN_FINISHED}.
-	 * </p>
-	 * 
-	 * @return one of {@link #NODE_STARTING}, {@link #NODE_FINISHED}, {@link #MAIN_STARTING}, or
-	 *         {@link #MAIN_FINISHED}.
-	 */
-	public int getOperationType();
-
-	/**
-	 * <p>
-	 * Returns the type of execution the operation is about to begin. This will be one of
-	 * {@link #EXECUTE}, {@link #ROLLBACK}, {@link #UNDO}, or {@link #REDO}.
-	 * </p>
-	 * 
-	 * @return one of {@link #EXECUTE}, {@link #ROLLBACK}, {@link #UNDO}, or {@link #REDO}.
-	 */
-	public int getExecutionType();
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationListener.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationListener.java
deleted file mode 100644
index 827bbf3..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IDataModelPausibleOperationListener.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-/**
- * <p>
- * Used to listen for {@link IDataModelPausibleOperationEvent}s fired from {@link IDataModelPausibleOperation}s.
- * </p>
- * 
- * @since 1.5
- */
-public interface IDataModelPausibleOperationListener {
-
-	/**
-	 * <p>
-	 * Clients should return this constant from {@link #notify(IDataModelPausibleOperationEvent)} to specify that
-	 * execution should continue.
-	 * </p>
-	 */
-	public static final int CONTINUE = 0;
-
-	/**
-	 * <p>
-	 * Clients should return this constant from {@link #notify(IDataModelPausibleOperationEvent)} to specify that
-	 * execution should pause.
-	 * </p>
-	 */
-	public static final int PAUSE = 1;
-
-
-	/**
-	 * <p>
-	 * Listener interface by {@link IDataModelPausibleOperation} for operation execution
-	 * notification. Prior to starting any operation's execution, notifications will be sent which
-	 * allow clients to pause an operation's execution. Implementers should return {@link #CONTINUE}
-	 * to allow the operation's execution to continue or {@link #PAUSE} to pause execution. If
-	 * {@link #PAUSE} is returned, then the entire operation stack will be paused until it is
-	 * resumed. The responsiblity for resuming a paused operation lies on the client that paused it.
-	 * </p>
-	 * 
-	 * @param event
-	 *            The operation event
-	 * 
-	 * @return return CONTINUE to continue, or PAUSE to pause.
-	 * 
-	 * @see IDataModelPausibleOperation#addOperationListener(IDataModelPausibleOperationListener)
-	 * @see IDataModelPausibleOperation#resume(org.eclipse.core.runtime.IProgressMonitor,
-	 *      org.eclipse.core.runtime.IAdaptable)
-	 */
-	public int notify(IDataModelPausibleOperationEvent event);
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IWorkspaceRunnableWithStatus.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IWorkspaceRunnableWithStatus.java
deleted file mode 100644
index 2214bd0..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/IWorkspaceRunnableWithStatus.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-
-public class IWorkspaceRunnableWithStatus implements IWorkspaceRunnable {
-	private IAdaptable info;
-	private IStatus status;
-
-public IWorkspaceRunnableWithStatus(IAdaptable info) {
-		super();
-		this.info = info;
-	}
-public IAdaptable getInfo() {
-	// TODO Auto-generated method stub
-	return info;
-}
-public void setStatus(IStatus aStatus) {
-	status = aStatus;
-}
-
-public void run(IProgressMonitor monitor) throws CoreException {
-		
-	}
-public IStatus getStatus() {
-	return status;
-}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/WrappedOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/WrappedOperation.java
deleted file mode 100644
index cab9760..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/datamodel/WrappedOperation.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.datamodel;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.operations.IUndoContext;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.wst.common.environment.IEnvironment;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-
-public class WrappedOperation implements IDataModelOperation {
-
-	protected IDataModelOperation rootOperation;
-	
-	public WrappedOperation(IDataModelOperation rootOperation) {
-		this.rootOperation = rootOperation;
-		if (null == rootOperation) {
-			throw new NullPointerException();
-		}
-	}
-
-	public boolean canExecute() {
-		return rootOperation.canExecute();
-	}
-
-	public boolean canRedo() {
-		return rootOperation.canRedo();
-	}
-
-	public boolean canUndo() {
-		return rootOperation.canUndo();
-	}
-
-	public void setID(String id) {
-		rootOperation.setID(id);
-	}
-
-	public String getID() {
-		return rootOperation.getID();
-	}
-
-	public void setDataModel(IDataModel model) {
-		rootOperation.setDataModel(model);
-	}
-
-	public IDataModel getDataModel() {
-		return rootOperation.getDataModel();
-	}
-
-	public void setEnvironment(IEnvironment environment) {
-		rootOperation.setEnvironment(environment);
-	}
-
-	public IEnvironment getEnvironment() {
-		return rootOperation.getEnvironment();
-	}
-
-	public ISchedulingRule getSchedulingRule() {
-		return rootOperation.getSchedulingRule();
-	}
-
-	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return rootOperation.execute(monitor, info);
-	}
-
-	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return rootOperation.undo(monitor, info);
-	}
-
-	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return rootOperation.redo(monitor, info);
-	}
-
-	public int getOperationExecutionFlags() {
-		return rootOperation.getOperationExecutionFlags();
-	}
-
-	public String getLabel() {
-		return rootOperation.getLabel();
-	}
-
-	public IUndoContext[] getContexts() {
-		return rootOperation.getContexts();
-	}
-
-	public boolean hasContext(IUndoContext context) {
-		return rootOperation.hasContext(context);
-	}
-
-	public void addContext(IUndoContext context) {
-		rootOperation.addContext(context);
-	}
-
-	public void removeContext(IUndoContext context) {
-		rootOperation.removeContext(context);
-	}
-
-	public void dispose() {
-		rootOperation.dispose();
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/AbstractIdentifiable.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/AbstractIdentifiable.java
deleted file mode 100644
index f7d143e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/AbstractIdentifiable.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-public class AbstractIdentifiable implements Identifiable {
-
-	protected String id;
-
-	public AbstractIdentifiable(String id) {
-		this.id = id;
-	}
-
-	public String getID() {
-		return id;
-	}
-
-	public int getLoadOrder() {
-		return 0;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/AscendingGroupComparator.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/AscendingGroupComparator.java
deleted file mode 100644
index 39afa0c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/AscendingGroupComparator.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Dec 2, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import java.util.Comparator;
-
-/**
- * @author blancett
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public class AscendingGroupComparator implements Comparator {
-	private static AscendingGroupComparator singleton;
-
-	public int compare(Object o1, Object o2) {
-		if (o2 == null && o1 != null)
-			return -1;
-		if (o1 == null && o2 != null)
-			return 1;
-		if (o1 == null && o2 == null)
-			return 0;
-
-		FunctionGroup group1 = (FunctionGroup) o1;
-		FunctionGroup group2 = (FunctionGroup) o2;
-
-		if (group1.getPriority() > group2.getPriority())
-			return 1;
-		if (group1.getPriority() == group2.getPriority())
-			return 0;
-		if (group1.getPriority() < group2.getPriority())
-			return -1;
-		return 0;
-	}
-
-	public static Comparator singleton() {
-		if (singleton == null)
-			singleton = new AscendingGroupComparator();
-		return singleton;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/DataModelEnablementFactory.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/DataModelEnablementFactory.java
deleted file mode 100644
index 9de1253..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/DataModelEnablementFactory.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public class DataModelEnablementFactory {
-	/**
-	 * Looks up the appropriate IDataModelProvider by the specified providerKind String and a
-	 * context of the containing Project. The method gets an array of DataModelProviderDescriptor
-	 * from the base DataModelFactory then filters out Providers based on function group enablement.
-	 * Finally the Provider with the highest priority is returned. If the IDataModelProvider is not
-	 * found then a RuntimeException is logged and null is returned.
-	 * 
-	 * @param providerKind
-	 *            the String id of the provider kind
-	 * @param curProject
-	 *            the containing IProject
-	 * 
-	 * @return a new IDataModel
-	 */
-	public static IDataModel createDataModel(String providerKind, IProject curProject) {
-		String[] providerIDs = DataModelFactory.getDataModelProviderIDsForKind(providerKind);
-		if (providerIDs == null || providerIDs.length == 0)
-			return null;
-		String topProvider = getHighestPriorityEnabledProviderDesc(providerIDs, curProject);
-		if (topProvider == null)
-			return null;
-		return DataModelFactory.createDataModel(topProvider);
-	}
-
-	private static String getHighestPriorityEnabledProviderDesc(String[] providerIDs, IProject curProject) {
-		String defaultID = providerIDs[0];
-		IEnablementIdentifier enablementIdentifier;
-		Identifiable tempIdentifiable;
-		Identifiable topPriorityIdentifiable = null;
-
-		for (int i = 1; i < providerIDs.length; i++) {
-			tempIdentifiable = new AbstractIdentifiable(providerIDs[i]);
-			enablementIdentifier = EnablementManager.INSTANCE.getIdentifier(tempIdentifiable.getID(), curProject);
-			if (enablementIdentifier.isEnabled()) {
-				if (topPriorityIdentifiable == null)
-					topPriorityIdentifiable = tempIdentifiable;
-				else if (IdentifiableComparator.instance.compare(tempIdentifiable, topPriorityIdentifiable) == IdentifiableComparator.GREATER_THAN)
-					topPriorityIdentifiable = tempIdentifiable;
-			}
-		}
-		if (topPriorityIdentifiable == null)
-			return defaultID;
-		return topPriorityIdentifiable.getID();
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/DescendingGroupComparator.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/DescendingGroupComparator.java
deleted file mode 100644
index 0720856..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/DescendingGroupComparator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Dec 2, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import java.util.Comparator;
-
-/**
- * @author blancett
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public class DescendingGroupComparator implements Comparator {
-
-	private static DescendingGroupComparator singleton;
-
-	public int compare(Object o1, Object o2) {
-		if (o1 == null && o2 != null)
-			return -1;
-		if (o2 == null && o1 != null)
-			return 1;
-		if (o1 == null && o2 == null)
-			return 0;
-
-		FunctionGroup group1 = (FunctionGroup) o1;
-		FunctionGroup group2 = (FunctionGroup) o2;
-
-		if (group1.getPriority() > group2.getPriority())
-			return -1;
-		if (group1.getPriority() == group2.getPriority())
-			return 0;
-		if (group1.getPriority() < group2.getPriority())
-			return 1;
-		return 0;
-
-	}
-
-	public static Comparator singleton() {
-		if (singleton == null)
-			singleton = new DescendingGroupComparator();
-		return singleton;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementIdentifier.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementIdentifier.java
deleted file mode 100644
index a6dbbd9..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementIdentifier.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 10, 2004
- * 
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public class EnablementIdentifier implements IEnablementIdentifier {
-
-	private final static int HASH_FACTOR = 89;
-
-	private final static int HASH_INITIAL = EnablementIdentifier.class.getName().hashCode();
-
-	private final static Set strongReferences = new HashSet();
-
-	private Set functionGroupIds;
-
-	private transient String[] functionGroupIdsAsArray;
-
-	private boolean enabled;
-
-	private transient int hashCode;
-
-	private transient boolean hashCodeComputed;
-
-	private String id;
-
-	private List identifierListeners;
-
-	private transient String string;
-
-	private IProject project;
-
-	protected EnablementIdentifier(String id) {
-		this(id, null);
-	}
-
-	protected EnablementIdentifier(String id, IProject project) {
-		if (id == null)
-			throw new NullPointerException();
-		this.id = id;
-		this.project = project;
-	}
-
-	public void addIdentifierListener(IEnablementIdentifierListener identifierListener) {
-		if (identifierListener == null)
-			throw new NullPointerException();
-
-		if (identifierListeners == null)
-			identifierListeners = new ArrayList();
-
-		if (!identifierListeners.contains(identifierListener))
-			identifierListeners.add(identifierListener);
-
-		strongReferences.add(this);
-	}
-
-	public int compareTo(Object object) {
-		EnablementIdentifier castedObject = (EnablementIdentifier) object;
-		return Util.compare(id, castedObject.id);
-
-	}
-
-	public boolean equals(Object object) {
-		if (!(object instanceof EnablementIdentifier))
-			return false;
-
-		EnablementIdentifier castedObject = (EnablementIdentifier) object;
-		boolean equals = Util.equals(id, castedObject.id);
-		return equals;
-	}
-
-	protected void fireIdentifierChanged(EnablementIdentifierEvent functionIdentifierEvent) {
-		if (functionIdentifierEvent == null)
-			throw new NullPointerException();
-
-		if (identifierListeners != null) {
-			synchronized (identifierListeners) {
-				for (int i = 0; i < identifierListeners.size(); i++)
-					((IEnablementIdentifierListener) identifierListeners.get(i)).identifierChanged(functionIdentifierEvent);
-			}
-		}
-	}
-
-	public Set getFunctionGroupIds() {
-		return functionGroupIds;
-	}
-
-	public String getId() {
-		return id;
-	}
-
-	public int hashCode() {
-		if (!hashCodeComputed) {
-			hashCode = HASH_INITIAL;
-			hashCode = hashCode * HASH_FACTOR + Util.hashCode(id);
-			hashCodeComputed = true;
-		}
-
-		return hashCode;
-	}
-
-	public boolean isEnabled() {
-		return enabled;
-	}
-
-	public void removeIdentifierListener(IEnablementIdentifierListener identifierListener) {
-		if (identifierListener == null)
-			throw new NullPointerException();
-
-		if (identifierListeners != null)
-			identifierListeners.remove(identifierListener);
-
-		if (identifierListeners.isEmpty())
-			strongReferences.remove(this);
-	}
-
-	protected boolean setFunctionGroupIds(Set functionGroupIds) {
-		functionGroupIds = Util.safeCopy(functionGroupIds, String.class);
-
-		if (!Util.equals(functionGroupIds, this.functionGroupIds)) {
-			this.functionGroupIds = functionGroupIds;
-			this.functionGroupIdsAsArray = (String[]) this.functionGroupIds.toArray(new String[this.functionGroupIds.size()]);
-
-			hashCodeComputed = false;
-			hashCode = 0;
-			string = null;
-			return true;
-		}
-
-		return false;
-	}
-
-	protected boolean setEnabled(boolean enabled) {
-		if (enabled != this.enabled) {
-			this.enabled = enabled;
-			hashCodeComputed = false;
-			hashCode = 0;
-			string = null;
-			return true;
-		}
-
-		return false;
-	}
-
-	/**
-	 * Recompute the enabled state and return whether the state changed
-	 */
-	protected boolean resetEnabled() {
-		return setEnabled(getNewEnabled());
-	}
-
-	protected boolean getNewEnabled() {
-		if (project == null)
-			return true;
-		if (functionGroupIdsAsArray.length == 0)
-			return true;
-		for (int i = 0; i < functionGroupIdsAsArray.length; i++) {
-			FunctionGroup group = FunctionGroupRegistry.getInstance().getGroupByID(functionGroupIdsAsArray[i]);
-			if (group != null && group.isEnabled(project))
-				return true;
-		}
-		return false;
-	}
-
-	public String toString() {
-		if (string == null) {
-			final StringBuffer stringBuffer = new StringBuffer();
-			stringBuffer.append('[');
-			stringBuffer.append(functionGroupIds);
-			stringBuffer.append(',');
-			stringBuffer.append(enabled);
-			stringBuffer.append(',');
-			stringBuffer.append(id);
-			stringBuffer.append(']');
-			string = stringBuffer.toString();
-		}
-
-		return string;
-	}
-
-	/**
-	 * The associated Project may be null
-	 * 
-	 * @return Returns the project.
-	 */
-	public IProject getProject() {
-		return project;
-	}
-
-	public String getPrimaryFunctionGroupId() {
-		int selectedPriority = Integer.MAX_VALUE;
-		int priority = 0;
-		String selectedFunctionGroupId = null;
-		String functionGroupId = null;
-		for (Iterator iterator = getFunctionGroupIds().iterator(); iterator.hasNext();) {
-			functionGroupId = iterator.next().toString();
-			priority = FunctionGroupRegistry.getInstance().getGroupPriority(functionGroupId);
-			if (priority < selectedPriority)
-				selectedFunctionGroupId = functionGroupId;
-			if (priority == 0)
-				return selectedFunctionGroupId;
-		}
-		return selectedFunctionGroupId;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementIdentifierEvent.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementIdentifierEvent.java
deleted file mode 100644
index d90b19c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementIdentifierEvent.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 10, 2004
- * 
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public class EnablementIdentifierEvent {
-
-	private boolean functionGroupIdsChanged;
-	private boolean enabledChanged;
-	private IEnablementIdentifier identifier;
-
-	public EnablementIdentifierEvent(IEnablementIdentifier identifier, boolean functionGroupIdsChanged, boolean enabledChanged) {
-		if (identifier == null)
-			throw new NullPointerException();
-
-		this.identifier = identifier;
-		this.functionGroupIdsChanged = functionGroupIdsChanged;
-		this.enabledChanged = enabledChanged;
-	}
-
-	/**
-	 * Returns the instance of the interface that changed.
-	 * 
-	 * @return the instance of the interface that changed. Guaranteed not to be <code>null</code>.
-	 */
-	public IEnablementIdentifier getIdentifier() {
-		return identifier;
-	}
-
-	/**
-	 * Returns whether or not the functionGroupIds property changed.
-	 * 
-	 * @return true, iff the functionGroupIds property changed.
-	 */
-	public boolean hasFunctionGroupIdsChanged() {
-		return functionGroupIdsChanged;
-	}
-
-	/**
-	 * Returns whether or not the enabled property changed.
-	 * 
-	 * @return true, iff the enabled property changed.
-	 */
-	public boolean hasEnabledChanged() {
-		return enabledChanged;
-	}
-
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		return "EnablementIdentifierEvent [identifier=" + identifier.toString() + ", functionGroupIdsChanged=" + hasFunctionGroupIdsChanged() + ", enabledChanged=" + hasEnabledChanged() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementManager.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementManager.java
deleted file mode 100644
index 5494844..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/EnablementManager.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 3, 2004
- * 
- * To change the template for this generated file go to Window - Preferences -
- * Java - Code Generation - Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.WeakHashMap;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonMessages;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-/**
- * @author mdelder
- */
-public class EnablementManager implements IEnablementManager {
-
-	public static final IEnablementManager INSTANCE = new EnablementManager();
-
-	private static Map identifiersByProject = new WeakHashMap();
-
-	public EnablementManager() {
-	}
-
-	/**
-	 * Returns a Map in which the keys are ids and the values are the identifiers
-	 * 
-	 * @param project
-	 * @return
-	 */
-	protected Map getIdentifiersById(IProject project) {
-		Map aMap = (Map) identifiersByProject.get(project);
-		if (aMap == null) {
-			aMap = new WeakHashMap();
-			identifiersByProject.put(project, aMap);
-		}
-		return aMap;
-	}
-
-    public IEnablementIdentifier getIdentifier(String identifierId, IProject project) {
-        if (identifierId == null) throw new NullPointerException();
-        if (project != null && !project.isAccessible()) project = null;
-        
-        EnablementIdentifier identifier = null;
-        synchronized(this) {
-	        Map identifiersById = getIdentifiersById(project);	
-	        
-	        identifier = (EnablementIdentifier) identifiersById.get(identifierId);
-	
-	        if (identifier == null) {
-	            identifier = createIdentifier(identifierId, project);
-	            updateIdentifier(identifier);
-	            identifiersById.put(identifierId, identifier);
-	        }
-        }
-
-        return identifier;
-    }
-
-	protected EnablementIdentifier createIdentifier(String identifierId, IProject project) {
-		return new EnablementIdentifier(identifierId, project);
-	}
-
-	private EnablementIdentifierEvent updateIdentifier(EnablementIdentifier identifier) {
-		String id = identifier.getId();
-		Set functionGroupIds = new HashSet();
-
-		List groups = FunctionGroupRegistry.getInstance().getKnownGroups();
-		for (Iterator iterator = groups.iterator(); iterator.hasNext();) {
-			FunctionGroup group = (FunctionGroup) iterator.next();
-
-			if (group == null)
-				throw new IllegalStateException();
-			if (group.isMatch(id))
-				functionGroupIds.add(group.getGroupID());
-		}
-
-		boolean functionGroupsChanged = identifier.setFunctionGroupIds(functionGroupIds);
-		boolean enabledChanged = identifier.resetEnabled();
-
-		if (functionGroupsChanged || enabledChanged)
-			return new EnablementIdentifierEvent(identifier, functionGroupsChanged, enabledChanged);
-		return null;
-	}
-
-	/**
-	 * Notify all identifier listeners that the state of a project has changed that affects the
-	 * enablement of a group for a project. This method is fail safe, in that if one listener throws
-	 * an exception while being notified, it will not stop the notification of other listeners.
-	 * 
-	 * @param evt
-	 * @throws CoreException
-	 *             if exceptions were caught notifying any of the listeners. Check the status of the
-	 *             core exception for the nested exceptions.
-	 */
-	public final void notifyFunctionGroupChanged(String groupID, IProject project) throws CoreException {
-
-		Map identifiers = getIdentifiersById(project);
-
-		if (identifiers == null)
-			return;
-
-		EnablementIdentifier identifier = null;
-		Iterator iter = identifiers.values().iterator();
-		IStatus errorStatus = null;
-		IStatus nextStatus = null;
-
-		while (iter.hasNext()) {
-			identifier = (EnablementIdentifier) iter.next();
-
-			EnablementIdentifierEvent evt = updateIdentifier(identifier);
-			try {
-				if (evt != null)
-					identifier.fireIdentifierChanged(evt);
-			} catch (Exception ex) {
-				//Defer the exception so others can handle it.
-				nextStatus = WTPCommonPlugin.createErrorStatus(WTPCommonMessages.INTERNAL_ERROR, ex);
-				Logger.getLogger().logError(ex);
-				if (errorStatus == null)
-					errorStatus = nextStatus;
-				else if (errorStatus.isMultiStatus())
-					((MultiStatus) errorStatus).add(nextStatus);
-				else {
-					IStatus[] children = {errorStatus, nextStatus};
-					errorStatus = new MultiStatus(errorStatus.getPlugin(), errorStatus.getCode(), children, WTPCommonMessages.INTERNAL_ERROR, null);
-				}
-			}
-
-		}
-		if (errorStatus != null)
-			throw new CoreException(errorStatus);
-
-	}
-
-	/**
-	 * Utility method for clients to dispose of listeners
-	 * 
-	 * @param enablementIdentifiers
-	 * @param listener
-	 */
-	public void removeEnablementIdentifierListener(Collection enablementIdentifiers, IEnablementIdentifierListener listener) {
-		Iterator iter = enablementIdentifiers.iterator();
-		while (iter.hasNext()) {
-			IEnablementIdentifier identifier = (IEnablementIdentifier) iter.next();
-			identifier.removeIdentifierListener(listener);
-		}
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroup.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroup.java
deleted file mode 100644
index 5ee04f2..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroup.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.WTPResourceHandler;
-
-
-/**
- * @author mdelder/blancett
- */
-public class FunctionGroup implements Comparable {
-
-	public static final String GROUP_NAME_ATTR = "name"; //$NON-NLS-1$
-	public static final String GROUP_DESC_ATTR = "description"; //$NON-NLS-1$
-	public static final String GROUP_ENABLED_BY_DEFAULT_ATTR = "enabledByDefault"; //$NON-NLS-1$
-	public static final String GROUP_PRIORITY_ATTR = "priority"; //$NON-NLS-1$
-	public static final String GROUP_INTIALIZER_CLASS_ATTR = "initializerClassName"; //$NON-NLS-1$
-	private static final int NEGATIVE_PRIORITY = -1;
-
-	private String groupID;
-	private String name;
-	private String description;
-	private String intializerClassName;
-	private String declaringExtension;
-	private int priority = NEGATIVE_PRIORITY;
-	private IConfigurationElement element;
-	private IGroupInitializer groupInterface;
-	private Set functionGroupPatternBindings;
-//	private transient FunctionGroupPatternBinding[] functionGroupPatternBindingsAsArray;
-	private boolean errorReported = false;
-
-	public FunctionGroup(String groupID, IConfigurationElement element) {
-		this.groupID = groupID;
-		this.element = element;
-	}
-
-	public String getDescription() {
-		if (description == null)
-			description = element.getAttribute(GROUP_DESC_ATTR);
-		return description;
-	}
-
-	String getInitalizerClassName() {
-		if (intializerClassName == null)
-			intializerClassName = element.getAttribute(GROUP_INTIALIZER_CLASS_ATTR);
-		return intializerClassName;
-	}
-
-	public String getName() {
-		if (name == null)
-			name = element.getAttribute(GROUP_NAME_ATTR);
-		return name;
-	}
-
-	private String getDeclaringExtensionName() {
-		if (declaringExtension == null) {
-			if (element.getDeclaringExtension() == null)
-				return ""; //$NON-NLS-1$
-			declaringExtension = element.getDeclaringExtension().toString();
-		}
-		return declaringExtension;
-	}
-
-	public String getGroupID() {
-		return groupID;
-	}
-
-	IGroupInitializer getInitializerClass() {
-		if (groupInterface == null)
-			try {
-				groupInterface = (IGroupInitializer) element.createExecutableExtension(GROUP_INTIALIZER_CLASS_ATTR);
-			} catch (CoreException e) {
-				Logger.getLogger().logError(WTPResourceHandler.getString("29", new Object[]{GROUP_INTIALIZER_CLASS_ATTR, getInitalizerClassName(), getDeclaringExtensionName()}) + "\r\n"); //$NON-NLS-1$//$NON-NLS-2$
-				Logger.getLogger().logError(e);
-			}
-		return groupInterface;
-	}
-
-	public String toString() {
-		return "\"" + getName() + "\" (" + getGroupID() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-	}
-
-	public int getPriority() {
-		if (priority == NEGATIVE_PRIORITY)
-			priority = Integer.parseInt(element.getAttribute(GROUP_PRIORITY_ATTR));
-		return priority;
-	}
-
-	public boolean isEnabled(IProject project) {
-		if (getInitializerClass() != null)
-			return getInitializerClass().isGroupEnabled(project);
-		return false;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Comparable#compareTo(java.lang.Object)
-	 */
-	public int compareTo(Object o) {
-		if (this.equals(o))
-			return 0;
-		else if (!(o instanceof FunctionGroup))
-			return 1;
-
-		FunctionGroup group = (FunctionGroup) o;
-		if (getPriority() == group.getPriority())
-			return getGroupID().compareTo(group.getGroupID());
-
-		else if (getPriority() < group.getPriority())
-			return -1;
-		else
-			return 1;
-	}
-
-	public boolean isMatch(String string) {
-		if (functionGroupPatternBindings == null) {
-			if (!errorReported) {
-				Logger.getLogger().logError(WTPResourceHandler.getString("30", new Object[]{getGroupID()})); //$NON-NLS-1$
-				errorReported = true;
-			}
-			return false;
-		}
-		for (Iterator iterator = functionGroupPatternBindings.iterator(); iterator.hasNext();) {
-			FunctionGroupPatternBinding functionGroupPatternBinding = (FunctionGroupPatternBinding) iterator.next();
-
-			if (functionGroupPatternBinding.getPattern().matcher(string).matches())
-				return true;
-		}
-
-		return false;
-	}
-
-	boolean setFunctionGroupPatternBindings(Set functionGroupPatternBindings) {
-		functionGroupPatternBindings = Util.safeCopy(functionGroupPatternBindings, FunctionGroupPatternBinding.class);
-
-		if (!Util.equals(functionGroupPatternBindings, this.functionGroupPatternBindings)) {
-			this.functionGroupPatternBindings = functionGroupPatternBindings;
-//			this.functionGroupPatternBindingsAsArray = (FunctionGroupPatternBinding[]) this.functionGroupPatternBindings.toArray(new FunctionGroupPatternBinding[this.functionGroupPatternBindings.size()]);
-
-			return true;
-		}
-
-		return false;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroupPatternBinding.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroupPatternBinding.java
deleted file mode 100644
index d387771..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroupPatternBinding.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 10, 2004
- * 
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import java.util.regex.Pattern;
-
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public class FunctionGroupPatternBinding {
-
-	private final static int HASH_FACTOR = 89;
-	private final static int HASH_INITIAL = FunctionGroupPatternBinding.class.getName().hashCode();
-	private String functionGroupId;
-	private transient int hashCode;
-	private transient boolean hashCodeComputed;
-	private Pattern pattern;
-	private transient String string;
-
-	/**
-	 *  
-	 */
-	public FunctionGroupPatternBinding(String functionGroupId, Pattern pattern) {
-		if (pattern == null)
-			throw new NullPointerException();
-
-		this.functionGroupId = functionGroupId;
-		this.pattern = pattern;
-	}
-
-	public int compareTo(Object object) {
-		FunctionGroupPatternBinding castedObject = (FunctionGroupPatternBinding) object;
-		int compareTo = Util.compare(functionGroupId, castedObject.functionGroupId);
-
-		if (compareTo == 0)
-			compareTo = Util.compare(pattern.pattern(), castedObject.pattern.pattern());
-
-		return compareTo;
-	}
-
-	public boolean equals(Object object) {
-		if (!(object instanceof FunctionGroupPatternBinding))
-			return false;
-
-		FunctionGroupPatternBinding castedObject = (FunctionGroupPatternBinding) object;
-		boolean equals = true;
-		equals &= Util.equals(functionGroupId, castedObject.functionGroupId);
-		equals &= Util.equals(pattern, castedObject.pattern);
-		return equals;
-	}
-
-	public String getActivityId() {
-		return functionGroupId;
-	}
-
-	public Pattern getPattern() {
-		return pattern;
-	}
-
-	public int hashCode() {
-		if (!hashCodeComputed) {
-			hashCode = HASH_INITIAL;
-			hashCode = hashCode * HASH_FACTOR + Util.hashCode(functionGroupId);
-			hashCode = hashCode * HASH_FACTOR + Util.hashCode(pattern);
-			hashCodeComputed = true;
-		}
-
-		return hashCode;
-	}
-
-	public String toString() {
-		if (string == null) {
-			final StringBuffer stringBuffer = new StringBuffer();
-			stringBuffer.append('[').append(functionGroupId).append(",pattern=\"").append(pattern.pattern()).append("\"]"); //$NON-NLS-1$ //$NON-NLS-2$
-			string = stringBuffer.toString();
-		}
-
-		return string;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroupRegistry.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroupRegistry.java
deleted file mode 100644
index 996c92c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/FunctionGroupRegistry.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Map.Entry;
-import java.util.regex.Pattern;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.WTPResourceHandler;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-/**
- * The FunctionGroupRegistry will consume Configuration elements conforming to the FunctionGroup
- * Extension Point schema.
- * 
- * @author mdelder/blancett
- */
-public class FunctionGroupRegistry extends RegistryReader {
-
-	private static FunctionGroupRegistry INSTANCE = null;
-
-	public static final String GROUP_ELEMENT = "functionGroup"; //$NON-NLS-1$
-	public static final String GROUP_ID_ATTR = "functionGroupID"; //$NON-NLS-1$
-	public static final String FUNCTION_GROUP_PATTERN_BINDING_ELMT = "functionGroupPatternBinding"; //$NON-NLS-1$
-	public static final String PATTERN_ATTR = "pattern"; //$NON-NLS-1$
-
-	private Map groupMapById;
-	private List knownGroups;
-	private Map patternBindingsByGroupId;
-
-	private FunctionGroupRegistry() {
-		super(WTPCommonPlugin.PLUGIN_ID, WTPCommonPlugin.GROUP_REGISTRY_EXTENSION_POINT);
-		patternBindingsByGroupId = new HashMap();
-
-	}
-
-	public static FunctionGroupRegistry getInstance() {
-		if (INSTANCE == null) {
-			INSTANCE = new FunctionGroupRegistry();
-			INSTANCE.readRegistry();
-		}
-		return INSTANCE;
-	}
-
-	/*
-	 * (non-Javadoc) Read all the elements first, then set the pattern bindings on the function
-	 * groups
-	 */
-	public void readRegistry() {
-		super.readRegistry();
-		setPatternBindings();
-	}
-
-	private void setPatternBindings() {
-		Iterator iter = patternBindingsByGroupId.entrySet().iterator();
-		while (iter.hasNext()) {
-			Map.Entry entry = (Entry) iter.next();
-			String groupId = (String) entry.getKey();
-			Set value = (Set) entry.getValue();
-			FunctionGroup aGroup = getGroupByID(groupId);
-			if (aGroup != null)
-				aGroup.setFunctionGroupPatternBindings(value);
-		}
-
-	}
-
-	public boolean readElement(IConfigurationElement element) {
-		if (element.getName().equals(GROUP_ELEMENT)) {
-			readGroup(element);
-			return true;
-		} else if (element.getName().equals(FUNCTION_GROUP_PATTERN_BINDING_ELMT)) {
-			readPatternBinding(element);
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * @param element
-	 */
-	private void readPatternBinding(IConfigurationElement element) {
-		String groupID = element.getAttribute(GROUP_ID_ATTR);
-		String pattern = element.getAttribute(PATTERN_ATTR);
-		if (!isNullOrEmpty(groupID) && !isNullOrEmpty(pattern)) {
-			Pattern aPattern = Pattern.compile(pattern);
-			FunctionGroupPatternBinding binding = new FunctionGroupPatternBinding(groupID, aPattern);
-			addPatternBinding(groupID, binding);
-		}
-
-	}
-
-	/**
-	 * @param binding
-	 */
-	private void addPatternBinding(String groupID, FunctionGroupPatternBinding binding) {
-		Set bindings = (Set) patternBindingsByGroupId.get(groupID);
-		if (bindings == null) {
-			bindings = new HashSet();
-			patternBindingsByGroupId.put(groupID, bindings);
-		}
-		bindings.add(binding);
-	}
-
-	private boolean isNullOrEmpty(String aString) {
-		return aString == null || aString.length() == 0;
-	}
-
-	private void readGroup(IConfigurationElement element) {
-		String groupID = element.getAttribute(GROUP_ID_ATTR);
-		if (!isNullOrEmpty(groupID)) {
-			FunctionGroup group = new FunctionGroup(groupID, element);
-			getGroupMapById().put(groupID, group);
-			getKnownGroups().add(group);
-		}
-	}
-
-	private List getAscendingSortedGroups(IProject project) {
-		Comparator ascendingGrpComparator = AscendingGroupComparator.singleton();
-		List groupList = getKnownGroups(project);
-		Collections.sort(groupList, ascendingGrpComparator);
-		return groupList;
-	}
-
-	private List getDescendingSortedGroups(IProject project) {
-		Comparator descendingGrpComparator = DescendingGroupComparator.singleton();
-		List groupList = getKnownGroups(project);
-		Collections.sort(groupList, descendingGrpComparator);
-		return groupList;
-	}
-
-	public List getKnownGroups(IProject project) {
-		ArrayList groupByProjectList = new ArrayList(getKnownGroups().size());
-		List groupList = getKnownGroups();
-		for (int i = 0; i < groupList.size(); i++) {
-			FunctionGroup group = (FunctionGroup) groupList.get(i);
-			if (group.isEnabled(project))
-				groupByProjectList.add(group);
-		}
-		return groupByProjectList;
-	}
-
-	public List getAscendingPriorityGroupNames(IProject project) {
-		List sortedGroup = getAscendingSortedGroups(project);
-		return getGroupListNames(sortedGroup, new ArrayList(sortedGroup.size()));
-
-	}
-
-	public List getDescendingPriorityGroupNames(IProject project) {
-		List sortedGroup = getDescendingSortedGroups(project);
-		return getGroupListNames(sortedGroup, new ArrayList(sortedGroup.size()));
-	}
-
-	private List getGroupListNames(List sortedGroup, List sortedGroupNames) {
-		for (int i = 0; i < sortedGroup.size(); i++) {
-			FunctionGroup grp = (FunctionGroup) sortedGroup.get(i);
-			sortedGroupNames.add(grp.getGroupID());
-		}
-		return sortedGroupNames;
-	}
-
-	public Iterator getGroupIDs() {
-		return getGroupMapById().keySet().iterator();
-	}
-
-	public FunctionGroup getGroupByID(String groupID) {
-		return (FunctionGroup) getGroupMapById().get(groupID);
-	}
-
-	public boolean isGroupEnabled(IProject project, String groupID) {
-		FunctionGroup group = getGroupByID(groupID);
-		if (group != null)
-			return group.isEnabled(project);
-		return false;
-	}
-
-	public List getKnownGroups() {
-		if (knownGroups == null)
-			knownGroups = new ArrayList();
-		return knownGroups;
-	}
-
-	/**
-	 * @return Returns the groupMapById.
-	 */
-	protected Map getGroupMapById() {
-		if (groupMapById == null)
-			groupMapById = new HashMap();
-		return groupMapById;
-	}
-
-	/**
-	 * Check the priority of the two groups referenced by
-	 * 
-	 * @groupID1 and
-	 * @groupID2
-	 * 
-	 * @param groupID1
-	 * @param groupID2
-	 * @return 0 if the two groups are equal, 1 if
-	 * @groupID1 has a higher precedence, otherwise -1
-	 */
-	public int compare(String groupID1, String groupID2) {
-		FunctionGroup group1 = getGroupByID(groupID1);
-		FunctionGroup group2 = getGroupByID(groupID2);
-		if (group1 == null) {
-			Logger.getLogger().logError(new IllegalArgumentException(WTPResourceHandler.getString("28", new Object[]{groupID1}))); //$NON-NLS-1$
-			return -1;
-		}
-		if (group2 == null) {
-			Logger.getLogger().logError(new IllegalArgumentException(WTPResourceHandler.getString("28", new Object[]{groupID2}))); //$NON-NLS-1$
-			return 1;
-		}
-
-		return group1.compareTo(group2);
-	}
-
-	public int getGroupPriority(String grpId) {
-		FunctionGroup group = getGroupByID(grpId);
-		return (group != null) ? group.getPriority() : -1;
-	}
-
-	public int getFunctionPriority(String enablementID) {
-		int priority = Integer.MAX_VALUE;
-		Iterator iter = getKnownGroups().iterator();
-		while (iter.hasNext()) {
-			FunctionGroup group = (FunctionGroup) iter.next();
-			if (group.isMatch(enablementID))
-				priority = Math.min(priority, group.getPriority());
-		}
-		return priority;
-
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IEnablementIdentifier.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IEnablementIdentifier.java
deleted file mode 100644
index d73d812..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IEnablementIdentifier.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 10, 2004
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import java.util.Set;
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public interface IEnablementIdentifier {
-
-
-	/**
-	 * Registers an instance of <code>IIdentifierListener</code> to listen for changes to
-	 * properties of this instance.
-	 * 
-	 * @param identifierListener
-	 *            the instance to register. Must not be <code>null</code>. If an attempt is made
-	 *            to register an instance which is already registered with this instance, no
-	 *            operation is performed.
-	 */
-	void addIdentifierListener(IEnablementIdentifierListener identifierListener);
-
-	/**
-	 * Returns the set of function group ids that this instance matches.
-	 * <p>
-	 * Notification is sent to all registered listeners if this property changes.
-	 * </p>
-	 * 
-	 * @return the set of activity ids that this instance matches. This set may be empty, but is
-	 *         guaranteed not to be <code>null</code>. If this set is not empty, it is guaranteed
-	 *         to only contain instances of <code>String</code>.
-	 */
-	Set getFunctionGroupIds();
-
-	/**
-	 * Returns the identifier of this instance.
-	 * 
-	 * @return the identifier of this instance. Guaranteed not to be <code>null</code>.
-	 */
-	String getId();
-
-	/**
-	 * Returns whether or not this instance is enabled.
-	 * <p>
-	 * Notification is sent to all registered listeners if this property changes.
-	 * </p>
-	 * 
-	 * @return true, iff this instance is enabled.
-	 */
-	boolean isEnabled();
-
-	/**
-	 * Unregisters an instance of <code>IEnablementIdentifierListener</code> listening for changes
-	 * to properties of this instance.
-	 * 
-	 * @param identifierListener
-	 *            the instance to unregister. Must not be <code>null</code>. If an attempt is
-	 *            made to unregister an instance which is not already registered with this instance,
-	 *            no operation is performed.
-	 */
-	void removeIdentifierListener(IEnablementIdentifierListener identifierListener);
-
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IEnablementIdentifierListener.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IEnablementIdentifierListener.java
deleted file mode 100644
index 90cf938..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IEnablementIdentifierListener.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 10, 2004
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public interface IEnablementIdentifierListener {
-	/**
-	 * Notifies that one or more properties of an instance of <code>IIdentifier</code> have
-	 * changed. Specific details are described in the <code>IdentifierEvent</code>.
-	 * 
-	 * @param identifierEvent
-	 *            the identifier event. Guaranteed not to be <code>null</code>.
-	 */
-	void identifierChanged(EnablementIdentifierEvent identifierEvent);
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IEnablementManager.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IEnablementManager.java
deleted file mode 100644
index 454c94c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IEnablementManager.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Feb 12, 2004
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import java.util.Collection;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.UIContextDetermination;
-
-/**
- * @author schacher
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public interface IEnablementManager {
-	String INTERNAL_ENABLEMENT_DETERMINATION_ID = "org.eclipse.wst.common.frameworks.internal.EnablementDetermination"; //$NON-NLS-1$
-
-	IEnablementManager INSTANCE = (IEnablementManager) UIContextDetermination.createInstance(INTERNAL_ENABLEMENT_DETERMINATION_ID);
-
-	IEnablementIdentifier getIdentifier(String identifierId, IProject project);
-
-	/**
-	 * Notify all identifier listeners that the state of a project has changed that affects the
-	 * enablement of a group for a project. This method is fail safe, in that if one listener throws
-	 * an exception while being notified, it will not stop the notification of other listeners.
-	 * 
-	 * @param evt
-	 * @throws CoreException
-	 *             if exceptions were caught notifying any of the listeners. Check the status of the
-	 *             core exception for the nested exceptions.
-	 */
-	void notifyFunctionGroupChanged(String groupID, IProject project) throws CoreException;
-
-	/**
-	 * Utility method for clients to dispose of listeners
-	 * 
-	 * @param enablementIdentifiers
-	 * @param listener
-	 */
-	void removeEnablementIdentifierListener(Collection enablementIdentifiers, IEnablementIdentifierListener listener);
-
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IGroupInitializer.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IGroupInitializer.java
deleted file mode 100644
index c1cdc9c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IGroupInitializer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Dec 2, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import org.eclipse.core.resources.IProject;
-
-/**
- * @author blancett
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public interface IGroupInitializer {
-
-	public boolean isGroupEnabled(IProject project);
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/Identifiable.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/Identifiable.java
deleted file mode 100644
index bd364b9..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/Identifiable.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-
-/**
- * @author mdelder
- *  
- */
-public interface Identifiable {
-
-	/**
-	 * return id that uniquely identifies this instance of an extension point. It is up to each
-	 * individual extension point provider to decide what that might be (e.g., "editorID", "pageID",
-	 * etc.
-	 */
-	String getID();
-
-	/**
-	 * 
-	 * @return the order the Identifiable element was loaded
-	 */
-	int getLoadOrder();
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IdentifiableComparator.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IdentifiableComparator.java
deleted file mode 100644
index 0df26cf..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/IdentifiableComparator.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-
-/**
- * @author mdelder
- *  
- */
-public class IdentifiableComparator implements java.util.Comparator {
-
-	protected static final int GREATER_THAN = 1;
-
-	protected static final int LESS_THAN = -1;
-
-	protected static final int EQUAL = 0;
-
-	protected static final IdentifiableComparator instance = new IdentifiableComparator();
-
-	private static final int DEFAULT_PRIORITY = Integer.MAX_VALUE;
-
-	public static IdentifiableComparator getInstance() {
-		return instance;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
-	 */
-	public int compare(Object o1, Object o2) {
-		Identifiable lvalue = null;
-		Identifiable rvalue = null;
-		if (o1 instanceof Identifiable)
-			lvalue = (Identifiable) o1;
-		if (o2 instanceof Identifiable)
-			rvalue = (Identifiable) o2;
-
-		if (rvalue == null)
-			return GREATER_THAN;
-		if (lvalue == null)
-			return LESS_THAN;
-
-		if ((lvalue.getID() == null && rvalue.getID() == null) || (getPriority(lvalue) == getPriority(rvalue)))
-			return compareLoadOrder(lvalue, rvalue);
-		/* R - L implies 0 is the highest priority */
-		return getPriority(lvalue) - getPriority(rvalue);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.util.Comparator#equals(java.lang.Object)
-	 */
-	public boolean equals(Object obj) {
-		return obj instanceof IdentifiableComparator;
-	}
-
-	private int compareLoadOrder(Identifiable lvalue, Identifiable rvalue) {
-		/* R - L implies 0 is the highest priority */
-		return lvalue.getLoadOrder() - rvalue.getLoadOrder();
-	}
-
-	public int getPriority(Identifiable identifiable) {
-		if (identifiable.getID() != null && identifiable.getID().length() > 0)
-			return FunctionGroupRegistry.getInstance().getFunctionPriority(identifiable.getID());
-		return DEFAULT_PRIORITY;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/Util.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/Util.java
deleted file mode 100644
index 740270a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/enablement/Util.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.enablement;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/*
- * Rename this class to EnablementsUtil
- */
-
-public final class Util {
-	public final static SortedMap EMPTY_SORTED_MAP = Collections.unmodifiableSortedMap(new TreeMap());
-	public final static SortedSet EMPTY_SORTED_SET = Collections.unmodifiableSortedSet(new TreeSet());
-	public final static String ZERO_LENGTH_STRING = ""; //$NON-NLS-1$
-
-	public static void assertInstance(Object object, Class c) {
-		assertInstance(object, c, false);
-	}
-
-	public static void assertInstance(Object object, Class c, boolean allowNull) {
-		if (object == null && allowNull)
-			return;
-
-		if (object == null || c == null)
-			throw new NullPointerException();
-		else if (!c.isInstance(object))
-			throw new IllegalArgumentException();
-	}
-
-	public static int compare(boolean left, boolean right) {
-		return left == false ? (right == true ? -1 : 0) : 1;
-	}
-
-	public static int compare(Comparable left, Comparable right) {
-		if (left == null && right == null)
-			return 0;
-		else if (left == null)
-			return -1;
-		else if (right == null)
-			return 1;
-		else
-			return left.compareTo(right);
-	}
-
-	public static int compare(Comparable[] left, Comparable[] right) {
-		if (left == null && right == null)
-			return 0;
-		else if (left == null)
-			return -1;
-		else if (right == null)
-			return 1;
-		else {
-			int l = left.length;
-			int r = right.length;
-
-			if (l != r)
-				return l - r;
-			for (int i = 0; i < l; i++) {
-				int compareTo = compare(left[i], right[i]);
-
-				if (compareTo != 0)
-					return compareTo;
-			}
-			return 0;
-		}
-	}
-
-	public static int compare(int left, int right) {
-		return left - right;
-	}
-
-	public static int compare(List left, List right) {
-		if (left == null && right == null)
-			return 0;
-		else if (left == null)
-			return -1;
-		else if (right == null)
-			return 1;
-		else {
-			int l = left.size();
-			int r = right.size();
-
-			if (l != r)
-				return l - r;
-			for (int i = 0; i < l; i++) {
-				int compareTo = compare((Comparable) left.get(i), (Comparable) right.get(i));
-
-				if (compareTo != 0)
-					return compareTo;
-			}
-			return 0;
-		}
-	}
-
-	public static void diff(Map left, Map right, Set leftOnly, Set different, Set rightOnly) {
-		if (left == null || right == null || leftOnly == null || different == null || rightOnly == null)
-			throw new NullPointerException();
-
-		Iterator iterator = left.keySet().iterator();
-
-		while (iterator.hasNext()) {
-			Object key = iterator.next();
-
-			if (!right.containsKey(key))
-				leftOnly.add(key);
-			else if (!Util.equals(left.get(key), right.get(key)))
-				different.add(key);
-		}
-
-		iterator = right.keySet().iterator();
-
-		while (iterator.hasNext()) {
-			Object key = iterator.next();
-
-			if (!left.containsKey(key))
-				rightOnly.add(key);
-		}
-	}
-
-	public static void diff(Set left, Set right, Set leftOnly, Set rightOnly) {
-		if (left == null || right == null || leftOnly == null || rightOnly == null)
-			throw new NullPointerException();
-
-		Iterator iterator = left.iterator();
-
-		while (iterator.hasNext()) {
-			Object object = iterator.next();
-
-			if (!right.contains(object))
-				leftOnly.add(object);
-		}
-
-		iterator = right.iterator();
-
-		while (iterator.hasNext()) {
-			Object object = iterator.next();
-
-			if (!left.contains(object))
-				rightOnly.add(object);
-		}
-	}
-
-	public static boolean endsWith(List left, List right, boolean equals) {
-		if (left == null || right == null)
-			return false;
-		int l = left.size();
-		int r = right.size();
-		if (r > l || !equals && r == l)
-			return false;
-
-		for (int i = 0; i < r; i++)
-			if (!equals(left.get(l - i - 1), right.get(r - i - 1)))
-				return false;
-		return true;
-	}
-
-	public static boolean endsWith(Object[] left, Object[] right, boolean equals) {
-		if (left == null || right == null)
-			return false;
-		int l = left.length;
-		int r = right.length;
-		if (r > l || !equals && r == l)
-			return false;
-		for (int i = 0; i < r; i++)
-			if (!equals(left[l - i - 1], right[r - i - 1]))
-				return false;
-		return true;
-	}
-
-	public static boolean equals(boolean left, boolean right) {
-		return left == right;
-	}
-
-	public static boolean equals(int left, int right) {
-		return left == right;
-	}
-
-	public static boolean equals(Object left, Object right) {
-		return left == null ? right == null : left.equals(right);
-	}
-
-	public static int hashCode(boolean b) {
-		return b ? Boolean.TRUE.hashCode() : Boolean.FALSE.hashCode();
-	}
-
-	public static int hashCode(int i) {
-		return i;
-	}
-
-	public static int hashCode(Object object) {
-		return object != null ? object.hashCode() : 0;
-	}
-
-	public static List safeCopy(List list, Class c) {
-		return safeCopy(list, c, false);
-	}
-
-	public static List safeCopy(List list, Class c, boolean allowNullElements) {
-		if (list == null || c == null)
-			throw new NullPointerException();
-
-		list = Collections.unmodifiableList(new ArrayList(list));
-		Iterator iterator = list.iterator();
-
-		while (iterator.hasNext())
-			assertInstance(iterator.next(), c, allowNullElements);
-
-		return list;
-	}
-
-	public static Map safeCopy(Map map, Class keyClass, Class valueClass) {
-		return safeCopy(map, keyClass, valueClass, false, false);
-	}
-
-	public static Map safeCopy(Map map, Class keyClass, Class valueClass, boolean allowNullKeys, boolean allowNullValues) {
-		if (map == null || keyClass == null || valueClass == null)
-			throw new NullPointerException();
-
-		map = Collections.unmodifiableMap(new HashMap(map));
-		Iterator iterator = map.entrySet().iterator();
-
-		while (iterator.hasNext()) {
-			Map.Entry entry = (Map.Entry) iterator.next();
-			assertInstance(entry.getKey(), keyClass, allowNullKeys);
-			assertInstance(entry.getValue(), valueClass, allowNullValues);
-		}
-
-		return map;
-	}
-
-	public static Set safeCopy(Set set, Class c) {
-		return safeCopy(set, c, false);
-	}
-
-	public static Set safeCopy(Set set, Class c, boolean allowNullElements) {
-		if (set == null || c == null)
-			throw new NullPointerException();
-
-		set = Collections.unmodifiableSet(new HashSet(set));
-		Iterator iterator = set.iterator();
-
-		while (iterator.hasNext())
-			assertInstance(iterator.next(), c, allowNullElements);
-
-		return set;
-	}
-
-	public static SortedMap safeCopy(SortedMap sortedMap, Class keyClass, Class valueClass) {
-		return safeCopy(sortedMap, keyClass, valueClass, false, false);
-	}
-
-	public static SortedMap safeCopy(SortedMap sortedMap, Class keyClass, Class valueClass, boolean allowNullKeys, boolean allowNullValues) {
-		if (sortedMap == null || keyClass == null || valueClass == null)
-			throw new NullPointerException();
-
-		sortedMap = Collections.unmodifiableSortedMap(new TreeMap(sortedMap));
-		Iterator iterator = sortedMap.entrySet().iterator();
-
-		while (iterator.hasNext()) {
-			Map.Entry entry = (Map.Entry) iterator.next();
-			assertInstance(entry.getKey(), keyClass, allowNullKeys);
-			assertInstance(entry.getValue(), valueClass, allowNullValues);
-		}
-
-		return sortedMap;
-	}
-
-	public static SortedSet safeCopy(SortedSet sortedSet, Class c) {
-		return safeCopy(sortedSet, c, false);
-	}
-
-	public static SortedSet safeCopy(SortedSet sortedSet, Class c, boolean allowNullElements) {
-		if (sortedSet == null || c == null)
-			throw new NullPointerException();
-
-		sortedSet = Collections.unmodifiableSortedSet(new TreeSet(sortedSet));
-		Iterator iterator = sortedSet.iterator();
-
-		while (iterator.hasNext())
-			assertInstance(iterator.next(), c, allowNullElements);
-
-		return sortedSet;
-	}
-
-	public static boolean startsWith(List left, List right, boolean equals) {
-		if (left == null || right == null)
-			return false;
-		int l = left.size();
-		int r = right.size();
-		if (r > l || !equals && r == l)
-			return false;
-		for (int i = 0; i < r; i++)
-			if (!equals(left.get(i), right.get(i)))
-				return false;
-		return true;
-	}
-
-	public static boolean startsWith(Object[] left, Object[] right, boolean equals) {
-		if (left == null || right == null)
-			return false;
-		int l = left.length;
-		int r = right.length;
-		if (r > l || !equals && r == l)
-			return false;
-
-		for (int i = 0; i < r; i++)
-			if (!equals(left[i], right[i]))
-				return false;
-		return true;
-	}
-
-	public static String translateString(ResourceBundle resourceBundle, String key) {
-		return Util.translateString(resourceBundle, key, key, true, true);
-	}
-
-	public static String translateString(ResourceBundle resourceBundle, String key, String string, boolean signal, boolean trim) {
-		if (resourceBundle != null && key != null)
-			try {
-				final String translatedString = resourceBundle.getString(key);
-
-				if (translatedString != null)
-					return trim ? translatedString.trim() : translatedString;
-			} catch (MissingResourceException eMissingResource) {
-				if (signal)
-					System.err.println(eMissingResource);
-			}
-
-		return trim ? string.trim() : string;
-	}
-
-	private Util() {
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ComposedExtendedOperationHolder.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ComposedExtendedOperationHolder.java
deleted file mode 100644
index 8b754b5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ComposedExtendedOperationHolder.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.enablement.EnablementManager;
-
-public class ComposedExtendedOperationHolder {
-
-	private ArrayList preOps = null;
-	private ArrayList postOps = null;
-
-	protected ComposedExtendedOperationHolder() {
-		super();
-	}
-
-	public static ComposedExtendedOperationHolder createExtendedOperationHolder(String operationID) {
-		Collection extensions = (Collection) OperationExtensionReader.getExtensionPoints().get(operationID);
-		if (extensions == null) {
-			return null;
-		}
-
-		ComposedExtendedOperationHolder extOperationHolder = new ComposedExtendedOperationHolder();
-		Object preOp = null;
-		Object postOp = null;
-		OperationExtension currentExt = null;
-		for (Iterator iterator = extensions.iterator(); iterator.hasNext();) {
-			currentExt = (OperationExtension) iterator.next();
-			if (EnablementManager.INSTANCE.getIdentifier(currentExt.getExtensionId(), null).isEnabled()) {
-				try {
-					preOp = currentExt.getPreOperation();
-					if (preOp != null) {
-						extOperationHolder.addPreOperation(preOp);
-					}
-				} catch (CoreException e) {
-					Logger.getLogger().logError(e);
-				}
-				try {
-					postOp = currentExt.getPostOperation();
-					if (postOp != null) {
-						extOperationHolder.addPostOperation(postOp);
-					}
-				} catch (CoreException e) {
-					Logger.getLogger().logError(e);
-				}
-			}
-		}
-		return extOperationHolder;
-	}
-
-	protected void addPreOperation(Object preOperation) {
-		if (preOps == null) {
-			preOps = new ArrayList();
-		}
-		preOps.add(preOperation);
-	}
-
-	protected void addPostOperation(Object postOperation) {
-		if (postOps == null) {
-			postOps = new ArrayList();
-		}
-		postOps.add(postOperation);
-	}
-
-	public boolean hasPreOps() {
-		return preOps != null;
-	}
-
-	public boolean hasPostOps() {
-		return postOps != null;
-	}
-
-	public ArrayList getPostOps() {
-		return postOps;
-	}
-
-	public ArrayList getPreOps() {
-		return preOps;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IHeadlessRunnableWithProgress.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IHeadlessRunnableWithProgress.java
deleted file mode 100644
index 35db85c..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IHeadlessRunnableWithProgress.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-/**
- * Simialar to org.eclipse.jface.operation.IRunnableWithProgress, however without UI dependencies.
- * 
- * This class is EXPERIMENTAL and is subject to substantial changes.
- */
-public interface IHeadlessRunnableWithProgress {
-	/**
-	 * Runs this operation without forcing a UI dependency.
-	 * 
-	 * @param monitor
-	 *            the progress monitor to use to display progress and receive requests for
-	 *            cancelation
-	 * @exception InvocationTargetException
-	 *                if the run method must propagate a checked exception, it should wrap it inside
-	 *                an <code>InvocationTargetException</code>; runtime exceptions are
-	 *                automatically wrapped in an <code>InvocationTargetException</code> by the
-	 *                calling context
-	 * @exception InterruptedException
-	 *                if the operation detects a request to cancel, using
-	 *                <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing
-	 *                <code>InterruptedException</code>
-	 * 
-	 * @see IRunnableWithProgress
-	 */
-	public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException;
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IOperationHandler.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IOperationHandler.java
deleted file mode 100644
index 633e4c1..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IOperationHandler.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-/**
- * Passed to complex methods that may require reporting of messages, or interactions from the user;
- * Defined as an interface because the actions may run in headless environments
- */
-public interface IOperationHandler {
-	int YES = 0;
-	int YES_TO_ALL = 1;
-	int NO = 2;
-	int CANCEL = 3;
-
-	/**
-	 * A decision needs to made as to whether an action/operation can continue
-	 */
-	public boolean canContinue(String message);
-
-	/**
-	 * A decision needs to made as to whether an action/operation can continue. <code>items</code>
-	 * is an array of details that accompany the <code>message</code>.
-	 */
-	public boolean canContinue(String message, String[] items);
-
-	/**
-	 * A decision needs to made as to whether an action/operation can continue. The boolean array
-	 * will return two booleans. The first indicates their response to the original question and the
-	 * second indicates if they selected the apply to all check box.
-	 * 
-	 * Return the return code for the dialog. 0 = Yes, 1 = Yes to all, 2 = No
-	 */
-	int canContinueWithAllCheck(String message);
-
-	int canContinueWithAllCheckAllowCancel(String message);
-
-	/**
-	 * An error has occurred
-	 */
-	public void error(String message);
-
-	/**
-	 * An informational message needs to be presented
-	 */
-	public void inform(String message);
-
-	public Object getContext();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationProperties.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationProperties.java
deleted file mode 100644
index 2fae93a..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationProperties.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-
-
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated IProjectCreationPropertiesNew
- */
-public interface IProjectCreationProperties extends DoNotUseMeThisWillBeDeletedPost15{
-
-	/**
-	 * A required dataModel propertyName for a <code>java.lang.String</code> type. This is used to
-	 * specify the project name.
-	 */
-	public static final String PROJECT_NAME = "IProjectCreationProperties.PROJECT_NAME"; //$NON-NLS-1$
-
-	/**
-	 * An optonal dataModel propertyName for a <code>java.lang.String</code> type. Sets the local
-	 * file system location for the described project. The path must be either an absolute file
-	 * system path, or a relative path whose first segment is the name of a defined workspace path
-	 * variable. The default value is the workspace's default location.
-	 */
-	public static final String PROJECT_LOCATION = "IProjectCreationProperties.PROJECT_LOCATION"; //$NON-NLS-1$
-
-
-	/**
-	 * An optional dataModel propertyName for a <code>java.lang.String[]</code> type. This is a
-	 * list of all natures to add to the project. There is no default value.
-	 */
-	public static final String PROJECT_NATURES = "IProjectCreationProperties.PROJECT_NATURES"; //$NON-NLS-1$
-
-	/**
-	 * IProject. An non settable property. This is a conveniece for constructiong getting the
-	 * IProject
-	 */
-	public static final String PROJECT = "IProjectCreationProperties.PROJECT"; //$NON-NLS-1$
-
-	/**
-	 * IProjectDescription. An non settable property. This is a conveniece for constructiong a
-	 * project description.
-	 */
-	public static final String PROJECT_DESCRIPTION = "IProjectCreationProperties.PROJECT_DESCRIPTION"; //$NON-NLS-1$
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationPropertiesNew.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationPropertiesNew.java
deleted file mode 100644
index cd55da8..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/IProjectCreationPropertiesNew.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-public interface IProjectCreationPropertiesNew {
-
-	/**
-	 * A required dataModel propertyName for a <code>java.lang.String</code> type. This is used to
-	 * specify the project name.
-	 */
-	public static final String PROJECT_NAME = "IProjectCreationPropertiesNew.PROJECT_NAME"; //$NON-NLS-1$
-
-	/**
-	 * A Boolean property used for determining how the PROJECT_LOCATION is computed. If this
-	 * property is true then the PROJECT_LOCATION is null. Otherwise the PROJECT_LOCATION is the
-	 * value of USER_DEFINED_LOCATION.
-	 */
-	public static final String USE_DEFAULT_LOCATION = "IProjectCreationPropertiesNew.USE_DEFAULT_LOCATION"; //$NON-NLS-1$
-
-	/**
-	 * A String property used in conjuction with USE_DEFAULT_LOCATION to override the
-	 * DEFAULT_LOCATION.
-	 */
-	public static final String USER_DEFINED_LOCATION = "IProjectCreationPropertiesNew.USER_DEFINED_LOCATION"; //$NON-NLS-1$
-
-	/**
-	 * A String property used in conjunction with {@link #USE_DEFAULT_LOCATION} and
-	 * {@link #PROJECT_NAME} to overrid the {@link #PROJECT_LOCATION}.
-	 * 
-	 * If {@link #USE_DEFAULT_LOCATION} is <code>false</code> and this property is set, then the
-	 * {@link #PROJECT_LOCATION} is defined by {@link #USER_DEFINED_BASE_LOCATION}/{@link #PROJECT_NAME}.
-	 */
-	public static final String USER_DEFINED_BASE_LOCATION = "IProjectCreationPropertiesNew.USER_DEFINED_BASE_LOCATION"; //$NON-NLS-1$
-
-	/**
-	 * An unsettable property which specified the default location for a newly created project. The
-	 * value is computed by appending the project name to the workspace location.
-	 */
-	public static final String DEFAULT_LOCATION = "IProjectCreationPropertiesNew.DEFAULT_LOCATION"; //$NON-NLS-1$
-
-	/**
-	 * An unsettable property used to specify the project location. If USE_DEFAULT_LOCATION this
-	 * property evaluates to USER_DEFINED_LOCATION; otherwise it i <code>null</code>.
-	 */
-	public static final String PROJECT_LOCATION = "IProjectCreationPropertiesNew.PROJECT_LOCATION"; //$NON-NLS-1$
-
-	/**
-	 * An optional dataModel propertyName for a <code>java.lang.String[]</code> type. This is a
-	 * list of all natures to add to the project. There is no default value.
-	 */
-	public static final String PROJECT_NATURES = "IProjectCreationPropertiesNew.PROJECT_NATURES"; //$NON-NLS-1$
-
-	/**
-	 * IProject. An non settable property. This is a conveniece for constructiong getting the
-	 * IProject
-	 */
-	public static final String PROJECT = "IProjectCreationPropertiesNew.PROJECT"; //$NON-NLS-1$
-
-	/**
-	 * IProjectDescription. An non settable property. This is a conveniece for constructiong a
-	 * project description.
-	 */
-	public static final String PROJECT_DESCRIPTION = "IProjectCreationPropertiesNew.PROJECT_DESCRIPTION"; //$NON-NLS-1$
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationExtension.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationExtension.java
deleted file mode 100644
index 2fcd16e..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationExtension.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-
-public class OperationExtension {
-
-	protected String opID = null;
-
-	protected IConfigurationElement baseElement = null;
-
-	protected String preOperationClass = null;
-
-	protected String postOperationClass = null;
-
-	protected String extensionId;
-
-	public OperationExtension(IConfigurationElement element, String id, String preOp, String postOp) {
-		super();
-		baseElement = element;
-		setUpExtension(id, preOp, postOp);
-	}
-
-	private void setUpExtension(String id, String preOp, String postOp) {
-		opID = id;
-		preOperationClass = preOp;
-		postOperationClass = postOp;
-		this.extensionId = baseElement.getDeclaringExtension().getUniqueIdentifier();
-		if (this.extensionId == null)
-			this.extensionId = baseElement.getDeclaringExtension().getNamespace();
-	}
-
-	public String getOpID() {
-		return opID;
-	}
-
-	public String getPostOperationClass() {
-		return postOperationClass;
-	}
-
-	public String getPreOperationClass() {
-		return preOperationClass;
-	}
-
-	public Object getPostOperation() throws CoreException {
-		if (postOperationClass == null)
-			return null;
-		return baseElement.createExecutableExtension(OperationExtensionReader.ATT_POST_OP);
-	}
-
-	public Object getPreOperation() throws CoreException {
-		if (preOperationClass == null)
-			return null;
-		return baseElement.createExecutableExtension(OperationExtensionReader.ATT_PRE_OP);
-	}
-
-	/**
-	 * @return Returns the extensionId.
-	 */
-	public String getExtensionId() {
-		return extensionId;
-	}
-
-	public IConfigurationElement getBaseElement() {
-		return baseElement;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationExtensionReader.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationExtensionReader.java
deleted file mode 100644
index 31f25db..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationExtensionReader.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Nov 3, 2003
- * 
- * To change the template for this generated file go to Window&gt;Preferences&gt;Java&gt;Code
- * Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-public class OperationExtensionReader extends RegistryReader {
-	protected static HashMap opExtensions = null;
-
-	public static final String ELEMENT_J2EEOPEXT = "operationExtension"; //$NON-NLS-1$
-	public static final String ATT_ID = "id"; //$NON-NLS-1$ 
-	public static final String ATT_PRE_OP = "preOperationClass"; //$NON-NLS-1$
-	public static final String ATT_POST_OP = "postOperationClass"; //$NON-NLS-1$
-
-	public OperationExtensionReader() {
-		super(WTPCommonPlugin.PLUGIN_ID, "OperationExtension"); //$NON-NLS-1$
-	}
-
-	/**
-	 * readElement() - parse and deal with an extension like: <operationExtension
-	 * preOperationClass="com.ibm.etools....PreDeleteOperation"
-	 * postOperationClass="com.ibm.etools....PostDeleteOperation"> </operationExtension>
-	 */
-
-	public boolean readElement(IConfigurationElement element) {
-		if (!element.getName().equals(ELEMENT_J2EEOPEXT))
-			return false;
-		String id = element.getAttribute(ATT_ID);
-		String preOp = element.getAttribute(ATT_PRE_OP);
-		String postOp = element.getAttribute(ATT_POST_OP);
-		OperationExtension extension = new OperationExtension(element, id, preOp, postOp);
-		addExtensionPoint(extension);
-		return true;
-	}
-
-	/**
-	 * Sets the extension point.
-	 * 
-	 * @param extensions
-	 *            The extensions to set
-	 */
-	private static void addExtensionPoint(OperationExtension newExtension) {
-		Collection temp = null;
-		Object holder = opExtensions.get(newExtension.getOpID());
-		if (holder == null) {
-			temp = new ArrayList();
-			temp.add(newExtension);
-			opExtensions.put(newExtension.getOpID(), temp);
-		} else {
-			temp = (Collection) holder;
-			temp.add(newExtension);
-		}
-	}
-
-	public static HashMap getExtensionPoints() {
-		if(opExtensions == null){
-			opExtensions = new HashMap();
-			OperationExtensionReader opExtensionReader = new OperationExtensionReader();
-			opExtensionReader.readRegistry();
-		}
-		return opExtensions;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationStatus.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationStatus.java
deleted file mode 100644
index 175c809..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/OperationStatus.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-public class OperationStatus extends MultiStatus {
-
-	public OperationStatus(String message, Throwable e) {
-		super(WTPCommonPlugin.PLUGIN_ID, 0, new IStatus[]{}, message, e);
-	}
-
-	public OperationStatus(IStatus[] children) {
-		this(WTPCommonPlugin.PLUGIN_ID, 0, children, "", null); //$NON-NLS-1$
-	}
-
-	public OperationStatus(String pluginId, int code, IStatus[] children, String message, Throwable exception) {
-		super(pluginId, code, children, message, exception);
-	}
-
-	public void addExtendedStatus(IStatus status) {
-		int oldSeverity = getSeverity();
-		super.add(status);
-		if (oldSeverity != IStatus.ERROR && getSeverity() == IStatus.ERROR) {
-			setSeverity(IStatus.WARNING);
-		}
-	}
-
-	/**
-	 * Overridden to expose as public instead of protected
-	 */
-	public void setCode(int code) {
-		super.setCode(code);
-	}
-
-	/**
-	 * Overridden to expose as public instead of protected
-	 */
-	public void setException(Throwable exception) {
-		super.setException(exception);
-	}
-
-	/**
-	 * Overridden to expose as public instead of protected
-	 */
-	public void setMessage(String message) {
-		super.setMessage(message);
-	}
-
-	/**
-	 * Overridden to expose as public instead of protected
-	 */
-	public void setSeverity(int severity) {
-		super.setSeverity(severity);
-	}
-
-	public void add(IStatus status) {
-		int newSev = status.getSeverity();
-		if (newSev > getSeverity()) {
-			setMessage(status.getMessage());
-			setException(status.getException());
-		}
-		super.add(status);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProvider.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProvider.java
deleted file mode 100644
index 9f5703b..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProvider.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Oct 27, 2003
- * 
- * To change the template for this generated file go to Window&gt;Preferences&gt;Java&gt;Code
- * Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import java.io.File;
-import java.util.Set;
-
-import org.eclipse.core.internal.resources.Resource;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonMessages;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-/**
- * @deprecated use ProjectCreationDataModelProviderNew instead.
- */
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see ProjectCreationDataModelProviderNew
- */
-public class ProjectCreationDataModelProvider extends AbstractDataModelProvider implements IProjectCreationProperties, DoNotUseMeThisWillBeDeletedPost15 {
-
-	public IDataModelOperation getDefaultOperation() {
-		return new ProjectCreationOperation(model);
-	}
-
-	public void init() {
-		super.init();
-	}
-
-	public Set getPropertyNames() {
-		Set propertyNames = super.getPropertyNames();
-		propertyNames.add(PROJECT);
-		propertyNames.add(PROJECT_NAME);
-		propertyNames.add(PROJECT_LOCATION);
-		propertyNames.add(PROJECT_NATURES);
-		propertyNames.add(PROJECT_DESCRIPTION);
-		return propertyNames;
-	}
-
-	public Object getDefaultProperty(String propertyName) {
-		if (propertyName.equals(PROJECT_LOCATION))
-			return getDefaultLocation();
-		else if (propertyName.equals(PROJECT_DESCRIPTION))
-			return getProjectDescription();
-		return super.getDefaultProperty(propertyName);
-	}
-
-	public boolean propertySet(String propertyName, Object propertyValue) {
-		if (propertyValue != null && propertyName.equals(PROJECT_LOCATION)) {
-			IPath path = getRootLocation();
-			if (path.equals(new Path((String) propertyValue))) {
-				model.setProperty(propertyName, null);
-			}
-			model.setProperty(PROJECT_DESCRIPTION, getProjectDescription());
-		} else if (propertyName.equals(PROJECT_NAME)) {
-			IStatus stat = model.validateProperty(PROJECT_NAME);
-			if (stat != OK_STATUS)
-				return false;
-			model.setProperty(PROJECT, getProject());
-			model.setProperty(PROJECT_DESCRIPTION, getProjectDescription());
-		}
-		return true;
-	}
-
-	private String getDefaultLocation() {
-		IPath path = getRootLocation();
-		String projectName = (String) getProperty(PROJECT_NAME);
-		if (projectName != null)
-			path = path.append(projectName);
-		return path.toOSString();
-	}
-
-	private IPath getRootLocation() {
-		return ResourcesPlugin.getWorkspace().getRoot().getLocation();
-	}
-
-	private IProjectDescription getProjectDescription() {
-		String projectName = (String) getProperty(PROJECT_NAME);
-		IProjectDescription desc = ResourcesPlugin.getWorkspace().newProjectDescription(projectName);
-		if (getDataModel().isPropertySet(PROJECT_LOCATION)) {
-			String projectLocation = (String) getProperty(IProjectCreationProperties.PROJECT_LOCATION);
-			if (projectLocation != null)
-				desc.setLocation(new Path(projectLocation));
-			else
-				desc.setLocation(null);
-		}
-		return desc;
-	}
-
-	protected IProject getProject() {
-		String projectName = (String) getProperty(PROJECT_NAME);
-		return (null != projectName && projectName.length() > 0) ? ResourcesPlugin.getWorkspace().getRoot().getProject(projectName) : null;
-	}
-
-	public IStatus validate(String propertyName) {
-		if (propertyName.equals(PROJECT_NAME)) {
-			IStatus status = validateName();
-			if (!status.isOK())
-				return status;
-		}
-		if (propertyName.equals(PROJECT_LOCATION)) {
-			IStatus status = validateLocation();
-			if (!status.isOK())
-				return status;
-		}
-		if (propertyName.equals(PROJECT_LOCATION) || propertyName.equals(PROJECT_NAME)) {
-			String projectName = getStringProperty(PROJECT_NAME);
-			String projectLoc = getStringProperty(PROJECT_LOCATION);
-			return validateExisting(projectName, projectLoc);
-		}
-		return OK_STATUS;
-	}
-
-	/**
-	 * @param projectName
-	 * @param projectLoc
-	 * @todo Generated comment
-	 */
-	private IStatus validateExisting(String projectName, String projectLoc) {
-		if (projectName != null && !projectName.equals("")) {//$NON-NLS-1$
-			File file = new File(projectLoc);
-			if (file.exists()) {
-				if (file.isDirectory()) {
-					File dotProject = new File(file, ".project");//$NON-NLS-1$
-					if (dotProject.exists()) {
-						return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_AT_LOCATION_ERROR, new Object[]{file.toString()}));
-					}
-				}
-			}
-		}
-		return OK_STATUS;
-	}
-
-	public static IProject getProjectHandleFromProjectName(String projectName) {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IStatus status = workspace.validateName(projectName, IResource.PROJECT);
-		return (null != projectName && projectName.length() > 0 && status.isOK()) ? ResourcesPlugin.getWorkspace().getRoot().getProject(projectName) : null;
-	}
-
-	public static IStatus validateProjectName(String projectName) {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IStatus status = workspace.validateName(projectName, IResource.PROJECT);
-		if (!status.isOK())
-			return status;
-		return OK_STATUS;
-	}
-
-	private IStatus validateName() {
-		String name = getStringProperty(PROJECT_NAME);
-		IStatus status = validateProjectName(name);
-		if (!status.isOK())
-			return status;
-		if (getProject().exists())
-			return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_ERROR, new Object[]{name}));
-
-		if (!WTPPlugin.isPlatformCaseSensitive()) {
-			// now look for a matching case variant in the tree
-			IResource variant = ((Resource) getProject()).findExistingResourceVariant(getProject().getFullPath());
-			if (variant != null) {
-				// TODO Fix this string
-				return WTPCommonPlugin.createErrorStatus("Resource already exists with a different case."); //$NON-NLS-1$
-			}
-		}
-		return OK_STATUS;
-	}
-
-	private IStatus validateLocation() {
-		if (getDataModel().isPropertySet(PROJECT_LOCATION)) {
-			String loc = (String) getProperty(PROJECT_LOCATION);
-			IWorkspace workspace = ResourcesPlugin.getWorkspace();
-			IPath path = new Path(loc);
-			return workspace.validateProjectLocation(getProject(), path);
-		}
-		return OK_STATUS;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProviderNew.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProviderNew.java
deleted file mode 100644
index 4cd1cd1..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationDataModelProviderNew.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import java.io.File;
-import java.util.Set;
-
-import org.eclipse.core.internal.resources.Resource;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
-import org.eclipse.wst.common.frameworks.internal.WTPResourceHandler;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonMessages;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-public class ProjectCreationDataModelProviderNew extends AbstractDataModelProvider implements IProjectCreationPropertiesNew {
-
-	public IDataModelOperation getDefaultOperation() {
-		return new ProjectCreationOperationNew(model);
-	}
-
-	public void init() {
-		super.init();
-	}
-
-	public Set getPropertyNames() {
-		Set propertyNames = super.getPropertyNames();
-		propertyNames.add(PROJECT);
-		propertyNames.add(PROJECT_NAME);
-		propertyNames.add(PROJECT_LOCATION);
-		propertyNames.add(USE_DEFAULT_LOCATION);
-		propertyNames.add(DEFAULT_LOCATION);
-		propertyNames.add(USER_DEFINED_LOCATION);
-		propertyNames.add(USER_DEFINED_BASE_LOCATION);
-		propertyNames.add(PROJECT_NATURES);
-		propertyNames.add(PROJECT_DESCRIPTION);
-		return propertyNames;
-	}
-
-	public Object getDefaultProperty(String propertyName) {
-		if (propertyName.equals(PROJECT_LOCATION)) {
-			if (getBooleanProperty(USE_DEFAULT_LOCATION)) {
-				return null;
-			} else if (isPropertySet(USER_DEFINED_BASE_LOCATION)) {
-				return getStringProperty(USER_DEFINED_BASE_LOCATION) + File.separator + getStringProperty(PROJECT_NAME);
-			}
-			return getProperty(USER_DEFINED_LOCATION);
-		} else if (DEFAULT_LOCATION.equals(propertyName)) {
-			return getDefaultLocation();
-		} else if (USE_DEFAULT_LOCATION.equals(propertyName)) {
-			return Boolean.TRUE;
-		} else if (USER_DEFINED_LOCATION.equals(propertyName) || USER_DEFINED_BASE_LOCATION.equals(propertyName)) {
-			return ""; //$NON-NLS-1$
-		} else if (propertyName.equals(PROJECT_DESCRIPTION))
-			return getProjectDescription();
-		return super.getDefaultProperty(propertyName);
-	}
-
-	private String getDefaultLocation() {
-		IPath path = ResourcesPlugin.getWorkspace().getRoot().getLocation();
-		String projectName = (String) getProperty(PROJECT_NAME);
-		if (projectName != null)
-			path = path.append(projectName);
-		return path.toOSString();
-	}
-
-	public boolean propertySet(String propertyName, Object propertyValue) {
-		if (propertyName.equals(PROJECT_LOCATION) || propertyName.equals(DEFAULT_LOCATION) || propertyName.equals(PROJECT_DESCRIPTION)) {
-			throw new RuntimeException();
-		} else if (propertyName.equals(PROJECT_NAME)) {
-			IStatus stat = model.validateProperty(PROJECT_NAME);
-			if (stat != OK_STATUS)
-				return true;
-			model.setProperty(PROJECT, getProject());
-			model.notifyPropertyChange(DEFAULT_LOCATION, IDataModel.VALUE_CHG);
-			if (getBooleanProperty(USE_DEFAULT_LOCATION) || isPropertySet(USER_DEFINED_BASE_LOCATION)) {
-				model.notifyPropertyChange(PROJECT_LOCATION, IDataModel.VALUE_CHG);
-			}
-		} else if (propertyName.equals(USE_DEFAULT_LOCATION)) {
-			model.notifyPropertyChange(PROJECT_LOCATION, IDataModel.VALUE_CHG);
-		} else if ((propertyName.equals(USER_DEFINED_LOCATION) || propertyName.equals(USER_DEFINED_BASE_LOCATION)) && !getBooleanProperty(USE_DEFAULT_LOCATION)) {
-			model.notifyPropertyChange(PROJECT_LOCATION, IDataModel.VALUE_CHG);
-		}
-		return true;
-	}
-
-	private IProjectDescription getProjectDescription() {
-		String projectName = (String) getProperty(PROJECT_NAME);
-		IProjectDescription desc = ResourcesPlugin.getWorkspace().newProjectDescription(projectName);
-		String projectLocation = (String) getProperty(PROJECT_LOCATION);
-		if (projectLocation != null)
-			desc.setLocation(new Path(projectLocation));
-		else
-			desc.setLocation(null);
-		return desc;
-	}
-
-	protected IProject getProject() {
-		String projectName = (String) getProperty(PROJECT_NAME);
-		return (null != projectName && projectName.length() > 0) ? ResourcesPlugin.getWorkspace().getRoot().getProject(projectName) : null;
-	}
-
-	public IStatus validate(String propertyName) {
-		if (propertyName.equals(PROJECT_NAME)) {
-			String name = model.getStringProperty(PROJECT_NAME);
-			IStatus status = validateName(name);
-			if (!status.isOK())
-				return status;
-		}
-		if (propertyName.equals(PROJECT_LOCATION)) {
-			IStatus status = validateLocation();
-			if (!status.isOK())
-				return status;
-		}
-		if (propertyName.equals(PROJECT_LOCATION) || propertyName.equals(PROJECT_NAME)) {
-			String projectName = getStringProperty(PROJECT_NAME);
-
-			String projectLoc = ""; //$NON-NLS-1$
-			if (getBooleanProperty(USE_DEFAULT_LOCATION)) {
-				projectLoc = getDefaultLocation();
-			} else {
-				projectLoc = getStringProperty(PROJECT_LOCATION);
-			}
-			return validateExisting(projectName, projectLoc);
-		}
-		return OK_STATUS;
-	}
-
-	/**
-	 * @param projectName
-	 * @param projectLoc
-	 * @todo Generated comment
-	 */
-	private IStatus validateExisting(String projectName, String projectLoc) {
-		if (projectName != null && !projectName.equals("")) {//$NON-NLS-1$
-			File file = new File(projectLoc);
-			if (file.exists()) {
-				if (file.isDirectory()) {
-					File dotProject = new File(file, ".project");//$NON-NLS-1$
-					if (dotProject.exists()) {
-						return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_AT_LOCATION_ERROR, new Object[]{file.toString()}));
-					}
-				}
-			}
-		}
-		return OK_STATUS;
-	}
-
-	public static IProject getProjectHandleFromProjectName(String projectName) {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IStatus status = workspace.validateName(projectName, IResource.PROJECT);
-		return (null != projectName && projectName.length() > 0 && status.isOK()) ? ResourcesPlugin.getWorkspace().getRoot().getProject(projectName) : null;
-	}
-
-	public static IStatus validateProjectName(String projectName) {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IStatus status = workspace.validateName(projectName, IResource.PROJECT);
-		if (!status.isOK())
-			return status;
-		if (projectName.endsWith(" ")) //$NON-NLS-1$
-			return WTPCommonPlugin.createErrorStatus(WTPResourceHandler.getString("41")); //$NON-NLS-1$
-		return OK_STATUS;
-	}
-
-	public static IStatus validateName(String name) {
-		IStatus status = validateProjectName(name);
-		if (!status.isOK())
-			return status;
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
-		if (project.exists()) {
-			return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_SAMENAME_ERROR, new Object[]{name}));
-		}
-		if (!WTPPlugin.isPlatformCaseSensitive()) {
-			// now look for a matching case variant in the tree
-			IResource variant = ((Resource) project).findExistingResourceVariant(project.getFullPath());
-			if (variant != null) {
-				return WTPCommonPlugin.createErrorStatus(WTPResourceHandler.getString("42")); //$NON-NLS-1$
-			}
-		}
-		return OK_STATUS;
-	}
-
-
-	private IStatus validateLocation() {
-		String loc = (String) getProperty(PROJECT_LOCATION);
-		if (null != loc) {
-			IWorkspace workspace = ResourcesPlugin.getWorkspace();
-			IPath path = new Path(loc);
-			return workspace.validateProjectLocation(getProject(), path);
-		}
-		return OK_STATUS;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperation.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperation.java
deleted file mode 100644
index 855a877..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperation.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Oct 27, 2003
- * 
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see ProjectCreationDataModelProviderNew
- */
-public class ProjectCreationOperation extends AbstractDataModelOperation implements IProjectCreationProperties, DoNotUseMeThisWillBeDeletedPost15{
-
-	public ProjectCreationOperation(IDataModel dataModel) {
-		super(dataModel);
-	}
-
-	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		try {
-			IProgressMonitor subMonitor = new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN);
-			IProjectDescription desc = (IProjectDescription) model.getProperty(PROJECT_DESCRIPTION);
-			IProject project = (IProject) model.getProperty(PROJECT);
-			if (!project.exists()) {
-				project.create(desc, subMonitor);
-			}
-			if (monitor.isCanceled())
-				throw new OperationCanceledException();
-			subMonitor = new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN);
-
-			project.open(subMonitor);
-
-			String[] natureIds = (String[]) model.getProperty(PROJECT_NATURES);
-			if (null != natureIds) {
-				desc = project.getDescription();
-				desc.setNatureIds(natureIds);
-				project.setDescription(desc, monitor);
-			}
-		} catch (CoreException e) {
-			Logger.getLogger().logError(e);
-		} finally {
-			monitor.done();
-		}
-		if (monitor.isCanceled())
-			throw new OperationCanceledException();
-		return OK_STATUS;
-	}
-
-	public boolean canUndo() {
-		return false;
-	}
-
-	public boolean canRedo() {
-		return false;
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperationNew.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperationNew.java
deleted file mode 100644
index d4900ef..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/ProjectCreationOperationNew.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Oct 27, 2003
- * 
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.operations;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-
-public class ProjectCreationOperationNew extends AbstractDataModelOperation implements IProjectCreationPropertiesNew {
-
-	public ProjectCreationOperationNew(IDataModel dataModel) {
-		super(dataModel);
-	}
-
-	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		try {
-			IProgressMonitor subMonitor = new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN);
-			IProjectDescription desc = (IProjectDescription) model.getProperty(PROJECT_DESCRIPTION);
-			IProject project = (IProject) model.getProperty(PROJECT);
-			if (!project.exists()) {
-				project.create(desc, subMonitor);
-			}
-			if (monitor.isCanceled())
-				throw new OperationCanceledException();
-			subMonitor = new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN);
-
-			project.open(subMonitor);
-
-			String[] natureIds = (String[]) model.getProperty(PROJECT_NATURES);
-			if (null != natureIds) {
-				desc = project.getDescription();
-				desc.setNatureIds(natureIds);
-				project.setDescription(desc, monitor);
-			}
-		} catch (CoreException e) {
-			Logger.getLogger().logError(e);
-		} finally {
-			monitor.done();
-		}
-		if (monitor.isCanceled())
-			throw new OperationCanceledException();
-		return OK_STATUS;
-	}
-
-	public boolean canUndo() {
-		return false;
-	}
-
-	public boolean canRedo() {
-		return false;
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/package.html b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/package.html
deleted file mode 100644
index 65a58f5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<html>
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
-<title>wtp operation api overview</title>
-</head>
-<body>
-<p>The WTP Operation API allows clients to do...everything!</p>
-<table width="500">
-<tr>
-<td>
-<p>Under Construction.</p>
-</td>
-</tr>
-</table>
-<table cellpadding="10" cellspacing="10">
-<tr>
-<td>
-<p>
-<img src="escape_out_to_source_folder level/overview/your_image.jpg"></p>
-</td>
-</tr>
-<tr>
-<td>
-<p>
-<i>Figure 1: Image description</i>
-</p>
-</td>
-</tr>
-</table>
-</body>
-</html>
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/package.xml b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/package.xml
deleted file mode 100644
index 9d050d4..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/operations/package.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?> 
-<html>
-    <head>
-        <meta
-            name="root"
-            content="../../../../../../" />
-        <title>wtp operation api overview</title>
-    </head>
-
-    <body>  
-        <abstract>The WTP Operation API allows clients to do...everything!</abstract>
-
-		<!-- formatting handled by XSLT Transformation -->
-		<p>Under Construction.</p>
-		<img src="escape_out_to_source_folder level/overview/your_image.jpg" caption ="Image description" />
-    </body>
-</html>    
-    
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonMessages.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonMessages.java
deleted file mode 100644
index 4003bd5..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonMessages.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Nov 5, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.plugin;
-
-/**
- * @author DABERG
- * 
- * To change the template for this generated type comment go to Window>Preferences>Java>Code
- * Generation>Code and Comments
- */
-public class WTPCommonMessages {
-	public static final String PROJECT_EXISTS_ERROR = "1"; //$NON-NLS-1$
-	public static final String PROJECT_NOT_EAR = "2"; //$NON-NLS-1$
-	public static final String INCOMPATABLE_J2EE_VERSIONS = "3"; //$NON-NLS-1$
-	public static final String SAME_MODULE_AND_EAR_NAME = "4"; //$NON-NLS-1$
-	public static final String ARCHIVE_FILE_NAME_EMPTY_ERROR = "5"; //$NON-NLS-1$
-	public static final String FILE_DOES_NOT_EXIST_ERROR = "6"; //$NON-NLS-1$
-	public static final String INTERNAL_ERROR = "7"; //$NON-NLS-1$
-	public static final String PROJECT_NAME_INVALID = "8"; //$NON-NLS-1$
-	public static final String DESTINATION_ARCHIVE_SHOULD_END_WITH = "9"; //$NON-NLS-1$
-	public static final String DESTINATION_INVALID = "10"; //$NON-NLS-1$
-	public static final String IS_READ_ONLY = "11"; //$NON-NLS-1$
-	public static final String RESOURCE_EXISTS_ERROR = "12"; //$NON-NLS-1$
-	public static final String PROJECT_NOT_EXISTS_ERROR = "13"; //$NON-NLS-1$
-	public static final String SPEC_LEVEL_NOT_FOUND = "14"; //$NON-NLS-1$
-	public static final String PROJECT_NAME_EMPTY = "15"; //$NON-NLS-1$
-	public static final String PROJECT_ClOSED = "31"; //$NON-NLS-1$
-	public static final String PROJECT_EXISTS_AT_LOCATION_ERROR = "32"; //$NON-NLS-1$
-	public static final String ERR_EMPTY_MODULE_NAME = "34"; //$NON-NLS-1$
-	public static final String ERR_INVALID_CHARS = "35"; //$NON-NLS-1$ 
-	public static final String DUPLICATE_COMPONENT_NAME="36";//$NON-NLS-1$ 
-	public static final String MODULE_NOT_SUPPORTED="37";//$NON-NLS-1$ 
-    
-    public static final String MODULE_EXISTS_ERROR = "38"; //$NON-NLS-1$
-	public static final String SOURCEFOLDER_EMPTY = "39"; //$NON-NLS-1$
-	public static final String WEBCONTENTFOLDER_EMPTY = "40"; //$NON-NLS-1$
-	public static final String PROJECT_EXISTS_SAMENAME_ERROR = "43"; //$NON-NLS-1$
-	public static final String RUNTIME_NONE = "44"; //$NON-NLS-1$
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonPlugin.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonPlugin.java
deleted file mode 100644
index c2a4934..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/internal/plugin/WTPCommonPlugin.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Oct 29, 2003
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wst.common.frameworks.internal.plugin;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
-
-/**
- * @author jsholl
- * 
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public class WTPCommonPlugin extends WTPPlugin {
-
-	public static final String PLUGIN_ID = "org.eclipse.wst.common.frameworks"; //$NON-NLS-1$
-	public static final String GROUP_REGISTRY_EXTENSION_POINT = "functionGroup"; //$NON-NLS-1$
-	public static final IStatus OK_STATUS = new Status(IStatus.OK, PLUGIN_ID, 0, "OK", null); //$NON-NLS-1$
-
-	//	The shared instance.
-	private static WTPCommonPlugin plugin;
-
-	public WTPCommonPlugin() {
-		super();
-		plugin = this;
-		try {
-			resourceBundle = ResourceBundle.getBundle("wtp_common"); //$NON-NLS-1$
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
-	}
-
-	public static WTPCommonPlugin getDefault() {
-		return plugin;
-	}
-
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createErrorStatus(String message) {
-		return createErrorStatus(message, null);
-	}
-
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createWarningStatus(String message) {
-		return createWarningStatus(message, null);
-	}
-	
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createCancelStatus(String message) {
-		return createCancelStatus(message, null);
-	}	
-
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createWarningStatus(String message, Throwable exception) {
-		return new Status(IStatus.WARNING, PLUGIN_ID, -1, message, exception);
-	}
-
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createErrorStatus(String message, Throwable exception) {
-		return new Status(IStatus.ERROR, PLUGIN_ID, -1, message, exception);
-	}
-	
-	/**
-	 * @param string
-	 * @return
-	 */
-	public static IStatus createCancelStatus(String message, Throwable exception) {
-		return new Status(IStatus.CANCEL, PLUGIN_ID, -1, message, exception);
-	}	
-
-	/**
-	 * Returns the string from the plugin's resource bundle, or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle bundle = WTPCommonPlugin.getDefault().getResourceBundle();
-		try {
-			return (bundle != null ? bundle.getString(key) : key);
-		} catch (MissingResourceException e) {
-			return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-	}
-
-	public static String getResourceString(String key, Object[] args) {
-		String pattern = getResourceString(key);
-		if (pattern != null)
-			return MessageFormat.format(pattern, args);
-		return null;
-	}
-
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		return resourceBundle;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.frameworks.internal.WTPPlugin#getPluginID()
-	 */
-	public String getPluginID() {
-		return PLUGIN_ID;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/wtp_common.properties b/plugins/org.eclipse.wst.common.frameworks/src/wtp_common.properties
deleted file mode 100644
index 0108097..0000000
--- a/plugins/org.eclipse.wst.common.frameworks/src/wtp_common.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 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
-###############################################################################
-1=A project already exists with this name and location.
-2=The specified EAR project "{0}" is not an EAR project.
-3=The EAR project "{0}" has a J2EEVersion of {1} which is not compatable with the specified module version.
-4=The EAR project name, "{0}", can not be the same as the project name.
-5={0} file name must be entered.
-6=The {0} does not exist.
-7=An internal error occurred.  View log files for details.
-8=Project name is invalid.
-9=Destination archive should end with {0}.
-10=Destination archive is invalid.
-11=Destination location is read only.
-12=Resource {0} already exists. If you wish to overwrite select the "Overwrite Existing file" option.
-13=Project {0} does not exist.
-14=The selected version is not supported by the server.
-15=Enter a project name.
-16=Save problems
-17=Save could not be completed.  Some related files may have already been saved.\n\nReason
-18={0} has been locked. Please ensure the operation is not currently executing.
-19=The extendedRoot is null. Make sure that isExtended() returns true.
-20=Property not located:
-21=Nested model not located:
-22=Cannot modify id once it has been set.
-23=The id cannot be null.
-24=ERROR:
-25=Extended Operation failure: {0}
-26=The Job completed successfully
-27=Exception occurred running job.
-28=Group cannot be resolved:
-29=Class not found for attribute {0} : {1}, Declaring plugin extension: {2}
-30=Function group {0} contains no pattern bindings
-31=Project {0} is closed.
-32=A project already exists on the file system at this location: {0}.  Either use "Import Existing Projects into Workspace" to create a project at this location or delete the contents of {0} from the file system.
-33=A model instance may only be nested once under another model instance.
-34=Module name cannot be empty.
-35=Invalid characters.
-36=The module with this name already exists.
-37=The module is not supported by this server.
-38=Module name is invalid.
-39=Enter Source Folder
-40=Enter Web content Folder
-41=Project names cannot end with white space.
-42=Resource already exists with a different case.
-43=A project already exists with this name.
-44=<None>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.infopop/.cvsignore b/plugins/org.eclipse.wst.common.infopop/.cvsignore
deleted file mode 100644
index c14487c..0000000
--- a/plugins/org.eclipse.wst.common.infopop/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-build.xml
diff --git a/plugins/org.eclipse.wst.common.infopop/.project b/plugins/org.eclipse.wst.common.infopop/.project
deleted file mode 100644
index d8e0250..0000000
--- a/plugins/org.eclipse.wst.common.infopop/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.infopop</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/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 76d68cc..0000000
--- a/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon Apr 17 03:12:42 EDT 2006
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.pde.prefs
deleted file mode 100644
index f774e3c..0000000
--- a/plugins/org.eclipse.wst.common.infopop/.settings/org.eclipse.pde.prefs
+++ /dev/null
@@ -1,14 +0,0 @@
-#Mon Apr 17 03:12:36 EDT 2006
-compilers.incompatible-environment=0
-compilers.p.build=0
-compilers.p.deprecated=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=0
-compilers.p.unknown-attribute=0
-compilers.p.unknown-class=0
-compilers.p.unknown-element=0
-compilers.p.unknown-resource=0
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.use-project=true
-eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.wst.common.infopop/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.infopop/META-INF/MANIFEST.MF
deleted file mode 100644
index 5ab4ff2..0000000
--- a/plugins/org.eclipse.wst.common.infopop/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,8 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Bundle-Name.0
-Bundle-SymbolicName: org.eclipse.wst.common.infopop; singleton:=true
-Bundle-Version: 1.0.001.qualifier
-Bundle-Vendor: %Bundle-Vendor.0
-Bundle-Localization: plugin
-Eclipse-LazyStart: true
diff --git a/plugins/org.eclipse.wst.common.infopop/SnippetsContexts.xml b/plugins/org.eclipse.wst.common.infopop/SnippetsContexts.xml
deleted file mode 100644
index b3b0c43..0000000
--- a/plugins/org.eclipse.wst.common.infopop/SnippetsContexts.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS type="org.eclipse.help.contexts"?>
-<!-- /*******************************************************************************
- * 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
- *******************************************************************************/ -->
-
-<contexts>
-<context id="libv1000">
-<description>Use this view to catalog and organize reusable programming objects, such as HTML tagging, JavaScript, and JSP markup, along with custom tags, that can be embedded in existing files.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-</context>
-
-<context id="libv1100">
-<description>Supply values in this dialog to define the Snippets view object to be inserted in the current file at the cursor position. Assign a value to the variables being inserted.
-</description>
-<topic label="Inserting and editing items in the active editor" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt015.html"/>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-</context>
-
-<context id="libv1200">
-<description>In the <b>Name</b> field, type the name of the object as you want it be displayed in the Snippets view.  Optionally, add a description of the object in the <b>Description</b> field.
-
-Select the <b>Hide</b> check box to make this snippet object not visible in the view.
-
-To add a new variable, click the <b>New</b> push button, and type values in the cells of the <b>Variables</b> table. The <b>Name</b> field represents name of the variable that will be inserted when you add it to a document. <b>Default value</b> is the initial value of the named variable. Optionally, add a description of the variable.
-
-Insert the variables that you define into the <b>Template Pattern</b> field using the <b>Insert Variable Placeholder</b> push button.
-</description>
-<topic label="Deleting or hiding snippet items or drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt016.html"/>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-</context>
-
-<context id="libv1300">
-<description>Type the name of the new category in the <b>Name</b> field and optionally add a description of the category in the <b>Description</b> field.
-
-Select <b>Open drawer at start-up</b> to have the category drawer opened in the Snippets view when the workbench starts up.
-
-You can specify how you want the category drawer displayed in the Snippets view by selecting a radio button for the <b>Show/Hide Drawer</b> field.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-<topic label="Deleting or hiding snippet items or drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt016.html"/>
-</context>
-
-<context id="snip0010">
-<description>Select this option to open the <b>Import</b> dialog, which lets you import snippet categories from the file system.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-<topic label="Adding items to snippets drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt015.html"/>
-</context>
-
-<context id="snip0020">
-<description>Select this option to open the <b>Export</b> dialog, which lets you export snippet categories to the file system.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-<topic label="Adding items to snippets drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt015.html"/>
-</context>
-
-<context id="snip0030">
-<description>Select the content types that should be visible in this drawer for in the Snippets view.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-<topic label="Deleting or hiding snippet items or drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt016.html"/>
-</context>
-
-<context id="snip0040">
-<description>This menu item adds the selected text to the Snippets view as a new item.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-<topic label="Adding items to snippets drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt015.html"/>
-</context>
-
-<context id="snip0050">
-<description>This menu item cuts the selected Snippet item to the clipboard.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-<topic label="Editing snippet items" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt022.html"/>
-</context>
-
-<context id="snip0060">
-<description>This menu item copies the selected Snippet item to the clipboard.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-<topic label="Editing snippet items" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt022.html"/>
-</context>
-
-<context id="snip0070">
-<description>This menu item creates a new Snippets view item containing the current contents of the clipboard.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-<topic label="Adding items to snippets drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt015.html"/>
-</context>
-<context id="snip0080">
-<description>Type a name for the category. The category appears in the Customize Palette dialog box. Once you have created a category, you can add items to the category.
-</description>
-<topic label="Snippets view" href="../org.eclipse.wst.sse.doc.user/topics/csrcedt001.html"/>
-<topic label="Adding items to snippets drawers" href="../org.eclipse.wst.sse.doc.user/topics/tsrcedt015.html"/>
-</context>
-
-</contexts>
diff --git a/plugins/org.eclipse.wst.common.infopop/about.html b/plugins/org.eclipse.wst.common.infopop/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.wst.common.infopop/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/plugins/org.eclipse.wst.common.infopop/build.properties b/plugins/org.eclipse.wst.common.infopop/build.properties
deleted file mode 100644
index c1d3dbf..0000000
--- a/plugins/org.eclipse.wst.common.infopop/build.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-bin.includes = plugin.xml,\
-               about.html,\
-               SnippetsContexts.xml,\
-               META-INF/,\
-               plugin.properties
diff --git a/plugins/org.eclipse.wst.common.infopop/plugin.properties b/plugins/org.eclipse.wst.common.infopop/plugin.properties
deleted file mode 100644
index 74f0260..0000000
--- a/plugins/org.eclipse.wst.common.infopop/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# properties file for org.eclipse.wst.common.infopop
-Bundle-Name.0 = Common WST infopops
-Bundle-Vendor.0 = Eclipse.org
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.infopop/plugin.xml b/plugins/org.eclipse.wst.common.infopop/plugin.xml
deleted file mode 100644
index f1e178c..0000000
--- a/plugins/org.eclipse.wst.common.infopop/plugin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<!-- ================================================= -->
-<!-- This is the plugin for declaring the help         -->
-<!-- contributions for using the tool.                 -->
-<!-- ================================================= -->
-
-<plugin>
-
-<extension point="org.eclipse.help.contexts">
-       <contexts file="SnippetsContexts.xml" plugin ="org.eclipse.wst.common.snippets"/>
-</extension>
-
-
-</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore/.classpath b/plugins/org.eclipse.wst.common.modulecore/.classpath
index 48c8e15..0c7fcda 100644
--- a/plugins/org.eclipse.wst.common.modulecore/.classpath
+++ b/plugins/org.eclipse.wst.common.modulecore/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="modulecore-src/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<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/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..31bb1e6
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,62 @@
+#Thu May 10 18:38:08 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..a18ff1d
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Wed Mar 19 17:18:41 EDT 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">org.eclipse.wst.common.componentcore.internal.ModulecorePlugin.logError(${exception_var});</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
index 3ad4ee0..522a71f 100644
--- a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
@@ -1,9 +1,9 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Modulecore Plug-in
+Bundle-Name: %Bundle-Name.0
 Bundle-Vendor: %provider
 Bundle-SymbolicName: org.eclipse.wst.common.modulecore; singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.206.qualifier
 Bundle-Activator: org.eclipse.wst.common.componentcore.internal.ModulecorePlugin
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.componentcore,
@@ -16,18 +16,19 @@
  org.eclipse.wst.common.componentcore.internal.resources;x-internal:=true,
  org.eclipse.wst.common.componentcore.internal.util;x-internal:=true,
  org.eclipse.wst.common.componentcore.resources
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.emf.ecore;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.wst.common.emfworkbench.integration;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.emf;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.core.commands;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.emf.edit;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.wst.common.uriresolver;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.environment;bundle-version="[1.0.100,1.1.0)",
- org.eclipse.wst.validation;bundle-version="[1.1.0,1.2.0)"
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.wst.common.emfworkbench.integration;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.wst.common.emf;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.core.commands;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.emf.edit;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.jem.util;bundle-version="[2.0.100,3.0.0)",
+ org.eclipse.wst.common.uriresolver;bundle-version="[1.1.301,2.0.0)",
+ org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,2.0.0)",
+ org.eclipse.wst.common.environment;bundle-version="[1.0.200,2.0.0)",
+ org.eclipse.wst.validation;bundle-version="[1.2.0,2.0.0)"
 Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.common.modulecore/about.html b/plugins/org.eclipse.wst.common.modulecore/about.html
index 4ec5989..2199df3 100644
--- a/plugins/org.eclipse.wst.common.modulecore/about.html
+++ b/plugins/org.eclipse.wst.common.modulecore/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>May 2, 2006</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
index 709cf5b..77cca57 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -11,10 +11,14 @@
 package org.eclipse.wst.common.componentcore;
 
 import java.util.EventObject;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -28,12 +32,17 @@
 import org.eclipse.jem.util.UIContextDetermination;
 import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
 import org.eclipse.wst.common.componentcore.internal.BinaryComponentHelper;
+import org.eclipse.wst.common.componentcore.internal.impl.ArtifactEditModelFactory;
 import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
+import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.frameworks.internal.operations.IOperationHandler;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
 import org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 
 /**
  * Provides a Facade pattern for accessing Module Content Metamodels for Web Tools Platform flexible
@@ -272,13 +281,22 @@
 	 *            {@see ModuleCoreNature}
 	 */
 	protected ArtifactEdit(ModuleCoreNature aNature, IVirtualComponent aModule, boolean toAccessAsReadOnly) {
-		if (toAccessAsReadOnly)
-			artifactEditModel = aNature.getArtifactEditModelForRead(ModuleURIUtil.fullyQualifyURI(aModule.getProject()), this);
-		else
-			artifactEditModel = aNature.getArtifactEditModelForWrite(ModuleURIUtil.fullyQualifyURI(aModule.getProject()), this);
+		
 		isReadOnly = toAccessAsReadOnly;
 		isArtifactEditModelSelfManaged = true;
 		project = aNature.getProject();
+		IProject aProject = aModule.getProject();
+		URI componentURI = ModuleURIUtil.fullyQualifyURI(aProject);
+		Map editModelParams = null;
+		if (getContentTypeDescriber() != null) {
+			editModelParams = new HashMap();
+			editModelParams.put(ArtifactEditModelFactory.PARAM_ROOT_URI, getRootURI());
+			editModelParams.put(ArtifactEditModelFactory.PARAM_ROOT_CONTENT_TYPE, getContentTypeDescriber());
+		}
+		if (toAccessAsReadOnly) 
+			artifactEditModel = aNature.getArtifactEditModelForRead(componentURI, this, null, editModelParams);
+		else 
+			artifactEditModel = aNature.getArtifactEditModelForWrite(componentURI, this, null, editModelParams);
 	}
 
 	/**
@@ -311,6 +329,25 @@
 		
 		this(aProject,toAccessAsReadOnly,forCreate,projectType,null);
 	}
+	
+	protected void verifyOperationSupported() {
+		if(!validArtifactEdit){
+			throw new RuntimeException("Invalid Artifact Edit access (model version not supported)");
+		}
+	}
+	
+	private boolean validArtifactEdit = true;
+	
+	public boolean isValid() {
+		return validArtifactEdit;
+	}
+	
+	protected void markInvalid(){
+		Logger.global.log(Level.WARNING, "Invalid Artifact Edit access (model version not supported)");
+		validArtifactEdit = false;
+	}
+	
+	
 	/**
 	 * <p>
 	 * Creates an instance facade for the given {@see WorkbenchComponent}.
@@ -332,24 +369,82 @@
 
 		if (nature == null)
 			throw new IllegalArgumentException("Project does not have ModuleCoreNature: " + aProject);
-
+		if (!validProjectVersion(aProject)){
+			markInvalid();
+		}
 		IVirtualComponent component = ComponentCore.createComponent(aProject);
 		if (component == null)
 			throw new IllegalArgumentException("Invalid component handle: " + aProject);
 		if (!forCreate && !isValidEditableModule(component))
 			throw new IllegalArgumentException("Invalid component handle: " + aProject);
+		project = aProject;
 		URI componentURI = ModuleURIUtil.fullyQualifyURI(aProject);
-
-		if (toAccessAsReadOnly)
+		if (getContentTypeDescriber() != null) {
+			if (editModelParams == null)
+				editModelParams = new HashMap();
+			editModelParams.put(ArtifactEditModelFactory.PARAM_ROOT_URI, getRootURI());
+			editModelParams.put(ArtifactEditModelFactory.PARAM_ROOT_CONTENT_TYPE, getContentTypeDescriber());
+		}
+		if (toAccessAsReadOnly) 
 			artifactEditModel = nature.getArtifactEditModelForRead(componentURI, this, projectType, editModelParams);
-		else
+		else 
 			artifactEditModel = nature.getArtifactEditModelForWrite(componentURI, this, projectType, editModelParams);
+		
+			
 		isReadOnly = toAccessAsReadOnly;
 		isArtifactEditModelSelfManaged = true;
+	}
+	
+	public boolean isProjectOfType(IProject project, String typeID) {
+		IFacetedProject facetedProject = null;
+		try {
+			facetedProject = ProjectFacetsManager.create(project);
+		} catch (CoreException e) {
+			return false;
+		}
+		if (facetedProject != null && ProjectFacetsManager.isProjectFacetDefined(typeID)) {
+			IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(typeID);
+			return projectFacet != null && facetedProject.hasProjectFacet(projectFacet);
+		}
+		return false;
+	}
+	/**
+	 * Used to optionally define an associated content type for XML file creation
+	 * @return
+	 */
+	protected String getContentTypeDescriber() {
 		
-		project = aProject;
+		if (isProjectOfType(project, IModuleConstants.JST_EJB_MODULE))
+			return "org.eclipse.jst.j2ee.ejbDD";
+		if (isProjectOfType(project, IModuleConstants.JST_WEB_MODULE))
+			return "org.eclipse.jst.j2ee.webDD";
+		if (isProjectOfType(project, IModuleConstants.JST_EAR_MODULE))
+			return "org.eclipse.jst.j2ee.earDD";
+		if (isProjectOfType(project, IModuleConstants.JST_APPCLIENT_MODULE))
+			return "org.eclipse.jst.j2ee.appclientDD";
+		return null;
+	}
+	
+	/**
+	 * Used to optionally define an root URI for the project
+	 * @return
+	 */
+	protected URI getRootURI() {
+		
+		if (isProjectOfType(project, IModuleConstants.JST_EJB_MODULE))
+			return URI.createURI("META-INF/ejb-jar.xml");
+		if (isProjectOfType(project, IModuleConstants.JST_WEB_MODULE))
+			return URI.createURI("WEB-INF/web.xml");
+		if (isProjectOfType(project, IModuleConstants.JST_EAR_MODULE))
+			return URI.createURI("META-INF/application.xml");
+		if (isProjectOfType(project, IModuleConstants.JST_APPCLIENT_MODULE))
+			return URI.createURI("META-INF/application-client.xml");
+		return null;
 	}
 
+	protected boolean validProjectVersion(IProject project2) {
+		return true;
+	}
 
 	/**
 	 * <p>
@@ -388,7 +483,7 @@
 	/**
 	 * Validate edit for resource state
 	 */
-	protected IStatus validateEdit() {
+	public IStatus validateEdit() {
 		IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
 		return validator.validateState(getArtifactEditModel());
 	}
@@ -458,7 +553,7 @@
 	 */
 	public void dispose() {
 		if(isBinary()){
-			binaryComponentHelper.releaseAccess(this);
+			binaryComponentHelper.dispose();
 		} else if (isArtifactEditModelSelfManaged && artifactEditModel != null)
 			artifactEditModel.releaseAccess(this);
 	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java
index e6467b7..062a5e5 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -16,7 +16,6 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.common.componentcore.internal.ComponentResource;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode;
@@ -25,7 +24,6 @@
 import org.eclipse.wst.common.componentcore.internal.resources.VirtualResource;
 import org.eclipse.wst.common.componentcore.internal.util.ComponentImplManager;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
-import org.eclipse.wst.common.componentcore.resources.IVirtualContainer;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
@@ -56,7 +54,7 @@
 	 *            A valid, accessible project to contain the component
 	 * @return A handle to an IVirtualComponent that may or may not exist or
 	 *         null if passed project does not contain ModuleCoreNature.
-	 * @see IVirtualContainer#create(int, IProgressMonitor)
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualComponent createComponent(IProject aProject) {
 		if (aProject == null || !aProject.isAccessible()){
@@ -72,10 +70,30 @@
 	 * 
 	 * @param aProject
 	 *            A valid, accessible project to contain the component
+	 * @param checkForComponentFile
+	 *            A flag to indicate if the presence of the component file should be checked
+	 * @return A handle to an IVirtualComponent that may or may not exist or
+	 *         null if passed project does not contain ModuleCoreNature.
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public static IVirtualComponent createComponent(IProject aProject, boolean checkForComponentFile) {
+		if (aProject == null || !aProject.isAccessible()){
+			return null;
+		}
+		return ComponentImplManager.instance().createComponent(aProject, checkForComponentFile);
+	}
+
+	/**
+	 * Return an IVirtualComponent with the given name (aComponentName)
+	 * contained by the given project (aProject). Component names should be
+	 * unique across a project.
+	 * 
+	 * @param aProject
+	 *            A valid, accessible project to contain the component
 	 * @return A handle to an IVirtualComponent that may or may not exist or
 	 *         null if passed project does not contain ModuleCoreNature.
 	 * @deprecated
-	 * @see IVirtualContainer#create(int, IProgressMonitor)
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualComponent createComponent(IProject aProject, String aName) {
 		return createComponent(aProject);
@@ -89,7 +107,7 @@
 	 *            lib/&lt;Absolute path of a jar&gt; or
 	 *            var/&lt;CLASSPATH_VARIABLE/library namer&gt;
 	 * @return A handle to an IVirtualComponent that may or may not exist.
-	 * @see IVirtualContainer#create(int, IProgressMonitor)
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualComponent createArchiveComponent(IProject aProject, String aComponentName) {
 		return ComponentImplManager.instance().createArchiveComponent(aProject, aComponentName);
@@ -106,8 +124,8 @@
 	 *            The runtime path of the IVirtualFolder to return.
 	 * @return An IVirtualFolder contained by the specified component with the
 	 *         given runtime path
-	 * @see IVirtualContainer#create(int, IProgressMonitor)
-	 * @see IVirtualResource#createLink(IPath, int, IProgressMonitor)
+	 * @see org.eclipse.core.runtime.IProgressMonitor#create(int, org.eclipse.core.runtime.IProgressMonitor)
+	 * @see IVirtualResource#createLink(IPath, int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualFolder createFolder(IProject aProject, IPath aRuntimePath) {
 		return ComponentImplManager.instance().createFolder(aProject, aRuntimePath);
@@ -127,7 +145,7 @@
 	 *            The runtime path of the IVirtualFolder to return.
 	 * @return An IVirtualFile contained by the specified component with the
 	 *         given runtime path
-	 * @see IVirtualResource#createLink(IPath, int, IProgressMonitor)
+	 * @see IVirtualResource#createLink(IPath, int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualFile createFile(IProject aProject, IPath aRuntimePath) {
 		return new VirtualFile(aProject, aRuntimePath);
@@ -145,7 +163,7 @@
 	 *            A valid, existing IVirtualComponent
 	 * @return An IVirtualReference that captures the relationship between
 	 *         aComponent and aReferencedComponent.
-	 * @see IVirtualReference#create(int, IProgressMonitor)
+	 * @see IVirtualReference#create(int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public static IVirtualReference createReference(IVirtualComponent aComponent, IVirtualComponent aReferencedComponent) {
 		return new VirtualReference(aComponent, aReferencedComponent);
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java
index 017920f..a3704cf 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ModuleCoreNature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -13,6 +13,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.resources.IProjectNature;
@@ -31,15 +32,14 @@
 import org.eclipse.jem.util.emf.workbench.ISynchronizerExtender;
 import org.eclipse.jem.util.emf.workbench.ProjectResourceSet;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.jem.util.emf.workbench.nature.EMFNature;
 import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
 import org.eclipse.wst.common.componentcore.internal.ModuleStructuralModel;
 import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.internal.impl.ArtifactEditModelFactory;
 import org.eclipse.wst.common.componentcore.internal.impl.ComponentCoreURIConverter;
 import org.eclipse.wst.common.componentcore.internal.impl.ModuleStructuralModelFactory;
+import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResourceFactory;
 import org.eclipse.wst.common.componentcore.internal.impl.WTPResourceFactoryRegistry;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.internal.util.ModuleCoreMessages;
@@ -49,6 +49,7 @@
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 /**
  * <p>
@@ -137,14 +138,15 @@
  * @see org.eclipse.wst.common.componentcore.internal.StructureEdit#getStructureEditForRead(IProject)
  * @see org.eclipse.wst.common.componentcore.internal.StructureEdit#getStructureEditForWrite(IProject)
  * @see org.eclipse.wst.common.componentcore.ArtifactEdit
- * @see org.eclipse.wst.common.componentcore.ArtifactEdit#getArtifactEditForRead(WorkbenchComponent)
- * @see org.eclipse.wst.common.componentcore.ArtifactEdit#getArtifactEditForWrite(WorkbenchComponent)
+ * @see org.eclipse.wst.common.componentcore.ArtifactEdit#getArtifactEditForRead(org.eclipse.wst.common.componentcore.internal.WorkbenchComponent)
+ * @see org.eclipse.wst.common.componentcore.ArtifactEdit#getArtifactEditForWrite(org.eclipse.wst.common.componentcore.internal.WorkbenchComponent)
  * @plannedfor 1.0
  */
 public class ModuleCoreNature extends EditModelNature implements IProjectNature, IModuleConstants, ISynchronizerExtender {
 	
-    public static final String VALIDATION_BUILDER_ID = "org.eclipse.wst.validation.validationbuilder"; // plugin id of the validation builder//$NON-NLS-1$
-    private ModuleStructuralModel cachedModel;
+    public static final String VALIDATION_BUILDER_ID = ValidationPlugin.VALIDATION_BUILDER_ID;
+    private ModuleStructuralModel cachedWriteHandle;
+    private ModuleStructuralModel cachedReadHandle;
 	/**
 	 * <p>
 	 * Find and return the ModuleCoreNature of aProject, if available.
@@ -165,8 +167,33 @@
 		}
 		return null;
 	}
+	// The existence of this Nature plus the component file on disk makes a flexible project
 	public static boolean isFlexibleProject(IProject project) {
-		return ModuleCoreNature.getModuleCoreNature(project) != null;
+		boolean foundNature = ModuleCoreNature.getModuleCoreNature(project) != null;
+		if (foundNature) {
+			return componentResourceExists(project);
+		}
+		return false;
+	}
+	public static boolean componentResourceExists(IProject project) {
+		
+		IFile compFile = project.getFile(StructureEdit.MODULE_META_FILE_NAME);
+		if (compFile.isAccessible())
+			return true;
+		else { //Need to check for legacy file locations also....
+			compFile = project.getFile(ModuleStructuralModel.R1_MODULE_META_FILE_NAME);
+			if (compFile.isAccessible())
+				return true;
+			else {
+				compFile = project.getFile(ModuleStructuralModel.R0_7_MODULE_META_FILE_NAME);
+				if (compFile.isAccessible())
+					return true;
+				else {
+					compFile = project.getFile(WTPModulesResourceFactory.FIRST_WTP_MODULES_SHORT_NAME);
+					return compFile.isAccessible();
+				}
+			}
+		}
 	}
 
 	/**
@@ -238,7 +265,20 @@
 	 * @return A {@see ModuleStructuralModel}for the project of the current nature.
 	 */
 	public ModuleStructuralModel getModuleStructuralModelForRead(Object anAccessorKey) {
-		return (ModuleStructuralModel) getEditModelForRead(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, anAccessorKey);
+		// Return self managed edit model - will always cache locally
+		ModuleStructuralModel editModel = (ModuleStructuralModel)getEmfContext().getExistingEditModel(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, null,true);
+		if (editModel == null) {
+			editModel = (ModuleStructuralModel)EditModelRegistry.getInstance().createEditModelForRead(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, getEmfContext(), null);
+			synchronized (editModel) {
+				getEmfContext().cacheEditModel(editModel, null);
+				editModel.access(anAccessorKey);
+			}
+		} else {
+			synchronized (editModel) {
+				editModel.access(anAccessorKey);
+			}
+		}
+		return editModel;
 	}
 
 	/**
@@ -264,14 +304,27 @@
 	 * @return A {@see ModuleStructuralModel}for the project of the current nature.
 	 */
 	public ModuleStructuralModel getModuleStructuralModelForWrite(Object anAccessorKey) {
-		return (ModuleStructuralModel) getEditModelForWrite(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, anAccessorKey);
+		// Return self managed edit model - will always cache locally
+		ModuleStructuralModel editModel = (ModuleStructuralModel)getEmfContext().getExistingEditModel(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, null,false);
+		if (editModel == null) {
+			editModel = (ModuleStructuralModel)EditModelRegistry.getInstance().createEditModelForWrite(ModuleStructuralModelFactory.MODULE_STRUCTURAL_MODEL_ID, getEmfContext(), null);
+			synchronized (editModel) {
+				getEmfContext().cacheEditModel(editModel, null);
+				editModel.access(anAccessorKey);
+			}
+		} else {
+			synchronized (editModel) {
+				editModel.access(anAccessorKey);
+			}
+		}
+		return editModel;
 	}
 
 	/**
 	 * <p>
 	 * Returns an {@see ArtifactEditModel}&nbsp; to work with the underlying content of an
-	 * individual {@see WorkbenchComponent}&nbsp; contained in the project. {@see ArtifactEditModel}s
-	 * are used to manipulate the content models for individual {@see WorkbenchComponent}s. In
+	 * individual {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}&nbsp; contained in the project. {@see ArtifactEditModel}s
+	 * are used to manipulate the content models for individual {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}s. In
 	 * general, a content model will contain an EMF representation of the module's relevant
 	 * deployment descriptor, and possibly other EMF resources as well.
 	 * </p>
@@ -296,7 +349,7 @@
 	 * <code>WebEdit editFacade = WebEdit.getWebEditForRead(aWorkbenchModule);</code>
 	 * </p>
 	 * <p>
-	 * If a particular Edit Facade is not applicable to the supplied {@see WorkbenchComponent}, then
+	 * If a particular Edit Facade is not applicable to the supplied {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}, then
 	 * <b>null </b> will be returned.
 	 * </p>
 	 * 
@@ -317,7 +370,7 @@
 	 *            {@see ModuleStructuralModel}.
 	 * @return
 	 * @see ArtifactEdit
-	 * @see ArtifactEdit#getArtifactEditForRead(WorkbenchComponent)
+	 * @see ArtifactEdit#getArtifactEditForRead(org.eclipse.wst.common.componentcore.internal.WorkbenchComponent)
 	 */
 	public ArtifactEditModel getArtifactEditModelForRead(URI aModuleURI, Object anAccessorKey) {
 		return getArtifactEditModelForRead(aModuleURI, anAccessorKey, null);
@@ -372,8 +425,8 @@
 	/**
 	 * <p>
 	 * Returns an {@see ArtifactEditModel}&nbsp; to work with the underlying content of an
-	 * individual {@see WorkbenchComponent}&nbsp; contained in the project. {@see ArtifactEditModel}s
-	 * are used to manipulate the content models for individual {@see WorkbenchComponent}s. In
+	 * individual {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}&nbsp; contained in the project. {@see ArtifactEditModel}s
+	 * are used to manipulate the content models for individual {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}s. In
 	 * general, a content model will contain an EMF representation of the module's relevant
 	 * deployment descriptor, and possibly other EMF resources as well.
 	 * </p>
@@ -399,7 +452,7 @@
 	 * <code>WebEdit editFacade = WebEdit.getWebEditForWrite(aWorkbenchModule);</code>
 	 * </p>
 	 * <p>
-	 * If a particular Edit Facade is not applicable to the supplied {@see WorkbenchComponent}, then
+	 * If a particular Edit Facade is not applicable to the supplied {@see org.eclipse.wst.common.componentcore.internal.WorkbenchComponent}, then
 	 * <b>null </b> will be returned.
 	 * </p>
 	 * 
@@ -420,7 +473,7 @@
 	 *            {@see ModuleStructuralModel}.
 	 * @return
 	 * @see ArtifactEdit
-	 * @see ArtifactEdit#getArtifactEditForRead(WorkbenchComponent)
+	 * @see ArtifactEdit#getArtifactEditForRead(org.eclipse.wst.common.componentcore.internal.WorkbenchComponent)
 	 */
 	public ArtifactEditModel getArtifactEditModelForWrite(URI aModuleURI, Object anAccessorKey) {
 		return getArtifactEditModelForWrite(aModuleURI, anAccessorKey, null);
@@ -496,11 +549,12 @@
 		// addAdapterFactories(set);
 		// set.getSynchronizer().addExtender(this); // added so we can be informed of closes to the
 		// new J2EEResourceDependencyRegister(set); // This must be done after the URIConverter is
-		cacheModuleStructuralModel();
+		projectResourceSet.getSynchronizer().addExtender(this); // added so we can be informed of closes
+		cacheModuleStructuralModels();
 	}
 	
 	/**
-	 * @see EMFNature.primConfigure
+	 * @see org.eclipse.jem.util.emf.workbench.nature.EMFNature.primConfigure
 	 */
 	protected void primConfigure() throws CoreException {
 		super.primConfigure();
@@ -552,9 +606,11 @@
 		
 	}
 
-	private void cacheModuleStructuralModel() {
-		if (cachedModel == null)
-			cachedModel = getModuleStructuralModelForRead(this);
+	private void cacheModuleStructuralModels() {
+		if (cachedWriteHandle == null)
+			cachedWriteHandle = getModuleStructuralModelForWrite(this);
+		if (cachedReadHandle == null)
+			cachedReadHandle = getModuleStructuralModelForRead(this);
 	}
 
 	protected String getPluginID() {
@@ -567,9 +623,17 @@
 
 	public void shutdown() {
 		super.shutdown();
-		if (cachedModel != null) {
-			cachedModel.dispose();
-			cachedModel = null;
+		if (cachedWriteHandle != null) {
+			if (cachedWriteHandle.isDirty())
+				cachedWriteHandle.saveIfNecessary(this);
+			cachedWriteHandle.dispose();
+			cachedWriteHandle = null;
+		}
+		if (cachedReadHandle != null) {
+			if (cachedReadHandle.isDirty())
+				cachedReadHandle.saveIfNecessary(this);
+			cachedReadHandle.dispose();
+			cachedReadHandle = null;
 		}
 	}
 
@@ -579,9 +643,12 @@
 	 * @see org.eclipse.wst.common.internal.emfworkbench.ISynchronizerExtender#projectChanged(org.eclipse.core.resources.IResourceDelta)
 	 */
 	public void projectChanged(IResourceDelta delta) {
-		if (delta.getKind() == IResourceDelta.OPEN)
-			if (cachedModel == null)
-				cachedModel = getModuleStructuralModelForRead(this);
+		if (delta.getKind() == IResourceDelta.OPEN) {
+			if (cachedWriteHandle == null)
+				cachedWriteHandle = getModuleStructuralModelForWrite(this);
+			if (cachedReadHandle == null)
+				cachedReadHandle = getModuleStructuralModelForRead(this);
+		}
 	
 	}
 
@@ -591,10 +658,19 @@
 	 * @see org.eclipse.wst.common.internal.emfworkbench.ISynchronizerExtender#projectClosed()
 	 */
 	public void projectClosed() {
+//		StringBuffer buffer = new StringBuffer("Disposing Module models for project: ");
+//		buffer.append(this.getProject());
+//		System.out.println(buffer.toString());
 		this.emfContext = null;
-		if (cachedModel != null) {
-			cachedModel.dispose();
-			cachedModel = null;
+		if (cachedWriteHandle != null) {
+			if (cachedWriteHandle.isDirty())
+				cachedWriteHandle.saveIfNecessary(this);
+			cachedWriteHandle.dispose();
+			cachedWriteHandle = null;
+		}
+		if (cachedReadHandle != null) {
+			cachedReadHandle.dispose();
+			cachedReadHandle = null;
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelConfigAdapter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelConfigAdapter.java
index 705a702..431c7ee 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelConfigAdapter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelConfigAdapter.java
@@ -13,11 +13,13 @@
 
 import org.eclipse.core.runtime.IAdapterFactory;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.project.facet.core.IActionConfig;
+import org.eclipse.wst.common.project.facet.core.ActionConfig;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
 
 /**
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
@@ -25,7 +27,7 @@
 
 public final class FacetDataModelConfigAdapter
 
-    implements IActionConfig
+    extends ActionConfig
     
 {
     private final IDataModel dm;
@@ -35,19 +37,30 @@
         this.dm = dm;
     }
     
-    public void setVersion( final IProjectFacetVersion fv )
+    public void setProjectFacetVersion( final IProjectFacetVersion fv )
     {
         dm.setProperty( IFacetDataModelProperties.FACET_VERSION, fv );
     }
-
-    public void setProjectName( final String pjname )
+    
+    public void setFacetedProjectWorkingCopy( final IFacetedProjectWorkingCopy fpjwc )
     {
-        dm.setStringProperty( IFacetDataModelProperties.FACET_PROJECT_NAME, pjname );
+        dm.setProperty( IFacetDataModelProperties.FACETED_PROJECT_WORKING_COPY, fpjwc );
+        
+        final IFacetedProjectListener nameChangeListener = new IFacetedProjectListener()
+        {
+            public void handleEvent( final IFacetedProjectEvent event )
+            {
+                dm.setStringProperty( IFacetDataModelProperties.FACET_PROJECT_NAME, fpjwc.getProjectName() );
+            }
+        };
+        
+        fpjwc.addListener( nameChangeListener, IFacetedProjectEvent.Type.PROJECT_NAME_CHANGED );
+        nameChangeListener.handleEvent( null );
     }
 
     public IStatus validate()
     {
-        return Status.OK_STATUS;
+        return dm.validate();
     }
 
     public static final class Factory
@@ -55,13 +68,12 @@
         implements IAdapterFactory
         
     {
-        private static final Class[] ADAPTER_TYPES
-            = { IActionConfig.class };
+        private static final Class[] ADAPTER_TYPES = { ActionConfig.class };
         
         public Object getAdapter( final Object adaptable, 
                                   final Class adapterType )
         {
-            if( adapterType == IActionConfig.class )
+            if( adapterType == ActionConfig.class )
             {
                 return new FacetDataModelConfigAdapter( (IDataModel) adaptable );
             }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelProvider.java
index 1300287..59a3b2d 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetDataModelProvider.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -31,6 +31,7 @@
 
 	public Set getPropertyNames() {
 		Set names = super.getPropertyNames();
+		names.add(FACETED_PROJECT_WORKING_COPY);
 		names.add(FACET_PROJECT_NAME);
 		names.add(FACET_ID);
 		names.add(FACET_VERSION_STR);
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetInstallDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetInstallDataModelProvider.java
index cb2ab1d..5022348 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetInstallDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetInstallDataModelProvider.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -43,8 +43,8 @@
 			IProjectFacetVersion version = (IProjectFacetVersion) getProperty(FACET_VERSION);
 			return version.getVersionString();
 		} else if (FACET_VERSION.equals(propertyName)) {
-			DataModelPropertyDescriptor[] validVersions = getValidPropertyDescriptors(FACET_VERSION);
-			return validVersions[validVersions.length - 1].getPropertyValue();
+			IProjectFacetVersion version = ProjectFacetsManager.getProjectFacet(getStringProperty(FACET_ID)).getDefaultVersion();
+			return version;
 		}
 		return super.getDefaultProperty(propertyName);
 	}
@@ -107,4 +107,4 @@
 		return DataModelFactory.createDataModel(this);
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetProjectCreationDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetProjectCreationDataModelProvider.java
index bf7c505..d8cb5d6 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetProjectCreationDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FacetProjectCreationDataModelProvider.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -15,12 +15,15 @@
 import java.util.Collection;
 import java.util.Comparator;
 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.CoreException;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties;
@@ -36,10 +39,15 @@
 import org.eclipse.wst.common.frameworks.internal.operations.ProjectCreationDataModelProviderNew;
 import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonMessages;
 import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
 import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
 import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager;
 
@@ -62,6 +70,7 @@
 
 	public Set getPropertyNames() {
 		Set names = super.getPropertyNames();
+		names.add(FACETED_PROJECT_WORKING_COPY);
 		names.add(FACET_PROJECT_NAME);
 		names.add(FACET_DM_MAP);
 		names.add(FACET_ACTION_MAP);
@@ -73,12 +82,65 @@
 
 	public void init() {
 		super.init();
+		
+		final IFacetedProjectWorkingCopy fpjwc = FacetedProjectFramework.createNewProject();
+		model.setProperty(FACETED_PROJECT_WORKING_COPY, fpjwc);
+		
+		fpjwc.addListener
+		(
+		    new IFacetedProjectListener()
+		    {
+                public void handleEvent( final IFacetedProjectEvent event )
+                {
+                    for( IFacetedProject.Action action : fpjwc.getProjectFacetActions() )
+                    {
+                        final Object config = action.getConfig();
+                        
+                        if( config != null && config instanceof IDataModel )
+                        {
+                            final IDataModel dm = (IDataModel) config;
+                            
+                            if( dm.getAllProperties().contains( FacetInstallDataModelProvider.MASTER_PROJECT_DM ) )
+                            {
+                                dm.setProperty( FacetInstallDataModelProvider.MASTER_PROJECT_DM, model );
+                            }
+                        }
+                    }
+                }
+		    },
+		    IFacetedProjectEvent.Type.PROJECT_FACETS_CHANGED
+		);
+
+        fpjwc.addListener
+        (
+            new IFacetedProjectListener()
+            {
+                public void handleEvent( final IFacetedProjectEvent event )
+                {
+                    model.notifyPropertyChange(FACET_RUNTIME, IDataModel.VALID_VALUES_CHG);
+                }
+            },
+            IFacetedProjectEvent.Type.AVAILABLE_RUNTIMES_CHANGED
+        );
+		
 		IDataModel projectDataModel = DataModelFactory.createDataModel(new ProjectCreationDataModelProviderNew());
 		projectDataModel.addListener(new IDataModelListener() {
-			public void propertyChanged(DataModelEvent event) {
-				if (IProjectCreationPropertiesNew.PROJECT_NAME.equals(event.getPropertyName())) {
-					getDataModel().setProperty(FACET_PROJECT_NAME, event.getProperty());
+			public void propertyChanged(DataModelEvent event) 
+			{
+			    final String prop = event.getPropertyName();
+			    
+                if( event.getFlag() == IDataModel.VALUE_CHG &&
+                    prop.equals( IProjectCreationPropertiesNew.PROJECT_NAME ) )
+                {
+                    final String projectName = (String) event.getProperty();
+					getDataModel().setProperty(FACET_PROJECT_NAME, projectName);
+					fpjwc.setProjectName( projectName );
 				}
+                else if( prop.equals( IProjectCreationPropertiesNew.PROJECT_LOCATION ) )
+                {
+                    final String location = (String) event.getProperty();
+                    fpjwc.setProjectLocation( location == null ? null : new Path( location ) );
+                }
 			}
 		});
 		model.addNestedModel(NESTED_PROJECT_DM, projectDataModel);
@@ -222,8 +284,6 @@
 				} else {
 					event.getDataModel().removeListener(this);
 				}
-			} else if (event.getPropertyName().equals(IFacetDataModelProperties.FACET_VERSION)) {
-				getDataModel().notifyPropertyChange(FACET_RUNTIME, IDataModel.VALID_VALUES_CHG);
 			}
 		}
 
@@ -266,6 +326,30 @@
 				}
 			}
 		}
+		else if( REQUIRED_FACETS_COLLECTION.equals(propertyName) )
+		{
+		    final IFacetedProjectWorkingCopy fpjwc 
+		        = (IFacetedProjectWorkingCopy) this.model.getProperty( FACETED_PROJECT_WORKING_COPY );
+		    
+	        final Collection<IProjectFacet> fixedFacets = (Collection<IProjectFacet>) propertyValue;
+	        
+	        fpjwc.setFixedProjectFacets( new HashSet<IProjectFacet>( fixedFacets ) );
+	        
+	        final FacetDataModelMap facetDmMap = (FacetDataModelMap) getProperty( FACET_DM_MAP );
+	        
+	        for( IProjectFacet facet : fixedFacets )
+	        {
+	            final IFacetedProject.Action action = fpjwc.getProjectFacetAction( facet );
+	            Object config = action.getConfig();
+	            
+	            if( ! ( config instanceof IDataModel ) )
+	            {
+	                config = Platform.getAdapterManager().getAdapter( config, IDataModel.class );
+	            }
+	            
+	            facetDmMap.add( (IDataModel) config );
+	        }
+		}
 		return super.propertySet(propertyName, propertyValue);
 	}
 
@@ -292,7 +376,7 @@
 		if (FACET_RUNTIME.equals(propertyName)) {
 			IRuntime runtime = (IRuntime) getProperty(propertyName);
 			if (null != runtime) {
-				return new DataModelPropertyDescriptor(runtime, runtime.getName());
+				return new DataModelPropertyDescriptor(runtime, runtime.getLocalizedName());
 			}
 			return new DataModelPropertyDescriptor(null, WTPCommonPlugin.getResourceString(WTPCommonMessages.RUNTIME_NONE, null));
 		}
@@ -300,33 +384,40 @@
 	}
 
 	public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
-		if (FACET_RUNTIME.equals(propertyName)) {
-			Collection projectFacets = (Collection)getProperty(REQUIRED_FACETS_COLLECTION);
-			Set runtimes = RuntimeManager.getRuntimes();
-			ArrayList list = new ArrayList();
+		if (FACET_RUNTIME.equals(propertyName)) 
+		{
+            final IFacetedProjectWorkingCopy fpjwc 
+                = (IFacetedProjectWorkingCopy) this.model.getProperty( FACETED_PROJECT_WORKING_COPY );
+            
+            final Set<IProjectFacet> fixedFacets = fpjwc.getFixedProjectFacets();
+            final ArrayList list = new ArrayList();
 
-			for (Iterator it = runtimes.iterator(); it.hasNext();) {
-				IRuntime rt = (IRuntime) it.next();
+            for( IRuntime rt : RuntimeManager.getRuntimes() ) 
+            {
+                // add this runtime in the list only if it supports all of the required facets
 
-				// add this runtime in the list only if it supports all of the required facets
-				boolean supportsFactet = true;
-				for (Iterator facetIt = projectFacets.iterator(); facetIt.hasNext();) {
-					IProjectFacet facet = (IProjectFacet) facetIt.next();
-					if (!rt.supports(facet)) {
-						supportsFactet = false;
-						break;
-					}
-				}
-				if (supportsFactet) {
-					list.add(rt);
-				}
-			}
+                boolean supports = true;
+                
+                for( IProjectFacet facet : fixedFacets )
+                {
+                    if( ! rt.supports( facet ) )
+                    {
+                        supports = false;
+                        break;
+                    }
+                }
+                
+                if( supports ) 
+                {
+                    list.add(rt);
+                }
+            }
 
-			DataModelPropertyDescriptor[] descriptors = new DataModelPropertyDescriptor[list.size() + 1];
+            DataModelPropertyDescriptor[] descriptors = new DataModelPropertyDescriptor[list.size() + 1];
 			Iterator iterator = list.iterator();
 			for (int i = 0; i < descriptors.length - 1; i++) {
 				IRuntime runtime = (IRuntime) iterator.next();
-				descriptors[i] = new DataModelPropertyDescriptor(runtime, runtime.getName());
+				descriptors[i] = new DataModelPropertyDescriptor(runtime, runtime.getLocalizedName());
 			}
 			if(descriptors.length > 2){
 				Arrays.sort(descriptors, 0, descriptors.length - 2, new Comparator() {
@@ -344,11 +435,21 @@
 		return super.getValidPropertyDescriptors(propertyName);
 	}
 
-	public IStatus validate(String propertyName) {
-		if (FACET_PROJECT_NAME.equals(propertyName)) {
+	public IStatus validate(String propertyName) 
+	{
+		if (FACET_PROJECT_NAME.equals(propertyName)) 
+		{
 			IDataModel projModel = model.getNestedModel(NESTED_PROJECT_DM);
 			return projModel.validateProperty(IProjectCreationPropertiesNew.PROJECT_NAME);
 		}
+		else if( propertyName.equals( FACETED_PROJECT_WORKING_COPY ) )
+		{
+            final IFacetedProjectWorkingCopy fpjwc 
+                = (IFacetedProjectWorkingCopy) this.model.getProperty( FACETED_PROJECT_WORKING_COPY );
+            
+            return fpjwc.validate();
+		}
+		
 		return super.validate(propertyName);
 	}
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FlexibleProjectCreationDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FlexibleProjectCreationDataModelProvider.java
deleted file mode 100644
index 37f1403..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/FlexibleProjectCreationDataModelProvider.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 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
- *******************************************************************************/
-package org.eclipse.wst.common.componentcore.datamodel;
-
-import java.util.Set;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IFlexibleProjectCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.internal.operation.FlexibleProjectCreationOperation;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationProperties;
-import org.eclipse.wst.common.frameworks.internal.operations.ProjectCreationDataModelProvider;
-
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see FacetProjectCreationDataModelProvider
- */
-public class FlexibleProjectCreationDataModelProvider extends AbstractDataModelProvider implements IFlexibleProjectCreationDataModelProperties, DoNotUseMeThisWillBeDeletedPost15 {
-
-	public FlexibleProjectCreationDataModelProvider() {
-		super();
-
-	}
-
-	public void init() {
-		super.init();
-		initNestedProjectModel();
-	}
-
-	protected void initNestedProjectModel() {
-		IDataModel projModel = DataModelFactory.createDataModel(new ProjectCreationDataModelProvider());
-		model.addNestedModel(NESTED_MODEL_PROJECT_CREATION, projModel);
-	}
-
-	public Set getPropertyNames() {
-		Set propertyNames = super.getPropertyNames();
-		propertyNames.add(PROJECT_NAME);
-		propertyNames.add(PROJECT_LOCATION);
-		propertyNames.add(NESTED_MODEL_PROJECT_CREATION);
-		return propertyNames;
-	}
-
-	public Object getDefaultProperty(String propertyName) {
-		if (PROJECT_LOCATION.equals(propertyName)) {
-			return getDefaultLocation();
-		}
-		return super.getDefaultProperty(propertyName);
-	}
-
-	public boolean propertySet(String propertyName, Object propertyValue) {
-		boolean status = super.propertySet(propertyName, propertyValue);
-		if (PROJECT_NAME.equals(propertyName)) {
-			IDataModel projModel = model.getNestedModel(NESTED_MODEL_PROJECT_CREATION);
-			projModel.setProperty(IProjectCreationProperties.PROJECT_NAME, propertyValue);
-		} else if (PROJECT_LOCATION.equals(propertyName)) {
-			IDataModel projModel = model.getNestedModel(NESTED_MODEL_PROJECT_CREATION);
-			projModel.setProperty(IProjectCreationProperties.PROJECT_LOCATION, propertyValue);
-		}
-		return status;
-	}
-
-	public IStatus validate(String propertyName) {
-		if (PROJECT_NAME.equals(propertyName)) {
-			return validateProjectName();
-		} else if (PROJECT_LOCATION.equals(propertyName)) {
-			return validateProjectLocation();
-		}
-		return OK_STATUS;
-	}
-
-	private IStatus validateProjectName() {
-		IDataModel projModel = model.getNestedModel(NESTED_MODEL_PROJECT_CREATION);
-		return projModel.validateProperty(IProjectCreationProperties.PROJECT_NAME);
-	}
-
-	private IStatus validateProjectLocation() {
-		IDataModel projModel = model.getNestedModel(NESTED_MODEL_PROJECT_CREATION);
-		return projModel.validateProperty(IProjectCreationProperties.PROJECT_LOCATION);
-	}
-
-	private String getDefaultLocation() {
-		IPath path = getRootLocation();
-		String projectName = (String) getProperty(PROJECT_NAME);
-		if (projectName != null)
-			path = path.append(projectName);
-		return path.toOSString();
-	}
-
-	private IPath getRootLocation() {
-		return ResourcesPlugin.getWorkspace().getRoot().getLocation();
-	}
-
-	//	
-	// protected void initNestedModels() {
-	// super.initNestedModels();
-	// initProjectModel();
-	// addNestedModel(NESTED_MODEL_PROJECT_CREATION, projectDataModel);
-	//
-	// serverTargetDataModel = new J2EEProjectServerTargetDataModel();
-	// addNestedModel(NESTED_MODEL_SERVER_TARGET, serverTargetDataModel);
-	// }
-
-	// protected void initProjectModel() {
-	// projectDataModel = new ProjectCreationDataModel();
-	// }
-	//	
-	public IDataModelOperation getDefaultOperation() {
-		return new FlexibleProjectCreationOperation(model);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IComponentCreationDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IComponentCreationDataModelProperties.java
index 09fbe2f..c8dcf56 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IComponentCreationDataModelProperties.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IComponentCreationDataModelProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/ICreateReferenceComponentsDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/ICreateReferenceComponentsDataModelProperties.java
index 5030462..0dec083 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/ICreateReferenceComponentsDataModelProperties.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/ICreateReferenceComponentsDataModelProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 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
@@ -10,59 +10,55 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.datamodel.properties;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-
 public interface ICreateReferenceComponentsDataModelProperties {
 
 	/**
 	 * <p>
-	 * This required property is the {@link IVirtualComponent} which will reference the
-	 * {@link IVirtualComponent}s specified by {@link #TARGET_COMPONENT_LIST}.
+	 * This required property is the {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent} which will reference the
+	 * {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s specified by {@link #TARGET_COMPONENT_LIST}.
 	 * </p>
 	 * <p>
-	 * For example, if {@link IVirtualComponent}s A, B, and C exist and references are required
+	 * For example, if {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s A, B, and C exist and references are required
 	 * from A to B and A to C, then {@link #SOURCE_COMPONENT} should be set to A, and
-	 * {@link #TARGET_COMPONENT_LIST} should be set to a {@link List} containing B and C.
+	 * {@link #TARGET_COMPONENT_LIST} should be set to a {@link java.util.List} containing B and C.
 	 * </p>
 	 */
 	public static final String SOURCE_COMPONENT = "ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT"; //$NON-NLS-1$
 
 	/**
 	 * <p>
-	 * This required property is the {@link List} containing the {@link IVirtualComponent}s that
-	 * will be referenced from the {@link IVirtualComponent} specified by {@link #SOURCE_COMPONENT}.
+	 * This required property is the {@link java.util.List} containing the {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s that
+	 * will be referenced from the {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent} specified by {@link #SOURCE_COMPONENT}.
 	 * </p>
 	 */
 	public static final String TARGET_COMPONENT_LIST = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT"; //$NON-NLS-1$
 
-	//TODO this should be a map
 	/**
 	 * Optional, deploy path for the dependent component, default is "/"
+	 * Note: this is the default for the entire archive.  See {@link #TARGET_COMPONENTS_DEPLOY_PATH_MAP}
 	 */
 	public static final String TARGET_COMPONENTS_DEPLOY_PATH = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_DEPLOY_PATH"; //$NON-NLS-1$
 
 	/**
-	 * Optional, archive name for the dependent component, default is ""
-	 * 
-	 * @deprecated
-	 * @see DoNotUseMeThisWillBeDeletedPost15
-	 */
-	public static final String TARGET_COMPONENT_ARCHIVE_NAME = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_ARCHIVE_NAME"; //$NON-NLS-1$
-
-	/**
 	 * <p>
 	 * This optional property is the {@link Map} containing keys of {@link IVirtualComponent}s and
 	 * values of {@link String}s. This map is used to specify the String which should be used by
 	 * the {@link IVirtualComponent} specified by the {@link #SOURCE_COMPONENT} property to lookup
-	 * the keyed {@link IVirtualComponent}. The {@link Set} of {@link IVirtualComponent}s in the
+	 * the deploy path. The {@link Set} of {@link IVirtualComponent}s in the
 	 * keys of this {@link Map} should have the same contents as the {@link List}.
 	 * </p>
 	 */
+	public static final String TARGET_COMPONENTS_DEPLOY_PATH_MAP = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_DEPLOY_PATH_MAP"; //$NON-NLS-1$
+
+	/**
+	 * <p>
+	 * This optional property is the {@link java.util.Map} containing keys of {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s and
+	 * values of {@link String}s. This map is used to specify the String which should be used by
+	 * the {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent} specified by the {@link #SOURCE_COMPONENT} property to lookup
+	 * the keyed {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}. The {@link java.util.Set} of {@link org.eclipse.wst.common.componentcore.resources.IVirtualComponent}s in the
+	 * keys of this {@link java.util.Map} should have the same contents as the {@link java.util.List}.
+	 * </p>
+	 */
 	public static final String TARGET_COMPONENTS_TO_URI_MAP = "ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_TO_URI_MAP"; //$NON-NLS-1$
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetDataModelProperties.java
index 5f647cc..91c694d 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetDataModelProperties.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetDataModelProperties.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -38,4 +38,6 @@
 	public static final String FACET_ACTION = "IFacetDataModelProperties.FACET_ACTION"; //$NON-NLS-1$
 
 	public static final String SHOULD_EXECUTE = "IFacetDataModelProperties.SHOULD_EXECUTE"; //$NON-NLS-1$
+	
+	public static final String FACETED_PROJECT_WORKING_COPY = "IFacetDataModelProperties.FACETED_PROJECT_WORKING_COPY"; //$NON-NLS-1$
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetProjectCreationDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetProjectCreationDataModelProperties.java
index c92d8c6..0d76a0f 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetProjectCreationDataModelProperties.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFacetProjectCreationDataModelProperties.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -17,6 +17,9 @@
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 
 public interface IFacetProjectCreationDataModelProperties extends IDataModelProperties {
+    
+    public static final String FACETED_PROJECT_WORKING_COPY 
+        = "IFacetProjectCreationDataModelProperties.FACETED_PROJECT_WORKING_COPY"; //$NON-NLS-1$";
 
 	/**
 	 * A String
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFlexibleProjectCreationDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFlexibleProjectCreationDataModelProperties.java
deleted file mode 100644
index b101ec6..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IFlexibleProjectCreationDataModelProperties.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 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
- *******************************************************************************/
-package org.eclipse.wst.common.componentcore.datamodel.properties;
-
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationProperties;
-/**
- * <p>
- * IFlexibleProjectCreationDataModelProperties provides properties to the DataModel associated with the 
- * FlexibleProjectCreationDataModelProperties as well as all extending interfaces extending 
- * IFlexibleProjectCreationDataModelProperties specifically, but not limited to the Java releated creatoin in the 
- * JST layer. 
- * @see FlexibleJavaProjectCreationDataModelProvider
- * </p>
- * <p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * 
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider
- * @see org.eclipse.wst.common.frameworks.datamodel.DataModelFactory
- * @see org.eclipse.wst.common.frameworks.datamodel.IDataModelProperties
- * 
- * @plannedfor 1.0
- */
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see IFacetProjectCreationDataModelProperties
- */
-public interface IFlexibleProjectCreationDataModelProperties extends IProjectCreationProperties, DoNotUseMeThisWillBeDeletedPost15 {
-   
-    /**
-     * Required, type IDataModel. The user set IDataModel used to create the initial project.  Providers which currently exist for
-     * this IDataModel include IProjectCreationProperties.
-     * @see org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationProperties
-     */
-    public static final String NESTED_MODEL_PROJECT_CREATION = "IFlexibleProjectCreationDataModelProperties.NESTED_MODEL_PROJECT_CREATION"; //$NON-NLS-1$
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IServerContextRootDataModelProperties.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IServerContextRootDataModelProperties.java
new file mode 100644
index 0000000..c939138
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/datamodel/properties/IServerContextRootDataModelProperties.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.common.componentcore.datamodel.properties;
+
+import org.eclipse.wst.common.componentcore.internal.operation.ServerContextRootDataModelProvider;
+
+public interface IServerContextRootDataModelProperties {
+	/**
+	 * This field should not be used.  It is not part of the API and may be modified in the future.
+	 */
+	public static Class _provider_class = ServerContextRootDataModelProvider.class;
+
+	public static final String PROJECT = "IServerContextRootDataModelProperties.PROJECT"; //$NON-NLS-1$	
+	public static final String CONTEXT_ROOT = "IServerContextRootDataModelProperties.CONTEXT_ROOT"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java
index 199ee9e..9e38950 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ArtifactEditModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -66,6 +66,8 @@
 	public static final Class ADAPTER_TYPE = ArtifactEditModel.class;
 	private final IProject componentProject; 
 	private final IPath modulePath;
+	private URI rootURI;
+	private String rootContentType;
 	private final IVirtualComponent virtualComponent;
 	private final URI componentURI;
 
@@ -101,7 +103,16 @@
 	public ArtifactEditModel(String anEditModelId, EMFWorkbenchContext aContext, boolean toMakeReadOnly, URI aModuleURI) {
 		this(anEditModelId, aContext, toMakeReadOnly, true, aModuleURI);
 	}
-
+	
+	public ArtifactEditModel(String anEditModelId, EMFWorkbenchContext aContext, boolean toMakeReadOnly, boolean toAccessUnknownResourcesAsReadOnly, URI aModuleURI,URI rootURI,
+			String rootContentType) {
+		this(anEditModelId, aContext, toMakeReadOnly, toAccessUnknownResourcesAsReadOnly, aModuleURI);
+		this.rootURI = rootURI;
+		this.rootContentType = rootContentType;
+		
+	}
+	
+	
 	/**
 	 * 
 	 * <p>
@@ -154,6 +165,14 @@
 		processLoadedResources(componentProject);
 	}
 
+	public ArtifactEditModel(String editModelID, EMFWorkbenchContext context, boolean toMakeReadOnly, URI moduleURI, URI rootURI,
+			String rootContentType) {
+		this(editModelID, context, toMakeReadOnly, true, moduleURI);
+		this.rootURI = rootURI;
+		this.rootContentType = rootContentType;
+		
+	}
+
 	/**
 	 * <p>
 	 * Accesses resources within the underlying resource set. Takes a standard URI attaches module
@@ -168,8 +187,15 @@
 	 * @return Resource (@see Resource)
 	 */
 	public Resource getResource(URI aUri) {
-		// First check if passed URI is already normalized...
-		IPath requestPath = modulePath.append(new Path(aUri.path()));
+		IPath requestPath;
+		//If requesting rootURI, use content type describer if available
+		if (rootURI != null && rootURI.equals(aUri) && rootContentType != null) {
+			requestPath = modulePath.append(new Path(rootContentType));
+			requestPath = requestPath.append(new Path(aUri.path()));
+		}
+		else {// First check if passed URI is already normalized...
+			requestPath = modulePath.append(new Path(aUri.path()));
+		}
 		URI resourceURI = URI.createURI(PlatformURLModuleConnection.MODULE_PROTOCOL + requestPath.toString());
 		return super.getResource(resourceURI);
 	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/BinaryComponentHelper.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/BinaryComponentHelper.java
index bcade13..ea71b40 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/BinaryComponentHelper.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/BinaryComponentHelper.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
@@ -13,7 +13,6 @@
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.wst.common.componentcore.ArtifactEdit;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 
 public abstract class BinaryComponentHelper {
@@ -28,8 +27,6 @@
 		return component;
 	}
 
-	public abstract void releaseAccess(ArtifactEdit edit);
-
 	public abstract EObject getPrimaryRootObject();
 
 	public abstract Resource getResource(URI uri);
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentType.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentType.java
index c9351db..48a0703 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentType.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ComponentType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/DependencyType.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/DependencyType.java
index e44eded..09914ab 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/DependencyType.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/DependencyType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java
index b6767ba..0372d3c 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java
@@ -1,18 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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.wst.common.componentcore.internal;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.xmi.XMIResource;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResource;
 import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
-import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
+import org.eclipse.wst.common.internal.emfworkbench.edit.EMFWorkbenchEditContextFactory;
 import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectNature;
 import org.eclipse.wst.validation.internal.core.Message;
 import org.eclipse.wst.validation.internal.core.ValidationException;
@@ -31,30 +40,41 @@
 		}
 		
 		public Resource getPrimaryResource(IProject project) {
-			// Overriden to handle loading the .component resource in new and old forms
-			// First will try to load from .settings/org.eclipse.wst.common.component
-			// Second will try to load from the old location(s) .settings/.component or .component
-
-			URI uri = (URI) URI.createURI(StructureEdit.MODULE_META_FILE_NAME);
-			WTPModulesResource res = (WTPModulesResource)WorkbenchResourceHelper.getOrCreateResource(uri, getResourceSet(project));
-			if (res == null || !res.isLoaded()) {
-				uri = (URI) URI.createURI(".settings/.component");
-				res = (WTPModulesResource)WorkbenchResourceHelper.getOrCreateResource(uri, getResourceSet(project));
-				if (res == null || !res.isLoaded()) {
-					uri = (URI) URI.createURI(".wtpmodules");
-					res = (WTPModulesResource)WorkbenchResourceHelper.getOrCreateResource(uri, getResourceSet(project));
-					if (res == null || !res.isLoaded()) {
-						res = null;
+			// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=181334; Changing this method to call ModuleStructuralModel.getPrimaryResource() method instead.
+			// This does two things:
+			// 1. Reorders the locks to prevent deadlock between locking the resource (Bugzilla 181334),
+			//	  then the edit model and
+			// 2. Reuses code. (The code between this method and MSM.getPrimaryResource() is identical.
+			StructureEdit structureEdit = StructureEdit.getStructureEditForRead(project);
+			if (structureEdit != null) {
+				ModuleStructuralModel structuralModel = structureEdit.getModuleStructuralModel();
+				if (structuralModel != null) {
+					// acquiring the ModuleStructuralModel lock here first because the call to getPrimaryResource()
+					// will cause this lock to be acquired later resulting in a potential deadlock
+					ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(structuralModel.getProject());
+					try{
+						if(null != lock){
+							lock.acquire();
+						}
+						synchronized(structuralModel){
+							return structuralModel.getPrimaryResource();
+						}
+					} finally{
+						if(null != lock){
+							lock.release();
+						}
 					}
 				}
 			}
-			return res;
+			return null;
 		}
 
+/* bug197531 - standardize compiler settings
 		private ResourceSet getResourceSet(IProject proj) {
 			ModuleCoreNature nature = ModuleCoreNature.getModuleCoreNature(proj);
 			return nature.getResourceSet();
 		}
+*/
 
 		public IStatus validateInJob(IValidationContext helper, IReporter reporter)
 				throws ValidationException {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidatorHelper.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidatorHelper.java
index 2495975..1969f61 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidatorHelper.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidatorHelper.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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.wst.common.componentcore.internal;
 
 import org.eclipse.core.resources.IResource;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java
index 8f74f93..88a9078 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
@@ -38,7 +38,6 @@
 	private static HashMap managerCache = new HashMap();
 	private static HashSet migrated = new HashSet();
 	private boolean migrating;
-	private HashSet moved = new HashSet();
 	public ModuleMigratorManager() {
 		super();
 	}
@@ -74,9 +73,8 @@
 				try {
 					if (aProj.isAccessible() && ModuleCoreNature.isFlexibleProject(aProj)) {
 						if (aProj.findMember(".wtpmodules") != null) {
-							if (!moved.contains(aProj))
-								moveOldMetaDataFile(aProj);
-						} else moved.add(aProj);
+							moveOldMetaDataFile(aProj);
+						}
 						if (needsComponentMigration(aProj,multiComps))
 							migrateComponentsIfNecessary(aProj,multiComps);
 					}
@@ -119,13 +117,11 @@
 	private void moveOldMetaDataFile(IProject project) {
 
 		try {
-				if (!moved.contains(project))
-					moveMetaDataFile(project);
+				moveMetaDataFile(project);
 				IFolder depFolder = project.getFolder(".deployables");
 				if (depFolder.exists())
 					depFolder.delete(true, null);
 				project.refreshLocal(IResource.DEPTH_INFINITE, null);
-				moved.add(project);
 
 		} catch (Exception e) {
 		}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
index 4306d7c..2bdacb1 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -30,6 +30,9 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -43,7 +46,6 @@
 import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
 import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
-import org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidator;
 import org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidatorPresenter;
 import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectNature;
 /**
@@ -76,8 +78,8 @@
 */ 
 public class ModuleStructuralModel extends EditModel implements IAdaptable {
 	
-	private static final String R0_7_MODULE_META_FILE_NAME = ".component";
-	private static final String R1_MODULE_META_FILE_NAME = ".settings/.component";
+	public static final String R0_7_MODULE_META_FILE_NAME = ".component";
+	public static final String R1_MODULE_META_FILE_NAME = ".settings/.component";
 	public static final String MODULE_CORE_ID = "moduleCoreId"; //$NON-NLS-1$ 
 	private static final String PROJECT_VERSION_1_5 = "1.5.0";
 	private boolean useOldFormat = false;
@@ -96,6 +98,8 @@
 	}
 	protected boolean removeResource(Resource aResource) {
 		if (aResource != null) {
+			//First checking if resource is loaded (Which will prevent removing in middle of loading by checking resource adapter lock)
+			aResource.isLoaded();
 			synchronized (aResource) {
 				aResource.eAdapters().remove(resourceAdapter);
 				return getResources().remove(aResource);
@@ -145,23 +149,68 @@
 	 * @param wbComp
 	 */
 	public void cleanupWTPModules(WorkbenchComponent wbComp) {
-		ModuleStructuralModel model = new ModuleStructuralModel(getEditModelID(),getEmfContext(),false);
-		if (wbComp == null || model == null)
+		if (wbComp == null)
 			return;
-		try {
-			model.access(this);
-			ResourceTreeRoot root = ResourceTreeRoot.getSourceResourceTreeRoot(wbComp);
-			List rootResources = getModuleResources(root);
-			// Only if we need to do a clean, do we clear, add all required root resource mappings, and save
-			if (!(wbComp.getResources().containsAll(rootResources) && wbComp.getResources().size()==rootResources.size())) {
+		ResourceTreeRoot root = ResourceTreeRoot.getSourceResourceTreeRoot(wbComp);
+		List rootResources = getModuleResources(root);
+		// Only if we need to do a clean, do we clear, add all required root resource mappings, and save
+		if (!(wbComp.getResources().containsAll(rootResources) && wbComp.getResources().size()==rootResources.size())) {
+			final ModuleStructuralModel model = new ModuleStructuralModel(getEditModelID(),getEmfContext(),false);
+			if(model == null){
+				return;
+			}
+			boolean jobScheduled = false;
+			try {
+				final Object key = new Object();
+				model.access(key);
+				
 				wbComp.getResources().clear();
 				wbComp.getResources().addAll(rootResources);
-				model.save(this);
+				URI uri = wbComp.eResource().getURI();
+				//need to get this resource into the model
+				Resource resource = model.getResource(uri);
+				//need to manually dirty this resource in order for it to save.
+				resource.setModified(true);
+				//this job is necessary to avoid the deadlock in 
+				//https://bugs.eclipse.org/bugs/show_bug.cgi?id=181253
+				class SaveJob extends Job {
+					
+					public SaveJob() {
+						super("Save ModuleStructuralModel Job");
+					}
+					
+					protected IStatus run(IProgressMonitor monitor) {
+						try {
+							model.save(key);
+							return OK_STATUS;
+						} finally {
+							disposeOnce();
+						}
+					}
+					
+					private boolean disposedAlready = false;
+					
+					public void disposeOnce(){
+						if(!disposedAlready){
+							disposedAlready = true;
+							model.dispose();
+						}
+					}
+				};
+				final SaveJob saveJob = new SaveJob();
+				saveJob.addJobChangeListener(new JobChangeAdapter(){
+					public void done(IJobChangeEvent event) {
+						saveJob.disposeOnce();
+					}
+				});
+				saveJob.setSystem(true);
+				saveJob.schedule();
+				jobScheduled = true;
+			} finally {
+				if (!jobScheduled && model != null)
+					model.dispose();
 			}
-		} finally {
-			if (model != null)
-				model.dispose();
-		}
+		} 
 	}
     
 	/**
@@ -225,6 +274,24 @@
 			return true;
 		else return componentFile.isSynchronized(IResource.DEPTH_ZERO);
 	}
+	
+	public IFile getComponentFile() {
+		IFile compFile = getProject().getFile(StructureEdit.MODULE_META_FILE_NAME);
+		if (compFile.isAccessible())
+			return compFile;
+		else { //Need to check for legacy file locations also....
+			compFile = getProject().getFile(ModuleStructuralModel.R1_MODULE_META_FILE_NAME);
+			if (compFile.isAccessible())
+				return compFile;
+			else {
+				compFile = getProject().getFile(ModuleStructuralModel.R0_7_MODULE_META_FILE_NAME);
+				if (compFile.isAccessible())
+					return compFile;
+			}
+		}
+		return getProject().getFile(StructureEdit.MODULE_META_FILE_NAME);
+	}
+	
 	public WTPModulesResource  makeWTPModulesResource() {
 		return (WTPModulesResource) createResource(WTPModulesResourceFactory.WTP_MODULES_URI_OBJ);
 	}
@@ -236,7 +303,7 @@
 		}
 	}
 	/**
-	 * @see ResourceStateValidator#checkActivation(ResourceStateValidatorPresenter)
+	 * @see org.eclipse.wst.common.internal.emfworkbench.validateedit.ResourceStateValidator#checkActivation(ResourceStateValidatorPresenter)
 	 */
 	public void checkActivation(ResourceStateValidatorPresenter presenter) throws CoreException {
 		super.checkActivation(presenter);
@@ -252,15 +319,15 @@
 		// First will try to load from .settings/org.eclipse.wst.common.component
 		// Second will try to load from the old location(s) .settings/.component or .component
 		
-		URI uri = (URI) URI.createURI(StructureEdit.MODULE_META_FILE_NAME);
+		URI uri = URI.createURI(StructureEdit.MODULE_META_FILE_NAME);
 		WTPModulesResource res = (WTPModulesResource)getResource(uri);
 		if (res == null || !res.isLoaded()) {
 			removeResource(res);
-			uri = (URI) URI.createURI(R1_MODULE_META_FILE_NAME);
+			uri = URI.createURI(R1_MODULE_META_FILE_NAME);
 			res = (WTPModulesResource)getResource(uri);
 			if (res == null || !res.isLoaded()) {
 				removeResource(res);
-				uri = (URI) URI.createURI(R0_7_MODULE_META_FILE_NAME);
+				uri = URI.createURI(R0_7_MODULE_META_FILE_NAME);
 				res = (WTPModulesResource)getResource(uri);
 				if (res == null || !res.isLoaded()) {
 					removeResource(res);
@@ -320,4 +387,40 @@
 	public void setUseOldFormat(boolean useOldFormat) {
 		this.useOldFormat = useOldFormat;
 	}
+	
+	public void saveIfNecessary(IProgressMonitor monitor, Object accessorKey) {
+		// Always force save
+		super.save(monitor, accessorKey);
+	}
+	@Override
+	public void access(Object accessorKey) {
+		
+		super.access(accessorKey);
+//		StringBuffer buffer = new StringBuffer("Access Module model (");
+//		buffer.append(this.hashCode());
+//		buffer.append(") Project: ");
+//		buffer.append(this.getProject());
+//		if (isReadOnly())
+//			buffer.append(" R = "); //$NON-NLS-1$
+//		else
+//			buffer.append(" W = "); //$NON-NLS-1$
+//		buffer.append(getRegistry().size());
+//		System.out.println(buffer.toString());
+				
+	}
+	@Override
+	public void releaseAccess(Object accessorKey) {
+		
+		super.releaseAccess(accessorKey);
+//		StringBuffer buffer = new StringBuffer("Release Module model (");
+//		buffer.append(this.hashCode());
+//		buffer.append(") Project: ");
+//		buffer.append(this.getProject());
+//		if (isReadOnly())
+//			buffer.append(" R = "); //$NON-NLS-1$
+//		else
+//			buffer.append(" W = "); //$NON-NLS-1$
+//		buffer.append(getRegistry().size());
+//		System.out.println(buffer.toString());
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java
index 82eaa76..abb55db 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModulecorePlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
@@ -26,6 +26,8 @@
 import org.eclipse.wst.common.componentcore.internal.util.ModuleCoreEclipseAdapterFactory;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.osgi.framework.BundleContext;
+import java.lang.Throwable;
+import org.eclipse.core.runtime.CoreException;
 
 /**
  * The main plugin class to be used in the desktop.
@@ -170,4 +172,20 @@
 			Throwable exception) {
 		return createStatus(IStatus.ERROR, aCode, aMessage, exception);
 	}
+
+	public static IStatus createStatus(int severity, String message, Throwable exception) {
+		return new Status(severity, PLUGIN_ID, message, exception);
+	}
+
+	public static IStatus createStatus(int severity, String message) {
+		return createStatus(severity, message, null);
+	}
+
+	public static void logError(Throwable exception) {
+		Platform.getLog(Platform.getBundle(PLUGIN_ID)).log( createStatus(IStatus.ERROR, exception.getMessage(), exception));
+	}
+
+	public static void logError(CoreException exception) {
+		Platform.getLog(Platform.getBundle(PLUGIN_ID)).log( exception.getStatus() );
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ProjectComponents.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ProjectComponents.java
index 8e83f55..70a8a80 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ProjectComponents.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ProjectComponents.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ReferencedComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ReferencedComponent.java
index 774a705..dea5cf0 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ReferencedComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ReferencedComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
index daf6ab0..9b04b00 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -11,6 +11,7 @@
 
 package org.eclipse.wst.common.componentcore.internal;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -18,6 +19,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -26,6 +28,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.jem.util.UIContextDetermination;
@@ -42,6 +45,7 @@
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
+import org.eclipse.wst.common.internal.emfworkbench.edit.EMFWorkbenchEditContextFactory;
 import org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext;
 
 /**
@@ -433,13 +437,41 @@
 	 * to add or remove {@see WorkbenchComponent}s. If a client needs to just read the existing
 	 * {@see WorkbenchComponent}s, use {@see #getWorkbenchModules()}.
 	 * </p>
+	 * <p>
+	 * Deadlock Warning: Calling this method requires two locks.  First the component file's file lock
+	 * is required and then the EMFWorkbenchEditContextFactory's projectILock is required.  If another
+	 * thread acquires these same two locks in the opposite order, deadlock could occur.
+	 * </p>
 	 * 
 	 * @return The root object of the underlying model
 	 */
 	public ProjectComponents getComponentModelRoot() {
+		IFile file = structuralModel.getComponentFile();
+		if (!file.isSynchronized(IResource.DEPTH_ONE)) {
+			try {
+				File iofile = file.getFullPath().toFile();
+				if (iofile.exists() || file.exists())
+					file.refreshLocal(IResource.DEPTH_ONE, null);
+			} catch (CoreException ce) {
+				//ignore
+			}
+		}	
 		ProjectComponents comps = null;
-		if (!structuralModel.isDisposed())
-			comps = (ProjectComponents) structuralModel.getPrimaryRootObject();
+		ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(structuralModel.getProject());
+		try{
+			if(null != lock){
+				lock.acquire();
+			}
+			synchronized(structuralModel){
+				if (!structuralModel.isDisposed())
+					comps = (ProjectComponents) structuralModel.getPrimaryRootObject();
+			}
+		} finally{
+			if(null != lock){
+				lock.release();
+			}
+		}
+		
 		return comps;
 	}
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/WorkbenchComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/WorkbenchComponent.java
index 5095c07..e8d7586 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/WorkbenchComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/WorkbenchComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraph.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraph.java
index e811f34..74341f2 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraph.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraph.java
@@ -10,45 +10,39 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.builder;
 
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
+import java.util.Collections;
 import java.util.Set;
 
 import org.eclipse.core.resources.IProject;
 
+/**
+ * @deprecated use {@link IDependencyGraph}
+ */
 public class DependencyGraph {
-	
+
 	private static final DependencyGraph INSTANCE = new DependencyGraph();
-	
-	private final Map dependencies = new HashMap();
-	
+
 	public static DependencyGraph getInstance() {
 		return INSTANCE;
 	}
 
 	public IProject[] getReferencingComponents(IProject target) {
-		Set referencingComponents = internalGetReferencingComponents(target);
+		Set<IProject> referencingComponents = IDependencyGraph.INSTANCE.getReferencingComponents(target);
 		return (IProject[]) referencingComponents.toArray(new IProject[referencingComponents.size()]);
 	}
-	
+
 	public void addReference(IProject target, IProject referencingComponent) {
-		internalGetReferencingComponents(target).add(referencingComponent);
+		// do nothing
 	}
-	
+
 	public void removeReference(IProject target, IProject referencingComponent) {
-		internalGetReferencingComponents(target).remove(referencingComponent);
-		
+		// do nothing
 	}
-	
+
 	protected Set internalGetReferencingComponents(IProject target) {
-		Set referencingComponents = (Set) dependencies.get(target);
-		if(referencingComponents == null) 
-			dependencies.put(target, (referencingComponents = new HashSet()));
-		return referencingComponents;
+		return Collections.EMPTY_SET;
 	}
-	
+
 	public void clear() {
-		dependencies.clear();
 	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java
new file mode 100644
index 0000000..678b9bd
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java
@@ -0,0 +1,502 @@
+package org.eclipse.wst.common.componentcore.internal.builder;
+
+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.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
+import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResourceFactory;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
+
+public class DependencyGraphImpl implements IDependencyGraph {
+
+	/**
+	 * Don't read or write the graph without first obtaining the graphLock.
+	 */
+	private Object graphLock = new Object();
+
+	/**
+	 * If projects and and B both depend on C an entry in this graph would be {C ->
+	 * {A, B} }
+	 */
+	private Map<IProject, Set<IProject>> graph = null;
+	
+	private long modStamp = 0;
+
+	private Map<String, Object> referenceOptions = new HashMap<String, Object>();
+	
+	
+	/**
+	 * This is not public; only {@link IDependencyGraph#INSTANCE} should be
+	 * used.
+	 * 
+	 * @return
+	 */
+	static IDependencyGraph getInstance() {
+		if (instance == null) {
+			instance = new DependencyGraphImpl();
+			instance.initGraph();
+		}
+		return instance;
+	}
+
+	private static DependencyGraphImpl instance = null;
+
+	private DependencyGraphImpl() {
+	}
+
+	public long getModStamp() {
+		synchronized (graphLock) {
+			return modStamp;
+		}
+	}
+
+	public Set<IProject> getReferencingComponents(IProject targetProject) {
+		waitForAllUpdates(null);
+		synchronized (graphLock) {
+			Set<IProject> set = graph.get(targetProject);
+			if (set == null) {
+				return Collections.EMPTY_SET;
+			} else {
+				for (Iterator<IProject> iterator = set.iterator(); iterator.hasNext();) {
+					IProject project = iterator.next();
+					if (!project.isAccessible()) {
+						iterator.remove();
+					}
+				}
+				Set<IProject> copy = new HashSet<IProject>();
+				copy.addAll(set);
+				return copy;
+			}
+		}
+	}
+
+	private class DependencyGraphResourceChangedListener implements IResourceChangeListener, IResourceDeltaVisitor {
+		// only registered for post change events
+		public void resourceChanged(IResourceChangeEvent event) {
+			try {
+				preUpdate();
+				event.getDelta().accept(this);
+			} catch (CoreException e) {
+				ModulecorePlugin.logError(e);
+			} finally {
+				postUpdate();
+			}
+		}
+
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			IResource resource = delta.getResource();
+			switch (resource.getType()) {
+			case IResource.ROOT:
+				return true;
+			case IResource.PROJECT: {
+				int kind = delta.getKind();
+				if ((IResourceDelta.ADDED & kind) != 0) {
+					queueProjectAdded((IProject) resource);
+					return false;
+				} else if ((IResourceDelta.REMOVED & kind) != 0) {
+					queueProjectDeleted((IProject) resource);
+					return false;
+				} else if ((IResourceDelta.CHANGED & kind) != 0) {
+					int flags = delta.getFlags();
+					if ((IResourceDelta.OPEN & flags) != 0) {
+						boolean isOpen = ((IProject) resource).isOpen();
+						if (isOpen) {
+							queueProjectAdded((IProject) resource);
+						} else {
+							queueProjectDeleted((IProject) resource);
+						}
+						return false;
+					}
+					return true;
+				}
+				return false;
+			}
+			case IResource.FOLDER:
+				if (resource.getName().equals(".settings")) {
+					return true;
+				}
+				return false;
+			case IResource.FILE:
+				String name = resource.getName();
+				if (name.equals(WTPModulesResourceFactory.WTP_MODULES_SHORT_NAME)) {
+					update(resource.getProject());
+				}
+			default:
+				return false;
+			}
+		}
+	};
+
+	private DependencyGraphResourceChangedListener listener = null;
+
+	/**
+	 * The graph is built lazily once. Afterwards, the graph is updated as
+	 * necessary.
+	 */
+	private void initGraph() {
+		synchronized (graphLock) {
+			referenceOptions.put("GET_JAVA_REFS", Boolean.FALSE);
+			try {
+				preUpdate();
+				graph = new HashMap<IProject, Set<IProject>>();
+				listener = new DependencyGraphResourceChangedListener();
+				ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
+				initAll();
+			} finally {
+				postUpdate();
+			}
+		}
+	}
+	
+	private void initAll(){
+		synchronized (graphLock) {
+			try{
+				preUpdate();
+				IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+				for (IProject sourceProject : allProjects) {
+					queueProjectAdded(sourceProject);
+				}	
+			} finally{
+				postUpdate();
+			}
+			
+		}
+	}
+
+	private void removeAllReferences(IProject project) {
+		synchronized (graphLock) {
+			graph.remove(project);
+			for (Iterator<Set<IProject>> iterator = graph.values().iterator(); iterator.hasNext();) {
+				iterator.next().remove(project);
+			}
+			modStamp++;
+		}
+	}
+
+	private void removeReference(IProject sourceProject, IProject targetProject) {
+		synchronized (graphLock) {
+			Set<IProject> referencingProjects = graph.get(targetProject);
+			if (referencingProjects != null) {
+				referencingProjects.remove(sourceProject);
+			}
+			modStamp++;
+		}
+	}
+
+	private void addReference(IProject sourceProject, IProject targetProject) {
+		synchronized (graphLock) {
+			Set<IProject> referencingProjects = graph.get(targetProject);
+			if (referencingProjects == null) {
+				referencingProjects = new HashSet<IProject>();
+				graph.put(targetProject, referencingProjects);
+			}
+			referencingProjects.add(sourceProject);
+			modStamp++;
+		}
+	}
+
+	public static final Object GRAPH_UPDATE_JOB_FAMILY = new Object();
+
+	private static final int JOB_DELAY = 100;
+
+	private final GraphUpdateJob graphUpdateJob = new GraphUpdateJob();
+	private final Object jobLock = new Object();
+
+	private class GraphUpdateJob extends Job {
+
+		public GraphUpdateJob() {
+			super("Graph Update Job");
+			setSystem(true);
+			//[Bug 238685] need to lock on workspace to avoid dead lock
+			setRule(ResourcesPlugin.getWorkspace().getRoot());
+		}
+
+		public boolean belongsTo(Object family) {
+			if (family == GRAPH_UPDATE_JOB_FAMILY) {
+				return true;
+			}
+			return super.belongsTo(family);
+		}
+
+		// We use the listener list as a thread safe queue.
+		private class Queue extends ListenerList {
+			public synchronized Object[] getListeners() {
+				Object[] data = super.getListeners();
+				clear();
+				return data;
+			}
+
+			public synchronized boolean isEmpty() {
+				return super.isEmpty();
+			}
+		};
+
+		private Queue projectsAdded = new Queue();
+
+		private Queue projectsRemoved = new Queue();
+
+		private Queue projectsUpdated = new Queue();
+
+		public void queueProjectAdded(IProject project) {
+			synchronized (graphLock) {
+				modStamp++;
+			}
+			projectsAdded.add(project);
+		}
+
+		public void queueProjectDeleted(IProject project) {
+			synchronized (graphLock) {
+				modStamp++;
+			}
+			projectsRemoved.add(project);
+		}
+
+		public void queueProjectUpdated(IProject project) {
+			synchronized (graphLock) {
+				modStamp++;
+			}
+			projectsUpdated.add(project);
+		}
+
+		@Override
+		public boolean shouldSchedule() {
+			boolean isEmpty = projectsAdded.isEmpty() && projectsRemoved.isEmpty() && projectsUpdated.isEmpty();
+			return !isEmpty;
+		}
+
+		protected IStatus run(IProgressMonitor monitor) {
+			final Object[] removed = projectsRemoved.getListeners();
+			final Object[] updated = projectsUpdated.getListeners();
+			final Object[] added = projectsAdded.getListeners();
+			if (removed.length == 0 && updated.length == 0 && added.length == 0) {
+				return Status.OK_STATUS;
+			}
+			synchronized (graphLock) {
+				modStamp++;
+			}
+			SafeRunner.run(new ISafeRunnable() {
+				public void handleException(Throwable e) {
+					ModulecorePlugin.logError(e);
+				}
+
+				public void run() throws Exception {
+					// this is the simple case; just remove them all
+					synchronized (graphLock) {
+						for (Object o : removed) {
+							IProject project = (IProject) o;
+							removeAllReferences(project);
+						}
+					}
+					// get the updated queue in case there are any adds
+					// if there are any added projects, then unfortunately the
+					// entire workspace needs to be processed
+					if (added.length > 0) {
+						IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+						for (IProject sourceProject : allProjects) {
+							IVirtualComponent component = ComponentCore.createComponent(sourceProject);
+							if (component != null) {
+								IVirtualReference[] references = null;
+								if(referenceOptions != null && component instanceof VirtualComponent) {
+									references = ((VirtualComponent)component).getReferences(referenceOptions);
+								} else {
+									references = component.getReferences();
+								}
+								for (IVirtualReference ref : references) {
+									IVirtualComponent targetComponent = ref.getReferencedComponent();
+									if (targetComponent != null) {
+										IProject targetProject = targetComponent.getProject();
+										if (targetProject != null && !targetProject.equals(sourceProject)) {
+											addReference(sourceProject, targetProject);
+										}
+									}
+								}
+							}
+						}
+					} else if (updated.length > 0) {
+						IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+						Set<IProject> validRefs = new HashSet<IProject>();
+						for (Object o : updated) {
+							IProject sourceProject = (IProject) o;
+							IVirtualComponent component = ComponentCore.createComponent(sourceProject);
+							if (component != null) {
+								validRefs.clear();
+								IVirtualReference[] references = null;
+								if(referenceOptions != null && component instanceof VirtualComponent) {
+									references = ((VirtualComponent)component).getReferences(referenceOptions);
+								} else {
+									references = component.getReferences();
+								}
+								for (IVirtualReference ref : references) {
+									IVirtualComponent targetComponent = ref.getReferencedComponent();
+									if (targetComponent != null) {
+										IProject targetProject = targetComponent.getProject();
+										if (targetProject != null && !targetProject.equals(sourceProject)) {
+											validRefs.add(targetProject);
+										}
+									}
+								}
+								synchronized (graphLock) {
+									for (IProject targetProject : allProjects) {
+										// if the reference was identified
+										// above, be sure to add it
+										// otherwise, remove it
+										if (validRefs.remove(targetProject)) {
+											addReference(sourceProject, targetProject);
+										} else {
+											removeReference(sourceProject, targetProject);
+										}
+									}
+								}
+							} else {
+								// if this project is not a component, then it
+								// should be completely removed.
+								removeAllReferences(sourceProject);
+							}
+						}
+					}
+					boolean scheduleUpdate = false;
+					synchronized (graphLock) {
+						if(referenceOptions != null){
+							scheduleUpdate = true;
+							referenceOptions = null;
+						}
+					}
+					if(scheduleUpdate){
+						initAll();
+					}
+					
+				}
+			});
+			// System.err.println(IDependencyGraph.INSTANCE);
+			return Status.OK_STATUS;
+		}
+	};
+
+	/**
+	 * @deprecated use {@link #update(IProject, int)}
+	 */
+	public void queueProjectAdded(IProject project) {
+		update(project, IDependencyGraph.ADDED);
+	}
+
+	/**
+	 * @deprecated use {@link #update(IProject, int)}
+	 */
+	public void queueProjectDeleted(IProject project) {
+		update(project, IDependencyGraph.REMOVED);
+	}
+
+	/**
+	 * @deprecated use {@link #update(IProject, int)}
+	 */
+	public void update(IProject project) {
+		update(project, IDependencyGraph.MODIFIED);
+	}
+
+	public void update(IProject project, final int updateType){
+		switch(updateType){
+		case IDependencyGraph.MODIFIED:
+			graphUpdateJob.queueProjectUpdated(project);
+			break;
+		case IDependencyGraph.ADDED:
+			graphUpdateJob.queueProjectAdded(project);
+			break;
+		case IDependencyGraph.REMOVED:
+			graphUpdateJob.queueProjectDeleted(project);
+			break;
+		}
+		synchronized (jobLock) {
+			if (pauseCount > 0) {
+				return;
+			}
+		}
+		graphUpdateJob.schedule(JOB_DELAY);
+	}
+	
+	
+	
+	private int pauseCount = 0;
+
+	/**
+	 * Pauses updates; any caller of this method must ensure through a
+	 * try/finally block that resumeUpdates is subsequently called.
+	 */
+	public void preUpdate() {
+		synchronized (jobLock) {
+			pauseCount++;
+		}
+	}
+
+	public void postUpdate() {
+		synchronized (jobLock) {
+			if (pauseCount > 0) {
+				pauseCount--;
+			}
+			if (pauseCount > 0) {
+				return;
+			}
+		}
+		graphUpdateJob.schedule(JOB_DELAY);
+	}
+
+	/**
+	 * Blocks until the graph is finished updating
+	 */
+	public void waitForAllUpdates(IProgressMonitor monitor) {
+		Thread graphUpdateThread = graphUpdateJob.getThread();
+		if(graphUpdateThread != null && graphUpdateThread != Thread.currentThread()) {
+			try {
+				graphUpdateJob.join();
+			} catch (InterruptedException e) {
+				ModulecorePlugin.logError(e);
+			}
+		}
+			
+		if(graphUpdateJob.shouldSchedule()){
+			graphUpdateJob.run(monitor);
+		}
+	}
+
+	public String toString() {
+		synchronized (graphLock) {
+			StringBuffer buff = new StringBuffer("Dependency Graph:\n{\n");
+			for (Iterator<Map.Entry<IProject, Set<IProject>>> iterator = graph.entrySet().iterator(); iterator.hasNext();) {
+				Map.Entry<IProject, Set<IProject>> entry = iterator.next();
+				buff.append("  " + entry.getKey().getName() + " -> {");
+				for (Iterator<IProject> mappedProjects = entry.getValue().iterator(); mappedProjects.hasNext();) {
+					buff.append(mappedProjects.next().getName());
+					if (mappedProjects.hasNext()) {
+						buff.append(", ");
+					}
+				}
+				buff.append("}\n");
+			}
+			buff.append("}");
+			return buff.toString();
+		}
+
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java
index 00447e2..0b275c8 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 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
@@ -10,235 +10,46 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.builder;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
-import org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities;
-import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
-import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
-import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 
+/**
+ * @deprecated use {@link IDependencyGraph}
+ */
 public class DependencyGraphManager {
-	
-	private class DependencyReference {
-		
-		public IProject componentProject;
-		public IProject targetProject;
-		
-		public DependencyReference(IProject target, IProject component) {
-			super();
-			componentProject=component;
-			targetProject=target;
-		}
-	}
 
 	private static DependencyGraphManager INSTANCE = null;
-	private static final String MANIFEST_URI = "META-INF/MANIFEST.MF";
-	private HashMap wtpModuleTimeStamps = null;
-	private HashMap manifestTimeStamps = null;
-	
+
 	private DependencyGraphManager() {
 		super();
 	}
-	
+
 	public synchronized static final DependencyGraphManager getInstance() {
 		if (INSTANCE == null)
 			INSTANCE = new DependencyGraphManager();
 		return INSTANCE;
 	}
-	
+
 	public void construct(IProject project) {
-		if (project!=null && project.isAccessible() && project.findMember(IModuleConstants.COMPONENT_FILE_PATH) !=null) //$NON-NLS-1$
-			constructIfNecessary();
-	}
-	
-	private void constructIfNecessary() {
-		if (moduleTimeStampsChanged() || manifestTimeStampsChanged()) 
-			buildDependencyGraph();
-	}
-	
-	private boolean manifestTimeStampsChanged() {
-		HashMap workspaceTimeStamps = collectManifestTimeStamps();
-		if (timestampsMatch(getManifestTimeStamps(),workspaceTimeStamps))
-			return false;
-		return true;
-	}
-
-	private HashMap getManifestTimeStamps() {
-		if (manifestTimeStamps == null)
-			manifestTimeStamps = new HashMap();
-		return manifestTimeStamps;
-	}
-
-	private HashMap collectManifestTimeStamps() {
-		HashMap timeStamps = new HashMap();
-		IProject[] projects = ProjectUtilities.getAllProjects();
-		for (int i=0; i<projects.length; i++) {
-			IFile manifestFile = null;
-			if (projects[i]==null || !projects[i].isAccessible())
-				continue;
-			manifestFile = getTimeStampFile(projects[i]);
-			if (manifestFile != null && manifestFile.exists() && ComponentCore.createComponent(projects[i]) != null) {
-				Long currentTimeStamp = new Long(manifestFile.getModificationStamp());
-				timeStamps.put(projects[i],currentTimeStamp);
-			}
-		}
-		return timeStamps;
-	}
-	
-	/**
-	 * This returns the file used for time stamp purposes.  Typically this will be the manifest file.
-	 * @param p
-	 * @return
-	 */
-	private IFile getTimeStampFile(IProject p) {
-		IVirtualComponent component = ComponentCore.createComponent(p);
-		if(null == component){
-			return null;
-		}
-		if(component.isBinary()){
-			return ((VirtualArchiveComponent)component).getUnderlyingWorkbenchFile();
-		} else {
-			try {
-				IFile file = ComponentUtilities.findFile(component, new Path(MANIFEST_URI));
-				if (file != null)
-					return file;
-			} catch (CoreException ce) {
-				Logger.getLogger().log(ce);
-			}
-		}
-		return null;
-	}
-
-	private boolean moduleTimeStampsChanged() {
-		HashMap workspaceTimeStamps = collectModuleTimeStamps();
-		if (timestampsMatch(getWtpModuleTimeStamps(),workspaceTimeStamps))
-			return false;
-		return true;
-	}
-
-	private boolean timestampsMatch(HashMap savedTimeStamps, HashMap workspaceTimeStamps) {
-		return savedTimeStamps.equals(workspaceTimeStamps);
-		
-	}
-	
-	private HashMap collectModuleTimeStamps() {
-		HashMap timeStamps = new HashMap();
-		IProject[] projects = ProjectUtilities.getAllProjects();
-		for (int i=0; i<projects.length; i++) {
-			if (projects[i]==null || !projects[i].isAccessible())
-				continue;
-			IResource wtpModulesFile = projects[i].findMember(IModuleConstants.COMPONENT_FILE_PATH); //$NON-NLS-1$
-			if (wtpModulesFile != null && wtpModulesFile.exists() && ComponentCore.createComponent(projects[i]) != null) {
-				Long currentTimeStamp = new Long(wtpModulesFile.getModificationStamp());
-				timeStamps.put(projects[i],currentTimeStamp);
-			}
-		}
-		return timeStamps;
-	}
-	
-	private void buildDependencyGraph() {
-		// Process and collect dependency references to add
-		List referencesToAdd = new ArrayList();
-		List componentProjects = new ArrayList();
-		IProject[] projects = ProjectUtilities.getAllProjects();
-		
-		for (int k=0; k<projects.length; k++) {
-			if (!projects[k].isAccessible() || projects[k].findMember(IModuleConstants.COMPONENT_FILE_PATH)==null) 
-				continue;
-			IVirtualComponent component= ComponentCore.createComponent(projects[k]);
-			if (component == null) continue;
-			referencesToAdd.addAll(getDependencyReferences(component));
-			componentProjects.add(projects[k]);
-		}
-		
-		//Update the actual graph/timestamps and block other threads here
-		synchronized (this) {
-			cleanDependencyGraph();
-			for (Iterator iter = componentProjects.iterator(); iter.hasNext();) {
-				IProject proj = (IProject) iter.next();
-				//For All projects (regardless if involved in references), update timestamps
-				addTimeStamp(proj);
-			}
-			for (int i=0; i<referencesToAdd.size(); i++) {
-				DependencyReference ref = (DependencyReference) referencesToAdd.get(i);
-				if (ref.targetProject == null || ref.componentProject == null || ref.targetProject.equals(ref.componentProject))
-					continue;
-				DependencyGraph.getInstance().addReference(ref.targetProject,ref.componentProject);
-			}
-		}
-	}
-	
-	private List getDependencyReferences(IVirtualComponent component) {
-		List refs = new ArrayList();
-		IProject componentProject = component.getProject();
-		IVirtualReference[] depRefs = component.getReferences();
-		for(int i = 0; i<depRefs.length; i++){
-			IVirtualComponent targetComponent = depRefs[i].getReferencedComponent();
-			if (targetComponent!=null) {
-				IProject targetProject = targetComponent.getProject();
-				refs.add(new DependencyReference(targetProject,componentProject));
-			}	
-		}
-		return refs;
-	}
-	
-	private boolean addTimeStamp(IProject project) {
-		// Get the .component file for the given project
-		IResource wtpModulesFile = project.findMember(IModuleConstants.COMPONENT_FILE_PATH);
-		if (wtpModulesFile==null)
-			return false;
-		Long currentTimeStamp = new Long(wtpModulesFile.getModificationStamp());
-		getWtpModuleTimeStamps().put(project,currentTimeStamp);
-		//		 Get the MANIFEST file for the given project
-		IResource manifestFile = getTimeStampFile(project);
-
-		if (manifestFile==null)
-			return false;
-		currentTimeStamp = new Long(manifestFile.getModificationStamp());
-		getManifestTimeStamps().put(project,currentTimeStamp);
-		return true;
-	}
-	
-	private void cleanDependencyGraph() {
-		DependencyGraph.getInstance().clear();
-		getWtpModuleTimeStamps().clear();
-		getManifestTimeStamps().clear();
+		// do nothing
 	}
 
 	/**
-	 * Lazy initialization and return of the key valued pair of projects and wtp modules file
-	 * timestamps.
-	 * 
-	 * @return HashMap of projects to .component file stamps
-	 */
-	private HashMap getWtpModuleTimeStamps() {
-		if (wtpModuleTimeStamps == null)
-			wtpModuleTimeStamps = new HashMap();
-		return wtpModuleTimeStamps;
-	}
-	
-	/**
-	 * Return the dependency graph which was initialized if need be in the 
+	 * Return the dependency graph which was initialized if need be in the
 	 * singleton manager method.
-	 */ 
+	 */
 	public DependencyGraph getDependencyGraph() {
-		constructIfNecessary();
 		return DependencyGraph.getInstance();
 	}
-	
+
 	public void forceRefresh() {
-		buildDependencyGraph();
+		// do nothing
+	}
+
+	public long getModStamp() {
+		return IDependencyGraph.INSTANCE.getModStamp();
+	}
+
+	public boolean checkIfStillValid(long timeStamp) {
+		return IDependencyGraph.INSTANCE.getModStamp() == timeStamp;
 	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/IDependencyGraph.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/IDependencyGraph.java
new file mode 100644
index 0000000..aa4f58c
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/IDependencyGraph.java
@@ -0,0 +1,132 @@
+package org.eclipse.wst.common.componentcore.internal.builder;
+
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+
+/**
+ * This graph provides a backward mapping of project component dependencies. It
+ * provides a project limited inverse of
+ * {@link IVirtualComponent#getReferences()}.
+ * 
+ * For example:
+ * <ul>
+ * <li>if the IVirtualComponent for project A has a dependency on the
+ * IVirtualComponent for project B, then calling
+ * {@link #getReferencingComponents(IProject)} on project B will return project
+ * A. </li>
+ * <li>if the IVirtualComponent for project A has a dependency on on the
+ * IVirtualComponent for a jar in project B, then calling
+ * {@link #getReferencingComponents(IProject)} for project B will return project
+ * A. This is true even if project B is not defined as an IVirtualComponent.
+ * </li>
+ * </ul>
+ * 
+ * Any call to {@link #getReferencingComponents(IProject)} is always expected to
+ * be up to date. The only case where a client may need to force an update is if
+ * that client is also defining dynamic IVirtualComponent dependencies, i.e. the
+ * client is using the org.eclipse.wst.common.modulecore.componentimpl extension
+ * point. Only in this case should a client be calling any of
+ * {@link #preUpdate()}, {@link #postUpdate()}, or {@link #update(IProject)}
+ * 
+ */
+public interface IDependencyGraph {
+
+	/**
+	 * Flag used by {@link #update(IProject, int)} to specify that something has
+	 * modified in a project which has changed the component dependencies.
+	 */
+	public static final int MODIFIED = 0;
+
+	/**
+	 * Flag used by {@link #update(IProject, int)} to specify a project has been
+	 * added or opened. This flag should be used as sparingly as possible
+	 * because there are performance implications.
+	 */
+	public static final int ADDED = 1;
+
+	/**
+	 * Flag used by {@link #update(IProject, int)} to specify a project has been
+	 * removed or closed.
+	 */
+	public static final int REMOVED = 2;
+
+	/**
+	 * The static instance of this graph
+	 */
+	public static IDependencyGraph INSTANCE = DependencyGraphImpl.getInstance();
+
+	/**
+	 * Returns the set of component projects referencing the specified target
+	 * project.
+	 * 
+	 * @param targetProject
+	 * @return
+	 */
+	public Set<IProject> getReferencingComponents(IProject targetProject);
+
+	/**
+	 * Returns a modification stamp. This modification stamp will be different
+	 * if the project dependencies ever change.
+	 */
+	public long getModStamp();
+
+	/**
+	 * WARNING: this should only be called by implementors of the
+	 * org.eclipse.wst.common.modulecore.componentimpl extension point.
+	 * 
+	 * This method is part of the update API.
+	 * 
+	 * @see {@link #update(IProject)}
+	 */
+	public void preUpdate();
+
+	/**
+	 * WARNING: this should only be called by implementors of the
+	 * org.eclipse.wst.common.modulecore.componentimpl extension point.
+	 * 
+	 * This method is part of the update API.
+	 * 
+	 * @see {@link #update(IProject)}
+	 */
+	public void postUpdate();
+
+	/**
+	 * @deprecated use {@link #update(IProject, int) using the #MODIFIED flag.
+	 */
+	public void update(IProject sourceProject);
+
+	/**
+	 * WARNING: this should only be called by implementors of the
+	 * org.eclipse.wst.common.modulecore.componentimpl extension point.
+	 * 
+	 * This method must be called when a resource change is detected which will
+	 * affect how dependencies behave. For example, the core IVirtualComponent
+	 * framework updates when changes are made to the
+	 * .settings/org.eclipse.wst.common.component file changes, and also when
+	 * IProjects are added or removed from the workspace. In the case for J2EE,
+	 * this occurs when changes are made to the META-INF/MANIFEST.MF file. In
+	 * general a call to update should only be made from a fast
+	 * {@link IResourceDeltaVisitor}.
+	 * 
+	 * In order to improve efficiency and avoid unnecessary update processing,
+	 * it is necessary to always proceed calls to update() with a call to
+	 * preUpdate() and follow with a call to postUpdate() using a try finally
+	 * block as follows: <code>
+	 * try {
+	 *     preUpdate();
+	 *     // perform 0 or more update() calls here
+	 * } finally {
+	 *     IDependencyGraph.INSTANCE.postUpdate();
+	 * }    
+	 * </code>
+	 * 
+	 * Valid updateType flags are {@link #MODIFIED}, {@link #ADDED}, and
+	 * {@link #REMOVED}
+	 * 
+	 */
+	public void update(IProject sourceProject, int updateType);
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ArtifactEditModelFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ArtifactEditModelFactory.java
index aad88e4..17c57ea 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ArtifactEditModelFactory.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ArtifactEditModelFactory.java
@@ -29,15 +29,21 @@
 	
 	public static final String PARAM_MODULE_URI = "MODULE_URI"; //$NON-NLS-1$
 	
+	public static final String PARAM_ROOT_URI = "ROOT_URI"; //$NON-NLS-1$
+	
+	public static final String PARAM_ROOT_CONTENT_TYPE = "ROOT_CONTENT_TYPE"; //$NON-NLS-1$
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForRead(java.lang.String, org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext, java.util.Map)
 	 */
 	public EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context, Map params) {
 		URI moduleURI = (URI) ((params != null) ? params.get(PARAM_MODULE_URI) : null);
+		URI rootURI = (URI) ((params != null) ? params.get(PARAM_ROOT_URI) : null);
+		String rootContentType = (String) ((params != null) ? params.get(PARAM_ROOT_CONTENT_TYPE) : null);
 		if(moduleURI == null)
 			throw new IllegalStateException("A Module URI must be provided");
 		
-		return  new ArtifactEditModel(editModelID, context, true, moduleURI);
+		return  new ArtifactEditModel(editModelID, context, true, moduleURI, rootURI, rootContentType);
 	}
 	
 	/* (non-Javadoc)
@@ -45,9 +51,11 @@
 	 */
 	public EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context, Map params) {
 		URI moduleURI = (URI) ((params != null) ? params.get(PARAM_MODULE_URI) : null);
+		URI rootURI = (URI) ((params != null) ? params.get(PARAM_ROOT_URI) : null);
+		String rootContentType = (String) ((params != null) ? params.get(PARAM_ROOT_CONTENT_TYPE) : null);
 		if(moduleURI == null)
 			throw new IllegalStateException("A Module URI must be provided");
-		return  new ArtifactEditModel(editModelID, context, false,false, moduleURI);
+		return  new ArtifactEditModel(editModelID, context, false, moduleURI, rootURI, rootContentType);
 	}
 	
 	/* (non-Javadoc)
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentCoreURIConverter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentCoreURIConverter.java
index 217de91..a2722b6 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentCoreURIConverter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ComponentCoreURIConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -11,20 +11,21 @@
 package org.eclipse.wst.common.componentcore.internal.impl;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.impl.URIMappingRegistryImpl;
 import org.eclipse.jem.util.emf.workbench.ResourceSetWorkbenchSynchronizer;
 import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
 import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
@@ -39,7 +40,7 @@
 public class ComponentCoreURIConverter extends CompatibilityWorkbenchURIConverterImpl {
 	
 	private IProject containingProject;
-	private IFolder archiveRoot;
+//	private IFolder archiveRoot;
 	/**
 	 *  
 	 */
@@ -96,7 +97,7 @@
 	private URI newPlatformURI(URI aNewURI) {
 		
 		try {
-			String componentName = StructureEdit.getDeployedName(aNewURI);
+//			String componentName = StructureEdit.getDeployedName(aNewURI);
 			IVirtualComponent component = ComponentCore.createComponent(containingProject);
 
 			URI deployPathSegment = ModuleURIUtil.trimToDeployPathSegment(aNewURI);
@@ -122,11 +123,17 @@
 			
 			if (aFile != null) {
 				IVirtualComponent component = ComponentCore.createComponent(getContainingProject());
+				
 				if (component != null) {
 					IProject fileProject = getContainingProject();
-					//If it is not in the same project then just return the URI as is.
-					if (resourceSetSynchronizer.getProject() == fileProject)
-						return getArchiveRelativeURI(aFile,component.getRootFolder().getUnderlyingFolder());
+					
+					if (resourceSetSynchronizer.getProject() == fileProject){
+						List list = Arrays.asList(component.getRootFolder().getUnderlyingFolders());
+						IPath path = WorkbenchResourceHelperBase.getPathFromContainers(list, aFile.getFullPath());
+						if (path != null)
+							return URI.createURI(path.toString());
+						return null;
+					}
 				} else
 					return super.deNormalize(uri);
 			}
@@ -148,9 +155,41 @@
 	}
 
 	
+	
 	protected IProject getContainingProject() {
 		return containingProject;
 	}
 
+	@Override
+	protected URIMap getInternalURIMap() {
+
+	    if (uriMap == null)
+	    {
+	      URIMappingRegistryImpl mappingRegistryImpl = 
+	        new URIMappingRegistryImpl()
+	        {
+	          private static final long serialVersionUID = 1L;
+
+	          @Override
+	          protected URI delegatedGetURI(URI uri)
+	          {
+	        	if (ModuleURIUtil.hasContentTypeName(uri))
+	        		return newPlatformURI(uri);
+	            return URIMappingRegistryImpl.INSTANCE.getURI(uri);
+	          }
+	        };
+
+	      uriMap = (URIMap)mappingRegistryImpl.map();
+	    }
+
+	    URIMap uriConverterImplURIMap = null;
+	    if (uriMap instanceof URIMap)
+	    {
+	    	uriConverterImplURIMap = (URIMap)uriMap;
+	    }
+	    return uriConverterImplURIMap;
+	  
+	}
+
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/IResourceFactoryExtPtConstants.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/IResourceFactoryExtPtConstants.java
index 8d63f9c..c6e1e45 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/IResourceFactoryExtPtConstants.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/IResourceFactoryExtPtConstants.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2004 IBM Corporation and others.
+ * Copyright (c) 2003, 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.wst.common.componentcore.internal.impl;
 
 public interface IResourceFactoryExtPtConstants {
@@ -20,6 +20,14 @@
 	String ATT_CLASS = "class"; //$NON-NLS-1$
 	
 	String ATT_SHORT_SEGMENT = "shortSegment"; //$NON-NLS-1$ 
+	
+	String TAG_CONTENTTYPE = "contentTypeBinding"; //$NON-NLS-1$ 
+	
+	String ATT_CONTENTTYPEID = "contentTypeId"; //$NON-NLS-1$ 
+	
+	String ATT_ISDEFAULT = "isDefault"; //$NON-NLS-1$ 
+	
+	String ATT_OVERRIDES_FACTORY ="overridesFactoryClass"; //$NON-NLS-1$ 
 		
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java
index 71b0576..170c513 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -12,7 +12,9 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
 import org.eclipse.wst.common.componentcore.UnresolveableURIException;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
@@ -34,6 +36,7 @@
 		public static final int SUB_PROTOCOL_INDX = 0;
 		public static final int PROJECT_NAME_INDX = 1;
 		public static final int MODULE_NAME_INDX = 2;
+		public static final int CONTENT_TYPE_INDX = 3;
 	}
 
 
@@ -70,6 +73,12 @@
 		}
 		return true;
 	}
+	public static boolean isValidFullyQualifiedModuleURI(URI aModuleURI) {
+		if (aModuleURI.segmentCount() < 3) {
+			return false;
+		}
+		return true;
+	}
 
 	public static boolean ensureValidFullyQualifiedPlatformURI(URI aFullyQualifiedResourceURI, boolean toThrowExceptionIfNecessary) throws UnresolveableURIException {
 		if (aFullyQualifiedResourceURI.segmentCount() < 2 || !PLATFORM_SCHEME.equals(aFullyQualifiedResourceURI.scheme()) || !RESOURCE_PROTOCOL.equals(aFullyQualifiedResourceURI.segment(0))) {
@@ -86,7 +95,8 @@
 
 	public static URI trimModuleResourcePathToModuleURI(URI aModuleResourcePath) throws UnresolveableURIException {
 		ensureValidFullyQualifiedModuleURI(aModuleResourcePath);
-		return aModuleResourcePath.trimSegments(aModuleResourcePath.segmentCount() - 3);
+		int trimIndex = (hasContentTypeName(aModuleResourcePath) ? 4 : 3);
+		return aModuleResourcePath.trimSegments(aModuleResourcePath.segmentCount() - trimIndex);
 	}
 
 	public static URI trimWorkspacePathToProjectRelativeURI(URI aFullyQualifiedResourceURI) throws UnresolveableURIException {
@@ -129,8 +139,9 @@
 	public static URI trimToDeployPathSegment(URI aFullyQualifiedModuleResourcePath) {
 		int segmentCount = aFullyQualifiedModuleResourcePath.segmentCount();
 		URI uri;
-		if(segmentCount > 4){
-			uri = aFullyQualifiedModuleResourcePath.deresolve(aFullyQualifiedModuleResourcePath.trimSegments(segmentCount - 4));
+		int trimIndex = (hasContentTypeName(aFullyQualifiedModuleResourcePath) ? 5 : 4);
+		if(segmentCount > trimIndex){
+			uri = aFullyQualifiedModuleResourcePath.deresolve(aFullyQualifiedModuleResourcePath.trimSegments(segmentCount - trimIndex), false,false,true);
 		} else {
 			uri = URI.createURI(aFullyQualifiedModuleResourcePath.segment(segmentCount-1));
 		}
@@ -160,6 +171,9 @@
 	public static URI fullyQualifyURI(IProject aProject) {
 		return URI.createURI(RESOURCE_URI_PROTOCOL + aProject.getName() + IPath.SEPARATOR + aProject.getName());
 	}
+	public static URI fullyQualifyURI(IProject aProject, String contentTypeDescriber) {
+		return URI.createURI(RESOURCE_URI_PROTOCOL + aProject.getName() + IPath.SEPARATOR + aProject.getName() + IPath.SEPARATOR + contentTypeDescriber);
+	}
 
 	public static URI archiveComponentfullyQualifyURI(String aComponentName) {
 		return URI.createURI(ARCHIVE_URI_PROTOCOL + aComponentName);
@@ -188,4 +202,25 @@
 		else
 			return "[" + aComponent.getProject().getFullPath() + "]:" + aComponent.getProject().getName();
 	}
+
+	public static String getContentTypeName(URI uri) {
+		
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri) || !isValidFullyQualifiedModuleURI(uri))
+			return null;
+		String contentTypeIdentifier = (uri.segmentCount() > 3 ? uri.segment(ModuleURI.CONTENT_TYPE_INDX) : null);
+		if (contentTypeIdentifier != null && Platform.getContentTypeManager().getContentType(uri.segment(ModuleURI.CONTENT_TYPE_INDX)) != null)
+			return contentTypeIdentifier;
+		else
+			return null;
+	}
+	public static boolean hasContentTypeName(URI uri) {
+		
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri))
+			return false;
+		String contentTypeIdentifier = (uri.segmentCount() > 3 ? uri.segment(ModuleURI.CONTENT_TYPE_INDX) : null);
+		if (contentTypeIdentifier != null && Platform.getContentTypeManager().getContentType(uri.segment(ModuleURI.CONTENT_TYPE_INDX)) != null)
+			return true;
+		else
+			return false;
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java
index 9b95e51..6033687 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 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
@@ -27,7 +27,6 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.UnresolveableURIException;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
@@ -57,25 +56,27 @@
 	public static URI resolve(URI aModuleResourceRuntimePath) throws IOException {
 		try {
 			IProject componentProject = StructureEdit.getContainingProject(aModuleResourceRuntimePath);
-			String componentName = ModuleURIUtil.getDeployedName(aModuleResourceRuntimePath);
+			//String componentName = ModuleURIUtil.getDeployedName(aModuleResourceRuntimePath);
 			URI runtimeURI = ModuleURIUtil.trimToDeployPathSegment(aModuleResourceRuntimePath);
 			IPath runtimePath = new Path(runtimeURI.path());
 			IVirtualComponent component = ComponentCore.createComponent(componentProject);
 			//IVirtualFile vFile = component.getFile(runtimePath);
 			IVirtualFolder rootFolder = component.getRootFolder();
+			int matchingSegs = runtimePath.matchingFirstSegments(rootFolder.getProjectRelativePath());
+			if(matchingSegs > 0)
+				runtimePath = runtimePath.removeFirstSegments(matchingSegs);
 			IVirtualFile vFile = rootFolder.getFile(runtimePath);
 			return URI.createPlatformResourceURI(vFile.getWorkspaceRelativePath().toString());
-		} catch (UnresolveableURIException e) {
+		} catch (Exception e) {
 		}
 		return aModuleResourceRuntimePath;
 		 
 	}
 
-	private static URI normalizeToWorkspaceRelative(IProject project, IPath sourcePath, URI moduleResourceDeployPath) throws UnresolveableURIException {
-		String projectName = project.getName();
-		return URI.createURI(projectName + '/' + sourcePath.toString());
-	
-	}
+//	private static URI normalizeToWorkspaceRelative(IProject project, IPath sourcePath, URI moduleResourceDeployPath) throws UnresolveableURIException {
+//		String projectName = project.getName();
+//		return URI.createURI(projectName + '/' + sourcePath.toString());
+//	}
 
 	/*
 	 * (non-Javadoc)
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ReferencedComponentImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ReferencedComponentImpl.java
index 9f97403..f17b3dc 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ReferencedComponentImpl.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ReferencedComponentImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ReferencedComponentImpl.java,v 1.3 2006/03/27 21:49:41 vbhadrir Exp $
+ * $Id: ReferencedComponentImpl.java,v 1.4 2007/02/14 16:00:52 jsholl Exp $
  */
 package org.eclipse.wst.common.componentcore.internal.impl;
 
@@ -217,7 +217,7 @@
 	public EObject getDependentObject() {
 		if (dependentObject != null && dependentObject.eIsProxy()) {
 			EObject oldDependentObject = dependentObject;
-			dependentObject = (EObject)eResolveProxy((InternalEObject)dependentObject);
+			dependentObject = eResolveProxy((InternalEObject)dependentObject);
 			if (dependentObject != oldDependentObject) {
 				if (eNotificationRequired())
 					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ComponentcorePackage.REFERENCED_COMPONENT__DEPENDENT_OBJECT, oldDependentObject, dependentObject));
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
index 3a89977..eaab41d 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -11,8 +11,8 @@
 package org.eclipse.wst.common.componentcore.internal.impl;
 
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -47,9 +47,9 @@
 	 */
 	public static final int CREATE_RESOURCE_ALWAYS = 0x2;
 
-	private final Set moduleResources = Collections.synchronizedSet(new HashSet());	
-	private final Map children = Collections.synchronizedMap(new HashMap());
-	private final Map transientChildResources = Collections.synchronizedMap(new HashMap());
+	private final Set moduleResources = Collections.synchronizedSet(new LinkedHashSet());	
+	private final Map children = Collections.synchronizedMap(new LinkedHashMap());
+	private final Map transientChildResources = Collections.synchronizedMap(new LinkedHashMap());
 	private static final ComponentResource[] NO_MODULE_RESOURCES = new ComponentResource[]{};
 	private IPathProvider pathProvider;
 //	private ResourceTreeNode parent;
@@ -170,13 +170,13 @@
 	private Set findModuleResourcesSet(IPath aFullPath, IPath aPath, int creationFlags) {
 
 		if (aPath.segmentCount() == 0) {
-			Set resources = aggregateResources(new HashSet());
+			Set resources = aggregateResources(new LinkedHashSet());
 			return resources;
 		}
 		ResourceTreeNode child = findChild(aPath.segment(0), creationFlags);
 		if (child == null)
 			return findMatchingVirtualPathsSet(aFullPath, aPath, creationFlags);
-		Set foundResources = new HashSet();
+		Set foundResources = new LinkedHashSet();
 		foundResources.addAll(child.findModuleResourcesSet(aFullPath, aPath.removeFirstSegments(1), creationFlags));
 		foundResources.addAll(findMatchingVirtualPathsSet(aFullPath, aPath, creationFlags));
 		return foundResources;
@@ -188,7 +188,7 @@
 			ComponentResource moduleResource = null;
 			IResource eclipseResource = null;
 			IContainer eclipseContainer = null;
-			Set resultSet = new HashSet();
+			Set resultSet = new LinkedHashSet();
 			for (Iterator resourceIter = moduleResources.iterator(); resourceIter.hasNext();) {
 				moduleResource = (ComponentResource) resourceIter.next();
 				if(moduleResource.getRuntimePath() != null && moduleResource.eResource() != null) {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRoot.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRoot.java
index 1a42a88..53293cd 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRoot.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRoot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRootAdapter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRootAdapter.java
index 1e6dd7d..24c4d17 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRootAdapter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeRootAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -62,5 +62,10 @@
 		}
 		return resourceTreeRoot;
 	}
+	
+	public void setResourceTreeRoot(ResourceTreeRoot r){
+		
+		resourceTreeRoot = r;
+	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesInit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesInit.java
index 3865a93..85b5516 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesInit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesInit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResourceFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResourceFactory.java
index 3e254f2..ee2a6dd 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResourceFactory.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResourceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPResourceFactoryRegistry.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPResourceFactoryRegistry.java
index 89fe082..ecdb100 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPResourceFactoryRegistry.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPResourceFactoryRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -10,20 +10,40 @@
  *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.impl;
 
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.ISafeRunnable;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.content.IContentDescription;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.jem.util.RegistryReader;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.UnresolveableURIException;
 import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
+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.common.internal.emf.resource.FileNameResourceFactoryRegistry;
 import org.eclipse.wst.common.internal.emf.resource.ResourceFactoryDescriptor;
 import org.eclipse.wst.common.internal.emf.utilities.DefaultOverridableResourceFactoryRegistry;
+import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
+import org.eclipse.wst.common.internal.emfworkbench.edit.EMFWorkbenchEditContextFactory;
 
 /**
  * <p>
@@ -47,19 +67,45 @@
 		return WTPResourceFactoryRegistry.INSTANCE.getFactory(uri);	
 	}   
 
-	public synchronized Resource.Factory getFactory(URI uri) {
-		
-		Resource.Factory resourceFactory = null;
-		if(uri != null && uri.lastSegment() != null) {
-			ResourceFactoryDescriptor descriptor = getDescriptor(uri);
-			
-			if(descriptor != null) {
-				resourceFactory = getFactory(descriptor);	
-			}	
+	public Resource.Factory getFactory(URI uri, IContentDescription description) {
+		IProject componentProject = null;
+		try {
+			componentProject = StructureEdit.getContainingProject(uri);
+		} catch (UnresolveableURIException e) {
+			// don't do anything
 		}
-		if(resourceFactory == null)
-			resourceFactory = super.getFactory(uri);
-		return resourceFactory; 
+		ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(componentProject);
+		try{
+			if(null != lock){
+				lock.acquire();
+			}
+			synchronized(this){
+				Resource.Factory resourceFactory = null;
+				if(uri != null && uri.lastSegment() != null) {
+					ResourceFactoryDescriptor descriptor = null;
+					if(null == description){
+						descriptor = getDescriptor(uri);
+					} else {
+						descriptor = getDescriptor(uri, description);
+					}
+					
+					if(descriptor != null) {
+						resourceFactory = getFactory(descriptor);	
+					}	
+				}
+				if(resourceFactory == null)
+					resourceFactory = super.getFactory(uri);
+				return resourceFactory;
+			}
+		} finally{
+			if(null != lock){
+				lock.release();
+			}
+		} 
+	}
+	
+	public Resource.Factory getFactory(URI uri) {
+		return getFactory(uri, (IContentDescription)null);
 	}	
 
 
@@ -86,6 +132,18 @@
 		super.registerLastFileSegment(aSimpleFileName, aFactory);
 		
 	}  
+	private WTPResourceFactoryRegistryKey getKey(ResourceFactoryDescriptor descriptor) {
+		WTPResourceFactoryRegistryKey key = new WTPResourceFactoryRegistryKey();
+		key.shortName = descriptor.getShortSegment();
+		key.type = descriptor.getContentType();
+		key.isDefault = descriptor.isDefault();
+		if(descriptor instanceof ConfigurationResourceFactoryDescriptor){
+			ConfigurationResourceFactoryDescriptor configurationDescriptor = (ConfigurationResourceFactoryDescriptor)descriptor;
+			key.factoryClassName = configurationDescriptor.getFactoryClassName();
+			key.overridesFactoryClassName = configurationDescriptor.getOverridesFactoryClassName();
+		}
+		return key;
+	}
 	
 	/**
 	 * Declares a subclass to create Resource.Factory(ies) from an extension. 
@@ -93,6 +151,10 @@
 	private class ConfigurationResourceFactoryDescriptor extends ResourceFactoryDescriptor  implements IResourceFactoryExtPtConstants {
 		
 		private String shortSegment;
+		private IContentType contentType;
+		private boolean isDefault = true;
+		private String factoryClassName = null;
+		private String overridesFactoryClassName = null;
 		private final IConfigurationElement element; 
 		
 		public ConfigurationResourceFactoryDescriptor(IConfigurationElement ext) throws CoreException {
@@ -101,22 +163,52 @@
 			init();
 		} 
 		
+		public String getOverridesFactoryClassName() {
+			return overridesFactoryClassName;
+		}
+
+		public String getFactoryClassName() {
+			return factoryClassName;
+		}
+
 		private void init() throws CoreException {
 			shortSegment = element.getAttribute(ATT_SHORT_SEGMENT);
-			if(shortSegment == null || shortSegment.trim().length() == 0)
+			
+			IConfigurationElement[] bindings = element.getChildren(TAG_CONTENTTYPE);
+			if (bindings.length > 0) {
+				String contentTypeId = null;
+				contentTypeId = bindings[0].getAttribute(ATT_CONTENTTYPEID);			
+				if (contentTypeId != null)
+					contentType = Platform.getContentTypeManager().getContentType(contentTypeId);
+			}
+			
+			if ((shortSegment == null || shortSegment.trim().length() == 0)
+						&& contentType == null) {
 				throw new CoreException(
 							ModulecorePlugin.createErrorStatus(0, 
-										"The shortSegment attribute of " + TAG_RESOURCE_FACTORY + //$NON-NLS-1$ 
-										" must specify a valid, non-null, non-empty value in " +   //$NON-NLS-1$
-										element.getNamespaceIdentifier(), null));
+										"Either the shortSegment attribute or the contentType element of " //$NON-NLS-1$
+										+ TAG_RESOURCE_FACTORY 
+										+ " must be specified in " 
+										+ element.getNamespaceIdentifier()
+										+ ".  The shortSegment attribute is specified with a valid, non-null, " //$NON-NLS-1$
+										+ "non-empty value, and the contentType element is specified with a " //$NON-NLS-1$
+										+ "valid, non-null, non-empty contentTypeId." //$NON-NLS-1$
+										, null));
+			}
 			
+			if ("false".equals(element.getAttribute(ATT_ISDEFAULT)))
+				isDefault = false;
+				
+            factoryClassName = element.getAttribute(ATT_CLASS);
+			overridesFactoryClassName = element.getAttribute(ATT_OVERRIDES_FACTORY);				
 		} 
 
 		public boolean isEnabledFor(URI fileURI) {
-			/* shortSegment must be non-null for the descriptor to be created, 
-			 * a validation check in init() verifies this requirement */
-			if(fileURI != null && fileURI.lastSegment() != null)
+			// Not sure where this is actually used, so not sure what the proper 
+			// implementation should be, so simply checking the short segment for now
+			if (fileURI != null && fileURI.lastSegment() != null && shortSegment != null) {
 				return shortSegment.equals(fileURI.lastSegment());
+			}
 			return false;
 		} 
 		
@@ -141,14 +233,46 @@
 
 		public String getShortSegment() {
 			return shortSegment;
-		}  
-	}  
+		}
+
+		public IContentType getContentType() {
+			return contentType;
+		}
+
+		public boolean isDefault() {
+			return isDefault;
+		}
+		
+		public int hashCode() {
+			int hashCode = 0;
+			if (getContentType() != null) {
+				hashCode |= getContentType().hashCode();
+			}
+			if (getShortSegment() != null) {
+				hashCode |= getShortSegment().hashCode();
+			}
+			return hashCode;
+		}
+		
+		public boolean equals(Object o) {
+			if (! (o instanceof ResourceFactoryDescriptor)) {
+				return false;
+			}
+			ResourceFactoryDescriptor rfdo = (ResourceFactoryDescriptor) o;
+			boolean equals = true;
+			equals &= (getContentType() == null) ? rfdo.getContentType() == null :
+				getContentType().equals(rfdo.getContentType());
+			equals &= (getShortSegment() == null) ? rfdo.getShortSegment() == null :
+				getShortSegment().equals(rfdo.getShortSegment());
+			return equals;
+		}
+	}
 	 
 	
 	private class ResourceFactoryRegistryReader extends RegistryReader implements IResourceFactoryExtPtConstants { 
  		
 		public ResourceFactoryRegistryReader() {
-			super(Platform.getPluginRegistry(), ModulecorePlugin.PLUGIN_ID, EXTPT_RESOURCE_FACTORIES);
+			super(ModulecorePlugin.PLUGIN_ID, EXTPT_RESOURCE_FACTORIES);
 		}
 
 		public boolean readElement(final IConfigurationElement element) {
@@ -172,4 +296,194 @@
 			}	
 		}
 	}
+	private class WTPResourceFactoryRegistryKey { 
+ 		
+		public String overridesFactoryClassName;
+		public String factoryClassName;
+		public String shortName;
+		public IContentType type;
+		public boolean isDefault = true;
+		public WTPResourceFactoryRegistryKey() {
+			super();
+		}
+		
+		/**
+		 * Sort in the following manner:
+		 * First, sort by shortName, if shortName is null, then it comes last
+		 * If shortNames are equal, then sort by isDefault
+		 * If isDefault is also equal, then the one defining a factoryClassName wins
+		 * If both have factoryClassNames, then check to see if one overrides the other via overridesFactoryClassName
+		 * If neither override the other factory class, then sort by factoryClassname
+		 * @param other
+		 * @return
+		 */
+		public int compareTo(WTPResourceFactoryRegistryKey other){
+			if(this == other){
+				return 0;
+			}
+			if(shortName == null && other.shortName == null){
+				return 0;
+			} else if(shortName == null){
+				return 1;
+			} else if(other.shortName == null){
+				return -1;
+			}
+			
+			int shortNameCompare = this.shortName.compareTo(other.shortName);
+			if(shortNameCompare != 0){
+				return shortNameCompare;
+			} else {
+				if(this.isDefault != other.isDefault){
+					if(this.isDefault){
+						return -1;
+					} else {
+						return 1;
+					}
+				} else {
+					if(this.factoryClassName == null && other.factoryClassName == null){
+						return 0;
+					} else if(other.factoryClassName == null){
+						return -1;
+					} else if (this.factoryClassName == null){
+						return 1;
+					} else if(other.factoryClassName.equals(this.overridesFactoryClassName)){
+						return -1;
+					} else if(this.factoryClassName.equals(other.overridesFactoryClassName)){
+						return 1;
+					} else {
+						return this.factoryClassName.compareTo(other.factoryClassName);
+					}	
+				}
+			}
+		}
+	}
+
+	protected void addDescriptor(ResourceFactoryDescriptor descriptor) {
+		getDescriptors().put(getKey(descriptor), descriptor);
+	}
+	
+	private WTPResourceFactoryRegistryKey []  sortedDescriptors = null;
+	
+	private WTPResourceFactoryRegistryKey []  getSortedDescriptorKeys() {
+		if(sortedDescriptors == null || sortedDescriptors.length != getDescriptors().size()){
+			Set keys = getDescriptors().keySet();
+			WTPResourceFactoryRegistryKey [] array = new WTPResourceFactoryRegistryKey [keys.size()];
+			int count = 0;
+			for (Iterator iterator = keys.iterator(); iterator.hasNext();count++) {
+				WTPResourceFactoryRegistryKey key = (WTPResourceFactoryRegistryKey) iterator.next();
+				array[count] = key;
+			}
+			Arrays.sort(array, new Comparator<WTPResourceFactoryRegistryKey>() {
+				public int compare(WTPResourceFactoryRegistryKey key1,
+						WTPResourceFactoryRegistryKey key2) {
+					return key1.compareTo(key2);
+				}
+			});
+			sortedDescriptors = array;
+		}
+		return sortedDescriptors;
+	}
+
+	protected synchronized ResourceFactoryDescriptor getDescriptor(URI uri, IContentDescription description) {
+		WTPResourceFactoryRegistryKey [] keys = getSortedDescriptorKeys();
+		ResourceFactoryDescriptor defaultDescriptor = null;
+		
+		// first check content type
+		if (description != null) {
+			for (WTPResourceFactoryRegistryKey key : keys) {
+				ResourceFactoryDescriptor descriptor = (ResourceFactoryDescriptor) getDescriptors().get(key);
+				
+				if ((key.type != null) && (description.getContentType().equals(key.type))) {
+					if ((defaultDescriptor == null) || (key.isDefault)) {
+						defaultDescriptor = descriptor;
+					}
+				}
+			}
+		}
+		
+		// then check short name, overriding default if necessary
+		for (WTPResourceFactoryRegistryKey key : keys) {
+			ResourceFactoryDescriptor descriptor = (ResourceFactoryDescriptor) getDescriptors().get(key);
+						
+			if ((key.shortName != null) && (uri.lastSegment().equals(key.shortName))) {
+				if ((defaultDescriptor == null) 
+						|| ((description == null) && (key.isDefault))) {
+					defaultDescriptor = descriptor;
+				}
+			}
+		}
+		
+		return defaultDescriptor;
+	}
+	
+	private URI newPlatformURI(URI aNewURI, IProject project) {
+		
+		if (project == null)
+			return ModuleURIUtil.trimToDeployPathSegment(aNewURI);
+		try {
+			IVirtualComponent component = ComponentCore.createComponent(project);
+
+			URI deployPathSegment = ModuleURIUtil.trimToDeployPathSegment(aNewURI);
+			
+			//IVirtualFile newFile = component.getFile(new Path(deployPathSegment.path()));			
+			IVirtualFolder rootFolder = component.getRootFolder();
+			IVirtualFile newFile = rootFolder.getFile(new Path(deployPathSegment.path()));
+			
+			return URI.createPlatformResourceURI(newFile.getWorkspaceRelativePath().toString());
+			 
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private IContentDescription getDescriptionFromURI(URI uri) {
+		String contentTypeIdentifier = ModuleURIUtil.getContentTypeName(uri);
+		if (contentTypeIdentifier != null)
+			return Platform.getContentTypeManager().getContentType(contentTypeIdentifier).getDefaultDescription();
+		else
+			return null;
+		
+	}
+
+	protected synchronized ResourceFactoryDescriptor getDescriptor(URI uri) {
+		IFile file = WorkbenchResourceHelper.getPlatformFile(uri);
+		IContentDescription description = null;
+		if (file != null && file.exists()) {
+			try {
+				description = file.getContentDescription();
+			} catch (CoreException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+		if (description == null) {//Check for optional embedded uri segment, then normalize
+			description = getDescriptionFromURI(uri);
+			try {
+				if (description != null) {
+					IProject componentProject = null;
+					try {
+						componentProject = StructureEdit.getContainingProject(uri);
+					} catch (UnresolveableURIException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+					uri = PlatformURLModuleConnection.resolve(uri);
+					uri = newPlatformURI(uri,componentProject);
+				} 
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+		
+		ResourceFactoryDescriptor defaultDesc = getDescriptor(uri, description);
+		// Ok no content type match - go to super
+		if (defaultDesc != null){
+			return defaultDesc;
+		}
+		else{
+			return super.getDescriptor(uri);
+		}
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WorkbenchComponentImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WorkbenchComponentImpl.java
index 407d303..883ebb9 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WorkbenchComponentImpl.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WorkbenchComponentImpl.java
@@ -2,15 +2,13 @@
  * <copyright>
  * </copyright>
  *
- * $Id: WorkbenchComponentImpl.java,v 1.13 2006/07/21 18:36:56 cbridgha Exp $
+ * $Id: WorkbenchComponentImpl.java,v 1.14 2007/02/14 16:00:52 jsholl Exp $
  */
 package org.eclipse.wst.common.componentcore.internal.impl;
 
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
@@ -187,14 +185,14 @@
 	 */
 	protected EList metadataResources = null;
 
-	private final Map resourceIndexByDeployPath = new HashMap();
-	private final Map resourceIndexBySourcePath = new HashMap();
+//	private final Map resourceIndexByDeployPath = new HashMap();
+//	private final Map resourceIndexBySourcePath = new HashMap();
 
-	private boolean isIndexedByDeployPath;
+//	private boolean isIndexedByDeployPath;
 
-	private boolean isIndexedBySourcePath;
+//	private boolean isIndexedBySourcePath;
 
-	private static final ComponentResource[] NO_MODULE_RESOURCES = new ComponentResource[0];
+//	private static final ComponentResource[] NO_MODULE_RESOURCES = new ComponentResource[0];
 
 	private URI handle;
 	
@@ -254,7 +252,7 @@
 		// TODO A more advanced adapter should be applied to keep the handle up to date.
 		if (eResource() != null) {
 			URI resourceURI = eResource().getURI();
-			String safeDeployedName = getName() != null ? getName() : ""; //$NON-NLS-1$
+//			String safeDeployedName = getName() != null ? getName() : ""; //$NON-NLS-1$
 			if (resourceURI != null && resourceURI.segmentCount() >= 2)
 				setHandle(computeHandle());
 		}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditOperationDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditOperationDataModelProvider.java
index b713cde..1a61422 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditOperationDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditOperationDataModelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditProviderOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditProviderOperation.java
index ea7575c..b956516 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditProviderOperation.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ArtifactEditProviderOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 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
@@ -114,7 +114,6 @@
 	 * Validate edit for resource state
 	 */
 	protected IStatus validateEdit() {
-		IStatus status = OK_STATUS;
 		IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
 		return validator.validateState((EditModel)getArtifactEdit().getAdapter(ArtifactEditModel.ADAPTER_TYPE));
 		
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationDataModelProvider.java
deleted file mode 100644
index 1202171..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationDataModelProvider.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.common.componentcore.internal.operation;
-
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.datamodel.FacetProjectCreationDataModelProvider;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IComponentCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IFlexibleProjectCreationDataModelProperties;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonMessages;
-import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-
-/**
- * This dataModel is a common super class used for creation of WTP Components.
- * 
- * This class (and all its fields and methods) is likely to change during the WTP 1.0 milestones as
- * the new project structures are adopted. Use at your own risk.
- * 
- * @plannedfor WTP 1.0
- */
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see FacetProjectCreationDataModelProvider
- */
-public abstract class ComponentCreationDataModelProvider extends AbstractDataModelProvider implements IComponentCreationDataModelProperties, DoNotUseMeThisWillBeDeletedPost15 {
-
-	// protected boolean isProjMultiComponents = false;
-
-	public void init() {
-		super.init();
-		// isProjMultiComponents =
-		// FlexibleJavaProjectPreferenceUtil.getMultipleModulesPerProjectProp();
-		// model.getBooleanProperty(SUPPORT_MULTIPLE_MODULES) =
-		// model.getBooleanProperty(SUPPORT_MULTIPLE_MODULES);
-		initProjectCreationModel();
-	}
-
-	public Set getPropertyNames() {
-		Set propertyNames = super.getPropertyNames();
-		propertyNames.add(PROJECT_NAME);
-		propertyNames.add(NESTED_PROJECT_CREATION_DM);
-		propertyNames.add(COMPONENT_NAME);
-		propertyNames.add(COMPONENT_NAME);
-		propertyNames.add(LOCATION);
-		propertyNames.add(COMPONENT_DEPLOY_NAME);
-		propertyNames.add(CREATE_DEFAULT_FILES);
-		propertyNames.add(COMPONENT);
-		return propertyNames;
-	}
-
-	public void propertyChanged(DataModelEvent event) {
-		if (event.getFlag() == DataModelEvent.VALUE_CHG) {
-			event.getDataModel();
-		}
-	}
-
-	public boolean propertySet(String propertyName, Object propertyValue) {
-		if (COMPONENT_NAME.equals(propertyName)) {
-			model.setProperty(COMPONENT_DEPLOY_NAME, propertyValue);
-			model.setProperty(PROJECT_NAME, propertyValue);
-		} else if (COMPONENT_DEPLOY_NAME.equals(propertyName)) {
-			model.setProperty(COMPONENT_DEPLOY_NAME, propertyValue);
-		} else if (COMPONENT.equals(propertyName)) {
-			throw new RuntimeException(propertyName + " should not be set.");
-		} else if (PROJECT_NAME.equals(propertyName)) {
-			// if(!FlexibleJavaProjectPreferenceUtil.getMultipleModulesPerProjectProp()){
-			// model.notifyPropertyChange(PROJECT_NAME, IDataModel.VALUE_CHG);
-			// set the property in nested FlexibleJavaProjectCreationDataModelProvider
-			IDataModel dm = model.getNestedModel(NESTED_PROJECT_CREATION_DM);
-			dm.setProperty(IFlexibleProjectCreationDataModelProperties.PROJECT_NAME, propertyValue);
-			return true;
-			// }
-		}
-		return true;
-	}
-
-	public Object getDefaultProperty(String propertyName) {
-		if (propertyName.equals(CREATE_DEFAULT_FILES)) {
-			return Boolean.TRUE;
-		} else if (propertyName.equals(COMPONENT)) {
-			String projectName = getStringProperty(PROJECT_NAME);
-			IProject project = ProjectUtilities.getProject(projectName);
-			return ComponentCore.createComponent(project);
-		}
-		return super.getDefaultProperty(propertyName);
-	}
-
-	public IStatus validate(String propertyName) {
-		if (propertyName.equals(COMPONENT_NAME)) {
-			IStatus status = OK_STATUS;
-			String moduleName = model.getStringProperty(COMPONENT_NAME);
-			if (status.isOK()) {
-				if (moduleName.indexOf("#") != -1 || moduleName.indexOf("/") != -1) { //$NON-NLS-1$
-					String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.ERR_INVALID_CHARS); //$NON-NLS-1$
-					return WTPCommonPlugin.createErrorStatus(errorMessage);
-				} else if (moduleName == null || moduleName.equals("")) { //$NON-NLS-1$
-					String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.ERR_EMPTY_MODULE_NAME);
-					return WTPCommonPlugin.createErrorStatus(errorMessage);
-				} else
-					return OK_STATUS;
-			} else
-				return status;
-		} else if (propertyName.equals(PROJECT_NAME)) {
-			IStatus status = OK_STATUS;
-
-				String projectName = model.getStringProperty(PROJECT_NAME);
-				if (projectName == null || projectName.length() == 0) {
-					String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_NAME_EMPTY);
-					status = WTPCommonPlugin.createErrorStatus(errorMessage);
-				}
-				if (status.isOK()) {
-					status = validateProjectName(projectName);
-					if (status.isOK()) {
-						IProject proj = ProjectUtilities.getProject(projectName);
-						if (proj.exists()) {
-							String errorMessage = WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_ERROR);
-							status = WTPCommonPlugin.createErrorStatus(errorMessage);
-						}
-					}					
-				}
-
-			return status;
-		} else if (propertyName.equals(COMPONENT_DEPLOY_NAME)) {
-			return OK_STATUS;
-		} else if (propertyName.equals(CREATE_DEFAULT_FILES)) {
-			return OK_STATUS;
-		}
-		return OK_STATUS;
-	}
-
-	protected IStatus validateProjectName(String projectName) {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IStatus status = workspace.validateName(projectName, IResource.PROJECT);
-		if (!status.isOK())
-			return status;
-
-		if (ProjectUtilities.getProject(projectName).exists())
-			return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.PROJECT_EXISTS_ERROR, new Object[]{projectName}));
-
-		if (projectName.indexOf("#") != -1) { //$NON-NLS-1$
-			// String errorMessage = J2EECreationResourceHandler.getString("InvalidCharsError");
-			// //$NON-NLS-1$
-			String errorMessage = "InvalidCharsError"; //$NON-NLS-1$
-			return WTPCommonPlugin.createErrorStatus(errorMessage);
-		}
-		return OK_STATUS;
-	}
-
-	// protected static String[] getServerVersions(String moduleID, IRuntimeType type) {
-	// List list = new ArrayList();
-	// if (type == null)
-	// return null;
-	// IModuleType[] moduleTypes = type.getModuleTypes();
-	// if (moduleTypes != null) {
-	// int size = moduleTypes.length;
-	// for (int i = 0; i < size; i++) {
-	// IModuleType moduleType = moduleTypes[i];
-	// if (matches(moduleType.getId(), moduleID)) {
-	// list.add(moduleType.getVersion());
-	// }
-	//
-	// }
-	// }
-	// String[] versions = null;
-	// if (!list.isEmpty()) {
-	// versions = new String[list.size()];
-	// list.toArray(versions);
-	// }
-	// return versions;
-	// }
-
-//	protected static boolean matches(String serverTypeID, String j2eeModuleID) {
-//
-//		if (serverTypeID.equals("j2ee")) {
-//			if (j2eeModuleID.equals(IModuleConstants.JST_WEB_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_EJB_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_EAR_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_APPCLIENT_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_CONNECTOR_MODULE)) {
-//				return true;
-//			}
-//		} else if (serverTypeID.equals("j2ee.*")) {
-//			if (j2eeModuleID.equals(IModuleConstants.JST_WEB_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_EJB_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_EAR_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_APPCLIENT_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_CONNECTOR_MODULE)) {
-//				return true;
-//			}
-//		} else if (serverTypeID.equals("j2ee.web")) {//$NON-NLS-1$
-//			if (j2eeModuleID.equals(IModuleConstants.JST_WEB_MODULE)) {
-//				return true;
-//			}
-//		} else if (serverTypeID.equals("j2ee.ejb")) {//$NON-NLS-1$
-//			if (j2eeModuleID.equals(IModuleConstants.JST_EJB_MODULE)) {
-//				return true;
-//			}
-//		} else if (serverTypeID.equals("j2ee.ear")) {//$NON-NLS-1$
-//			if (j2eeModuleID.equals(IModuleConstants.JST_EAR_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_APPCLIENT_MODULE) || j2eeModuleID.equals(IModuleConstants.JST_CONNECTOR_MODULE)) {
-//				return true;
-//			}
-//		}
-//		return false;
-//	}
-
-	// private static boolean matches(String a, String b) {
-	// if (a == null || b == null || "*".equals(a) || "*".equals(b) || a.startsWith(b) ||
-	// b.startsWith(a)) //$NON-NLS-1$ //$NON-NLS-2$
-	// return true;
-	// return false;
-	// }
-
-
-	protected String getComponentName() {
-		return model.getStringProperty(COMPONENT_NAME);
-	}
-
-	protected String getComponentDeployName() {
-		return model.getStringProperty(COMPONENT_DEPLOY_NAME);
-	}
-
-	protected abstract void initProjectCreationModel();
-
-	protected abstract EClass getComponentType();
-
-	protected abstract String getComponentExtension();
-
-	protected abstract List getProperties();
-
-	protected abstract Integer getDefaultComponentVersion();
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationOperation.java
deleted file mode 100644
index 769c2dd..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ComponentCreationOperation.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.componentcore.internal.operation;
-
-import java.util.List;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IComponentCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IFlexibleProjectCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-
-
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see FacetProjectCreationOperation
- */
-public abstract class ComponentCreationOperation extends AbstractDataModelOperation implements IComponentCreationDataModelProperties, DoNotUseMeThisWillBeDeletedPost15 {
-
-    public ComponentCreationOperation(IDataModel model) {
-        super(model);
-    }
-
-    public IStatus execute(IProgressMonitor monitor, IAdaptable info) {
-        createProjectIfNeeded(monitor, info);
-		StructureEdit edit = null;
-        try {
-			edit = StructureEdit.getStructureEditForWrite(getProject());
-
-            createAndLinkJ2EEComponentsForSingleComponent();
-        }
-        catch (CoreException e) {
-            Logger.getLogger().log(e);
-        }
-		finally {
-			if (edit != null) {
-				edit.saveIfNecessary(monitor);
-				edit.dispose();
-			}
-			
-		}
-        
-        return OK_STATUS;
-    }
-
-    private void createProjectIfNeeded(IProgressMonitor monitor, IAdaptable info) {
-        Object dm = model.getNestedModel(NESTED_PROJECT_CREATION_DM);
-        if(dm == null) return;
-        String projName = ((IDataModel)dm).getStringProperty(IFlexibleProjectCreationDataModelProperties.PROJECT_NAME);
-           
-        IProject proj = ProjectUtilities.getProject(projName);
-        if(projName == null || projName.equals("") || proj.exists()) return;
-        IDataModelOperation op = ((IDataModel)dm).getDefaultOperation();
-        try {
-            op.execute(monitor, info);
-        } catch (ExecutionException e) {
-            e.printStackTrace();
-        }
-    }
-
-
-    protected abstract void createAndLinkJ2EEComponentsForMultipleComponents() throws CoreException;
-    
-    protected abstract void createAndLinkJ2EEComponentsForSingleComponent() throws CoreException;
-
-    protected String getComponentName() {
-        return model.getStringProperty(COMPONENT_NAME);
-    }
-
-    public String getComponentDeployName() {
-        return model.getStringProperty(COMPONENT_DEPLOY_NAME);
-    }
-
-    protected abstract String getVersion();
-
-    protected abstract List getProperties();
-
-	public IProject getProject() {
-	    String projName = model.getStringProperty(PROJECT_NAME);
-	    return ProjectUtilities.getProject(projName);
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsDataModelProvider.java
index bf6e0c7..3967a2a 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsDataModelProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsDataModelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 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
@@ -12,7 +12,6 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -31,7 +30,7 @@
 		propertyNames.add(SOURCE_COMPONENT);
 		propertyNames.add(TARGET_COMPONENT_LIST);
 		propertyNames.add(TARGET_COMPONENTS_DEPLOY_PATH);
-		propertyNames.add(TARGET_COMPONENT_ARCHIVE_NAME);
+		propertyNames.add(TARGET_COMPONENTS_DEPLOY_PATH_MAP);
 		propertyNames.add(TARGET_COMPONENTS_TO_URI_MAP);
 		return propertyNames;
 	}
@@ -46,17 +45,16 @@
 			setProperty(propertyName, map);
 			return map;
 		}
+		else if (TARGET_COMPONENTS_DEPLOY_PATH_MAP.equals(propertyName)) {
+			Map map = new HashMap();
+			setProperty(propertyName, map);
+			return map;
+		}
 		
 		if (propertyName.equals(TARGET_COMPONENT_LIST))
 			return new ArrayList();
 		else if (propertyName.equals(TARGET_COMPONENTS_DEPLOY_PATH)){
 			return "/"; //$NON-NLS-1$
-		} else if (propertyName.equals(TARGET_COMPONENT_ARCHIVE_NAME)){
-			List components = (List) getProperty(TARGET_COMPONENT_LIST);
-			if(components.size() == 0){
-				Map map = (Map)getProperty(TARGET_COMPONENTS_TO_URI_MAP);
-				map.put(components.get(0), getProperty(propertyName));	
-			}
 		}
 		return super.getDefaultProperty(propertyName);
 	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsOp.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsOp.java
index fb0833d..dfcc622 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsOp.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsOp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 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
@@ -15,26 +15,25 @@
 import java.util.Map;
 
 import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jem.util.UIContextDetermination;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.wst.common.componentcore.ArtifactEdit;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
-import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
 import org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext;
 
 public class CreateReferenceComponentsOp extends AbstractDataModelOperation {
@@ -60,14 +59,7 @@
 		IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
 		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT);
 		IProject project = sourceComp.getProject();
-		ArtifactEdit edit = null;
-		try {
-			edit = ComponentUtilities.getArtifactEditForWrite(sourceComp);
-			status = validator.validateState((EditModel)edit.getAdapter(ArtifactEditModel.ADAPTER_TYPE));
-		} finally {
-			if (edit !=null)
-				edit.dispose();
-		}
+
 		if (status.isOK()) {
 			StructureEdit sEdit = null;
 			try {
@@ -78,6 +70,10 @@
 					sEdit.dispose();
 			}
 		}
+		
+		IFile [] files = new IFile[1];
+		files[0] = project.getFile(ProjectUtilities.DOT_PROJECT);
+		status = ResourcesPlugin.getWorkspace().validateEdit(files, null);
 		return status;
 	}
 
@@ -103,13 +99,29 @@
 		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT);
 		List vlist = new ArrayList();
 		List modList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST);
+		Map modDeployPathMap = (Map) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH_MAP);
+		String deployPathStr = model.getStringProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH);
+		IPath deployPath = null;
+		IPath archiveDeployPath = null;
+		if (deployPathStr != null && deployPathStr.length() > 0){
+			deployPath = new Path(deployPathStr);
+		}
 		for (int i = 0; i < modList.size(); i++) {
 			IVirtualComponent comp = (IVirtualComponent) modList.get(i);
-			if (!srcComponentContainsReference(sourceComp, comp)) {
+			if (!srcComponentContainsReference(sourceComp, comp, deployPath)) {
 				IVirtualReference ref = ComponentCore.createReference(sourceComp, comp);
-				String deployPath = model.getStringProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH);
-				if (deployPath != null && deployPath.length() > 0)
-					ref.setRuntimePath(new Path(deployPath));
+				deployPathStr = (String)modDeployPathMap.get(comp);
+				if (deployPathStr != null)
+				{
+					archiveDeployPath = new Path(deployPathStr);
+				}
+				else
+				{
+					archiveDeployPath = deployPath;
+				}
+				if(archiveDeployPath != null){
+					ref.setRuntimePath(archiveDeployPath);
+				}
 
 				String archiveName = getArchiveName(comp);
 				if (archiveName.length() > 0) {
@@ -130,17 +142,21 @@
 	}
 
 
-	private boolean srcComponentContainsReference(IVirtualComponent sourceComp, IVirtualComponent comp) {
+	private boolean srcComponentContainsReference(IVirtualComponent sourceComp, IVirtualComponent comp, IPath deployPath) {
 		if ((sourceComp != null && sourceComp.getProject() != null) && (comp != null && comp.getProject() != null)) {
-		
 			IVirtualReference[] existingReferences = sourceComp.getReferences();
 			IVirtualComponent referencedComponent = null;
 			if (existingReferences != null) {
 				for (int i = 0; i < existingReferences.length; i++) {
-					if (existingReferences[i] != null ) {
-						referencedComponent = existingReferences[i].getReferencedComponent();	
-						if (referencedComponent != null && referencedComponent.equals(comp)  ) 
+					IVirtualReference ref = existingReferences[i];
+					if(ref != null){
+						//also check to see if the deploy path is the same (remember that it can be null)
+						if((ref.getRuntimePath() == null && deployPath != null) || ref.getRuntimePath().equals(deployPath)){
+							referencedComponent = ref.getReferencedComponent();	
+							if (referencedComponent != null && referencedComponent.equals(comp) ){ 
 								return true;
+							}	
+						}
 					}
 				}
 			}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FacetProjectCreationOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FacetProjectCreationOperation.java
index 31e3bb4..abdcd14 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FacetProjectCreationOperation.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FacetProjectCreationOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -26,14 +26,13 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.componentcore.datamodel.FacetInstallDataModelProvider;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationPropertiesNew;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
@@ -103,7 +102,7 @@
 			}
 			if (runtimeAdded) {
 				IRuntime runtime = (IRuntime) model.getProperty(IFacetProjectCreationDataModelProperties.FACET_RUNTIME);
-				addDefaultFacets(facetProj, runtime.getDefaultFacets(fixedFacets));
+				addDefaultFactets(facetProj, runtime);
 			}
 
 		} catch (CoreException e) {
@@ -115,16 +114,12 @@
 		return OK_STATUS;
 	}
 
-	private void addDefaultFacets(IFacetedProject facetProj, Set defaultFacets) {
+	private static void addDefaultFacets(IFacetedProject facetProj, Set defaultFacets) {
 		Set actions = new HashSet();
 		for (Iterator iter = defaultFacets.iterator(); iter.hasNext();) {
 			IProjectFacetVersion facetVersion = (IProjectFacetVersion) iter.next();
 			if (!facetProj.hasProjectFacet(facetVersion.getProjectFacet())) {
-				IDataModel dm = DataModelFactory.createDataModel(new FacetInstallDataModelProvider());
-				dm.setProperty(IFacetDataModelProperties.FACET_ID, facetVersion.getProjectFacet().getId());
-				dm.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, facetProj.getProject().getName());
-				dm.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, facetVersion.getVersionString());
-				actions.add(new IFacetedProject.Action(Action.Type.INSTALL, facetVersion, dm));
+				actions.add(new IFacetedProject.Action(Action.Type.INSTALL, facetVersion, null));
 			}
 		}
 
@@ -154,57 +149,15 @@
 		}
 		return facetProj;
 	}
-
-	private static void addDefaultFacetsInProject(IFacetedProject facetProj, Set defaultFacets) {
-		Set actions = new HashSet();
-		for (Iterator iter = defaultFacets.iterator(); iter.hasNext();) {
-			IProjectFacetVersion facetVersion = (IProjectFacetVersion) iter.next();
-			if (!facetProj.hasProjectFacet(facetVersion.getProjectFacet())) {
-				IDataModel dm = DataModelFactory.createDataModel(new FacetInstallDataModelProvider());
-				dm.setProperty(IFacetDataModelProperties.FACET_ID, facetVersion.getProjectFacet().getId());
-				dm.setProperty(IFacetDataModelProperties.FACET_PROJECT_NAME, facetProj.getProject().getName());
-				dm.setProperty(IFacetDataModelProperties.FACET_VERSION_STR, facetVersion.getVersionString()); 
-				actions.add(new IFacetedProject.Action(Action.Type.INSTALL, facetVersion, dm));
-			}
-		}
-
-		try {
-			if (!actions.isEmpty())
-				facetProj.modify(actions, null);
-		} catch (CoreException e) {
-			Logger.getLogger().logError(e);
-		}
-	}
-
+	
 	public static void addDefaultFactets(IFacetedProject facetProj, IRuntime runtime) throws ExecutionException {
-
-		Set fixedFacets = new HashSet(), newFacetVersions = facetProj.getProjectFacets(), existingFixedFacets = facetProj.getFixedProjectFacets();
-		for (Iterator iter = newFacetVersions.iterator(); iter.hasNext();) {
-			IProjectFacetVersion facetVersion = (IProjectFacetVersion) iter.next();
-			String facetID = facetVersion.getProjectFacet().getId();
-			boolean shouldInstallFacet = true;
-			for (Iterator existingFacetsIterator = existingFixedFacets.iterator(); shouldInstallFacet && existingFacetsIterator.hasNext();) {
-				IProjectFacet facet = (IProjectFacet) existingFacetsIterator.next();
-				if (facet.getId().equals(facetID)) {
-					shouldInstallFacet = false;
-				}
-			}
-			if (shouldInstallFacet) {
-				fixedFacets.add(facetVersion.getProjectFacet());
-			}
-		}
-
-		try {
-			fixedFacets.addAll(facetProj.getFixedProjectFacets());
-			facetProj.setFixedProjectFacets(fixedFacets);
-
+		
 			if (runtime != null) {
-				addDefaultFacetsInProject(facetProj, runtime.getDefaultFacets(fixedFacets));
+				final IFacetedProjectWorkingCopy fpjwc = facetProj.createWorkingCopy();
+				Set<IProjectFacetVersion> presetFacets = fpjwc.getDefaultConfiguration().getProjectFacets();
+				addDefaultFacets(facetProj, presetFacets);
 			}
-		} catch (CoreException e) {
-			Logger.getLogger().logError(e);
-			throw new ExecutionException(e.getMessage(), e);
-		}
+		
 	}
 
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FlexibleProjectCreationOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FlexibleProjectCreationOperation.java
deleted file mode 100644
index 460b068..0000000
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/FlexibleProjectCreationOperation.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 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
- *******************************************************************************/
-package org.eclipse.wst.common.componentcore.internal.operation;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.wst.common.componentcore.datamodel.FacetProjectCreationDataModelProvider;
-import org.eclipse.wst.common.componentcore.datamodel.properties.IFlexibleProjectCreationDataModelProperties;
-import org.eclipse.wst.common.componentcore.internal.ProjectComponents;
-import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
-import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
-import org.eclipse.wst.common.frameworks.internal.DoNotUseMeThisWillBeDeletedPost15;
-import org.eclipse.wst.common.frameworks.internal.WTPProjectUtilities;
-
-/**
- * This has been slated for removal post WTP 1.5. Do not use this class/interface
- * 
- * @deprecated
- * 
- * @see FacetProjectCreationDataModelProvider
- */
-public class FlexibleProjectCreationOperation extends AbstractDataModelOperation implements DoNotUseMeThisWillBeDeletedPost15{
-
-    public FlexibleProjectCreationOperation(IDataModel model) {
-        super(model);
-        // TODO Auto-generated constructor stub
-    }
-
-	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-        try {
-			createProject(monitor);
-		    WTPProjectUtilities.addNatureToProjectLast(getProject(), IModuleConstants.MODULE_NATURE_ID);
-		} catch (CoreException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (InvocationTargetException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (InterruptedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-        createInitialWTPModulesFile();
-		return OK_STATUS;
-	}
-
-    private void createProject(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException, ExecutionException {
-        IDataModel projModel = model.getNestedModel(IFlexibleProjectCreationDataModelProperties.NESTED_MODEL_PROJECT_CREATION);
-        IDataModelOperation op = projModel.getDefaultOperation();
-        op.execute(monitor, null);
-    }
-    
-    private void createInitialWTPModulesFile() {
-    	StructureEdit moduleCore = null;
-		try {
-			IProject containingProject = getProject();
-			moduleCore = StructureEdit.getStructureEditForWrite(containingProject);
-			moduleCore.prepareProjectComponentsIfNecessary(); 
-			ProjectComponents projectModules = moduleCore.getComponentModelRoot();
-			moduleCore.saveIfNecessary(null); 
-		} finally {
-			if(moduleCore != null)
-				moduleCore.dispose();
-		}     
-    }
-    
-    protected IProject getProject() {
-        String name = model.getStringProperty(IFlexibleProjectCreationDataModelProperties.PROJECT_NAME);
-        if (name != null && name.length() > 0)
-            return ResourcesPlugin.getWorkspace().getRoot().getProject(name);
-        return null;
-    }
-
-	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ProjectMigratorDataModelOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ProjectMigratorDataModelOperation.java
index 68e14fd..d507389 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ProjectMigratorDataModelOperation.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ProjectMigratorDataModelOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -21,7 +21,6 @@
 import org.eclipse.wst.common.componentcore.internal.ProjectMigratorRegistry;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 
 public class ProjectMigratorDataModelOperation extends AbstractDataModelOperation {
 
@@ -30,7 +29,6 @@
 	}
 	
 	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		IFacetedProject facetProj;
 		try {
 			IProject proj = ProjectUtilities.getProject(model.getStringProperty(IProjectMigratorDataModelProperties.PROJECT_NAME));
 			IComponentProjectMigrator[] migrators = ProjectMigratorRegistry.getInstance().getProjectMigrators();
@@ -44,6 +42,4 @@
 		return OK_STATUS;
 	}
 
-	
-
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceComponentOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceComponentOperation.java
index 091bb0f..bb1f2c3 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceComponentOperation.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceComponentOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
@@ -11,7 +11,6 @@
 package org.eclipse.wst.common.componentcore.internal.operation;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.core.commands.ExecutionException;
@@ -23,6 +22,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
 import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
@@ -48,43 +48,72 @@
 	protected void removeReferencedComponents(IProgressMonitor monitor) {
 		
 		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT);
-		if (!sourceComp.getProject().isAccessible()) return;
+		if (sourceComp == null || !sourceComp.getProject().isAccessible() || sourceComp.isBinary()) return;
 		
-        List modList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST);
+		IVirtualReference [] existingReferencesArray = sourceComp.getReferences();
+		if(existingReferencesArray == null || existingReferencesArray.length == 0){
+			return;
+		}
+		
+		List existingReferences = new ArrayList();
+		for(int i=0;i<existingReferencesArray.length; i++){
+			existingReferences.add(existingReferencesArray[i]);
+		}
+		
+		String deployPath = model.getStringProperty( ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH );
+		IPath path = new Path( deployPath );
+		
+		List modList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST);
     
 		List targetprojectList = new ArrayList();
 
-		for (int i = 0; i < modList.size(); i++) {
+		for (int i = 0; i < modList.size() && !existingReferences.isEmpty(); i++) {
 			IVirtualComponent comp = (IVirtualComponent) modList.get(i);
-			if (comp==null || sourceComp==null)
+			if (comp==null )
 				continue;
-			IVirtualReference ref = sourceComp.getReference(comp.getName());
-			if( ref != null && ref.getReferencedComponent() != null && ref.getReferencedComponent().isBinary()){
+
+			IVirtualReference ref = findMatchingReference(existingReferences, comp, path);
+			//if a ref was found matching the specified deployPath, then remove it
+			if(ref != null){
 				removeRefereneceInComponent(sourceComp, ref);
-			}else if(ref != null){
-				if (Arrays.asList(comp.getReferencingComponents()).contains(sourceComp)) {
-					
-					String deployPath = model.getStringProperty( ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH );
-					IPath path = new Path( deployPath );
-					
-					if( ref.getRuntimePath() != null && path != null && ref.getRuntimePath().equals( path )){
-						removeRefereneceInComponent(sourceComp,sourceComp.getReference(comp.getName()));
-						IProject targetProject = comp.getProject();
-						targetprojectList.add(targetProject);
-					}
-				}					
+				existingReferences.remove(ref);
+				//after removing the ref, check to see if it was the last ref removed to that component
+				//and if it was, then also remove the project reference
+				ref = findMatchingReference(existingReferences, comp);
+				if(ref == null){
+					IProject targetProject = comp.getProject();
+					targetprojectList.add(targetProject);
+				}
 			}
 		}
 		
 		try {
 			ProjectUtilities.removeReferenceProjects(sourceComp.getProject(),targetprojectList);
 		} catch (CoreException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			Logger.getLogger().logError(e);
 		}		
 		
 	}
 
+	private IVirtualReference findMatchingReference(List existingReferences, IVirtualComponent comp, IPath path) {
+		for(int i=0;i<existingReferences.size(); i++){
+			IVirtualReference ref = (IVirtualReference)existingReferences.get(i);
+			IVirtualComponent c = ref.getReferencedComponent();
+			if(c != null && c.getName().equals(comp.getName())){
+				if(path == null){
+					return ref;
+				} else if(path.equals(ref.getRuntimePath())){
+					return ref;
+				}
+			}
+		}
+		return null;
+	}
+
+	private IVirtualReference findMatchingReference(List existingReferences, IVirtualComponent comp) {
+		return findMatchingReference(existingReferences, comp, null);
+	}
+
 	protected void removeRefereneceInComponent(IVirtualComponent component, IVirtualReference reference) {
 		((VirtualComponent)component.getComponent()).removeReference(reference);
 	}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootDataModelProvider.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootDataModelProvider.java
new file mode 100644
index 0000000..01ded49
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootDataModelProvider.java
@@ -0,0 +1,39 @@
+package org.eclipse.wst.common.componentcore.internal.operation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 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
+ *******************************************************************************/
+
+import java.util.Set;
+
+import org.eclipse.wst.common.componentcore.datamodel.properties.IServerContextRootDataModelProperties;
+import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
+
+public class ServerContextRootDataModelProvider 
+ extends AbstractDataModelProvider
+ implements IServerContextRootDataModelProperties{
+
+	public ServerContextRootDataModelProvider(){
+		super();
+	}
+
+	public Set getPropertyNames() {
+		Set names = super.getPropertyNames();
+		names.add(PROJECT);
+		names.add(CONTEXT_ROOT);
+		return names;
+	}
+	
+	public IDataModelOperation getDefaultOperation() {
+		return new ServerContextRootUpdateOperation(model);
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootUpdateOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootUpdateOperation.java
new file mode 100644
index 0000000..962b731
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/ServerContextRootUpdateOperation.java
@@ -0,0 +1,45 @@
+package org.eclipse.wst.common.componentcore.internal.operation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 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
+ *******************************************************************************/
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.datamodel.properties.IServerContextRootDataModelProperties;
+import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+
+public class ServerContextRootUpdateOperation 
+ extends  AbstractDataModelOperation 
+ implements IServerContextRootDataModelProperties{
+	
+
+	public ServerContextRootUpdateOperation(IDataModel model) {
+		super(model);
+	}
+
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		IProject project = (IProject)model.getProperty( IServerContextRootDataModelProperties.PROJECT );
+		String contextRoot = model.getStringProperty( IServerContextRootDataModelProperties.CONTEXT_ROOT );
+		if (contextRoot != null) {
+			IVirtualComponent comp = ComponentCore.createComponent(project);
+			comp.setMetaProperty(IModuleConstants.CONTEXTROOT, contextRoot);	
+		}
+		return OK_STATUS;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/ResourceTimestampMappings.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/ResourceTimestampMappings.java
index 6182b44..47710ab 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/ResourceTimestampMappings.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/ResourceTimestampMappings.java
@@ -1,11 +1,13 @@
-/***************************************************************************************************
- * Copyright (c) 2003, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.common.componentcore.internal.resources;
 
 import java.util.HashMap;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java
index b0008a4..0d66c2f 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -16,7 +16,6 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
@@ -36,19 +35,23 @@
 	public static final Class ADAPTER_TYPE = VirtualArchiveComponent.class;
 	public static final String LIBARCHIVETYPE = "lib";
 	public static final String VARARCHIVETYPE = "var";
-
+	/**
+	 * VirtualArchiveComponent type for VirtualArchiveComponents that represent classpath component dependencies.
+	 */
+	public static final String CLASSPATHARCHIVETYPE = "cpe"; //$NON-NLS-1
+	
 	private static final IVirtualReference[] NO_REFERENCES = new VirtualReference[0];
 	private static final IVirtualComponent[] NO_COMPONENTS = new VirtualComponent[0];
-	private static final IResource[] NO_RESOURCES = null;
+//	private static final IResource[] NO_RESOURCES = null;
 	private static final IVirtualResource[] NO_VIRTUAL_RESOURCES = null;
 	private static final Properties NO_PROPERTIES = new Properties();
 	private static final IPath[] NO_PATHS = new Path[0];
 
-	private IPath runtimePath;
+//	private IPath runtimePath;
 	private IProject componentProject;
-	private IVirtualFolder rootFolder;
+//	private IVirtualFolder rootFolder;
 	private int flag = 1;
-	private String archiveLocation;
+//	private String archiveLocation;
 
 
 	private IPath archivePath;
@@ -61,7 +64,7 @@
 			throw new NullPointerException();
 		}
 		componentProject = aComponentProject;
-		runtimePath = aRuntimePath;
+//		runtimePath = aRuntimePath;
 
 		String archivePathString = archiveLocation.substring(4, archiveLocation.length());
 		archiveType	= archiveLocation.substring(0, archiveLocation.length() - archivePathString.length() -1);
@@ -110,9 +113,11 @@
 	}
 
 	public IPath getWorkspaceRelativePath() {
-		IFile aFile = ResourcesPlugin.getWorkspace().getRoot().getFile(archivePath);
-		if (aFile.exists())
-			return aFile.getFullPath();
+		if( archivePath.segmentCount() > 1 ){
+			IFile aFile = ResourcesPlugin.getWorkspace().getRoot().getFile(archivePath);
+			if (aFile.exists())
+				return aFile.getFullPath();
+		}
 		return null;
 	}
 
@@ -238,7 +243,7 @@
 			IFile file = getProject().getFile(archivePath);
 			if(file.exists())
 				loc  = file.getLocation();
-			else {
+			else if(archivePath.segmentCount() > 1) {
 				file = ResourcesPlugin.getWorkspace().getRoot().getFile(archivePath);
 				if(file.exists())
 					loc = file.getLocation();
@@ -254,7 +259,7 @@
 		File diskFile = new File(osPath);
 		return diskFile;
 	}
-
+	
 	public String toString() {
 		if(archivePath != null){
 			return componentProject + " " +archivePath;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
index 9cd880e..104db30 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -14,12 +14,14 @@
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.wst.common.componentcore.ComponentCore;
@@ -27,6 +29,7 @@
 import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory;
 import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage;
 import org.eclipse.wst.common.componentcore.internal.DependencyType;
+import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
 import org.eclipse.wst.common.componentcore.internal.Property;
 import org.eclipse.wst.common.componentcore.internal.ReferencedComponent;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
@@ -105,7 +108,15 @@
             List propList = component.getProperties();
             if(propList != null) {
                 for (int i = 0; i < propList.size(); i++) {
-                    props.setProperty(((Property)propList.get(i)).getName(), ((Property)propList.get(i)).getValue());
+                	Property property = (Property)propList.get(i);
+                	String name = property.getName();
+                	String value = property.getValue();
+                	if(value == null){
+                		value = ""; //$NON-NLS-1$
+                		String message = "WARNING:  The component file in "+getProject().getName()+" has no value defined for the property: "+name;  //$NON-NLS-1$//$NON-NLS-2$
+                		ModulecorePlugin.logError(IStatus.ERROR, message, null);
+                	}
+                    props.setProperty(name, value);
                 }
             }
             return props; 
@@ -195,9 +206,11 @@
 		List metaResources = new ArrayList();
 		try {
 			moduleCore = StructureEdit.getStructureEditForRead(getProject());
-			WorkbenchComponent component = moduleCore.getComponent();
-			if (component != null)
-				metaResources.addAll(component.getMetadataResources());
+			if (moduleCore != null) {
+				WorkbenchComponent component = moduleCore.getComponent();
+				if (component != null)
+					metaResources.addAll(component.getMetadataResources());
+			}
 		} finally {
 			if (moduleCore != null) {
 				moduleCore.dispose();
@@ -255,6 +268,10 @@
 		}
 	}	
 
+	public IVirtualReference[] getReferences(Map<String, Object> options) {
+		return getReferences();
+	}
+	
 	public IVirtualReference[] getReferences() { 
 		StructureEdit core = null;
 		List references = new ArrayList();
@@ -312,7 +329,9 @@
 				referencedComponent.setArchiveName(references[i].getArchiveName());
 			}
 			//clean up any old obsolete references
-			cleanUpReferences(component);	
+			if (component != null){
+				cleanUpReferences(component);
+			}
 		} finally {
 			if(core != null) {
 				core.saveIfNecessary(null);
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java
index eb9cde6..51f4f15 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -18,7 +18,6 @@
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -32,6 +31,7 @@
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode;
 import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeRoot;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualContainer;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
@@ -122,14 +122,14 @@
 	}
 
 	/**
-	 * @see IFolder#getFile(java.lang.String)
+	 * @see org.eclipse.core.resources.IFolder#getFile(java.lang.String)
 	 */
 	public IVirtualFile getFile(String name) {
 		return new VirtualFile(getProject(), getRuntimePath().append(name));
 	}
 
 	/**
-	 * @see IFolder#getFolder(java.lang.String)
+	 * @see org.eclipse.core.resources.IFolder#getFolder(java.lang.String)
 	 */
 	public IVirtualFolder getFolder(String name) {
 		return ComponentCore.createFolder(getProject(), getRuntimePath().append(name));
@@ -156,7 +156,10 @@
 		List virtualResources = new ArrayList(); // result
 		Set allNames = new HashSet();
 		// Ignore all meta data paths in the virtual container resource set
-		IPath[] metaPaths = getComponent().getMetaResources();
+		IVirtualComponent component = getComponent();
+		if (component == null)
+		    return new IVirtualResource[0];
+		IPath[] metaPaths = component.getMetaResources();
 		for (int i = 0; i < metaPaths.length; i++) {
 			String localName = getLocalName(metaPaths[i]);
 			if (localName != null)
@@ -240,7 +243,7 @@
 	}
 
 	/**
-	 * @see IFolder#createLink(org.eclipse.core.runtime.IPath, int,
+	 * @see org.eclipse.core.resources.IFolder#createLink(org.eclipse.core.runtime.IPath, int,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public void createLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualFile.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualFile.java
index 57480a2..ee9ec04 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualFile.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -14,7 +14,6 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
@@ -42,7 +41,7 @@
 	}
 
 	/**
-	 * @see IFolder#createLink(org.eclipse.core.runtime.IPath, int,
+	 * @see org.eclipse.core.resources.IFolder#createLink(org.eclipse.core.runtime.IPath, int,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public void createLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java
index 272cbb4..007b1ce 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualResource.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualResource.java
index c5ec204..5f637f9 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualResource.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualResource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -45,7 +45,7 @@
 	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
 	private IVirtualComponent component;
 	private String resourceType;
-	
+
 	private final ResourceTimestampMappings mapping = new ResourceTimestampMappings();
 
 
@@ -70,7 +70,8 @@
 			WorkbenchComponent aComponent = moduleCore.getComponent();
 			ComponentResource[] resources = aComponent.findResourcesByRuntimePath(getRuntimePath());
 			aComponent.getResources().removeAll(Arrays.asList(resources));
-		} finally {
+		}
+		finally {
 			if (moduleCore != null) {
 				moduleCore.saveIfNecessary(monitor);
 				moduleCore.dispose();
@@ -82,12 +83,13 @@
 	protected abstract void doDeleteRealResources(int updateFlags, IProgressMonitor monitor) throws CoreException;
 
 	public boolean exists() {
-		// verify all underlying resources exist for the virtual resource to exist
+		// verify all underlying resources exist for the virtual resource to
+		// exist
 		IResource[] resources = getUnderlyingResources();
-		if (resources==null || resources.length==0)
+		if (resources == null || resources.length == 0)
 			return false;
-		for (int i=0; i<resources.length; i++) {
-			if (resources[i]==null || !resources[i].exists())
+		for (int i = 0; i < resources.length; i++) {
+			if (resources[i] == null || !resources[i].exists())
 				return false;
 		}
 		return true;
@@ -112,11 +114,12 @@
 	}
 
 	public IPath[] getProjectRelativePaths() {
- 
+
 		WorkbenchComponent aComponent = getReadOnlyComponent();
 		if (aComponent != null) {
 			ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(aComponent);
-			// still need some sort of loop here to search subpieces of the runtime path.
+			// still need some sort of loop here to search subpieces of the
+			// runtime path.
 			ComponentResource[] componentResources = null;
 
 			if (root != null) {
@@ -124,29 +127,32 @@
 				IPath searchPath = null;
 				do {
 					searchPath = (searchPath == null) ? getRuntimePath() : searchPath.removeLastSegments(1);
+					if (searchPath.isAbsolute())
+						searchPath = searchPath.makeRelative();
 					componentResources = root.findModuleResources(searchPath, ResourceTreeNode.CREATE_NONE);
 					estimatedPaths = findBestMatches(componentResources);
-				} while (estimatedPaths.length==0 && canSearchContinue(componentResources, searchPath));
-				if (estimatedPaths==null || estimatedPaths.length==0)
-					return new IPath[] {getRuntimePath()};
+				}
+				while (estimatedPaths.length == 0 && canSearchContinue(componentResources, searchPath));
+				if (estimatedPaths == null || estimatedPaths.length == 0)
+					return new IPath[]{getRuntimePath()};
 				return estimatedPaths;
 			}
-		} 
- 
-		return new IPath[] {getRuntimePath()};
+		}
+
+		return new IPath[]{getRuntimePath()};
 	}
 
-	public IPath getProjectRelativePath() { 
-		if (getRuntimePath().equals(new Path("/"))) { 
+	public IPath getProjectRelativePath() {
+		if (getRuntimePath().equals(new Path("/"))) {
 			WorkbenchComponent aComponent = getReadOnlyComponent();
 			if (aComponent != null) {
 				if (((WorkbenchComponentImpl) aComponent).getDefaultSourceRoot() != null)
 					return ((WorkbenchComponentImpl) aComponent).getDefaultSourceRoot();
-			} 
+			}
 		}
 		return getProjectRelativePaths()[0];
 	}
-	
+
 	private boolean canSearchContinue(ComponentResource[] componentResources, IPath searchPath) {
 		return (searchPath.segmentCount() > 0);
 	}
@@ -164,7 +170,7 @@
 				if (currentPath.segmentCount() == aRuntimePath.segmentCount()) {
 					result.add(theComponentResources[i].getSourcePath());
 					continue;
-				}	
+				}
 				currentMatchLength = currentPath.matchingFirstSegments(aRuntimePath);
 				if (currentMatchLength == currentPath.segmentCount() && currentMatchLength > bestMatchLength) {
 					bestMatchLength = currentMatchLength;
@@ -174,15 +180,15 @@
 				}
 			}
 		}
-		if (result.size()>0)
+		if (result.size() > 0)
 			return (IPath[]) result.toArray(new IPath[result.size()]);
 		if (estimatedPath == null)
-			return new IPath[] {};
-		return new IPath[] {estimatedPath};
+			return new IPath[]{};
+		return new IPath[]{estimatedPath};
 	}
 
 	public String getName() {
-		if (getRuntimePath().segmentCount()>0)
+		if (getRuntimePath().segmentCount() > 0)
 			return getRuntimePath().lastSegment();
 		return getRuntimePath().toString();
 	}
@@ -192,8 +198,8 @@
 			component = ComponentCore.createComponent(getProject());
 		return component;
 	}
-    
-	//returns null if the folder is already the root folder
+
+	// returns null if the folder is already the root folder
 	public IVirtualContainer getParent() {
 		if (getRuntimePath().segmentCount() >= 1)
 			return ComponentCore.createFolder(getProject(), getRuntimePath().removeLastSegments(1));
@@ -241,25 +247,25 @@
 	}
 
 	public void setResourceType(String aResourceType) {
-		resourceType = aResourceType; 
+		resourceType = aResourceType;
 		WorkbenchComponent aComponent = getReadOnlyComponent();
 		ComponentResource[] resources = aComponent.findResourcesByRuntimePath(getRuntimePath());
 		for (int i = 0; i < resources.length; i++) {
 			resources[i].setResourceType(aResourceType);
 		}
-		 
+
 	}
 
 	// TODO Fetch the resource type from the model.
 	public String getResourceType() {
-		if (null == resourceType) { 
+		if (null == resourceType) {
 			WorkbenchComponent aComponent = getReadOnlyComponent();
 			ComponentResource[] resources = aComponent.findResourcesByRuntimePath(getRuntimePath());
 			for (int i = 0; i < resources.length; i++) {
 				resourceType = resources[i].getResourceType();
 				return resourceType;
 			}
-			 
+
 		}
 		resourceType = ""; //$NON-NLS-1$
 		return resourceType;
@@ -281,48 +287,58 @@
 		return aRuntimePath.isPrefixOf(getRuntimePath());
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.common.componentcore.resources.IVirtualResource#removeLink(org.eclipse.core.runtime.IPath, int, org.eclipse.core.runtime.IProgressMonitor)
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.wst.common.componentcore.resources.IVirtualResource#removeLink(org.eclipse.core.runtime.IPath,
+	 *      int, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public void removeLink(IPath aProjectRelativeLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
 		StructureEdit moduleCore = null;
 		try {
 			moduleCore = StructureEdit.getStructureEditForWrite(getProject());
 			WorkbenchComponent component = moduleCore.getComponent();
-			ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
-			ComponentResource[] resources = root.findModuleResources(getRuntimePath(), ResourceTreeNode.CREATE_NONE);
-			if (resources.length > 0) {
-				for (int resourceIndx = 0; resourceIndx < resources.length; resourceIndx++) {
-					if (aProjectRelativeLocation.makeAbsolute().equals(resources[resourceIndx].getSourcePath())) {
-						component.getResources().remove(resources[resourceIndx]);
+			if (component != null) {
+				ResourceTreeRoot root = ResourceTreeRoot.getDeployResourceTreeRoot(component);
+				ComponentResource[] resources = root.findModuleResources(getRuntimePath(), ResourceTreeNode.CREATE_NONE);
+				if (resources.length > 0) {
+					for (int resourceIndx = 0; resourceIndx < resources.length; resourceIndx++) {
+						if (aProjectRelativeLocation.makeAbsolute().equals(resources[resourceIndx].getSourcePath())) {
+							component.getResources().remove(resources[resourceIndx]);
+						}
 					}
 				}
 			}
-		} finally {
+		}
+		finally {
 			if (moduleCore != null) {
-				moduleCore.saveIfNecessary(monitor);
+				if (component != null)
+					moduleCore.saveIfNecessary(monitor);
 				moduleCore.dispose();
 			}
 		}
 	}
-	
+
 	protected final WorkbenchComponent getReadOnlyComponent() {
-		if(!mapping.hasChanged(getProject()) && mapping.hasCacheData(getProject()))
+		if (!mapping.hasChanged(getProject()) && mapping.hasCacheData(getProject()))
 			return (WorkbenchComponent) mapping.getData(getProject());
-		
+
 		StructureEdit moduleCore = null;
 		WorkbenchComponent component = null;
 		try {
 			moduleCore = StructureEdit.getStructureEditForRead(getProject());
-			component = moduleCore.getComponent();
-			mapping.mark(getProject(), component);
-		} finally {
-			if (moduleCore != null) { 
+			if (moduleCore != null) {
+				component = moduleCore.getComponent();
+				mapping.mark(getProject(), component);
+			}
+		}
+		finally {
+			if (moduleCore != null) {
 				moduleCore.dispose();
 			}
 		}
 		return component;
-		
-			
+
+
 	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java
index a37da71..14d94f8 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -19,14 +19,11 @@
 import org.eclipse.wst.common.componentcore.ArtifactEdit;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
-import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
 import org.eclipse.wst.common.componentcore.internal.impl.ArtifactEditModelFactory;
 import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.internal.emfworkbench.edit.EditModelRegistry;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
-import org.eclipse.wst.common.project.facet.core.IFacetedProject;
-import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 
 /**
  * <p>
@@ -36,9 +33,9 @@
  * Adapts {@see ArtifactEditModel} to an {@see ArtifactEdit) 
  * instance facade, if possible. The following class is 
  * registered with the Platform Adapter Manager in 
- * {@see ModulecorePlugin#start(BundleContext)}
+ * {@see org.eclipse.wst.common.componentcore.internal.ModulecorePlugin#start(BundleContext)}
  * </p>
- * @see ModulecorePlugin
+ * @see org.eclipse.wst.common.componentcore.internal.ModulecorePlugin
  */
 public class ArtifactEditAdapterFactory implements IAdapterFactory {
 
@@ -61,7 +58,6 @@
 				Map params = new HashMap();
 				params.put(ArtifactEditModelFactory.PARAM_MODULE_URI, componentURI);
 				try {
-					IFacetedProject facetedProject = ProjectFacetsManager.create(aProject);
 					String[] editModelIDs = EditModelRegistry.getInstance().getRegisteredEditModelIDs();
 					for (int i=0; i<editModelIDs.length; i++) {
 						try {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditRegistryReader.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditRegistryReader.java
index 96c7895..1eb05c3 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditRegistryReader.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ArtifactEditRegistryReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
index 01dd80a..60a9feb 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
  *******************************************************************************/
@@ -43,7 +43,7 @@
 	private static final String ATT_CLASS = "class"; //$NON-NLS-1$
 
 	private static final ComponentImplManager instance = new ComponentImplManager();
-	private static final Object LOAD_FAILED = new Object();
+//	private static final Object LOAD_FAILED = new Object();
 
 	private final Map/* <String, ComponentImplDescriptor> */ descriptors = new Hashtable();
 
@@ -169,6 +169,23 @@
 		return new VirtualComponent(project, new Path("/")); //$NON-NLS-1$
 	}
 
+	public IVirtualComponent createComponent(IProject project, boolean checkSettings) {
+		if  (checkSettings)
+			return createComponent(project);
+		try {
+			IComponentImplFactory factory = findFactoryForProject(project);
+			if(null != factory){
+				return factory.createComponent(project);
+			}
+		} catch (Exception e) {
+			// Just return a default component
+		}
+		if (ModuleCoreNature.getModuleCoreNature(project) == null){
+			return null;
+		}
+		return new VirtualComponent(project, new Path("/")); //$NON-NLS-1$
+	}
+
 	public IVirtualComponent createArchiveComponent(IProject aProject, String aComponentName) {
 		try {
 			IComponentImplFactory factory = findFactoryForProject(aProject);
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentResolver.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentResolver.java
index 8580398..94f8334 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentResolver.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentResolver.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2005 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *     
@@ -13,6 +13,7 @@
 
 import java.net.MalformedURLException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 
 import org.eclipse.core.resources.IFile;
@@ -144,6 +145,20 @@
 			// Continue resolving
 		}
 
+		/* Check for a URI without a scheme, but with a host */
+		try
+		{
+			URI uri = new URI(systemId);
+			if ((uri.getScheme() == null) && (uri.getHost() != null))
+			{
+				return null;
+			}
+		}
+		catch (URISyntaxException use)
+		{
+			// do nothing- we need to check to see if this is a local file
+		}
+
 		/* Check for a system file name as the system reference. */
 		IPath systemPath = new Path(systemId);
 		if (systemPath.toFile().exists()) {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
index a9596d6..0ddeaf9 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -12,8 +12,11 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
+import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -23,6 +26,7 @@
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -31,6 +35,7 @@
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
+import org.eclipse.wst.common.componentcore.datamodel.properties.IServerContextRootDataModelProperties;
 import org.eclipse.wst.common.componentcore.internal.Property;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
@@ -114,8 +119,12 @@
 			return null;
 		IVirtualFolder root = comp.getRootFolder();
 		IVirtualResource file = root.findMember(aPath);
-		if (file != null)
-			return (IFile) file.getUnderlyingResource();
+		if (file != null && file.getType() == IVirtualResource.FILE){
+			IResource resource = file.getUnderlyingResource();
+			if(resource.getType() == IResource.FILE){
+				return (IFile) resource;
+			}
+		}
 		return null;
 	}
 
@@ -211,6 +220,18 @@
 		modHandlesList.addAll(targetComponentProjects);
 		model.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST, modHandlesList);
 		model.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH,"/WEB-INF/lib"); //$NON-NLS-1$
+		if(modHandlesList != null){
+			Map map = new HashMap();
+			for(int i=0; i<modHandlesList.size();i++){
+				IVirtualComponent comp = (IVirtualComponent)modHandlesList.get(i);
+				String uri = comp.getName().replace(' ', '_') + ".jar";
+				map.put(comp, uri);
+			}
+			if(map.size() > 0){
+				model.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_TO_URI_MAP, map);
+			}
+		}
+		
 		return new CreateReferenceComponentsOp(model);
 	}
 
@@ -305,19 +326,37 @@
 	 * 
 	 * @param contextRoot string
 	 */
-	public static void setServerContextRoot(IProject project, String contextRoot) {
-		IVirtualComponent comp = ComponentCore.createComponent(project);
-		comp.setMetaProperty(IModuleConstants.CONTEXTROOT, contextRoot);
+	public static void setServerContextRoot(IProject project, String newContextRoot) {
+		
+		IDataModel model = DataModelFactory.createDataModel(IServerContextRootDataModelProperties.class);
+		model.setProperty(IServerContextRootDataModelProperties.PROJECT, project);
+		model.setStringProperty(IServerContextRootDataModelProperties.CONTEXT_ROOT,
+				newContextRoot);
+		
+		try {
+			model.getDefaultOperation().execute(new NullProgressMonitor(), null);
+		}
+		catch (ExecutionException e) {
+			org.eclipse.wst.common.componentcore.internal.ModulecorePlugin.logError(e);
+		}
 	}
 
+	/**
+	 * @deprecated use {@link #getDeployUriOfComponent(IVirtualReference, String)}
+	 * @param reference
+	 * @return
+	 */
 	public static String getDeployUriOfUtilComponent(IVirtualReference reference){
+		return ComponentUtilities.getDeployUriOfComponent(reference, ".jar"); //$NON-NLS-1$
+	}
+
+	public static String getDeployUriOfComponent(IVirtualReference reference, String extension) {
 		String archiveName = reference.getArchiveName();
 		String uri = null;
-		if( archiveName != null && archiveName != "" ){ //$NON-NLS-1$
+		if( archiveName != null && !archiveName.equals("") ){ //$NON-NLS-1$
 			uri = reference.getRuntimePath() + "/" + reference.getArchiveName(); //$NON-NLS-1$
 		}else{
-			uri = reference.getRuntimePath() + "/" + reference.getReferencedComponent().getProject().getName() + ".jar"; //$NON-NLS-1$ //$NON-NLS-2$
+			uri = reference.getRuntimePath() + "/" + reference.getReferencedComponent().getProject().getName() + extension; //$NON-NLS-1$
 		}
 		return uri;
-	}
-}
+	}}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/EclipseResourceAdapter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/EclipseResourceAdapter.java
index 9ca6d48..0109525 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/EclipseResourceAdapter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/EclipseResourceAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -29,8 +29,7 @@
 public class EclipseResourceAdapter extends AdapterImpl implements Adapter {
 
 	public static final Class ADAPTER_TYPE = EclipseResourceAdapter.class;
-	private IResource resource;
-	private boolean hasSearchFailed = false;
+	private IResource resource; 
 
 	/*
 	 * (non-Javadoc)
@@ -41,29 +40,28 @@
 		if (aNotification.getFeature() == ComponentcorePackage.eINSTANCE.getComponentResource_SourcePath()) {
 			if (aNotification.getEventType() == Notification.SET) {
 				resource = null;
-				hasSearchFailed = false;
+				
 			}
 		}
 	}
 
-	public IResource getEclipseResource() {
-		IProject container = null;
-		if (resource != null || hasSearchFailed)
-			return resource;
+	public IResource getEclipseResource() { 
 		synchronized (this) {
 			if (resource == null) {
+
+				IProject container = null;
 				ComponentResource moduleResource = (ComponentResource) getTarget();
-				IPath sourcePath = moduleResource.getSourcePath();
-				if (moduleResource.getOwningProject() != null)
-					container = moduleResource.getOwningProject();
-				else
-					container = StructureEdit.getContainingProject(moduleResource.getComponent());
-				if (container != null)
-					resource = container.findMember(sourcePath); 
-				if(resource == null)
-					resource = ResourcesPlugin.getWorkspace().getRoot().findMember(sourcePath); 
-				
-				hasSearchFailed = resource == null;
+				if (moduleResource != null) {
+					IPath sourcePath = moduleResource.getSourcePath();
+					if (moduleResource.getOwningProject() != null)
+						container = moduleResource.getOwningProject();
+					else
+						container = StructureEdit.getContainingProject(moduleResource.getComponent());
+					if (container != null)
+						resource = container.findMember(sourcePath); 
+					if(resource == null)
+						resource = ResourcesPlugin.getWorkspace().getRoot().findMember(sourcePath);
+				}
 			}
 		}
 		return resource;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java
index f7b59a5..8fba627 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
@@ -20,6 +20,7 @@
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResource;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 import org.eclipse.wst.common.internal.emf.resource.TranslatorPath;
 
@@ -64,14 +65,33 @@
 	 * @see org.eclipse.wst.common.internal.emf.resource.Translator#convertStringToValue(java.lang.String,
 	 *      org.eclipse.emf.ecore.EObject)
 	 */
-	public Object convertStringToValue(String aValue, EObject anOwner) { 
-		WorkbenchComponent earComp = (WorkbenchComponent)anOwner.eContainer();
-		IVirtualComponent virtualComp = ComponentCore.createComponent(StructureEdit.getContainingProject(earComp));
-		ArtifactEdit edit = (ArtifactEdit)virtualComp.getAdapter(ArtifactEdit.class);
-		if (edit == null) return null;
-		if( edit.getContentModelRoot() == null ) return null;
-		Resource res = edit.getContentModelRoot().eResource();
-		return res.getEObject(aValue);
+	public Object convertStringToValue(String aValue, EObject anOwner) {
+		Object retVal = null;
+		if (aValue != null)
+		{
+			Resource res = null;
+			try {
+				WorkbenchComponent earComp = (WorkbenchComponent)anOwner.eContainer();
+				IVirtualComponent virtualComp = ComponentCore.createComponent(StructureEdit.getContainingProject(earComp));
+				ArtifactEdit edit = (ArtifactEdit)virtualComp.getAdapter(ArtifactEdit.class);
+				if (edit != null)
+				{
+					EObject contentModelRoot = edit.getContentModelRoot(); 
+					if( contentModelRoot != null )
+					{
+						res = contentModelRoot.eResource();
+						if (res != null && res instanceof CompatibilityXMIResource)
+							retVal = res.getEObject(aValue);
+					}
+				}
+			} finally {
+//			if ((res != null) && res.getResourceSet() != null) {
+//				res.getResourceSet().getResources().remove(res);
+//				res.unload();
+//			}
+			}
+		}
+		return retVal;
 	}
 
 	/*
@@ -82,8 +102,14 @@
 	 */
 	public String convertValueToString(Object aValue, EObject anOwner) { 
 		String frag = null;
-		if (((EObject)aValue).eResource() != null)
-			frag = ((EObject)aValue).eResource().getURIFragment((EObject)aValue);
+		Resource theResource = ((EObject)aValue).eResource();
+		if (theResource != null)
+		{
+			if (theResource instanceof CompatibilityXMIResource)
+				frag = theResource.getURIFragment((EObject)aValue);
+			else
+				frag = null;
+		}
 		else
 			frag = EcoreUtil.getID((EObject)aValue);
 		return frag;
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IComponentImplFactory.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IComponentImplFactory.java
index f38b3f5..8673b16 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IComponentImplFactory.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IComponentImplFactory.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IModuleConstants.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IModuleConstants.java
index a124150..f1c98d0 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IModuleConstants.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/IModuleConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -25,6 +25,7 @@
 	public final static String COMPONENT_FILE_NAME = ".component"; //$NON-NLS-1$
 	public final static Path COMPONENT_FILE_PATH = new Path(StructureEdit.MODULE_META_FILE_NAME);
     public final static String WTPMODULE_FILE_NAME = ".wtpmodules"; //$NON-NLS-1$
+    public final static Path R1_MODULE_META_FILE_PATH = new Path(".settings/.component"); //$NON-NLS-1$
 	public final static Path WTPMODULE_FILE_PATH = new Path(WTPMODULE_FILE_NAME);
 	public final static String MODULE_PLUG_IN_ID = "org.eclipse.wst.common.modulecore"; //$NON-NLS-1$
 	public final static String MODULE_NATURE_ID = "org.eclipse.wst.common.modulecore.ModuleCoreNature"; //$NON-NLS-1$
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java
index f2210ca..b88af6b 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesXmlMapperI.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesXmlMapperI.java
index 13d7c17..9ed9de9 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesXmlMapperI.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesXmlMapperI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ZipFileExporter.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ZipFileExporter.java
index 7be0c31..cc0a5b6 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ZipFileExporter.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ZipFileExporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -28,7 +28,6 @@
  */
 public class ZipFileExporter {
 	private ZipOutputStream outputStream;
-	private StringBuffer manifestContents;
 
 	private boolean useCompression = true;
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
index d07c71f..7de081d 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualReference.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualReference.java
index fd25628..6ef2274 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualReference.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
diff --git a/plugins/org.eclipse.wst.common.modulecore/plugin.properties b/plugins/org.eclipse.wst.common.modulecore/plugin.properties
index aef7448..883476b 100644
--- a/plugins/org.eclipse.wst.common.modulecore/plugin.properties
+++ b/plugins/org.eclipse.wst.common.modulecore/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
+# Copyright (c) 2003, 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
@@ -9,3 +9,8 @@
 # IBM Corporation - initial API and implementation
 ###############################################################################
 provider=Eclipse.org
+
+Bundle-Name.0 = Modulecore Plug-in
+ValidationMarker.name=ModuleCore Validation Marker
+Validator.name=ModuleCore Validator
+Nature.name=Web Properties
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore/plugin.xml b/plugins/org.eclipse.wst.common.modulecore/plugin.xml
index 2c2fd98..569dd44 100644
--- a/plugins/org.eclipse.wst.common.modulecore/plugin.xml
+++ b/plugins/org.eclipse.wst.common.modulecore/plugin.xml
@@ -15,7 +15,7 @@
    <!--============================-->
    <extension
          id="ModuleCoreNature"
-         name="Web Properties"
+         name="%Nature.name"
          point="org.eclipse.core.resources.natures">
       <runtime>
          <run
@@ -70,13 +70,13 @@
     <factory 
       class="org.eclipse.wst.common.componentcore.datamodel.FacetDataModelConfigAdapter$Factory" 
       adaptableType="org.eclipse.wst.common.frameworks.datamodel.IDataModel">
-      <adapter type="org.eclipse.wst.common.project.facet.core.IActionConfig"/>
+      <adapter type="org.eclipse.wst.common.project.facet.core.ActionConfig"/>
     </factory>
   </extension>
   
   <extension
          id="ModuleCoreValidator"
-         name="ModuleCore Validator"
+         name="%Validator.name"
          point="org.eclipse.wst.validation.validator">
       <validator>
       	<projectNature
@@ -106,7 +106,7 @@
 
 <extension
          id="ModuleCoreValidatorMarker"
-         name="ModuleCore Validation Marker"
+         name="%ValidationMarker.name"
          point="org.eclipse.core.resources.markers">
       <super
             type="org.eclipse.wst.validation.problemmarker">
diff --git a/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd b/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd
index 2ec75cf..667317e 100644
--- a/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd
+++ b/plugins/org.eclipse.wst.common.modulecore/schema/componentimpl.exsd
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.modulecore">
+<schema targetNamespace="org.eclipse.wst.common.modulecore" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
-      <appInfo>
+      <appinfo>
          <meta.schema plugin="org.eclipse.wst.common.modulecore" id="componentimpl" name="componentimpl"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter description of this extension point.]
       </documentation>
@@ -33,9 +33,9 @@
                <documentation>
                   
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute translatable="true"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -50,65 +50,55 @@
                </documentation>
             </annotation>
          </attribute>
-         <attribute name="class" use="required">
+         <attribute name="class" type="string" use="required">
             <annotation>
                <documentation>
                   
                </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.wst.common.componentcore.resources.IVirtualComponent"/>
+               </appinfo>
             </annotation>
-            <simpleType>
-               <restriction base="string">
-                  <enumeration value="instanceof IVirtualComponent">
-                  </enumeration>
-               </restriction>
-            </simpleType>
          </attribute>
       </complexType>
    </element>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="since"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter the first release in which this extension point appears.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="examples"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter extension point usage example here.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="apiInfo"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter API information here.]
       </documentation>
    </annotation>
 
+
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="implementation"/>
-      </appInfo>
+      </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/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd b/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd
index 08cf3b5..49f7a80 100644
--- a/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd
+++ b/plugins/org.eclipse.wst.common.modulecore/schema/resourceFactories.exsd
@@ -1,16 +1,21 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.modulecore">
+<schema targetNamespace="org.eclipse.wst.common.modulecore" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
-      <appInfo>
+      <appinfo>
          <meta.schema plugin="org.eclipse.wst.common.modulecore" id="resourceFactories" name="Resource Factory Association (Internal)"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          An *internal* extension point that declares an association between a short-segment filename and a Resource.Factory.
       </documentation>
    </annotation>
 
    <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="resourceFactory"/>
@@ -34,9 +39,9 @@
                <documentation>
                   
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute translatable="true"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -45,24 +50,64 @@
    <element name="resourceFactory">
       <annotation>
          <documentation>
-            Associates a short name (e.g. &quot;web.xml&quot;) with the appropriate Resource.Factory to create the Resource type when loading files of the declared shortname. 
+            Associates a short name (e.g. &quot;web.xml&quot;) with the appropriate Resource.Factory to create the Resource type when loading files of the declared shortname.
          </documentation>
       </annotation>
       <complexType>
+         <sequence>
+            <element ref="contentTypeBinding" minOccurs="0" maxOccurs="1"/>
+         </sequence>
          <attribute name="class" type="string" use="required">
             <annotation>
                <documentation>
                   Declares an implementation of &lt;code&gt;org.eclipse.emf.ecore.resource.Resource.Factory&lt;/code&gt;.
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute kind="java" basedOn="org.eclipse.emf.ecore.resource.Resource.Factory"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
-         <attribute name="shortSegment" type="string" use="required">
+         <attribute name="shortSegment" type="string">
             <annotation>
                <documentation>
-                  Declares the short segment of a filename that the resource factory applies to (e.g. &quot;web.xml&quot;).
+                  Optionally declares the short segment of a filename that the resource factory applies to (e.g. &quot;web.xml&quot;).
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="isDefault" type="boolean" use="default" value="true">
+            <annotation>
+               <documentation>
+                  If multiple factories are declared for the same fileName - then the &quot;default&quot; is used.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="overridesFactoryClass" type="string">
+            <annotation>
+               <documentation>
+                  This optional attribute is to resolve conflicts between multiple defeault factories registered to the same content type and short segments.  The value should be the fully qualified class name of the factory being overridden.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.emf.ecore.resource.Resource.Factory:"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="contentTypeBinding">
+      <annotation>
+         <appinfo>
+            <meta.element labelAttribute="contentTypeId"/>
+         </appinfo>
+         <documentation>
+            Advertises that the containing editor understands the given content type and is suitable for editing files of that type.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="contentTypeId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The content type identifier. This is an ID defined by the &apos;org.eclipse.core.runtime.contentTypes&apos; extension point.
                </documentation>
             </annotation>
          </attribute>
@@ -70,48 +115,40 @@
    </element>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="since"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter the first release in which this extension point appears.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="examples"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter extension point usage example here.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="apiInfo"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          [Enter API information here.]
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="implementation"/>
-      </appInfo>
+      </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/plugins/org.eclipse.wst.common.ui/.classpath b/plugins/org.eclipse.wst.common.ui/.classpath
deleted file mode 100644
index 77e85b1..0000000
--- a/plugins/org.eclipse.wst.common.ui/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="src-search"/>
-	<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/plugins/org.eclipse.wst.common.ui/.cvsignore b/plugins/org.eclipse.wst.common.ui/.cvsignore
deleted file mode 100644
index 7cf79b0..0000000
--- a/plugins/org.eclipse.wst.common.ui/.cvsignore
+++ /dev/null
@@ -1,8 +0,0 @@
-bin
-ui.jar
-build.xml
-temp.folder
-org.eclipse.wst.common.ui_1.0.0.jar
-@dot
-src.zip
-javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.ui/.project b/plugins/org.eclipse.wst.common.ui/.project
deleted file mode 100644
index 8f557ef..0000000
--- a/plugins/org.eclipse.wst.common.ui/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.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.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.wst.common.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 6830385..0000000
--- a/plugins/org.eclipse.wst.common.ui/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,59 +0,0 @@
-#Mon Jan 30 23:41:58 EST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.common.ui/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 48a6a5c..0000000
--- a/plugins/org.eclipse.wst.common.ui/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon Jan 30 23:11:49 EST 2006
-eclipse.preferences.version=1
-internal.default.compliance=default
diff --git a/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index d34dd9c..0000000
--- a/plugins/org.eclipse.wst.common.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,24 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.wst.common.ui; singleton:=true
-Bundle-Version: 1.1.200.qualifier
-Bundle-Activator: org.eclipse.wst.common.ui.internal.UIPlugin
-Bundle-Vendor: %pluginProvider
-Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.common.ui.internal;x-internal:=true,
- org.eclipse.wst.common.ui.internal.dialogs;x-internal:=true,
- org.eclipse.wst.common.ui.internal.dnd;x-internal:=true,
- org.eclipse.wst.common.ui.internal.search;x-internal:=true,
- org.eclipse.wst.common.ui.internal.search.dialogs,
- org.eclipse.wst.common.ui.internal.viewers;x-internal:=true,
- org.eclipse.wst.common.ui.provisional.editors
-Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,3.4.0)",
- org.eclipse.ui;bundle-version="[3.2.0,3.4.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,3.4.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,3.4.0)",
- org.eclipse.search;bundle-version="[3.2.0,3.4.0)",
- org.eclipse.wst.common.core;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.jface.text;bundle-version="[3.2.0,3.4.0)",
- org.eclipse.ui.workbench.texteditor;bundle-version="[3.2.0,3.4.0)"
-Eclipse-LazyStart: true
diff --git a/plugins/org.eclipse.wst.common.ui/README.txt b/plugins/org.eclipse.wst.common.ui/README.txt
deleted file mode 100644
index 4fc93df..0000000
--- a/plugins/org.eclipse.wst.common.ui/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-UI Utility classes for actions, drag'n'drop and wizards.
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.ui/about.html b/plugins/org.eclipse.wst.common.ui/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.wst.common.ui/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/plugins/org.eclipse.wst.common.ui/build.properties b/plugins/org.eclipse.wst.common.ui/build.properties
deleted file mode 100644
index 450648e..0000000
--- a/plugins/org.eclipse.wst.common.ui/build.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-bin.includes = plugin.properties,\
-               plugin.xml,\
-               .,\
-               META-INF/,\
-               about.html
-jars.compile.order = .
-source.. = src/,\
-           src-search/
-output.. = bin/
-src.includes = component.xml
diff --git a/plugins/org.eclipse.wst.common.ui/component.xml b/plugins/org.eclipse.wst.common.ui/component.xml
deleted file mode 100644
index d3d9ccc..0000000
--- a/plugins/org.eclipse.wst.common.ui/component.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component xmlns="http://eclipse.org/wtp/releng/tools/component-model"
-	name="org.eclipse.wst.common">
-	<component-depends unrestricted="true"></component-depends>
-	<plugin id="org.eclipse.wst.common.ui" fragment="false" />
-	<plugin id="org.eclipse.wst.common.ui.properties" fragment="false" />
-	<plugin id="org.eclipse.wst.common.uriresolver" fragment="false" />
-	
-<!--	<description url="http://eclipse.org/webtools/wst/components/common/overview.html" /> -->
-
-<!--	<package name="org.eclipse.wst.common.ui.viewers"> -->
-<!--		<type name="SelectSingleFileView" />  -->  <!-- ?, does eclipse provide better support? -->
-<!--		<type name="ResourceFilter" /> -->
-<!--		<type name="SelectMultiFilePage" /> -->
-<!--		<type name="SelectSingleFilePage" /> -->
-<!--		<type name="TableNavigator" /> -->       <!-- No, should be in eclipse base -->
-<!--		<type name="NavigableTableViewer" /> --> <!-- No, should be in eclipse base -->
-<!--	</package> -->
-<!--	<package name="org.eclipse.wst.common.ui.actionhandler.action"> -->
-<!--		<type name="CutAction" />  -->    <!-- No to these four,  should be removed? -->
-<!--		<type name="PasteAction" /> -->
-<!--		<type name="CopyAction" />  -->
-<!--		<type name="EditAction" /> -->
-<!--	</package>  -->
-<!--	<package name="org.eclipse.wst.common.ui"> -->
-<!--  	<type name="UIPlugin" />  -->    <!-- No, delete this -->
-<!-- 	<type name="OverlayIconManager" />  --> <!--  No -->
-<!--  	<type name="WindowUtility" />  -->   <!-- Remove class, clean up xsd.ui -->
-<!--    <type name="ImageFactory" />  -->   <!-- No -->
-<!--	</package> -->
-<!--	<package name="org.eclipse.wst.common.ui.wizards">  -->
-<!--  		<type name="ExampleProjectCreationOperation" />  -->  <!-- referenced externally only within package (ExampleProjectCreationWizardPage -->
-<!-- 		<type name="ExampleProjectCreationWizardPage" /> --> <!-- referenced externally only within package (ExampleProjectCreationWizard, and Operation -->
-<!--  		<type name="ExampleProjectCreationWizard" />  --> <!-- referenced by XMLExampleProjectCreationWizard, which is deprecated and going to be removed in M4  -->
-<!--	</package> -->
-<!--	<package name="org.eclipse.wst.common.ui.dnd"> -->
-<!--		<type name="ViewerDropAdapter" />  -->
-<!--		<type name="DragAndDropCommand" /> -->  <!-- referenced externally only within package -->
-<!--		<type name="DragAndDropManager" /> -->  <!--   -->
-<!--		<type name="ObjectTransfer" />  -->
-<!--		<type name="DefaultDragAndDropCommand" />  -->
-<!--		<type name="ViewerDragAdapter" /> -->
-<!--	</package>  -->
-<!--	<package name="org.eclipse.wst.common.ui.resource"> -->
-<!--		<type name="ResourceDeleteListener" />  -->  <!-- no references -->
-<!--	</package> -->
-<!--	<package name="org.eclipse.wst.common.ui.dialogs">  -->
-<!--		<type name="SelectSingleFileDialog" />  -->    <!-- No, should look into base for support? -->
-<!--	</package>  -->
-<!--	<package name="org.eclipse.wst.common.ui.actionhandler">
-		<type name="ActionHandlerListener" />
-	</package>
--->
-<!-- provisional APIs -->
-<!--
-	<package name="org.eclipse.wst.common.uriresolver">
-		<type name="URIResolverPlugin"  subclass="false" instantiate="false"/>
-		<type name="URIResolver" implement="false"/>
-		<type name="URIResolverExtension" implement="true"/>
-	</package>
--->
-</component>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.ui/plugin.properties b/plugins/org.eclipse.wst.common.ui/plugin.properties
deleted file mode 100644
index 6a0521d..0000000
--- a/plugins/org.eclipse.wst.common.ui/plugin.properties
+++ /dev/null
@@ -1,157 +0,0 @@
-! Plugin properties
-pluginName               = Eclipse Base UI extensions
-pluginProvider           = Eclipse.org
-
-! SelectSingleFilePage and SelectMultiFilePage
-_UI_LABEL_SOURCE_FILES   = Workbench Files
-_UI_LABEL_SELECTED_FILES = Selected Files
-
-_UI_IMPORT_BUTTON          = Import Files...
-_UI_IMPORT_BUTTON_TOOL_TIP = Import files from file system
-
-
-! SelectMultiFilePage
-! NOTE TO TRANSLATOR: the following three lines refers to _UI_LABEL_SELECTED_FILES label above
-_UI_ADD_BUTTON_TOOL_TIP    = Add files to Selected Files list.
-_UI_REMOVE_BUTTON_TOOL_TIP = Remove files from Selected Files list.
-_UI_REMOVE_ALL_BUTTON_TOOL_TIP =  Remove all files from Selected Files list.
-
-! NOTE TO TRANSLATOR: No translation needed of following three lines
-_UI_ADD_BUTTON             = >
-_UI_REMOVE_BUTTON          = <
-_UI_REMOVE_ALL_BUTTON      = <<
-
-! SelectJavaProjectView
-_UI_LABEL_CHOOSE_FOLDER = Select a project or folder:
-
-! SelectJavaProjectDialog
-_UI_LABEL_FOLDER_SELECTION = Container Selection
-
-! TextViewerOperationAction
-_UI_MENU_COPY         = &Copy
-_UI_MENU_CUT          = Cu&t
-_UI_MENU_DELETE       = Delete
-_UI_MENU_PASTE        = &Paste
-_UI_MENU_PREFIX       = Prefix
-_UI_MENU_REDO         = Redo
-_UI_MENU_SELECT_ALL   = Select All
-_UI_MENU_SHIFT_LEFT   = Shift Left
-_UI_MENU_SHIFT_RIGHT  = Shift Right
-_UI_MENU_STRIP_PREFIX = Strip Prefix
-_UI_MENU_UNDO         = Undo
-
-! SourceViewerGotoLineAction
-_UI_MENU_GOTO_LINE           = Go To Line...
-_UI_GOTO_LINE_DIALOG_TITLE   = Go To Line
-_UI_GOTO_LINE_DIALOG_TEXT    = Enter Line Number
-
-_UI_FILE_CHANGED_TITLE = File Changed
-_UI_FILE_DELETED_SAVE_CHANGES = The file has been deleted from the file system. Do you want to save your changes or close the editor without saving?
-_UI_FILE_DELETED_EDITOR_CLOSED = The file has been deleted from the file system. This editor will be closed.
-_UI_FILE_CHANGED_LOAD_CHANGES = The file has been changed on the file system. Do you want to load the changes?
-_UI_SAVE_BUTTON = Save
-_UI_CLOSE_BUTTON = Close
-
-
-! XSL Prefererence
-_UI_XSLT_SELECT     = Select which element to use for your stylesheet
-_UI_XSLT_STYLESHEET = &Use <xsl:stylesheet>
-_UI_XSLT_TRANSFORM  = U&se <xsl:transform>
-
-! XSL Debug Prefererence
-_UI_XSL_DEBUG_SELECT_LAUNCHER = Set the default XSL launcher for the XSL Debugging and Transformation tool
-_UI_XSL_DEBUG_LOCAL           = &XSL application
-_UI_XSL_DEBUG_REMOTE          = XS&L remote application
-_UI_XSL_TILE_EDITOR           = &Show all debugging files in a tile editor
-_UI_XSL_DEBUG_AND_TRANSFORM   = &Run transformation and open a debugging session
-_UI_XSL_CONTEXT_URI           = Context Path 
-_UI_XSL_CONTEXT               = Specify a &context path for resolving URIs in xsl:import, xsl:include or document()
-
-
-_UI_OVERRIDE_FILE    = Overwrite existing files
-_UI_JAVA_EXIST_FILE1 = The following Java classes already exist.
-_UI_JAVA_EXIST_FILE2 = Do you want to overwrite the existing file?
-      
-! some options strings common to several plugins
-_UI_ERROR_CREATING_FILE_TITLE = Error Creating File
-_UI_ERROR_CREATING_FILE_SHORT_DESC = Error creating file "{0}"
-_UI_ERROR_CREATING_FILE_LONG_DESC = An error occured while attempting to create the file "{0}".
-_UI_PARENT_FOLDER_IS_READ_ONLY = The parent directory "{0}" is read only.
-_UI_UNKNOWN_ERROR_WITH_HINT = Unknown error. Ensure that the parent directory "{0}" is writeable.
-_UI_UNKNOWN_ERROR = Unknown error. Ensure that the parent directory "{0}" is writeable.
-
-! usage - this label is followed by two radio button options for the file location
-_UI_LABEL_INCLUDE_URL_FILE = Select file location
-_UI_RADIO_FILE             = Workbench projects
-_UI_RADIO_URL              = HTTP
-
-_UI_LABEL_COMPONENTS				   = Components:
-_UI_LABEL_QUALIFIER					   = Qualifier:
-
-!- component selection dialogs 
-_UI_LABEL_COMPONENT_NAME			   = Component Name:
-_UI_LABEL_MATCHING_COMPONENTS		   = Matching Components:
-_UI_LABEL_SPECIFIED_FILE			   = Specified File
-_UI_LABEL_ENCLOSING_PROJECT			   = Enclosing Project
-_UI_LABEL_WORKSPACE					   = Workspace
-_UI_LABEL_CURRENT_RESOURCE			   = Current Resource
-_UI_LABEL_SEARCH_SCOPE				   = Search Scope
-_UI_LABEL_NARROW_SEARCH_SCOPE_RESOURCE = Use resource view to narrow search scope
-_UI_LABEL_AVAILABLE_TYPES			   = Available Types
-_UI_LABEL_WORKING_SETS                 = Working Sets
-
-_UI_LABEL_New=New...
-_UI_LABEL_DECLARATION_LOCATION=Declaration Location:
-_UI_LABEL_CHOOSE=Choose...
-
-!======================================================================================
-!
-! Here is the list of Error string that have message IDs - make sure they are unique
-!  Range for b2bgui messageIDs: IWAX1201 - IWAX1400
-!
-!======================================================================================
-
-_ERROR_THE_CONTAINER_NAME = The specified container must exist in the workspace and its path must start at the workspace root.
-
-_ERROR_LOCAL_LOCATION     = The local location of this container cannot be resolved.
-_ERROR_NOT_JAVA_PROJECT   = The specified project is not a Java project.
-
-!NOTE TO TRANSLATOR: this error message text is followed by a message from another plugin
-_ERROR_INVALID_JAVA_PACKAGE = IWAX1201E Invalid package name error:
-
-!NOTE TO TRANSLATOR: (_ERROR_BAD_FILENAME_EXTENSION + string + _UI_LABEL_OR + string) or (_ERROR_BAD_FILENAME_EXTENSION)
-_ERROR_BAD_FILENAME_EXTENSION         = The file name must end with
-_ERROR_FILE_ALREADY_EXISTS            = The same name already exists.
-
-_ERROR_CONTAINER_NOT_JAVA_BUILDPATH = The container is not a Java source folder for this project
-_ERROR_USE_PROJECT_JAVA_SOURCE_FOLDER = The project is not on the build path.  Select a Java source folder for the project.
-
-_UI_ERROR             = Error
-
-!NOTE TO TRANSLATOR: this warning message text is followed by a message from another plugin
-_WARN_INVALID_JAVA_PACKAGE = Invalid package name warning:
-
-_ERROR_ROOT_ELEMENT = The XML schema does not contain any global elements that can be used as a root element.
-_ERROR_SAVING_FILE = Error saving file "{0}"
-
-! File Validator
-_UI_ERROR_VALIDATE_FAIL_TITLE = Failed to check out necessary files
-_UI_ERROR_VALIDATE_FAIL_MESSAGE = Generation failed. Necessary files could not be checked out. 
-
-! PropertyDirtyChangeListener and PropertyResourceChangeListener
-_UI_ERROR_VALIDATE_EDIT_FAIL_ONE_FILE = Error
-
-ExampleProjectCreationWizard.title=New Example Project
-ExampleProjectCreationWizard.op_error.title=Project Creation Failed
-ExampleProjectCreationWizard.op_error.message=Project could not be created.
-
-ExampleProjectCreationWizard.overwritequery.title=Overwrite
-ExampleProjectCreationWizard.overwritequery.message=Do you want to overwrite {0}?
-
-
-ExampleProjectCreationOperation.op_desc=Creating example projects...
-ExampleProjectCreationOperation.op_desc_proj=Configuring project...
-
-ExampleProjectCreationWizardPage.error.alreadyexists=Project already exists.
-SaveFilesDialog_save_all_resources=Save All Modified Resources
-SaveFilesDialog_must_save=All modified resources must be saved before this operation.
diff --git a/plugins/org.eclipse.wst.common.ui/plugin.xml b/plugins/org.eclipse.wst.common.ui/plugin.xml
deleted file mode 100644
index f00b632..0000000
--- a/plugins/org.eclipse.wst.common.ui/plugin.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-  <extension-point id="exampleProjectCreationWizard" name="Example Project Creation Wizard" schema="schema/exampleProjectCreationWizard.exsd"/>
-  <extension
-	point="org.eclipse.search.searchResultViewPages">
-	<viewPage
-		id="org.eclipse.wst.common.ui.internal.search.SearchResultPage"
-		searchResultClass="org.eclipse.wst.common.ui.internal.search.SearchResult"
-		class="org.eclipse.wst.common.ui.internal.search.SearchResultPage">
-	</viewPage>
-  </extension>
- 
-  <!--
-   <extension point="org.eclipse.ui.popupMenus"> 
-      <objectContribution 
-         id="test" 
-         objectClass="org.eclipse.core.resources.IFile">  
-         <action
-            id="testit" 
-            enablesFor="1"
-            style="pulldown"
-            menubarPath="additions"
-            label="TEST SEARCH DIALOG" 
-            class="org.eclipse.wst.common.ui.internal.search.dialogs.Test"> 
-         </action>          
-      </objectContribution>               
-    </extension> 
-   -->
-</plugin>
diff --git a/plugins/org.eclipse.wst.common.ui/schema/exampleProjectCreationWizard.exsd b/plugins/org.eclipse.wst.common.ui/schema/exampleProjectCreationWizard.exsd
deleted file mode 100644
index 578c329..0000000
--- a/plugins/org.eclipse.wst.common.ui/schema/exampleProjectCreationWizard.exsd
+++ /dev/null
@@ -1,243 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>

-<!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.common.ui">

-<annotation>

-      <appInfo>

-         <meta.schema plugin="org.eclipse.wst.common.ui" id="ExampleProjectCreationWizard" name="Example Project Creation Wizard"/>

-      </appInfo>

-      <documentation>

-         This extension point allows to extend New project withard with the

-page set up setup information for the created project as well as source files that will be imported on the project creation.

-      </documentation>

-   </annotation>

-

-   <element name="extension">

-      <complexType>

-         <sequence>

-            <element ref="wizard"/>

-         </sequence>

-         <attribute name="point" type="string" use="required">

-            <annotation>

-               <documentation>

-                  a fully qualified identifier of the target extension point

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  an optional identifier of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  an optional name of the extension instance

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="wizard">

-      <complexType>

-         <sequence>

-            <element ref="projectsetup" minOccurs="0" maxOccurs="unbounded"/>

-         </sequence>

-         <attribute name="id" type="string" use="required">

-            <annotation>

-               <documentation>

-                  Id of the wizard that this extension is intended for.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="banner" type="string">

-            <annotation>

-               <documentation>

-                  Plugin relative path to the image that will be displayed as a banner on the wizard.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="projectsetup">

-      <annotation>

-         <documentation>

-            Element that describes additional project setup.

-There will be as many pages created for the wizard as there are projectsetup elements.

-         </documentation>

-      </annotation>

-      <complexType>

-         <sequence>

-            <element ref="import" minOccurs="0" maxOccurs="unbounded"/>

-            <element ref="nature" minOccurs="0" maxOccurs="unbounded"/>

-            <element ref="references" minOccurs="0" maxOccurs="unbounded"/>

-         </sequence>

-         <attribute name="pagetitle" type="string">

-            <annotation>

-               <documentation>

-                  Title of the wizard&apos;s page.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="name" type="string">

-            <annotation>

-               <documentation>

-                  Initial project name that will be provided on the wizard page.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="label" type="string">

-            <annotation>

-               <documentation>

-                  Label for the project name field on the wizard page.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="pagedescription" type="string">

-            <annotation>

-               <documentation>

-                  Description of the wizard page

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="open" type="string">

-            <annotation>

-               <documentation>

-                  Plugin relative path of the file that will be opened when wizard finished.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="import">

-      <annotation>

-         <documentation>

-            Element that describes what to import into the project when it&apos;s created.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="dest" type="string">

-            <annotation>

-               <documentation>

-                  Project relative path of the folder where project files will be imported to, if not specified, it&apos;s the projest itself.

-               </documentation>

-            </annotation>

-         </attribute>

-         <attribute name="src" type="string">

-            <annotation>

-               <documentation>

-                  Plugin relative path of the import .zip file with the files to be imported into the project.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="nature">

-      <annotation>

-         <documentation>

-            Element that specified Eclipse nature that is applicable to the project.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  The id of the nature that will be opened when project will be created.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <element name="references">

-      <annotation>

-         <documentation>

-            Element that specifies reference for the project that will be created.

-         </documentation>

-      </annotation>

-      <complexType>

-         <attribute name="id" type="string">

-            <annotation>

-               <documentation>

-                  The id of the referenced project.

-               </documentation>

-            </annotation>

-         </attribute>

-      </complexType>

-   </element>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="since"/>

-      </appInfo>

-      <documentation>

-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="examples"/>

-      </appInfo>

-      <documentation>

-         &lt;pre&gt;

-   &lt;extension

-         point=&quot;org.eclipse.wst.common.ui.exampleProjectCreationWizard&quot;

-         id=&quot;org.eclipse.wst.xml.ui.ExampleProjectCreationWizardExtension&quot;&gt; 

-      &lt;wizard

-           id=&quot;org.eclipse.wst.xml.ui.ExampleProjectCreationWizard&quot;

-           banner=&quot;icons/newSampleProject_wizbanner.gif&quot;&gt;

-         &lt;projectsetup

-               pagetitle=&quot;%XMLExampleProjectCreationWizard.pagetitle&quot;

-               name=&quot;%XMLExampleProjectCreationWizard.projectname&quot;

-               label=&quot;%XMLExampleProjectCreationWizard.label&quot;

-               pagedescription=&quot;%XMLExampleProjectCreationWizard.pagedescription&quot;

-               open=&quot;readme.html&quot;&gt;

-            &lt;import

-                  dest=&quot;&quot;

-                  src=&quot;examples/EditingAndValidatingXML.zip&quot;&gt;

-            &lt;/import&gt;

-        &lt;/projectsetup&gt;

-     &lt;/wizard&gt;

-   &lt;/extension&gt;

-&lt;/pre&gt;

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="copyright"/>

-      </appInfo>

-      <documentation>

-         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;

-All rights reserved. This program and the accompanying materials are made 

-available under the terms of the Eclipse Public License v1.0 which accompanies 

-this distribution, and is available at &lt;a

-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

-      </documentation>

-   </annotation>

-

-</schema>

diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/AbstractSearchQuery.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/AbstractSearchQuery.java
deleted file mode 100644
index db2fc2b..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/AbstractSearchQuery.java
+++ /dev/null
@@ -1,181 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.search;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.search.internal.ui.Messages;
-import org.eclipse.search.internal.ui.SearchMessages;
-import org.eclipse.search.ui.IQueryListener;
-import org.eclipse.search.ui.ISearchQuery;
-import org.eclipse.search.ui.ISearchResult;
-import org.eclipse.search.ui.NewSearchUI;
-import org.eclipse.search.ui.text.Match;
-import org.eclipse.wst.common.core.search.SearchEngine;
-import org.eclipse.wst.common.core.search.pattern.QualifiedName;
-import org.eclipse.wst.common.core.search.pattern.SearchPattern;
-import org.eclipse.wst.common.core.search.scope.SearchScope;
-
-
-public abstract class AbstractSearchQuery implements ISearchQuery {
-	
-	protected String fPattern;
-	protected SearchScope fScope;
-	protected SearchResult fResult;
-	protected String fScopeDescription;
-
-	public AbstractSearchQuery(String pattern, SearchScope scope, String scopeDescription) {
-		super();
-		fPattern= pattern;
-		fScope= scope;
-		fScopeDescription= scopeDescription;
-	}
-
-	public boolean canRerun() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	public boolean canRunInBackground() {
-		return true;
-	}
-
-	public String getLabel() {
-		return SearchMessages.FileSearchQuery_label; 
-	}
-
-	public ISearchResult getSearchResult() {
-		if (fResult == null) {
-			fResult= new SearchResult(this);
-			new SearchResultUpdater(fResult);
-		}
-		return fResult;
-	}
-	
-	public String getResultLabel(int nMatches) {
-		if (nMatches == 1) {
-			if (fPattern.length() > 0) {
-				Object[] args= { fPattern, fScopeDescription };
-				return Messages.format(SearchMessages.FileSearchQuery_singularLabel, args); 
-			}
-			Object[] args= { "", fScopeDescription };
-			return Messages.format(SearchMessages.FileSearchQuery_singularLabel_fileNameSearch, args); 
-		}
-		if (fPattern.length() > 0) {
-			Object[] args= { fPattern, new Integer(nMatches), fScopeDescription }; //$NON-NLS-1$
-			return Messages.format(SearchMessages.FileSearchQuery_pluralPattern, args); 
-		}
-		Object[] args= { "", new Integer(nMatches), fScopeDescription }; //$NON-NLS-1$
-		return Messages.format(SearchMessages.FileSearchQuery_pluralPattern_fileNameSearch, args); 
-	
-	
-	}
-
-	public IStatus run(IProgressMonitor pm) throws OperationCanceledException {
-		final SearchResult textResult= (SearchResult) getSearchResult();
-		textResult.removeAll();
-		SearchQueryResultCollector collector= new SearchQueryResultCollector(textResult);
-		String searchString= fPattern;
-		if (searchString.trim().equals(String.valueOf('*'))) {
-			searchString= new String();
-		}
-		String message= SearchMessages.TextSearchEngine_statusMessage; 
-		MultiStatus status= new MultiStatus(NewSearchUI.PLUGIN_ID, IStatus.OK, message, null);
-		
-		SearchEngine searchEngine = new SearchEngine();
-	
-		QualifiedName typeName = QualifiedName.valueOf(searchString);
-		
-		try {
-            SearchPattern pattern = createSearchPattern(typeName);
-            searchEngine.search(pattern, collector, fScope, null, new NullProgressMonitor());
-		} catch (CoreException e) {
-			status.add(e.getStatus());
-		}
-	
-		return status;
-
-	}
-    
-    protected abstract SearchPattern createSearchPattern(QualifiedName typeName);
-	
-	public class SearchResultUpdater implements IResourceChangeListener, IQueryListener {
-		SearchResult fResult;
-
-		public SearchResultUpdater(SearchResult result) {
-			fResult= result;
-			NewSearchUI.addQueryListener(this);
-			ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
-		}
-
-		public void resourceChanged(IResourceChangeEvent event) {
-			IResourceDelta delta= event.getDelta();
-			if (delta != null)
-				handleDelta(delta);
-		}
-
-		protected void handleDelta(IResourceDelta d) {
-			try {
-				d.accept(new IResourceDeltaVisitor() {
-					public boolean visit(IResourceDelta delta) throws CoreException {
-						switch (delta.getKind()) {
-							case IResourceDelta.ADDED :
-								return false;
-							case IResourceDelta.REMOVED :
-								IResource res= delta.getResource();
-								if (res instanceof IFile) {
-									Match[] matches= fResult.getMatches(res);
-									fResult.removeMatches(matches);
-								}
-								break;
-							case IResourceDelta.CHANGED :
-								// handle changed resource
-								break;
-						}
-						return true;
-					}
-				});
-			} catch (CoreException e) {
-				e.printStackTrace();
-			}
-		}
-
-		public void queryAdded(ISearchQuery query) {
-			// don't care
-		}
-
-		public void queryRemoved(ISearchQuery query) {
-			if (fResult.equals(query.getSearchResult())) {
-				ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
-				NewSearchUI.removeQueryListener(this);
-			}
-		}
-		
-		public void queryStarting(ISearchQuery query) {
-			// don't care
-		}
-
-		public void queryFinished(ISearchQuery query) {
-			// don't care
-		}
-    }	
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/ISearchConstants.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/ISearchConstants.java
deleted file mode 100644
index 0bc1403..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/ISearchConstants.java
+++ /dev/null
@@ -1,38 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.search;
-
-public interface ISearchConstants {
-	
-	/**
-	 * The search result is a declaration.
-	 * Can be used in conjunction with any of the nature of searched elements
-	 * so as to better narrow down the search.
-	 */
-	public static int DECLARATIONS= 0;
-
-
-	/**
-	 * The search result is a reference.
-	 * Can be used in conjunction with any of the nature of searched elements
-	 * so as to better narrow down the search.
-	 * References can contain implementers since they are more generic kind
-	 * of matches.
-	 */
-	public static int REFERENCES= 1;
-
-	/**
-	 * The search result is a declaration, or a reference.
-	 * Can be used in conjunction with any of the nature of searched elements
-	 * so as to better narrow down the search.
-	 */
-	public static int ALL_OCCURRENCES= 2;
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchMessages.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchMessages.java
deleted file mode 100644
index 3079c3d..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchMessages.java
+++ /dev/null
@@ -1,145 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.search;
-
-import org.eclipse.osgi.util.NLS;
-
-public final class SearchMessages extends NLS {
-
-	private static final String BUNDLE_NAME= "org.eclipse.wst.common.search.test.ui.SearchMessages";//$NON-NLS-1$
-
-	private SearchMessages() {
-		// Do not instantiate
-	}
-
-	public static String SearchLabelProvider_exact_singular;
-	public static String SearchLabelProvider_exact_noCount;
-	public static String SearchLabelProvider_exact_and_potential_plural;
-	public static String SearchLabelProvider_potential_singular;
-	public static String SearchLabelProvider_potential_noCount;
-	public static String SearchLabelProvider_potential_plural;
-	public static String SearchLabelProvider_exact_plural;
-	public static String group_search;
-	public static String group_declarations;
-	public static String group_references;
-	public static String group_readReferences;
-	public static String group_writeReferences;
-	public static String group_implementors;
-	public static String group_occurrences;
-	public static String group_occurrences_quickMenu_noEntriesAvailable;
-	public static String Search_Error_search_title;
-	public static String Search_Error_search_message;
-	public static String Search_Error_search_notsuccessful_message;
-	public static String Search_Error_javaElementAccess_title;
-	public static String Search_Error_javaElementAccess_message;
-	public static String Search_Error_search_notsuccessful_title;
-	public static String Search_Error_openEditor_title;
-	public static String Search_Error_openEditor_message;
-	public static String Search_Error_codeResolve;
-	public static String SearchElementSelectionDialog_title;
-	public static String SearchElementSelectionDialog_message;
-	public static String SearchPage_searchFor_label;
-	public static String SearchPage_searchFor_type;
-	public static String SearchPage_searchFor_method;
-	public static String SearchPage_searchFor_field;
-	public static String SearchPage_searchFor_package;
-	public static String SearchPage_searchFor_constructor;
-	public static String SearchPage_limitTo_label;
-	public static String SearchPage_limitTo_declarations;
-	public static String SearchPage_limitTo_implementors;
-	public static String SearchPage_limitTo_references;
-	public static String SearchPage_limitTo_allOccurrences;
-	public static String SearchPage_limitTo_readReferences;
-	public static String SearchPage_limitTo_writeReferences;
-	public static String SearchPage_expression_label;
-	public static String SearchPage_expression_caseSensitive;
-	public static String SearchUtil_workingSetConcatenation;
-	public static String Search_FindDeclarationAction_label;
-	public static String Search_FindDeclarationAction_tooltip;
-	public static String Search_FindDeclarationsInProjectAction_label;
-	public static String Search_FindDeclarationsInProjectAction_tooltip;
-	public static String Search_FindDeclarationsInWorkingSetAction_label;
-	public static String Search_FindDeclarationsInWorkingSetAction_tooltip;
-	public static String Search_FindHierarchyDeclarationsAction_label;
-	public static String Search_FindHierarchyDeclarationsAction_tooltip;
-	public static String Search_FindImplementorsAction_label;
-	public static String Search_FindImplementorsAction_tooltip;
-	public static String Search_FindImplementorsInProjectAction_label;
-	public static String Search_FindImplementorsInProjectAction_tooltip;
-	public static String Search_FindImplementorsInWorkingSetAction_label;
-	public static String Search_FindImplementorsInWorkingSetAction_tooltip;
-	public static String Search_FindReferencesAction_label;
-	public static String Search_FindReferencesAction_tooltip;
-	public static String Search_FindReferencesAction_BinPrimConstWarnDialog_title;
-	public static String Search_FindReferencesAction_BinPrimConstWarnDialog_message;
-	public static String Search_FindReferencesInProjectAction_label;
-	public static String Search_FindReferencesInProjectAction_tooltip;
-	public static String Search_FindReferencesInWorkingSetAction_label;
-	public static String Search_FindReferencesInWorkingSetAction_tooltip;
-	public static String Search_FindHierarchyReferencesAction_label;
-	public static String Search_FindHierarchyReferencesAction_tooltip;
-	public static String Search_FindReadReferencesAction_label;
-	public static String Search_FindReadReferencesAction_tooltip;
-	public static String Search_FindReadReferencesInProjectAction_label;
-	public static String Search_FindReadReferencesInProjectAction_tooltip;
-	public static String Search_FindReadReferencesInWorkingSetAction_label;
-	public static String Search_FindReadReferencesInWorkingSetAction_tooltip;
-	public static String Search_FindReadReferencesInHierarchyAction_label;
-	public static String Search_FindReadReferencesInHierarchyAction_tooltip;
-	public static String Search_FindWriteReferencesAction_label;
-	public static String Search_FindWriteReferencesAction_tooltip;
-	public static String Search_FindWriteReferencesInProjectAction_label;
-	public static String Search_FindWriteReferencesInProjectAction_tooltip;
-	public static String Search_FindWriteReferencesInWorkingSetAction_label;
-	public static String Search_FindWriteReferencesInWorkingSetAction_tooltip;
-	public static String Search_FindWriteReferencesInHierarchyAction_label;
-	public static String Search_FindWriteReferencesInHierarchyAction_tooltip;
-	public static String Search_FindOccurrencesInFile_shortLabel;
-	public static String Search_FindOccurrencesInFile_label;
-	public static String Search_FindOccurrencesInFile_tooltip;
-	public static String FindOccurrencesEngine_noSource_text;
-	public static String FindOccurrencesEngine_cannotParse_text;
-	public static String OccurrencesFinder_no_element;
-	public static String OccurrencesFinder_no_binding;
-	public static String OccurrencesFinder_searchfor;
-	public static String OccurrencesFinder_label_singular;
-	public static String OccurrencesFinder_label_plural;
-	public static String ExceptionOccurrencesFinder_no_exception;
-	public static String ExceptionOccurrencesFinder_searchfor;
-	public static String ExceptionOccurrencesFinder_label_singular;
-	public static String ExceptionOccurrencesFinder_label_plural;
-	public static String ImplementOccurrencesFinder_invalidTarget;
-	public static String ImplementOccurrencesFinder_searchfor;
-	public static String ImplementOccurrencesFinder_label_singular;
-	public static String ImplementOccurrencesFinder_label_plural;
-	public static String WorkspaceScope;
-	public static String WorkingSetScope;
-	public static String SelectionScope;
-	public static String EnclosingProjectsScope;
-	public static String EnclosingProjectScope;
-	public static String ProjectScope;
-	public static String HierarchyScope;
-	public static String SearchParticipant_error_noID;
-	public static String SearchParticipant_error_noNature;
-	public static String SearchParticipant_error_noClass;
-	public static String SearchParticipant_error_classCast;
-	public static String TextSearchLabelProvider_matchCountFormat;
-	public static String FiltersDialog_title;
-	public static String FiltersDialog_filters_label;
-	public static String FiltersDialog_description_label;
-	public static String FiltersDialog_limit_label;
-	public static String FiltersDialog_limit_error;
-	public static String FiltersDialogAction_label;
-
-	static {
-		NLS.initializeMessages(BUNDLE_NAME, SearchMessages.class);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchMessages.properties b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchMessages.properties
deleted file mode 100644
index cd3fea0..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchMessages.properties
+++ /dev/null
@@ -1,258 +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
-###############################################################################
-
-SearchLabelProvider_exact_singular={0} (1 match)
-SearchLabelProvider_exact_noCount={0}
-SearchLabelProvider_exact_and_potential_plural={0} ({1} matches: {2} exact, {3} potential)
-SearchLabelProvider_potential_singular={0} (potential match)
-SearchLabelProvider_potential_noCount={0} (potential match)
-SearchLabelProvider_potential_plural={0} ({1} potential matches)
-SearchLabelProvider_exact_plural={0} ({1} matches)
-
-group_search=S&earch
-group_declarations= Dec&larations
-group_references= Re&ferences
-group_readReferences= &Read Access
-group_writeReferences= &Write Access
-group_implementors= &Implementors
-group_occurrences= Occurre&nces in File
-group_occurrences_quickMenu_noEntriesAvailable= <no entries available>
-
-Search_Error_search_title=Search Error
-Search_Error_search_message=The search operation has reported problems
-Search_Error_search_notsuccessful_message=The search operation has reported problems
-Search_Error_javaElementAccess_title=Search Error
-Search_Error_javaElementAccess_message=An error occurred while accessing a Java element
-
-Search_Error_search_notsuccessful_title=Search
-
-Search_Error_openEditor_title=Search Error
-Search_Error_openEditor_message=Could not open the editor
-
-Search_Error_codeResolve= Code resolve error
-
-SearchElementSelectionDialog_title=Search
-SearchElementSelectionDialog_message=Select the element to search for.
-
-SearchPage_searchFor_label= Search For
-SearchPage_searchFor_type= &Type
-SearchPage_searchFor_method= &Method
-SearchPage_searchFor_field= &Field
-SearchPage_searchFor_package= &Package
-SearchPage_searchFor_constructor= Co&nstructor
-
-SearchPage_limitTo_label= Limit To
-SearchPage_limitTo_declarations= Dec&larations
-SearchPage_limitTo_implementors= &Implementors
-SearchPage_limitTo_references= &References
-SearchPage_limitTo_allOccurrences= All &Occurrences
-SearchPage_limitTo_readReferences= Read A&ccess
-SearchPage_limitTo_writeReferences= Writ&e Access
-
-SearchPage_expression_label= Se&arch string (* = any string, ? = any character):
-SearchPage_expression_caseSensitive= Case sens&itive
-
-SearchPage_searchJRE_label=Search the JRE s&ystem libraries
-
-# Concatenate two working set names e.g. "Source, Lib"
-SearchUtil_workingSetConcatenation= {0}, {1}
-
-Search_FindDeclarationAction_label= &Workspace
-Search_FindDeclarationAction_tooltip= Search for Declarations of the Selected Element in the Workspace
-
-Search_FindDeclarationsInProjectAction_label= &Project
-Search_FindDeclarationsInProjectAction_tooltip= Search for Declarations of the Selected Element in Resources in the Enclosing Project of the Selected Element
-
-Search_FindDeclarationsInWorkingSetAction_label= Working &Set...
-Search_FindDeclarationsInWorkingSetAction_tooltip= Search for Declarations of the Selected Element in a Working Set
-
-Search_FindHierarchyDeclarationsAction_label= &Hierarchy
-Search_FindHierarchyDeclarationsAction_tooltip= Search for Declarations of the Selected Element in its Hierarchy
-
-Search_FindImplementorsAction_label= &Workspace
-Search_FindImplementorsAction_tooltip= Search for Implementors of the Selected Interface
-
-Search_FindImplementorsInProjectAction_label= &Project
-Search_FindImplementorsInProjectAction_tooltip= Search for Implementors of the Selected Interface in Resources in the Enclosing Project of the Selected Element
-
-Search_FindImplementorsInWorkingSetAction_label= Working &Set...
-Search_FindImplementorsInWorkingSetAction_tooltip= Search for Implementors of the Selected Interface in a Working Set
-
-Search_FindReferencesAction_label= &Workspace
-Search_FindReferencesAction_tooltip= Search for References to the Selected Element in the Workspace
-
-Search_FindReferencesAction_BinPrimConstWarnDialog_title= Search for References to a Binary Constant
-Search_FindReferencesAction_BinPrimConstWarnDialog_message= Matches to this constant will only be discovered in source files and binary files where the constant value is not inlined.
-
-Search_FindReferencesInProjectAction_label= &Project
-Search_FindReferencesInProjectAction_tooltip= Search for References to the Selected Element in Resources in the Enclosing Project of the Selected Element
-
-Search_FindReferencesInWorkingSetAction_label= Working &Set...
-Search_FindReferencesInWorkingSetAction_tooltip= Search for References to the Selected Element in a Working Set
-
-Search_FindHierarchyReferencesAction_label= &Hierarchy
-Search_FindHierarchyReferencesAction_tooltip= Search for References of the Selected Element in its Hierarchy
-
-Search_FindReadReferencesAction_label= &Workspace
-Search_FindReadReferencesAction_tooltip= Search for Read References to the Selected Element in the Workspace
-
-Search_FindReadReferencesInProjectAction_label= &Project
-Search_FindReadReferencesInProjectAction_tooltip= Search for Read References to the Selected Element in Resources in the Enclosing Project of the Selected Element
-
-Search_FindReadReferencesInWorkingSetAction_label= Working &Set...
-Search_FindReadReferencesInWorkingSetAction_tooltip= Search for Read References to the Selected Element in a Working Set
-
-Search_FindReadReferencesInHierarchyAction_label= &Hierarchy
-Search_FindReadReferencesInHierarchyAction_tooltip= Search for Read References of the Selected Element in its Hierarchy
-
-Search_FindWriteReferencesAction_label= &Workspace
-Search_FindWriteReferencesAction_tooltip= Search for Write References to the Selected Element in the Workspace
-
-Search_FindWriteReferencesInProjectAction_label= &Project
-Search_FindWriteReferencesInProjectAction_tooltip= Search for Write References to the Selected Element in Resources in the Enclosing Project of the Selected Element
-
-Search_FindWriteReferencesInWorkingSetAction_label= Working &Set...
-Search_FindWriteReferencesInWorkingSetAction_tooltip= Search for Write References to the Selected Element in a Working Set
-
-Search_FindWriteReferencesInHierarchyAction_label= &Hierarchy
-Search_FindWriteReferencesInHierarchyAction_tooltip= Search for Write References of the Selected Element in its Hierarchy
-
-Search_FindOccurrencesInFile_shortLabel= &Identifier
-Search_FindOccurrencesInFile_label= I&dentifiers in File
-Search_FindOccurrencesInFile_tooltip= Find Occurrences of the Selected Element in the Editor
-
-FindOccurrencesEngine_noSource_text= No source available. To perform this operation you need to attach source.
-FindOccurrencesEngine_cannotParse_text= Cannot analyze the compilation unit or class file.
-
-OccurrencesFinder_no_element= Cannot search for the current selection. Please select a valid Java element name.
-OccurrencesFinder_no_binding= Selected Java element is unknown.
-OccurrencesFinder_searchfor=Search for Occurrences in File
-# The first argument will be replaced by the element name and the second one by the file name
-OccurrencesFinder_label_singular=''{0}'' - 1 occurrence in ''{1}''
-# The first argument will be replaced by the element name, the second by the count and the last by the file name
-OccurrencesFinder_label_plural=''{0}'' - {1} occurrences in ''{2}''
-
-ExceptionOccurrencesFinder_no_exception= Cannot search for current selection. Please select an exception.
-ExceptionOccurrencesFinder_searchfor= Search for Exception Occurrences
-
-# The first argument will be replaced by the element name and the second one by the file name
-ExceptionOccurrencesFinder_label_singular=''{0}'' - 1 exception occurrence in ''{1}''
-# The first argument will be replaced by the element name, the second by the count and the last by the file name
-ExceptionOccurrencesFinder_label_plural=''{0}'' - {1} exception occurrences in ''{2}''
-
-ImplementOccurrencesFinder_invalidTarget= Cannot search for current selection. Please select a type behind 'implements' or 'extends'.
-ImplementOccurrencesFinder_searchfor= Search for Implement Occurrences
-
-# The first argument will be replaced by the element name and the second one by the file name
-ImplementOccurrencesFinder_label_singular=''{0}'' - 1 implement occurrence in ''{1}''
-# The first argument will be replaced by the element name, the second by the count and the last by the file name
-ImplementOccurrencesFinder_label_plural=''{0}'' - {1} implement occurrences in ''{2}''
-
-
-# The first argument will be replaced by the pattern and the second by the scope
-JavaSearchOperation_singularDeclarationsPostfix=''{0}'' - 1 declaration in {1}
-JavaSearchOperation_singularReferencesPostfix=''{0}'' - 1 reference in {1}
-JavaSearchOperation_singularReadReferencesPostfix=''{0}'' - 1 read reference in {1}
-JavaSearchOperation_singularWriteReferencesPostfix=''{0}'' - 1 write reference in {1}
-JavaSearchOperation_singularImplementorsPostfix=''{0}'' - 1 implementor in {1}
-JavaSearchOperation_singularOccurrencesPostfix=''{0}'' - 1 occurrence in {1}
-
-JavaSearchOperation_pluralDeclarationsPostfix=''{0}'' - {1} declarations in {2}
-JavaSearchOperation_pluralReferencesPostfix=''{0}'' - {1} references in {2}
-JavaSearchOperation_pluralReadReferencesPostfix=''{0}'' - {1} read references in {2}
-JavaSearchOperation_pluralWriteReferencesPostfix=''{0}'' - {1} write references in {2}
-JavaSearchOperation_pluralImplementorsPostfix=''{0}'' - {1} implementors in {2}
-JavaSearchOperation_pluralOccurrencesPostfix=''{0}'' - {1} occurrences in {2}
-JavaElementAction_typeSelectionDialog_title=Search
-JavaElementAction_typeSelectionDialog_message=&Select the type to search:
-JavaElementAction_error_open_message=An exception occurred while opening the type.
-
-JavaElementAction_operationUnavailable_title= Operation Unavailable
-JavaElementAction_operationUnavailable_generic= The operation is unavailable on the current selection. Please select a valid Java element name.
-JavaElementAction_operationUnavailable_field= The operation is unavailable on the current selection. Please select the name of a field or local variable.
-JavaElementAction_operationUnavailable_interface= The operation is unavailable on the current selection. Please select the name of an interface.
-
-WorkspaceScope= workspace
-WorkingSetScope= working set ''{0}''
-SelectionScope= selection
-EnclosingProjectsScope= projects {0}, ...
-EnclosingProjectScope= project {0}
-ProjectScope= project {0}
-HierarchyScope= hierarchy of ''{0}''
-
-JavaSearchResultPage_sortByName=Name
-JavaSearchResultPage_sortByPath=Path
-JavaSearchResultPage_open_editor_error_title=Open Element
-JavaSearchResultPage_open_editor_error_message=Opening element failed.
-JavaSearchResultPage_sortByParentName=Parent Name
-JavaSearchResultPage_filtered_message={0} (Filtered)
-JavaSearchResultPage_sortBylabel=Sort By
-JavaSearchResultPage_error_marker=Could not create marker
-
-JavaSearchResultPage_groupby_project=Project
-JavaSearchResultPage_groupby_project_tooltip=Group by Project
-JavaSearchResultPage_groupby_package=Package
-JavaSearchResultPage_groupby_package_tooltip=Group by Package
-JavaSearchResultPage_filteredWithCount_message={0} ({1} matches filtered from view)
-JavaSearchResultPage_groupby_file=File
-JavaSearchResultPage_groupby_file_tooltip=Group by File
-JavaSearchResultPage_groupby_type=Type
-JavaSearchResultPage_groupby_type_tooltip=Group by Type
-
-JavaSearchQuery_task_label=Searching
-JavaSearchQuery_label=Java Search
-JavaSearchQuery_error_unsupported_pattern=Unsupported search pattern: "{0}"
-JavaSearchQuery_status_ok_message=Found {0} matches.
-
-JavaSearchQuery_error_participant_estimate=An error occurred while estimating progress data
-JavaSearchQuery_error_participant_search=An error occurred during participant search
-
-SearchParticipant_error_noID=Missing id attribute on search participant extension {0}
-SearchParticipant_error_noNature=Missing nature attribute on search participant {0}
-SearchParticipant_error_noClass=Missing class attribute on search participant {0}
-SearchParticipant_error_classCast=Search participant doesn't implement IQueryParticipant
-
-
-MatchFilter_ImportFilter_name=Imports
-MatchFilter_ImportFilter_actionLabel=Filter &Imports
-MatchFilter_ImportFilter_description=Filters matches that are in import statements
-
-
-MatchFilter_WriteFilter_name=Writes
-MatchFilter_WriteFilter_actionLabel=Filter &Writes
-MatchFilter_WriteFilter_description=Filters matches that are write accesses
-
-MatchFilter_ReadFilter_name=Reads
-MatchFilter_ReadFilter_actionLabel=Filter &Reads
-MatchFilter_ReadFilter_description=Filters matches that are not write accesses
-
-MatchFilter_JavadocFilter_name=Javadoc
-MatchFilter_JavadocFilter_actionLabel=Filter &Javadoc
-MatchFilter_JavadocFilter_description=Filters matches that are inside Javadoc comments
-
-MatchFilter_ErasureFilter_name=Incompatible type arguments
-MatchFilter_ErasureFilter_actionLabel=Filter In&compatible
-MatchFilter_ErasureFilter_description=Filters parameterized type matches that are not assignment compatible with the search pattern
-
-MatchFilter_InexactFilter_name=Inexact type arguments
-MatchFilter_InexactFilter_actionLabel=Filter Ine&xact
-MatchFilter_InexactFilter_description=Filters parameterized type matches where the type arguments don't exactly match the search pattern's type arguments
-
-MethodExitsFinder_no_return_type_selected=No return type selected
-
-TextSearchLabelProvider_matchCountFormat={0} ({1} matches)
-
-FiltersDialog_title=Java Search Filters
-FiltersDialog_filters_label=Select the &matches to exclude from the search results:
-FiltersDialog_description_label=Filter Description:
-FiltersDialog_limit_label=&Limit top level elements in Java search view to:
-FiltersDialog_limit_error=Element limit must be a positive number
-FiltersDialogAction_label=Fi&lters...
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchQueryResultCollector.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchQueryResultCollector.java
deleted file mode 100644
index 91d234a..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchQueryResultCollector.java
+++ /dev/null
@@ -1,33 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.search;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.search.ui.text.Match;
-import org.eclipse.wst.common.core.search.SearchMatch;
-import org.eclipse.wst.common.core.search.SearchRequestor;
-
-class SearchQueryResultCollector extends SearchRequestor {
-	
-	private SearchResult fSearchResult;
-
-	
-	protected SearchQueryResultCollector(SearchResult result){
-		super();
-		fSearchResult= result;
-	}
-
-	public void acceptSearchMatch(SearchMatch match) throws CoreException {
-		Match aMatch = new Match(match.getFile(), match.getOffset(), match.getLength());
-		fSearchResult.addMatch(aMatch);
-		
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResult.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResult.java
deleted file mode 100644
index c26fb9c..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResult.java
+++ /dev/null
@@ -1,82 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.search;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.search.internal.ui.SearchPluginImages;
-import org.eclipse.search.ui.ISearchQuery;
-import org.eclipse.search.ui.text.AbstractTextSearchResult;
-import org.eclipse.search.ui.text.IEditorMatchAdapter;
-import org.eclipse.search.ui.text.IFileMatchAdapter;
-import org.eclipse.search.ui.text.Match;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IFileEditorInput;
-
-public class SearchResult extends AbstractTextSearchResult implements IEditorMatchAdapter, IFileMatchAdapter {
-	private final Match[] EMPTY_ARR= new Match[0];
-	
-	private AbstractSearchQuery fQuery;
-
-	public SearchResult(AbstractSearchQuery job) {
-		fQuery= job;
-	}
-	public ImageDescriptor getImageDescriptor() {
-		return SearchPluginImages.DESC_OBJ_TSEARCH_DPDN;
-	}
-	public String getLabel() {
-		return fQuery.getResultLabel(getMatchCount());
-	}
-	public String getTooltip() {
-		return getLabel();
-	}
-
-	public Match[] computeContainedMatches(AbstractTextSearchResult result, IFile file) {
-		return getMatches(file);
-	}
-
-	public IFile getFile(Object element) {
-		if (element instanceof IFile)
-			return (IFile)element;
-		return null;
-	}
-
-	public boolean isShownInEditor(Match match, IEditorPart editor) {
-		IEditorInput ei= editor.getEditorInput();
-		if (ei instanceof IFileEditorInput) {
-			IFileEditorInput fi= (IFileEditorInput) ei;
-			return match.getElement().equals(fi.getFile());
-		}
-		return false;
-	}
-	
-	public Match[] computeContainedMatches(AbstractTextSearchResult result, IEditorPart editor) {
-		IEditorInput ei= editor.getEditorInput();
-		if (ei instanceof IFileEditorInput) {
-			IFileEditorInput fi= (IFileEditorInput) ei;
-			return getMatches(fi.getFile());
-		}
-		return EMPTY_ARR;
-	}
-
-	public ISearchQuery getQuery() {
-		return fQuery;
-	}
-	
-	public IFileMatchAdapter getFileMatchAdapter() {
-		return this;
-	}
-	
-	public IEditorMatchAdapter getEditorMatchAdapter() {
-		return this;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResultPage.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResultPage.java
deleted file mode 100644
index b90f58c..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResultPage.java
+++ /dev/null
@@ -1,380 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.search;
-
-import java.text.Collator;
-import java.text.MessageFormat;
-import java.util.HashMap;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.util.Assert;
-import org.eclipse.jface.util.DelegatingDragAdapter;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.viewers.DecoratingLabelProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.search.internal.ui.SearchMessages;
-import org.eclipse.search.internal.ui.SearchPlugin;
-import org.eclipse.search.internal.ui.text.EditorOpener;
-import org.eclipse.search.internal.ui.text.FileLabelProvider;
-import org.eclipse.search.internal.ui.text.IFileSearchContentProvider;
-import org.eclipse.search.internal.ui.text.ResourceTransferDragAdapter;
-import org.eclipse.search.internal.ui.text.SortAction;
-import org.eclipse.search.ui.IContextMenuConstants;
-import org.eclipse.search.ui.ISearchResultViewPart;
-import org.eclipse.search.ui.NewSearchUI;
-import org.eclipse.search.ui.text.AbstractTextSearchResult;
-import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
-import org.eclipse.search.ui.text.Match;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionContext;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.actions.ActionGroup;
-import org.eclipse.ui.actions.OpenFileAction;
-import org.eclipse.ui.actions.OpenWithMenu;
-import org.eclipse.ui.dialogs.PropertyDialogAction;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.part.IShowInTargetList;
-import org.eclipse.ui.part.ResourceTransfer;
-import org.eclipse.ui.texteditor.ITextEditor;
-import org.eclipse.wst.common.ui.internal.UIPlugin;
-
-
-public class SearchResultPage extends AbstractTextSearchViewPage implements IAdaptable {
-	
-	public static class DecoratorIgnoringViewerSorter extends ViewerSorter {
-		private final ILabelProvider fLabelProvider;
-
-		public DecoratorIgnoringViewerSorter(ILabelProvider labelProvider) {
-			super(null); // lazy initialization
-			fLabelProvider= labelProvider;
-		}
-		
-	    public int compare(Viewer viewer, Object e1, Object e2) {
-	        String name1= fLabelProvider.getText(e1);
-	        String name2= fLabelProvider.getText(e2);
-	        if (name1 == null)
-	            name1 = "";//$NON-NLS-1$
-	        if (name2 == null)
-	            name2 = "";//$NON-NLS-1$
-	        return getCollator().compare(name1, name2);
-	    }
-	    
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ViewerSorter#getCollator()
-		 */
-		public final Collator getCollator() {
-			if (collator == null) {
-				collator= Collator.getInstance();
-			}
-			return collator;
-		}
-	}
-	
-	private static final String KEY_SORTING= "org.eclipse.search.resultpage.sorting"; //$NON-NLS-1$
-
-	private ActionGroup fActionGroup;
-	private IFileSearchContentProvider fContentProvider;
-	private int fCurrentSortOrder;
-	private SortAction fSortByNameAction;
-	private SortAction fSortByPathAction;
-	
-	private EditorOpener fEditorOpener= new EditorOpener();
-
-		
-	private static final String[] SHOW_IN_TARGETS= new String[] { IPageLayout.ID_RES_NAV };
-	private  static final IShowInTargetList SHOW_IN_TARGET_LIST= new IShowInTargetList() {
-		public String[] getShowInTargetIds() {
-			return SHOW_IN_TARGETS;
-		}
-	};
-
-	private IPropertyChangeListener fPropertyChangeListener;
-	
-	public SearchResultPage() {
-		// TODO
-		//fSortByNameAction= new SortAction(SearchMessages.FileSearchPage_sort_name_label, this, FileLabelProvider.SHOW_LABEL_PATH); 
-		//fSortByPathAction= new SortAction(SearchMessages.FileSearchPage_sort_path_label, this, FileLabelProvider.SHOW_PATH_LABEL); 
-        // cs : I've comment this code out for now.  We need to review the changes to the base class and react accordingly.
-		// Even more importantly we need to discuss with the base guys to get API lined up for this (see bug 163177).
-		/*
-		fPropertyChangeListener= new IPropertyChangeListener() {
-			public void propertyChange(PropertyChangeEvent event) {
-				if (SearchPreferencePage.LIMIT_TABLE.equals(event.getProperty()) || SearchPreferencePage.LIMIT_TABLE_TO.equals(event.getProperty()))
-					if (getViewer() instanceof TableViewer) {
-						getViewPart().updateLabel();
-						getViewer().refresh();
-					}
-			}
-		};
-		SearchPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(fPropertyChangeListener);
-		*/
-}
-	
-	public StructuredViewer getViewer() {
-		return super.getViewer();
-	}
-	
-	private void addDragAdapters(StructuredViewer viewer) {
-		Transfer[] transfers= new Transfer[] { ResourceTransfer.getInstance() };
-		int ops= DND.DROP_COPY | DND.DROP_LINK;
-		
-		DelegatingDragAdapter adapter= new DelegatingDragAdapter();
-		adapter.addDragSourceListener(new ResourceTransferDragAdapter(viewer));
-		
-		viewer.addDragSupport(ops, transfers, adapter);
-	}	
-
-	protected void configureTableViewer(TableViewer viewer) {
-		viewer.setUseHashlookup(true);
-		FileLabelProvider innerLabelProvider= new FileLabelProvider(this, fCurrentSortOrder);
-		viewer.setLabelProvider(new DecoratingLabelProvider(innerLabelProvider, PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
-		viewer.setContentProvider(new SearchResultTableContentProvider(this));
-		viewer.setSorter(new DecoratorIgnoringViewerSorter(innerLabelProvider));
-		fContentProvider= (IFileSearchContentProvider) viewer.getContentProvider();
-		addDragAdapters(viewer);
-	}
-
-	protected void configureTreeViewer(TreeViewer viewer) {
-		viewer.setUseHashlookup(true);
-		FileLabelProvider innerLabelProvider= new FileLabelProvider(this, FileLabelProvider.SHOW_LABEL);
-		viewer.setLabelProvider(new DecoratingLabelProvider(innerLabelProvider, PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
-		viewer.setContentProvider(new SearchResultTreeContentProvider(viewer));
-		viewer.setSorter(new DecoratorIgnoringViewerSorter(innerLabelProvider));
-		fContentProvider= (IFileSearchContentProvider) viewer.getContentProvider();
-		addDragAdapters(viewer);
-	}
-
-	protected void showMatch(Match match, int offset, int length, boolean activate) throws PartInitException {
-		IFile file= (IFile) match.getElement();
-		IWorkbenchPage wbPage= UIPlugin.getActivePage();
-		IEditorPart editor= IDE.openEditor(wbPage, (IFile) match.getElement(), activate);
-		if (offset != 0 && length != 0) {
-			if (editor instanceof ITextEditor) {
-				ITextEditor textEditor= (ITextEditor) editor;
-				textEditor.selectAndReveal(offset, length);
-			} else if (editor != null) {
-				showWithMarker(editor, file, offset, length);
-			}
-		}
-	}
-	
-	private void showWithMarker(IEditorPart editor, IFile file, int offset, int length) throws PartInitException {
-		IMarker marker= null;
-		try {
-			marker= file.createMarker(NewSearchUI.SEARCH_MARKER);
-			HashMap attributes= new HashMap(4);
-			attributes.put(IMarker.CHAR_START, new Integer(offset));
-			attributes.put(IMarker.CHAR_END, new Integer(offset + length));
-			marker.setAttributes(attributes);
-			IDE.gotoMarker(editor, marker);
-		} catch (CoreException e) {
-			throw new PartInitException(SearchMessages.FileSearchPage_error_marker, e); 
-		} finally {
-			if (marker != null)
-				try {
-					marker.delete();
-				} catch (CoreException e) {
-					// ignore
-				}
-		}
-	}
-
-	protected void fillContextMenu(IMenuManager mgr) {
-		super.fillContextMenu(mgr);
-		addSortActions(mgr);
-		fActionGroup.setContext(new ActionContext(getSite().getSelectionProvider().getSelection()));
-		fActionGroup.fillContextMenu(mgr);
-//		FileSearchQuery query= (FileSearchQuery) getInput().getQuery();
-
-	}
-	
-	
-	private void addSortActions(IMenuManager mgr) {
-		if (getLayout() != FLAG_LAYOUT_FLAT)
-			return;
-		MenuManager sortMenu= new MenuManager(SearchMessages.FileSearchPage_sort_by_label); 
-		sortMenu.add(fSortByNameAction);
-		sortMenu.add(fSortByPathAction);
-		
-		fSortByNameAction.setChecked(fCurrentSortOrder == fSortByNameAction.getSortOrder());
-		fSortByPathAction.setChecked(fCurrentSortOrder == fSortByPathAction.getSortOrder());
-		
-		mgr.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, sortMenu);
-	}
-
-	public void setViewPart(ISearchResultViewPart part) {
-		super.setViewPart(part);
-		fActionGroup= new NewTextSearchActionGroup(part);
-	}
-	
-	public void dispose() {
-		fActionGroup.dispose();
-		SearchPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPropertyChangeListener);
-		super.dispose();
-	}
-
-	protected void elementsChanged(Object[] objects) {
-		if (fContentProvider != null)
-			fContentProvider.elementsChanged(objects);
-	}
-
-	protected void clear() {
-		if (fContentProvider != null)
-			fContentProvider.clear();
-	}
-
-	public void setSortOrder(int sortOrder) {
-		fCurrentSortOrder= sortOrder;
-		DecoratingLabelProvider lpWrapper= (DecoratingLabelProvider) getViewer().getLabelProvider();
-		((FileLabelProvider) lpWrapper.getLabelProvider()).setOrder(sortOrder);
-		getViewer().refresh();
-		getSettings().put(KEY_SORTING, fCurrentSortOrder);
-	}
-	
-	public void restoreState(IMemento memento) {
-		super.restoreState(memento);
-		try {
-			fCurrentSortOrder= getSettings().getInt(KEY_SORTING);
-		} catch (NumberFormatException e) {
-			//fCurrentSortOrder= fSortByNameAction.getSortOrder();
-		}
-		if (memento != null) {
-			Integer value= memento.getInteger(KEY_SORTING);
-			if (value != null)
-				fCurrentSortOrder= value.intValue();
-		}
-	}
-	public void saveState(IMemento memento) {
-		super.saveState(memento);
-		memento.putInteger(KEY_SORTING, fCurrentSortOrder);
-	}
-	
-	public Object getAdapter(Class adapter) {
-		if (IShowInTargetList.class.equals(adapter)) {
-			return SHOW_IN_TARGET_LIST;
-		}
-		return null;
-	}
-	
-	public String getLabel() {
-		String label= super.getLabel();
-		StructuredViewer viewer= getViewer();
-		if (viewer instanceof TableViewer) {
-			TableViewer tv= (TableViewer) viewer;
-
-			AbstractTextSearchResult result= getInput();
-			if (result != null) {
-				int itemCount= ((IStructuredContentProvider) tv.getContentProvider()).getElements(getInput()).length;
-				int fileCount= getInput().getElements().length;
-				if (itemCount < fileCount) {
-					String format= SearchMessages.FileSearchPage_limited_format; 
-					return MessageFormat.format(format, new Object[]{label, new Integer(itemCount), new Integer(fileCount)});
-				}
-			}
-		}
-		return label;
-	}
-	
-	class NewTextSearchActionGroup extends ActionGroup {
-
-		private ISelectionProvider fSelectionProvider;		
-		private IWorkbenchPage fPage;
-		private OpenFileAction fOpenAction;
-		private PropertyDialogAction fOpenPropertiesDialog;
-
-		public NewTextSearchActionGroup(IViewPart part) {
-			Assert.isNotNull(part);
-			IWorkbenchPartSite site= part.getSite();
-			fSelectionProvider= site.getSelectionProvider();
-			fPage= site.getPage();
-			fOpenPropertiesDialog= new PropertyDialogAction(site, fSelectionProvider);
-			fOpenAction= new OpenFileAction(fPage);
-			ISelection selection= fSelectionProvider.getSelection();
-
-			if (selection instanceof IStructuredSelection)
-				fOpenPropertiesDialog.selectionChanged((IStructuredSelection)selection);
-			else
-				fOpenPropertiesDialog.selectionChanged(selection);
-			
-		}
-		
-		public void fillContextMenu(IMenuManager menu) {
-			// view must exist if we create a context menu for it.
-			
-			ISelection selection= getContext().getSelection();
-			if (selection instanceof IStructuredSelection) {
-				addOpenWithMenu(menu, (IStructuredSelection) selection);
-				if (fOpenPropertiesDialog != null && fOpenPropertiesDialog.isEnabled() && selection != null &&fOpenPropertiesDialog.isApplicableForSelection((IStructuredSelection) selection))
-					menu.appendToGroup(IContextMenuConstants.GROUP_PROPERTIES, fOpenPropertiesDialog);
-			}
-				
-		}
-		
-		private void addOpenWithMenu(IMenuManager menu, IStructuredSelection selection) {
-			if (selection == null || selection.size() != 1)
-				return;
-		
-			Object o= selection.getFirstElement();
-		
-			if (!(o instanceof IAdaptable))
-				return; 
-		
-			fOpenAction.selectionChanged(selection);
-			menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, fOpenAction);
-		
-			// Create menu
-			IMenuManager submenu= new MenuManager(SearchMessages.OpenWithMenu_label); 
-			submenu.add(new OpenWithMenu(fPage, (IAdaptable)o));
-		
-			// Add the submenu.
-			menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, submenu);
-		}
-
-		/* (non-Javadoc)
-		 * Method declared in ActionGroup
-		 */
-		public void fillActionBars(IActionBars actionBar) {
-			super.fillActionBars(actionBar);
-			setGlobalActionHandlers(actionBar);
-		}
-		
-		private void setGlobalActionHandlers(IActionBars actionBars) {
-			actionBars.setGlobalActionHandler(ActionFactory.PROPERTIES.getId(), fOpenPropertiesDialog);		
-		}
-	}	
-
-
-}
-
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResultTableContentProvider.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResultTableContentProvider.java
deleted file mode 100644
index 0e876e8..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResultTableContentProvider.java
+++ /dev/null
@@ -1,82 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.search;
-
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.search.internal.ui.text.IFileSearchContentProvider;
-import org.eclipse.search.ui.text.AbstractTextSearchResult;
-
-public class SearchResultTableContentProvider implements IStructuredContentProvider, IFileSearchContentProvider {
-	
-	private final Object[] EMPTY_ARR= new Object[0];
-	
-	private SearchResultPage fPage;
-	private AbstractTextSearchResult fResult;
-
-	public SearchResultTableContentProvider(SearchResultPage page) {
-		fPage= page;
-	}
-	
-	public void dispose() {
-		// nothing to do
-	}
-	
-	public Object[] getElements(Object inputElement) {
-		if (inputElement instanceof SearchResult) {
-			Object[] elements= ((SearchResult)inputElement).getElements();
-   	        // cs : I've comment this code out for now.  We need to review the changes to the base class and react accordingly.
-			// Even more importantly we need to discuss with the base guys to get API lined up for this (see bug 163177).
-			/*
-			int tableLimit= SearchPreferencePage.getTableLimit();
-			if (SearchPreferencePage.isTableLimited() && elements.length > tableLimit) {
-				Object[] shownElements= new Object[tableLimit];
-				System.arraycopy(elements, 0, shownElements, 0, tableLimit);
-				return shownElements;
-			}*/
-			return elements;
-		}
-		return EMPTY_ARR;
-	}
-	
-	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		if (newInput instanceof SearchResult) {
-			fResult= (SearchResult) newInput;
-		}
-	}
-	
-	public void elementsChanged(Object[] updatedElements) {
-		TableViewer viewer= getViewer();
-	    // cs : I've comment 'tableLimited' related code out for now.  We need to review the changes to the base class and react accordingly.
-		// Even more importantly we need to discuss with the base guys to get API lined up for this (see bug 163177).
-		//boolean tableLimited= SearchPreferencePage.isTableLimited();
-		for (int i= 0; i < updatedElements.length; i++) {
-			if (fResult.getMatchCount(updatedElements[i]) > 0) {
-				if (viewer.testFindItem(updatedElements[i]) != null)
-					viewer.update(updatedElements[i], null);
-				else {
-					//if (!tableLimited || viewer.getTable().getItemCount() < SearchPreferencePage.getTableLimit())
-						viewer.add(updatedElements[i]);
-				}
-			} else
-				viewer.remove(updatedElements[i]);
-		}
-	}
-
-	private TableViewer getViewer() {
-		return (TableViewer) fPage.getViewer();
-	}
-	
-	public void clear() {
-		getViewer().refresh();
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResultTreeContentProvider.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResultTreeContentProvider.java
deleted file mode 100644
index a3ca289..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/SearchResultTreeContentProvider.java
+++ /dev/null
@@ -1,168 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.search;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jface.viewers.AbstractTreeViewer;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.search.internal.ui.text.IFileSearchContentProvider;
-import org.eclipse.search.ui.text.AbstractTextSearchResult;
-
-
-public class SearchResultTreeContentProvider implements ITreeContentProvider, IFileSearchContentProvider {
-
-	private final Object[] EMPTY_ARR= new Object[0];
-
-	private AbstractTextSearchResult fResult;
-	private AbstractTreeViewer fTreeViewer;
-	private Map fChildrenMap;
-	
-	SearchResultTreeContentProvider(AbstractTreeViewer viewer) {
-		fTreeViewer= viewer;
-	}
-	
-	public Object[] getElements(Object inputElement) {
-		return getChildren(inputElement);
-	}
-	
-	public void dispose() {
-		// nothing to do
-	}
-	
-	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		if (newInput instanceof SearchResult) {
-			initialize((SearchResult) newInput);
-		}
-	}
-	
-
-	protected synchronized void initialize(AbstractTextSearchResult result) {
-		fResult= result;
-		fChildrenMap= new HashMap();
-		if (result != null) {
-			Object[] elements= result.getElements();
-			for (int i= 0; i < elements.length; i++) {
-				insert(elements[i], false);
-			}
-		}
-	}
-
-	protected void insert(Object child, boolean refreshViewer) {
-		Object parent= getParent(child);
-		while (parent != null) {
-			if (insertChild(parent, child)) {
-				if (refreshViewer)
-					fTreeViewer.add(parent, child);
-			} else {
-				if (refreshViewer)
-					fTreeViewer.refresh(parent);
-				return;
-			}
-			child= parent;
-			parent= getParent(child);
-		}
-		if (insertChild(fResult, child)) {
-			if (refreshViewer)
-				fTreeViewer.add(fResult, child);
-		}
-	}
-
-	/**
-	 * returns true if the child already was a child of parent.
-	 * 
-	 * @param parent
-	 * @param child
-	 * @return Returns <code>trye</code> if the child was added
-	 */
-	private boolean insertChild(Object parent, Object child) {
-		Set children= (Set) fChildrenMap.get(parent);
-		if (children == null) {
-			children= new HashSet();
-			fChildrenMap.put(parent, children);
-		}
-		return children.add(child);
-	}
-
-	protected void remove(Object element, boolean refreshViewer) {
-		// precondition here:  fResult.getMatchCount(child) <= 0
-	
-		if (hasChildren(element)) {
-			if (refreshViewer)
-				fTreeViewer.refresh(element);
-		} else {
-			if (fResult.getMatchCount(element) == 0) {
-				fChildrenMap.remove(element);
-				Object parent= getParent(element);
-				if (parent != null) {
-					removeFromSiblings(element, parent);
-					remove(parent, refreshViewer);
-				} else {
-					removeFromSiblings(element, fResult);
-					if (refreshViewer)
-						fTreeViewer.refresh();
-				}
-			} else {
-				if (refreshViewer) {
-					fTreeViewer.refresh(element);
-				}
-			}
-		}
-	}
-
-	private void removeFromSiblings(Object element, Object parent) {
-		Set siblings= (Set) fChildrenMap.get(parent);
-		if (siblings != null) {
-			siblings.remove(element);
-		}
-	}
-
-	public Object[] getChildren(Object parentElement) {
-		Set children= (Set) fChildrenMap.get(parentElement);
-		if (children == null)
-			return EMPTY_ARR;
-		return children.toArray();
-	}
-
-	public boolean hasChildren(Object element) {
-		return getChildren(element).length > 0;
-	}
-
-	public synchronized void elementsChanged(Object[] updatedElements) {
-		for (int i= 0; i < updatedElements.length; i++) {
-			if (fResult.getMatchCount(updatedElements[i]) > 0)
-				insert(updatedElements[i], true);
-			else
-				remove(updatedElements[i], true);
-		}
-	}
-
-	public void clear() {
-		initialize(fResult);
-		fTreeViewer.refresh();
-	}
-
-	public Object getParent(Object element) {
-		if (element instanceof IProject)
-			return null;
-		if (element instanceof IResource) {
-			IResource resource = (IResource) element;
-			return resource.getParent();
-		}
-		return null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ComponentSearchListDialog.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ComponentSearchListDialog.java
deleted file mode 100644
index 01e158b..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ComponentSearchListDialog.java
+++ /dev/null
@@ -1,640 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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.wst.common.ui.internal.search.dialogs;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.custom.ViewForm;
-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.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.eclipse.wst.common.core.search.scope.SearchScope;
-import org.eclipse.wst.common.ui.internal.Messages;
-
-
-public class ComponentSearchListDialog extends Dialog {
-    private Display display = Display.getCurrent();
-    private String dialogTitle;
-
-    protected ComponentSearchListDialogConfiguration configuration;
-    private List componentTableViewerInput;
-    private List masterComponentList;
-    
-    // widgets
-    protected Composite topComposite;
-    protected Composite bottomComposite; 
-    private Text textFilter;
-    protected TableViewer componentTableViewer;
-    
-    protected String fileLocationLabel = Messages._UI_LABEL_DECLARATION_LOCATION;
-    protected ViewForm fileLocationView;    
-    protected CLabel locationLabel;
-
-    // keep track of the item previously selected in the table
-	private TableItem prevItem;
-	private String prevItemText;
-
-	protected Object componentSelection;
-    protected Object qualifierTextSelection;
-    
-	protected ToolBar filterToolBar;
-	protected ToolItem toolItem;
-	protected MenuManager fMenuManager;
-	
-	protected HashMap TableDecoratorTrackingTool = new HashMap();  
-    private Button newButton;
- 
-
-	public ComponentSearchListDialog(Shell shell, String dialogTitle, ComponentSearchListDialogConfiguration configuration) {
-        super(shell);
-        setShellStyle(getShellStyle() | SWT.RESIZE);
-        this.dialogTitle = dialogTitle;
-        this.configuration = configuration;
-        componentTableViewerInput = new ArrayList();
-        masterComponentList = new ArrayList();
-        configuration.init(this);
-    }
-    
-	public void create() {
-        super.create();
-        getButton(IDialogConstants.OK_ID).setEnabled(false);
-        setTextFilterFocus();
-    }
-    
-    protected void setTextFilterFocus() {
-        textFilter.setFocus();        
-    }
-
-    protected Control createDialogArea(Composite parent) {
-        getShell().setText(dialogTitle);
-
-        Composite mainComposite = (Composite) super.createDialogArea(parent);
-        GridData gData = (GridData) mainComposite.getLayoutData();
-        gData.heightHint = 500;
-        gData.widthHint = 400;
-        
-        configuration.createWidgetAboveQualifierBox(mainComposite);        
-        // Subclasses may use this Composite to add desired widgets
-        //topComposite = new Composite(mainComposite, SWT.NONE);
-        //topComposite.setLayoutData(new GridData());
-        //topComposite.setLayout(new GridLayout());
-
-        // do we need to introduce a method here to contain this
-        // so we can add different parent other than 'topComposite'
-        Composite filterLabelAndText = new Composite(mainComposite, SWT.NONE);
-        GridLayout layoutFilterLabelAndText = new GridLayout(2, false);
-        layoutFilterLabelAndText.marginWidth = 0;
-        layoutFilterLabelAndText.marginHeight = 0;
-        filterLabelAndText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-        filterLabelAndText.setLayout(layoutFilterLabelAndText);
-
-        // Create Text textFilter
-        
-        Label filterLabel = new Label(filterLabelAndText, SWT.NONE);
-        filterLabel.setText(configuration.getFilterLabelText());// + "(? = any character, * = any string):");
-        GridData filterLabelData = new GridData();
-        filterLabelData.horizontalSpan = 2;
-        filterLabel.setLayoutData(filterLabelData);
-
-        textFilter = new Text(filterLabelAndText, SWT.SINGLE | SWT.BORDER);
-        textFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));        
-        textFilter.addModifyListener(new TextFilterModifyAdapter());
-        GridData textFilterData = new GridData();
-        textFilterData.horizontalAlignment = GridData.FILL;
-        textFilterData.grabExcessHorizontalSpace = true;
-        textFilter.setLayoutData(textFilterData);
-        
-        final INewComponentHandler handler = configuration.getNewComponentHandler();
-        if (handler != null)
-        {  
-           newButton = new Button(filterLabelAndText, SWT.NONE);
-           newButton.setText(Messages._UI_LABEL_New);  
-           newButton.addSelectionListener(new SelectionListener()
-           {
-
-            public void widgetDefaultSelected(SelectionEvent e)
-            {
-              handler.openNewComponentDialog();              
-            }
-
-            public void widgetSelected(SelectionEvent e)
-            {
-              handler.openNewComponentDialog();
-            }             
-           });                   
-        }
-        
-        // Create Component TableViewer
-        createComponentTableViewer(mainComposite);
-
-        configuration.createWidgetAboveQualifierBox(mainComposite);
-        
-        // Create Qualifier List widget
-        Label qualifierLabel = new Label(mainComposite, SWT.NONE);
-        qualifierLabel.setText(Messages._UI_LABEL_QUALIFIER);
-		qualifierLabel.setText(fileLocationLabel);
-
-        fileLocationView = new ViewForm(mainComposite, SWT.BORDER | SWT.FLAT );
-        GridData data = new GridData();
-        data.horizontalAlignment = GridData.FILL;
-        data.grabExcessHorizontalSpace = true;
-        data.heightHint = 22;
-        fileLocationView.setLayoutData(data);
-        
-    	locationLabel = new CLabel(fileLocationView, SWT.FLAT);
-        fileLocationView.setContent(locationLabel);
-    	locationLabel.setFont(fileLocationView.getFont());
-
-        configuration.createWidgetBelowQualifierBox(mainComposite);
-        
-        bottomComposite = new Composite(mainComposite, SWT.NONE);
-        bottomComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-        bottomComposite.setLayout(new GridLayout());
-
-        // Populate the Component TableViewer via the provider
-        // TODO: Is this the right way to set/get the ContentProvider?
-        componentTableViewer.setContentProvider(new ComponentTableContentProvider());
-        componentTableViewer.setLabelProvider(configuration.getDescriptionProvider().getLabelProvider());
-        componentTableViewer.setSorter(new ViewerSorter());
-        componentTableViewer.setInput(componentTableViewerInput);
-        
-        
-        // TODO (cs) need to do some work to make the default search scope
-        // more well defined, currently the default behaviour is to pass a null
-        // argument in to populateMasterComponentList but we should provide
-        // getters/setters to allow the default to be controlled
-        populateMasterComponentList(null);
-        refreshTableViewer("");
-
-        return mainComposite;
-    }
-    
-    /*
-     * Creates the Component TableViewer.
-     */
-    private void createComponentTableViewer(Composite base) {
-        componentTableViewer = createFilterMenuAndTableViewer(base);    
-        
-        componentTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-            public void selectionChanged(SelectionChangedEvent event) {
-                //IStructuredSelection structuredSelection = (IStructuredSelection) event.getSelection();
-                //List qualifiers = searchListProvider.getQualifiers(structuredSelection.getFirstElement());
-                //updateQualifierList(qualifiers);
-                updateCanFinish();
-            }
-        });
-        
-        componentTableViewer.getTable().addSelectionListener(new SelectionListener(){
-        	// Changing the text for the component selected and display its source
-        	// file in the box under the table viewer
-          
-        	IComponentDescriptionProvider descriptionProvider = configuration.getDescriptionProvider();        	
-			public void widgetSelected(SelectionEvent e) {				
-				run();
-			}
-
-			public void widgetDefaultSelected(SelectionEvent e) {
-        // bug 144548 - unnecessary
-        // run();
-			}
-
-			private void run() {
-				// restores the text of previous item
-				if (prevItem != null && !prevItem.isDisposed()){
-					prevItem.setText(prevItemText);
-				}
-				TableItem[] items = componentTableViewer.getTable().getSelection();
-				Object component = items[0].getData();
-
-				prevItem = items[0];
-				prevItemText = items[0].getText();
-
-				// add clarification for the first selected item
-				items[0].setText(  descriptionProvider.getName(component) + " - " + 
-    					descriptionProvider.getQualifier(component));
-
-				updateLocationView(component, descriptionProvider);
-			}
-        });
-        
-        componentTableViewer.addDoubleClickListener(new IDoubleClickListener() {
-
-			public void doubleClick(DoubleClickEvent event) {
-				okPressed();
-			}
-        	
-        });
-    }
-    
-    protected TableViewer createFilterMenuAndTableViewer(Composite comp) {
-    	Composite labelAndFilter = new Composite(comp, SWT.NONE);
-    	labelAndFilter.setLayoutData(new GridData(GridData.FILL_BOTH));
-		GridLayout layout= new GridLayout();
-		layout.numColumns= 2;
-		layout.marginWidth= 0; layout.marginHeight= 0;
-    	labelAndFilter.setLayout(layout);
-    	
-        Label tableLabel = new Label(labelAndFilter, SWT.NONE);
-        tableLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-        tableLabel.setText(configuration.getListLabelText());
-        
-        filterToolBar = new ToolBar(labelAndFilter,SWT.FLAT);
-        configuration.createToolBarItems(filterToolBar);
-
-        TableViewer tableViewer = new TableViewer(new Table(labelAndFilter, SWT.SINGLE | SWT.BORDER));
-        Control TableWidget = tableViewer.getTable();
-        GridData gd = new GridData(GridData.FILL_BOTH);
-        gd.horizontalSpan = 2;
-        TableWidget.setLayoutData(gd);
-
-        return tableViewer;
-    }
-    
-    private void updateLocationView(Object component, IComponentDescriptionProvider lp) {
-    	IFile file = lp.getFile(component);
-    	
-    	if ( file == null ){
-    		locationLabel.setText("");
-    		locationLabel.setImage(null);
-    		return;
-    	}
-    	String filePath = "";
-    	filePath = file.getFullPath().toString();
-        //locationView.redraw();
-        
-        locationLabel.setText(filePath);
-        locationLabel.setImage(lp.getFileIcon(component));
-    }
-    
-    
-    /*
-     * Returns the processed filter text for the Text field.  Inserts a "."
-     * before each supported meta-character.
-     */
-    protected String getProcessedFilterString() {
-        return processFilterString(textFilter.getText());
-    }
-
-    /*
-     * If supported metacharacters are used in the filter string, we need to
-     * insert a "." before each metacharacter.
-     */
-    private String processFilterString(String inputString) {
-        if (!(inputString.equals(""))) {
-            inputString = insertString("*", ".", inputString);
-            inputString = insertString("?", ".", inputString);
-            inputString = inputString + ".*";
-        } else {
-            inputString = ".*";
-        }
-
-        return inputString.toLowerCase();
-    }
-    
-    /*
-     * Helper method to insert a "." before each metacharacter in the
-     * search/filter string.
-     */
-    private String insertString(String target, String newString, String string) {
-        StringBuffer stringBuffer = new StringBuffer(string);
-
-        int index = stringBuffer.indexOf(target);
-        while (index != -1) {
-            stringBuffer = stringBuffer.insert(index, newString);
-            index = stringBuffer.indexOf(target, index + newString.length() + target.length());
-        }
-
-        return stringBuffer.toString();
-    }
-    
-
-
-    /*
-     * Listens to changes made in the text filter widget
-     */
-    private class TextFilterModifyAdapter implements ModifyListener {
-        public void modifyText(ModifyEvent e) {
-            if (e.widget == textFilter) {
-                if (delayedEvent != null) {
-                    delayedEvent.CANCEL = true;
-                }
-
-                delayedEvent = new DelayedEvent();
-                Display.getCurrent().timerExec(400, delayedEvent);
-            }
-        }
-    }
-
-    //TODO... do we really need one instance?
-    private DelayedEvent delayedEvent;
-
-    /*
-     * Update the component TableViewer when the text filter is modified.
-     * Use a DelayedEvent so we don't update on every keystroke.
-     */
-    private class DelayedEvent implements Runnable {
-        public boolean CANCEL = false;
-
-        public void run() {
-            if (!CANCEL) {
-                refreshTableViewer(getProcessedFilterString());
-                
-                // Select first match
-                if (componentTableViewer.getTable().getItemCount() > 0) {
-                    TableItem item = componentTableViewer.getTable().getItems()[0];
-                    TableItem items[] = new TableItem[1];
-                    items[0] = item;
-                    componentTableViewer.getTable().setSelection(items);
-                }
-                
-                // Update qualifierList
-                //IStructuredSelection structuredSelection = (IStructuredSelection) componentTableViewer.getSelection();
-                // TODO ... manage qualifiers
-                //List qualifiers = searchListProvider.getQualifiers(structuredSelection.getFirstElement());
-                //updateQualifierList(qualifiers);
-                
-                updateCanFinish();
-            }
-        }
-    }
-
-    class ComponentList implements IComponentList {
-        private Vector objectVector = new Vector();
-        private long currentChangeCounter = 0;
-        private long lastUpdateTime = 0;
-        
-        public void add(Object o) {
-            objectVector.add(o);
-            currentChangeCounter++;
-            doViewerUpdate();
-        }
-        
-        public void addAll(Collection collection)
-        {
-          objectVector.addAll(collection);
-          currentChangeCounter += collection.size();
-          doViewerUpdate();          
-        }
-        
-        private void doViewerUpdate() {
-            // TODO: Investigate if we should also add a timer condition??
-          //  if (currentChangeCounter >= 10) {
-          //      currentChangeCounter = 0;
-          //      fireUpdateList(this);
-          //  }
-          
-          // cs: yep I think we really do need to use a time based approach
-          //          
-          long time = System.currentTimeMillis();
-          if (time - lastUpdateTime > 300)
-          {
-             lastUpdateTime = time;
-             fireUpdateList(ComponentList.this);                              
-          }          
-        }
-
-        public int size() {
-            return objectVector.size();
-        }
-        
-        public List subList(int startIndex, int endIndex) {
-            return objectVector.subList(startIndex, endIndex);
-        }
-        
-        public Iterator iterator() {
-            return objectVector.iterator();
-        }
-    }
-
-    
-    // this method gets called from a non-ui thread so needs to call
-    // asyncExec to ensure the UI updates happen on the UI thread
-    //
-    protected void fireUpdateList(final ComponentList list) {    
-        Runnable runnable = new Runnable() {
-            public void run(){
-                // add new objects
-                int growingListSize = list.size();
-                int currentSize = masterComponentList.size();
-                if (growingListSize > currentSize) {
-                    masterComponentList.addAll(list.subList(currentSize, growingListSize));
-                }
-
-                refreshTableViewer(getProcessedFilterString());
-            }
-        };
-        display.asyncExec(runnable);        
-    }
-
-    
-    public void updateForFilterChange()
-    {
-      populateMasterComponentList(null);
-      refreshTableViewer(getProcessedFilterString());
-    }  
-    
-    /*
-     * Populate the Component TreeViewer with items.
-     */
-    protected void populateMasterComponentList(final SearchScope searchScope) {
-        masterComponentList.clear();
-        
-        final ComponentList componentList = new ComponentList();
-        
-        // TODO (cs) it doesn't seem to make sennse to do any of the work on the UI thread
-        // I've change the behaviour here to do all of the work in the background
-        //
-        //searchListProvider._populateComponentListQuick(componentList, 0);        
-        Job job = new Job("read components") {
-          protected IStatus run(IProgressMonitor monitor) {
-            try {
-              // this stuff gets executed on a non-UI thread
-              //
-              long time1 = System.currentTimeMillis();
-              configuration.getSearchListProvider().populateComponentList(componentList, searchScope, null);              
-              // Do a final update of our Input for the component tree viewer.
-              fireUpdateList(componentList);
-              long time2 = System.currentTimeMillis();
-              System.out.println("time=" + (time2 - time1) + " items= " + masterComponentList.size());
-            }
-            catch (Exception e) {
-            	e.printStackTrace();
-            }
-            return Status.OK_STATUS;
-          }          
-        };
-        job.schedule();
-    }
-    
-    protected void refreshTableViewer(String filterText) {
-        componentTableViewerInput.clear();
-        ILabelProvider labelProvider = configuration.getDescriptionProvider().getLabelProvider();
-        Pattern regex = Pattern.compile(filterText);
-        Iterator it = masterComponentList.iterator();
-        while (it.hasNext()) {
-            Object item = it.next();
-            String itemString = labelProvider.getText(item);           
-            Matcher m = regex.matcher(itemString.toLowerCase());
-            if (itemString.toLowerCase().startsWith(filterText) || m.matches()) {
-                componentTableViewerInput.add(item);
-            }
-        }
-        
-        componentTableViewer.refresh();
-        decorateTable();
-    }
-    
-    /**
-     * Looking at each item in the Table. If there are other items with same name
-     * , then add extra info (namespace, file) into the the text label of all these
-     * duplicated items.
-     * - This should be called everytime the Table viewer is refreshed..
-     */
-    protected void decorateTable(){
-    	TableDecoratorTrackingTool.clear();
-    	
-    	IComponentDescriptionProvider lp = configuration.getDescriptionProvider();
-
-    	// init the name-duplicates counter
-    	for (int i = 0; i < componentTableViewerInput.size(); i++){
-    		Object currentItem = componentTableViewerInput.get(i);
-    		String name = lp.getName(currentItem);
-    		Integer count = (Integer) TableDecoratorTrackingTool.get(name);
-			if ( count == null){
-    			TableDecoratorTrackingTool.put(name, new Integer(1));
-    		}
-    		else{
-    			TableDecoratorTrackingTool.put(
-    					name, new Integer(count.intValue() + 1));
-    		}
-    	}
-
-    	// Modify/decorate those items in the Table that have duplicated name
-    	TableItem[] items = componentTableViewer.getTable().getItems();
-    	for (int i =0 ; i < items.length; i++){
-    		Object currentItem = items[i].getData();
-    		Integer count = (Integer) TableDecoratorTrackingTool.get(lp.getName(currentItem));
-    		if ( count != null && count.intValue() > 1){	
-    			items[i].setText(lp.getName(currentItem) + " - " + 
-    					lp.getQualifier(currentItem));
-    		}
-    	}
-    }
-    
-
-    
-    /*
-     * If there is a selection in the ComponentTreeViewer, enable OK
-     */
-    protected void updateCanFinish() {
-        IStructuredSelection selection = (IStructuredSelection) componentTableViewer.getSelection();
-        if (selection.getFirstElement() != null) {
-            getButton(IDialogConstants.OK_ID).setEnabled(true);
-        }
-        else {
-            getButton(IDialogConstants.OK_ID).setEnabled(false);
-        }
-    }
-    
-    protected void okPressed() {
-        IStructuredSelection selection = (IStructuredSelection) componentTableViewer.getSelection();
-        componentSelection = selection.getFirstElement();
-        
-        super.okPressed();
-    }
-    
-    private class ComponentTableContentProvider implements ITreeContentProvider {
-        public Object[] getChildren(Object parentElement) {
-            if (parentElement instanceof List) {
-                return ((List) parentElement).toArray();
-            }
-            return new Object[0];
-        }
-        
-        public Object[] getElements(Object inputElement) {
-            return getChildren(inputElement);
-        }
-        
-        public Object getParent(Object element) {
-            return null;
-        }
-        
-        public boolean hasChildren(Object element) {
-            if (getChildren(element).length > 0) {
-                return true;
-            }
-            return false;
-        }
-        
-        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-        }
-        
-        public void dispose() {
-        }
-    }
-
-
-    public ComponentSpecification getSelectedComponent()
-    {
-      ComponentSpecification result = null;
-      if (componentSelection != null)
-      {  
-        result = new ComponentSpecification();
-        IComponentDescriptionProvider componentDescriptionProvider = configuration.getDescriptionProvider();
-        result.setName(componentDescriptionProvider.getName(componentSelection));
-        result.setQualifier(componentDescriptionProvider.getQualifier(componentSelection));
-        result.setFile(componentDescriptionProvider.getFile(componentSelection));
-        result.setObject(componentSelection);
-      }  
-      return result;
-    }       
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ComponentSearchListDialogConfiguration.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ComponentSearchListDialogConfiguration.java
deleted file mode 100644
index 8371108..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ComponentSearchListDialogConfiguration.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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.wst.common.ui.internal.search.dialogs;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.wst.common.ui.internal.Messages;
-
-public class ComponentSearchListDialogConfiguration
-{
-  private String filterLabelText = Messages._UI_LABEL_COMPONENT_NAME;
-  private String listLabelText = Messages._UI_LABEL_COMPONENTS;
-  private IComponentSearchListProvider searchListProvider; 
-  private IComponentDescriptionProvider descriptionProvider;
-  private INewComponentHandler newComponentHandler;
-  private ComponentSearchListDialog dialog;
-
-  public void init(ComponentSearchListDialog dialog)
-  {
-    this.dialog = dialog;
-  }
-
-  public void createWidgetAtTop(Composite parent)
-  {    
-  }    
-  
-  public void createWidgetAboveQualifierBox(Composite parent)
-  {    
-  }
-  
-  public void createWidgetBelowQualifierBox(Composite parent)
-  {    
-  }
-  
-  public void createToolBarItems(ToolBar toolBar)
-  {    
-  }
-
-  public IComponentDescriptionProvider getDescriptionProvider()
-  {
-    return descriptionProvider;
-  }
-
-  public void setDescriptionProvider(IComponentDescriptionProvider descriptionProvider)
-  {
-    this.descriptionProvider = descriptionProvider;
-  }
-
-  public IComponentSearchListProvider getSearchListProvider()
-  {
-    return searchListProvider;
-  }
-
-  public void setSearchListProvider(IComponentSearchListProvider searchListProvider)
-  {
-    this.searchListProvider = searchListProvider;
-  }
-
-  public ComponentSearchListDialog getDialog()
-  {
-    return dialog;
-  }
-
-  public INewComponentHandler getNewComponentHandler()
-  {
-    return newComponentHandler;
-  }
-
-  public void setNewComponentHandler(INewComponentHandler newComponentHandler)
-  {
-    this.newComponentHandler = newComponentHandler;
-  }
-  
-  public String getFilterLabelText()
-  {
-    return filterLabelText;
-  }
-  
-  public String getListLabelText()
-  {
-    return listLabelText;
-  }
-
-  public void setFilterLabelText(String filterLabelText)
-  {
-    this.filterLabelText = filterLabelText;
-  }
-
-  public void setListLabelText(String listLabelText)
-  {
-    this.listLabelText = listLabelText;
-  }  
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ComponentSpecification.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ComponentSpecification.java
deleted file mode 100644
index b7cabd1..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ComponentSpecification.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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.wst.common.ui.internal.search.dialogs;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.wst.common.core.search.pattern.QualifiedName;
-
-// TODO.. use QualifiedName consistently for name and metaName
-//
-public class ComponentSpecification
-{
-  String qualifier;
-  String name;
-  IFile file;
-  Object object;
-  boolean isNew;
-  QualifiedName metaName;
-  
-  public ComponentSpecification()
-  {    
-  }
-  
-  public ComponentSpecification(String qualifier, String name, IFile file)
-  {
-    super();
-    this.qualifier = qualifier;
-    this.name = name;
-    this.file = file;
-  }
-
-  public IFile getFile()
-  {
-    return file;
-  }
-
-  public void setFile(IFile file)
-  {
-    this.file = file;
-  }
-
-  public String getName()
-  {
-    return name;
-  }
-
-  public void setName(String name)
-  {
-    this.name = name;
-  }
-
-  public String getQualifier()
-  {
-    return qualifier;
-  }
-
-  public void setQualifier(String qualifier)
-  {
-    this.qualifier = qualifier;
-  }
-
-  public Object getObject()
-  {
-    return object;
-  }
-
-  public void setObject(Object object)
-  {
-    this.object = object;
-  }
-
-  public boolean isNew()
-  {
-    return isNew;
-  }
-
-  public void setNew(boolean isNew)
-  {
-    this.isNew = isNew;
-  }
-
-  public QualifiedName getMetaName()
-  {
-    return metaName;
-  }
-
-  public void setMetaName(QualifiedName metaName)
-  {
-    this.metaName = metaName;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/IComponentDescriptionProvider.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/IComponentDescriptionProvider.java
deleted file mode 100644
index 6389ff6..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/IComponentDescriptionProvider.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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.wst.common.ui.internal.search.dialogs;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.swt.graphics.Image;
-
-public interface IComponentDescriptionProvider
-{
-  boolean isApplicable(Object component);
-  
-  String getQualifier(Object component);
-
-  String getName(Object component);
-
-  IFile getFile(Object component);
-  
-  Image getFileIcon(Object component);
-
-  ILabelProvider getLabelProvider();
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/IComponentList.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/IComponentList.java
deleted file mode 100644
index 0fa248a..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/IComponentList.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.ui.internal.search.dialogs;
-
-import java.util.Iterator;
-
-public interface IComponentList {
-   public void add(Object o);
-   public Iterator iterator();
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/IComponentSearchListProvider.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/IComponentSearchListProvider.java
deleted file mode 100644
index 66a79ad..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/IComponentSearchListProvider.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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.wst.common.ui.internal.search.dialogs;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.common.core.search.scope.SearchScope;
-
-
-public interface IComponentSearchListProvider
-{
-  void populateComponentList(IComponentList list, SearchScope scope, IProgressMonitor pm);
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/INewComponentHandler.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/INewComponentHandler.java
deleted file mode 100644
index 7a5093f..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/INewComponentHandler.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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.wst.common.ui.internal.search.dialogs;
-
-public interface INewComponentHandler
-{
-  void openNewComponentDialog();
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ScopedComponentSearchListDialog.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ScopedComponentSearchListDialog.java
deleted file mode 100644
index 4bf7d8d..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/ScopedComponentSearchListDialog.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.wst.common.ui.internal.search.dialogs;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jface.window.Window;
-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.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkingSet;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.IWorkingSetSelectionDialog;
-import org.eclipse.wst.common.core.search.scope.ProjectSearchScope;
-import org.eclipse.wst.common.core.search.scope.SearchScope;
-import org.eclipse.wst.common.core.search.scope.WorkingSetSearchScope;
-import org.eclipse.wst.common.core.search.scope.WorkspaceSearchScope;
-import org.eclipse.wst.common.ui.internal.Messages;
-
-public class ScopedComponentSearchListDialog extends ComponentSearchListDialog
-{
-  protected final static String DEFAULT_NAME_FIELD_TITLE = Messages._UI_LABEL_COMPONENT_NAME;
-  protected final static String DEFAULT_LIST_TITLE = Messages._UI_LABEL_MATCHING_COMPONENTS;
-  public static final String SCOPE_SPECIFIED_FILE = Messages._UI_LABEL_SPECIFIED_FILE;
-  public static final String SCOPE_ENCLOSING_PROJECT = Messages._UI_LABEL_ENCLOSING_PROJECT;
-  public static final String SCOPE_WORKSPACE = Messages._UI_LABEL_WORKSPACE;
-  public static final String SCOPE_CURRENT_RESOURCE = Messages._UI_LABEL_CURRENT_RESOURCE;
-  public static final String SCOPE_WORKING_SETS = Messages._UI_LABEL_WORKING_SETS;
-  
-  private String currentSearchScope = SCOPE_CURRENT_RESOURCE;
-  protected Button chooseButton;
-  protected Button[] radioButton = new Button[4];
-  protected String filterLabel;
-  protected String listTitle;
-  protected IResource currentResource;
-  protected Composite selectWorkingSetsGroup;
-  protected Text workingSetsText;
-  
-  protected static String valueForWorkingSetsText;
-  
-  // working sets currently chosen by the user
-  private static IWorkingSet[] workingSets;
-
-  public ScopedComponentSearchListDialog(Shell shell, String dialogTitle, ComponentSearchListDialogConfiguration configuration)
-  {
-    super(shell, dialogTitle, configuration);
-  }
-  
-  public void setFilterLabel(String filterLabel)
-  {
-    this.filterLabel = filterLabel;
-  }
-  
-  public void setListTitle(String listTitle)
-  {
-    this.listTitle = listTitle;
-  }  
-
-  protected Control createDialogArea(Composite parent)
-  {
-    //super.setFilterLabel(filterLabel != null ? filterLabel : DEFAULT_NAME_FIELD_TITLE);
-    //setListLabelText(listTitle != null ? listTitle : DEFAULT_LIST_TITLE);
-    super.createDialogArea(parent);
-    // We use the Composite topComposite to create additional widgets
-    GridLayout layout = new GridLayout();
-    layout.marginWidth = 0;
-    bottomComposite.setLayout(layout);
-    Group group = new Group(bottomComposite, SWT.NONE);
-    GridLayout gridLayout = new GridLayout(3, false);
-    // gridLayout.marginWidth = 0;
-    // gridLayout.marginLeft = 2;
-    group.setLayout(gridLayout);
-    group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    group.setText(Messages._UI_LABEL_SEARCH_SCOPE);
-    ScopeChangeListener scopeChangeListener = new ScopeChangeListener();
-    radioButton[0] = new Button(group, SWT.RADIO);
-    radioButton[0].setText(SCOPE_WORKSPACE);
-    radioButton[1] = new Button(group, SWT.RADIO);
-    radioButton[1].setText(SCOPE_ENCLOSING_PROJECT);
-    radioButton[2] = new Button(group, SWT.RADIO);
-    radioButton[2].setText(SCOPE_CURRENT_RESOURCE);
-    radioButton[3] = new Button(group, SWT.RADIO);
-    radioButton[3].setText(SCOPE_WORKING_SETS);
-    for (int i = 0; i < radioButton.length; i++)
-    {
-      if (radioButton[i].getText().equals(currentSearchScope))
-      {
-        radioButton[i].setSelection(true);
-      }
-      radioButton[i].addSelectionListener(scopeChangeListener);
-    }
-    
-    selectWorkingSetsGroup = new Composite(group, SWT.NONE);
-	GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-    gd.horizontalSpan = 2;
-    selectWorkingSetsGroup.setLayoutData(gd);
-    GridLayout workingSetGroupLayout = new GridLayout(2, false);
-    workingSetGroupLayout.marginWidth = 0;
-    workingSetGroupLayout.marginHeight = 0;
-    selectWorkingSetsGroup.setLayout(workingSetGroupLayout);
-    
-    workingSetsText = new Text(selectWorkingSetsGroup, SWT.BORDER | SWT.READ_ONLY);
-    workingSetsText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    if (valueForWorkingSetsText != null )
-    	workingSetsText.setText(valueForWorkingSetsText);
-    
-    chooseButton = new Button(selectWorkingSetsGroup, SWT.NONE);
-    chooseButton.setText(Messages._UI_LABEL_CHOOSE);
-    chooseButton.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent e) {
-			Shell shell = getShell();
-			IWorkingSetSelectionDialog dialog = PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSetSelectionDialog(shell, true);
-			if ( dialog.open() == Window.OK){
-				workingSets = dialog.getSelection();
-				valueForWorkingSetsText = "";
-				for (int i = 0; i < workingSets.length; i++){
-					valueForWorkingSetsText += workingSets[i].getLabel();
-					// if not the last item, we add a comma
-					if ( i != workingSets.length - 1) 
-						valueForWorkingSetsText += ", ";
-				}
-				workingSetsText.setText(valueForWorkingSetsText);
-			}
-			// Set working sets radio button enabled, disable other buttons
-			radioButton[2].setSelection(false);
-			radioButton[1].setSelection(false);
-			radioButton[0].setSelection(false);
-			radioButton[3].setSelection(true);
-
-			scopeChangeHandler(radioButton[3]);
-		}
-    });
-
-    return parent;
-  } /*
-     * Returns the selected search scope.
-     */
-
-  public String getSearchScope()
-  {
-    return currentSearchScope;
-  }
-
-private void scopeChangeHandler(Button b) {	  
-	  if ((b.getStyle() & SWT.RADIO) != 0)
-	  {
-		  currentSearchScope = b.getText();
-		  
-		  // TODO (cs) need to do some work to make the default search scope
-		  // more well defined, currently the default behaviour is to pass a null
-		  // argument in to populateMasterComponentList but we should provide
-		  // getters/setters to allow the default to be controlled          
-		  SearchScope scope = null;
-		  if (currentSearchScope == SCOPE_ENCLOSING_PROJECT &&
-				  currentResource != null) { 
-			  scope = new ProjectSearchScope(currentResource.getFullPath());
-		  } 
-		  else if (currentSearchScope == SCOPE_WORKSPACE){
-			  scope = new WorkspaceSearchScope();
-		  }
-		  else if (currentSearchScope == SCOPE_WORKING_SETS){
-			  
-			  // Constructs the working sets scope from the working sets the user
-			  // selected
-			  WorkingSetSearchScope workingSetsScope = new WorkingSetSearchScope();
-			  for (int i = 0; i < workingSets.length; i++){
-				  workingSetsScope.addAWorkingSetToScope(workingSets[i].getElements());
-			  }			  
-			  scope = workingSetsScope;
-		  }
-		  
-		  populateMasterComponentList(scope);
-		  refreshTableViewer(getProcessedFilterString());
-		  // Select the first matching component. Though we should be
-		  // smarter here
-		  // and determine if there was a selection before the scope
-		  // switch (and if
-		  // the component is still available.
-		  Table table = componentTableViewer.getTable();
-		  TableItem items[] = table.getItems();
-		  if (items.length > 0)
-		  {
-			  TableItem select[] = new TableItem[1];
-			  select[0] = items[0];
-			  table.setSelection(select);
-		  }
-		  updateCanFinish();
-	  }
-  }
-
-private class ScopeChangeListener extends SelectionAdapter
-  {
-    public void widgetSelected(SelectionEvent e)
-    {
-      if (e.widget instanceof Button)       
-      {        
-        Button b = (Button) e.widget;
-        if (b.getSelection())
-        {  
-          scopeChangeHandler(b);
-        }  
-      }
-    }
-  }
-
-  public IResource getCurrentResource()
-  {
-    return currentResource;
-  }
-
-  public void setCurrentResource(IResource currentResource)
-  {
-    this.currentResource = currentResource;
-  }
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/Test.java b/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/Test.java
deleted file mode 100644
index d9883c2..0000000
--- a/plugins/org.eclipse.wst.common.ui/src-search/org/eclipse/wst/common/ui/internal/search/dialogs/Test.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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.wst.common.ui.internal.search.dialogs;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.actions.ActionDelegate;
-import org.eclipse.wst.common.core.search.scope.SearchScope;
-
-public class Test extends ActionDelegate
-{
-  public void run(IAction action)
-  {
-    try
-    {
-      ComponentSearchListDialogConfiguration configuration = new ComponentSearchListDialogConfiguration();
-      configuration.setListLabelText("List:");
-      configuration.setFilterLabelText("Filter:");
-      configuration.setSearchListProvider(searchListProvider);
-      configuration.setDescriptionProvider(new BaseComponentDescriptionProvider("foo"));
-      Shell shell = Display.getCurrent().getActiveShell();
-      ComponentSearchListDialog dialog = new ComponentSearchListDialog(shell, "test", configuration);
-      dialog.setBlockOnOpen(true);
-      dialog.create();
-      dialog.open();
-    }
-    catch (Exception e)
-    {
-      e.printStackTrace();
-    }
-  }
-  class BaseComponentDescriptionProvider extends LabelProvider implements IComponentDescriptionProvider
-  {
-    String prefix;
-
-    BaseComponentDescriptionProvider(String prefix)
-    {
-      this.prefix = prefix;
-    }
-
-    public IFile getFile(Object component)
-    {
-      return null;
-    }
-
-    public ILabelProvider getLabelProvider()
-    {
-      return this;
-    }
-
-    public String getName(Object component)
-    {
-      String string = (String) component;
-      return string.substring(prefix.length() + 1);
-    }
-
-    public String getQualifier(Object component)
-    {
-      return prefix;
-    }
-
-    public String getText(Object element)
-    {
-      return getName(element);
-    }
-
-    public boolean isApplicable(Object component)
-    {
-      if (component instanceof String)
-      {
-        return ((String) component).startsWith(prefix);
-      }
-      return false;
-    }
-
-	public Image getFileIcon(Object component) {
-		return null;
-	}
-  }
-  
-  IComponentSearchListProvider searchListProvider = new IComponentSearchListProvider()
-  {
-    public void populateComponentList(IComponentList list, SearchScope scope, IProgressMonitor pm)
-    {
-      list.add("foo:" + "Hello!");
-      list.add("foo:" + "Hey!");
-      list.add("foo:" + "How-are-you?");
-      list.add("foo:" + "What-is-that-smell?");
-    }
-  };
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/Messages.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/Messages.java
deleted file mode 100644
index 9bd1eb0..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/Messages.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2006 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.wst.common.ui.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-public class Messages {
-	private static final String BUNDLE_NAME = "plugin"; //$NON-NLS-1$
-
-	static {
-		NLS.initializeMessages(BUNDLE_NAME, Messages.class); //$NON-NLS-1$
-	}
-	
-//	 SelectSingleFilePage and SelectMultiFilePage
-	public static String _UI_LABEL_SOURCE_FILES;
-	public static String _UI_LABEL_SELECTED_FILES;
-
-	public static String _UI_IMPORT_BUTTON;
-	public static String _UI_IMPORT_BUTTON_TOOL_TIP;
-
-
-//	 SelectMultiFilePage
-	public static String _UI_ADD_BUTTON_TOOL_TIP;
-	public static String _UI_REMOVE_BUTTON_TOOL_TIP;
-	public static String _UI_REMOVE_ALL_BUTTON_TOOL_TIP;
-
-	public static String _UI_ADD_BUTTON;
-	public static String _UI_REMOVE_BUTTON;
-	public static String _UI_REMOVE_ALL_BUTTON;
-
-//	 SelectJavaProjectView
-	public static String _UI_LABEL_CHOOSE_FOLDER;
-
-//	 SelectJavaProjectDialog
-	public static String _UI_LABEL_FOLDER_SELECTION;
-
-//	 TextViewerOperationAction
-	public static String _UI_MENU_COPY;
-	public static String _UI_MENU_CUT;
-	public static String _UI_MENU_DELETE;
-	public static String _UI_MENU_PASTE;
-	public static String _UI_MENU_PREFIX;
-	public static String _UI_MENU_REDO;
-	public static String _UI_MENU_SELECT_ALL;
-	public static String _UI_MENU_SHIFT_LEFT;
-	public static String _UI_MENU_SHIFT_RIGHT;
-	public static String _UI_MENU_STRIP_PREFIX;
-	public static String _UI_MENU_UNDO;
-
-//	 SourceViewerGotoLineAction
-	public static String _UI_MENU_GOTO_LINE;
-	public static String _UI_GOTO_LINE_DIALOG_TITLE;
-	public static String _UI_GOTO_LINE_DIALOG_TEXT;
-
-	public static String _UI_FILE_CHANGED_TITLE;
-	public static String _UI_FILE_DELETED_SAVE_CHANGES;
-	public static String _UI_FILE_DELETED_EDITOR_CLOSED;
-	public static String _UI_FILE_CHANGED_LOAD_CHANGES;
-	public static String _UI_SAVE_BUTTON;
-	public static String _UI_CLOSE_BUTTON;
-
-
-//	 XSL Prefererence
-	public static String _UI_XSLT_SELECT;
-	public static String _UI_XSLT_STYLESHEET;
-	public static String _UI_XSLT_TRANSFORM;
-
-//	 XSL Debug Prefererence
-	public static String _UI_XSL_DEBUG_SELECT_LAUNCHER;
-	public static String _UI_XSL_DEBUG_LOCAL;
-	public static String _UI_XSL_DEBUG_REMOTE;
-	public static String _UI_XSL_TILE_EDITOR;
-	public static String _UI_XSL_DEBUG_AND_TRANSFORM;
-	public static String _UI_XSL_CONTEXT_URI;
-	public static String _UI_XSL_CONTEXT;
-
-
-	public static String _UI_OVERRIDE_FILE;
-	public static String _UI_JAVA_EXIST_FILE1;
-	public static String _UI_JAVA_EXIST_FILE2;
-	      
-//	 some options strings common to several plugins
-	public static String _UI_ERROR_CREATING_FILE_TITLE;
-	public static String _UI_ERROR_CREATING_FILE_SHORT_DESC;
-	public static String _UI_ERROR_CREATING_FILE_LONG_DESC;
-	public static String _UI_PARENT_FOLDER_IS_READ_ONLY;
-	public static String _UI_UNKNOWN_ERROR_WITH_HINT;
-	public static String _UI_UNKNOWN_ERROR;
-
-//	 usage - this label is followed by two radio button options for the file location
-	public static String _UI_LABEL_INCLUDE_URL_FILE;
-	public static String _UI_RADIO_FILE;
-	public static String _UI_RADIO_URL;
-
-	public static String _UI_LABEL_COMPONENTS;
-	public static String _UI_LABEL_QUALIFIER;
-
-//	- component selection dialogs 
-	public static String _UI_LABEL_COMPONENT_NAME;
-	public static String _UI_LABEL_MATCHING_COMPONENTS;
-	public static String _UI_LABEL_SPECIFIED_FILE;
-	public static String _UI_LABEL_ENCLOSING_PROJECT;
-	public static String _UI_LABEL_WORKSPACE;
-	public static String _UI_LABEL_CURRENT_RESOURCE;
-	public static String _UI_LABEL_SEARCH_SCOPE;
-	public static String _UI_LABEL_NARROW_SEARCH_SCOPE_RESOURCE;
-	public static String _UI_LABEL_AVAILABLE_TYPES;
-	public static String _UI_LABEL_WORKING_SETS;
-
-	public static String _UI_LABEL_New;
-	public static String _UI_LABEL_DECLARATION_LOCATION;
-	public static String _UI_LABEL_CHOOSE;
-
-
-
-
-
-
-	/*======================================================================================
-	!
-	! Here is the list of Error string that have message IDs - make sure they are unique
-	!  Range for b2bgui messageIDs: IWAX1201 - IWAX1400
-	!
-	!======================================================================================*/
-	public static String _ERROR_THE_CONTAINER_NAME;
-
-	public static String _ERROR_LOCAL_LOCATION;
-	public static String _ERROR_NOT_JAVA_PROJECT;
-
-//	 NOTE TO TRANSLATOR: this error message text is followed by a message from another plugin
-	public static String _ERROR_INVALID_JAVA_PACKAGE;
-
-//	 NOTE TO TRANSLATOR: (_ERROR_BAD_FILENAME_EXTENSION + string + _UI_LABEL_OR + string) or (_ERROR_BAD_FILENAME_EXTENSION)
-	public static String _ERROR_BAD_FILENAME_EXTENSION;
-	public static String _ERROR_FILE_ALREADY_EXISTS;
-
-	public static String _ERROR_CONTAINER_NOT_JAVA_BUILDPATH;
-	public static String _ERROR_USE_PROJECT_JAVA_SOURCE_FOLDER;
-
-	public static String _UI_ERROR;
-
-	public static String _ERROR_ROOT_ELEMENT;
-	public static String _ERROR_SAVING_FILE;
-
-//	 File Validator
-	public static String _UI_ERROR_VALIDATE_FAIL_TITLE;
-	public static String _UI_ERROR_VALIDATE_FAIL_MESSAGE;
-
-//	 PropertyDirtyChangeListener and PropertyResourceChangeListener
-	public static String _UI_ERROR_VALIDATE_EDIT_FAIL_ONE_FILE;
-
-//	public static String ExampleProjectCreationWizard.title;
-//	public static String ExampleProjectCreationWizard.op_error.title;
-//	public static String ExampleProjectCreationWizard.op_error.message;
-//
-//	public static String ExampleProjectCreationWizard.overwritequery.title;
-//	public static String ExampleProjectCreationWizard.overwritequery.message;
-//
-//
-//	public static String ExampleProjectCreationOperation.op_desc;
-//	public static String ExampleProjectCreationOperation.op_desc_proj;
-//
-//	public static String ExampleProjectCreationWizardPage.error.alreadyexists;
-	public static String SaveFilesDialog_save_all_resources;
-	public static String SaveFilesDialog_must_save;
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/UIPlugin.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/UIPlugin.java
deleted file mode 100644
index fafc278..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/UIPlugin.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class UIPlugin extends AbstractUIPlugin {
-	//The shared instance.
-	private static UIPlugin plugin;
-	
-	/**
-	 * The constructor.
-	 */
-	public UIPlugin() {
-		super();
-		plugin = this;
-	}
-	
-	/**
-	 * Returns the shared instance.
-	 */
-	public static UIPlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns the workspace instance.
-	 */
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle,
-	 * or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle aResourceBundle = getDefault().getResourceBundle();
-		try {
-			return (aResourceBundle != null) ? aResourceBundle.getString(key) : key;
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-    public static String getString(String key)
-    {
-      return getResourceString(key);     
-    }
-	/**
-	 * This gets the string resource and does one substitution.
-	 */
-	public static String getString(String key, Object s1)
-	{
-	  return MessageFormat.format(getResourceString(key), new Object [] { s1 });
-	}
-
-	/**
-	 * This gets the string resource and does two substitutions.
-	 */
-	public static String getString(String key, Object s1, Object s2)
-	{
-	  return MessageFormat.format(getResourceString(key), new Object [] { s1, s2 });
-	}     
-	
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		try {
-			return Platform.getResourceBundle(plugin.getBundle());
-		} catch (MissingResourceException x) {
-			log(x);
-		}
-		return null;
-	}
-
-	public ImageDescriptor getImageDescriptor(String name) {
-		try {
-			URL url= new URL(getBundle().getEntry("/"), name);
-			return ImageDescriptor.createFromURL(url);
-		} catch (MalformedURLException e) {
-			return ImageDescriptor.getMissingImageDescriptor();
-		}
-	}
-	
-    public Image getImage(String iconName)
-    {
-      ImageRegistry imageRegistry = getImageRegistry();
-      
-      if (imageRegistry.get(iconName) != null)
-      {
-        return imageRegistry.get(iconName);
-      }
-      else
-      {
-        imageRegistry.put(iconName, ImageDescriptor.createFromFile(getClass(), iconName));
-        return imageRegistry.get(iconName);
-      }
-    }
-    
-    public static String getPluginId() {
-		return getDefault().getBundle().getSymbolicName();
-	}	
-
-	public static void log(IStatus status) {
-		getDefault().getLog().log(status);
-	}
-
-	public static void log(String message, Throwable e) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, message, e));
-	}
-	
-	public static void log(String message) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, message, null));
-	}
-
-	public static void log(Throwable e) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, e.getLocalizedMessage(), e));
-	}
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		// TODO Auto-generated method stub
-		super.start(context);
-	}
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		// TODO Auto-generated method stub
-		super.stop(context);
-	}
-    
-    public static IWorkbenchPage getActivePage() {
-        return getDefault().internalGetActivePage();
-    }
-    
-    private IWorkbenchPage internalGetActivePage() {
-        IWorkbenchWindow window= getWorkbench().getActiveWorkbenchWindow();
-        if (window == null)
-            return null;
-        return getWorkbench().getActiveWorkbenchWindow().getActivePage();
-    }    
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dialogs/SaveDirtyFilesDialog.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dialogs/SaveDirtyFilesDialog.java
deleted file mode 100644
index ae180fd..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dialogs/SaveDirtyFilesDialog.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/**
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *   IBM - Initial API and implementation
- */
-package org.eclipse.wst.common.ui.internal.dialogs;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.ListDialog;
-import org.eclipse.wst.common.ui.internal.Messages;
-/**
- * A generic save files dialog. The bulk of the code for this dialog was taken
- * from the JDT refactoring support in
- * org.eclipse.jdt.internal.ui.refactoring.RefactoringSaveHelper. This class is
- * a good candidate for reuse amoung components.
- */
-public class SaveDirtyFilesDialog extends ListDialog
-{
-  public static boolean saveDirtyFiles()
-  {
-    boolean result = true;
-    // TODO (cs) add support for save automatically
-    Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
-    IEditorPart[] dirtyEditors = getDirtyEditors();
-    if (dirtyEditors.length > 0)
-    {  
-      result = false;
-      SaveDirtyFilesDialog saveDirtyFilesDialog = new SaveDirtyFilesDialog(shell);
-      saveDirtyFilesDialog.setInput(Arrays.asList(dirtyEditors));
-      // Save all open editors.
-      if (saveDirtyFilesDialog.open() == Window.OK)
-      {
-        result = true;        
-        int numDirtyEditors = dirtyEditors.length;
-        for (int i = 0; i < numDirtyEditors; i++)
-        {
-          dirtyEditors[i].doSave(null);
-        }
-      }     
-    }
-    return result;    
-  }
-
-  private static IEditorPart[] getDirtyEditors()
-  {
-    List result = new ArrayList(0);
-    IWorkbench workbench = PlatformUI.getWorkbench();
-    IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
-    for (int i = 0; i < windows.length; i++)
-    {
-      IWorkbenchPage[] pages = windows[i].getPages();
-      for (int x = 0; x < pages.length; x++)
-      {
-        IEditorPart[] editors = pages[x].getDirtyEditors();
-        for (int z = 0; z < editors.length; z++)
-        {
-          IEditorPart ep = editors[z];
-          result.add(ep);
-        }
-      }
-    }
-    return (IEditorPart[]) result.toArray(new IEditorPart[result.size()]);
-  }
-
-  public SaveDirtyFilesDialog(Shell parent)
-  {
-    super(parent);
-    setTitle(Messages.SaveFilesDialog_save_all_resources);
-    setAddCancelButton(true);
-    setLabelProvider(createDialogLabelProvider());
-    setMessage(Messages.SaveFilesDialog_must_save);
-    setContentProvider(new ListContentProvider());
-  }
-
-  protected Control createDialogArea(Composite container)
-  {
-    Composite result = (Composite) super.createDialogArea(container);
-    // TODO... provide preference that supports 'always save'
-    return result;
-  }
-
-  
-  private ILabelProvider createDialogLabelProvider()
-  {
-    return new LabelProvider()
-    {
-      public Image getImage(Object element)
-      {
-        return ((IEditorPart) element).getTitleImage();
-      }
-
-      public String getText(Object element)
-      {
-        return ((IEditorPart) element).getTitle();
-      }
-    };
-  }
-  
-  /** 
-   * A specialized content provider to show a list of editor parts.
-   * This class has been copied from org.eclipse.jdt.internal.ui.viewsupport.ListContentProvider
-   * This class should be removed once a generic solution is made available.
-   */   
-  private static class ListContentProvider implements IStructuredContentProvider
-  {
-    List fContents;
-
-    public ListContentProvider()
-    {
-    }
-
-    public Object[] getElements(Object input)
-    {
-      if (fContents != null && fContents == input)
-        return fContents.toArray();
-      return new Object[0];
-    }
-
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
-    {
-      if (newInput instanceof List)
-        fContents = (List) newInput;
-      else
-        fContents = null;
-      // we use a fixed set.
-    }
-
-    public void dispose()
-    {
-    }
-
-    public boolean isDeleted(Object o)
-    {
-      return fContents != null && !fContents.contains(o);
-    }
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dialogs/SelectSingleFileDialog.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dialogs/SelectSingleFileDialog.java
deleted file mode 100644
index 310b16c..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dialogs/SelectSingleFileDialog.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package  org.eclipse.wst.common.ui.internal.dialogs;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.TitleAreaDialog;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.internal.WorkbenchImages;
-import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
-import org.eclipse.wst.common.ui.internal.viewers.SelectSingleFileView;
-
-
-
-public class SelectSingleFileDialog extends TitleAreaDialog
-{            
-  protected SelectSingleFileView selectSingleFileView; 
-  protected Button okButton;
-  protected Image image;
- 
-  public SelectSingleFileDialog(Shell parentShell, IStructuredSelection selection, boolean isFileMandatory) 
-  {
-    super(parentShell);                      
-    if (selection == null)
-    {
-      selection = new StructuredSelection();
-    }
-    selectSingleFileView = new SelectSingleFileView(selection, isFileMandatory)
-    {
-	  public void createFilterControl(Composite composite)
-	  {
-		SelectSingleFileDialog.this.createFilterControl(composite);
-	  }
-    };  
-  }
-
-  protected Control createDialogArea(Composite parent) 
-  {                                                 
-    Composite dialogArea = (Composite)super.createDialogArea(parent);
-    
-    //TODO.. enable context help
-    //WorkbenchHelp.setHelp(dialogArea, B2BGUIContextIds.BTBG_SELECT_SINGLE_FILE_DIALOG);
-
-    Composite composite = new Composite(dialogArea, SWT.NONE);
-    composite.setLayout(new GridLayout());
-    GridData gd = new GridData(GridData.FILL_BOTH);
-    gd.widthHint = 350;
-    gd.heightHint = 350;
-    composite.setLayoutData(gd);   
-            
-    SelectSingleFileView.Listener listener = new SelectSingleFileView.Listener()
-    {                                             
-      public void setControlComplete(boolean isComplete)
-      {                            
-        okButton.setEnabled(isComplete);
-      }
-    };
-    selectSingleFileView.setListener(listener);
-    selectSingleFileView.createControl(composite);
-    return dialogArea;
-  }  
-
-  protected void createButtonsForButtonBar(Composite parent) 
-  {
-    okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
-    okButton.setEnabled(false);
-    createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-  }  
-       
-  public void create()
-  {
-    super.create();
-    selectSingleFileView.setVisibleHelper(true);
-    image = WorkbenchImages.getImageDescriptor(IDEInternalWorkbenchImages.IMG_DLGBAN_SAVEAS_DLG).createImage();
-    setTitleImage(image);
-  }
-
-  public void createFilterCombo(Composite composite)
-  {
-  } 
-
-  public IFile getFile()
-  {  
-    return selectSingleFileView.getFile();
-  }   
-
-  public void addFilterExtensions(String[] filterExtensions)
-  { 
-    selectSingleFileView.addFilterExtensions(filterExtensions);
-  }
-
-  public void addFilterExtensions(String[] filterExtensions, IFile [] excludedFiles)
-  {
-    selectSingleFileView.addFilterExtensions(filterExtensions, excludedFiles);
-  }
-  
-  public void createFilterControl(Composite composite)
-  { 
-  }
-
-  public boolean close()
-  {
-    if (image != null)
-    {
-      image.dispose();
-    }
-    return super.close();
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DefaultDragAndDropCommand.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DefaultDragAndDropCommand.java
deleted file mode 100644
index 9631e6a..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DefaultDragAndDropCommand.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.swt.dnd.DND;
-
-
-abstract public class DefaultDragAndDropCommand implements DragAndDropCommand
-{
-  /**
-   * This keeps track of the owner that is the target of the drag and drop.
-   */
-  protected Object target;
-
-  /**
-   * This keeps track of the location of the drag and drop.
-   */
-  protected float location;
-
-  /**
-   * This keeps track of the lower range of locations in which the effect of this command remains unchanged.
-   */
-  protected float lowerLocationBound;
-
-  /**
-   * This keeps track of the upper range of locations in which the effect of this command remains unchanged.
-   */
-  protected float upperLocationBound;
-
-  /**
-   * This keeps track of the permitted operations.
-   */
-  protected int operations;
-
-  /**
-   * This keeps track of the current operation that will be returned by {@link #getOperation}.
-   */
-  protected int operation;
-
-  /**
-   * This keeps track of the feedback that will be returned by {@link #getFeedback}.
-   */
-  protected int feedback;
-
-  /**
-   * This keeps track of the collection of dragged sources.
-   */
-  protected Collection sources;
-
-  public DefaultDragAndDropCommand(Object target, float location, int operations, int operation, Collection sources)
-  {
-    this.target = target;
-    this.location = location;
-    this.operations = operations;
-    this.operation = operation;
-    this.sources = new ArrayList(sources);
-    if (!canExecute()) 
-    {
-      this.operation = DND.DROP_NONE;
-    }
-    
-  }
-
-  public int getFeedback()
-  {
-    if (isAfter())
-    {
-      return DND.FEEDBACK_INSERT_AFTER;
-    }
-    else 
-    {
-      return DND.FEEDBACK_INSERT_BEFORE;
-    }
-  }    
-
-  public boolean isAfter()
-  {
-    return location > 0.5;
-  }
-
-  public int getOperation()
-  {
-    return operation;
-  }
-
-  public void reinitialize(Object target, float location, int operations, int operation, Collection sources)
-  {
-    this.target = target;
-    this.location = location;
-    this.operations = operations;
-    this.operation = operation;
-    this.sources = new ArrayList(sources);
-    if (!canExecute()) 
-    {
-      this.operation = DND.DROP_NONE;
-    }
-  }    
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropCommand.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropCommand.java
deleted file mode 100644
index 0ceb414..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropCommand.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-import java.util.Collection;
-
-public interface DragAndDropCommand
-{
-  //  public DragAndDropCommand(Object target, float location, int operations, int operation, Collection sources);
-
-  public boolean canExecute();
-
-  public void execute();
-
-  public int getFeedback();
-  
-  public int getOperation();
-
-  public void reinitialize(Object target, float location, int operations, int operation, Collection sources);
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropManager.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropManager.java
deleted file mode 100644
index 013a5b2..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/DragAndDropManager.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-import java.util.Collection;
-
-public interface DragAndDropManager
-{
-  public DragAndDropCommand createCommand(Object target, float location, int operations, int operation, Collection source);
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ObjectTransfer.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ObjectTransfer.java
deleted file mode 100644
index 684eafa..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ObjectTransfer.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-
-import org.eclipse.swt.dnd.ByteArrayTransfer;
-import org.eclipse.swt.dnd.TransferData;
-
-
-/**
- * This derived implementation of a byte array transfer short circuits the transfer process
- * so that a local transfer does not serialize the object
- * and hence can and will return the original object, not just a clone.
- * You only really need ever know about {@link #getInstance ObjectTransfer.getInstance()},
- * so that you can include it in when adding drag support to a viewer.
- * See {@link EditingDomainViewerDropAdapter} and {@link ViewerDragAdapter} for more details.
- * <p>
- * As an addded guard, the time is recorded and serialized in javaToNative
- * to that navive to java can ensure that it's returns the value that was really to have been transferred.
- */
-public class ObjectTransfer extends ByteArrayTransfer
-{
-  /**
-   * This is the register transfer type name.
-   */
-  protected static final String TYPE_NAME = "local-transfer-format";
-
-  /**
-   * This is the ID that is registered to the name.
-   */
-  protected static final int TYPE_ID = registerType(TYPE_NAME);
-
-  /**
-   * This is initialized and returned by {@link #getInstance}.
-   */
-  protected static ObjectTransfer instance;
-
-  /**
-   * This returns the one instance of this transfer agent.
-   */
-  public static ObjectTransfer getInstance()
-  {
-    if (instance == null)
-    {
-      instance = new ObjectTransfer();
-    }
-
-    return instance;
-  }
-
-  /**
-   * This records the time at which the transfer data was recorded.
-   */
-  protected long startTime;
-
-  /**
-   * This records the data being transferred.
-   */
-  protected Object object;
-
-  /**
-   * This creates an instance; typically you get one from {@link #getInstance}.
-   */
-  protected ObjectTransfer()
-  {
-  }
-
-  /**
-   * This returns the transfer ids that this agent supports.
-   */
-  protected int[] getTypeIds() 
-  {
-    return new int[] { TYPE_ID };
-  }
-
-  /**
-   * This returns the transfer names that this agent supports.
-   */
-  public String[] getTypeNames() 
-  {
-    return new String[] { TYPE_NAME };
-  }
-
-  /**
-   * This records the object and current time and encodes only the current time into the transfer data.
-   */
-  public void javaToNative(Object object, TransferData transferData) 
-  {
-    startTime = System.currentTimeMillis();
-    this.object = object;
-    if (transferData != null)
-    {
-      super.javaToNative(String.valueOf(startTime).getBytes(), transferData);
-    }
-  }
-
-  /**
-   * This decodes the time of the transfer and returns the recorded the object if the recorded time and the decoded time match.
-   */
-  public Object nativeToJava(TransferData transferData) 
-  {
-    long startTime  = Long.valueOf(new String((byte[])super.nativeToJava(transferData))).longValue();
-    return
-      this.startTime == startTime ?
-        object :
-        null;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDragAdapter.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDragAdapter.java
deleted file mode 100644
index d3aa343..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDragAdapter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.dnd.DragSourceEvent;
-import org.eclipse.swt.dnd.DragSourceListener;
-
-
-/**
- * This is an implemention of {@link DragSourceListener}.
- * It allows the selection in effect at the start of the drag and drop interaction to be recorded,
- * which is especially important for a drag and drop interaction within a single view.
- * This is how one of these adapters is typically hooked up:
- * <pre>
- *   viewer.addDragSupport
- *     (DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK, 
- *      new Transfer [] { LocalTransfer.getInstance() },
- *      ViewerDragAdapter(viewer));
- * </pre>
- * Doing so simply allows a drag operation to be initiated from the viewer
- * such that the viewer's selection is transferred to the drop target.
- * See {@link EditingDomainViewerDropAdapter} and {@link LocalTransfer} for more details.
- */
-public class ViewerDragAdapter implements DragSourceListener
-{
-  /**
-   * This keeps track of the viewer to which we are listening.
-   */
-  protected Viewer viewer;
-
-  /**
-   * This keeps track of the selection that is in effect at the start of the drag operation
-   */
-  protected ISelection selection;
-
-  /**
-   * This creates an instance for the given viewer.
-   */
-  public ViewerDragAdapter(Viewer viewer)
-  {
-    super();
-
-    // Remember the viewer and listen to SWT.DragDetect to alert the start of the drag operation.
-    //
-    this.viewer = viewer;
-  }
-
-  /**
-   * This is called when dragging is initiated; it records the {@link #selection} of {@link #viewer}.
-   */
-  public void dragStart(DragSourceEvent event)
-  {
-    selection = viewer.getSelection();
-  }
-
-  /**
-   * This is called when dragging is completed; it forgets the {@link #selection}.
-   */
-  public void dragFinished(DragSourceEvent event)
-  {
-    selection = null;
-  }
-  
-  /**
-   * This is called to transfer the data.
-   */
-  public void dragSetData(DragSourceEvent event)
-  {
-    if (ObjectTransfer.getInstance().isSupportedType(event.dataType))
-    {
-      event.data = selection;
-    }
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDropAdapter.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDropAdapter.java
deleted file mode 100644
index 3bd03f2..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/dnd/ViewerDropAdapter.java
+++ /dev/null
@@ -1,768 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.dnd;
-
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-
-import org.eclipse.jface.viewers.AbstractTreeViewer;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.custom.TableTreeItem;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DropTargetAdapter;
-import org.eclipse.swt.dnd.DropTargetEvent;
-import org.eclipse.swt.dnd.TransferData;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.swt.widgets.Widget;
-
-
-/**
- * This implementation of a drop target listener 
- * is designed to turn a drag and drop operation into a {@link Command} based on the model objects of an {@link EditingDomain}
- * and created by {@link DragAndDropManager#create}.
- * It is designed to do early data transfer so the the enablement and feedback of the drag and drop interaction
- * can intimately depend on the state of the model objects involed.
- * <p>
- * The base implementation of this class should be sufficient for most applications.
- * Any change in behaviour is typically accomplished by overriding 
- * {@link ItemProviderAdapter}.createDragAndDropCommand
- * to return a derived implementation of {@link DragAndDropCommand}.
- * This is how one these adapters is typically hooked up:
- * <pre>
- *   viewer.addDropSupport
- *     (DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK,
- *      new Transfer [] { ObjectTransfer.getInstance() },
- *      EditingDomainViewerDropAdapter(viewer));
- * </pre>
- * <p>
- * This implementation prefers to use a {@link ObjectTransfer}, 
- * which short-circuits the transfer process for simple transfers within the workbench,
- * the method {@link #getDragSource} can be overriden to change the behaviour.
- * The implementation also only handles an {@link IStructuredSelection},
- * but the method {@link #extractDragSource} can be overriden to change the behaviour.
- * <p>
- * You can call {@link #setHoverThreshold} to set the amount of time, in milliseconds, 
- * to hover over an item before {@link #hover} is called;
- * the default is 1500 milliseconds.
- */
-public class ViewerDropAdapter extends DropTargetAdapter
-{
-  /**
-   * This is the viewer for which this is a drop target listener.
-   */
-  protected Viewer viewer;
-
-  /**
-   * This is the collection of source objects being dragged.
-   */
-  protected Collection source;
-
-  /**
-   * This is the command created during dragging which provides the feedback and will carry out the action upon completion.
-   */
-  //  protected Command command;
-  protected DragAndDropCommand command;
- 
-  /**
-   * This records the object for which the {@link #command} was created.
-   */
-  protected Object commandTarget;
-
-  /**
-   * The amount of time to hover over a tree item before expanding it
-   */
-  protected int hoverThreshold = 1500;
-
-  /**
-   * The is the time the mouse first started hovering over the current item.
-   */
-  protected long hoverStart = 0;
-
-  /**
-   * This keeps track of the most recent item for the {@link #hoverStart}.
-   */
-  protected Widget previousItem;
-
-  /**
-   * This keeps track of the original operation that was in effect before we set the event.detail in here.
-   */
-  protected int originalOperation;
-
-  /**
-   * This keeps track of the information used to create the current command.
-   */
-  protected DragAndDropCommandInformation dragAndDropCommandInformation;
-
-  protected DragAndDropManager dragAndDropManager;
-
-  /**
-   * This creates and instance of the given domain and viewer.
-   */
-  public ViewerDropAdapter(Viewer viewer, DragAndDropManager dragAndDropManager)
-  {
-    this.viewer = viewer;
-    this.dragAndDropManager = dragAndDropManager;
-  }
-
-  /**
-   * This is called when the mouse first enters or starts dragging in the viewer.
-   */
-  public void dragEnter(DropTargetEvent event)
-  {
-    originalOperation = event.detail;
-    helper(event);
-  }
-
-  /**
-   * This is called when the mouse leaves or stops dragging in the viewer
-   */
-  public void dragLeave(DropTargetEvent event)
-  {
-    // Clean up the command if there is one.
-    //
-    if (command != null)
-    {
-//        command.dispose();
-      command = null;
-      commandTarget = null;
-    }
-
-    // Reset the other values.
-    //
-    previousItem = null;
-    hoverStart = 0;
-    source = null;
-  }
-
-  /**
-   * This is called when the operation has changed in some way, typically because the user changes keyboard modifiers.
-   */
-  public void dragOperationChanged(DropTargetEvent event)
-  {
-    originalOperation = event.detail;
-    helper(event);
-  }
-
-  /**
-   * This is called repeated when the mouse over the viewer.
-   */
-  public void dragOver(DropTargetEvent event) 
-  {
-    helper(event);
-  }
-
-  /**
-   * This is called just as the mouse is released over the viewer to initiate a drop.
-   */
-  public void dropAccept(DropTargetEvent event) 
-  {
-    // There seems to be a bug in SWT that the view may have scrolled.
-    // helper(event);
-  }
-
-  /**
-   * This is called to indate that the drop action should be invoked.
-   */
-  public void drop(DropTargetEvent event)
-  {
-    // There seems to be a bug in SWT that the view may have scrolled.
-    // helper(event);
-    if (dragAndDropCommandInformation != null)
-    {
-      command = dragAndDropCommandInformation.createCommand();
-
-      // Execute the command
-      command.execute();
-
-      // Clean up the state.
-      //
-      command = null;
-      commandTarget = null;
-      previousItem = null;
-      hoverStart = 0;
-      source = null;
-    }
-  }
-
-  /**
-   * This method is called the same way for each of the {@link org.eclipse.swt.dnd.DropTargetListener} methods, except during leave.
-   */
-  protected void helper(DropTargetEvent event)
-  {
-    // Try to get the source if there isn't one.
-    //
-    if (source == null)
-    {
-      source = getDragSource(event);
-    }                   
-    else if (event.currentDataType == null)
-    {
-      setCurrentDataType(event);
-    }
-
-    // If there's still no source, wait until the next time to try again.
-    //
-    if (source == null)
-    {
-      event.detail = DND.DROP_NONE;
-      event.feedback = DND.FEEDBACK_SELECT;
-    }
-    // Otherwise, if we need to scroll...
-    //
-    else if (scrollIfNeeded(event))
-    {
-      // In the case that we scroll, we just do all the work on the next event and only just scroll now.
-      //
-      event.feedback = DND.FEEDBACK_SELECT;
-    }
-    else
-    {
-      // Get the data from the item, if there is one.
-      //
-      Object target = event.item == null ? null : event.item.getData();
-      if (target instanceof TableTreeItem)
-      {
-        target = ((TableTreeItem)target).getData();
-      }
-
-      // Do the logic to determine the hover information.
-      // If we're over a new item from before.
-      //
-      if (event.item != previousItem)
-      {
-        // Remember the item and the time.
-        //
-        previousItem = event.item;
-        hoverStart = event.time;
-      } 
-      else if (target != null)
-      {
-        if (event.time - hoverStart > hoverThreshold)
-        {
-          hover(target);
-
-          // We don't need to hover over this guy again.
-          //
-          hoverStart = Integer.MAX_VALUE;
-        }
-      }
-
-      // Determine if we can create a valid command at the current mouse location.
-      //
-      boolean valid = false;
-
-      // If we don't have a previous cached command...
-      //
-      if (command == null)
-      {
-        // Create the command and test if it is executable.
-        //
-        commandTarget = target;
-        command = dragAndDropManager.createCommand(target, getLocation(event), event.operations, event.detail, source);
-        if (command != null)
-        {
-        	valid = command.canExecute();
-        }
-      }
-      else
-      {
-        int operation = originalOperation != event.detail ? originalOperation : event.detail;
-
-        // Check if the cached command is able to provide drag and drop feedback.
-        //
-        if (target == commandTarget)// && command instanceof DragAndDropFeedback)
-        {
-          float location = getLocation(event);
-
-          dragAndDropCommandInformation = 
-            new DragAndDropCommandInformation(target, location, event.operations, operation, source);
-
-          // If so, revalidate the command.
-          //
-          command.reinitialize(target, location, event.operations, operation, source);
-          if (command != null)
-          {
-          valid = command.canExecute();
-          }
-        }
-        else
-        {
-          // If not, dispose the current command and create a new one.
-          //
-          //          command.dispose();
-          commandTarget = target;
-
-          dragAndDropCommandInformation = 
-            new DragAndDropCommandInformation(target, getLocation(event), event.operations, operation, source);
-
-          // DragAndDropManager.create(domain, target, getLocation(event), event.operations, operation, source);
-          //
-          command = dragAndDropCommandInformation.createCommand();
-
-          if (command != null)
-          {
-          	valid = command.canExecute();
-          }
-        }
-      }
-
-      // If this command can provide detailed drag and drop feedback...
-      //
-      //if (command instanceof DragAndDropCommand)
-      if (command != null)
-      {
-        // Use the feedback for the operation and mouse point from the command.
-        //
-        event.detail = command.getOperation();
-        event.feedback = command.getFeedback();
-      }
-      else if (valid)
-      {
-        // All we can know is to provide selection feedback.
-        //
-        event.feedback = DND.FEEDBACK_SELECT;
-      }
-      else
-      {
-        // There is no executable command, so we'd better nix the whole deal.
-        //
-        event.detail = DND.DROP_NONE;
-        event.feedback = DND.FEEDBACK_SELECT;
-      }
-    }
-  }
-    
-
-  protected void setCurrentDataType(DropTargetEvent event)
-  {                                
-    ObjectTransfer objectTransfer = ObjectTransfer.getInstance();
-    TransferData [] dataTypes = event.dataTypes;
-    for (int i = 0; i < dataTypes.length; ++i)
-    {
-      TransferData transferData = dataTypes[i];
-      // If the local tansfer supports this datatype, switch to that data type
-      //
-      if (objectTransfer.isSupportedType(transferData))
-      {
-        event.currentDataType = transferData;
-      }
-    }
-  }
-
-  /** 
-   * This  attempts to extract the drag source from the event early, i.e., before the drop method.
-   * This implementation tries to use a {@link org.eclipse.wst.common.ui.internal.dnd.ObjectTransfer}.
-   */
-  protected Collection getDragSource(DropTargetEvent event)
-  {
-    // Check whether the current data type can be transfered locally.
-    //
-    ObjectTransfer objectTransfer = ObjectTransfer.getInstance();
-    if (!objectTransfer.isSupportedType(event.currentDataType))
-    {
-      // Iterate over the data types to see if there is a datatype that supports a local transfer.
-      //
-      setCurrentDataType(event);
-      return null;
-    }
-    else
-    {
-      // Transfer the data and extract it.
-      //
-      Object object = objectTransfer.nativeToJava(event.currentDataType);
-      if (object == null)
-      {
-      	return null;
-      }
-      else
-      {
-      	return extractDragSource(object);
-      }
-    }
-  }
-
-  /**
-   * This extracts a collection of dragged source objects from the given object retrieved from the transfer agent.
-   * This default implementation converts a structured selection into a collection of elements.
-   */
-  protected Collection extractDragSource(Object object)
-  {
-    // Transfer the data and convert the structured selection to a collection of objects.
-    //
-    if (object instanceof IStructuredSelection)
-    {
-      Collection result = new ArrayList();
-      for (Iterator elements = ((IStructuredSelection)object).iterator(); elements.hasNext(); )
-      {
-        result.add(elements.next());
-      }
-      return result;
-    }
-    else
-    {
-      return Collections.EMPTY_LIST;
-    }
-  }
-
-  /**
-   * This gets the amount of time, in milliseconds, to hover over an item before {@link #hover} is called.
-   */
-  public int getHoverThreshold()
-  {
-    return hoverThreshold;
-  }
-
-  /**
-   * This set the amount of time, in milliseconds, to hover over an item before {@link #hover} is called.
-   */
-  public void setHoverThreshold(int hoverThreshold)
-  {
-    this.hoverThreshold = hoverThreshold;
-  }
-
-  /**
-   * This is called when the cursor has hovered over the given target for longer than {@link #hoverThreshold}.
-   */
-  protected void hover(Object target)
-  {
-    if (viewer instanceof AbstractTreeViewer)
-    {
-      ((AbstractTreeViewer)viewer).expandToLevel(target, 1);
-    }
-  }
-
-  /** 
-   * This returns whether a scroll was performed based on the given drag coordinates.
-   */
-  protected boolean scrollIfNeeded(DropTargetEvent event)
-  {
-    // By default we'll not scroll
-    //
-    boolean result = false;
-
-    // We only handle a tree item right now.
-    //
-    if (event.item instanceof TreeItem)
-    {
-      // Tree items have special data that will help.
-      //
-      TreeItem treeItem = (TreeItem)event.item;
-
-      // We need need the point in the coordinates of the control and the control's bounds.
-      //
-      Tree tree = treeItem.getParent();
-      Point point = tree.toControl(new Point(event.x, event.y));
-      Rectangle bounds = tree.getClientArea();
-
-      // This is the distance in pixels from the top or bottom that will cause scrolling.
-      //
-      int scrollEpsilon = Math.min(treeItem.getBounds().height, bounds.height / 3);
-
-      // This will be the item that should be scrolled into the view.
-      //
-      TreeItem scrollTreeItem = null;
-
-      // If we should scroll up.
-      //
-      if (point.y < scrollEpsilon)
-      {
-        // Determine the parent to find the sibling.
-        //
-        TreeItem parent = treeItem.getParentItem();
-        // Walk through the siblings.
-        //
-        TreeItem [] children = parent == null ? tree.getItems() : parent.getItems();
-        for (int i = 0; i < children.length; ++i)
-        {
-          // Is this a match.
-          //
-          if (children[i] == treeItem)
-          {
-            // If there is a previous sibling...
-            //
-            if (i > 0)
-            {
-              scrollTreeItem = children[i - 1];
-
-              // Get the last deepest descendent of this previous sibling.
-              //
-              for (;;)
-              {
-                children = scrollTreeItem.getItems();
-                if (children != null && children.length != 0 && scrollTreeItem.getExpanded())
-                {
-                  scrollTreeItem = children[children.length - 1];
-                }
-                else
-                {
-                  break;
-                }
-              }
-            }
-            else
-            {
-              // The parent must be the previous.
-              //
-              scrollTreeItem = parent;
-            }
-
-            // We're done after the match.
-            //
-            break;
-          }
-        }
-      }
-      // If we should scroll down...
-      //
-      else if (bounds.height - point.y < scrollEpsilon)
-      {
-        // If this thing has visible children, then the first child must be next.
-        //
-        TreeItem [] children = treeItem.getItems();
-        if (children != null && children.length != 0 && treeItem.getExpanded())
-        {
-          scrollTreeItem = children[0];
-        }
-        else
-        {
-          // We need the parent to determine siblings and will walk up the tree if we are the last sibling.
-          //
-          while (scrollTreeItem == null)
-          {
-            // If there's no parent, we're done.
-            //
-            TreeItem parent = treeItem.getParentItem();
-            // Walk the children.
-            //
-            children = parent == null ? tree.getItems() : parent.getItems();
-            for (int i = 0; i < children.length; ++i)
-            {
-              // When we find the child.
-              //
-              if (children[i] == treeItem)
-              {
-                // If the next index is a valid index...
-                //
-                if (++i < children.length)
-                {
-                  // We've found the item.
-                  //
-                  scrollTreeItem = children[i];
-                }
-
-                // We're done with this parent.
-                //
-                break;
-              }
-            }
-
-            if (parent == null)
-            {
-              break;
-            }
-
-            // Walk up.
-            //
-            treeItem = parent;
-          }
-        }
-      }
-
-      // If we should scroll.
-      //
-      if (scrollTreeItem != null)
-      {
-        // Only scroll if we're on an item for a while.
-        //
-        if (previousItem != null && event.time - hoverStart > 200)
-        {
-          ScrollBar verticalScrollBar = tree.getVerticalBar();
-          if (verticalScrollBar != null)
-          {
-            int before = verticalScrollBar.getSelection();
-
-            // Make sure the item is scrolled in place.
-            //
-            tree.showItem(scrollTreeItem);
-
-            // Make sure we don't scroll again quickly.
-            //
-            previousItem = null;
-
-            // Indicate that we've done a scroll and nothing else should be done.
-            //
-            result = before != verticalScrollBar.getSelection();
-          }
-        }
-        else
-        {
-          // If the item changes, reset the timer information.
-          //
-          if (event.item != previousItem)
-          {
-            previousItem = event.item;
-            hoverStart = event.time;
-          }
-        }
-      }
-    }
-    else if (event.item instanceof TableItem)
-    {
-      // Table items have special data that will help.
-      //
-      TableItem tableItem = (TableItem)event.item;
-
-      // We need need the point in the coordinates of the control and the control's bounds.
-      //
-      Table table = tableItem.getParent();
-      Point point = table.toControl(new Point(event.x, event.y));
-      Rectangle bounds = table.getClientArea();
-      if (table.getHeaderVisible())
-      {
-        int offset = table.getItemHeight();
-        bounds.y += offset;
-        bounds.height -= offset;
-        point.y -= offset;
-      }
-
-      // The position of this item.
-      //
-      int index = table.indexOf(tableItem);
-
-      // This is the distance in pixels from the top or bottom that will cause scrolling.
-      //
-      int scrollEpsilon = Math.min(tableItem.getBounds(0).height, bounds.height / 3);
-
-      // This will be the item that should be scrolled into the view.
-      //
-      TableItem scrollTableItem = null;
-
-      // If we should scroll up.
-      //
-      if (point.y < scrollEpsilon)
-      {
-        if (index > 0)
-        {
-          scrollTableItem = table.getItems()[index - 1];
-        }
-      }
-      // If we should scroll down...
-      //
-      else if (bounds.height - point.y < scrollEpsilon)
-      {
-        if (index + 1 < table.getItems().length)
-        {
-          scrollTableItem =  table.getItems()[index + 1];
-        }
-      }
-
-      // If we should scroll.
-      //
-      if (scrollTableItem != null)
-      {
-        // Only scroll if we're on an item for a while.
-        //
-        if (previousItem != null && event.time - hoverStart > 200)
-        {
-          ScrollBar verticalScrollBar = table.getVerticalBar();
-          if (verticalScrollBar != null)
-          {
-            int before = verticalScrollBar.getSelection();
-
-            // Make sure the item is scrolled in place.
-            //
-            table.showItem(scrollTableItem);
-
-            // Make sure we don't scroll again quickly.
-            //
-            previousItem = null;
-
-            // Indicate that we've done a scroll and nothing else should be done.
-            //
-            result = before != verticalScrollBar.getSelection();
-          }
-        }
-        else
-        {
-          // If the item changes, reset the timer information.
-          //
-          if (event.item != previousItem)
-          {
-            previousItem = event.item;
-            hoverStart = event.time;
-          }
-        }
-      }
-    }
-
-    return result;
-  }
-
-  protected static float getLocation(DropTargetEvent event) 
-  {
-    if (event.item instanceof TreeItem)
-    {
-      TreeItem treeItem = (TreeItem)event.item;
-      Control control = treeItem.getParent();
-      Point point = control.toControl(new Point(event.x, event.y));
-      Rectangle bounds = treeItem.getBounds();
-      return (float)(point.y - bounds.y) / (float)bounds.height;
-    }
-    else if (event.item instanceof TableItem)
-    {
-      TableItem tableItem = (TableItem)event.item;
-      Control control = tableItem.getParent();
-      Point point = control.toControl(new Point(event.x, event.y));
-      Rectangle bounds = tableItem.getBounds(0);
-      return (float)(point.y - bounds.y) / (float)bounds.height;
-    }
-    else
-    {
-      return 0.0F;
-    }
-  }
-
-  protected class DragAndDropCommandInformation
-  {
-    //    protected EditingDomain domain;
-    protected Object target;
-    protected float location;
-    protected int operations;
-    protected int operation;
-    protected Collection source;
-    public DragAndDropCommandInformation
-      (Object target, float location, int operations, int operation, Collection source)
-    {
-      this.target = target;
-      this.location = location;
-      this.operations = operations;
-      this.operation = operation;
-      this.source = new ArrayList(source);
-    }
-
-    public DragAndDropCommand createCommand()
-    {
-      return dragAndDropManager.createCommand(target, location, operations, operation, source);
-    }
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/NavigableTableViewer.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/NavigableTableViewer.java
deleted file mode 100644
index 9f03d3b..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/NavigableTableViewer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.swt.widgets.Table;
-
-public class NavigableTableViewer extends TableViewer
-{
-   TableNavigator navigator;
-
-   public NavigableTableViewer(Table parent)
-   {
-      super(parent);
-      navigator = new TableNavigator(getTable(), this);
-   }
-
-   //override setCellEditors to put in call to moveAboveCellEditors for TableNavigator
-   public void setCellEditors(CellEditor[] editors)
-   {
-     super.setCellEditors(editors);
-     navigator.moveCellEditorsAbove(editors);
-
-   }
-
-   //override refresh so that TableNavigator is refreshed for all model changes
-   public void refresh()
-   {
-   	if( !this.getTable().isDisposed() )
-   	{
-      	super.refresh();
-      	navigator.refresh();
-   	}
-   }
-
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/ResourceFilter.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/ResourceFilter.java
deleted file mode 100644
index aaa3f5d..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/ResourceFilter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import java.util.Collection;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-
-public class ResourceFilter extends ViewerFilter 
-{
-  protected String[] fExtensions;
-  protected IFile[] fExcludedFiles;
-  protected Collection fExcludes;
-	
-  public ResourceFilter(String[] extensions, Collection exclude) 
-  {
-    fExtensions= extensions;
-    fExcludes= exclude;
-    fExcludedFiles = null;
-  }
-
-  public ResourceFilter(String[] extensions, IFile[] excludedFiles, Collection exclude) 
-  {
-    fExtensions= extensions;
-    fExcludes= exclude;
-    fExcludedFiles = excludedFiles;
-  }
-	
-  public boolean isFilterProperty(Object element, Object property) 
-  {
-    return false;
-  }
-	
-  public boolean select(Viewer viewer, Object parent, Object element) 
-  {
-    if (element instanceof IFile) 
-    {
-      if (fExcludes != null && fExcludes.contains(element)) 
-      {
-	return false;
-      }
-      String name= ((IFile)element).getName();
-      if (fExcludedFiles != null) 
-      {
-        for (int j= 0; j < fExcludedFiles.length; j++) 
-        {
-          if ( ((IFile)element).getLocation().
-               toOSString().compareTo((fExcludedFiles[j]).getLocation().toOSString()) == 0 )
-           return false;             
-        }            
-      }
-      if (fExtensions.length == 0) 
-      {
-        // assume that we don't want to filter any files based on 
-        // extension
-        return true;
-      }
-      for (int i= 0; i < fExtensions.length; i++) 
-      {
-        if (name.endsWith(fExtensions[i]))
-        {
-          return true;
-        }
-      } 
-      return false;
-    } 
-    else if (element instanceof IContainer) 
-    { // IProject, IFolder
-      try 
-      {
-      	IResource[] resources= ((IContainer)element).members();
-	for (int i= 0; i < resources.length; i++) 
-        {
-	  // recursive!
-	  if (select(viewer, parent, resources[i])) 
-          {
-	    return true;
-	  }
-	}
-      } 
-      catch (CoreException e) 
-      {
-      }				
-    }
-    return false;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java
deleted file mode 100644
index 586cf52..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectMultiFilePage.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import java.util.*;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.wizard.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.core.resources.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.model.*;
-import org.eclipse.ui.wizards.datatransfer.*;
-import org.eclipse.wst.common.ui.internal.Messages;
-
-
-// Page to specify the source files
-public class SelectMultiFilePage extends WizardPage {
-  IWorkbench workbench;
-  IStructuredSelection selection;
-  boolean isFileMandatory;
-  TreeViewer sourceFileViewer;
-  Button addButton;
-  Button removeButton;
-  Button removeAllButton;
-  org.eclipse.swt.widgets.List selectedListBox;
-  Button importButton;
-  private Vector fFilters;
-  protected IFile[] fileNames;
-  IWorkspaceRoot workspaceRoot;
-
-  private final static int SIZING_LISTS_HEIGHT = 200;
-  private final static int SIZING_LISTS_WIDTH = 150;
-
-  // parameter isFileMandatory is used to determine if at least one file must be selected  
-  // before being able to proceed to the next page
-  public SelectMultiFilePage(
-      IWorkbench workbench,
-      IStructuredSelection selection,
-      boolean isFileMandatory) {
-    super("SelectMultiFilePage");
-    this.workbench = workbench;
-    this.selection = selection;
-    this.isFileMandatory = isFileMandatory;
-    this.workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-    this.fileNames = null;
-  }
-
-  public void createControl(Composite parent) {
-    
-    Composite pageContent = new Composite(parent, SWT.NONE);
-    GridLayout layout = new GridLayout();
-    layout.numColumns = 3;
-    pageContent.setLayout(layout);
-    pageContent.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-    GridData outerFrameGridData = (GridData) pageContent.getLayoutData();
-    //		outerFrameGridData.horizontalAlignment = GridData.HORIZONTAL_ALIGN_FILL;
-    //		outerFrameGridData.verticalAlignment = GridData.VERTICAL_ALIGN_FILL;
-
-    //    WorkbenchHelp.setHelp(
-    //        pageContent,
-    //        B2BGUIContextIds.BTBG_SELECT_MULTI_FILE_PAGE);
-
-    createLabels(pageContent);
-    createSourceViewer(pageContent);
-    createButtonPanel(pageContent);
-    createSelectedListBox(pageContent);
-    createImportButton(pageContent);
-
-    setControl(pageContent);
-    if (isFileMandatory)
-      setPageComplete(false);
-
-  }
-
-  public IFile[] getFiles() {
-    return fileNames;
-  }
-
-  // This is a convenience method that allows filtering of the given file
-  // exensions. It internally creates a ResourceFilter so that users of this
-  // class don't have to construct one.
-  // If the extensions provided don't have '.', one will be added.
-  public void addFilterExtensions(String[] filterExtensions) {
-    // First add the '.' to the filterExtensions if they don't already have one
-    String[] correctedFilterExtensions =
-      new String[filterExtensions.length];
-    for (int i = 0; i < filterExtensions.length; i++) {
-      // If the extension doesn't start with a '.', then add one.
-      if (filterExtensions[i].startsWith("."))
-        correctedFilterExtensions[i] = filterExtensions[i];
-      else
-        correctedFilterExtensions[i] = "." + filterExtensions[i];
-    }
-
-    ViewerFilter filter =
-      new ResourceFilter(correctedFilterExtensions, null);
-    addFilter(filter);
-  }
-
-  public boolean isValidSourceFileViewerSelection(ISelection selection) {
-    return true;
-  }
-
-  public void setVisible(boolean visible) {
-    if (visible == true) {
-      if (fFilters != null) {
-        sourceFileViewer.resetFilters();
-        for (Iterator i = fFilters.iterator(); i.hasNext();)
-          sourceFileViewer.addFilter((ViewerFilter) i.next());
-      }
-      sourceFileViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
-    }
-    super.setVisible(visible);
-  }
-
-  public void setFiles(String[] fileNames) {
-    int size = Arrays.asList(fileNames).size();
-    Vector iFileNames = new Vector();
-    for (int i = 0; i < size; i++) {
-      IResource resource = workspaceRoot.findMember(fileNames[i]);
-      if (resource instanceof IFile)
-        iFileNames.addElement(resource);
-    }
-    IFile[] dummyArray = new IFile[iFileNames.size()];
-    this.fileNames = (IFile[]) (iFileNames.toArray(dummyArray));
-  }
-
-  public void resetFilters() {
-    fFilters = null;
-  }
-
-  public void addFilter(ViewerFilter filter) {
-    if (fFilters == null)
-      fFilters = new Vector();
-    fFilters.add(filter);
-  }
-
-  public void setAddButtonEnabled(boolean isEnabled) {
-    addButton.setEnabled(isEnabled);
-  }
-
-  public void setRemoveButtonEnabled(boolean isEnabled) {
-    removeButton.setEnabled(isEnabled);
-  }
-
-  private void createLabels(Composite pageContent) {
-    Label label = new Label(pageContent, SWT.LEFT);
-    label.setText(Messages._UI_LABEL_SOURCE_FILES);
-
-    GridData data = new GridData();
-    data.horizontalAlignment = GridData.FILL;
-    data.horizontalSpan = 2;
-    label.setLayoutData(data);
-
-    label = new Label(pageContent, SWT.LEFT);
-    label.setText(Messages._UI_LABEL_SELECTED_FILES);
-  }
-
-  public boolean checkIfFileInTarget(IFile fileToCheck) {
-    String[] strings = selectedListBox.getItems();
-    int size = selectedListBox.getItemCount();
-    for (int i = 0; i < size; i++) {
-      if (strings[i].compareTo(fileToCheck.getFullPath().toString())
-          == 0)
-        return true;
-    }
-    return false;
-  }
-
-  private void createSourceViewer(Composite parent) {
-    sourceFileViewer =
-      new TreeViewer(
-          new Tree(
-              parent,
-              SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER));
-    sourceFileViewer.setContentProvider(new WorkbenchContentProvider());
-    sourceFileViewer.setLabelProvider(new WorkbenchLabelProvider());
-    sourceFileViewer
-    .addSelectionChangedListener(new ISelectionChangedListener() {
-      public void selectionChanged(SelectionChangedEvent event) {
-        java.util.List list;
-        ISelection selection = event.getSelection();
-        boolean newFilesSelected = false;
-
-        if (selection instanceof IStructuredSelection) {
-          list = ((IStructuredSelection) selection).toList();
-          for (Iterator i = list.iterator(); i.hasNext();) {
-            IResource resource = (IResource) i.next();
-            if (resource instanceof IFile) {
-              if (checkIfFileInTarget((IFile) resource) == false)
-                newFilesSelected = true;
-            }
-          }
-          setAddButtonEnabled(newFilesSelected);
-        }
-      }
-    });
-    sourceFileViewer.addDoubleClickListener(new IDoubleClickListener() {
-      public void doubleClick(DoubleClickEvent event) {
-        addSelectedFilesToTargetList();
-      }
-    });
-
-    Control treeWidget = sourceFileViewer.getTree();
-    GridData gd = new GridData(GridData.FILL_BOTH);
-    gd.widthHint = SIZING_LISTS_WIDTH;
-    gd.heightHint = SIZING_LISTS_HEIGHT;
-    treeWidget.setLayoutData(gd);
-  }
-
-  private void createButtonPanel(Composite pageContent) {
-    Composite buttonPanel = new Composite(pageContent, SWT.NONE);
-    GridLayout layout = new GridLayout();
-    layout.numColumns = 1;
-    buttonPanel.setLayout(layout);
-    
-    GridData gridData = new GridData();
-    gridData.grabExcessHorizontalSpace = false;
-    gridData.grabExcessVerticalSpace = true;
-    gridData.verticalAlignment = GridData.CENTER;
-    gridData.horizontalAlignment = GridData.CENTER;
-    buttonPanel.setLayoutData(gridData);
-
-    addButton = new Button(buttonPanel, SWT.PUSH);
-    addButton.setText(Messages._UI_ADD_BUTTON);
-    gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.verticalAlignment = GridData.CENTER;
-    addButton.setLayoutData(gridData);
-    addButton.addSelectionListener(new ButtonSelectListener());
-    addButton.setToolTipText(Messages._UI_ADD_BUTTON_TOOL_TIP);
-    addButton.setEnabled(false);
-
-    removeButton = new Button(buttonPanel, SWT.PUSH);
-    removeButton.setText(Messages._UI_REMOVE_BUTTON);
-    gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.verticalAlignment = GridData.CENTER;
-    removeButton.setLayoutData(gridData);
-    removeButton.addSelectionListener(new ButtonSelectListener());
-    removeButton.setToolTipText(Messages._UI_REMOVE_BUTTON_TOOL_TIP);
-    removeButton.setEnabled(false);
-
-    removeAllButton = new Button(buttonPanel, SWT.PUSH);
-    removeAllButton.setText(Messages._UI_REMOVE_ALL_BUTTON);
-    gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.verticalAlignment = GridData.CENTER;
-    removeAllButton.setLayoutData(gridData);
-    removeAllButton.addSelectionListener(new ButtonSelectListener());
-    removeAllButton.setToolTipText(Messages._UI_REMOVE_ALL_BUTTON_TOOL_TIP);
-    removeAllButton.setEnabled(false);
-  }
-
-  private void createSelectedListBox(Composite parent) {
-    selectedListBox = new List(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
-    selectedListBox.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent event) {
-      }
-
-      public void widgetSelected(SelectionEvent event) {
-        java.util.List list;
-        if (selectedListBox.getSelectionCount() > 0)
-          setRemoveButtonEnabled(true);
-        else
-          setRemoveButtonEnabled(false);
-        return;
-      }
-    });
-
-    GridData gd = new GridData(GridData.FILL_BOTH);
-    gd.widthHint = SIZING_LISTS_WIDTH;
-    gd.heightHint = SIZING_LISTS_HEIGHT;
-    selectedListBox.setLayoutData(gd);
-  }
-
-  void createImportButton(Composite parent) {
-    importButton = new Button(parent, SWT.PUSH);
-    importButton.setText(Messages._UI_IMPORT_BUTTON);
-    
-    GridData gridData = new GridData();
-    gridData.horizontalAlignment = GridData.CENTER;
-    importButton.setLayoutData(gridData);
-    importButton.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-
-      public void widgetSelected(SelectionEvent e) {
-        FileSystemImportWizard importWizard =
-          new FileSystemImportWizard();
-        importWizard.init(workbench, selection);
-        Shell shell = Display.getCurrent().getActiveShell();
-        WizardDialog wizardDialog =
-          new WizardDialog(shell, importWizard);
-        wizardDialog.create();
-        wizardDialog.open();
-        sourceFileViewer.refresh();
-      }
-    });
-    importButton.setToolTipText(Messages._UI_IMPORT_BUTTON_TOOL_TIP);
-  }
-
-  public void addSelectedFilesToTargetList() {
-    ISelection selection = sourceFileViewer.getSelection();
-
-    if (isValidSourceFileViewerSelection(selection)) {
-      java.util.List list = null;
-      if (selection instanceof IStructuredSelection) {
-        list = ((IStructuredSelection) selection).toList();
-
-        if (list != null) {
-          list = ((IStructuredSelection) selection).toList();
-          for (Iterator i = list.iterator(); i.hasNext();) {
-            IResource resource = (IResource) i.next();
-            if (resource instanceof IFile) {
-              // Check if its in the list. Don't add it if it is.
-              String resourceName =
-                resource.getFullPath().toString();
-              if (selectedListBox.indexOf(resourceName) == -1)
-                selectedListBox.add(resourceName);
-            }
-          }
-          setFiles(selectedListBox.getItems());
-        }
-
-        setAddButtonEnabled(false);
-
-        if (selectedListBox.getItemCount() > 0) {
-          removeAllButton.setEnabled(true);
-          if (isFileMandatory)
-            setPageComplete(true);
-          if (selectedListBox.getSelectionCount() > 0)
-            setRemoveButtonEnabled(true);
-          else
-            setRemoveButtonEnabled(false);
-        }
-      }
-    }
-  }
-
-  class ButtonSelectListener implements SelectionListener {
-    public void widgetDefaultSelected(SelectionEvent e) {
-    }
-
-    public void widgetSelected(SelectionEvent e) {
-      if (e.widget == addButton) {
-        addSelectedFilesToTargetList();
-      } else if (e.widget == removeButton) {
-        String[] strings = selectedListBox.getSelection();
-        int size = selectedListBox.getSelectionCount();
-        for (int i = 0; i < size; i++) {
-          selectedListBox.remove(strings[i]);
-        }
-        removeButton.setEnabled(false);
-        if (selectedListBox.getItemCount() == 0) {
-          removeAllButton.setEnabled(false);
-          if (isFileMandatory)
-            setPageComplete(false);
-        }
-        setFiles(selectedListBox.getItems());
-      } else if (e.widget == removeAllButton) {
-        selectedListBox.removeAll();
-        removeButton.setEnabled(false);
-        removeAllButton.setEnabled(false);
-        if (isFileMandatory)
-          setPageComplete(false);
-        setFiles(selectedListBox.getItems());
-      }
-    }
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFilePage.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFilePage.java
deleted file mode 100644
index 78af295..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFilePage.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.IWorkbench;
-//import org.eclipse.ui.help.WorkbenchHelp;
-
-public class SelectSingleFilePage extends WizardPage
-{
-  protected IWorkbench workbench;
-  protected SelectSingleFileView selectSingleFileView;
-  
-  // parameter isFileMandatory is used to determine if a file must be selected  
-  // before being able to proceed to the next page
-  public SelectSingleFilePage(IWorkbench workbench, IStructuredSelection selection, boolean isFileMandatory)
-  {
-    super("SelectSingleFilePage");
-    this.workbench = workbench;           
-    selectSingleFileView = new SelectSingleFileView(selection, isFileMandatory);    
-  }
-
-  public void setVisible(boolean visible)
-  {
-    selectSingleFileView.setVisibleHelper(visible);
-    super.setVisible(visible);
-  }
-
-  public void createControl(Composite parent)
-  {                          
-    SelectSingleFileView.Listener listener = new SelectSingleFileView.Listener()
-    {                                             
-      public void setControlComplete(boolean isComplete)
-      {
-        setPageComplete(isComplete);
-      }
-    };
-    selectSingleFileView.setListener(listener);
-    Control control = selectSingleFileView.createControl(parent);
-//    WorkbenchHelp.setHelp(control, B2BGUIContextIds.BTBG_SELECT_SINGLE_FILE_PAGE);
-    setControl(control);
-  }  
-
-  public void addFilter(ViewerFilter filter) 
-  { 
-    selectSingleFileView.addFilter(filter);
-  }
-
-  public void addFilterExtensions(String[] filterExtensions)
-  { 
-    selectSingleFileView.addFilterExtensions(filterExtensions);
-  }     
-
-  public void resetFilters()
-  {    
-    selectSingleFileView.resetFilters();
-  }
-  
-  public IFile getFile()
-  {  
-    return selectSingleFileView.getFile();
-  }
-  
-  
-  /**
-   * Returns the selectSingleFileView.
-   * @return SelectSingleFileView
-   */
-  public TreeViewer getSourceFileViewer() {
-    return selectSingleFileView.sourceFileViewer;
-  }
-
-  /**
-   * Returns the selectSingleFileView.
-   * @return SelectSingleFileView
-   */
-  public SelectSingleFileView getSelectSingleFileView() {
-    return selectSingleFileView;
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java
deleted file mode 100644
index 62dac10..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/SelectSingleFileView.java
+++ /dev/null
@@ -1,401 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Vector;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.wizard.WizardDialog;
-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.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.model.WorkbenchContentProvider;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
-import org.eclipse.ui.wizards.datatransfer.FileSystemImportWizard;
-import org.eclipse.wst.common.ui.internal.Messages;
-import org.eclipse.wst.common.ui.internal.UIPlugin;
-
-    
-
-public class SelectSingleFileView
-{                                
-  protected Composite            composite;
-  protected IStructuredSelection selection;
-  protected boolean              isFileMandatory;
-  protected TreeViewer           sourceFileViewer;
-  protected Button               importButton;
-  protected Vector               fFilters;
-  protected IFile                selectedFile;
-  protected ISelection           defaultSelection;  
-  protected Listener             listener;
-  
-  public static interface Listener
-  {
-    public void setControlComplete(boolean isComplete); 
-  }
-
-  public SelectSingleFileView(IStructuredSelection selection, boolean isFileMandatory)
-  {                      
-    this.selection = selection;
-    this.isFileMandatory = isFileMandatory;
-    this.selectedFile= null;
-    this.defaultSelection = null;      
-  }                              
-
-  public Composite createControl(Composite parent)
-  {              
-    Composite composite = new Composite(parent, SWT.NONE);
-    composite.setLayout(new GridLayout());
-    composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-	Label label = new Label(composite, SWT.NONE);
-	label.setText(Messages._UI_LABEL_SOURCE_FILES);
-    createSourceViewer(composite);
-	  createFilterControl(composite);   
-    createImportButton(composite);  
-    return composite;
-  }
-
-
-  protected void createFilterControl(Composite composite) 
-  {	
-  } 
-
-public void setListener(Listener listener)
-  {
-    this.listener = listener;
-  }  
-
-  protected void createSourceViewer(Composite parent)
-  {
-    sourceFileViewer = new TreeViewer(new Tree(parent, SWT.SINGLE | SWT.BORDER));
-    sourceFileViewer.setContentProvider(new WorkbenchContentProvider());
-    sourceFileViewer.setLabelProvider(new WorkbenchLabelProvider());
-    sourceFileViewer.addSelectionChangedListener(new ISelectionChangedListener() 
-    {
-      public void selectionChanged(SelectionChangedEvent event) 
-      {                  
-        boolean isComplete = true;
-        java.util.List list;
-        ISelection selection = event.getSelection();
-        if (selection instanceof IStructuredSelection) 
-        {
-          list = ((IStructuredSelection)selection).toList();
-          for (Iterator i = list.iterator(); i.hasNext();)
-          {
-            IResource resource = (IResource) i.next();
-            if (resource instanceof IFile) 
-            {
-              selectedFile = (IFile) resource;
-              if (isFileMandatory) 
-              {                                   
-                isComplete = true;
-                break;     
-              }                                   
-            }            
-            else 
-            {
-              selectedFile = null;
-              if (isFileMandatory) 
-              {            
-                isComplete = false;
-              }
-            }
-          } 
-          
-          if (listener != null)
-          {           
-            listener.setControlComplete(isComplete);
-          }
-        }
-      }	
-    });
-    Control treeWidget = sourceFileViewer.getTree();
-    GridData gd = new GridData(GridData.FILL_BOTH);
-    treeWidget.setLayoutData(gd);
-  }
-  
-                                        
-  protected void createImportButton(Composite parent)
-  {   
-    importButton = new Button(parent, SWT.NONE);
-    importButton.setText(Messages._UI_IMPORT_BUTTON);
-    
-    GridData gridData = new GridData();    
-    gridData.horizontalAlignment = GridData.CENTER;
-    importButton.setLayoutData(gridData);
-    importButton.addSelectionListener(new SelectionListener()
-    {
-      public void widgetDefaultSelected(SelectionEvent e)
-      {
-      }
-
-      public void widgetSelected(SelectionEvent e)
-      {                 
-        // This listener is if the Import Wizard adds a new few, we want
-        // it to be selected when we come back from it
-        ImportAddResourceListener importAddResourceListener= new ImportAddResourceListener();
-        
-        ResourcesPlugin.getWorkspace().addResourceChangeListener(importAddResourceListener);
-          
-        FileSystemImportWizard importWizard = new FileSystemImportWizard();
-        IWorkbench workbench = UIPlugin.getDefault().getWorkbench();
-        selection = (IStructuredSelection) sourceFileViewer.getSelection();
-        importWizard.init(workbench, selection != null ? selection : new StructuredSelection());
-        Shell shell = Display.getCurrent().getActiveShell();
-        WizardDialog wizardDialog = new WizardDialog(shell, importWizard);
-        wizardDialog.create();
-        wizardDialog.open();
-        sourceFileViewer.refresh();
-        ResourcesPlugin.getWorkspace().removeResourceChangeListener(importAddResourceListener);
-        IFile importedFile = importAddResourceListener.getImportedFile();
-        if (importedFile != null) 
-        {          
-          StructuredSelection structuredSelection = new StructuredSelection(importedFile);
-          sourceFileViewer.setSelection(structuredSelection);
-        }
-      }
-    });                  
-    importButton.setToolTipText(Messages._UI_IMPORT_BUTTON_TOOL_TIP);
-  } 
-
-  public IFile getFile()
-  {
-    return selectedFile;
-  }
-
-  public void setDefaultSelection(ISelection selection)
-  {
-    this.defaultSelection = selection;
-  } 
-
-  public void resetFilters()
-  {
-    fFilters=null;
-  }
-
-  public void addFilter(ViewerFilter filter) 
-  {
-    if (fFilters == null)
-    {
-      fFilters= new Vector();
-    }
-    fFilters.add(filter);
-  }
-
-  // This is a convenience method that allows filtering of the given file
-  // exensions. It internally creates a ResourceFilter so that users of this
-  // class don't have to construct one.
-  // If the extensions provided don't have '.', one will be added.
-  public void addFilterExtensions(String[] filterExtensions)
-  {
-    // First add the '.' to the filterExtensions if they don't already have one
-    String[] correctedFilterExtensions = new String[filterExtensions.length];
-    for (int i=0; i < filterExtensions.length; i++) 
-    {
-      // If the extension doesn't start with a '.', then add one.
-      if (filterExtensions[i].startsWith("."))
-      {
-        correctedFilterExtensions[i] = filterExtensions[i];
-      }
-      else
-      {
-        correctedFilterExtensions[i] = "." + filterExtensions[i];
-      }
-    }
-
-    ViewerFilter filter = new ResourceFilter(correctedFilterExtensions, null);
-    addFilter(filter);
-  }                     
-
-// This is a convenience method that allows filtering of the given file
-// exensions. It internally creates a ResourceFilter so that users of this
-// class don't have to construct one.
-// If the extensions provided don't have '.', one will be added.
-  public void addFilterExtensions(String[] filterExtensions, IFile [] excludedFiles)
-  {
-    // First add the '.' to the filterExtensions if they don't already have one
-    String[] correctedFilterExtensions = new String[filterExtensions.length];
-    for (int i=0; i < filterExtensions.length; i++)
-    {
-      // If the extension doesn't start with a '.', then add one.
-      if (filterExtensions[i].startsWith("."))
-      {
-        correctedFilterExtensions[i] = filterExtensions[i];
-      }
-      else
-      {
-        correctedFilterExtensions[i] = "." + filterExtensions[i];
-      }
-    }
-    ViewerFilter filter;
-    if (excludedFiles != null)
-    {
-      filter = new ResourceFilter(correctedFilterExtensions, excludedFiles, null);
-    }
-    else
-    {
-      filter = new ResourceFilter(correctedFilterExtensions, null);
-    }
-    addFilter(filter);
-  }
-  
-  // This is a convenience method that allows filtering of the given file
-  // exensions. It internally creates a ResourceFilter so that users of this
-  // class don't have to construct one.
-  // If the extensions provided don't have '.', one will be added.
-  public void setFilterExtensions(String[] filterExtensions)
-  {
-	// First add the '.' to the filterExtensions if they don't already have one
-	String[] correctedFilterExtensions = new String[filterExtensions.length];
-	for (int i=0; i < filterExtensions.length; i++) 
-	{		
-	  // If the extension doesn't start with a '.', then add one.
-	  if (filterExtensions[i].startsWith("."))
-	  {
-		correctedFilterExtensions[i] = filterExtensions[i];
-	  }
-	  else
-	  {
-		correctedFilterExtensions[i] = "." + filterExtensions[i];
-	  }
-	}
-	ViewerFilter filter = new ResourceFilter(correctedFilterExtensions, null);
-    fFilters= new Vector();
-	fFilters.add(filter);
-	if (sourceFileViewer != null)
-	{	
-	  sourceFileViewer.getTree().setRedraw(false);
-      sourceFileViewer.resetFilters();
-      for (Iterator i=fFilters.iterator(); i.hasNext();)
-      {     
-	    sourceFileViewer.addFilter((ViewerFilter)i.next());
- 	  }
-	  sourceFileViewer.getTree().setRedraw(true);
-	  sourceFileViewer.getTree().redraw();
-	}	
-  }     
-                                 
-  // this method should be called by a Wizard page or Dialog when it becomes visible
-  public void setVisibleHelper(boolean visible)
-  {    
-    if (visible == true) 
-    {
-      if (fFilters != null) 
-      {
-        sourceFileViewer.resetFilters();
-        for (Iterator i=fFilters.iterator(); i.hasNext();) 
-       	  sourceFileViewer.addFilter((ViewerFilter)i.next());
-      }
-      sourceFileViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
-      sourceFileViewer.expandToLevel(2);
-
-      if (defaultSelection != null) 
-      {
-        sourceFileViewer.setSelection(defaultSelection, true);        
-      }   
-      else if (!sourceFileViewer.getSelection().isEmpty())
-      {     
-        sourceFileViewer.setSelection(sourceFileViewer.getSelection());
-      } 
-      else
-      {                         
-        if (isFileMandatory && listener != null)
-        {           
-          listener.setControlComplete(false);
-        }
-      }         
-    }                                   
-  }
-  
-  class ImportAddResourceListener implements IResourceChangeListener, IResourceDeltaVisitor
-  {
-	Vector importedFiles;
-
-	ImportAddResourceListener()
-	{
-	  importedFiles = new Vector(); 
-	}
-  
-	public void resourceChanged(IResourceChangeEvent event)
-	{
-	  IResourceDelta resourceDelta = event.getDelta();
-    
-	  try
-	  {
-		if (resourceDelta != null) 
-		{
-		  resourceDelta.accept(this);
-		}
-	  }
-	  catch (Exception e)
-	  {
-		//TODO... log exception
-		//UIPlugin.getMsgLogger().write("Exception caught during resource change" + e);
-		//UIPlugin.getMsgLogger().writeCurrentThread(); 
-	  }      
-	}
-
-	public boolean visit(IResourceDelta delta)
-	{
-	  if (delta.getKind() == IResourceDelta.ADDED)
-	  {
-		if (delta.getResource() instanceof IFile) 
-		  importedFiles.add(delta.getResource());
-	  }
-	  return true;
-	}
-
-	public Collection getImportedFiles()
-	{
-	  return importedFiles;
-	}
-    
-	// This returns the first imported file in the list of imported files
-	public IFile getImportedFile()
-	{
-	  if (importedFiles.isEmpty() == false) 
-		return (IFile)importedFiles.firstElement();
-  
-	  return null;
-	}
-  }  
-  
-  public void addSelectionChangedTreeListener(ISelectionChangedListener treeListener) {
-  	sourceFileViewer.addSelectionChangedListener(treeListener);
-  }
-}              
-
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/TableNavigator.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/TableNavigator.java
deleted file mode 100644
index e729cfb..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/internal/viewers/TableNavigator.java
+++ /dev/null
@@ -1,409 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.ui.internal.viewers;
-
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.*;
-
-import org.eclipse.swt.custom.TableCursor;
-import org.eclipse.swt.custom.TableTreeItem;
-import org.eclipse.jface.viewers.*;
-
-
-  /**
-   * Adds a TableCursor to a StructuredViewer - for keyboard navigation of the table
-   * The intent of this class is to provide the standard listeners for using F2 to
-   * activate cell editors.
-   *
-   * Due to a current bug in the TableCursor, TableViewers using this class must make
-   * a call similar to the TableNavigator method moveCellEditorsAbove(cellEditors)
-   * whenever a setCellEditors call is made in the StructuredViewer.  This is so that the
-   * cell editor control shows up above the table cursor control.
-   */
-
-public class TableNavigator extends TableCursor
-{
-  private static final String TABLETREEITEM_ID = "TableTreeItemID";
-
-   final Table table;
-
-   public TableNavigator(Table table, StructuredViewer viewer)
-   {
-      super(table, SWT.NONE);
-      this.table = table;
-      final Table currentTable = table;
-      final StructuredViewer sViewer = viewer;
-
-      // Linux index out of bounds fix.  See defect 253429, 253433, and more
-      setVisible(false);
-
-      addPaintListener(viewer);
-      addKeyListeners(viewer);
-      addMouseListeners(viewer);
-      addSelectionListener(new SelectionAdapter()
-      {
-      	/**
-		 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(SelectionEvent)
-		 */
-		public void widgetSelected(SelectionEvent e) {
-			super.widgetSelected(e);
-			     if (sViewer instanceof TableTreeViewer)
-                 {
-                   TableTreeItem tableTreeItem = (TableTreeItem)getRow().getData(TABLETREEITEM_ID);
-                   StructuredSelection selection = new StructuredSelection(tableTreeItem.getData());
-                   sViewer.setSelection(selection, true);
-                 }
-		}
-
-
-      });
-      addFocusListener(new FocusAdapter(){
-         public void focusGained(FocusEvent e)
-         {
-         	// if e.source is not a child of the table then set selection - this is for tab into viewer
-         	Object eventSource = e.getSource();
-         	if (eventSource instanceof Control)
-         	{
-         	if (!isChild(currentTable, (Control)eventSource))
-         	{
-         	  if (currentTable.getItemCount() > 0 && currentTable.getSelectionCount() <= 0)
-              {
-                 if (sViewer instanceof TableTreeViewer)
-                 {
-                   TableTreeItem tableTreeItem = (TableTreeItem)getRow().getData(TABLETREEITEM_ID);
-                   StructuredSelection selection = new StructuredSelection(tableTreeItem.getData());
-                   sViewer.setSelection(selection, true);
-                 }
-                 else
-                 {
-               	   currentTable.setSelection(0); 
-               	   setSelection(0,0);
-                 }              
-              }              
-       	    }
-       	    else 
-       	    {
-       	      if (currentTable.getItems().length > 0)
-       	      {
-       	      	 // cursor can end up on a non-existent table row 
-       	         //   currently no way to get the current table cursor row 
-       	      	 //   so for now just catch the exception since it doesn't
-       	      	 //   cause any side effects.
-       	      	 try
-       	      	 {
-                   setVisible(true);
-       	      	 }
-       	      	 catch (Exception ee)
-       	      	 {     	            	      	
-       	      		currentTable.setSelection(0);       	      		         
-       	      		setSelection(0,0);
-       	      	 }
-       	       }       	    
-       	       else  // do not show table cursor if there are no elements in the table - avoid repaint
-       	       {
-       	         setVisible(false);
-       	       }
-              }
-         	}          
-          }
-          
-          protected boolean isChild(Control parent, Control child)
-          {
-            Control tempChild = child;
-            while (tempChild != null)
-            {
-              if (tempChild == parent)
-              {
-                return true;
-              }
-              tempChild = tempChild.getParent();
-            }
-            return false;
-          }
-          
-          /**
-           * @see org.eclipse.swt.events.FocusAdapter#focusLost(FocusEvent)
-           */
-          public void focusLost(FocusEvent e)
-          {
-            // Set the table navigator to be not visible if the the table
-            // is not in focus and a child of the table is not in focus
-            // note that we do this asynchronously so we don't mess up the
-            // current focus handling.
-            Display.getDefault().asyncExec(new Runnable()
-            { 
-              /**
-               * @see java.lang.Runnable#run()
-               */
-              public void run()
-              {
-                if (currentTable != null && !currentTable.isDisposed() && !currentTable.isFocusControl() &&
-                    !isChild(currentTable, Display.getDefault().getFocusControl()))
-                {
-                  setVisible(false);
-                }
-              }
-            });
-          }
-
-      }); 
-      
-     
-      
-
-      table.addFocusListener(new FocusAdapter()
-      {
-        /**
-         * @see org.eclipse.swt.events.FocusListener#focusGained(FocusEvent)
-         */
-        public void focusGained(FocusEvent e)
-        {
-          // only display navigator if there are items in the table 
-          // and if the focus wasn't gained from our own table navigator
-          // (ie focus came from outside)
-          if (currentTable.getItemCount() > 0 &&
-              (Display.getDefault().getFocusControl() != null) &&
-              !Display.getDefault().getFocusControl().equals(TableNavigator.this))
-          {
-            // note that we do this asynchronously so we don't mess up the
-            // current focus handling.
-            Display.getDefault().asyncExec(new Runnable()            
-            {
-              /**
-               * @see java.lang.Runnable#run()
-               */
-              public void run()
-              {
-                if (!isVisible())
-                {
-                  try
-                  {
-                    setVisible(true);
-                    setFocus();
-                  }
-                  catch (Exception e)
-                  {
-                      // catch IllegalArgumentExceptions here - index out of bounds on tableviewer
-                      if (currentTable.getItemCount() > 0)
-                      {
-                      currentTable.setSelection(0);                     
-                      setSelection(0,0);                   
-                      }
-                      else  // do not show table cursor if there are no elements in the table - avoid repaint
-                      {
-                        setVisible(false);
-                      }
-                  }
-                }
-              }
-            });
-          }
-        }
-      });           
-   }
-
-   public Table getTable()
-   {
-     return table;
-   }
-
-    public void addPaintListener(StructuredViewer viewer)
-    {
-      final StructuredViewer tableViewer = viewer;
-
-      addPaintListener(new PaintListener() 
-      {
-         public void paintControl(PaintEvent e)
-         {
-         	TableItem[] selection = table.getSelection();
-            final TableItem row = (selection.length == 0) ? table.getItem(table.getTopIndex()) : selection[0];
-            final String cellText = row.getText(getColumn());
-            final Image cellImage = row.getImage(getColumn());
-            final int col = getColumn();
-
-            Display.getCurrent().asyncExec(new Runnable()
-            {
-               public void run()
-               {
-                  if (!row.isDisposed())
-                  {
-                     String newText = row.getText(getColumn());
-                     TableItem cursorRow = getRow();
-                     if (!newText.equals(cellText) || !(row.getImage(col) == cellImage)) 
-                     {
-                       redraw();
-                     }
-                  }
-                }
-             });
-           }
-       });
-    }
-
-
-    public SelectionKeyAdapter getKeyAdapter(StructuredViewer viewer)
-    {
-        if (keyAdapter == null)
-        {
-           return new SelectionKeyAdapter(viewer);
-        }
-        else return keyAdapter;
-    }
-
-    public void setKeyAdapter(SelectionKeyAdapter kAdapter)
-    {
-       keyAdapter = kAdapter;
-    }
-
-    protected SelectionKeyAdapter keyAdapter = null;
-
-    public class SelectionKeyAdapter extends KeyAdapter
-    {
-       StructuredViewer structuredViewer;
-
-       public SelectionKeyAdapter(StructuredViewer viewer)
-       {
-          super();
-          this.structuredViewer = viewer;
-       }
-
-       int lastKeyPressed = -1;  // used to cache the last key for key combos
-
-       public void keyPressed(KeyEvent e) 
-       {       	
-               TableItem row = getRow();
-               int column = getColumn();                
-
-               // hack to emulate SHIFT+F10 popup menu - otherwise table cursor
-               //   obscures the table popup mechanism and it doesn't work.
-               if (lastKeyPressed == SWT.SHIFT && e.keyCode == SWT.F10)
-               {
-                  Menu popup = getTable().getMenu();
-                  popup.setVisible(true);
-               }
-               lastKeyPressed = e.keyCode;
-               
-               //jvh - look for + or - key
-               // column == 0
-               if (row.getData(TABLETREEITEM_ID) instanceof TableTreeItem)
-               {
-	               if (column == 0 && e.character == '+') 
-	               {
-               	  	  TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);	               	
-	               	  ((TableTreeViewer)structuredViewer).setExpandedState(tableTreeItem.getData(), true);                       
-	               	  refresh();
-	               }
-	               else if (column == 0 && e.character == '-') 
-	               {
-	               	  TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);	               	
-	               	  ((TableTreeViewer)structuredViewer).setExpandedState(tableTreeItem.getData(), false);                       
-                      refresh();
-	               }               
-               }
-               // use F2 to invoke editing for a cell
-               if (e.keyCode == SWT.F2)     
-               {
-               	  if (structuredViewer instanceof TableViewer)
-               	  {
-                    ((TableViewer)structuredViewer).editElement(row.getData(), column);   
-               	  }
-               	  else if (structuredViewer instanceof TableTreeViewer)
-               	  {  
-               	  	  TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);
-               	  	 ((TableTreeViewer)structuredViewer).editElement(tableTreeItem.getData(), column);   
-               	  }
-               }
-        }
-    }
-
-    public void addKeyListeners(StructuredViewer viewer)
-    {
-      final StructuredViewer structuredViewer = viewer;
-                     
-      addKeyListener(getKeyAdapter(structuredViewer));
-    }      
-    
-   public void addMouseListeners(StructuredViewer viewer)
-   {
-      final StructuredViewer structuredViewer = viewer;
-
-      addMouseListener(new MouseAdapter()
-      {
-
-         public void mouseUp(MouseEvent e) 
-         {        
-               TableItem row = getRow();
-               int column = getColumn(); 
-         
-               // use mouse button 1 to invoke editing for a cell
-               if (e.button == 1)     
-               {
-                  if (structuredViewer instanceof TableViewer)
-                        {
-                     ((TableViewer)structuredViewer).editElement(row.getData(), column);   
-                        }
-                        else if (structuredViewer instanceof TableTreeViewer && column == 1)
-                        {
-                                 TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);
-                                ((TableTreeViewer)structuredViewer).editElement(tableTreeItem.getData(), column);   
-                        }                                               
-               
-                 if (structuredViewer instanceof TableTreeViewer && row.getData(TABLETREEITEM_ID) instanceof TableTreeItem)
-                 {              
-                                   if (column == 0)
-                                   {
-                                    TableTreeItem tableTreeItem = (TableTreeItem)row.getData(TABLETREEITEM_ID);                             
-                                          boolean expandState = tableTreeItem.getExpanded();
-                       ((TableTreeViewer)structuredViewer).setExpandedState(tableTreeItem.getData(), !expandState);
-                       refresh();
-                    }
-                 }
-               }          
-            }
-      });
-     }
-
-
-  /**
-   * Ensure that cell editor control shows up above the table cursor control.
-   * Should be called whenever the table viewer makes a new call to setCellEditors
-   * i.e. in constructor and in refreshCellEditors
-   *
-   * @param - array of cell editors for the StructuredViewer
-   */
-
-  public void moveCellEditorsAbove(CellEditor[] editorArray)
-  {
-    for (int i = 0; i < editorArray.length ; i++)
-    {
-      CellEditor cEd = editorArray[i];
-      if (cEd != null && cEd.getControl() != null)
-      {
-        cEd.getControl().moveAbove(null);
-      }
-    }
-  }
-
-  public void refresh()
-  {
-     Display.getCurrent().asyncExec(new Runnable()
-     {
-        public void run()
-        {
-           if (!isDisposed() && isVisible())
-             redraw();
-        }
-     });
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageEditorSite.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageEditorSite.java
deleted file mode 100644
index ee280ca..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageEditorSite.java
+++ /dev/null
@@ -1,103 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.provisional.editors;
-
-import org.eclipse.jface.viewers.IPostSelectionProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.part.MultiPageEditorPart;
-import org.eclipse.ui.part.MultiPageEditorSite;
-
-/**
- * @deprecated - No longer necessary as of 3.2M3.
- */
-public class PostMultiPageEditorSite extends MultiPageEditorSite {
-	/**
-	 * The post selection change listener, initialized lazily;
-	 * <code>null</code> if not yet created.
-	 */
-	private ISelectionChangedListener postSelectionChangedListener = null;
-
-	public PostMultiPageEditorSite(MultiPageEditorPart multiPageEditor, IEditorPart editor) {
-		super(multiPageEditor, editor);
-	}
-
-	/**
-	 * Returns the selection changed listener which listens to the nested
-	 * editor's post selection changes, and calls
-	 * <code>handlePostSelectionChanged</code>.
-	 * 
-	 * @return the selection changed listener
-	 */
-	private ISelectionChangedListener getPostSelectionChangedListener() {
-		if (postSelectionChangedListener == null) {
-			postSelectionChangedListener = new ISelectionChangedListener() {
-				public void selectionChanged(SelectionChangedEvent event) {
-					PostMultiPageEditorSite.this.handlePostSelectionChanged(event);
-				}
-			};
-		}
-		return postSelectionChangedListener;
-	}
-
-	/**
-	 * Handles a post selection changed event from the nested editor. The
-	 * default implementation gets the selection provider from the multi-page
-	 * editor's site, and calls <code>firePostSelectionChanged</code> on it
-	 * (only if it is an instance of <code>MultiPageSelectionProvider</code>),
-	 * passing a new event object.
-	 * <p>
-	 * Subclasses may extend or reimplement this method.
-	 * </p>
-	 * 
-	 * @param event
-	 *            the event
-	 */
-	protected void handlePostSelectionChanged(SelectionChangedEvent event) {
-		ISelectionProvider parentProvider = getMultiPageEditor().getSite().getSelectionProvider();
-		if (parentProvider instanceof PostMultiPageSelectionProvider) {
-			SelectionChangedEvent newEvent = new SelectionChangedEvent(parentProvider, event.getSelection());
-			((PostMultiPageSelectionProvider) parentProvider).firePostSelectionChanged(newEvent);
-		}
-	}
-
-	/**
-	 * The <code>MultiPageEditorSite</code> implementation of this
-	 * <code>IWorkbenchPartSite</code> method remembers the selection
-	 * provider, and also hooks a listener on it, which calls
-	 * <code>handleSelectionChanged</code> when a selection changed event
-	 * occurs and <code>handlePostSelectionChanged</code> when a post
-	 * selection changed event occurs.
-	 * 
-	 * @param provider
-	 *            The selection provider.
-	 * @see PostMultiPageEditorSite#handleSelectionChanged(SelectionChangedEvent)
-	 */
-	public void setSelectionProvider(ISelectionProvider provider) {
-		ISelectionProvider oldSelectionProvider = getSelectionProvider();
-		if (oldSelectionProvider != null) {
-			if (oldSelectionProvider instanceof IPostSelectionProvider) {
-				((IPostSelectionProvider) oldSelectionProvider).removePostSelectionChangedListener(getPostSelectionChangedListener());
-			}
-		}
-
-		super.setSelectionProvider(provider);
-
-		if (provider != null) {
-			if (provider instanceof IPostSelectionProvider) {
-				((IPostSelectionProvider) provider).addPostSelectionChangedListener(getPostSelectionChangedListener());
-			}
-		}
-	}
-
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageSelectionProvider.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageSelectionProvider.java
deleted file mode 100644
index 3a4f908..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostMultiPageSelectionProvider.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.wst.common.ui.provisional.editors;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.util.ListenerList;
-import org.eclipse.jface.util.SafeRunnable;
-import org.eclipse.jface.viewers.IPostSelectionProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.ui.part.MultiPageEditorPart;
-import org.eclipse.ui.part.MultiPageSelectionProvider;
-
-/**
- * @deprecated - No longer necessary as of 3.2M3.
- */
-public class PostMultiPageSelectionProvider extends MultiPageSelectionProvider implements IPostSelectionProvider {
-	private ListenerList postListeners;
-
-	public PostMultiPageSelectionProvider(MultiPageEditorPart multiPageEditor) {
-		super(multiPageEditor);
-		postListeners = new ListenerList();
-	}
-
-	public void addPostSelectionChangedListener(ISelectionChangedListener listener) {
-		postListeners.add(listener);
-	}
-
-	public void firePostSelectionChanged(final SelectionChangedEvent event) {
-		Object[] listeners = postListeners.getListeners();
-		for (int i = 0; i < listeners.length; ++i) {
-			final ISelectionChangedListener pl = (ISelectionChangedListener) listeners[i];
-			Platform.run(new SafeRunnable() {
-				public void run() {
-					pl.selectionChanged(event);
-				}
-			});
-		}
-	}
-
-	public void removePostSelectionChangedListener(ISelectionChangedListener listener) {
-		postListeners.remove(listener);
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostSelectionMultiPageEditorPart.java b/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostSelectionMultiPageEditorPart.java
deleted file mode 100644
index bcd2f07..0000000
--- a/plugins/org.eclipse.wst.common.ui/src/org/eclipse/wst/common/ui/provisional/editors/PostSelectionMultiPageEditorPart.java
+++ /dev/null
@@ -1,46 +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
- *******************************************************************************/
-package org.eclipse.wst.common.ui.provisional.editors;
-
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.part.MultiPageEditorPart;
-
-/**
- * Adds posts selection notifications from contained editor parts to
- * listeners. This part was created as a workaround for
- * https://bugs.eclipse.org/bugs/show_bug.cgi?id=108324 and will be removed
- * once WTP is building on a platform milestone that includes a fix.
- * 
- * @deprecated - No longer necessary as of 3.2M3.
- */
-public abstract class PostSelectionMultiPageEditorPart extends MultiPageEditorPart {
-	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
-		super.init(site, input);
-		site.setSelectionProvider(new PostMultiPageSelectionProvider(this));
-	}
-
-	protected void pageChange(int newPageIndex) {
-		super.pageChange(newPageIndex);
-		IEditorPart activeEditor = getEditor(newPageIndex);
-		if (activeEditor != null) {
-			ISelectionProvider selectionProvider = activeEditor.getSite().getSelectionProvider();
-			if (selectionProvider != null) {
-				SelectionChangedEvent event = new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection());
-				((PostMultiPageSelectionProvider) getSite().getSelectionProvider()).firePostSelectionChanged(event);
-			}
-		}
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/.classpath b/plugins/org.eclipse.wst.common.uriresolver/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/.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/plugins/org.eclipse.wst.common.uriresolver/.cvsignore b/plugins/org.eclipse.wst.common.uriresolver/.cvsignore
deleted file mode 100644
index 30d3363..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/.cvsignore
+++ /dev/null
@@ -1,8 +0,0 @@
-bin
-uriresolver.jar
-build.xml
-temp.folder
-org.eclipse.wst.common.uriresolver_1.0.0.jar
-@dot
-src.zip
-javaCompiler...args
diff --git a/plugins/org.eclipse.wst.common.uriresolver/.project b/plugins/org.eclipse.wst.common.uriresolver/.project
deleted file mode 100644
index e19b693..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.uriresolver</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.wst.common.uriresolver/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.common.uriresolver/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index b8a0d61..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,57 +0,0 @@
-#Mon Jan 30 19:48:07 EST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLocal=error
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.common.uriresolver/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.uriresolver/META-INF/MANIFEST.MF
deleted file mode 100644
index e0bba88..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,15 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.wst.common.uriresolver; singleton:=true
-Bundle-Version: 1.1.100.qualifier
-Bundle-Activator: org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverPlugin
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.common.uriresolver.internal,
- org.eclipse.wst.common.uriresolver.internal.provisional,
- org.eclipse.wst.common.uriresolver.internal.util
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)"
-Eclipse-LazyStart: true
-Bundle-ClassPath: .
diff --git a/plugins/org.eclipse.wst.common.uriresolver/README.txt b/plugins/org.eclipse.wst.common.uriresolver/README.txt
deleted file mode 100644
index acaf514..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-API for an URI resolver.
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.uriresolver/about.html b/plugins/org.eclipse.wst.common.uriresolver/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/plugins/org.eclipse.wst.common.uriresolver/build.properties b/plugins/org.eclipse.wst.common.uriresolver/build.properties
deleted file mode 100644
index afe5fa3..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = plugin.xml,\
-               META-INF/,\
-               about.html,\
-               .,\
-               plugin.properties
-bin.excludes = bin/**,\
-               @dot/**,\
-               temp.folder/**
-               
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.uriresolver/plugin.properties b/plugins/org.eclipse.wst.common.uriresolver/plugin.properties
deleted file mode 100644
index 307664b..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/plugin.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 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
-###############################################################################
-providerName=Eclipse.org
-pluginName=Common URI Resolver Framework
-###############################################################################
-
-resolverExtensions=URI Resolver Extensions Point
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.uriresolver/plugin.xml b/plugins/org.eclipse.wst.common.uriresolver/plugin.xml
deleted file mode 100644
index 9aa99c4..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/plugin.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension-point id="resolverExtensions" name="%resolverExtensions" schema="schema/resolverExtensions.exsd"/>
-
-
-</plugin>
diff --git a/plugins/org.eclipse.wst.common.uriresolver/schema/resolverExtensions.exsd b/plugins/org.eclipse.wst.common.uriresolver/schema/resolverExtensions.exsd
deleted file mode 100644
index 702bb0c..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/schema/resolverExtensions.exsd
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.uriresolver">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.wst.common.uriresolver" id="resolverExtensions" name="URI Resolver Extensions Point"/>
-      </appInfo>
-      <documentation>
-         The URI Resolver Extensions point allows clients to register custom URI resolvers that will be used in the resolution of resources by tools such as editors, generators, validators, and wizards.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="resolverExtension" minOccurs="1" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  a fully qualified identifier of the target extension point
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  an optional identifier of the extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  an optional name of the extension instance
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="resolverExtension">
-      <complexType>
-         <sequence>
-            <element ref="projectNature" minOccurs="0" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="stage" type="string">
-            <annotation>
-               <documentation>
-                  The stage in which to run this extension resolver: prenormalization, postnormalization, or physical. Defaults to postnormalization.&lt;br&gt;
-prenormalization:  run before normalization of the input&lt;br&gt;
-postnormalization: run after normalization of the input&lt;br&gt;
-physical:          run after all pre and postnormalization resolvers
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The class that implements &lt;code&gt;org.eclipse.wst.common.uriresolver.internal.provisional.URIResolver&lt;/code&gt;.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-         <attribute name="priority" type="string">
-            <annotation>
-               <documentation>
-                  The priority of this resolver: high, medium, or low. Defaults to medium. The priority allows you to specify when this resolver should run with respect to other resolvers defined for the same stage.
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="projectNature">
-      <annotation>
-         <documentation>
-            If a project nature is specified the URI resolver will only be used for projects that contain one of the specified project natures. If no project natures are specified the URI resolver will be used for all projects.
-         </documentation>
-      </annotation>
-      <complexType>
-         <attribute name="value" type="string" use="required">
-            <annotation>
-               <documentation>
-                  A project nature ID for which the URI resolver should be used.
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         The following is an example of an URI resolver contribution:
-&lt;pre&gt;
-   &lt;extension
-         point=&quot;org.eclipse.wst.common.uriresolver.resolverExtensions&quot;&gt;
-      &lt;resolverExtension
-            stage=&quot;physical&quot;
-            priority=&quot;low&quot;
-            class=&quot;org.eclipse.wst.common.uriresolver.SampleResolver&quot;&gt;
-      &lt;/resolverExtension&gt;
-   &lt;/extension&gt;
-&lt;/pre&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         The supplied class must implement &lt;code&gt;org.eclipse.wst.common.uriresolver.internal.provisional.URIResolver&lt;/code&gt;.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         &lt;code&gt;
-org.eclipse.wst.common.componentcore.internal.util.ComponentResolver
-&lt;/code&gt;
-provides an URI resolver that resolves references in a project with multiple components
-&lt;code&gt;
-org.eclipse.wst.internet.cache.internal.CacheURIResolverExtension
-&lt;/code&gt;
-provides an URI resolver that resolves references in a cache
-&lt;code&gt;
-org.eclipse.wst.xml.core.internal.catalog.XMLCatalogURIResolverExtension
-&lt;/code&gt;
-provides an URI resolver that resolves references from an XML catalog
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which accompanies 
-this distribution, and is available at &lt;a
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/ExtensibleURIResolver.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/ExtensibleURIResolver.java
deleted file mode 100644
index e9b2c17..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/ExtensibleURIResolver.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal;
-
-import java.util.Iterator;
-import java.util.List;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolver;
-import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverExtension;
-import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverPlugin;
-import org.osgi.framework.Bundle;
-
-
-/**
- * @author csalter
- * 
- */
-public class ExtensibleURIResolver implements URIResolver
-{
-	private static final boolean logExceptions = false;
-
-	//protected IProject project;
-
-	//TODO... consider ctor that takes a project arg
-	//public ExtensibleURIResolver(IProject project)
-	//{
-	//	this.project = project;
-	//}
-
-	public ExtensibleURIResolver()
-	{
-	}
-
-	public String resolve(String baseLocation, String publicId, String systemId)
-	{
-		String result = systemId;
-
-		// compute the project that holds the resource
-		//
-    IFile file = computeFile(baseLocation);
-		IProject project =  file != null ? file.getProject() : null;
-
-		URIResolverExtensionRegistry resolverRegistry = URIResolverExtensionRegistry.getIntance();
-		List list = resolverRegistry.getExtensionDescriptors(project);
-
-		// get the list of applicable pre-normalized resolvers from the
-		// extension registry
-		//
-		for (Iterator i = resolverRegistry.getMatchingURIResolvers(list, URIResolverExtensionRegistry.STAGE_PRENORMALIZATION).iterator(); i.hasNext();)
-		{
-			URIResolverExtension resolver = (URIResolverExtension) i.next();
-			String tempresult = resolver.resolve(file, baseLocation, publicId, result);
-			if(tempresult != null)
-			{
-			  result = tempresult;
-			}
-		}
-
-		// normalize the uri
-		//
-		result = normalize(baseLocation, result);
-
-		// get the list of applicable post-normalized resolvers from the
-		// extension registry
-		//		
-		for (Iterator i = resolverRegistry.getMatchingURIResolvers(list, URIResolverExtensionRegistry.STAGE_POSTNORMALIZATION).iterator(); i.hasNext();)
-		{ 
-			URIResolverExtension resolver = (URIResolverExtension) i.next();
-			String tempresult = resolver.resolve(file, baseLocation, publicId, result);
-			if(tempresult != null)
-			{
-			  result = tempresult;
-			}
-		}
-
-		return result;
-	}
-    
-    public String resolvePhysicalLocation(String baseLocation, String publicId, String logicalLocation)
-    {
-      String result = logicalLocation;
-      URIResolverExtensionRegistry resolverRegistry = URIResolverExtensionRegistry.getIntance();
-      IFile file = computeFile(baseLocation);
-      
-      // compute the project that holds the resource
-      //      
-      IProject project =  file != null ? file.getProject() : null;            
-      List list = resolverRegistry.getExtensionDescriptors(project);      
-      for (Iterator i = resolverRegistry.getMatchingURIResolvers(list, URIResolverExtensionRegistry.STAGE_PHYSICAL).iterator(); i.hasNext(); )
-      {        
-        // get the list of applicable physical resolvers from the extension registry
-        //
-        while (i.hasNext())
-        {
-          URIResolverExtension resolver = (URIResolverExtension) i.next();
-          String tempresult = resolver.resolve(file, baseLocation, publicId, result);
-          if(tempresult != null)
-          {
-            result = tempresult;
-          }
-        }
-      }        
-      return result;
-    }
-    
-
-	protected String normalize(String baseLocation, String systemId)
-	{
-	  // If no systemId has been specified there is nothing to do
-	  // so return null;
-	  if(systemId == null)
-	    return null;
-	  String result = systemId;
-      
-      // cs : sometimes normalizing the URI will cause an exception to get thrown
-      // for example the 'bad' version of the URI below ...
-      //
-      //   good = "jar:/resource/project-name/WebContent/WEB-INF/lib/generator.jar!/META-INF/schema/config.dtd"
-      //   bad  = "jar:/resource/project-name/WebContent/WEB-INF/lib/generator.jar/META-INF/schema/config.dtd"
-      //
-      // Here we enclose the normalization in a try/catch block with the assumption that the caller
-      // (i.e. the 'resolve' method) isn't interested in handling this exception.        
-	  try
-	  {
-	    // normalize the URI
-	    URI systemURI = URI.createURI(systemId);
-	    if (systemURI.isRelative())
-	    {
-	      baseLocation = baseLocation.replace('\\','/');
-	      URI baseURI = URI.createURI(baseLocation);
-          
-          // TODO (cs) we should add more comments to explain this in a bit more detail
-	      try
-	      {
-	        result = systemURI.resolve(baseURI).toString();
-	      }
-	      catch (IllegalArgumentException e) {
-	        Bundle bundle = URIResolverPlugin.getInstance().getBundle();
-	        IStatus statusObj = null;
-	        java.net.URI baseURI2 = null;
-	        try {
-	          baseURI2 = java.net.URI.create(baseLocation);
-	        }
-	        catch (IllegalArgumentException e2) {
-	          if(logExceptions) {
-	            statusObj = new Status(IStatus.ERROR, bundle.getSymbolicName(), IStatus.ERROR, "Problem in creating java.net.URI in ExtensibleURIResolver:" + e2.getMessage(), e2); //$NON-NLS-1$
-	            Platform.getLog(bundle).log(statusObj);
-	          }
-	        }
-	        try {
-	          if(baseURI2 != null) {
-	            java.net.URI resultURI = baseURI2.resolve(systemId);
-	            result = resultURI.toString();
-	          }
-	        }
-	        catch (IllegalArgumentException e2) {
-	          if(logExceptions) {
-	            statusObj = new Status(IStatus.ERROR, bundle.getSymbolicName(), IStatus.ERROR, "Problem in resolving with java.net.URI in ExtensibleURIResolver:" + e2.getMessage(), null); //$NON-NLS-1$
-	            Platform.getLog(bundle).log(statusObj);
-	          }
-	        }
-	      }
-	    }
-	  }
-	  catch (Exception e)
-	  {     
-        // just eat the exception and return back the original systemId
-	  }
-	  return result;
-	}
-
-  protected IFile computeFile(String baseLocation)
-  {
-    IFile file = null;
-    if (baseLocation != null)
-    {
-      String pattern = "file:///"; //$NON-NLS-1$
-      if (baseLocation.startsWith(pattern))
-      {
-        baseLocation = baseLocation.substring(pattern.length());
-      }
-      IPath path = new Path(baseLocation);
-      file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
-    }
-    return file;    
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URI.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URI.java
deleted file mode 100644
index aa411a9..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URI.java
+++ /dev/null
@@ -1,2875 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * A representation of a Uniform Resource Identifier (URI), as specified by
- * <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>, with certain
- * enhancements.  A <code>URI</code> instance can be created by specifying
- * values for its components, or by providing a single URI string, which is
- * parsed into its components.  Static factory methods whose names begin
- * with "create" are used for both forms of object creation.  No public or
- * protected constructors are provided; this class can not be subclassed.
- *
- * <p>Like <code>String</code>, <code>URI</code> is an immutable class;
- * a <code>URI</code> instance offers several by-value methods that return a
- * new <code>URI</code> object based on its current state.  Most useful,
- * a relative <code>URI</code> can be {@link #resolve(URI) resolve}d against
- * a base absolute <code>URI</code> -- the latter typically identifies the
- * document in which the former appears.  The inverse to this is {@link
- * #deresolve(URI) deresolve}, which answers the question, "what relative
- * URI will resolve, against the given base, to this absolute URI?"
- *
- * <p>In the <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC</a>, much
- * attention is focused on a hierarchical naming system used widely to
- * locate resources via common protocols such as HTTP, FTP, and Gopher, and
- * to identify files on a local file system.  Acordingly, most of this
- * class's functionality is for handling such URIs, which can be identified
- * via {@link #isHierarchical isHierarchical}.
- *
- * <p><a name="device_explanation">
- * The primary enhancement beyond the RFC description is an optional
- * device component.  Instead of treating the device as just another segment
- * in the path, it can be stored as a separate component (almost a
- * sub-authority), with the root below it.  For example, resolving
- * <code>/bar</code> against <code>file:///c:/foo</code> would result in
- * <code>file:///c:/bar</code> being returned.  Also, you cannot take
- * the parent of a device, so resolving <code>..</code> against
- * <code>file:///c:/</code> would not yield <code>file:///</code>, as you
- * might expect.  This feature is useful when working with file-scheme
- * URIs, as devices do not typically occur in protocol-based ones.  A
- * device-enabled <code>URI</code> is created by parsing a string with
- * {@link #createURI(String) createURI}; if the first segment of the path
- * ends with the <code>:</code> character, it is stored (including the colon)
- * as the device, instead.  Alternately, either the {@link
- * #createHierarchicalURI(String, String, String, String, String) no-path}
- * or the {@link #createHierarchicalURI(String, String, String, String[],
- * String, String) absolute-path} form of <code>createHierarchicalURI()</code>
- * can be used, in which a non-null <code>device</code> parameter can be
- * specified.
- *
- * <p><a name="archive_explanation"> 
- * The other enhancement provides support for the almost-hierarchical
- * form used for files within archives, such as the JAR scheme, defined
- * for the Java Platform in the documentation for {@link
- * java.net.JarURLConnection}. By default, this support is enabled for
- * absolute URIs with scheme equal to "jar", "zip", or "archive" (ignoring case), and
- * is implemented by a hierarchical URI, whose authority includes the
- * entire URI of the archive, up to and including the <code>!</code>
- * character.  The URI of the archive must have no fragment.  The whole
- * archive URI must have no device and an absolute path.  Special handling
- * is supported for {@link #createURI creating}, {@link
- * #validArchiveAuthority validating}, {@link #devicePath getting the path}
- * from, and {@link #toString displaying} archive URIs. In all other
- * operations, including {@link #resolve(URI) resolving} and {@link
- * #deresolve(URI) deresolving}, they are handled like any ordinary URI.
- *
- * <p>This implementation does not impose the all of the restrictions on
- * character validity that are specified in the RFC.  Static methods whose
- * names begin with "valid" are used to test whether a given string is valid
- * value for the various URI components.  Presently, these tests place no
- * restrictions beyond what would have been required in order for {@link
- * createURI(String) createURI} to have parsed them correctly from a single
- * URI string.  If necessary in the future, these tests may be made more
- * strict, to better coform to the RFC.
- * 
- * <p>Another group of static methods, whose names begin with "encode", use
- * percent escaping to encode any characters that are not permitted in the
- * various URI components. Another static method is provided to {@link
- * #decode decode} encoded strings.  An escaped character is represented as
- * a percent sybol (<code>%</code>), followed by two hex digits that specify
- * the character code.  These encoding methods are more strict than the
- * validation methods described above.  They ensure validity according to the
- * RFC, with one exception: non-ASCII characters.
- *
- * <p>The RFC allows only characters that can be mapped to 7-bit US-ASCII
- * representations.  Non-ASCII, single-byte characters can be used only via
- * percent escaping, as described above.  This implementation uses Java's
- * Unicode <code>char</code> and <code>String</code> representations, and
- * makes no attempt to encode characters 0xA0 and above.  Characters in the
- * range 0x80-0x9F are still escaped.  In this respect, this notion of a URI
- * is actually more like an IRI (Internationalized Resource Identifier), for
- * which an RFC is now in <href="http://www.w3.org/International/iri-edit/draft-duerst-iri-09.txt">draft
- * form</a>.
- *
- * <p>Finally, note the difference between a <code>null</code> parameter to
- * the static factory methods and an empty string.  The former signifies the
- * absense of a given URI component, while the latter simply makes the
- * component blank.  This can have a significant effect when resolving.  For
- * example, consider the following two URIs: <code>/bar</code> (with no
- * authority) and <code>///bar</code> (with a blank authority).  Imagine
- * resolving them against a base with an authority, such as
- * <code>http://www.eclipse.org/</code>.  The former case will yield
- * <code>http://www.eclipse.org/bar</code>, as the base authority will be
- * preserved.  In the latter case, the empty authority will override the
- * base authority, resulting in <code>http:///bar</code>!
- */
-public final class URI
-{
-  // Common to all URI types.
-  private final int hashCode;
-  private final boolean hierarchical;
-  private final String scheme;  // null -> relative URI reference
-  private final String authority;
-  private final String fragment;
-  private URI cachedTrimFragment;
-  private String cachedToString;
-  //private final boolean iri;
-  //private URI cachedASCIIURI;
-
-  // Applicable only to a hierarchical URI.
-  private final String device;
-  private final boolean absolutePath;
-  private final String[] segments; // empty last segment -> trailing separator
-  private final String query;
-
-  // A cache of URIs, keyed by the strings from which they were created.
-  // The fragment of any URI is removed before caching it here, to minimize
-  // the size of the cache in the usual case where most URIs only differ by
-  // the fragment.
-  private static final Map uriCache = Collections.synchronizedMap(new HashMap());
-
-  // The lower-cased schemes that will be used to identify archive URIs.
-  private static final Set archiveSchemes;
-
-  // Identifies a file-type absolute URI.
-  private static final String SCHEME_FILE = "file";
-  private static final String SCHEME_JAR = "jar";
-  private static final String SCHEME_ZIP = "zip";
-  private static final String SCHEME_ARCHIVE = "archive";
-
-  // Special segment values interpreted at resolve and resolve time.
-  private static final String SEGMENT_EMPTY = "";
-  private static final String SEGMENT_SELF = ".";
-  private static final String SEGMENT_PARENT = "..";
-  private static final String[] NO_SEGMENTS = new String[0];
-
-  // Separators for parsing a URI string.
-  private static final char SCHEME_SEPARATOR = ':';
-  private static final String AUTHORITY_SEPARATOR = "//";
-  private static final char DEVICE_IDENTIFIER = ':';
-  private static final char SEGMENT_SEPARATOR = '/';
-  private static final char QUERY_SEPARATOR = '?';
-  private static final char FRAGMENT_SEPARATOR = '#';
-  private static final char USER_INFO_SEPARATOR = '@';
-  private static final char PORT_SEPARATOR = ':';
-  private static final char FILE_EXTENSION_SEPARATOR = '.';
-  private static final char ARCHIVE_IDENTIFIER = '!';
-  private static final String ARCHIVE_SEPARATOR = "!/";
-
-  // Characters to use in escaping.
-  private static final char ESCAPE = '%';
-  private static final char[] HEX_DIGITS = {
-    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
-
-  // Some character classes, as defined in RFC 2396's BNF for URI.
-  // These are 128-bit bitmasks, stored as two longs, where the Nth bit is set
-  // iff the ASCII character with value N is included in the set.  These are
-  // created with the highBitmask() and lowBitmask() methods defined below,
-  // and a character is tested against them using matches().
-  //
-  private static final long ALPHA_HI = highBitmask('a', 'z') | highBitmask('A', 'Z');
-  private static final long ALPHA_LO = lowBitmask('a', 'z')  | lowBitmask('A', 'Z');
-  private static final long DIGIT_HI = highBitmask('0', '9');
-  private static final long DIGIT_LO = lowBitmask('0', '9');
-  private static final long ALPHANUM_HI = ALPHA_HI | DIGIT_HI;
-  private static final long ALPHANUM_LO = ALPHA_LO | DIGIT_LO;
-  private static final long HEX_HI = DIGIT_HI | highBitmask('A', 'F') | highBitmask('a', 'f');
-  private static final long HEX_LO = DIGIT_LO | lowBitmask('A', 'F')  | lowBitmask('a', 'f');
-  private static final long UNRESERVED_HI = ALPHANUM_HI | highBitmask("-_.!~*'()"); 
-  private static final long UNRESERVED_LO = ALPHANUM_LO | lowBitmask("-_.!~*'()");
-  private static final long RESERVED_HI = highBitmask(";/?:@&=+$,");
-  private static final long RESERVED_LO = lowBitmask(";/?:@&=+$,");
-  private static final long URIC_HI = RESERVED_HI | UNRESERVED_HI;  // | ucschar | escaped
-  private static final long URIC_LO = RESERVED_LO | UNRESERVED_LO;
-
-  // Additional useful character classes, including characters valid in certain
-  // URI components and separators used in parsing them out of a string. 
-  //
-  private static final long SEGMENT_CHAR_HI = UNRESERVED_HI | highBitmask(";:@&=+$,");  // | ucschar | escaped
-  private static final long SEGMENT_CHAR_LO = UNRESERVED_LO | lowBitmask(";:@&=+$,");
-  private static final long PATH_CHAR_HI = SEGMENT_CHAR_HI | highBitmask('/');  // | ucschar | escaped
-  private static final long PATH_CHAR_LO = SEGMENT_CHAR_LO | lowBitmask('/');
-//  private static final long SCHEME_CHAR_HI = ALPHANUM_HI | highBitmask("+-.");
-//  private static final long SCHEME_CHAR_LO = ALPHANUM_LO | lowBitmask("+-.");
-  private static final long MAJOR_SEPARATOR_HI = highBitmask(":/?#");
-  private static final long MAJOR_SEPARATOR_LO = lowBitmask(":/?#");
-  private static final long SEGMENT_END_HI = highBitmask("/?#");
-  private static final long SEGMENT_END_LO = lowBitmask("/?#");
-
-  // Static initializer for archiveSchemes.
-  static
-  {
-    Set set = new HashSet();
-    set.add(SCHEME_JAR);
-    set.add(SCHEME_ZIP);
-    set.add(SCHEME_ARCHIVE);
-    
-    
-    archiveSchemes = Collections.unmodifiableSet(set);
-  }
-
-  // Returns the lower half bitmask for the given ASCII character.
-  private static long lowBitmask(char c)
-  {
-    return c < 64 ? 1L << c : 0L;
-  }
-
-  // Returns the upper half bitmask for the given ACSII character.
-  private static long highBitmask(char c)
-  {
-    return c >= 64 && c < 128 ? 1L << (c - 64) : 0L;
-  }
-
-  // Returns the lower half bitmask for all ASCII characters between the two
-  // given characters, inclusive.
-  private static long lowBitmask(char from, char to)
-  {
-    long result = 0L;
-    if (from < 64 && from <= to)
-    {
-      to = to < 64 ? to : 63;
-      for (char c = from; c <= to; c++)
-      {
-        result |= (1L << c);
-      }
-    }
-    return result;
-  }
-
-  // Returns the upper half bitmask for all AsCII characters between the two
-  // given characters, inclusive.
-  private static long highBitmask(char from, char to)
-  {
-    return to < 64 ? 0 : lowBitmask((char)(from < 64 ? 0 : from - 64), (char)(to - 64));
-  }
-
-  // Returns the lower half bitmask for all the ASCII characters in the given
-  // string.
-  private static long lowBitmask(String chars)
-  {
-    long result = 0L;
-    for (int i = 0, len = chars.length(); i < len; i++)
-    {
-      char c = chars.charAt(i);
-      if (c < 64) result |= (1L << c);
-    }
-    return result;
-  }
-
-  // Returns the upper half bitmask for all the ASCII characters in the given
-  // string.
-  private static long highBitmask(String chars)
-  {
-    long result = 0L;
-    for (int i = 0, len = chars.length(); i < len; i++)
-    {
-      char c = chars.charAt(i);
-      if (c >= 64 && c < 128) result |= (1L << (c - 64));
-    }
-    return result;
-  }
-
-  // Returns whether the given character is in the set specified by the given
-  // bitmask.
-  private static boolean matches(char c, long highBitmask, long lowBitmask)
-  {
-    if (c >= 128) return false;
-    return c < 64 ?
-      ((1L << c) & lowBitmask) != 0 :
-      ((1L << (c - 64)) & highBitmask) != 0;
-  }
-
-  // Debugging method: converts the given long to a string of binary digits.
-/*
-  private static String toBits(long l)
-  {
-    StringBuffer result = new StringBuffer();
-    for (int i = 0; i < 64; i++)
-    {
-      boolean b = (l & 1L) != 0;
-      result.insert(0, b ? '1' : '0');
-      l >>= 1;
-    }
-    return result.toString();
-  }
-*/
-
-  /**
-   * Static factory method for a generic, non-hierarchical URI.  There is no
-   * concept of a relative non-hierarchical URI; such an object cannot be
-   * created.
-   *
-   * @exception java.lang.IllegalArgumentException if <code>scheme</code> is
-   * null, if <code>scheme</code> is an <a href="#archive_explanation">archive
-   * URI</a> scheme, or if <code>scheme</code>, <code>opaquePart</code>, or
-   * <code>fragment</code> is not valid according to {@link #validScheme
-   * validScheme}, {@link #validOpaquePart validOpaquePart}, or {@link
-   * #validFragment validFragment}, respectively.
-   */
-  public static URI createGenericURI(String scheme, String opaquePart,
-                                     String fragment)
-  {
-    if (scheme == null)
-    {
-      throw new IllegalArgumentException("relative non-hierarchical URI");
-    }
-
-    if (isArchiveScheme(scheme))
-    {
-      throw new IllegalArgumentException("non-hierarchical archive URI");
-    }
-
-    validateURI(false, scheme, opaquePart, null, false, NO_SEGMENTS, null, fragment);
-    return new URI(false, scheme, opaquePart, null, false, NO_SEGMENTS, null, fragment);
-  }
-
-  /**
-   * Static factory method for a hierarchical URI with no path.  The
-   * URI will be relative if <code>scheme</code> is non-null, and absolute
-   * otherwise.  An absolute URI with no path requires a non-null
-   * <code>authority</code> and/or <code>device</code>.
-   *
-   * @exception java.lang.IllegalArgumentException if <code>scheme</code> is
-   * non-null while <code>authority</code> and <code>device</code> are null,
-   * if <code>scheme</code> is an <a href="#archive_explanation">archive
-   * URI</a> scheme, or if <code>scheme</code>, <code>authority</code>,
-   * <code>device</code>, <code>query</code>, or <code>fragment</code> is not
-   * valid according to {@link #validScheme validSheme}, {@link
-   * #validAuthority validAuthority}, {@link #validDevice validDevice},
-   * {@link #validQuery validQuery}, or {@link #validFragment validFragment},
-   * respectively.
-   */
-  public static URI createHierarchicalURI(String scheme, String authority,
-                                          String device, String query,
-                                          String fragment)
-  {
-    if (scheme != null && authority == null && device == null)
-    {
-      throw new IllegalArgumentException(
-        "absolute hierarchical URI without authority, device, path");
-    }
-
-    if (isArchiveScheme(scheme))
-    {
-      throw new IllegalArgumentException("archive URI with no path");
-    }
-
-    validateURI(true, scheme, authority, device, false, NO_SEGMENTS, query, fragment);
-    return new URI(true, scheme, authority, device, false, NO_SEGMENTS, query, fragment);
-  }
-
-  /**
-   * Static factory method for a hierarchical URI with absolute path.
-   * The URI will be relative if <code>scheme</code> is non-null, and
-   * absolute otherwise. 
-   *
-   * @param segments an array of non-null strings, each representing one
-   * segment of the path.  As an absolute path, it is automatically
-   * preceeded by a <code>/</code> separator.  If desired, a trailing
-   * separator should be represented by an empty-string segment as the last
-   * element of the array. 
-   *
-   * @exception java.lang.IllegalArgumentException if <code>scheme</code> is
-   * an <a href="#archive_explanation">archive URI</a> scheme and 
-   * <code>device</code> is non-null, or if <code>scheme</code>,
-   * <code>authority</code>, <code>device</code>, <code>segments</code>,
-   * <code>query</code>, or <code>fragment</code> is not valid according to
-   * {@link #validScheme validScheme}, {@link #validAuthority validAuthority}
-   * or {@link #validArchiveAuthority validArchiveAuthority}, {@link
-   * #validDevice validDevice}, {@link #validSegments validSegments}, {@link
-   * #validQuery validQuery}, or {@link #validFragment validFragment}, as
-   * appropriate.
-   */
-  public static URI createHierarchicalURI(String scheme, String authority,
-                                          String device, String[] segments,
-                                          String query, String fragment)
-  {
-    if (isArchiveScheme(scheme) && device != null)
-    {
-      throw new IllegalArgumentException("archive URI with device");
-    }
-
-    segments = fix(segments);
-    validateURI(true, scheme, authority, device, true, segments, query, fragment);
-    return new URI(true, scheme, authority, device, true, segments, query, fragment);
-  }
-
-  /**
-   * Static factory method for a relative hierarchical URI with relative
-   * path.
-   *
-   * @param segments an array of non-null strings, each representing one
-   * segment of the path.  A trailing separator is represented by an
-   * empty-string segment at the end of the array.
-   *
-   * @exception java.lang.IllegalArgumentException if <code>segments</code>,
-   * <code>query</code>, or <code>fragment</code> is not valid according to 
-   * {@link #validSegments validSegments}, {@link #validQuery validQuery}, or
-   * {@link #validFragment validFragment}, respectively.
-   */
-  public static URI createHierarchicalURI(String[] segments, String query,
-                                          String fragment)
-  {
-    segments = fix(segments);
-    validateURI(true, null, null, null, false, segments, query, fragment);
-    return new URI(true, null, null, null, false, segments, query, fragment);
-  }
-
-  // Converts null to length-zero array, and clones array to ensure
-  // immutability.
-  private static String[] fix(String[] segments)
-  {
-    return segments == null ? NO_SEGMENTS : (String[])segments.clone();
-  }
-  
-  /**
-   * Static factory method based on parsing a URI string, with 
-   * <a href="#device_explanation">explicit device support</a> and handling
-   * for <a href="#archive_explanation">archive URIs</a> enabled. The
-   * specified string is parsed as described in <a
-   * href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>, and an
-   * appropriate <code>URI</code> is created and returned.  Note that
-   * validity testing is not as strict as in the RFC; essentially, only
-   * separator characters are considered.  So, for example, non-Latin
-   * alphabet characters appearing in the scheme would not be considered an
-   * error.
-   *
-   * @exception java.lang.IllegalArgumentException if any component parsed
-   * from <code>uri</code> is not valid according to {@link #validScheme
-   * validScheme}, {@link #validOpaquePart validOpaquePart}, {@link
-   * #validAuthority validAuthority}, {@link #validArchiveAuthority
-   * validArchiveAuthority}, {@link #validDevice validDevice}, {@link
-   * #validSegments validSegments}, {@link #validQuery validQuery}, or {@link
-   * #validFragment validFragment}, as appropriate.
-   */
-  public static URI createURI(String uri)
-  {
-    return createURIWithCache(uri); 
-  }
-
-  /**
-   * Static factory method that encodes and parses the given URI string.
-   * Appropriate encoding is performed for each component of the URI.
-   * If more than one <code>#</code> is in the string, the last one is
-   * assumed to be the fragment's separator, and any others are encoded.
-   *  
-   * @param ignoreEscaped <code>true</code> to leave <code>%</code> characters
-   * unescaped if they already begin a valid three-character escape sequence;
-   * <code>false</code> to encode all <code>%</code> characters.  Note that
-   * if a <code>%</code> is not followed by 2 hex digits, it will always be
-   * escaped. 
-   *
-   * @exception java.lang.IllegalArgumentException if any component parsed
-   * from <code>uri</code> is not valid according to {@link #validScheme
-   * validScheme}, {@link #validOpaquePart validOpaquePart}, {@link
-   * #validAuthority validAuthority}, {@link #validArchiveAuthority
-   * validArchiveAuthority}, {@link #validDevice validDevice}, {@link
-   * #validSegments validSegments}, {@link #validQuery validQuery}, or {@link
-   * #validFragment validFragment}, as appropriate.
-   */
-  public static URI createURI(String uri, boolean ignoreEscaped)
-  {
-    return createURIWithCache(encodeURI(uri, ignoreEscaped));
-  }
-
-  /**
-   * Static factory method based on parsing a URI string, with 
-   * <a href="#device_explanation">explicit device support</a> enabled.  
-   * Note that validity testing is not a strict as in the RFC; essentially,
-   * only separator characters are considered.  So, for example, non-Latin
-   * alphabet characters appearing in the scheme would not be considered an
-   * error.
-   *
-   * @exception java.lang.IllegalArgumentException if any component parsed
-   * from <code>uri</code> is not valid according to {@link #validScheme
-   * validScheme}, {@link #validOpaquePart validOpaquePart}, {@link
-   * #validAuthority validAuthority}, {@link #validArchiveAuthority
-   * validArchiveAuthority}, {@link #validDevice validDevice}, {@link
-   * #validSegments validSegments}, {@link #validQuery validQuery}, or {@link
-   * #validFragment validFragment}, as appropriate.
-   *
-   * @deprecated Use {@link #createURI createURI}, which now has explicit
-   * device support enabled. The two methods now operate identically.
-   */
-  public static URI createDeviceURI(String uri)
-  {
-    return createURIWithCache(uri);
-  }
-
-  // Uses a cache to speed up creation of a URI from a string.  The cache
-  // is consulted to see if the URI, less any fragment, has already been
-  // created.  If needed, the fragment is re-appended to the cached URI,
-  // which is considerably more efficient than creating the whole URI from
-  // scratch.  If the URI wasn't found in the cache, it is created using
-  // parseIntoURI() and then cached.  This method should always be used
-  // by string-parsing factory methods, instead of parseIntoURI() directly.
-  /**
-   * This method was included in the public API by mistake.
-   * 
-   * @deprecated Please use {@link #createURI createURI} instead.
-   */
-  public static URI createURIWithCache(String uri)
-  {
-    int i = uri.indexOf(FRAGMENT_SEPARATOR);
-    String base = i == -1 ? uri : uri.substring(0, i);
-    String fragment = i == -1 ? null : uri.substring(i + 1);
-
-    URI result = (URI)uriCache.get(base);
-
-    if (result == null)
-    {
-      result = parseIntoURI(base);
-      uriCache.put(base, result);
-    }
-
-    if (fragment != null)
-    {
-      result = result.appendFragment(fragment);
-    }
-    return result;
-  }
-
-  // String-parsing implementation.
-  private static URI parseIntoURI(String uri)
-  {
-    boolean hierarchical = true;
-    String scheme = null;
-    String authority = null;
-    String device = null;
-    boolean absolutePath = false;
-    String[] segments = NO_SEGMENTS;
-    String query = null;
-    String fragment = null;
-
-    int i = 0;
-    int j = find(uri, i, MAJOR_SEPARATOR_HI, MAJOR_SEPARATOR_LO);
-
-    if (j < uri.length() && uri.charAt(j) == SCHEME_SEPARATOR)
-    {
-      scheme = uri.substring(i, j);
-      i = j + 1;
-    }
-
-    boolean archiveScheme = isArchiveScheme(scheme);
-    if (archiveScheme)
-    {
-      j = uri.lastIndexOf(ARCHIVE_SEPARATOR);
-      if (j == -1)
-      {
-        throw new IllegalArgumentException("no archive separator");
-      }
-      hierarchical = true;
-      authority = uri.substring(i, ++j);
-      i = j;
-    }
-    else if (uri.startsWith(AUTHORITY_SEPARATOR, i))
-    {
-      i += AUTHORITY_SEPARATOR.length();
-      j = find(uri, i, SEGMENT_END_HI, SEGMENT_END_LO);
-      authority = uri.substring(i, j);
-      i = j;
-    }
-    else if (scheme != null &&
-             (i == uri.length() || uri.charAt(i) != SEGMENT_SEPARATOR))
-    {
-      hierarchical = false;
-      j = uri.indexOf(FRAGMENT_SEPARATOR, i);
-      if (j == -1) j = uri.length();
-      authority = uri.substring(i, j);
-      i = j;
-    }
-
-    if (!archiveScheme && i < uri.length() && uri.charAt(i) == SEGMENT_SEPARATOR)
-    {
-      j = find(uri, i + 1, SEGMENT_END_HI, SEGMENT_END_LO);
-      String s = uri.substring(i + 1, j);
-      
-      if (s.length() > 0 && s.charAt(s.length() - 1) == DEVICE_IDENTIFIER)
-      {
-        device = s;
-        i = j;
-      }
-    }
-
-    if (i < uri.length() && uri.charAt(i) == SEGMENT_SEPARATOR)
-    {
-      i++;
-      absolutePath = true;
-    }
-
-    if (segmentsRemain(uri, i))
-    {
-      List segmentList = new ArrayList();
-
-      while (segmentsRemain(uri, i))
-      {
-        j = find(uri, i, SEGMENT_END_HI, SEGMENT_END_LO);
-        segmentList.add(uri.substring(i, j));
-        i = j;
-
-        if (i < uri.length() && uri.charAt(i) == SEGMENT_SEPARATOR)
-        {
-          if (!segmentsRemain(uri, ++i)) segmentList.add(SEGMENT_EMPTY);
-        }
-      }
-      segments = new String[segmentList.size()];
-      segmentList.toArray(segments);
-    }
-
-    if (i < uri.length() && uri.charAt(i) == QUERY_SEPARATOR)
-    {
-      j = uri.indexOf(FRAGMENT_SEPARATOR, ++i);
-      if (j == -1) j = uri.length();
-      query = uri.substring(i, j);
-      i = j;
-    }
-
-    if (i < uri.length()) // && uri.charAt(i) == FRAGMENT_SEPARATOR (implied)
-    {
-      fragment = uri.substring(++i);
-    }
-
-    validateURI(hierarchical, scheme, authority, device, absolutePath, segments, query, fragment);
-    return new URI(hierarchical, scheme, authority, device, absolutePath, segments, query, fragment);
-  }
-
-  // Checks whether the string contains any more segments after the one that
-  // starts at position i.
-  private static boolean segmentsRemain(String uri, int i)
-  {
-    return i < uri.length() && uri.charAt(i) != QUERY_SEPARATOR &&
-      uri.charAt(i) != FRAGMENT_SEPARATOR;
-  }
-
-  // Finds the next occurance of one of the characters in the set represented
-  // by the given bitmask in the given string, beginning at index i. The index
-  // of the first found character, or s.length() if there is none, is
-  // returned.  Before searching, i is limited to the range [0, s.length()].
-  //
-  private static int find(String s, int i, long highBitmask, long lowBitmask)
-  {
-    int len = s.length();
-    if (i >= len) return len;
-
-    for (i = i > 0 ? i : 0; i < len; i++)
-    {
-      if (matches(s.charAt(i), highBitmask, lowBitmask)) break;
-    }
-    return i;
-  }
-
-  /**
-   * Static factory method based on parsing a {@link java.io.File} path
-   * string.  The <code>pathName</code> is converted into an appropriate
-   * form, as follows: platform specific path separators are converted to
-   * <code>/<code>; the path is encoded; and a "file" scheme and, if missing,
-   * a leading <code>/</code>, are added to an absolute path.  The result
-   * is then parsed using {@link #createURI(String) createURI}.
-   *
-   * <p>The encoding step escapes all spaces, <code>#</code> characters, and
-   * other characters disallowed in URIs, as well as <code>?</code>, which
-   * would delimit a path from a query.  Decoding is automatically performed
-   * by {@link #toFileString toFileString}, and can be applied to the values
-   * returned by other accessors by via the static {@link #decode(String)
-   * decode} method.
-   *
-   * <p>A relative path with a specified device (something like
-   * <code>C:myfile.txt</code>) cannot be expressed as a valid URI.
-   * 
-   * @exception java.lang.IllegalArgumentException if <code>pathName</code>
-   * specifies a device and a relative path, or if any component of the path
-   * is not valid according to {@link #validAuthority validAuthority}, {@link
-   * #validDevice validDevice}, or {@link #validSegments validSegments},
-   * {@link #validQuery validQuery}, or {@link #validFragment validFragment}.
-   */
-  public static URI createFileURI(String pathName)
-  {
-    File file = new File(pathName);
-    String uri = File.separatorChar != '/' ? pathName.replace(File.separatorChar, SEGMENT_SEPARATOR) : pathName;
-    uri = encode(uri, PATH_CHAR_HI, PATH_CHAR_LO, false);
-    if (file.isAbsolute())
-    {
-      URI result = createURI((uri.charAt(0) == SEGMENT_SEPARATOR ? "file:" : "file:/") + uri);
-      return result;
-    }
-    else
-    {
-      URI result = createURI(uri);
-      if (result.scheme() != null)
-      {
-        throw new IllegalArgumentException("invalid relative pathName: " + pathName);
-      }
-      return result;
-    }
-  }
-
-  /**
-   * Static factory method based on parsing a platform-relative path string.
-   *
-   * <p>The <code>pathName</code> must be of the form:
-   * <pre>
-   *   /project-name/path</pre>
-   *
-   * <p>Platform-specific path separators will be converterted to slashes.
-   * If not included, the leading path separator will be added.  The
-   * result will be of this form, which is parsed using {@link #createURI
-   * createURI}:
-   * <pre>
-   *   platform:/resource/project-name/path</pre>
-   *
-   * 
-   * @exception java.lang.IllegalArgumentException if any component parsed
-   * from the path is not valid according to {@link #validDevice validDevice},
-   * {@link #validSegments validSegments}, {@link #validQuery validQuery}, or
-   * {@link #validFragment validFragment}.
-   *
-   * @see org.eclipse.core.runtime.Platform#resolve
-   * @see #createPlatformResourceURI(String, boolean)
-   */
-  public static URI createPlatformResourceURI(String pathName)
-  {
-    return createPlatformResourceURI(pathName, false);
-  }
-
-  /**
-   * Static factory method based on parsing a platform-relative path string,
-   * with an option to encode the created URI.
-   *
-   * <p>The <code>pathName</code> must be of the form:
-   * <pre>
-   *   /project-name/path</pre>
-   *
-   * <p>Platform-specific path separators will be converterted to slashes.
-   * If not included, the leading path separator will be added.  The
-   * result will be of this form, which is parsed using {@link #createURI
-   * createURI}:
-   * <pre>
-   *   platform:/resource/project-name/path</pre>
-   *
-   * <p>This scheme supports relocatable projects in Eclipse and in
-   * stand-alone .
-   *
-   * <p>Depending on the <code>encode</code> argument, the path may be
-   * automatically encoded to escape all spaces, <code>#</code> characters,
-   * and other characters disallowed in URIs, as well as <code>?</code>,
-   * which would delimit a path from a query.  Decoding can be performed with
-   * the static {@link #decode(String) decode} method.
-   * 
-   * @exception java.lang.IllegalArgumentException if any component parsed
-   * from the path is not valid according to {@link #validDevice validDevice},
-   * {@link #validSegments validSegments}, {@link #validQuery validQuery}, or
-   * {@link #validFragment validFragment}.
-   *
-   * @see org.eclipse.core.runtime.Platform#resolve
-   */
-  public static URI createPlatformResourceURI(String pathName, boolean encode)
-  {
-    if (File.separatorChar != SEGMENT_SEPARATOR)
-    {
-      pathName = pathName.replace(File.separatorChar, SEGMENT_SEPARATOR);
-    }
-
-    if (encode)
-    {
-      pathName = encode(pathName, PATH_CHAR_HI, PATH_CHAR_LO, false);
-    }
-    URI result = createURI((pathName.charAt(0) == SEGMENT_SEPARATOR ? "platform:/resource" : "platform:/resource/") + pathName);
-    return result;
-  }
-  
-  // Private constructor for use of static factory methods.
-  private URI(boolean hierarchical, String scheme, String authority,
-              String device, boolean absolutePath, String[] segments,
-              String query, String fragment)
-  {
-    int hashCode = 0;
-    //boolean iri = false;
-
-    if (hierarchical)
-    {
-      ++hashCode;
-    }
-    if (absolutePath)
-    {
-      hashCode += 2;
-    }
-    if (scheme != null)
-    {
-      hashCode ^= scheme.toLowerCase().hashCode();
-    }
-    if (authority != null)
-    {
-      hashCode ^= authority.hashCode();
-      //iri = iri || containsNonASCII(authority);
-    }
-    if (device != null)
-    {
-      hashCode ^= device.hashCode();
-      //iri = iri || containsNonASCII(device);
-    }
-    if (query != null)
-    {
-      hashCode ^= query.hashCode();
-      //iri = iri || containsNonASCII(query);
-    }
-    if (fragment != null)
-    {
-      hashCode ^= fragment.hashCode();
-      //iri = iri || containsNonASCII(fragment);
-    }
-
-    for (int i = 0, len = segments.length; i < len; i++)
-    {
-      hashCode ^= segments[i].hashCode();
-      //iri = iri || containsNonASCII(segments[i]);
-    }
-
-    this.hashCode = hashCode;
-    //this.iri = iri;
-    this.hierarchical = hierarchical;
-    this.scheme = scheme == null ? null : scheme.intern();
-    this.authority = authority;
-    this.device = device;
-    this.absolutePath = absolutePath;
-    this.segments = segments;
-    this.query = query;
-    this.fragment = fragment;
-  }
-  
-  // Validates all of the URI components.  Factory methods should call this
-  // before using the constructor, though they must ensure that the
-  // inter-component requirements described in their own Javadocs are all
-  // satisfied, themselves.  If a new URI is being constructed out of
-  // an existing URI, this need not be called.  Instead, just the new
-  // components may be validated individually.
-  private static void validateURI(boolean hierarchical, String scheme,
-                                    String authority, String device,
-                                    boolean absolutePath, String[] segments,
-                                    String query, String fragment)
-  {
-    if (!validScheme(scheme))
-    {
-      throw new IllegalArgumentException("invalid scheme: " + scheme);
-    }
-    if (!hierarchical && !validOpaquePart(authority))
-    {
-      throw new IllegalArgumentException("invalid opaquePart: " + authority);
-    }
-    if (hierarchical && !isArchiveScheme(scheme) && !validAuthority(authority))
-    {
-      throw new IllegalArgumentException("invalid authority: " + authority);
-    }
-    if (hierarchical && isArchiveScheme(scheme) && !validArchiveAuthority(authority))
-    {
-      throw new IllegalArgumentException("invalid authority: " + authority);
-    }
-    if (!validDevice(device))
-    {
-      throw new IllegalArgumentException("invalid device: " + device);
-    }
-    if (!validSegments(segments))
-    {
-      String s = segments == null ? "invalid segments: " + segments :
-        "invalid segment: " + firstInvalidSegment(segments);
-      throw new IllegalArgumentException(s);
-    }
-    if (!validQuery(query))
-    {
-      throw new IllegalArgumentException("invalid query: " + query);
-    }
-    if (!validFragment(fragment))
-    {
-      throw new IllegalArgumentException("invalid fragment: " + fragment);
-    }
-  }
-
-  // Alternate, stricter implementations of the following validation methods
-  // are provided, commented out, for possible future use...
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * valid as the scheme component of a URI; <code>false</code> otherwise.
-   *
-   * <p>A valid scheme may be null or contain any characters except for the
-   * following: <code>: / ? #</code>
-   */
-  public static boolean validScheme(String value)
-  {
-    return value == null || !contains(value, MAJOR_SEPARATOR_HI, MAJOR_SEPARATOR_LO);  
-
-  // <p>A valid scheme may be null, or consist of a single letter followed
-  // by any number of letters, numbers, and the following characters:
-  // <code>+ - .</code>
-
-    //if (value == null) return true;
-    //return value.length() != 0 &&
-    //  matches(value.charAt(0), ALPHA_HI, ALPHA_LO) &&
-    //  validate(value, SCHEME_CHAR_HI, SCHEME_CHAR_LO, false, false);
-  }
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * valid as the opaque part component of a URI; <code>false</code>
-   * otherwise.
-   *
-   * <p>A valid opaque part must be non-null, non-empty, and not contain the
-   * <code>#</code> character.  In addition, its first character must not be
-   * <code>/</code>
-   */
-  public static boolean validOpaquePart(String value)
-  {
-    return value != null && value.indexOf(FRAGMENT_SEPARATOR) == -1 &&
-    value.length() > 0 && value.charAt(0) != SEGMENT_SEPARATOR;
-
-  // <p>A valid opaque part must be non-null and non-empty. It may contain
-  // any allowed URI characters, but its first character may not be
-  // <code>/</code> 
-
-    //return value != null && value.length() != 0 &&
-    //  value.charAt(0) != SEGMENT_SEPARATOR &&
-    //  validate(value, URIC_HI, URIC_LO, true, true);
-  }
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * valid as the authority component of a URI; <code>false</code> otherwise.
-   *
-   * <p>A valid authority may be null or contain any characters except for
-   * the following: <code>/ ? #</code>
-   */
-  public static boolean validAuthority(String value)
-  {
-    return value == null || !contains(value, SEGMENT_END_HI, SEGMENT_END_LO);
-
-  // A valid authority may be null or contain any allowed URI characters except
-  // for the following: <code>/ ?</code>
-
-    //return value == null || validate(value, SEGMENT_CHAR_HI, SEGMENT_CHAR_LO, true, true);
-  }
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * valid as the authority component of an <a
-   * href="#archive_explanation">archive URI</a>; <code>false</code>
-   * otherwise.
-   *
-   * <p>To be valid, the authority, itself, must be a URI with no fragment,
-   * followed by the character <code>!</code>.
-   */
-  public static boolean validArchiveAuthority(String value)
-  {
-    if (value != null && value.length() > 0 &&
-        value.charAt(value.length() - 1) == ARCHIVE_IDENTIFIER)
-    {
-      try
-      {
-        URI archiveURI = createURI(value.substring(0, value.length() - 1));
-        return !archiveURI.hasFragment();
-      }
-      catch (IllegalArgumentException e)
-      {
-      }
-    }
-    return false;
-  }
-
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * valid as the device component of a URI; <code>false</code> otherwise.
-   *
-   * <p>A valid device may be null or non-empty, containing any characters
-   * except for the following: <code>/ ? #</code>  In addition, its last
-   * character must be <code>:</code>
-   */
-  public static boolean validDevice(String value)
-  {    
-    if (value == null) return true;
-    int len = value.length();
-    return len > 0 && value.charAt(len - 1) == DEVICE_IDENTIFIER &&
-      !contains(value, SEGMENT_END_HI, SEGMENT_END_LO);
-
-  // <p>A valid device may be null or non-empty, containing any allowed URI
-  // characters except for the following: <code>/ ?</code>  In addition, its
-  // last character must be <code>:</code>
-
-    //if (value == null) return true;
-    //int len = value.length();
-    //return len > 0 && validate(value, SEGMENT_CHAR_HI, SEGMENT_CHAR_LO, true, true) &&
-    //  value.charAt(len - 1) == DEVICE_IDENTIFIER;
-  }
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * a valid path segment of a URI; <code>false</code> otherwise.
-   *
-   * <p>A valid path segment must be non-null and not contain any of the
-   * following characters: <code>/ ? #</code>
-   */
-  public static boolean validSegment(String value)
-  {
-    return value != null && !contains(value, SEGMENT_END_HI, SEGMENT_END_LO);
-
-  // <p>A valid path segment must be non-null and may contain any allowed URI
-  // characters except for the following: <code>/ ?</code> 
-
-    //return value != null && validate(value, SEGMENT_CHAR_HI, SEGMENT_CHAR_LO, true, true);
-  }
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * a valid path segment array of a URI; <code>false</code> otherwise.
-   *
-   * <p>A valid path segment array must be non-null and contain only path
-   * segements that are valid according to {@link #validSegment validSegment}.
-   */
-  public static boolean validSegments(String[] value)
-  {
-    if (value == null) return false;
-    for (int i = 0, len = value.length; i < len; i++)
-    {
-      if (!validSegment(value[i])) return false;
-    }
-    return true;
-  }
-
-  // Returns null if the specicied value is null or would be a valid path
-  // segment array of a URI; otherwise, the value of the first invalid
-  // segment. 
-  private static String firstInvalidSegment(String[] value)
-  {
-    if (value == null) return null;
-    for (int i = 0, len = value.length; i < len; i++)
-    {
-      if (!validSegment(value[i])) return value[i];
-    }
-    return null;
-  }
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * valid as the query component of a URI; <code>false</code> otherwise.
-   *
-   * <p>A valid query may be null or contain any characters except for
-   * <code>#</code>
-   */
-  public static boolean validQuery(String value)
-  {
-    return value == null || value.indexOf(FRAGMENT_SEPARATOR) == -1;
-
-  // <p>A valid query may be null or contain any allowed URI characters.
-
-    //return value == null || validate(value, URIC_HI, URIC_LO, true, true);
-}
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * valid as the fragment component of a URI; <code>false</code> otherwise.
-   *
-   * <p>A fragment is taken to be unconditionally valid.
-   */
-  public static boolean validFragment(String value)
-  {
-    return true;
-
-  // <p>A valid fragment may be null or contain any allowed URI characters.
-
-    //return value == null || validate(value, URIC_HI, URIC_LO, true, true);
-  }
-
-  // Searches the specified string for any characters in the set represnted
-  // by the 128-bit bitmask.  Returns true if any occur, or false otherwise.
-  private static boolean contains(String s, long highBitmask, long lowBitmask)
-  {
-    for (int i = 0, len = s.length(); i < len; i++)
-    {
-      if (matches(s.charAt(i), highBitmask, lowBitmask)) return true;
-    }
-    return false;
-  }
-
-  // Tests the non-null string value to see if it contains only ASCII
-  // characters in the set represented by the specified 128-bit bitmask,
-  // as well as, optionally, non-ASCII characters 0xA0 and above, and,
-  // also optionally, escape sequences of % followed by two hex digits.
-  // This method is used for the new, strict URI validation that is not
-  // not currently in place.
-/*
-  private static boolean validate(String value, long highBitmask, long lowBitmask,
-                                     boolean allowNonASCII, boolean allowEscaped)
-  {
-    for (int i = 0, len = value.length(); i < len; i++)
-    { 
-      char c = value.charAt(i);
-
-      if (matches(c, highBitmask, lowBitmask)) continue;
-      if (allowNonASCII && c >= 160) continue;
-      if (allowEscaped && isEscaped(value, i))
-      {
-        i += 2;
-        continue;
-      }
-      return false;
-    }
-    return true;
-  }
-*/
-
-  /**
-   * Returns <code>true</code> if this is a relative URI, or
-   * <code>false</code> if it is an absolute URI.
-   */
-  public boolean isRelative()
-  {
-    return scheme == null;
-  }
-
-  /**
-   * Returns <code>true</code> if this a a hierarchical URI, or
-   * <code>false</code> if it is of the generic form.
-   */
-  public boolean isHierarchical()
-  {
-    return hierarchical;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarcical URI with an authority
-   * component; <code>false</code> otherwise. 
-   */
-  public boolean hasAuthority()
-  {
-    return hierarchical && authority != null;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a non-hierarchical URI with an
-   * opaque part component; <code>false</code> otherwise.
-   */
-  public boolean hasOpaquePart()
-  {
-    // note: hierarchical -> authority != null
-    return !hierarchical;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarchical URI with a device
-   * component; <code>false</code> otherwise.
-   */
-  public boolean hasDevice()
-  {
-    // note: device != null -> hierarchical
-    return device != null;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarchical URI with an
-   * absolute or relative path; <code>false</code> otherwise.
-   */
-  public boolean hasPath()
-  {
-    // note: (absolutePath || authority == null) -> hierarchical
-    // (authority == null && device == null && !absolutePath) -> scheme == null
-    return absolutePath || (authority == null && device == null);
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarchical URI with an
-   * absolute path, or <code>false</code> if it is non-hierarchical, has no
-   * path, or has a relative path.
-   */
-  public boolean hasAbsolutePath()
-  {
-    // note: absolutePath -> hierarchical
-    return absolutePath;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarchical URI with a relative
-   * path, or <code>false</code> if it is non-hierarchical, has no path, or
-   * has an absolute path.
-   */
-  public boolean hasRelativePath()
-  {
-    // note: authority == null -> hierarchical
-    // (authority == null && device == null && !absolutePath) -> scheme == null
-    return authority == null && device == null && !absolutePath;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarchical URI with an empty
-   * relative path; <code>false</code> otherwise.  
-   *
-   * <p>Note that <code>!hasEmpty()</code> does <em>not</em> imply that this
-   * URI has any path segments; however, <code>hasRelativePath &&
-   * !hasEmptyPath()</code> does.
-   */
-  public boolean hasEmptyPath()
-  {
-    // note: authority == null -> hierarchical
-    // (authority == null && device == null && !absolutePath) -> scheme == null
-    return authority == null && device == null && !absolutePath &&
-      segments.length == 0;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarchical URI with a query
-   * component; <code>false</code> otherwise.
-   */
-  public boolean hasQuery()
-  {
-    // note: query != null -> hierarchical
-    return query != null;
-  }
-
-  /**
-   * Returns <code>true</code> if this URI has a fragment component;
-   * <code>false</code> otherwise.
-   */
-  public boolean hasFragment()
-  {
-    return fragment != null;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a current document reference; that
-   * is, if it is a relative hierarchical URI with no authority, device or
-   * query components, and no path segments; <code>false</code> is returned
-   * otherwise.
-   */
-  public boolean isCurrentDocumentReference()
-  {
-    // note: authority == null -> hierarchical
-    // (authority == null && device == null && !absolutePath) -> scheme == null
-    return authority == null && device == null && !absolutePath &&
-      segments.length == 0 && query == null;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a {@link
-   * #isCurrentDocumentReference() current document reference} with no
-   * fragment component; <code>false</code> otherwise.
-   *
-   * @see #isCurrentDocumentReference()
-   */
-  public boolean isEmpty()
-  {
-    // note: authority == null -> hierarchical
-    // (authority == null && device == null && !absolutePath) -> scheme == null
-    return authority == null && device == null && !absolutePath &&
-      segments.length == 0 && query == null && fragment == null;
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarchical URI that may refer
-   * directly to a locally accessible file.  This is considered to be the
-   * case for a file-scheme absolute URI, or for a relative URI with no query;
-   * <code>false</code> is returned otherwise.
-   */
-  public boolean isFile()
-  {
-    return isHierarchical() &&
-      ((isRelative() && !hasQuery()) || SCHEME_FILE.equalsIgnoreCase(scheme));
-  }
-
-  // Returns true if this is an archive URI.  If so, we should expect that
-  // it is also hierarchical, with an authority (consisting of an absolute
-  // URI followed by "!"), no device, and an absolute path.
-  private boolean isArchive()
-  {
-    return isArchiveScheme(scheme);
-  }
-
-  /**
-   * Returns <code>true</code> if the specified <code>value</code> would be
-   * valid as the scheme of an <a
-   * href="#archive_explanation">archive URI</a>; <code>false</code>
-   * otherwise.
-   */
-  public static boolean isArchiveScheme(String value)
-  {
-    return value != null && archiveSchemes.contains(value.toLowerCase());
-  }
-  
-  /**
-   * Returns the hash code.
-   */
-  public int hashCode()
-  {
-    return hashCode;
-  }
-
-  /**
-   * Returns <code>true</code> if <code>obj</code> is an instance of
-   * <code>URI</code> equal to this one; <code>false</code> otherwise.
-   *
-   * <p>Equality is determined strictly by comparing components, not by
-   * attempting to interpret what resource is being identified.  The
-   * comparison of schemes is case-insensitive.
-   */
-  public boolean equals(Object obj)
-  {
-    if (this == obj) return true;
-    if (!(obj instanceof URI)) return false;
-    URI uri = (URI) obj;
-
-    return hashCode == uri.hashCode() &&
-      hierarchical == uri.isHierarchical() &&
-      absolutePath == uri.hasAbsolutePath() &&
-      equals(scheme, uri.scheme(), true) &&
-      equals(authority, hierarchical ? uri.authority() : uri.opaquePart()) &&
-      equals(device, uri.device()) &&
-      equals(query, uri.query()) && 
-      equals(fragment, uri.fragment()) &&
-      segmentsEqual(uri);
-  }
-
-  // Tests whether this URI's path segment array is equal to that of the
-  // given uri.
-  private boolean segmentsEqual(URI uri)
-  {
-    if (segments.length != uri.segmentCount()) return false;
-    for (int i = 0, len = segments.length; i < len; i++)
-    {
-      if (!segments[i].equals(uri.segment(i))) return false;
-    }
-    return true;
-  }
-
-  // Tests two objects for equality, tolerating nulls; null is considered
-  // to be a valid value that is only equal to itself.
-  private static boolean equals(Object o1, Object o2)
-  {
-    return o1 == null ? o2 == null : o1.equals(o2);
-  }
-
-  // Tests two strings for equality, tolerating nulls and optionally
-  // ignoring case.
-  private static boolean equals(String s1, String s2, boolean ignoreCase)
-  {
-    return s1 == null ? s2 == null :
-      ignoreCase ? s1.equalsIgnoreCase(s2) : s1.equals(s2);
-  }
-
-  /**
-   * If this is an absolute URI, returns the scheme component;
-   * <code>null</code> otherwise.
-   */
-  public String scheme()
-  {
-    return scheme;
-  }
-
-  /**
-   * If this is a non-hierarchical URI, returns the opaque part component;
-   * <code>null</code> otherwise.
-   */
-  public String opaquePart()
-  {
-    return isHierarchical() ? null : authority;
-  }
-
-  /**
-   * If this is a hierarchical URI with an authority component, returns it;
-   * <code>null</code> otherwise.
-   */
-  public String authority()
-  {
-    return isHierarchical() ? authority : null;
-  }
-
-  /**
-   * If this is a hierarchical URI with an authority component that has a
-   * user info portion, returns it; <code>null</code> otherwise.
-   */
-  public String userInfo()
-  { 
-    if (!hasAuthority()) return null;
-   
-    int i = authority.indexOf(USER_INFO_SEPARATOR);
-    return i < 0 ? null : authority.substring(0, i);
-  }
-
-  /**
-   * If this is a hierarchical URI with an authority component that has a
-   * host portion, returns it; <code>null</code> otherwise.
-   */
-  public String host()
-  {
-    if (!hasAuthority()) return null;
-    
-    int i = authority.indexOf(USER_INFO_SEPARATOR);
-    int j = authority.indexOf(PORT_SEPARATOR);
-    return j < 0 ? authority.substring(i + 1) : authority.substring(i + 1, j);
-  }
-
-  /**
-   * If this is a hierarchical URI with an authority component that has a
-   * port portion, returns it; <code>null</code> otherwise.
-   */
-  public String port()
-  {
-    if (!hasAuthority()) return null;
-
-    int i = authority.indexOf(PORT_SEPARATOR);
-    return i < 0 ? null : authority.substring(i + 1);
-  }
-
-  /**
-   * If this is a hierarchical URI with a device component, returns it;
-   * <code>null</code> otherwise.
-   */
-  public String device()
-  {
-    return device;
-  }
-
-  /**
-   * If this is a hierarchical URI with a path, returns an array containing
-   * the segments of the path; an empty array otherwise.  The leading
-   * separator in an absolute path is not represented in this array, but a
-   * trailing separator is represented by an empty-string segment as the
-   * final element.
-   */
-  public String[] segments()
-  {
-    return (String[])segments.clone();
-  }
-
-  /**
-   * Returns an unmodifiable list containing the same segments as the array
-   * returned by {@link #segments segments}.
-   */
-  public List segmentsList()
-  {
-    return Collections.unmodifiableList(Arrays.asList(segments));
-  }
-
-  /**
-   * Returns the number of elements in the segment array that would be
-   * returned by {@link #segments segments}.
-   */
-  public int segmentCount()
-  {
-    return segments.length;
-  }
-
-  /**
-   * Provides fast, indexed access to individual segments in the path
-   * segment array.
-   *
-   * @exception java.lang.IndexOutOfBoundsException if <code>i < 0</code> or
-   * <code>i >= segmentCount()</code>.
-   */
-  public String segment(int i)
-  {
-    return segments[i];
-  }
-
-  /**
-   * Returns the last segment in the segment array, or <code>null</code>.
-   */
-  public String lastSegment()
-  {
-    int len = segments.length;
-    if (len == 0) return null;
-    return segments[len - 1];
-  }
-
-  /**
-   * If this is a hierarchical URI with a path, returns a string
-   * representation of the path; <code>null</code> otherwise.  The path
-   * consists of a leading segment separator character (a slash), if the
-   * path is absolute, followed by the slash-separated path segments.  If
-   * this URI has a separate <a href="#device_explanation">device
-   * component</a>, it is <em>not</em> included in the path.
-   */
-  public String path()
-  {
-    if (!hasPath()) return null;
-
-    StringBuffer result = new StringBuffer();
-    if (hasAbsolutePath()) result.append(SEGMENT_SEPARATOR);
-
-    for (int i = 0, len = segments.length; i < len; i++)
-    {
-      if (i != 0) result.append(SEGMENT_SEPARATOR);
-      result.append(segments[i]);
-    }
-    return result.toString();
-  }
-
-  /**
-   * If this is a hierarchical URI with a path, returns a string
-   * representation of the path, including the authority and the 
-   * <a href="#device_explanation">device component</a>; 
-   * <code>null</code> otherwise.  
-   *
-   * <p>If there is no authority, the format of this string is:
-   * <pre>
-   *   device/pathSegment1/pathSegment2...</pre>
-   *
-   * <p>If there is an authority, it is:
-   * <pre>
-   *   //authority/device/pathSegment1/pathSegment2...</pre>
-   *
-   * <p>For an <a href="#archive_explanation">archive URI</a>, it's just:
-   * <pre>
-   *   authority/pathSegment1/pathSegment2...</pre>
-   */
-  public String devicePath()
-  {
-    if (!hasPath()) return null;
-
-    StringBuffer result = new StringBuffer();
-
-    if (hasAuthority())
-    {
-      if (!isArchive()) result.append(AUTHORITY_SEPARATOR);
-      result.append(authority);
-
-      if (hasDevice()) result.append(SEGMENT_SEPARATOR);
-    }
-
-    if (hasDevice()) result.append(device);
-    if (hasAbsolutePath()) result.append(SEGMENT_SEPARATOR);
-
-    for (int i = 0, len = segments.length; i < len; i++)
-    {
-      if (i != 0) result.append(SEGMENT_SEPARATOR);
-      result.append(segments[i]);
-    }
-    return result.toString();
-  }
-
-  /**
-   * If this is a hierarchical URI with a query component, returns it;
-   * <code>null</code> otherwise.
-   */
-  public String query()
-  {
-    return query;
-  }
-
-
-  /**
-   * Returns the URI formed from this URI and the given query.
-   *
-   * @exception java.lang.IllegalArgumentException if
-   * <code>query</code> is not a valid query (portion) according
-   * to {@link #validQuery validQuery}.
-   */
-  public URI appendQuery(String query)
-  {
-    if (!validQuery(query))
-    {
-      throw new IllegalArgumentException(
-        "invalid query portion: " + query);
-    }
-    return new URI(hierarchical, scheme, authority, device, absolutePath, segments, query, fragment); 
-  }
-
-  /**
-   * If this URI has a non-null {@link #query query}, returns the URI
-   * formed by removing it; this URI unchanged, otherwise.
-   */
-  public URI trimQuery()
-  {
-    if (query == null)
-    {
-      return this;
-    }
-    else
-    {
-      return new URI(hierarchical, scheme, authority, device, absolutePath, segments, null, fragment); 
-    }
-  }
-
-  /**
-   * If this URI has a fragment component, returns it; <code>null</code>
-   * otherwise.
-   */
-  public String fragment()
-  {
-    return fragment;
-  }
-
-  /**
-   * Returns the URI formed from this URI and the given fragment.
-   *
-   * @exception java.lang.IllegalArgumentException if
-   * <code>fragment</code> is not a valid fragment (portion) according
-   * to {@link #validFragment validFragment}.
-   */
-  public URI appendFragment(String fragment)
-  {
-    if (!validFragment(fragment))
-    {
-      throw new IllegalArgumentException(
-        "invalid fragment portion: " + fragment);
-    }
-    URI result = new URI(hierarchical, scheme, authority, device, absolutePath, segments, query, fragment); 
-
-    if (!hasFragment())
-    {
-      result.cachedTrimFragment = this;
-    }
-    return result;
-  }
-
-  /**
-   * If this URI has a non-null {@link #fragment fragment}, returns the URI
-   * formed by removing it; this URI unchanged, otherwise.
-   */
-  public URI trimFragment()
-  {
-    if (fragment == null)
-    {
-      return this;
-    }
-    else if (cachedTrimFragment == null)
-    {
-      cachedTrimFragment = new URI(hierarchical, scheme, authority, device, absolutePath, segments, query, null); 
-    }
-
-    return cachedTrimFragment;
-  }
-
-  /**
-   * Resolves this URI reference against a <code>base</code> absolute
-   * hierarchical URI, returning the resulting absolute URI.  If already
-   * absolute, the URI itself is returned.  URI resolution is described in
-   * detail in section 5.2 of <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC
-   * 2396</a>, "Resolving Relative References to Absolute Form."
-   *
-   * <p>During resolution, empty segments, self references ("."), and parent
-   * references ("..") are interpreted, so that they can be removed from the
-   * path.  Step 6(g) gives a choice of how to handle the case where parent
-   * references point to a path above the root: the offending segments can
-   * be preserved or discarded.  This method preserves them.  To have them
-   * discarded, please use the two-parameter form of {@link
-   * #resolve(URI, boolean) resolve}.
-   *
-   * @exception java.lang.IllegalArgumentException if <code>base</code> is
-   * non-hierarchical or is relative.
-   */
-  public URI resolve(URI base)
-  {
-    return resolve(base, true);
-  }
-
-  /**
-   * Resolves this URI reference against a <code>base</code> absolute
-   * hierarchical URI, returning the resulting absolute URI.  If already
-   * absolute, the URI itself is returned.  URI resolution is described in
-   * detail in section 5.2 of <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC
-   * 2396</a>, "Resolving Relative References to Absolute Form."
-   *
-   * <p>During resultion, empty segments, self references ("."), and parent
-   * references ("..") are interpreted, so that they can be removed from the
-   * path.  Step 6(g) gives a choice of how to handle the case where parent
-   * references point to a path above the root: the offending segments can
-   * be preserved or discarded.  This method can do either.
-   *
-   * @param preserveRootParents <code>true</code> if segments refering to the
-   * parent of the root path are to be preserved; <code>false</code> if they
-   * are to be discarded.
-   *
-   * @exception java.lang.IllegalArgumentException if <code>base</code> is
-   * non-hierarchical or is relative.
-   */
-  public URI resolve(URI base, boolean preserveRootParents)
-  {
-    if (!base.isHierarchical() || base.isRelative())
-    {
-      throw new IllegalArgumentException(
-        "resolve against non-hierarchical or relative base");
-    }
-
-    // an absolute URI needs no resolving
-    if (!isRelative()) return this;
-
-    // note: isRelative() -> hierarchical
-
-    String newAuthority = authority;
-    String newDevice = device;
-    boolean newAbsolutePath = absolutePath;
-    String[] newSegments = segments;
-    String newQuery = query;
-    // note: it's okay for two URIs to share a segments array, since
-    // neither will ever modify it
-    
-    if (authority == null)
-    {
-      // no authority: use base's
-      newAuthority = base.authority();
-
-      if (device == null)
-      {
-        // no device: use base's
-        newDevice = base.device();
-
-        if (hasEmptyPath() && query == null)
-        {
-          // current document reference: use base path and query
-          newAbsolutePath = base.hasAbsolutePath();
-          newSegments = base.segments();
-          newQuery = base.query();
-        }
-        else if (hasRelativePath())
-        {
-          // relative path: merge with base and keep query (note: if the
-          // base has no path and this a non-empty relative path, there is
-          // an implied root in the resulting path) 
-          newAbsolutePath = base.hasAbsolutePath() || !hasEmptyPath();
-          newSegments = newAbsolutePath ? mergePath(base, preserveRootParents)
-            : NO_SEGMENTS;
-        }
-        // else absolute path: keep it and query
-      }
-      // else keep device, path, and query
-    }
-    // else keep authority, device, path, and query
-    
-    // always keep fragment, even if null, and use scheme from base;
-    // no validation needed since all components are from existing URIs
-    return new URI(true, base.scheme(), newAuthority, newDevice,
-                   newAbsolutePath, newSegments, newQuery, fragment);
-  }
-
-  // Merges this URI's relative path with the base non-relative path.  If
-  // base has no path, treat it as the root absolute path, unless this has
-  // no path either.
-  private String[] mergePath(URI base, boolean preserveRootParents)
-  {
-    if (base.hasRelativePath())
-    {
-      throw new IllegalArgumentException("merge against relative path");
-    }
-    if (!hasRelativePath())
-    {
-      throw new IllegalStateException("merge non-relative path");
-    }
-
-    int baseSegmentCount = base.segmentCount();
-    int segmentCount = segments.length;
-    String[] stack = new String[baseSegmentCount + segmentCount];
-    int sp = 0;
-
-    // use a stack to accumulate segments of base, except for the last
-    // (i.e. skip trailing separator and anything following it), and of
-    // relative path
-    for (int i = 0; i < baseSegmentCount - 1; i++)
-    {
-      sp = accumulate(stack, sp, base.segment(i), preserveRootParents);
-    }
-
-    for (int i = 0; i < segmentCount; i++)
-    {
-      sp = accumulate(stack, sp, segments[i], preserveRootParents);
-    }
-
-    // if the relative path is empty or ends in an empty segment, a parent 
-    // reference, or a self referenfce, add a trailing separator to a
-    // non-empty path
-    if (sp > 0 &&  (segmentCount == 0 ||
-                    SEGMENT_EMPTY.equals(segments[segmentCount - 1]) ||
-                    SEGMENT_PARENT.equals(segments[segmentCount - 1]) ||
-                    SEGMENT_SELF.equals(segments[segmentCount - 1])))
-    {
-      stack[sp++] = SEGMENT_EMPTY;
-    }
-
-    // return a correctly sized result
-    String[] result = new String[sp];
-    System.arraycopy(stack, 0, result, 0, sp);
-    return result;
-  }
-
-  // Adds a segment to a stack, skipping empty segments and self references,
-  // and interpreting parent references.
-  private static int accumulate(String[] stack, int sp, String segment,
-                                boolean preserveRootParents)
-  {
-    if (SEGMENT_PARENT.equals(segment))
-    {
-      if (sp == 0)
-      {
-        // special care must be taken for a root's parent reference: it is
-        // either ignored or the symbolic reference itself is pushed
-        if (preserveRootParents) stack[sp++] = segment;
-      }
-      else
-      {
-        // unless we're already accumulating root parent references,
-        // parent references simply pop the last segment descended
-        if (SEGMENT_PARENT.equals(stack[sp - 1])) stack[sp++] = segment;
-        else sp--;
-      }
-    }
-    else if (!SEGMENT_EMPTY.equals(segment) && !SEGMENT_SELF.equals(segment))
-    {
-      // skip empty segments and self references; push everything else
-      stack[sp++] = segment;
-    }
-    return sp;
-  }
-
-  /**
-   * Finds the shortest relative or, if necessary, the absolute URI that,
-   * when resolved against the given <code>base</code> absolute hierarchical
-   * URI using {@link #resolve(URI) resolve}, will yield this absolute URI.  
-   *
-   * @exception java.lang.IllegalArgumentException if <code>base</code> is
-   * non-hierarchical or is relative.
-   * @exception java.lang.IllegalStateException if <code>this</code> is
-   * relative.
-   */
-  public URI deresolve(URI base)
-  {
-    return deresolve(base, true, false, true);
-  }
-
-  /**
-   * Finds an absolute URI that, when resolved against the given
-   * <code>base</code> absolute hierarchical URI using {@link
-   * #resolve(URI, boolean) resolve}, will yield this absolute URI.
-   *
-   * @param preserveRootParents the boolean argument to <code>resolve(URI,
-   * boolean)</code> for which the returned URI should resolve to this URI.
-   * @param anyRelPath if <code>true</code>, the returned URI's path (if
-   * any) will be relative, if possible.  If <code>false</code>, the form of
-   * the result's path will depend upon the next parameter.
-   * @param shorterRelPath if <code>anyRelPath</code> is <code>false</code>
-   * and this parameter is <code>true</code>, the returned URI's path (if
-   * any) will be relative, if one can be found that is no longer (by number
-   * of segments) than the absolute path.  If both <code>anyRelPath</code>
-   * and this parameter are <code>false</code>, it will be absolute.
-   *
-   * @exception java.lang.IllegalArgumentException if <code>base</code> is
-   * non-hierarchical or is relative.
-   * @exception java.lang.IllegalStateException if <code>this</code> is
-   * relative.
-   */
-  public URI deresolve(URI base, boolean preserveRootParents,
-                       boolean anyRelPath, boolean shorterRelPath)
-  {
-    if (!base.isHierarchical() || base.isRelative())
-    {
-      throw new IllegalArgumentException(
-        "deresolve against non-hierarchical or relative base");
-    }
-    if (isRelative())
-    {
-      throw new IllegalStateException("deresolve relative URI");
-    }
-
-    // note: these assertions imply that neither this nor the base URI has a
-    // relative path; thus, both have either an absolute path or no path
-    
-    // different scheme: need complete, absolute URI
-    if (!scheme.equalsIgnoreCase(base.scheme())) return this;
-
-    // since base must be hierarchical, and since a non-hierarchical URI
-    // must have both scheme and opaque part, the complete absolute URI is
-    // needed to resolve to a non-hierarchical URI
-    if (!isHierarchical()) return this;
-
-    String newAuthority = authority;
-    String newDevice = device;
-    boolean newAbsolutePath = absolutePath;
-    String[] newSegments = segments;
-    String newQuery = query;
-
-    if (equals(authority, base.authority()) &&
-        (hasDevice() || hasPath() || (!base.hasDevice() && !base.hasPath())))
-    {
-      // matching authorities and no device or path removal
-      newAuthority = null;
-
-      if (equals(device, base.device()) && (hasPath() || !base.hasPath()))
-      {
-        // matching devices and no path removal
-        newDevice = null;
-
-        // exception if (!hasPath() && base.hasPath())
-
-        if (!anyRelPath && !shorterRelPath)
-        {
-          // user rejects a relative path: keep absolute or no path
-        }
-        else if (hasPath() == base.hasPath() && segmentsEqual(base) &&
-                 equals(query, base.query()))
-        {
-          // current document reference: keep no path or query
-          newAbsolutePath = false;
-          newSegments = NO_SEGMENTS;
-          newQuery = null;
-        }
-        else if (!hasPath() && !base.hasPath())
-        {
-          // no paths: keep query only
-          newAbsolutePath = false;
-          newSegments = NO_SEGMENTS;
-        }
-        // exception if (!hasAbsolutePath())
-        else if (hasCollapsableSegments(preserveRootParents))
-        {
-          // path form demands an absolute path: keep it and query
-        }
-        else
-        {
-          // keep query and select relative or absolute path based on length
-          String[] rel = findRelativePath(base, preserveRootParents);
-          if (anyRelPath || segments.length > rel.length)
-          {
-            // user demands a relative path or the absolute path is longer
-            newAbsolutePath = false;
-            newSegments = rel;
-          }
-          // else keep shorter absolute path
-        }
-      }
-      // else keep device, path, and query
-    }
-    // else keep authority, device, path, and query
-
-    // always include fragment, even if null;
-    // no validation needed since all components are from existing URIs
-    return new URI(true, null, newAuthority, newDevice, newAbsolutePath,
-                   newSegments, newQuery, fragment);
-  }
-
-  // Returns true if the non-relative path includes segments that would be
-  // collapsed when resolving; false otherwise.  If preserveRootParents is
-  // true, collapsable segments include any empty segments, except for the
-  // last segment, as well as and parent and self references.  If
-  // preserveRootsParents is false, parent references are not collapsable if
-  // they are the first segment or preceeded only by other parent
-  // references.
-  private boolean hasCollapsableSegments(boolean preserveRootParents)
-  {
-    if (hasRelativePath())
-    {
-      throw new IllegalStateException("test collapsability of relative path");
-    }
-
-    for (int i = 0, len = segments.length; i < len; i++)
-    {
-      String segment = segments[i];
-      if ((i < len - 1 && SEGMENT_EMPTY.equals(segment)) ||
-          SEGMENT_SELF.equals(segment) ||
-          SEGMENT_PARENT.equals(segment) && (
-            !preserveRootParents || (
-              i != 0 && !SEGMENT_PARENT.equals(segments[i - 1]))))
-      {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  // Returns the shortest relative path between the the non-relative path of
-  // the given base and this absolute path.  If the base has no path, it is
-  // treated as the root absolute path.
-  private String[] findRelativePath(URI base, boolean preserveRootParents)
-  {
-    if (base.hasRelativePath())
-    {
-      throw new IllegalArgumentException(
-        "find relative path against base with relative path");
-    }
-    if (!hasAbsolutePath())
-    {
-      throw new IllegalArgumentException(
-        "find relative path of non-absolute path");
-    }
-
-    // treat an empty base path as the root absolute path
-    String[] startPath = base.collapseSegments(preserveRootParents);
-    String[] endPath = segments;
-
-    // drop last segment from base, as in resolving
-    int startCount = startPath.length > 0 ? startPath.length - 1 : 0;
-    int endCount = endPath.length;
-
-    // index of first segment that is different between endPath and startPath
-    int diff = 0;
-
-    // if endPath is shorter than startPath, the last segment of endPath may
-    // not be compared: because startPath has been collapsed and had its
-    // last segment removed, all preceeding segments can be considered non-
-    // empty and followed by a separator, while the last segment of endPath
-    // will either be non-empty and not followed by a separator, or just empty
-    for (int count = startCount < endCount ? startCount : endCount - 1;
-         diff < count && startPath[diff].equals(endPath[diff]); diff++);
-
-    int upCount = startCount - diff;
-    int downCount = endCount - diff;
-
-    // a single separator, possibly preceeded by some parent reference
-    // segments, is redundant
-    if (downCount == 1 && SEGMENT_EMPTY.equals(endPath[endCount - 1]))
-    {
-      downCount = 0;
-    }
-
-    // an empty path needs to be replaced by a single "." if there is no
-    // query, to distinguish it from a current document reference
-    if (upCount + downCount == 0)
-    {
-      if (query == null) return new String[] { SEGMENT_SELF };
-      return NO_SEGMENTS;
-    }
-
-    // return a correctly sized result
-    String[] result = new String[upCount + downCount];
-    Arrays.fill(result, 0, upCount, SEGMENT_PARENT);
-    System.arraycopy(endPath, diff, result, upCount, downCount);
-    return result;
-  }
-
-  // Collapses non-ending empty segments, parent references, and self
-  // references in a non-relative path, returning the same path that would
-  // be produced from the base hierarchical URI as part of a resolve.
-  String[] collapseSegments(boolean preserveRootParents)
-  {
-    if (hasRelativePath())
-    {
-      throw new IllegalStateException("collapse relative path");
-    }
-
-    if (!hasCollapsableSegments(preserveRootParents)) return segments();
-
-    // use a stack to accumulate segments
-    int segmentCount = segments.length;
-    String[] stack = new String[segmentCount];
-    int sp = 0;
-
-    for (int i = 0; i < segmentCount; i++)
-    {
-      sp = accumulate(stack, sp, segments[i], preserveRootParents);
-    }
-
-    // if the path is non-empty and originally ended in an empty segment, a
-    // parent reference, or a self reference, add a trailing separator
-    if (sp > 0 && (SEGMENT_EMPTY.equals(segments[segmentCount - 1]) ||
-                   SEGMENT_PARENT.equals(segments[segmentCount - 1]) ||
-                   SEGMENT_SELF.equals(segments[segmentCount - 1])))
-    {                   
-      stack[sp++] = SEGMENT_EMPTY;
-    }
-
-    // return a correctly sized result
-    String[] result = new String[sp];
-    System.arraycopy(stack, 0, result, 0, sp);
-    return result;
-  }
-
-  /**
-   * Returns the string representation of this URI.  For a generic,
-   * non-hierarchical URI, this looks like:
-   * <pre>
-   *   scheme:opaquePart#fragment</pre>
-   * 
-   * <p>For a hierarchical URI, it looks like:
-   * <pre>
-   *   scheme://authority/device/pathSegment1/pathSegment2...?query#fragment</pre>
-   *
-   * <p>For an <a href="#archive_explanation">archive URI</a>, it's just:
-   * <pre>
-   *   scheme:authority/pathSegment1/pathSegment2...?query#fragment</pre>
-   * <p>Of course, absent components and their separators will be omitted.
-   */
-  public String toString()
-  {
-    if (cachedToString == null)
-    {
-      StringBuffer result = new StringBuffer();
-      if (!isRelative())
-      {
-        result.append(scheme);
-        result.append(SCHEME_SEPARATOR);
-      }
-
-      if (isHierarchical())
-      {
-        if (hasAuthority())
-        {
-          if (!isArchive()) result.append(AUTHORITY_SEPARATOR);
-          result.append(authority);
-        }
-
-        if (hasDevice())
-        {
-          result.append(SEGMENT_SEPARATOR);
-          result.append(device);
-        }
-
-        if (hasAbsolutePath()) result.append(SEGMENT_SEPARATOR);
-
-        for (int i = 0, len = segments.length; i < len; i++)
-        {
-          if (i != 0) result.append(SEGMENT_SEPARATOR);
-          result.append(segments[i]);
-        }
-
-        if (hasQuery())
-        {
-          result.append(QUERY_SEPARATOR);
-          result.append(query);
-        }
-      }
-      else
-      {
-        result.append(authority);
-      }
-
-      if (hasFragment())
-      {
-        result.append(FRAGMENT_SEPARATOR);
-        result.append(fragment);
-      }
-      cachedToString = result.toString();
-    }
-    return cachedToString;
-  }
-
-  // Returns a string representation of this URI for debugging, explicitly
-  // showing each of the components.
-  String toString(boolean includeSimpleForm)
-  {
-    StringBuffer result = new StringBuffer();
-    if (includeSimpleForm) result.append(toString());
-    result.append("\n hierarchical: ");
-    result.append(hierarchical);
-    result.append("\n       scheme: ");
-    result.append(scheme);
-    result.append("\n    authority: ");
-    result.append(authority);
-    result.append("\n       device: ");
-    result.append(device);
-    result.append("\n absolutePath: ");
-    result.append(absolutePath);
-    result.append("\n     segments: ");
-    if (segments.length == 0) result.append("<empty>");
-    for (int i = 0, len = segments.length; i < len; i++)
-    {
-      if (i > 0) result.append("\n               ");
-      result.append(segments[i]);
-    }
-    result.append("\n        query: ");
-    result.append(query);
-    result.append("\n     fragment: ");
-    result.append(fragment);
-    return result.toString();
-  }
-
-  /**
-   * If this URI may refer directly to a locally accessible file, as
-   * determined by {@link #isFile isFile}, {@link decode decodes} and formats  
-   * the URI as a pathname to that file; returns null otherwise.
-   *
-   * <p>If there is no authority, the format of this string is:
-   * <pre>
-   *   device/pathSegment1/pathSegment2...</pre>
-   *
-   * <p>If there is an authority, it is:
-   * <pre>
-   *   //authority/device/pathSegment1/pathSegment2...</pre>
-   * 
-   * <p>However, the character used as a separator is system-dependant and
-   * obtained from {@link java.io.File#separatorChar}.
-   */
-  public String toFileString()
-  {
-    if (!isFile()) return null;
-
-    StringBuffer result = new StringBuffer();
-    char separator = File.separatorChar;
-
-    if (hasAuthority())
-    {
-      result.append(separator);
-      result.append(separator);
-      result.append(authority);
-
-      if (hasDevice()) result.append(separator);
-    }
-
-    if (hasDevice()) result.append(device);
-    if (hasAbsolutePath()) result.append(separator);
-
-    for (int i = 0, len = segments.length; i < len; i++)
-    {
-      if (i != 0) result.append(separator);
-      result.append(segments[i]);
-    }
-
-    return decode(result.toString());
-  }
-
-  /**
-   * Returns the URI formed by appending the specified segment on to the end
-   * of the path of this URI, if hierarchical; this URI unchanged,
-   * otherwise.  If this URI has an authority and/or device, but no path,
-   * the segment becomes the first under the root in an absolute path.
-   *
-   * @exception java.lang.IllegalArgumentException if <code>segment</code>
-   * is not a valid segment according to {@link #validSegment}.
-   */
-  public URI appendSegment(String segment)
-  {
-    if (!validSegment(segment))
-    {
-      throw new IllegalArgumentException("invalid segment: " + segment);
-    }
-
-    if (!isHierarchical()) return this;
-
-    // absolute path or no path -> absolute path
-    boolean newAbsolutePath = !hasRelativePath();
-
-    int len = segments.length;
-    String[] newSegments = new String[len + 1];
-    System.arraycopy(segments, 0, newSegments, 0, len);
-    newSegments[len] = segment;
-
-    return new URI(true, scheme, authority, device, newAbsolutePath,
-                   newSegments, query, fragment);
-  }
-
-  /**
-   * Returns the URI formed by appending the specified segments on to the
-   * end of the path of this URI, if hierarchical; this URI unchanged,
-   * otherwise.  If this URI has an authority and/or device, but no path,
-   * the segments are made to form an absolute path.
-   *
-   * @param segments an array of non-null strings, each representing one
-   * segment of the path.  If desired, a trailing separator should be
-   * represented by an empty-string segment as the last element of the
-   * array.
-   *
-   * @exception java.lang.IllegalArgumentException if <code>segments</code>
-   * is not a valid segment array according to {@link #validSegments}.
-   */
-  public URI appendSegments(String[] segments)
-  {
-    if (!validSegments(segments))
-    {
-      String s = segments == null ? "invalid segments: " + segments :
-        "invalid segment: " + firstInvalidSegment(segments);
-      throw new IllegalArgumentException(s);
-    }
-
-    if (!isHierarchical()) return this;
-
-    // absolute path or no path -> absolute path
-    boolean newAbsolutePath = !hasRelativePath(); 
-
-    int len = this.segments.length;
-    int segmentsCount = segments.length;
-    String[] newSegments = new String[len + segmentsCount];
-    System.arraycopy(this.segments, 0, newSegments, 0, len);
-    System.arraycopy(segments, 0, newSegments, len, segmentsCount);
-    
-    return new URI(true, scheme, authority, device, newAbsolutePath,
-                   newSegments, query, fragment);
-  }
-
-  /**
-   * Returns the URI formed by trimming the specified number of segments
-   * (including empty segments, such as one representing a trailing
-   * separator) from the end of the path of this URI, if hierarchical;
-   * otherwise, this URI is returned unchanged.
-   *
-   * <p>Note that if all segments are trimmed from an absolute path, the
-   * root absolute path remains.
-   * 
-   * @param i the number of segments to be trimmed in the returned URI.  If
-   * less than 1, this URI is returned unchanged; if equal to or greater
-   * than the number of segments in this URI's path, all segments are
-   * trimmed.  
-   */
-  public URI trimSegments(int i)
-  {
-    if (!isHierarchical() || i < 1) return this;
-
-    String[] newSegments = NO_SEGMENTS;
-    int len = segments.length - i;
-    if (len > 0)
-    {
-      newSegments = new String[len];
-      System.arraycopy(segments, 0, newSegments, 0, len);
-    }
-    return new URI(true, scheme, authority, device, absolutePath,
-                   newSegments, query, fragment);
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarchical URI that has a path
-   * that ends with a trailing separator; <code>false</code> otherwise.
-   *
-   * <p>A trailing separator is represented as an empty segment as the
-   * last segment in the path; note that this definition does <em>not</em>
-   * include the lone separator in the root absolute path.
-   */
-  public boolean hasTrailingPathSeparator()
-  {
-    return segments.length > 0 && 
-      SEGMENT_EMPTY.equals(segments[segments.length - 1]);
-  }
-
-  /**
-   * If this is a hierarchical URI whose path includes a file extension,
-   * that file extension is returned; null otherwise.  We define a file
-   * extension as any string following the last period (".") in the final
-   * path segment.  If there is no path, the path ends in a trailing
-   * separator, or the final segment contains no period, then we consider
-   * there to be no file extension.  If the final segment ends in a period,
-   * then the file extension is an empty string.
-   */
-  public String fileExtension()
-  {
-    int len = segments.length;
-    if (len == 0) return null;
-
-    String lastSegment = segments[len - 1];
-    int i = lastSegment.lastIndexOf(FILE_EXTENSION_SEPARATOR);
-    return i < 0 ? null : lastSegment.substring(i + 1);
-  }
-
-  /**
-   * Returns the URI formed by appending a period (".") followed by the
-   * specified file extension to the last path segment of this URI, if it is
-   * hierarchical with a non-empty path ending in a non-empty segment;
-   * otherwise, this URI is returned unchanged.
-
-   * <p>The extension is appended regardless of whether the segment already
-   * contains an extension.
-   *
-   * @exception java.lang.IllegalArgumentException if
-   * <code>fileExtension</code> is not a valid segment (portion) according
-   * to {@link #validSegment}.
-   */
-  public URI appendFileExtension(String fileExtension)
-  {
-    if (!validSegment(fileExtension))
-    {
-      throw new IllegalArgumentException(
-        "invalid segment portion: " + fileExtension);
-    }
-
-    int len = segments.length;
-    if (len == 0) return this;
-
-    String lastSegment = segments[len - 1];
-    if (SEGMENT_EMPTY.equals(lastSegment)) return this;
-    StringBuffer newLastSegment = new StringBuffer(lastSegment);
-    newLastSegment.append(FILE_EXTENSION_SEPARATOR);
-    newLastSegment.append(fileExtension);
-
-    String[] newSegments = new String[len];
-    System.arraycopy(segments, 0, newSegments, 0, len - 1);
-    newSegments[len - 1] = newLastSegment.toString();
-    
-    // note: segments.length > 0 -> hierarchical
-    return new URI(true, scheme, authority, device, absolutePath,
-                   newSegments, query, fragment); 
-  }
-
-  /**
-   * If this URI has a non-null {@link #fileExtension fileExtension},
-   * returns the URI formed by removing it; this URI unchanged, otherwise.
-   */
-  public URI trimFileExtension()
-  {
-    int len = segments.length;
-    if (len == 0) return this;
-
-    String lastSegment = segments[len - 1];
-    int i = lastSegment.lastIndexOf(FILE_EXTENSION_SEPARATOR);
-    if (i < 0) return this;
-
-    String newLastSegment = lastSegment.substring(0, i);
-    String[] newSegments = new String[len];
-    System.arraycopy(segments, 0, newSegments, 0, len - 1);
-    newSegments[len - 1] = newLastSegment;
-
-    // note: segments.length > 0 -> hierarchical
-    return new URI(true, scheme, authority, device, absolutePath,
-                   newSegments, query, fragment); 
-  }
-
-  /**
-   * Returns <code>true</code> if this is a hierarchical URI that ends in a
-   * slash; that is, it has a trailing path separator or is the root
-   * absolute path, and has no query and no fragment; <code>false</code>
-   * is returned otherwise.
-   */
-  public boolean isPrefix()
-  {
-    return hierarchical && query == null && fragment == null &&
-      (hasTrailingPathSeparator() || (absolutePath && segments.length == 0));
-  }
-
-  /**
-   * If this is a hierarchical URI reference and <code>oldPrefix</code> is a
-   * prefix of it, this returns the URI formed by replacing it by
-   * <code>newPrefix</code>; <code>null</code> otherwise.
-   *
-   * <p>In order to be a prefix, the <code>oldPrefix</code>'s
-   * {@link #isPrefix isPrefix} must return <code>true</code>, and it must
-   * match this URI's scheme, authority, and device.  Also, the paths must
-   * match, up to prefix's end.
-   *
-   * @exception java.lang.IllegalArgumentException if either
-   * <code>oldPrefix</code> or <code>newPrefix</code> is not a prefix URI
-   * according to {@link #isPrefix}.
-   */
-  public URI replacePrefix(URI oldPrefix, URI newPrefix)
-  {
-    if (!oldPrefix.isPrefix() || !newPrefix.isPrefix())
-    {
-      String which = oldPrefix.isPrefix() ? "new" : "old";
-      throw new IllegalArgumentException("non-prefix " + which + " value");
-    }
-
-    // Get what's left of the segments after trimming the prefix.
-    String[] tailSegments = getTailSegments(oldPrefix);
-    if (tailSegments == null) return null;
-
-    // If the new prefix has segments, it is not the root absolute path,
-    // and we need to drop the trailing empty segment and append the tail
-    // segments.
-    String[] mergedSegments = tailSegments;
-    if (newPrefix.segmentCount() != 0)
-    {
-      int segmentsToKeep = newPrefix.segmentCount() - 1;
-      mergedSegments = new String[segmentsToKeep + tailSegments.length];
-      System.arraycopy(newPrefix.segments(), 0, mergedSegments, 0,
-                       segmentsToKeep);
-
-      if (tailSegments.length != 0)
-      {
-        System.arraycopy(tailSegments, 0, mergedSegments, segmentsToKeep,
-                         tailSegments.length);
-      }
-    }
-
-    // no validation needed since all components are from existing URIs
-    return new URI(true, newPrefix.scheme(), newPrefix.authority(),
-                   newPrefix.device(), newPrefix.hasAbsolutePath(),
-                   mergedSegments, query, fragment);
-  }
-
-  // If this is a hierarchical URI reference and prefix is a prefix of it,
-  // returns the portion of the path remaining after that prefix has been
-  // trimmed; null otherwise.
-  private String[] getTailSegments(URI prefix)
-  {
-    if (!prefix.isPrefix())
-    {
-      throw new IllegalArgumentException("non-prefix trim");
-    }
-
-    // Don't even consider it unless this is hierarchical and has scheme,
-    // authority, device and path absoluteness equal to those of the prefix.
-    if (!hierarchical ||
-        !equals(scheme, prefix.scheme(), true) ||
-        !equals(authority, prefix.authority()) ||
-        !equals(device, prefix.device()) ||
-        absolutePath != prefix.hasAbsolutePath())
-    {
-      return null;
-    }
-
-    // If the prefix has no segments, then it is the root absolute path, and
-    // we know this is an absolute path, too.
-    if (prefix.segmentCount() == 0) return segments;
-
-    // This must have no fewer segments than the prefix.  Since the prefix
-    // is not the root absolute path, its last segment is empty; all others
-    // must match.
-    int i = 0;
-    int segmentsToCompare = prefix.segmentCount() - 1;
-    if (segments.length <= segmentsToCompare) return null;
-
-    for (; i < segmentsToCompare; i++)
-    {
-      if (!segments[i].equals(prefix.segment(i))) return null;
-    }
-
-    // The prefix really is a prefix of this.  If this has just one more,
-    // empty segment, the paths are the same.
-    if (i == segments.length - 1 && SEGMENT_EMPTY.equals(segments[i]))
-    {
-      return NO_SEGMENTS;
-    }
-    
-    // Otherwise, the path needs only the remaining segments.
-    String[] newSegments = new String[segments.length - i];
-    System.arraycopy(segments, i, newSegments, 0, newSegments.length);
-    return newSegments;
-  }
-
-  /**
-   * Encodes a string so as to produce a valid opaque part value, as defined
-   * by the RFC.  All excluded characters, such as space and <code>#</code>,
-   * are escaped, as is <code>/</code> if it is the first character.
-   * 
-   * @param ignoreEscaped <code>true</code> to leave <code>%</code> characters
-   * unescaped if they already begin a valid three-character escape sequence;
-   * <code>false</code> to encode all <code>%</code> characters.  Note that
-   * if a <code>%</code> is not followed by 2 hex digits, it will always be
-   * escaped. 
-   */
-  public static String encodeOpaquePart(String value, boolean ignoreEscaped)
-  {
-    String result = encode(value, URIC_HI, URIC_LO, ignoreEscaped);
-    return result != null && result.length() > 0 && result.charAt(0) == SEGMENT_SEPARATOR ?
-      "%2F" + result.substring(1) :
-      result;
-  }
-
-  /**
-   * Encodes a string so as to produce a valid authority, as defined by the
-   * RFC.  All excluded characters, such as space and <code>#</code>,
-   * are escaped, as are <code>/</code> and <code>?</code>
-   * 
-   * @param ignoreEscaped <code>true</code> to leave <code>%</code> characters
-   * unescaped if they already begin a valid three-character escape sequence;
-   * <code>false</code> to encode all <code>%</code> characters.  Note that
-   * if a <code>%</code> is not followed by 2 hex digits, it will always be
-   * escaped. 
-   */
-  public static String encodeAuthority(String value, boolean ignoreEscaped)
-  {
-    return encode(value, SEGMENT_CHAR_HI, SEGMENT_CHAR_LO, ignoreEscaped);
-  }
-
-  /**
-   * Encodes a string so as to produce a valid segment, as defined by the
-   * RFC.  All excluded characters, such as space and <code>#</code>,
-   * are escaped, as are <code>/</code> and <code>?</code>
-   * 
-   * @param ignoreEscaped <code>true</code> to leave <code>%</code> characters
-   * unescaped if they already begin a valid three-character escape sequence;
-   * <code>false</code> to encode all <code>%</code> characters.  Note that
-   * if a <code>%</code> is not followed by 2 hex digits, it will always be
-   * escaped. 
-   */
-  public static String encodeSegment(String value, boolean ignoreEscaped)
-  {
-    return encode(value, SEGMENT_CHAR_HI, SEGMENT_CHAR_LO, ignoreEscaped);
-  }
-
-  /**
-   * Encodes a string so as to produce a valid query, as defined by the RFC.
-   * Only excluded characters, such as space and <code>#</code>, are escaped.
-   * 
-   * @param ignoreEscaped <code>true</code> to leave <code>%</code> characters
-   * unescaped if they already begin a valid three-character escape sequence;
-   * <code>false</code> to encode all <code>%</code> characters.  Note that
-   * if a <code>%</code> is not followed by 2 hex digits, it will always be
-   * escaped. 
-   */
-  public static String encodeQuery(String value, boolean ignoreEscaped)
-  {
-    return encode(value, URIC_HI, URIC_LO, ignoreEscaped);
-  }
-
-  /**
-   * Encodes a string so as to produce a valid fragment, as defined by the
-   * RFC.  Only excluded characters, such as space and <code>#</code>, are
-   * escaped.
-   * 
-   * @param ignoreEscaped <code>true</code> to leave <code>%</code> characters
-   * unescaped if they already begin a valid three-character escape sequence;
-   * <code>false</code> to encode all <code>%</code> characters.  Note that
-   * if a <code>%</code> is not followed by 2 hex digits, it will always be
-   * escaped. 
-   */
-  public static String encodeFragment(String value, boolean ignoreEscaped)
-  {
-    return encode(value, URIC_HI, URIC_LO, ignoreEscaped);
-  }
-
-  // Encodes a complete URI, optionally leaving % characters unescaped when
-  // beginning a valid three-character escape sequence.  We assume that the
-  // last # begins the fragment.
-  private static String encodeURI(String uri, boolean ignoreEscaped)
-  {
-    if (uri == null) return null;
-
-    StringBuffer result = new StringBuffer();
-
-    int i = uri.indexOf(SCHEME_SEPARATOR);
-    if (i != -1)
-    {
-      String scheme = uri.substring(0, i);
-      result.append(scheme);
-      result.append(SCHEME_SEPARATOR);
-    }
-    
-    int j = uri.lastIndexOf(FRAGMENT_SEPARATOR);
-    if (j != -1)
-    {
-      String sspart = uri.substring(++i, j);
-      result.append(encode(sspart, URIC_HI, URIC_LO, ignoreEscaped));
-      result.append(FRAGMENT_SEPARATOR);
-
-      String fragment = uri.substring(++j);
-      result.append(encode(fragment, URIC_HI, URIC_LO, ignoreEscaped));
-    }
-    else
-    {
-      String sspart = uri.substring(++i);
-      result.append(encode(sspart, URIC_HI, URIC_LO, ignoreEscaped));
-    }
-    
-    return result.toString();
-  }
-
-  // Encodes the given string, replacing each ASCII character that is not in
-  // the set specified by the 128-bit bitmask and each non-ASCII character
-  // below 0xA0 by an escape sequence of % followed by two hex digits.  If
-  // % is not in the set but ignoreEscaped is true, then % will not be encoded
-  // iff it already begins a valid escape sequence.
-  private static String encode(String value, long highBitmask, long lowBitmask, boolean ignoreEscaped)
-  {
-    if (value == null) return null;
-
-    StringBuffer result = null;
-
-    for (int i = 0, len = value.length(); i < len; i++)
-    {
-      char c = value.charAt(i);
-
-      if (!matches(c, highBitmask, lowBitmask) && c < 160 &&
-          (!ignoreEscaped || !isEscaped(value, i)))
-      {
-        if (result == null)
-        {
-          result = new StringBuffer(value.substring(0, i));
-        }
-        appendEscaped(result, (byte)c);
-      }
-      else if (result != null)
-      {
-        result.append(c);
-      }
-    }
-    return result == null ? value : result.toString();
-  }
-
-  // Tests whether an escape occurs in the given string, starting at index i.
-  // An escape sequence is a % followed by two hex digits.
-  private static boolean isEscaped(String s, int i)
-  {
-    return s.charAt(i) == ESCAPE && s.length() > i + 2 &&
-      matches(s.charAt(i + 1), HEX_HI, HEX_LO) &&
-      matches(s.charAt(i + 2), HEX_HI, HEX_LO);
-  }
-
-  // Computes a three-character escape sequence for the byte, appending
-  // it to the StringBuffer.  Only characters up to 0xFF should be escaped;
-  // all but the least significant byte will be ignored.
-  private static void appendEscaped(StringBuffer result, byte b)
-  {
-    result.append(ESCAPE);
-
-    // The byte is automatically widened into an int, with sign extension,
-    // for shifting.  This can introduce 1's to the left of the byte, which
-    // must be cleared by masking before looking up the hex digit.
-    //
-    result.append(HEX_DIGITS[(b >> 4) & 0x0F]);
-    result.append(HEX_DIGITS[b & 0x0F]);
-  }
-
-  /**
-   * Decodes the given string, replacing each three-digit escape sequence by
-   * the character that it represents.  Incomplete escape sequences are
-   * ignored.
-   */
-  public static String decode(String value)
-  {
-    if (value == null) return null;
-
-    StringBuffer result = null;
-
-    for (int i = 0, len = value.length(); i < len; i++)
-    {
-      if (isEscaped(value, i)) 
-      {
-        if (result == null)
-        {
-          result = new StringBuffer(value.substring(0, i));
-        }
-        result.append(unescape(value.charAt(i + 1), value.charAt(i + 2)));
-        i += 2;
-      }
-      else if (result != null)
-      {
-        result.append(value.charAt(i));
-      }
-    }
-    return result == null ? value : result.toString();
-  }
-
-  // Returns the character encoded by % followed by the two given hex digits,
-  // which is always 0xFF or less, so can safely be casted to a byte.  If
-  // either character is not a hex digit, a bogus result will be returned.
-  private static char unescape(char highHexDigit, char lowHexDigit)
-  {
-    return (char)((valueOf(highHexDigit) << 4) | valueOf(lowHexDigit));
-  }
-
-  // Returns the int value of the given hex digit.
-  private static int valueOf(char hexDigit)
-  {
-    if (hexDigit >= 'A' && hexDigit <= 'F')
-    {
-      return hexDigit - 'A' + 10;
-    }
-    if (hexDigit >= 'a' && hexDigit <= 'f')
-    {
-      return hexDigit - 'a' + 10;
-    }
-    if (hexDigit >= '0' && hexDigit <= '9')
-    {
-      return hexDigit - '0';
-    }
-    return 0;
-  }
-
-  /*
-   * Returns <code>true</code> if this URI contains non-ASCII characters;
-   * <code>false</code> otherwise.
-   *
-   * This unused code is included for possible future use... 
-   */
-/*
-  public boolean isIRI()
-  {
-    return iri; 
-  }
-
-  // Returns true if the given string contains any non-ASCII characters;
-  // false otherwise.
-  private static boolean containsNonASCII(String value)
-  {
-    for (int i = 0, len = value.length(); i < len; i++)
-    {
-      if (value.charAt(i) > 127) return true;
-    }
-    return false;
-  }
-*/
-
-  /*
-   * If this is an {@link #isIRI IRI}, converts it to a strict ASCII URI,
-   * using the procedure described in Section 3.1 of the
-   * <a href="http://www.w3.org/International/iri-edit/draft-duerst-iri-09.txt">IRI
-   * Draft RFC</a>.  Otherwise, this URI, itself, is returned.
-   *
-   * This unused code is included for possible future use...
-   */
-/*
-  public URI toASCIIURI()
-  {
-    if (!iri) return this;
-
-    if (cachedASCIIURI == null)
-    {
-      String eAuthority = encodeAsASCII(authority);
-      String eDevice = encodeAsASCII(device);
-      String eQuery = encodeAsASCII(query);
-      String eFragment = encodeAsASCII(fragment);
-      String[] eSegments = new String[segments.length];
-      for (int i = 0; i < segments.length; i++)
-      {
-        eSegments[i] = encodeAsASCII(segments[i]);
-      }
-      cachedASCIIURI = new URI(hierarchical, scheme, eAuthority, eDevice, absolutePath, eSegments, eQuery, eFragment); 
-
-    }
-    return cachedASCIIURI;
-  }
-
-  // Returns a strict ASCII encoding of the given value.  Each non-ASCII
-  // character is converted to bytes using UTF-8 encoding, which are then
-  // represnted using % escaping.
-  private String encodeAsASCII(String value)
-  {
-    if (value == null) return null;
-
-    StringBuffer result = null;
-
-    for (int i = 0, len = value.length(); i < len; i++)
-    {
-      char c = value.charAt(i);
-
-      if (c >= 128)
-      {
-        if (result == null)
-        {
-          result = new StringBuffer(value.substring(0, i));
-        }
-
-        try
-        {
-          byte[] encoded = (new String(new char[] { c })).getBytes("UTF-8");
-          for (int j = 0, encLen = encoded.length; j < encLen; j++)
-          {
-            appendEscaped(result, encoded[j]);
-          }
-        }
-        catch (UnsupportedEncodingException e)
-        {
-          throw new WrappedException(e);
-        }
-      }
-      else if (result != null)
-      {
-        result.append(c);
-      }
-
-    }
-    return result == null ? value : result.toString();
-  }
-
-  // Returns the number of valid, consecutive, three-character escape
-  // sequences in the given string, starting at index i.
-  private static int countEscaped(String s, int i)
-  {
-    int result = 0;
-
-    for (int len = s.length(); i < len; i += 3)
-    {
-      if (isEscaped(s, i)) result++;
-    }
-    return result;
-  }
-*/
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionDescriptor.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionDescriptor.java
deleted file mode 100644
index 647fa36..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionDescriptor.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal;
-
-import java.util.List;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverExtension;
-import org.osgi.framework.Bundle;
-
-/**
- * A URI resolver extension descriptor contains all the information about
- * an extension URI resolver. The information contained allows for the
- * extension resolver to be instantiated and called at the correct times.
- */
-public class URIResolverExtensionDescriptor
-{
-	protected URIResolverExtension resolver;
-
-	protected String fileType;
-
-	protected String className;
-
-	public List projectNatureIds;
-
-	protected String resourceType;
-
-	protected int stage = URIResolverExtensionRegistry.STAGE_POSTNORMALIZATION;
-
-	protected String priority = URIResolverExtensionRegistry.PRIORITY_MEDIUM;
-
-	protected String pluginId;
-
-	protected boolean error;
-
-	/**
-	 * Constructor.
-	 * 
-	 * @param className The extension URI resolver class name.
-	 * @param pluginId The ID of the plugin that contains the extension URI resolver class.
-	 * @param projectNatureIds The project nature IDs for which the resolver should run.
-	 * @param resourceType The type of resource for which the resolver should run.
-	 * @param stage The stage of the resolver. Either prenormalization or postnormalization.
-	 * @param priority The resolver's priority. high, medium, or low.
-	 */
-	public URIResolverExtensionDescriptor(String className, String pluginId,
-			List projectNatureIds, String resourceType, int stage, String priority)
-	{
-		this.className = className;
-		this.pluginId = pluginId;
-		this.projectNatureIds = projectNatureIds;
-		this.resourceType = resourceType;
-		this.stage = stage;
-		this.priority = priority;
-	}
-
-	/**
-	 * Get the extension URI resolver.
-	 * 
-	 * @return The extension URI resolver.
-	 */
-	public URIResolverExtension getResolver()
-	{
-
-		if (resolver == null && className != null && !error)
-		{
-			try
-			{
-				// Class theClass = classLoader != null ?
-				// classLoader.loadClass(className) : Class.forName(className);
-				Bundle bundle = Platform.getBundle(pluginId);
-				Class theClass = bundle.loadClass(className);
-				resolver = (URIResolverExtension) theClass.newInstance();
-			} catch (Exception e)
-			{
-				error = true;
-				e.printStackTrace();
-			}
-		}
-		return resolver;
-	}
-
-	/**
-	 * Determines if the resolver should run in the current scenario given
-	 * the project nature ID, resource type, and stage.
-	 * 
-	 * @param projectNatureId The project nature ID to check against.
-	 * @param resourceType The resource type to check against.
-	 * @param stage The stage to check against.
-	 * @return True if the resolver should run, false otherwise.
-	 */
-	public boolean matches(String projectNatureId, String resourceType, int stage)
-	{
-		if (projectNatureIds.contains(projectNatureId))
-		{
-			return matches(this.resourceType, resourceType) && this.stage == stage;
-		}
-		return false;
-	}
-
-	/**
-	 * Determines if string a matches string b.
-	 * TODO: Why is this required instead of just using String.equals?
-	 * 
-	 * @param a String for comparison.
-	 * @param b String for comparison.
-	 * @return True if the strings match, false otherwise.
-	 */
-	private boolean matches(String a, String b)
-	{
-		return (a != null) ? a.equals(b) : a == b;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java
deleted file mode 100644
index d081bf1..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * The URI resolver extension registry contains information about
- * all of the extension URI resolvers.
- */
-public class URIResolverExtensionRegistry
-{
-	protected HashMap map = new HashMap();
-
-	public static final int STAGE_PRENORMALIZATION = 1;
-
-	public static final int STAGE_POSTNORMALIZATION = 2;
-
-	public static final int STAGE_PHYSICAL = 3;
-
-	public static final String PRIORITY_LOW = "low";
-
-	public static final String PRIORITY_MEDIUM = "medium";
-
-	public static final String PRIORITY_HIGH = "high";
-
-	protected final static String NULL_PROJECT_NATURE_ID = "";
-
-	protected static URIResolverExtensionRegistry instance;
-
-	private URIResolverExtensionRegistry()
-	{
-	}
-
-	/**
-	 * Get the one and only instance of the registry.
-	 * 
-	 * @return The one and only instance of the registry.
-	 */
-	public synchronized static URIResolverExtensionRegistry getIntance()
-	{
-		if (instance == null)
-		{
-			instance = new URIResolverExtensionRegistry();
-			new URIResolverExtensionRegistryReader(instance).readRegistry();
-		}
-		return instance;
-	}
-
-	/**
-	 * Add an extension resolver to the registry.
-	 * 
-	 * @param className The name of the extension URI resolver class.
-	 * @param pluginId The ID of the plugin that contains the extension URI resolver class.
-	 * @param projectNatureIds A list of project natures IDs for which the resolver should run.
-	 * @param resourceType The type of resoure for which an extension resource should run.
-	 * @param stage The stage to run. Either prenormalization or postnormalization.
-	 * @param priority The priority of the resolver. Valid values are high, medium, and low.
-	 */
-	public void put(String className, String pluginId, List projectNatureIds,
-			String resourceType, int stage, String priority)
-	{
-		if (projectNatureIds == null)
-			projectNatureIds = new ArrayList();
-		if (projectNatureIds.isEmpty())
-		{
-			projectNatureIds.add(NULL_PROJECT_NATURE_ID);
-		}
-		URIResolverExtensionDescriptor info = new URIResolverExtensionDescriptor(
-				className, pluginId, projectNatureIds, resourceType, stage, priority);
-
-		Iterator idsIter = projectNatureIds.iterator();
-		while (idsIter.hasNext())
-		{
-			String key = (String) idsIter.next();
-
-			HashMap priorityMap = (HashMap) map.get(key);
-			if (priorityMap == null)
-			{
-				priorityMap = new HashMap();
-				map.put(key, priorityMap);
-				priorityMap.put(PRIORITY_HIGH, new ArrayList());
-				priorityMap.put(PRIORITY_MEDIUM, new ArrayList());
-				priorityMap.put(PRIORITY_LOW, new ArrayList());
-			}
-			List list = (List) priorityMap.get(priority);
-			list.add(info);
-		}
-	}
-
-	/**
-	 * Return a list of URIResolverExtensionDescriptor objects that apply to this
-	 * project. The list is in the priority order high, medium, low.
-	 * 
-	 * @param project The project for which you are requesting resolvers.
-	 * @return A list of URIResolverExtensionDescriptor objects.
-	 */
-	public List getExtensionDescriptors(IProject project)
-	{
-		List result = new ArrayList();
-		for (Iterator i = map.keySet().iterator(); i.hasNext();)
-		{
-			String key = (String) i.next();
-			try
-			{
-				if (key == NULL_PROJECT_NATURE_ID || project == null
-						|| project.hasNature(key))
-				{
-					result.addAll((List) ((HashMap) map.get(key)).get(PRIORITY_HIGH));
-					result.addAll((List) ((HashMap) map.get(key)).get(PRIORITY_MEDIUM));
-					result.addAll((List) ((HashMap) map.get(key)).get(PRIORITY_LOW));
-				}
-			} catch (CoreException e)
-			{
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Return a list of URIResolver objects that match the stage.
-	 * TODO: This seems like an odd method to house here. It may need to be moved
-	 *       or removed if the stage attribute dissapears.
-	 * 
-	 * @param resolverInfoList A list of resolvers to prune.
-	 * @param stage The stage requested.
-	 * @return A list of URIResolver objects that match the stage.
-	 */
-	public List getMatchingURIResolvers(List resolverInfoList, int stage)
-	{
-		List result = new ArrayList();
-		for (Iterator i = resolverInfoList.iterator(); i.hasNext();)
-		{
-			URIResolverExtensionDescriptor info = (URIResolverExtensionDescriptor) i
-					.next();
-			if (info.stage == stage)
-			{
-				Object resolver = info.getResolver();
-				if (resolver != null)
-				{
-					result.add(resolver);
-				}
-			}
-		}
-		return result;
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java
deleted file mode 100644
index a173f28..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverPlugin;
-
-/**
- * This class reads the URI resolver extension point and registers extension
- * resolvers with the URI resolver registry.
- */
-public class URIResolverExtensionRegistryReader
-{
-
-	protected static final String EXTENSION_POINT_ID = "resolverExtensions";
-
-	protected static final String TAG_NAME = "resolverExtension";
-
-	protected static final String ATT_ID = "id";
-
-	protected static final String ELEM_PROJECT_NATURE_ID = "projectNature";
-
-	protected static final String ATT_RESOURCE_TYPE = "resourceType";
-
-	protected static final String ATT_CLASS = "class";
-
-	protected static final String ATT_STAGE = "stage";
-
-	protected static final String VAL_STAGE_PRE = "prenormalization";
-
-	protected static final String VAL_STAGE_POST = "postnormalization";
-
-	protected static final String VAL_STAGE_PHYSICAL = "physical";
-
-	protected static final String ATT_VALUE = "value";
-
-	protected static final String ATT_PRIORITY = "priority";
-
-	protected URIResolverExtensionRegistry registry;
-
-	public URIResolverExtensionRegistryReader(URIResolverExtensionRegistry registry)
-	{
-		this.registry = registry;
-	}
-
-	/**
-	 * read from plugin registry and parse it.
-	 */
-	public void readRegistry()
-	{
-		IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
-		IExtensionPoint point = pluginRegistry.getExtensionPoint(URIResolverPlugin
-				.getInstance().getBundle().getSymbolicName(), EXTENSION_POINT_ID);
-		if (point != null)
-		{
-			IConfigurationElement[] elements = point.getConfigurationElements();
-			for (int i = 0; i < elements.length; i++)
-			{
-				readElement(elements[i]);
-			}
-		}
-	}
-
-	/**
-	 * readElement() - parse and deal with an extension like:
-	 * 
-	 * <extension point="org.eclipse.wst.contentmodel.util_implementation">
-	 * <util_implementation class =
-	 * org.eclipse.wst.baseutil.CMUtilImplementationImpl /> </extension>
-	 */
-	protected void readElement(IConfigurationElement element)
-	{
-		if (element.getName().equals(TAG_NAME))
-		{
-			// String id = element.getAttribute(ATT_ID);
-			String className = element.getAttribute(ATT_CLASS);
-			// String projectNatureId = element.getAttribute(ATT_PROJECT_NATURE_ID);
-			String resourceType = element.getAttribute(ATT_RESOURCE_TYPE);
-			String stage = element.getAttribute(ATT_STAGE);
-			String priority = element.getAttribute(ATT_PRIORITY);
-			if (priority == null || priority.equals(""))
-			{
-				priority = URIResolverExtensionRegistry.PRIORITY_MEDIUM;
-			}
-			List projectNatureIds = new ArrayList();
-			IConfigurationElement[] ids = element.getChildren(ELEM_PROJECT_NATURE_ID);
-			int numids = ids.length;
-			for (int i = 0; i < numids; i++)
-			{
-				String tempid = ids[i].getAttribute(ATT_VALUE);
-
-				if (tempid != null)
-				{
-					projectNatureIds.add(tempid);
-				}
-			}
-			if (className != null)
-			{
-				try
-				{
-					String pluginId = element.getDeclaringExtension().getNamespaceIdentifier();
-
-					int stageint = URIResolverExtensionRegistry.STAGE_POSTNORMALIZATION;
-					if (stage.equalsIgnoreCase(VAL_STAGE_PRE))
-					{
-						stageint = URIResolverExtensionRegistry.STAGE_PRENORMALIZATION;
-					} else if (stage.equalsIgnoreCase(VAL_STAGE_PHYSICAL))
-					{
-						stageint = URIResolverExtensionRegistry.STAGE_PHYSICAL;
-					}
-					registry.put(className, pluginId, projectNatureIds, resourceType,
-							stageint, priority);
-				} catch (Exception e)
-				{
-					// TODO: Log exception as this will cause an extension resolver
-					//       from loading.
-				}
-			}
-		}
-	}
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/provisional/URIResolver.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/provisional/URIResolver.java
deleted file mode 100644
index ef0a4ca..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/provisional/URIResolver.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal.provisional;
-
-/**
- * A URIResolver is used to resolve URI references to resources.
- */
-public interface URIResolver {
-	
-	/**
-	 * @param baseLocation - the location of the resource that contains the uri 
-	 * @param publicId - an optional public identifier (i.e. namespace name), or null if none
-	 * @param systemId - an absolute or relative URI, or null if none 
-	 * @return an absolute URI represention the 'logical' location of the resource
-	 */
-	public String resolve(String baseLocation, String publicId, String systemId);
-    
-    /**
-     * @param baseLocation - the location of the resource that contains the uri 
-     * @param publicId - an optional public identifier (i.e. namespace name), or null if none
-     * @param systemId - an absolute or relative URI, or null if none 
-     * @return an absolute URI represention the 'physical' location of the resource
-     */
-    public String resolvePhysicalLocation(String baseLocation, String publicId, String logicalLocation);    
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/provisional/URIResolverExtension.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/provisional/URIResolverExtension.java
deleted file mode 100644
index 16d61e7..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/provisional/URIResolverExtension.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal.provisional;
-
-import org.eclipse.core.resources.IFile;
-
-/**
- * An extension to augment the behaviour of a URIResolver.  Extensions are project aware
- * so that they can apply specialized project specific resolving rules. 
- */
-public interface URIResolverExtension {
-	/**
-	 * @param file the in-workspace base resource, if one exists
-	 * @param baseLocation - the location of the resource that contains the uri
-	 * @param publicId - an optional public identifier (i.e. namespace name), or null if none
-	 * @param systemId - an absolute or relative URI, or null if none 
-	 * 
-	 * @return an absolute URI or null if this extension can not resolve this reference
-	 */
-	public String resolve(IFile file, String baseLocation, String publicId, String systemId);
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/provisional/URIResolverPlugin.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/provisional/URIResolverPlugin.java
deleted file mode 100644
index 2b63687..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/provisional/URIResolverPlugin.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal.provisional;
-
-import java.util.Map;
-
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.wst.common.uriresolver.internal.ExtensibleURIResolver;
-import org.eclipse.wst.common.uriresolver.internal.URIResolverExtensionRegistry;
-
-
-public class URIResolverPlugin extends Plugin {
-	protected static URIResolverPlugin instance;	
-	protected URIResolverExtensionRegistry xmlResolverExtensionRegistry;
-
-	public static URIResolverPlugin getInstance()
-	{
-		return instance;
-	}
-	
-	public URIResolverPlugin() {
-		super();
-		instance = this;
-	}	
-	
-					
-	public static URIResolver createResolver()
-	{
-		return createResolver(null);
-	}
-	
-	public static URIResolver createResolver(Map properties)
-	{
-		// TODO... utilize properties
-		return new ExtensibleURIResolver();
-	}	
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIEncoder.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIEncoder.java
deleted file mode 100644
index 6fc7c9e..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIEncoder.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal.util;
-
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.BitSet;
-
-/**
- *  This class is a modified version of java.lang.URLEncoder.
- */
-public class URIEncoder 
-{
-  static BitSet dontNeedEncoding;
-  static final int caseDiff = ('a' - 'A');
-  static String dfltEncName = null;
-  
-
-  static 
-  {            
-	  dontNeedEncoding = new BitSet(256);
-	  int i;
-	  for (i = 'a'; i <= 'z'; i++) 
-    {
-	    dontNeedEncoding.set(i);
-	  }
-	  for (i = 'A'; i <= 'Z'; i++) 
-    {
-	    dontNeedEncoding.set(i);
-	  }
-	  for (i = '0'; i <= '9'; i++) 
-    {
-	    dontNeedEncoding.set(i);
-	  }
-
-	  //dontNeedEncoding.set(' '); // cs.. removed so that space character will be replaced by %20
-	  dontNeedEncoding.set('-');
-	  dontNeedEncoding.set('_');
-	  dontNeedEncoding.set('.');
-	  dontNeedEncoding.set('*');
-	  dontNeedEncoding.set(':');   // cs.. added 
-	  dontNeedEncoding.set('/');   // cs.. added so that slashes don't get encoded as %2F
-
-  	// dfltEncName = (String)AccessController.doPrivileged(new GetPropertyAction("file.encoding"));
-  	// As discussed with Sandy, we should encode URIs with UTF8
-   dfltEncName = "UTF8";
-    //System.out.println("dfltEncName " + dfltEncName);
-   }
-
-  /**
-   * You can't call the constructor.
-   */
-  private URIEncoder() { }
-
-  /**
-   * Translates a string into <code>x-www-form-urlencoded</code>
-   * format. This method uses the platform's default encoding
-   * as the encoding scheme to obtain the bytes for unsafe characters.
-   *
-   * @param   s   <code>String</code> to be translated.
-   * @deprecated The resulting string may vary depending on the platform's
-   *             default encoding. Instead, use the encode(String,String)
-   *             method to specify the encoding.
-   * @return  the translated <code>String</code>.
-   */
-  public static String encode(String s) 
-  {
-	  String str = null;
-	  try 
-    {
-	    str = encode(s, dfltEncName);
-	  } 
-    catch (UnsupportedEncodingException e) 
-    {
-	    // The system should always have the platform default
-	  }
-	  return str;
-  }
-
-  /**
-   * Translates a string into <code>application/x-www-form-urlencoded</code>
-   * format using a specific encoding scheme. This method uses the
-   * supplied encoding scheme to obtain the bytes for unsafe
-   * characters.
-   * <p>
-   * <em><strong>Note:</strong> The <a href=
-   * "http://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars">
-   * World Wide Web Consortium Recommendation</a> states that
-   * UTF-8 should be used. Not doing so may introduce
-   * incompatibilites.</em>
-   *
-   * @param   s   <code>String</code> to be translated.
-   * @param   enc   The name of a supported 
-   *    <a href="../lang/package-summary.html#charenc">character
-   *    encoding</a>.
-   * @return  the translated <code>String</code>.
-   * @exception  UnsupportedEncodingException
-   *             If the named encoding is not supported
-   * @see java.net.URLDecoder#decode(java.lang.String, java.lang.String)
-   */
-  public static String encode(String s, String enc) throws UnsupportedEncodingException 
-  {
-	  boolean needToChange = false;
-	  boolean wroteUnencodedChar = false; 
-	  int maxBytesPerChar = 10; // rather arbitrary limit, but safe for now
-    StringBuffer out = new StringBuffer(s.length());
-	  ByteArrayOutputStream buf = new ByteArrayOutputStream(maxBytesPerChar);
-	  BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(buf, enc));
-
-	  for (int i = 0; i < s.length(); i++) 
-    {
-	    int c = s.charAt(i);
-	    //System.out.println("Examining character: " + c);
-	    if (dontNeedEncoding.get(c))
-      {
-		   //if (c == ' ')
-       //{
-		   //  c = '+';
-		   //  needToChange = true;
-		   //}
-		   //System.out.println("Storing: " + c);
-		   out.append((char)c);
-		   wroteUnencodedChar = true;
-	    }
-      else
-      {
-		    // convert to external encoding before hex conversion
-		    try
-        {
-		      if (wroteUnencodedChar) 
-          { // Fix for 4407610
-		    	  writer = new BufferedWriter(new OutputStreamWriter(buf, enc));
-			      wroteUnencodedChar = false;
-		      }
-		      writer.write(c);
-		        
-		      // If this character represents the start of a Unicode
-		      // surrogate pair, then pass in two characters. It's not
-		      // clear what should be done if a bytes reserved in the 
-		      // surrogate pairs range occurs outside of a legal
-		      // surrogate pair. For now, just treat it as if it were 
-		      // any other character.
-		      // 
-		      if (c >= 0xD800 && c <= 0xDBFF) 
-          {
-			      //  System.out.println(Integer.toHexString(c) + " is high surrogate");			      
-			      if ( (i+1) < s.length()) 
-            {
-			        int d = s.charAt(i+1);
-			        // System.out.println("\tExamining " + Integer.toHexString(d));			      
-			        if (d >= 0xDC00 && d <= 0xDFFF) 
-              {
-				        // System.out.println("\t" + Integer.toHexString(d) + " is low surrogate");				
-				        writer.write(d);
-				        i++;
-			        }
-			      }
-		      }
-		      writer.flush();
-		    } 
-        catch(IOException e) 
-        {
-		      buf.reset();
-		      continue;
-		    }
-		    byte[] ba = buf.toByteArray();
-
-		    for (int j = 0; j < ba.length; j++) 
-        {
-		      out.append('%');
-		      char ch = Character.forDigit((ba[j] >> 4) & 0xF, 16);
-		      // converting to use uppercase letter as part of
-		      // the hex value if ch is a letter.
-		      if (Character.isLetter(ch)) 
-          {
-			      ch -= caseDiff;
-		      }
-		      out.append(ch);
-		      ch = Character.forDigit(ba[j] & 0xF, 16);
-		      if (Character.isLetter(ch)) 
-          {
-			      ch -= caseDiff;
-		      }
-		      out.append(ch);
-		    }
-		    buf.reset();
-		    needToChange = true;
-	    }
-	  }
-	  return (needToChange? out.toString() : s);
-  }
-}
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIHelper.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIHelper.java
deleted file mode 100644
index 9553f3c..0000000
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/util/URIHelper.java
+++ /dev/null
@@ -1,528 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *******************************************************************************/
-package org.eclipse.wst.common.uriresolver.internal.util;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URL;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-
-
-public class URIHelper
-{                       
-  protected static final String FILE_PROTOCOL = "file:";
-  protected static final String PLATFORM_RESOURCE_PROTOCOL = "platform:/resource/";
-  protected static final String PROTOCOL_PATTERN = ":"; 
-  
-  
-  public static String ensureURIProtocolFormat(String uri) {
-	  String protocol = getProtocol(uri);
-	  if (protocol != null) {
-		  if (protocol.equals(FILE_PROTOCOL)) {
-			  return ensureFileURIProtocolFormat(uri);
-		  }
-	  }
-	 return uri;
-  }
-  
-  
-  /**
-   * This method takes a file URI in String format and ensures the protocol is followed by three slashes.
-   * For example, files "file:D:/XXX", "file:/D:/XXX" and "file://D:/XXX" are corrected to:
-   * "file:///D:/XXX".
-   * If the input is not a file URI (does not start with "file:"), the String is returned unmodified.
-   */
-  public static String ensureFileURIProtocolFormat(String uri) {
-      if (uri.startsWith(FILE_PROTOCOL) && !uri.startsWith(FILE_PROTOCOL + "///")) //$NON-NLS-1$
-      {
-      	if (uri.startsWith(FILE_PROTOCOL + "//")) {
-      		uri = FILE_PROTOCOL + "/" + uri.substring(FILE_PROTOCOL.length()); //$NON-NLS-1$
-      	} else if (uri.startsWith(FILE_PROTOCOL + "/")) {
-      		uri = FILE_PROTOCOL + "//" + uri.substring(FILE_PROTOCOL.length()); //$NON-NLS-1$
-      	} else {
-      		uri = FILE_PROTOCOL + "///" + uri.substring(FILE_PROTOCOL.length()); //$NON-NLS-1$
-      	}
-      }
-     return uri;
-  }
-  
-  public static String normalize(String uri)
-  {                           
-    if (uri != null)
-    {                      
-      String protocol = getProtocol(uri);
-      String file = uri;
-           
-      if (protocol != null)
-      {               
-        try
-        {   
-          // 
-          URL url = new URL(uri); 
-          // we use a 'Path' on the 'file' part of the url in order to normalize the '.' and '..' segments
-          IPath path = new Path(url.getFile()); 
-          URL url2 = new URL(url.getProtocol(), url.getHost(), url.getPort(), path.toString());
-          uri = url2.toString();                               
-        }                        
-        catch (Exception e)
-        {  
-        }
-      }   
-      else
-      {      
-        IPath path = new Path(file);
-        uri = path.toString();
-      }
-    }
-    return uri;
-  }
-
-
-  /**
-   * a 'null' rootLocation argument will causes uri that begins with a '/' to be treated as a workspace relative resource
-   * (i.e. the string "platform:/resource" is prepended and the uri is resolved via the Platform object)
-   */
-  public static String normalize(String uri, String resourceLocation, String rootLocation)
-  {
-    String result = null;
-
-    if (uri != null)
-    { 
-      // is the uri a url
-      if (hasProtocol(uri))
-      {                  
-        if (isPlatformResourceProtocol(uri))
-        {
-          result = resolvePlatformUrl(uri);
-        }
-        else
-        {
-          result = uri;
-        }
-      }
-   
-      // is uri absolute
-      //
-      if (result == null)
-      {
-        if (uri.indexOf(":") != -1 || uri.startsWith("/") || uri.startsWith("\\"))
-        {                   
-          result = uri;
-        }
-      }
-  
-      // if uri is relative to the resourceLocation
-      //
-      if (result == null && resourceLocation != null)
-      {          
-        if (resourceLocation.endsWith("/"))
-        {
-			    result = resourceLocation + uri;
-        }
-		    else
-        {
-			    result = resourceLocation + "/../" + uri;
-        }
-      }
-      
-      if (result == null)
-      {
-        result = uri;
-      }
-  
-      result = normalize(result);
-    }
-
-    //System.out.println("normalize(" + uri + ", " + resourceLocation + ", " + rootLocation + ") = " + result);
-    return result;
-  }
-
-
-  public static boolean isURL(String uri)
-  {
-    return uri.indexOf(":/") > 2; // test that the index is > 2 so that C:/ is not considered a protocol
-  }
-
-
-  public static String getLastSegment(String uri)
-  {
-    String result = uri;
-    int index = Math.max(uri.lastIndexOf("/"), uri.lastIndexOf("\\"));
-    if (index != -1)
-    {
-      result = uri.substring(index + 1);
-    }
-    return result;
-  }
-
-
-  public static String getFileExtension(String uri)
-  {
-    String result = null;
-    int dotIndex = getExtensionDotIndex(uri);
-               
-    if (dotIndex != -1)
-    {
-      result = uri.substring(dotIndex + 1);
-    }
-
-    return result;
-  }
-
-
-  public static String removeFileExtension(String uri)
-  {
-    String result = null;
-    int dotIndex = getExtensionDotIndex(uri);
-
-    if (dotIndex != -1)
-    {
-      result = uri.substring(0, dotIndex);
-    }
-
-    return result;
-  }   
-             
-
-  // here we use the Platform to resolve a workspace relative path to an actual url
-  //
-  protected static String resolvePlatformUrl(String urlspec)
-  {
-    String result = null;
-    try
-    {                        
-      urlspec = urlspec.replace('\\', '/'); 
-      URL url = new URL(urlspec);
-      URL resolvedURL = FileLocator.resolve(url);
-      result = resolvedURL.toString();
-    }
-    catch (Exception e)
-    {
-    }
-    return result;
-  }
-
-
-  protected static int getExtensionDotIndex(String uri)
-  {
-    int result = -1;
-    int dotIndex = uri.lastIndexOf(".");
-    int slashIndex = Math.max(uri.lastIndexOf("/"), uri.lastIndexOf("\\"));
-
-    if (dotIndex != -1 && dotIndex > slashIndex)
-    {
-      result = dotIndex;
-    }
-
-    return result;
-  }
-  
-
-  public static boolean isPlatformResourceProtocol(String uri)
-  {                                                     
-    return uri != null && uri.startsWith(PLATFORM_RESOURCE_PROTOCOL);
-  }                                                   
-
-  public static String removePlatformResourceProtocol(String uri)
-  {  
-    if (uri != null && uri.startsWith(PLATFORM_RESOURCE_PROTOCOL))
-    {
-      uri = uri.substring(PLATFORM_RESOURCE_PROTOCOL.length());
-    }                                                          
-    return uri;
-  }            
-
-
-  public static String prependPlatformResourceProtocol(String uri)
-  {  
-    if (uri != null && !uri.startsWith(PLATFORM_RESOURCE_PROTOCOL))
-    {
-      uri = PLATFORM_RESOURCE_PROTOCOL + uri;
-    }                                                          
-    return uri;
-  } 
-  
-
-  public static String prependFileProtocol(String uri)
-  {  
-    if (uri != null && !uri.startsWith(FILE_PROTOCOL))
-    {
-      uri = FILE_PROTOCOL + uri;
-    }                                                          
-    return uri;
-  } 
-            
-  public static boolean hasProtocol(String uri)
-  {
-    boolean result = false;     
-    if (uri != null)
-    {
-      int index = uri.indexOf(PROTOCOL_PATTERN);
-      if (index != -1 && index > 2) // assume protocol with be length 3 so that the'C' in 'C:/' is not interpreted as a protocol
-      {
-        result = true;
-      }
-    }
-    return result;
-  }     
-                      
-
-  public static boolean isAbsolute(String uri)
-  {
-    boolean result = false;     
-    if (uri != null)
-    {
-      int index = uri.indexOf(PROTOCOL_PATTERN);
-      if (index != -1 || uri.startsWith("/"))
-      {
-        result = true;
-      }
-    }
-    return result;
-  }
-
-
-  public static String addImpliedFileProtocol(String uri)
-  {  
-    if (!hasProtocol(uri))
-    {                           
-      String prefix = FILE_PROTOCOL;
-      prefix += uri.startsWith("/") ? "//" : "///";
-      uri = prefix + uri;
-    }
-    return uri;
-  }
-             
-  // todo... need to revisit this before we publicize it
-  // 
-  protected static String getProtocol(String uri)
-  {  
-    String result = null;     
-    if (uri != null)
-    {
-      int index = uri.indexOf(PROTOCOL_PATTERN);
-      if (index > 2) // assume protocol with be length 3 so that the'C' in 'C:/' is not interpreted as a protocol
-      {
-        result = uri.substring(0, index + PROTOCOL_PATTERN.length());
-      }
-    }
-    return result;
-  } 
- 
-
-  public static String removeProtocol(String uri)
-  {
-    String result = uri;     
-    if (uri != null)
-    {
-      int index = uri.indexOf(PROTOCOL_PATTERN);
-      if (index > 2)
-      {
-        result = result.substring(index + PROTOCOL_PATTERN.length());                 
-      }
-    }
-    return result;
-  } 
-
-
-  protected static boolean isProtocolFileOrNull(String uri)
-  {                                    
-    String protocol = getProtocol(uri);   
-    return protocol == null || protocol.equals(FILE_PROTOCOL);
-  }  
-
-                                           
-  protected static boolean isMatchingProtocol(String uri1, String uri2)
-  { 
-    boolean result = false;  
-
-    String protocol1 = getProtocol(uri1);
-    String protocol2 = getProtocol(uri2);
-
-    if (isProtocolFileOrNull(protocol1) && isProtocolFileOrNull(protocol2))
-    {                                                                      
-      result = true;
-    } 
-    else
-    {
-      result = protocol1 != null && protocol2 != null && protocol1.equals(protocol2);
-    }             
-
-    return result;
-  }
-
-  /**
-   * warning... this method not fully tested yet
-   */
-  public static String getRelativeURI(String uri, String resourceLocation)
-  {                                      
-    String result = uri;  
-    if (isMatchingProtocol(uri, resourceLocation)) 
-    {
-      result = getRelativeURI(new Path(removeProtocol(uri)),
-                              new Path(removeProtocol(resourceLocation)));
-    }            
-
-    return result;
-  }
-
-  /**
-   * warning... this method not fully tested yet
-   */
-  public static String getRelativeURI(IPath uri, IPath resourceLocation)
-  {            
-    String result = null;
-    int nMatchingSegments = 0;       
-    resourceLocation = resourceLocation.removeLastSegments(1);
-    while (true)
-    {                   
-      String a = uri.segment(nMatchingSegments); 
-      String b = resourceLocation.segment(nMatchingSegments); 
-      if (a != null && b != null && a.equals(b))
-      {
-        nMatchingSegments++;
-      }
-      else
-      {
-        break;
-      }
-    }                 
-
-    if (nMatchingSegments == 0)
-    {
-      result = uri.toOSString();
-    }
-    else
-    {    
-      result = "";   
-      boolean isFirst = true;
-      String[] segments = resourceLocation.segments();
-      for (int i = nMatchingSegments; i < segments.length; i++)
-      {  
-        result += isFirst ? ".." : "/..";     
-        if (isFirst)
-        {
-          isFirst = false;
-        }        
-      }
-      // 
-      segments = uri.segments();
-      for (int i = nMatchingSegments; i < segments.length; i++)
-      {                      
-        result += isFirst ? segments[i] : ("/" + segments[i]);     
-        if (isFirst)
-        {
-          isFirst = false;
-        } 
-      }
-    }   
-    return result;
-  }
-
-
-  public static String getPlatformURI(IResource resource)
-  {                            
-    String fullPath = resource.getFullPath().toString();
-    if (fullPath.startsWith("/"))
-    {
-      fullPath = fullPath.substring(1);
-    }
-    return PLATFORM_RESOURCE_PROTOCOL + fullPath;
-  }
-  
-
-  /**
-   * This methods is used as a quick test to see if a uri can be resolved to an existing resource.   
-   */
-  public static boolean isReadableURI(String uri, boolean testRemoteURI)
-  {  
-    boolean result = true;  
-    if (uri != null)
-    {   
-      try
-      {                               
-        uri = normalize(uri, null, null);
-        if (isProtocolFileOrNull(uri))
-        {
-          uri = removeProtocol(uri);                            
-          File file = new File(org.eclipse.wst.common.uriresolver.internal.URI.decode(uri));
-          result = file.exists() && file.isFile();
-        }
-        else if (isPlatformResourceProtocol(uri))
-        {
-          // Note - If we are here, uri has been failed to resolve
-          // relative to the Platform. See normalize() to find why.
-          result = false;
-        }
-        else if (testRemoteURI)
-        {
-          URL url = new URL(uri);
-          InputStream is = url.openConnection().getInputStream();
-          is.close();
-          // the uri is readable if we reach here.
-          result = true;
-        }
-      }
-      catch (Exception e)
-      {
-        result = false;
-      }
-    }
-    else // uri is null
-      result = false;
-
-    return result;
-  }  
-
-  /**
-   * return true if this is a valid uri
-   */
-  public static boolean isValidURI(String uri)
-  {                       
-    boolean result = false;
-    try                                                              
-    {
-      new URI(uri);
-      result = true;
-    }
-    catch (Exception e)
-    {
-    }               
-    return result;
-  }
-
-  /**
-   * returns an acceptable URI for a file path
-   */
-  public static String getURIForFilePath(String filePath)
-  {
-    String result = addImpliedFileProtocol(filePath);
-    if (!isValidURI(result))
-    {
-    	try
-    	{
-        result = URIEncoder.encode(result, "UTF8");
-    	}
-    	catch(UnsupportedEncodingException e)
-    	{
-    		// Do nothing as long as UTF8 is used. This is supported.
-    	}
-    }
-    return result;
-  }
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/.classpath b/plugins/org.eclipse.wst.internet.cache/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/plugins/org.eclipse.wst.internet.cache/.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/plugins/org.eclipse.wst.internet.cache/.cvsignore b/plugins/org.eclipse.wst.internet.cache/.cvsignore
deleted file mode 100644
index 0515302..0000000
--- a/plugins/org.eclipse.wst.internet.cache/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-bin
-temp.folder
-build.xml
-cache.jar
-@dot
-src.zip
-javaCompiler...args
diff --git a/plugins/org.eclipse.wst.internet.cache/.project b/plugins/org.eclipse.wst.internet.cache/.project
deleted file mode 100644
index d7188f0..0000000
--- a/plugins/org.eclipse.wst.internet.cache/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.internet.cache</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/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 53d1a0e..0000000
--- a/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,57 +0,0 @@
-#Wed Mar 15 17:27:33 EST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLocal=error
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 82024b2..0000000
--- a/plugins/org.eclipse.wst.internet.cache/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Wed Mar 15 17:27:33 EST 2006
-eclipse.preferences.version=1
-internal.default.compliance=default
diff --git a/plugins/org.eclipse.wst.internet.cache/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.cache/META-INF/MANIFEST.MF
deleted file mode 100644
index 35f197a..0000000
--- a/plugins/org.eclipse.wst.internet.cache/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,15 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %_PLUGIN_NAME
-Bundle-SymbolicName: org.eclipse.wst.internet.cache; singleton:=true
-Bundle-Version: 1.0.200.qualifier
-Bundle-Activator: org.eclipse.wst.internet.cache.internal.CachePlugin
-Bundle-Vendor: %_PLUGIN_PROVIDER
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.uriresolver;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)"
-Eclipse-LazyStart: true
-Export-Package: org.eclipse.wst.internet.cache.internal;x-friends:="org.eclipse.wst.internet.cache.tests",
- org.eclipse.wst.internet.cache.internal.preferences;x-internal:=true
diff --git a/plugins/org.eclipse.wst.internet.cache/about.html b/plugins/org.eclipse.wst.internet.cache/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.wst.internet.cache/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-
-<BODY lang="EN-US">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</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/plugins/org.eclipse.wst.internet.cache/build.properties b/plugins/org.eclipse.wst.internet.cache/build.properties
deleted file mode 100644
index dbd4f60..0000000
--- a/plugins/org.eclipse.wst.internet.cache/build.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-source.. = src/
-bin.includes = plugin.xml,\
-               META-INF/,\
-               .,\
-               plugin.properties,\
-               about.html
-src.includes = exsd/,\
-               .,\
-               build.properties
-output.. = bin/
diff --git a/plugins/org.eclipse.wst.internet.cache/exsd/cacheresource.exsd b/plugins/org.eclipse.wst.internet.cache/exsd/cacheresource.exsd
deleted file mode 100644
index bacb272..0000000
--- a/plugins/org.eclipse.wst.internet.cache/exsd/cacheresource.exsd
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.internet.cache">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.wst.internet.cache" id="cacheresource" name="Cache Resource"/>
-      </appInfo>
-      <documentation>
-         The cache resource extension point allows clients to specify resources that may be cached that require licenses to be accepted prior to caching.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="cacheresource" minOccurs="1" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  a fully qualified identifier of the target extension point
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  an optional identifier of the extension instance
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  an optional name of the extension instance
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="cacheresource">
-      <complexType>
-         <attribute name="url" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The URL of the resource to cache.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="license" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The license of the resource to cache. The license is specified as a URL that resolves to a file that contains the license.
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         1.0
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         The following is an example of a cache resource contribution:
-&lt;pre&gt;
-   &lt;extension
-         point=&quot;org.eclipse.wst.internet.cache.cacheresource&quot;&gt;
-      &lt;cacheresource
-            license=&quot;http://www.eclipse.org/license.html&quot;
-            url=&quot;http://www.eclipse.org&quot;/&gt;
-   &lt;/extension&gt;
-&lt;/pre&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which accompanies 
-this distribution, and is available at &lt;a
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/plugins/org.eclipse.wst.internet.cache/plugin.properties b/plugins/org.eclipse.wst.internet.cache/plugin.properties
deleted file mode 100644
index 5df72b9..0000000
--- a/plugins/org.eclipse.wst.internet.cache/plugin.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 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
-###############################################################################
-
-_PLUGIN_PROVIDER                       = Eclipse.org
-_PLUGIN_NAME                           = Cache URI Resolver Plug-in
-
-cacheResource                          = Cache Resource
-_UI_CACHE_PREFERENCE_PAGE_TITLE        = Cache
-
diff --git a/plugins/org.eclipse.wst.internet.cache/plugin.xml b/plugins/org.eclipse.wst.internet.cache/plugin.xml
deleted file mode 100644
index 09c05eb..0000000
--- a/plugins/org.eclipse.wst.internet.cache/plugin.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-   <extension-point name="%cacheResource" id="cacheresource" schema="exsd/cacheresource.exsd"/>
-
-   <extension
-         point="org.eclipse.ui.preferencePages">
-      <page
-            name="%_UI_CACHE_PREFERENCE_PAGE_TITLE"
-            class="org.eclipse.wst.internet.cache.internal.preferences.CachePreferencePage"
-            id="org.eclipse.wst.internet.cache.internal.preferences.CachePreferencePage"
-            category = "org.eclipse.internet">
-      </page>
-   </extension>
-   <extension
-         point="org.eclipse.core.runtime.preferences">
-      <initializer
-            class="org.eclipse.wst.internet.cache.internal.preferences.PreferenceInitializer">
-      </initializer>
-   </extension>
-   
-   <extension point="org.eclipse.wst.common.uriresolver.resolverExtensions">
-      <resolverExtension
-            stage="physical"
-            priority="low"
-            class="org.eclipse.wst.internet.cache.internal.CacheURIResolverExtension">
-      </resolverExtension>
-   </extension>
-</plugin>
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/Cache.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/Cache.java
deleted file mode 100644
index 20cd05f..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/Cache.java
+++ /dev/null
@@ -1,523 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2006 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.wst.internet.cache.internal;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Random;
-import java.util.Set;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Platform;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * The cache holds references to remote resources. The cache can store resources,
- * retrieve resources, and delete resources.
- *
- */
-public class Cache 
-{
-  /**
-   * String instances.
-   */
-  private static final String URI = "uri";
-  private static final String LOCATION ="location";
-  private static final String ENTRY = "entry";
-  private static final String CACHE = "cache";
-  private static final String LAST_MODIFIED = "lastModified";
-  private static final String EXPIRATION_TIME = "expirationTime";
-  private static final String FILE_PROTOCOL = "file:///";
-  private static final String CACHE_FILE = "cache.xml";
-  private static final String CACHE_EXTENSION = ".cache";
-  private static final String CACHE_PREFIX = "wtpcache";
-  private static final String CACHE_SUFFIX = null;
-  /**
-   * The default timeout for a cache entry is 1 day.
-   */
-  private static final long TIMEOUT = 86400000;
-	
-  /**
-   * The one and only instance of the cache.
-   */
-  private static Cache cacheInstance = null;
-  
-  /**
-   * The cache is stored in a hashtable.
-   */
-  private Hashtable cache;
-  
-  /**
-   * A set of uncached resources. The cache was not able to cache resources
-   * in this list. This list allows quickly skipping over these resources in
-   * future requests. 
-   */
-  private Set uncached;
-  
-  /**
-   * The location of the cache
-   */
-  private File cacheLocation = null;
-  
-  /**
-   * Private constructor.
-   */
-  protected Cache(IPath cacheLocation)
-  {
-	  this.cacheLocation = cacheLocation.toFile();//Platform.getPluginStateLocation(CachePlugin.getDefault()).toFile();
-    cache = new Hashtable();
-    uncached = new HashSet();
-  }
-  
-  /**
-   * Get the one and only instance of the cache.
-   * 
-   * @return The one and only instance of the cache.
-   */
-  public static Cache getInstance()
-  {
-//	  if(cacheInstance == null)
-//	  {
-//		  cacheInstance = new Cache(cacheLocation);
-//		  cacheInstance.open(cacheLocation);
-//	  }
-	  return cacheInstance;
-  }
-  
-  /**
-   * Return the local resource for the specified uri. If there is no resource
-   * the cache will attempt to download and cache the resource before returning.
-   * If a remote resource cannot be cached this method will return null.
-   * 
-   * @param uri The URI for which a resource is requested.
-   * @return The local resource for the specified URI or null if a remote resource cannot be cached.
-   */
-  public String getResource(String uri)
-  {
-	  if(uri == null) return null;
-	  CacheEntry result = (CacheEntry)cache.get(uri);
-	  
-	  // If no result is in the cache and the URI is of an allowed type
-	  // retrieve it and store it in the cache.
-	  if(result == null)
-	  {
-      
-        if(!uncached.contains(uri))
-	    {
-          result = cacheResource(uri); 
-        }
-	  }
-	  // Retreive a fresh copy of the result if it has timed out.
-	  else if(result.hasExpired())
-	  {
-		result = refreshCacheEntry(result);
-	  }
-	  if(result == null || result.getLocalFile() == null)
-	  {
-		return null;
-	  }
-	  return FILE_PROTOCOL + cacheLocation.toString() + "/" + result.getLocalFile();
-  }
-  
-  /**
-   * Get the list of uncached resources.
-   * 
-   * @return The list of uncached resources.
-   */
-  protected String[] getUncachedURIs()
-  {
-    return (String[])uncached.toArray(new String[uncached.size()]);
-  }
-  
-  /**
-   * Clear the list of uncached resources.
-   */
-  protected void clearUncachedURIs()
-  {
-    uncached.clear();
-  }
-  
-  /**
-   * Add an uncached resource to the list and start the 
-   * uncached job if not already started.
-   */
-  protected void addUncachedURI(String uri)
-  {
-	CacheJob.startJob();
-    uncached.add(uri);
-  }
-  
-  /**
-   * Cache the specified resource. This method creates a local version of the
-   * remote resource and adds the resource reference to the cache. If the resource
-   * cannot be accessed it is not added and null is returned.
-   * 
-   * @param uri The remote URI to cache.
-   * @return A new CacheEntry representing the cached resource or null if the remote
-   *         resource could not be retrieved.
-   */
-  protected CacheEntry cacheResource(String uri)
-  {
-	  CacheEntry cacheEntry = null;
-	  URLConnection conn = null;
-	  InputStream is = null;
-	  OutputStream os = null;
-	  try
-	  {
-		  URL url = new URL(uri);
-		  conn = url.openConnection();
-		  conn.connect();
-		  // Determine if this resource can be cached.
-		  if(conn.getUseCaches())
-		  {
-		    is = conn.getInputStream();//url.openStream();
-		  
-		    Random rand = new Random();
-			String fileName = rand.nextInt() + CACHE_EXTENSION;
-		    File file = new File(cacheLocation, fileName);
-		    // If the file already exists we need to change the file name.
-		    while(!file.createNewFile())
-		    {
-			  fileName = rand.nextInt() + CACHE_EXTENSION;
-			  file = new File(cacheLocation,fileName);
-		    }
-		    os = new FileOutputStream(file);
-		    byte[] bytes = new byte[1024];
-		    int bytelength;
-		    while((bytelength = is.read(bytes)) != -1)
-		    {
-			  os.write(bytes, 0, bytelength);
-		    }
-			long lastModified = conn.getLastModified();
-		    long expiration = conn.getExpiration();
-			if(expiration == 0)
-			{
-			  expiration = System.currentTimeMillis() + TIMEOUT;
-			}
-		    cacheEntry = new CacheEntry(uri, fileName, lastModified, expiration);
-		    cache.put(uri,cacheEntry);
-		  }
-
-	  }
-	  catch(Throwable t)
-	  {
-		  // Put the entry in the uncached list so the resolution work will not be performed again.
-      // TODO: Add in a timeout for the non-located uris.
-      addUncachedURI(uri);
-	  }
-	  finally
-	  {
-		  if(is != null)
-		  {
-			  try
-			  {
-			    is.close();
-			  }
-			  catch(IOException e)
-			  {
-			    // Do nothing if the stream cannot be closed.
-			  }
-		  }
-		  if(os != null)
-		  {
-			  try
-			  {
-			    os.close();
-			  }
-			  catch(IOException e)
-			  {
-				// Do nothing if the stream cannot be closed. 
-			  }
-		  }
-	  }
-	  return cacheEntry;
-  }
-  
-  /**
-   * Refresh the cache entry if necessary. The cache entry will be refreshed
-   * if the remote resource is accessible and the last modified time of the
-   * remote resource is greater than the last modified time of the cached
-   * resource.
-   * 
-   * @param cacheEntry The cache entry to refresh.
-   * @return The refreshed cache entry.
-   */
-  protected CacheEntry refreshCacheEntry(CacheEntry cacheEntry)
-  {
-	  URLConnection conn = null;
-	  InputStream is = null;
-	  OutputStream os = null;
-	  try
-	  {
-		  URL url = new URL(cacheEntry.getURI());
-		  conn = url.openConnection();
-		  conn.connect();
-		  
-		  long lastModified = conn.getLastModified();
-	      if(lastModified > cacheEntry.getLastModified())
-		  {
-			long expiration = conn.getExpiration();
-		    if(expiration == 0)
-			{
-			  expiration = System.currentTimeMillis() + TIMEOUT;
-			}
-			
-		    is = conn.getInputStream();
-			
-			String localFile = cacheEntry.getLocalFile();
-  
-		    File tempFile = File.createTempFile(CACHE_PREFIX, CACHE_SUFFIX);
-			tempFile.deleteOnExit();
-
-		    os = new FileOutputStream(tempFile);
-		    byte[] bytes = new byte[1024];
-		    int bytelength;
-		    while((bytelength = is.read(bytes)) != -1)
-		    {
-			  os.write(bytes, 0, bytelength);
-		    }
-			is.close();
-			os.close();
-			deleteFile(cacheEntry.getURI());
-			File f = new File(cacheLocation, localFile);
-			tempFile.renameTo(f);
-			cacheEntry.setExpiration(expiration);
-			cacheEntry.setLastModified(lastModified);
-		  }
-		  // The cache entry hasn't changed. Just update the expiration time.
-	      else
-		  {
-			long expiration = conn.getExpiration();
-			if(expiration == 0)
-			{
-			  expiration = System.currentTimeMillis() + TIMEOUT;
-			}
-			cacheEntry.setExpiration(expiration);
-		  }
-
-	  }
-	  catch(Exception e)
-	  {
-      // Do nothing.
-	  }
-	  finally
-	  {
-		  if(is != null)
-		  {
-			  try
-			  {
-			    is.close();
-			  }
-			  catch(IOException e)
-			  {
-			    // Do nothing if the stream cannot be closed.
-			  }
-		  }
-		  if(os != null)
-		  {
-			  try
-			  {
-			    os.close();
-			  }
-			  catch(IOException e)
-			  {
-				// Do nothing if the stream cannot be closed. 
-			  }
-		  }
-	  }
-	  return cacheEntry;
-  }
-  
-  /**
-   * Get an array of the cached URIs.
-   * 
-   * @return An array of the cached URIs.
-   */
-  public String[] getCachedURIs()
-  {
-	Set keyset = cache.keySet();
-	return (String[])keyset.toArray(new String[keyset.size()]);
-  }
-  
-  /**
-   * Close the cache. Closing the cache involves serializing the data to an XML file
-   * in the plugin state location.
-   */
-  protected void close()
-  {
-	  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-      try {
-        DocumentBuilder builder = factory.newDocumentBuilder();
-        Document cachedoc = builder.newDocument();
-		Element rootelem = cachedoc.createElement(CACHE);
-		cachedoc.appendChild(rootelem);
-		
-	  Enumeration uris = cache.keys();
-	  while(uris.hasMoreElements())
-	  {
-		  String key = (String)uris.nextElement();
-		  CacheEntry cacheEntry = (CacheEntry)cache.get(key);
-		  if(cacheEntry != null)
-		  {
-			  Element entry = cachedoc.createElement(ENTRY);
-			  entry.setAttribute(URI, key);
-			  entry.setAttribute(LOCATION, cacheEntry.getLocalFile());
-			  entry.setAttribute(EXPIRATION_TIME, String.valueOf(cacheEntry.getExpirationTime()));
-			  entry.setAttribute(LAST_MODIFIED, String.valueOf(cacheEntry.getLastModified()));
-			  rootelem.appendChild(entry);
-		  }
-	  }
-	  
-	  // Write the cache entry.
-	  TransformerFactory tFactory  = TransformerFactory.newInstance();
-      Transformer transformer = tFactory.newTransformer();
-      Source input = new DOMSource(cachedoc);
-	  IPath stateLocation = Platform.getStateLocation(CachePlugin.getDefault().getBundle());
-      Result output = new StreamResult(stateLocation.toString() + "/" + CACHE_FILE);
-      transformer.transform(input, output);
-
-      }catch(Exception e)
-	  {
-		  System.out.println("Unable to store internet cache.");
-	  }
-	  cacheInstance = null;
-  }
-  
-  /**
-   * Open the cache. Opening the cache involves parsing the cache XML file in
-   * the plugin state location if it can be read.
-   */
-  protected static void open(IPath cacheLocation)
-  {
-    cacheInstance = new Cache(cacheLocation);
-	  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-      try {
-		  
-		IPath stateLocation = cacheLocation;
-        DocumentBuilder builder = factory.newDocumentBuilder();
-        Document cachedoc = builder.parse(stateLocation.toString() + "/" + CACHE_FILE);
-		Element rootelem = cachedoc.getDocumentElement();
-		NodeList entries = rootelem.getChildNodes();
-		int numEntries = entries.getLength();
-		for(int i = 0; i < numEntries; i++)
-		{
-			Node entry = entries.item(i);
-			if(entry instanceof Element)
-			{
-				Element e = (Element)entry;
-				if(e.getNodeName().equals(ENTRY))
-				{
-					String uri = e.getAttribute(URI);
-					String location = e.getAttribute(LOCATION);
-					String lm = e.getAttribute(LAST_MODIFIED);
-					String et = e.getAttribute(EXPIRATION_TIME);
-					long lastModified = -1;
-					long expirationTime = -1;
-					try
-					{
-						lastModified = Long.parseLong(lm);
-					}
-					catch(NumberFormatException nfe)
-					{
-					}
-					try
-					{
-						expirationTime = Long.parseLong(et);
-					}
-					catch(NumberFormatException nfe)
-					{
-					}
-					if(uri != null && location != null)
-					{
-					  cacheInstance.cache.put(uri, new CacheEntry(uri, location, lastModified, expirationTime));
-					}
-				}
-			}
-		}
-      }
-	  catch(FileNotFoundException e)
-	  {
-		// If the file doesn't exist in the correct location there is nothing to load. Do nothing.
-	  }
-	  catch(Exception e)
-	  {
-		  System.out.println("Unable to load cache.");
-	  }
-  }
-  
-  /**
-   * Clear all of the entries from the cache. This method also deletes the cache files.
-   */
-  public void clear()
-  {
-	Enumeration keys = cache.keys();
-	while(keys.hasMoreElements())
-	{
-	  String key = (String)keys.nextElement();
-	  
-	  deleteFile(key);
-	}
-	cache.clear();
-  }
-  
-  /**
-   * Delete the cache entry specified by the given URI.
-   * @param uri The URI entry to remove from the catalog.
-   */
-  public void deleteEntry(String uri)
-  {
-	  if(uri == null) return;
-	  
-	  deleteFile(uri);
-	  cache.remove(uri);
-  }
-  
-  /**
-   * Delete the file specified by the URI.
-   * 
-   * @param uri The URI of the file to delete.
-   */
-  protected void deleteFile(String uri)
-  {
-	  CacheEntry cacheEntry = (CacheEntry)cache.get(uri);
-	  if(cacheEntry != null)
-	  {
-		String location = cacheLocation.toString() + "/" + cacheEntry.getLocalFile();
-	    File file = new File(location);
-	    if(!file.delete())
-	    {
-	      System.out.println("Unable to delete file " + location + " from cache.");
-	    } 
-	  }
-  }
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheEntry.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheEntry.java
deleted file mode 100644
index 817ec06..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheEntry.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.internet.cache.internal;
-
-/**
- * A cache entry contains a URI, a local file, and a timeout.
- */
-public class CacheEntry 
-{
-  private String uri;
-  private String localFile;
-  private long lastModified;
-  private long expirationTime;
-  
-  /**
-   * Create a new cache entry.
-   * 
-   * @param uri The remote URI of the cache entry.
-   * @param localFile The local file that contains the cached entry.
-   * @param lastModifie The time this resource was last modified.
-   * @param expirationTime The time in miliseconds that this cache entry will
-   *                       expire.
-   */
-  public CacheEntry(String uri, String localFile, long lastModified, long expirationTime)
-  {
-	this.uri = uri;
-	this.localFile = localFile;
-	this.lastModified = lastModified;
-	this.expirationTime = expirationTime;
-  }
-  
-  /**
-   * The cache entry is expired if its expiration time is less then the
-   * current system time and not equal to -1.
-   * 
-   * @return True if this cached entry has expired, false otherwise.
-   */
-  public boolean hasExpired()
-  {
-	 if(expirationTime != -1 && System.currentTimeMillis() > expirationTime)
-	 {
-	   return true;
-	 }
-	 return false;
-  }
-  
-  /**
-   * Set the time in miliseconds that this cache entry will expire.
-   * 
-   * @param timeout The time in miliseconds that this cache entry will expire.
-   *                -1 indicates that this entry will not expire.
-   */
-  public void setExpiration(long expirationTime)
-  {
-	this.expirationTime = expirationTime;
-  }
-  
-  /**
-   * Get the time at which this cache entry will expire.
-   * 
-   * @return The time at which this cache entry will expire.
-   */
-  public long getExpirationTime()
-  {
-	return expirationTime;
-  }
-  
-  /**
-   * Get the remote URI for this cache entry.
-   * 
-   * @return The remote URI for this cache entry.
-   */
-  public String getURI()
-  {
-	return uri;
-  }
-  
-  /**
-   * Get the local file for this cache entry.
-   * 
-   * @return The local file for this cache entry.
-   */
-  public String getLocalFile()
-  {
-	return localFile;
-  }
-  
-  /**
-   * Get the last time this cache entry was modified.
-   * 
-   * @return The last time this cache entry was modified.
-   */
-  public long getLastModified()
-  {
-	return lastModified;
-  }
-  
-  /**
-   * Set the last time this cache entry was modified.
-   */
-  public void setLastModified(long lastModified)
-  {
-	this.lastModified = lastModified;
-  }
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheJob.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheJob.java
deleted file mode 100644
index 34c3943..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheJob.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2006 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.wst.internet.cache.internal;
-
-import java.text.MessageFormat;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-
-/**
- * A cache job runs once an hour to cache any prespecified resources which
- * should be cached and any resources for which an attempt was previously 
- * made to cache them but they were unable to be cached.
- */
-public class CacheJob extends Job
-{
-  private static final long SCHEDULE_TIME = 3600000;
-
-  private static CacheJob job = null;
-  /**
-   * Constructor.
-   */
-  public CacheJob()
-  {
-    super(CacheMessages._UI_CACHE_MONITOR_NAME);
-  }
-
-  /**
-   * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
-   */
-  protected IStatus run(IProgressMonitor monitor)
-  {
-	boolean allSuccessful = true;
-    Cache cache = Cache.getInstance();
-    String[] uncachedURIs = cache.getUncachedURIs();
-    int numUncachedURIs = uncachedURIs.length;
-
-    cache.clearUncachedURIs();
-    monitor.beginTask(CacheMessages._UI_CACHE_MONITOR_NAME, numUncachedURIs);
-    try
-    {
-      for(int i = 0; i < numUncachedURIs; i++)
-      {
-        if (monitor.isCanceled())
-        {
-          for(int j = i; j < numUncachedURIs; j++)
-          {
-            cache.addUncachedURI(uncachedURIs[j]);
-          }
-          return Status.CANCEL_STATUS;
-        }
-        String uri = uncachedURIs[i];
-        monitor.setTaskName(MessageFormat.format(CacheMessages._UI_CACHE_MONITOR_CACHING, new Object[]{uri}));
-       
-        String cachedURI = cache.getResource(uri);
-        if(cachedURI == null)
-    	{
-    	  allSuccessful = false;
-    	}
-        monitor.worked(1);
-      }
-      monitor.done();
-      return Status.OK_STATUS;
-    } 
-    finally
-    {
-      // If all the uncached URIs could not be cached 
-      // schedule the next time the job should run.
-      if(!allSuccessful)
-      {
-    	  startJob(SCHEDULE_TIME); 
-      }
-    }
-  }
-  
-  /**
-   * Start the cache job. The cache job caches resources that were not able to be previously
-   * downloaded. Only one job is run at a time.
-   */
-  protected static void startJob() 
-  {
-	if(job == null)
-	{
-	  startJob(0);
-	}
-  }
-  
-  /**
-   * Start a new cache job with the specified delay.
-   * 
-   * @param delay
-   * 		The start delay for the cache job.
-   */
-  private static void startJob(long delay)
-  {
-	job = new CacheJob();
-	job.setPriority(CacheJob.DECORATE);
-	job.schedule(delay); // start as soon as possible
-  }
-
-  /**
-   * Stop the current cache job. The cache job caches resources that were not able to be previously
-   * downloaded.
-   */
-  protected static void stopJob() 
-  {
-	if (job != null) 
-	{
-	  job.cancel();
-	}
-	job = null;
-  }
-
-}
-
-
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheMessages.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheMessages.java
deleted file mode 100644
index f8fee2f..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheMessages.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *   IBM - Initial API and implementation
- */
-package org.eclipse.wst.internet.cache.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Strings used by the cache.
- */
-public class CacheMessages extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.wst.internet.cache.internal.CachePluginResources";//$NON-NLS-1$
-
-	public static String _UI_CONFIRM_CLEAR_CACHE_DIALOG_TITLE;
-	public static String _UI_CONFIRM_CLEAR_CACHE_DIALOG_MESSAGE;
-	public static String _UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_TITLE;
-	public static String _UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_MESSAGE;
-	public static String _UI_BUTTON_CLEAR_CACHE;
-	public static String _UI_BUTTON_DELETE_ENTRY;
-	public static String _UI_PREF_CACHE_ENTRIES_TITLE;
-	public static String _UI_PREF_CACHE_CACHE_OPTION;
-	public static String _UI_PREF_CACHE_ABOUT;
-	public static String _UI_PREF_PROMPT_FOR_DISAGREED_LICENSES;
-	public static String _UI_CACHE_MONITOR_NAME;
-	public static String _UI_CACHE_MONITOR_CACHING;
-
-	// Cache license dialog
-	public static String _UI_CACHE_DIALOG_LICENSE_STATEMENT1;
-	public static String _UI_CACHE_DIALOG_LICENSE_STATEMENT2;
-	public static String _UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_INTERNAL;
-	public static String _UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_BROWSER;
-	public static String _UI_CACHE_DIALOG_AGREE_BUTTON;
-	public static String _UI_CACHE_DIALOG_DISAGREE_BUTTON;
-	public static String _UI_CACHE_DIALOG_TITLE;
-	public static String _UI_LOADING_LICENSE;
-
-	// Cache logging messages
-	public static String _LOG_INFO_WTP_NO_USER_INTERACTION;
-
-	// WTP test no user interaction system property
-	public static String WTP_NO_USER_INTERACTION_SYSTEM_PROP;   
-
-	static {
-		// load message values from bundle file
-		NLS.initializeMessages(BUNDLE_NAME, CacheMessages.class);
-	}
-
-	private CacheMessages() {
-		// cannot create new instance
-	}
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePlugin.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePlugin.java
deleted file mode 100644
index 704f0e0..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePlugin.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2006 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.wst.internet.cache.internal;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Preferences;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.eclipse.wst.internet.cache.internal.preferences.PreferenceConstants;
-import org.osgi.framework.BundleContext;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class CachePlugin extends AbstractUIPlugin 
-{
-  /**
-   * The ID of this plugin.
-   */
-  public static final String PLUGIN_ID = "org.eclipse.wst.internet.cache";
-
-  /**
-   * The shared instance.
-   */
-  private static CachePlugin plugin;
-
-  /**
-   * The constructor.
-   */
-  public CachePlugin() 
-  {
-	super();
-	plugin = this;
-  }
-
-  /**
-   * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-   */
-  public void start(BundleContext context) throws Exception 
-  {
-	super.start(context);
-	ToCacheRegistryReader.getInstance().readRegistry();
-	Cache.open(Platform.getStateLocation(getBundle()));
-	if (getPluginPreferences().contains(PreferenceConstants.CACHE_ENABLED)) 
-	{
-	  setCacheEnabled(getPluginPreferences().getBoolean(PreferenceConstants.CACHE_ENABLED));
-	} 
-	else 
-	{
-	  // The cache is disabled by default.
-	  setCacheEnabled(false);
-	}
-	
-	// Restore license preferences
-	Preferences prefs = getPluginPreferences();
-	LicenseRegistry registry = LicenseRegistry.getInstance();
-	String[] licenses = registry.getLicenses();
-	int numLicenses = licenses.length;
-	for(int i = 0; i < numLicenses; i++)
-	{
-	  int state = prefs.getInt(licenses[i]);
-	  if(state == LicenseRegistry.LICENSE_AGREE.intValue())
-	  {
-		registry.agreeLicense(licenses[i]);
-	  }
-	  else if(state == LicenseRegistry.LICENSE_DISAGREE.intValue())
-	  {
-		registry.disagreeLicense(licenses[i]);
-	  }
-	}
-  }
-
-  /**
-   * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-   */
-  public void stop(BundleContext context) throws Exception 
-  {
-	// Save the license state information.
-	Preferences prefs = getPluginPreferences();
-	LicenseRegistry registry = LicenseRegistry.getInstance();
-	String[] licenses = registry.getLicenses();
-	int numLicenses = licenses.length;
-	for(int i = 0; i < numLicenses; i++)
-	{
-	  Integer state = registry.getLicenseState(licenses[i]);
-      // For states that have been disagreed to this session store
-	  // them as disagree.
-	  if(state == LicenseRegistry.LICENSE_DISAGREE_THIS_SESSION)
-	  {
-		state = LicenseRegistry.LICENSE_DISAGREE;
-	  }
-	  prefs.setValue(licenses[i], state.intValue());
-	}
-	
-	Cache.getInstance().close();
-	CacheJob.stopJob();
-	super.stop(context);
-	plugin = null;
-  }
-
-  /**
-   * Returns the shared instance.
-   * 
-   * @return The shared instance.
-   */
-  public static CachePlugin getDefault() 
-  {
-	return plugin;
-  }
-
-  /**
-   * Set whether or not the cache is enabled.
-   * 
-   * @param enabled If true the cache is enabled, if false it is not enabled.
-   */
-  public void setCacheEnabled(boolean enabled) 
-  {
-	getPluginPreferences().setValue(PreferenceConstants.CACHE_ENABLED, enabled);
-	CacheJob.stopJob();
-  }
-
-  /**
-   * Returns true if the cache is enabled, false otherwise.
-   * 
-   * @return True if the cache is enabled, false otherwise.
-   */
-  public boolean isCacheEnabled() 
-  {
-	if (getPluginPreferences().contains(PreferenceConstants.CACHE_ENABLED))
-	  return getPluginPreferences().getBoolean(PreferenceConstants.CACHE_ENABLED);
-	return true;
-  }
-  
-  /**
-   * Set whether or not the user should be prompted for licenses to which they 
-   * have previously disagreed.
-   * 
-   * @param prompt If true the the user should be prompted, if false the user should not be prompted.
-   */
-  public void setPromptDisagreedLicenses(boolean prompt) 
-  {
-	getPluginPreferences().setValue(PreferenceConstants.PROMPT_DISAGREED_LICENSES, prompt);
-  }
-
-  /**
-   * Returns true if the the user should be prompted for licenses to which they
-   * have previously disagreed, false otherwise.
-   * 
-   * @return True if the user should be prompted, false otherwise.
-   */
-  public boolean shouldPrompt() 
-  {
-	if (getPluginPreferences().contains(PreferenceConstants.PROMPT_DISAGREED_LICENSES))
-	  return getPluginPreferences().getBoolean(PreferenceConstants.PROMPT_DISAGREED_LICENSES);
-	return true;
-  }
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePluginResources.properties b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePluginResources.properties
deleted file mode 100644
index fe850d6..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CachePluginResources.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-###############################################################################
-# Copyright (c) 2005, 2006 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
-###############################################################################
-
-# Cache preference page strings.
-_UI_CONFIRM_CLEAR_CACHE_DIALOG_TITLE             = Remove All?
-_UI_CONFIRM_CLEAR_CACHE_DIALOG_MESSAGE           = Remove all cache entries?
-_UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_TITLE      = Remove Entries?
-_UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_MESSAGE    = Remove all selected cache entries?
-_UI_BUTTON_CLEAR_CACHE                           = Remove &All
-_UI_BUTTON_DELETE_ENTRY                          = &Remove
-_UI_PREF_CACHE_ENTRIES_TITLE                     = &Cache entries:
-_UI_PREF_CACHE_CACHE_OPTION                      = &Disable caching
-_UI_PREF_CACHE_ABOUT                             = Manage the cache of remote resources, such as those downloaded from the internet.
-_UI_PREF_PROMPT_FOR_DISAGREED_LICENSES           = &Prompt me for agreement for licenses for whose terms I have already disagreed.
-
-# Cache monitor strings.
-_UI_CACHE_MONITOR_NAME                           = Caching Remote Resources
-_UI_CACHE_MONITOR_CACHING                        = Caching {0}
-
-# Cache license dialog
-_UI_CACHE_DIALOG_LICENSE_STATEMENT1              = A request has been made to cache the resource:
-_UI_CACHE_DIALOG_LICENSE_STATEMENT2              = In order to cache the resource you must agree to the license below:
-_UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_INTERNAL  = In order to cache the resource you must agree to the license which has been opened in your browser.
-_UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_BROWSER   = The license cannot be displayed in this dialog. In order to cache the resource you must agree to the license located at {0}.
-_UI_CACHE_DIALOG_AGREE_BUTTON                    = I Agree
-_UI_CACHE_DIALOG_DISAGREE_BUTTON                 = I Disagree
-_UI_CACHE_DIALOG_TITLE                           = License Agreement
-_UI_LOADING_LICENSE                              = Loading license
-
-# Cache logging messages
-_LOG_INFO_WTP_NO_USER_INTERACTION                = {0} is set. Licenses dialogs will not be displayed.
-
-# WTP test no user interaction system property
-# This property is checked by the cache. This sting is not shown to the user.
-WTP_NO_USER_INTERACTION_SYSTEM_PROP              = wtp.autotest.noninteractive
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheURIResolverExtension.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheURIResolverExtension.java
deleted file mode 100644
index f6518f2..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/CacheURIResolverExtension.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.internet.cache.internal;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverExtension;
-import org.eclipse.wst.common.uriresolver.internal.util.URIHelper;
-
-/**
- * A cache URI resolver. This resolver will cache remote resources and return
- * the local copy if they can be cached. If a resource cannot be cached the
- * resource returns null.
- */
-public class CacheURIResolverExtension implements URIResolverExtension 
-{
-	/**
-	 * @see org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverExtension#resolve(org.eclipse.core.resources.IProject, java.lang.String, java.lang.String, java.lang.String)
-	 */
-	public String resolve(IFile file, String baseLocation, String publicId, String systemId)
-	{ 
-      if(CachePlugin.getDefault().isCacheEnabled())
-      {
-		  String resource = null;
-		  if(systemId != null)
-		  {
-		    resource = URIHelper.normalize(systemId, baseLocation, null);
-		  } 
-		  
-		  if(resource != null && (resource.startsWith("http:") || resource.startsWith("ftp:")))
-		  {
-		    // Handle resources prespecified to cache.
-		    ToCacheResource toCacheResource = ToCacheRegistryReader.getInstance().getResourceToCache(resource);
-		    if(toCacheResource == null || LicenseRegistry.getInstance().hasLicenseBeenAccepted(resource, toCacheResource.getLicense()))
-		    { 	
-		      return Cache.getInstance().getResource(resource);
-		    }
-		  }
-      }
-	  return null;
-	}
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseAcceptanceDialog.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseAcceptanceDialog.java
deleted file mode 100644
index 369d7e4..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseAcceptanceDialog.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2006 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.wst.internet.cache.internal;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.Hashtable;
-
-import org.eclipse.jface.dialogs.IconAndMessageDialog;
-import org.eclipse.jface.wizard.ProgressMonitorPart;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.browser.Browser;
-import org.eclipse.swt.browser.ProgressEvent;
-import org.eclipse.swt.browser.ProgressListener;
-import org.eclipse.swt.custom.StackLayout;
-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.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * A dialog that prompts the user to accept a license agreement.
- */
-public class LicenseAcceptanceDialog extends IconAndMessageDialog 
-{
-  /**
-   * Holds all the dialogs that are currently displayed keyed by the license URL.
-   */
-  private static Hashtable dialogsInUse = new Hashtable();
-  
-  /**
-   * The URL of the resource.
-   */
-  private String url;
-
-  /**
-   * The URL of the license.
-   */
-  private String licenseURL;
-  
-  /**
-   * The agree button for the dialog.
-   */
-  private Button agreeButton = null;
-  
-  /**
-   * Constructor.
-   * 
-   * @param parent The parent of this dialog.
-   * @param url The license URL.
-   */
-  protected LicenseAcceptanceDialog(Shell parent, String url, String licenseURL) 
-  {
-    super(parent);
-	this.url = url;
-	this.licenseURL = licenseURL;
-  }
-  
-  /**
-   * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
-   */
-  protected void configureShell(Shell shell) 
-  {
-    super.configureShell(shell);
-    shell.setText(CacheMessages._UI_CACHE_DIALOG_TITLE);
-    shell.setImage(null);
-  }
-
-  /**
-   * @see org.eclipse.jface.dialogs.Dialog#createButtonBar(org.eclipse.swt.widgets.Composite)
-   */
-  protected Control createButtonBar(Composite parent) 
-  {
-	Composite buttonBar = new Composite(parent, SWT.NONE);
-	GridLayout layout = new GridLayout();
-	layout.numColumns = 0;
-	layout.makeColumnsEqualWidth = true;
-	buttonBar.setLayout(layout);
-	GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER);
-	buttonBar.setLayoutData(gd);
-	
-	// Create the agree button.
-	agreeButton = createButton(buttonBar, LicenseAcceptanceDialog.OK, 
-			CacheMessages._UI_CACHE_DIALOG_AGREE_BUTTON, false);
-	agreeButton.setEnabled(false);
-	
-	// Create the disagree button.
-	createButton(buttonBar, LicenseAcceptanceDialog.CANCEL, 
-			CacheMessages._UI_CACHE_DIALOG_DISAGREE_BUTTON, false);
-	
-	return buttonBar;
-  }
-
-  /**
-   * @see org.eclipse.jface.window.Window#createContents(org.eclipse.swt.widgets.Composite)
-   */
-  protected Control createContents(Composite parent) 
-  {
-	Composite composite = new Composite(parent, SWT.NONE);
-	GridLayout layout = new GridLayout();
-	composite.setLayout(layout);
-	GridData gd = new GridData(SWT.FILL);
-	gd.widthHint = 500;
-	composite.setLayoutData(gd);
-
-	// Display a statement about the license.
-	Label licenseText1 = new Label(composite, SWT.NONE);
-	licenseText1.setText(CacheMessages._UI_CACHE_DIALOG_LICENSE_STATEMENT1);
-	Label urlText = new Label(composite, SWT.WRAP);
-	gd = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
-	urlText.setLayoutData(gd);
-	urlText.setText(url);
-	new Label(composite, SWT.NONE); // Spacing label.
-	Label licenseText2 = new Label(composite, SWT.WRAP);
-	gd = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
-	licenseText2.setLayoutData(gd);
-	
-	// Display the license in a browser.
-	try
-	{
-	  final Composite licenseTextComposite = new Composite(composite, SWT.NONE);
-	  final StackLayout stackLayout = new StackLayout();
-	  licenseTextComposite.setLayout(stackLayout);
-	  gd = new GridData(SWT.FILL, SWT.FILL, true, true);
-	  gd.heightHint = 400;
-	  licenseTextComposite.setLayoutData(gd);
-	  // Create the loading progress monitor composite and part.
-	  Composite monitorComposite = new Composite(licenseTextComposite, SWT.NONE);
-	  monitorComposite.setLayout(new GridLayout());
-	  gd = new GridData(SWT.FILL, SWT.FILL, true, true);
-	  gd.heightHint = 400;
-	  monitorComposite.setLayoutData(gd);
-	  final ProgressMonitorPart monitor = new ProgressMonitorPart(monitorComposite, new GridLayout());
-	  gd = new GridData(SWT.FILL, SWT.BOTTOM, true, true);
-	  monitor.setLayoutData(gd);
-	  monitor.beginTask(CacheMessages._UI_LOADING_LICENSE, 100);
-	  stackLayout.topControl = monitorComposite;
-	  // Create the browser.
-	  final Browser browser = new Browser(licenseTextComposite, SWT.BORDER);
-	  gd = new GridData(SWT.FILL, SWT.FILL, true, true);
-	  //gd.heightHint = 400;
-	  
-	  // The browser widget has problems loading files stored in jars
-	  // so we read from the jar and set the browser text ourselves.
-	  // See bug 154721.
-	  if(licenseURL.startsWith("jar:"))
-	  {
-		  InputStream licenseStream = null;
-		  InputStreamReader isreader = null;
-		  BufferedReader breader = null;
-		  try
-		  {
-		  URL browserURL = new URL(licenseURL);
-		  licenseStream = browserURL.openStream();
-		  isreader = new InputStreamReader(licenseStream);
-		  breader = new BufferedReader(isreader);
-		  String str;
-		  StringBuffer sb = new StringBuffer();
-		  while((str = breader.readLine())!=null){
-		      sb.append(str);
-		  }
-		  browser.setText(sb.toString());
-		  }
-		  finally
-		  {
-			  if(licenseStream != null)
-			  {
-				  licenseStream.close();
-			  }
-			  if(isreader != null)
-			  {
-				  isreader.close();
-			  }
-			  if(breader != null)
-			  {
-				  breader.close();
-			  }
-		  }
-	  }
-	  else
-	  {
-		  browser.setUrl(licenseURL);
-	  }
-	  browser.setLayoutData(gd);
-	  browser.addProgressListener(new ProgressListener(){
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.swt.browser.ProgressListener#changed(org.eclipse.swt.browser.ProgressEvent)
-		 */
-		public void changed(ProgressEvent event) 
-		{
-		  if (event.total != 0)
-		  {
-		    monitor.internalWorked(event.current * 100 / event.total);
-		  }
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.swt.browser.ProgressListener#completed(org.eclipse.swt.browser.ProgressEvent)
-		 */
-		public void completed(ProgressEvent event) 
-		{
-		  monitor.done();
-			
-		  stackLayout.topControl = browser;
-		  agreeButton.setEnabled(true);
-		  licenseTextComposite.layout();
-		}
-	  });
-	  
-	  licenseText2.setText(CacheMessages._UI_CACHE_DIALOG_LICENSE_STATEMENT2);
-	}
-	catch(Throwable e)
-	{
-	  // The browser throws an exception on platforms that do not support it. 
-	  // In this case we need to create an external browser.
-	  try
-	  {
-	    CachePlugin.getDefault().getWorkbench().getBrowserSupport().getExternalBrowser().openURL(new URL(licenseURL));
-	    licenseText2.setText(CacheMessages._UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_INTERNAL);
-	  }
-	  catch(Exception ex)
-	  {
-		// In this case the license cannot be display. Inform the user of this and give them the license location.
-		licenseText2.setText(MessageFormat.format(CacheMessages._UI_CACHE_DIALOG_LICENSE_STATEMENT2_NO_BROWSER, new Object[]{licenseURL}));
-	  }
-	}
-
-	createButtonBar(composite);
-		
-	return composite;
-  }
-
-  /**
-   * @see org.eclipse.jface.dialogs.IconAndMessageDialog#getImage()
-   */
-  protected Image getImage() 
-  {
-	return getInfoImage();
-  }
-
-  /**
-   * Prompt the user to accept the specified license. This method creates the
-   * dialog and returns the result.
-   * 
-   * @param parent The parent of this dialog.
-   * @param url The URL of the resource for which the license must be accepted.
-   * @param licenseURL The license URL.
-   * @return True if the license is accepted, false otherwise.
-   */
-  public static boolean promptForLicense(Shell parent, String url, String licenseURL) throws IOException
-  {
-	boolean agreedToLicense = false;
-	boolean newDialog = true;
-	LicenseAcceptanceDialog dialog = null;
-	// If the dialog is already displayed for this license use it instead of 
-	// displaying another dialog.
-	if(dialogsInUse.containsKey(licenseURL))
-	{
-	  newDialog = false;
-	  dialog = (LicenseAcceptanceDialog)dialogsInUse.get(licenseURL);
-	}
-	else
-	{
-	  InputStream is = null;
-
-	  try
-	  {
-	    URL urlObj = new URL(licenseURL);
-	    is = urlObj.openStream();
-
-	    dialog = new LicenseAcceptanceDialog(parent, url, licenseURL);
-	    dialogsInUse.put(licenseURL, dialog);
-	    dialog.setBlockOnOpen(true);
-	  }
-	  catch(Exception e)
-	  {
-		throw new IOException("The license cannot be opened.");
-	  }
-	  finally
-	  {
-		if(is != null)
-		{
-		  try
-		  {
-			is.close();
-		  }
-		  catch(IOException e)
-		  {
-		    // Do nothing.
-		  }
-		}
-	  }
-	}
-	if(dialog != null)
-	{
-	  dialog.open();
-	  
-	  if (dialog.getReturnCode() == LicenseAcceptanceDialog.OK) 
-	  {
-		agreedToLicense = true;
-      }
-		
-	  if(newDialog)
-	  {
-       dialogsInUse.remove(licenseURL);
-	  }
-	}
-	 
-	return agreedToLicense;
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.jface.dialogs.Dialog#close()
-   */
-  public boolean close() 
-  {
-	if(agreeButton != null)
-	{
-	  agreeButton.dispose();
-	  agreeButton = null;
-	}
-	return super.close();
-  }
-  
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseRegistry.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseRegistry.java
deleted file mode 100644
index 2ffb248..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/LicenseRegistry.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2006 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.wst.internet.cache.internal;
-
-import java.text.MessageFormat;
-import java.util.Hashtable;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.swt.widgets.Display;
-
-/**
- * The license registry holds all of the registered licenses and whether or not they
- * have been accepted.
- */
-public class LicenseRegistry 
-{
-  protected static Integer LICENSE_UNSPECIFIED = new Integer(0); // This needs to be 0 for the plugin prefs.
-  protected static Integer LICENSE_AGREE = new Integer(1);
-  protected static Integer LICENSE_DISAGREE = new Integer(2);
-  // Signifies a license that has been disagreed to this session.
-  protected static Integer LICENSE_DISAGREE_THIS_SESSION = new Integer(3);
-  
-  /**
-   * There is only one instance of the license registry.
-   */
-  protected static LicenseRegistry instance = null;
-  
-  /**
-   * If set to true, the do not prompt flag will prevent user prompting. Used for automated testing.
-   */
-  private boolean DO_NOT_PROMPT = false;
-  
-  /**
-   * The licenses hashtable contains licenses and whether or not they've been accepted.
-   */
-  protected Hashtable licenses;
-  
-  protected LicenseRegistry()
-  {
-	licenses = new Hashtable();
-	
-	// If the wtp quiet system property is set the DO_NOT_PROMPT flag is set to true.
-	// This is used for automated testing.
-	if(System.getProperty(CacheMessages.WTP_NO_USER_INTERACTION_SYSTEM_PROP, "false").equals("true"))
-	{
-	  CachePlugin.getDefault().getLog().log(new Status(IStatus.INFO, CachePlugin.PLUGIN_ID, IStatus.OK, MessageFormat.format(CacheMessages._LOG_INFO_WTP_NO_USER_INTERACTION, new Object[]{CacheMessages.WTP_NO_USER_INTERACTION_SYSTEM_PROP}), null));
-	  DO_NOT_PROMPT = true;
-	}
-  }
-  
-  /**
-   * Get the one and only instance of the license registry.
-   * 
-   * @return The one and only instance of the license registry.
-   */
-  public static LicenseRegistry getInstance()
-  {
-	if(instance == null)
-	{
-	  instance = new LicenseRegistry();
-	}
-	return instance;
-  }
-  
-  /**
-   * Add the specified license to the license registry. A license can only be added to the
-   * registry once.
-   * 
-   * @param url The URL of the license to add to the registry.
-   */
-  public void addLicense(String url)
-  {
-	if(url != null && !licenses.containsKey(url))
-	{
-	  licenses.put(url, LICENSE_UNSPECIFIED);
-	}
-  }
-  
-  /**
-   * Agree to the specified license. The license is agreed to only if it has already
-   * been registered with the registry.
-   * 
-   * @param url The URL of the license to accept.
-   */
-  protected void agreeLicense(String url)
-  {
-	if(licenses.containsKey(url))
-	{
-	  licenses.put(url, LICENSE_AGREE);
-	}
-  }
-  
-  /**
-   * Disagree to the specified license. The license is disagreed to only if it has already
-   * been registered with the registry.
-   * 
-   * @param url The URL of the license to accept.
-   */
-  protected void disagreeLicense(String url)
-  {
-	if(licenses.containsKey(url))
-	{
-	  licenses.put(url, LICENSE_DISAGREE);
-	}
-  }
-  
-  /**
-   * Disagree to the specified license for this session. The license is disagreed to only if it has already
-   * been registered with the registry. 
-   * 
-   * @param url The URL of the license to accept.
-   */
-  private void disagreeLicenseThisSession(String url)
-  {
-	if(licenses.containsKey(url))
-	{
-	  licenses.put(url, LICENSE_DISAGREE_THIS_SESSION);
-	}
-  }
-  
-  /**
-   * Determine if the license has been accepted. This method will return true if the license
-   * has been accepted or is not registered with the registry and false if it has not been accepted. 
-   * 
-   * @param url The URL of the resource for which we are checking the license.
-   * @param licenseURL The URL of the license that should be checked to see if it has been accepted.
-   * @return True if the license has been accepted or is not registered with the registry, false otherwise.
-   */
-  public boolean hasLicenseBeenAccepted(String url, String licenseURL)
-  {
-	if(DO_NOT_PROMPT)
-	{
-	  return true;
-	}
-	
-	if(licenses.containsKey(licenseURL))
-	{
-	  Integer agreed = (Integer)licenses.get(licenseURL);
-	  if(agreed == LICENSE_AGREE)
-	  {
-		return true;
-	  }
-	  else if(agreed == LICENSE_DISAGREE)
-	  {
-		if(!CachePlugin.getDefault().shouldPrompt())
-		  return false;
-		licenses.put(licenseURL, LICENSE_DISAGREE_THIS_SESSION);
-	  }
-	  // The license has already been disagreed to this session. Do not prompt.
-	  else if(agreed == LICENSE_DISAGREE_THIS_SESSION)
-	  {
-		return false;
-	  }
-		  
-	  
-	  // Prompt the user to accept the license.
-	  int licenseAcceptance = promptToAcceptLicense(url, licenseURL);
-	  if(licenseAcceptance == Accepted.ACCEPTED)
-	  {
-		agreeLicense(licenseURL);
-		return true;
-	  }
-	  else if(licenseAcceptance == Accepted.NOT_ACCEPTED)
-	  {
-	    disagreeLicenseThisSession(licenseURL);
-	    return false;
-	  }
-	  return false;
-	}
-	
-	// The license is not registred with the registry.
-	return true;
-  }
-  
-  /**
-   * Prompt the user to accept the license. This method creates a LicenseAcceptanceDialog.
-   * 
-   * @param url The URL of the resource for which the license needs to be accepted.
-   * @param licenseURL The URL of the license to be accepted. 
-   * @return 0 if accepted, 1 if not accepted, 2 if not able to accept.
-   */
-  protected int promptToAcceptLicense(final String url, final String licenseURL) 
-  {
-	final Accepted accepted = new Accepted();
-	  Display.getDefault().syncExec(new Runnable() {
-			public void run() {
-				try
-				{
-				  if(LicenseAcceptanceDialog.promptForLicense(null, url, licenseURL))
-				  {
-					accepted.accepted = Accepted.ACCEPTED;
-				  }
-				  else
-				  {
-					accepted.accepted = Accepted.NOT_ACCEPTED;
-				  }
-				}
-				catch(Exception e)
-				{
-				  accepted.accepted = Accepted.NOT_DETERMINED;
-				}
-			}
-		});
-	return accepted.accepted;
-  }
-  
-  /**
-   * Get an array containing all the licenses in the registry.
-   * 
-   * @return As array containing all the licenses in the registry. 
-   */
-  protected String[] getLicenses()
-  {
-	return (String[])licenses.keySet().toArray(new String[licenses.keySet().size()]);
-  }
-  
-  /**
-   * Get the state of the license.
-   * 
-   * @param url The URL of the license.
-   * @return The state of the license.
-   */
-  protected Integer getLicenseState(String url)
-  {
-	return (Integer)licenses.get(url);
-  }
-  
-  
-  /**
-   * A class to hold acceptance information for the prompt method.
-   */
-  private class Accepted
-  {
-	public static final int ACCEPTED = 0;
-	public static final int NOT_ACCEPTED = 1;
-	public static final int NOT_DETERMINED = 2;
-	public int accepted = NOT_ACCEPTED;
-  }
-
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheRegistryReader.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheRegistryReader.java
deleted file mode 100644
index 73165b2..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheRegistryReader.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2006 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.wst.internet.cache.internal;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Hashtable;
-
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.osgi.framework.Bundle;
-
-/**
- * The ToCacheRegistryReaders reads Eclipse extensions which specify
- * resources to cache. An extension point looks like the following.
- * 
- *  <extension point="org.eclipse.wst.internet.cache.cacheresource">
- *    <cacheresource uri="URI_TO_CACHE" license="URI_OF_LICENSE"/>
- *  </extension> 
- *
- */
-public class ToCacheRegistryReader
-{
-  protected static final String PLUGIN_ID = "org.eclipse.wst.internet.cache";
-  protected static final String EXTENSION_POINT_ID = "cacheresource";
-  protected static final String ATT_URL = "url";
-  protected static final String ATT_LICENSE = "license";
- 
-  private static ToCacheRegistryReader registryReader = null;
-  
-  private Hashtable resourcesToCache = new Hashtable();
-
-  /**
-   * Get the one and only instance of this registry reader.
-   * 
-   * @return The one and only instance of this registry reader.
-   */
-  public static ToCacheRegistryReader getInstance()
-  {
-    if(registryReader == null)
-    {
-      registryReader = new ToCacheRegistryReader();
-    }
-    return registryReader;
-  }
-  /**
-   * Read from plugin registry and handle the configuration elements that match
-   * the spedified elements.
-   */
-  public void readRegistry()
-  {
-    IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
-    IExtensionPoint point = pluginRegistry.getExtensionPoint(PLUGIN_ID, EXTENSION_POINT_ID);
-    if (point != null)
-    {
-      IConfigurationElement[] elements = point.getConfigurationElements();
-      for (int i = 0; i < elements.length; i++)
-      {
-        ToCacheResource toCacheResource = readElement(elements[i]);
-        if(toCacheResource != null)
-        {
-          resourcesToCache.put(toCacheResource.getURL(), toCacheResource);
-          LicenseRegistry.getInstance().addLicense(toCacheResource.getLicense());
-        }
-      }
-    }
-  }
-
-  /**
-   * Parse and deal with the extension points.
-   * 
-   * @param element The extension point element.
-   */
-  protected ToCacheResource readElement(IConfigurationElement element)
-  {
-	
-    if(element.getName().equals(EXTENSION_POINT_ID))
-    {
-      String url = element.getAttribute(ATT_URL);
-      if(url != null)
-      {
-    	String license = element.getAttribute(ATT_LICENSE);
-    	
-    	// If the license is relative resolve relative to the
-    	// plug-in that declares it.
-    	try
-    	{
-    	  URI licenseURI = new URI(license);
-    	  if(!licenseURI.isAbsolute())
-    	  {
-    		Bundle pluginBundle = Platform.getBundle(element.getDeclaringExtension().getContributor().getName());
-    		URL licenseURL = pluginBundle.getEntry(license);
-    		if(licenseURL != null)
-    		{
-    	      license = FileLocator.resolve(licenseURL).toExternalForm();  
-    		}
-    	  }
-    	}
-    	catch(URISyntaxException e)
-    	{
-    	  // Use the license as specified.
-    	}
-    	catch(IOException e)
-    	{
-    	  // Use the license as specified.
-    	}
-    	return new ToCacheResource(url, license);
-      }
-    }
-    return null;
-  }
-  
-  /**
-   * Get the list of URIs that have been specified for caching.
-   * 
-   * @return The list of URIs that have been specified for caching.
-   */
-  public String[] getURIsToCache()
-  {
-    return (String[])resourcesToCache.keySet().toArray(new String[resourcesToCache.size()]);
-  }
-  
-  /**
-   * Get the resource to cache if one has been specified.
-   * 
-   * @param url The URL of the resource to cache.
-   * @return A ToCacheResource object representing the URL or null if none has been specified.
-   */
-  public ToCacheResource getResourceToCache(String url)
-  {
-	return (ToCacheResource)resourcesToCache.get(url);
-  }
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheResource.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheResource.java
deleted file mode 100644
index 3f6778b..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/ToCacheResource.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.internet.cache.internal;
-
-/**
- * A resource that is specified to be cached. The resource has a URL and an optional
- * license.
- */
-public class ToCacheResource 
-{
-  private String url;
-  private String license;
-  
-  /**
-   * Constructor.
-   * 
-   * @param url The URL of the resource to be cached.
-   * @param license The URL of the optional license for this resource.
-   */
-  public ToCacheResource(String url, String license)
-  {
-	this.url = url;
-	this.license = license;
-  }
-  
-  /**
-   * Get the URL of the resource to be cached.
-   * 
-   * @return The URL of the resource to be cached.
-   */
-  public String getURL()
-  {
-	return url;
-  }
-  
-  /**
-   * Get the license URL of the resource to be cached.
-   * 
-   * @return The license URL of the resource to be cached.
-   */
-  public String getLicense()
-  {
-	return license;
-  }
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/CachePreferencePage.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/CachePreferencePage.java
deleted file mode 100644
index 896fac1..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/CachePreferencePage.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2006 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.wst.internet.cache.internal.preferences;
-
-import java.util.Arrays;
-
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.preference.PreferencePage;
-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.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.internet.cache.internal.Cache;
-import org.eclipse.wst.internet.cache.internal.CacheMessages;
-import org.eclipse.wst.internet.cache.internal.CachePlugin;
-
-/**
- * This class represents a preference page that is contributed to the
- * Preferences dialog. This page contains options for the cache. The cache can
- * be disabled, the list of entries in the cache can be viewed, and individual
- * entries or the entire cache can be deleted.
- */
-
-public class CachePreferencePage extends PreferencePage implements
-    IWorkbenchPreferencePage
-{
-  protected Button clearButton;
-
-  protected Button deleteButton;
-
-  protected Button enabledButton;
-  
-  protected Button disagreedLicensesButton;
-
-  protected List entries;
-
-  protected Composite composite = null;
-
-  /**
-   * @see org.eclipse.jface.dialogs.IDialogPage#dispose()
-   */
-  public void dispose()
-  {
-    if (composite != null)
-    {
-      composite.dispose();
-    }
-    super.dispose();
-  }
-
-  /**
-   * Constructor.
-   */
-  public CachePreferencePage()
-  {
-    setPreferenceStore(CachePlugin.getDefault().getPreferenceStore());
-  }
-
-  /**
-   * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
-   */
-  public void init(IWorkbench workbench)
-  {
-  }
-
-  /**
-   * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
-   */
-  protected Control createContents(Composite parent)
-  {
-    noDefaultAndApplyButton();
-
-    composite = new Composite(parent, SWT.NULL);
-    GridLayout layout = new GridLayout();
-    layout.numColumns = 2;
-    layout.horizontalSpacing = convertHorizontalDLUsToPixels(4);
-    layout.verticalSpacing = convertVerticalDLUsToPixels(3);
-    layout.marginWidth = 0;
-    layout.marginHeight = 0;
-    composite.setLayout(layout);
-    GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
-    composite.setLayoutData(gd);
-    
-    Label aboutLabel = new Label(composite, SWT.WRAP);
-    aboutLabel.setText(CacheMessages._UI_PREF_CACHE_ABOUT);
-    GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
-    gridData.horizontalSpan = 2;
-    aboutLabel.setLayoutData(gridData);
-    new Label(composite, SWT.None);
-    try
-    {
-      // Created the disable cache option.
-      enabledButton = new Button(composite, SWT.CHECK | SWT.LEFT);
-      gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
-      gridData.horizontalSpan = 2;
-      enabledButton.setLayoutData(gridData);
-      enabledButton.setText(CacheMessages._UI_PREF_CACHE_CACHE_OPTION);
-      enabledButton.setSelection(!CachePlugin.getDefault().getPreferenceStore()
-          .getBoolean(PreferenceConstants.CACHE_ENABLED));
-      enabledButton.addSelectionListener(new SelectionListener()
-      {
-
-        public void widgetDefaultSelected(SelectionEvent e)
-        {
-          widgetSelected(e);
-
-        }
-
-        public void widgetSelected(SelectionEvent e)
-        {
-          boolean disabled = enabledButton.getSelection();
-          CachePlugin.getDefault().setCacheEnabled(!disabled);
-        }
-
-      });
-      
-      disagreedLicensesButton = new Button(composite, SWT.CHECK | SWT.LEFT);
-      gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
-      gridData.horizontalSpan = 2;
-      disagreedLicensesButton.setLayoutData(gridData);
-      disagreedLicensesButton.setText(CacheMessages._UI_PREF_PROMPT_FOR_DISAGREED_LICENSES);
-      disagreedLicensesButton.setSelection(CachePlugin.getDefault().getPreferenceStore()
-          .getBoolean(PreferenceConstants.PROMPT_DISAGREED_LICENSES));
-      disagreedLicensesButton.addSelectionListener(new SelectionListener()
-      {
-
-        public void widgetDefaultSelected(SelectionEvent e)
-        {
-          widgetSelected(e);
-
-        }
-
-        public void widgetSelected(SelectionEvent e)
-        {
-          boolean prompt = disagreedLicensesButton.getSelection();
-          CachePlugin.getDefault().setPromptDisagreedLicenses(prompt);
-        }
-
-      });
-
-      // Create the entities group.
-      Label entriesLabel = new Label(composite, SWT.WRAP);
-      entriesLabel.setText(CacheMessages._UI_PREF_CACHE_ENTRIES_TITLE);
-      gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
-      gridData.horizontalSpan = 2;
-      entriesLabel.setLayoutData(gridData);
-
-      entries = new List(composite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
-      PlatformUI.getWorkbench().getHelpSystem().setHelp(entries,
-          ContextIds.PREF_ENTRIES);
-      String[] cacheEntries = Cache.getInstance().getCachedURIs();
-      Arrays.sort(cacheEntries);
-      entries.setItems(cacheEntries);
-      gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL
-          | GridData.VERTICAL_ALIGN_FILL);
-      gridData.grabExcessHorizontalSpace = true;
-      gridData.grabExcessVerticalSpace = true;
-      entries.setLayoutData(gridData);
-      entries.addSelectionListener(new SelectionAdapter()
-      {
-        public void widgetSelected(SelectionEvent event)
-        {
-          setPreferenceWidgets();
-        }
-      });
-
-      Composite buttonComposite = new Composite(composite, SWT.NULL);
-      GridLayout gridLayout = new GridLayout();
-      gridLayout.horizontalSpacing = 0;
-      gridLayout.verticalSpacing = convertVerticalDLUsToPixels(3);
-      gridLayout.marginWidth = 0;
-      gridLayout.marginHeight = 0;
-      gridLayout.numColumns = 1;
-      buttonComposite.setLayout(gridLayout);
-      gridData = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_FILL | SWT.TOP);
-      buttonComposite.setLayoutData(gridData);
-      // Create the Delete button
-      deleteButton = new Button(buttonComposite, SWT.PUSH);
-      deleteButton.setText(CacheMessages._UI_BUTTON_DELETE_ENTRY);
-      gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
-      gridData.grabExcessHorizontalSpace = true;
-      deleteButton.setLayoutData(gridData);
-      deleteButton.addSelectionListener(new SelectionAdapter()
-      {
-        public void widgetSelected(SelectionEvent event)
-        {
-          if (MessageDialog
-              .openConfirm(
-                  Display.getDefault().getActiveShell(),
-                  CacheMessages._UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_TITLE,
-                  CacheMessages._UI_CONFIRM_DELETE_CACHE_ENTRY_DIALOG_MESSAGE))
-          {
-            String[] selectedEntries = entries.getSelection();
-            int numSelectedEntries = selectedEntries.length;
-
-            Cache cache = Cache.getInstance();
-            for (int i = 0; i < numSelectedEntries; i++)
-            {
-              cache.deleteEntry(selectedEntries[i]);
-            }
-            String[] cacheEntries = cache.getCachedURIs();
-            Arrays.sort(cacheEntries);
-            entries.setItems(cacheEntries);
-            setPreferenceWidgets();
-          }
-        }
-      });
-
-      // Create the Clear Cache button
-      clearButton = new Button(buttonComposite, SWT.PUSH);
-      clearButton.setText(CacheMessages._UI_BUTTON_CLEAR_CACHE);
-      gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
-      gridData.grabExcessHorizontalSpace = true;
-      clearButton.setLayoutData(gridData);
-      clearButton.addSelectionListener(new SelectionAdapter()
-      {
-        public void widgetSelected(SelectionEvent event)
-        {
-          if (MessageDialog.openConfirm(Display.getDefault().getActiveShell(),
-              CacheMessages._UI_CONFIRM_CLEAR_CACHE_DIALOG_TITLE,
-              CacheMessages._UI_CONFIRM_CLEAR_CACHE_DIALOG_MESSAGE))
-          {
-            Cache cache = Cache.getInstance();
-            cache.clear();
-            String[] cacheEntries = cache.getCachedURIs();
-            Arrays.sort(cacheEntries);
-            entries.setItems(cacheEntries);
-            setPreferenceWidgets();
-          }
-        }
-      });
-
-    } catch (Throwable e)
-    {
-      //TODO: Log error
-    }
-    setPreferenceWidgets();
-    applyDialogFont(composite);
-
-    return composite;
-  }
-
-  /**
-   * Set the preference page widgets. There are a few rules. 1. If disabled, all
-   * of the widgets are diabled except for the disabled check box. 2. If
-   * enabled, all widgets are enabled except a. The delete button is enabled
-   * only if there is a selection in the list. b. The clear button is enabled
-   * only if there are items in the list.
-   */
-  public void setPreferenceWidgets()
-  {
-    if (composite != null && composite.getEnabled())
-    {
-      if (entries.getSelectionCount() > 0)
-      {
-        deleteButton.setEnabled(true);
-      } 
-      else
-      {
-        deleteButton.setEnabled(false);
-      }
-      if (entries.getItemCount() > 0)
-      {
-        clearButton.setEnabled(true);
-      } 
-      else
-      {
-        clearButton.setEnabled(false);
-      }
-      
-    }
-  }
-
-  /*
-   * @see PreferencePage#createControl(Composite)
-   */
-  public void createControl(Composite parent)
-  {
-    super.createControl(parent);
-    PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), ContextIds.PREF); //$NON-NLS-1$
-  }
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/ContextIds.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/ContextIds.java
deleted file mode 100644
index 259cafb..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/ContextIds.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-package org.eclipse.wst.internet.cache.internal.preferences;
-
-import org.eclipse.wst.internet.cache.internal.CachePlugin;
-
-/**
- * Constant ids for context help.
- */
-public interface ContextIds {
-	public static final String PREF = CachePlugin.PLUGIN_ID + ".cpr0000";
-	public static final String PREF_ENTRIES = CachePlugin.PLUGIN_ID + ".cpr0002";
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/PreferenceConstants.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/PreferenceConstants.java
deleted file mode 100644
index a51c4ae..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/PreferenceConstants.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.internet.cache.internal.preferences;
-
-/**
- * Constant definitions for plug-in preferences
- */
-public class PreferenceConstants 
-{
-  public static final String CACHE_ENABLED = "cacheEnabled";
-  
-  public static final String PROMPT_DISAGREED_LICENSES = "promptDisagreedLicenses";
-	
-}
diff --git a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/PreferenceInitializer.java b/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/PreferenceInitializer.java
deleted file mode 100644
index a7b4af9..0000000
--- a/plugins/org.eclipse.wst.internet.cache/src/org/eclipse/wst/internet/cache/internal/preferences/PreferenceInitializer.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.internet.cache.internal.preferences;
-
-import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
-import org.eclipse.jface.preference.IPreferenceStore;
-
-import org.eclipse.wst.internet.cache.internal.CachePlugin;
-
-/**
- * Class used to initialize default preference values.
- */
-public class PreferenceInitializer extends AbstractPreferenceInitializer 
-{
-  /**
-   * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
-   */
-  public void initializeDefaultPreferences() 
-  {
-	IPreferenceStore store = CachePlugin.getDefault().getPreferenceStore();
-    store.setDefault(PreferenceConstants.CACHE_ENABLED, true);
-    store.setDefault(PreferenceConstants.PROMPT_DISAGREED_LICENSES, false);
-  }
-}
diff --git a/plugins/org.eclipse.wst.validation.ui/.classpath b/plugins/org.eclipse.wst.validation.ui/.classpath
index 1c68a63..7acdda6 100644
--- a/plugins/org.eclipse.wst.validation.ui/.classpath
+++ b/plugins/org.eclipse.wst.validation.ui/.classpath
@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="validateui/"/>
+	<classpathentry kind="src" path="validateui"/>
 	<classpathentry kind="src" path="property_files"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="vf2"/>
+	<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/plugins/org.eclipse.wst.validation.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.validation.ui/.settings/org.eclipse.jdt.core.prefs
index 926709f..7f1fe24 100644
--- a/plugins/org.eclipse.wst.validation.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.wst.validation.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,71 @@
-#Wed Mar 29 04:09:11 EST 2006
+#Tue Feb 12 12:30:46 EST 2008
 eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=_
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=_
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.wst.validation.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.validation.ui/.settings/org.eclipse.jdt.ui.prefs
index 171d83d..4638d6c 100644
--- a/plugins/org.eclipse.wst.validation.ui/.settings/org.eclipse.jdt.ui.prefs
+++ b/plugins/org.eclipse.wst.validation.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -1,3 +1,6 @@
-#Wed Mar 29 04:09:11 EST 2006
+#Tue Feb 12 12:30:46 EST 2008
 eclipse.preferences.version=1
-internal.default.compliance=default
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.overrideannotation=true
diff --git a/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF
index 7df43f6..6e0dd26 100644
--- a/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF
@@ -1,21 +1,21 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Validation Framework UI
+Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.wst.validation.ui; singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.2.4.qualifier
 Bundle-Activator: org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin
-Bundle-Vendor: Eclipse.org
+Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.validation.internal.ui;x-internal:=true,
  org.eclipse.wst.validation.internal.ui.plugin;x-internal:=true
-Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.swt;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.frameworks.ui;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.validation;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)"
-Eclipse-AutoStart: true
+Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.swt;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.common.frameworks.ui;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.wst.validation;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.ui.forms;bundle-version="[3.3.100,4.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.validation.ui/about.html b/plugins/org.eclipse.wst.validation.ui/about.html
index 4ec5989..2199df3 100644
--- a/plugins/org.eclipse.wst.validation.ui/about.html
+++ b/plugins/org.eclipse.wst.validation.ui/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>May 2, 2006</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/plugins/org.eclipse.wst.validation.ui/build.properties b/plugins/org.eclipse.wst.validation.ui/build.properties
index 4ce34bd..1749ccd 100644
--- a/plugins/org.eclipse.wst.validation.ui/build.properties
+++ b/plugins/org.eclipse.wst.validation.ui/build.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2001, 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
 ###############################################################################
@@ -15,5 +15,6 @@
                icons/,\
                plugin.properties
 source.. = validateui/,\
-                                property_files/
+           property_files/,\
+           vf2/
 output.. = bin/
diff --git a/plugins/org.eclipse.wst.validation.ui/build/buildcontrol.properties b/plugins/org.eclipse.wst.validation.ui/build/buildcontrol.properties
deleted file mode 100644
index 5938f6c..0000000
--- a/plugins/org.eclipse.wst.validation.ui/build/buildcontrol.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2004 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
-###############################################################################
-CONTACT=ruthdaly@ca.ibm.com
-ComponentShortName=validationui
-ComponentFullName=Validation Framework UI
-ComponentCompetency=Validation
-JavaCompile.1=srcjar
-BuildVerification.1=dir
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/build/package.xml b/plugins/org.eclipse.wst.validation.ui/build/package.xml
deleted file mode 100644
index 0ae0c31..0000000
--- a/plugins/org.eclipse.wst.validation.ui/build/package.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<project name="com.ibm.etools.validation.ui" default="packagingPlugin" basedir="./..">
-    <target name="init">
-        <property name="packageDir" value=""/>
-        <property name="plugin.directory"  value="${basedir}"/>
-        <property name="plugin.id" value="com.ibm.etools.validation.ui"/>
-        <property name="plugin.version"  value=""/>
-    </target>
-    <target name="packagingPlugin" depends="init">
-        <echo message="${plugin.id}"/>
-        <copy todir="${packageDir}/plugins/${plugin.id}_${plugin.version}">
-            <fileset dir="${plugin.directory}">
-                <include name="plugin.properties"/>
-                <include name="plugin.xml"/>
-                <include name="runtime/validateui.jar"/>
-            </fileset>
-        </copy>
-    </target>
-</project>
diff --git a/plugins/org.eclipse.wst.validation.ui/build/sourcejar.txt b/plugins/org.eclipse.wst.validation.ui/build/sourcejar.txt
deleted file mode 100644
index b96f41c..0000000
--- a/plugins/org.eclipse.wst.validation.ui/build/sourcejar.txt
+++ /dev/null
@@ -1 +0,0 @@
-validateui
diff --git a/plugins/org.eclipse.wst.validation.ui/build/wsBuild.xml b/plugins/org.eclipse.wst.validation.ui/build/wsBuild.xml
deleted file mode 100644
index 77c0b82..0000000
--- a/plugins/org.eclipse.wst.validation.ui/build/wsBuild.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE project [
-	<!ENTITY baseBuild SYSTEM "file:../../wsBuildDef.xml">
-]>
-
-<project name="buildPlugin" default="build" basedir="./..">
-
-<!-- include the common xml build file -->
-&baseBuild;
-
-<target name="build" depends="prepare" if="plugin.id">
-	<antcall target="buildjar">
-		<param name="jarname" value="${defaultjarname}"/>
-		<param name="jarclasspath" value="${plugin.classpath}"/>
-	</antcall>
-</target>
-</project>
diff --git a/plugins/org.eclipse.wst.validation.ui/plugin.properties b/plugins/org.eclipse.wst.validation.ui/plugin.properties
index bc27522..b8d12f2 100644
--- a/plugins/org.eclipse.wst.validation.ui/plugin.properties
+++ b/plugins/org.eclipse.wst.validation.ui/plugin.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2001, 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
 ###############################################################################
@@ -14,3 +14,6 @@
 VBF_TITLE_PROPERTIES=Validation
 VBF_UI_POPUP_RUNVALIDATION=Validate
 VBF_TITLE_PREFERENCE=Validation
+
+Bundle-Name.0 = Validation Framework UI
+Bundle-Vendor.0 = Eclipse.org
diff --git a/plugins/org.eclipse.wst.validation.ui/plugin.xml b/plugins/org.eclipse.wst.validation.ui/plugin.xml
index bbabc9f..20502a4 100644
--- a/plugins/org.eclipse.wst.validation.ui/plugin.xml
+++ b/plugins/org.eclipse.wst.validation.ui/plugin.xml
@@ -31,7 +31,7 @@
          point="org.eclipse.ui.preferencePages">
       <page
             name="%VBF_TITLE_PREFERENCE"
-            class="org.eclipse.wst.validation.internal.ui.ValidationPreferencePage"
+            class="org.eclipse.wst.validation.ui.internal.preferences.ValidationPreferencePage"
             id="ValidationPreferencePage">
       </page>
    </extension>
@@ -43,11 +43,12 @@
    <extension
          point="org.eclipse.ui.propertyPages">
       <page
-            adaptable="true"
-            objectClass="org.eclipse.core.resources.IProject"
             name="%VBF_TITLE_PROPERTIES"
-            class="org.eclipse.wst.validation.internal.ui.ValidationPropertiesPage"
+            class="org.eclipse.wst.validation.ui.internal.preferences.ValidationPropertyPage"
             id="ValidationPropertiesPage">
+         <enabledWhen>
+	         <adapt type="org.eclipse.core.resources.IProject"/>
+         </enabledWhen>
       </page>
    </extension>
 
diff --git a/plugins/org.eclipse.wst.validation.ui/prepareforpii.xml b/plugins/org.eclipse.wst.validation.ui/prepareforpii.xml
deleted file mode 100644
index 1c3e278..0000000
--- a/plugins/org.eclipse.wst.validation.ui/prepareforpii.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<project name="PrepareForPII" default="main" basedir=".">
-		
-	<!-- Setup temp variables -->
-	<target name="init">
-		<property name="nlsDir" value="d:/NLS/Corona/0526"/>
-		<property name="plugin" value="com.ibm.etools.validation.ui"/>
-		<property name="plugindir" value="d:/workspaceCorona/${plugin}"/>
-		<property name="outputDir" value="${nlsDir}/${plugin}"/>
-		
-	
-	</target>
-
-	<!-- Create the destination dir -->
-	<target name="nlsDir" depends="init">
-		<mkdir dir="${nlsDir}"/>
-	</target>
-	
-	<!-- Create the destination dir -->
-	<target name="plugindir" depends="nlsDir">
-		<delete dir="${outputDir}"/>
-		<mkdir dir="${outputDir}"/>
-	</target>
-
-	<!-- Move the files to the correct locations in the workspace. -->
-	<target name="main" depends="plugindir">
-	
-		<messageIdGen folderPath = "${plugindir}" componentId = "E" />
-		
-		<copy todir = "${outputDir}/property_files" >
-			 <fileset dir="${plugindir}/property_files">
-           	  <include name="**/*.properties"/>
-  			 </fileset>
-  		</copy>
-  		
-  		<copy file="${plugindir}/plugin.properties" todir="${outputDir}"/>
-  		
-	</target>
-</project>
diff --git a/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/internal/ui/validationui.properties b/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/internal/ui/validationui.properties
new file mode 100644
index 0000000..4db102d
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/internal/ui/validationui.properties
@@ -0,0 +1,39 @@
+###############################################################################
+# Copyright (c) 2008 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
+###############################################################################
+
+SaveFilesDialog_saving=Saving Resources
+SaveFilesDialog_always_save=&Always save all modified resources automatically prior to validating
+SaveFilesDialog_save_all_resources=Save All Modified Resources
+SaveFilesDialog_must_save=All modified resources must be saved before this operation.
+
+PrefPage_always_save=&Save all modified resources automatically prior to validating
+
+RunValidationDialogTitle=Running Validation
+UnableToSave=Unable to set save automatically preference in save files for validation dialog:
+Validate=Validate
+
+ValResults=Validation Results
+
+ValError1Resource1=The validation completed, one error was discovered. One resource was validated in {0}.
+ValErrorsResource1=The validation completed, {0} errors were discovered. One resource was validated in {1}.
+ValWarn1Resource1=The validation completed with one warning. One resource was validated in {0}.
+ValWarnResource1=The validation completed with {0} warnings. One resource was validated in {1}.
+ValInfo1Resource1=The validation completed with one informational message. One resource was validated in {0}.
+ValInfoResource1=The validation completed with {0} informational messages. One resource was validated in {1}.
+
+ValError1Resources=The validation completed, one error was discovered. {0} resources were validated in {1}.
+ValErrorsResources=The validation completed, {0} errors were discovered. {1} resources were validated in {2}.
+ValWarn1Resources=The validation completed with one warning. {0} resources were validated in {1}.
+ValWarnResources=The validation completed with {0} warnings. {1} resources were validated in {2}.
+ValInfo1Resources=The validation completed with one informational message. {0} resources were validated in {1}.
+ValInfoResources=The validation completed with {0} informational messages. {1} resources were validated in {2}.
+
+ValSuccess=The validation completed with no errors or warnings.
diff --git a/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/ui/internal/messages.properties b/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/ui/internal/messages.properties
new file mode 100644
index 0000000..af8e823
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/ui/internal/messages.properties
@@ -0,0 +1,158 @@
+###############################################################################
+# Copyright (c) 2001, 2008 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
+###############################################################################
+#     *************************************************************************
+#     * Code oriented instructions:
+#     *
+#     * In the string, you may see the following special sequences:
+#     * a) {n}  where n is a number. These are replaceable parameters.
+#     * b) ''  In .properties files, in order to see one apostrophe (') in the final
+#     *    string, sometimes two apostrophes must be entered in the string. In the translated
+#     *    string, if there is at least one {n} in the string, then to show one apostrophe
+#     *    to the user, put two apostrophes in the string. If there are no {n} in the string,
+#     *    then put one apostrophe.
+#     *    For example, say that you want the user to read "George's file". 
+#     *        GEORGE=George's file was on the desk.
+#     *        GEORGE2=George''s file and {0} were on the desk.
+#     *    GEORGE uses one apostrophe because there are no {n} and GEORGE2
+#     *    uses two apostrophes because there is a {n}.
+#     * c) '' text '' where text can be any word(s). The text between the double
+#     *    apostrophes should not be translated. 
+#     * d) <text> where text can be any word(s). The text between the angle
+#     *    brackets should NOT be translated.
+#     * e) "text" where text can be any word(s). The text between the quotation 
+#     *    marks should NOT be translated.
+#     *    
+#     *************************************************************************
+#     * Other instructions
+#     * a) Do not translate any text that is on a line which begins with a comment 
+#     *    symbol (#).
+#     * b) Do not translate these words: 
+#     *        schema, EJB, RDB, JAR, RMI, BMP, CMP, OOSQL
+#     * c) Please return the .properties files using the same directory structure.
+#     *    This is necessary because two of the files have the same name.
+#     *
+#     *************************************************************************
+# Any other comments to the translators are on lines which start like this:  # 2TC:
+#
+# Version 1.12
+#
+#
+# ID:
+#    VBF - Validation Builder Framework
+#
+
+# 
+# Begin Validation Builder Framework UI Strings
+#
+# IDs:
+#    VBF_EXC=Exception or error text
+#    VBF_UI=UI label
+#
+PREF_BUTTON_OVERRIDE=Allow projects to override these preference settings
+PREF_BUTTON_ENABLEALL=Enable All
+PREF_BUTTON_DISABLEALL=Disable All
+PREF_VALLIST_TITLE=The selected validators will run when validation is performed:
+PREF_MNU_MANUAL=&Manual
+PREF_MNU_BUILD=&Build
+PREF_MNU_SETTINGS=&Settings...
+
+VBF_EXC_INTERNAL_TITLE=Internal error
+VBF_EXC_INTERNAL_PAGE=An unexpected error occurred; click Cancel to close the wizard.
+
+VBF_EXC_INVALID_REGISTER=Validators can run only on open resources.
+ProjectOverridesNotAllowed=The workspace validation preferences do not allow projects to override the workspace settings. In order to allow project settings you need to configure the workspace settings to allow project overrides.  
+ 
+VBF_UI_NO_VALIDATORS_INSTALLED=No validators are installed.
+
+DISABLE_VALIDATION=Suspend all validators
+
+DelegatesDialogTitle=Validator Preferences
+DelegatesComboLabel=Implementation:
+ADD_VALIDATION_BUILDER=Add Validation Builder to project
+ConfigWsSettings=Configure Workspace Settings...
+VALIDATOR=Validator
+MANUAL=Manual
+BUILD=Build
+SETTINGS=Settings
+
+SaveFilesDialog_saving=Saving Resources
+SaveFilesDialog_always_save=&Always save all modified resources automatically prior to validating
+SaveFilesDialog_save_all_resources=Save All Modified Resources
+SaveFilesDialog_must_save=All modified resources must be saved before this operation.
+
+PrefPage_always_save=&Save all modified resources automatically prior to validating
+PrefPageConfirmDialog=Show a confirmation dialog when performing manual validations
+
+RunValidationDialogTitle=Running Validation
+
+fdTitle=Validation Filters for {0}
+fdNoFilters=The validator does not have currently have any filters installed.
+ErrConfig=Extension configuration error. An internal error has happened, the validator {0} has incorrectly configured the validation extension point.
+
+FilterHelp=Filter rules are grouped into groups. Inside of any one group the rules are combined by using the logical OR operator. There are two types of groups Include and Exclude. If any of the rules in the Exclude group match, the resource is not validated. If there are Include groups, at least one rule from each group must match before the resource is validated.
+ButtonAddGroupInclude=Add Include Group...
+ButtonAddGroupExclude=Add Exclude Group...
+ButtonAddRule=Add Rule...
+ButtonRemove=Remove 
+
+LabelEnableProjectSpecific=Enable project specific settings
+
+LabelExtension=File extension
+LabelFile=Folder or file name
+LabelProjects=Project nature
+LabelFacets=Facet
+LabelContentType=Content Type
+
+# Note to translators, keep the <A> and </A> tags exactly as they are
+DoNotShowResults=Do not show this dialog in the future.
+
+DescExtension=File extension, for example "html" for HTML files.
+DescFile=Either a folder, a relative file, or a fully qualified file name.
+DescProjects=A project nature.
+DescFacets=A facet.
+DescContentType=A content type, for example the XML content type.
+
+ErrorsWarnings=Errors/Warnings
+
+Validation=Validation
+ValidationStatus=Validation Status
+
+ErrSummary=Validation results. Errors={0}, Warnings={1}, Information={2}
+ValidationSuccessful=Validation was successful
+
+FrWizard=New Filter Rule Wizard
+FrSelectFilterType=Select Filter Type
+FrFileExtension=File Extension
+FrFileExtensionLabel=File extension, for example html:
+FrCaseSensitive=Is the comparison case sensitive?
+FrExactMatch=Check this if the content type needs to match exactly. Do not check it, if sub types need to match as well.
+FrSimpleFileName=For file based comparisons, use only the simple file name.
+FrFolderOrFile=Folder or File Name
+FrFolderOrFileLabel=File or folder:
+FrBrowseFile=Browse File...
+FrFileFilter=Select the file that will serve as the filter
+FrBrowseFolder=Browse Folder...
+FrFolderFilter=Select the folder that will serve as the filter
+FrProjectNature=Project Nature
+FrProjectNatureLabel=Project nature:
+FrFacit=Facet
+FrFacitLabel=Facet id:
+FrContentType=Content Type
+FrContentTypeLabel=Content Type:
+FrMsgSev=Select the severity level for the following problems
+
+RebuildTitle=Validation Settings Changed
+RebuildMsg=The validation settings have changed. A full rebuild is required for the changes to take effect. Do the full build now?
+
+#
+# End Validation Builder Framework UI Strings
+#
+
diff --git a/plugins/org.eclipse.wst.validation.ui/property_files/validate_ui.properties b/plugins/org.eclipse.wst.validation.ui/property_files/validate_ui.properties
deleted file mode 100644
index ba91858..0000000
--- a/plugins/org.eclipse.wst.validation.ui/property_files/validate_ui.properties
+++ /dev/null
@@ -1,128 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2004 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
-###############################################################################
-#     *************************************************************************
-#     * Code oriented instructions:
-#     *
-#     * In the string, you may see the following special sequences:
-#     * a) {n}  where n is a number. These are replaceable parameters.
-#     * b) ''  In .properties files, in order to see one apostrophe (') in the final
-#     *    string, sometimes two apostrophes must be entered in the string. In the translated
-#     *    string, if there is at least one {n} in the string, then to show one apostrophe
-#     *    to the user, put two apostrophes in the string. If there are no {n} in the string,
-#     *    then put one apostrophe.
-#     *    For example, say that you want the user to read "George's file". 
-#     *        GEORGE=George's file was on the desk.
-#     *        GEORGE2=George''s file and {0} were on the desk.
-#     *    GEORGE uses one apostrophe because there are no {n} and GEORGE2
-#     *    uses two apostrophes because there is a {n}.
-#     * c) '' text '' where text can be any word(s). The text between the double
-#     *    apostrophes should not be translated. 
-#     * d) <text> where text can be any word(s). The text between the angle
-#     *    brackets should NOT be translated.
-#     * e) "text" where text can be any word(s). The text between the quotation 
-#     *    marks should NOT be translated.
-#     *    
-#     *************************************************************************
-#     * Other instructions
-#     * a) Do not translate any text that is on a line which begins with a comment 
-#     *    symbol (#).
-#     * b) Do not translate these words: 
-#     *        schema, EJB, RDB, JAR, RMI, BMP, CMP, OOSQL
-#     * c) Please return the .properties files using the same directory structure.
-#     *    This is necessary because two of the files have the same name.
-#     *
-#     *************************************************************************
-# Any other comments to the translators are on lines which start like this:  # 2TC:
-#
-# Version 1.12
-#
-#
-# ID:
-#    VBF - Validation Builder Framework
-#
-
-# 
-# Begin Validation Builder Framework UI Strings
-#
-# IDs:
-#    VBF_EXC=Exception or error text
-#    VBF_UI=UI label
-#
-PREF_BUTTON_OVERRIDE=Allow projects to override these preference settings
-PREF_BUTTON_FULL=Run validation when you manually build a project
-PREF_BUTTON_AUTO=Run validation automatically when you save changes to a resource
-PREF_BUTTON_ENABLEALL=Enable All
-PREF_BUTTON_DISABLEALL=Disable All
-PREF_VALLIST_TITLE=The selected validators will run when validation is performed:
-PREF_LBL_MAXMSGS=Maximum number of validation messages on a project
-PREF_ERROR_INT=IWAE0001E The number of validation messages must be a positive integer.
-PREF_BUTTON_ASYNC=Run validation in a background thread
-PREF_MNU_MANUAL=&Manual
-PREF_MNU_BUILD=&Build
-PREF_MNU_SETTINGS=&Settings...
-
-PROP_BUTTON_OVERRIDE=Override validation preferences
-PROP_BUTTON_FULL=Run validation when you manually build {0}
-VBF_UI_LBL_AUTO_VALIDATE=Run validation automatically when you save changes to {0} resources.
-PROP_BUTTON_SELECTALL=Select All
-PROP_BUTTON_DESELECTALL=Deselect All
-VBF_UI_LBL_DESC=The selected validators will run when {0} is validated:
-PROP_LBL_MAXMSSGS=Maximum number of validation messages on {0}
-PROP_ERROR_INT=IWAE0002E The number of validation messages must be a positive integer.
-PROP_LBL_CANNOTOVERRIDE=To enable the "Override validation preferences" checkbox, select the "Allow projects to override these preference settings" checkbox in the workbench Preferences dialog.
-PROP_BUTTON_ASYNC=Run validation in a background thread on {0}
-
-VBF_EXC_INTERNAL=IWAE0003E An unexpected error occurred during validation. Read the log file.
-VBF_EXC_INTERNAL_PROJECT=IWAE0004E An unexpected error occurred during validation of project {0}. Read the log file.
-VBF_EXC_INTERNAL_TITLE=IWAE0005E Internal error
-VBF_EXC_INTERNAL_PAGE=IWAE0006E An unexpected error occured; click Cancel to close the wizard.
-
-VBF_EXC_INVALID_REGISTER=IWAE0007E Validators can run only on open resources.
-
-VBF_UI_NO_VALIDATORS_INSTALLED=No validators are installed.
-
-VBF_UI_LBL_NOVALIDATORS_DESC=It is not possible to run any Validators, at the project level, for this type of project.
-
-VBF_UI_NO_VALIDATORS_ENABLED=Enable at least one validator on {0}. To select the validators that you want to run, open this project''s Properties wizard, turn to the Validation section, and select one or more validators in the list.
-
-VBF_UI_CHECKBOXGROUP_TITLE=Validators
-
-VBF_UI_CLOSED_PROJECT=Validation cannot run on a closed project. Open project {0} and try again.
-VBF_UI_MSSGBOX_TITLE_NONINC=Some of the Validators Do Not Support Automatic Validation
-VBF_UI_AUTO_ON_NONINC=Although automatic validation has been selected, some of the validators will not be invoked during the automatic processing. The following validators do not support automatic validation: {0}
-
-VBF_UI_PRJNEEDINPUT=Project {0} and its children were not validated because none of the enabled validators validates that type of project.
-VBF_UI_RESNEEDINPUT=Resource {0} was not validated because none of the enabled validators validates that type of resource.
-
-VBF_UI_MAX_REPORTED=Validation was terminated on {0} because the maximum number of messages were reported.
-VBF_UI_PRJVALIDATED=Validation of project {0} is complete.
-VBF_UI_RESVALIDATED=Validation of resource {0} is complete.
-VBF_UI_CANCELLED=Validation cancelled.
-VBF_UI_COMPLETE=Validation completed.
-VBF_UI_CLOSE=Close
-VBF_UI_STATUS=Status
-VBF_UI_RESCANCELLED=Validation was cancelled on {0}.
-DISABLE_VALIDATION=Suspend all validators
-INFO=This preference applies to the projects that have org.eclipse.wst.validation.validationbuilder defined.Validators are run on the projects based on the filters defined in the org.eclipse.wst.validation.validator extension point.
-
-DELEGATES_DIALOG_TITLE=Validator Preferences
-DELEGATES_COMBO_LABEL=Implementation:
-ADD_VALIDATION_BUILDER=Add Validation Builder to project
-CONFIG_WS_SETTINGS=Configure Workspace Settings...
-VALIDATOR=Validator
-MANUAL=Manual
-BUILD=Build
-SETTINGS=Settings
-
-#
-# End Validation Builder Framework UI Strings
-#
-
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ContextIds.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ContextIds.java
index b4b36f0..d8ce485 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ContextIds.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ContextIds.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 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
  *******************************************************************************/
@@ -43,4 +43,4 @@
 	//	public static final String VALIDATION_PREFERENCE_PAGE_AUTO_DISABLED_NOINCVALCONFIG = PREFIX +
 	// ".jvgp0023"; //$NON-NLS-1$
 	public static final String VALIDATION_PREFERENCE_PAGE_MAX_MESSAGES = PREFIX + ".jvgp0030"; //$NON-NLS-1$
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/DelegatingValidatorPreferencesDialog.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/DelegatingValidatorPreferencesDialog.java
index c02ccee..e00900a 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/DelegatingValidatorPreferencesDialog.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/DelegatingValidatorPreferencesDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 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
@@ -36,6 +36,7 @@
 import org.eclipse.wst.validation.internal.ValidatorMetaData;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegateDescriptor;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
+import org.eclipse.wst.validation.ui.internal.ValUIMessages;
 
 /**
  * Dialog used to allow the user to select a validator delegate from the list of
@@ -64,7 +65,7 @@
    * @param delegateID
    *          the ID of the currently selected validator delegate.
    */
-  protected DelegatingValidatorPreferencesDialog(Shell parentShell, ValidatorMetaData vmd, String delegateID)
+  public DelegatingValidatorPreferencesDialog(Shell parentShell, ValidatorMetaData vmd, String delegateID)
   {
     super(parentShell);
 
@@ -81,7 +82,7 @@
   {
     super.createDialogArea(parent);
 
-    getShell().setText(ResourceHandler.getExternalizedMessage(ResourceConstants.DELEGATES_DIALOG_TITLE));
+    getShell().setText(ValUIMessages.DelegatesDialogTitle);
 
     GridLayout layout = new GridLayout();
     parent.setLayout(layout);
@@ -106,7 +107,7 @@
 
     Label comboLabel = new Label(group, SWT.NONE);
     comboLabel.setLayoutData(new GridData());
-    comboLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.DELEGATES_COMBO_LABEL));
+    comboLabel.setText(ValUIMessages.DelegatesComboLabel);
     
     Combo combo = new Combo(group, SWT.READ_ONLY);
     GridData comboGridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ProgressAndTextDialog.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ProgressAndTextDialog.java
deleted file mode 100644
index 63af6e3..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ProgressAndTextDialog.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.validation.internal.ui;
-
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Cursor;
-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.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-
-/**
- * Display both progress status and cumulative status (text) to the user.
- */
-public class ProgressAndTextDialog extends ProgressMonitorDialog {
-	protected static final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$
-	protected Text text = null;
-	protected boolean cancelPressed = false; // Has the "Cancel" button been clicked?
-	protected boolean closePressed = false; // Has the "Close" button been clicked?
-	protected boolean operationDone = false; // Has the operation completed?
-	protected Cursor arrowCursor; // The cursor used in the cancel button.
-
-
-	public ProgressAndTextDialog(Shell parent) {
-		super(parent);
-		setShellStyle(SWT.BORDER | SWT.TITLE | SWT.RESIZE); // do not make this dialog modal
-		setBlockOnOpen(false); // do not force the user to close this dialog before using eclipse
-	}
-
-	public Control createDialogArea(Composite parent) {
-		super.createDialogArea(parent);
-
-		final int hHint = 100;
-		final int wHint = 250;
-
-		Composite composite = new Composite(parent, SWT.NONE);
-		Label textLabel = new Label(composite, SWT.LEFT | SWT.WRAP);
-		textLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_STATUS));
-		GridData labelData = new GridData();
-		labelData.horizontalSpan = 2;
-		textLabel.setLayoutData(labelData);
-
-		composite.setLayout(new GridLayout()); // use the layout's default preferences
-		GridData data = new GridData(GridData.FILL_BOTH);
-		data.heightHint = hHint;
-		data.widthHint = wHint;
-		data.horizontalSpan = 2;
-		composite.setLayoutData(data);
-
-		text = new Text(composite, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.READ_ONLY | SWT.BORDER);
-		GridData d = new GridData(GridData.FILL_BOTH);
-		text.setLayoutData(d);
-
-		return composite;
-	}
-
-	public void addText(final String messageString) {
-		if (getShell() != null) {
-			getShell().getDisplay().asyncExec(new Runnable() {
-				public void run() {
-					text.append(messageString);
-					text.append(NEWLINE);
-				}
-			});
-		}
-	}
-
-	/**
-	 * Do not dismiss the dialog until the user presses the Close button.
-	 */
-	public boolean close() {
-		if (closePressed) {
-			// Cancel button converted to "Close" button, and user clicked the "Close" button
-			return super.close();
-		}
-
-		// Turn the "cancel" button into a "Close" button and keep the window open until
-		// the user clicks the "Close" button.
-		progressIndicator.setVisible(false);
-		if (arrowCursor == null)
-			arrowCursor = new Cursor(cancel.getDisplay(), SWT.CURSOR_ARROW);
-		getShell().setCursor(arrowCursor);
-		if (cancelPressed) {
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_CANCELLED));
-		} else {
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_COMPLETE));
-		}
-		cancel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_CLOSE));
-		cancel.setEnabled(true);
-		return false;
-	}
-
-	protected void internalCancelPressed() {
-		// Has this method been called because "Cancel" has been clicked or
-		// because "Close" has been clicked?
-		if (operationDone) {
-			// "Close" was clicked.
-			closePressed = true;
-			close();
-		} else {
-			// "Cancel" was clicked.
-			cancelPressed = true;
-		}
-	}
-
-	/**
-	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(Composite)
-	 */
-	protected void createButtonsForButtonBar(Composite parent) {
-		super.createButtonsForButtonBar(parent);
-
-		// Cannot override cancelPressed() because of the way that
-		// ProgressMonitorDialog is coded.
-		// The ProgressMonitorDialog parent, instead of overriding the
-		// cancelPressed() method, added an anonymous Listener to the
-		// cancel button. When the button's Listener is invoked, if
-		// close() has been called by cancelPressed(), then an
-		// exception is thrown (SWTException - "Widget is disposed').
-		// Work around this by adding an anonymous
-		// cancel listener, which will be called after the parent's
-		// cancel listener, and this class' listener will call close().
-		cancel.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				internalCancelPressed();
-			}
-		});
-	}
-
-	/**
-	 * @see org.eclipse.jface.operation.IRunnableContext#run(boolean, boolean,
-	 *      IRunnableWithProgress)
-	 */
-	public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException {
-		try {
-			super.run(fork, cancelable, runnable);
-		} finally {
-			operationDone = true;
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceConstants.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceConstants.java
deleted file mode 100644
index b9abed1..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceConstants.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.validation.internal.ui;
-
-
-/**
- * This interface contains the constants used as keys into the ResourceBundle.
- */
-public interface ResourceConstants {
-	// Internal error has occurred.
-	public static final String VBF_EXC_INTERNAL = "VBF_EXC_INTERNAL"; //$NON-NLS-1$
-
-	// Internal error occurred while constructing or running the Properties or Preference page.
-	public static final String VBF_EXC_INTERNAL_PAGE = "VBF_EXC_INTERNAL_PAGE"; //$NON-NLS-1$
-
-	// Internal error has occurred.
-	public static final String VBF_EXC_INTERNAL_PROJECT = "VBF_EXC_INTERNAL_PROJECT"; //$NON-NLS-1$
-	public static final String VBF_EXC_INTERNAL_TITLE = "VBF_EXC_INTERNAL_TITLE"; //$NON-NLS-1$
-
-	// Should never happen, since plugin.xml specifies an IProject objectClass filter, but if the
-	// ValidationPropertiesPage is shown on a non-IProject resource, this message will be what's
-	// shown.
-	public static final String VBF_EXC_INVALID_REGISTER = "VBF_EXC_INVALID_REGISTER"; //$NON-NLS-1$
-
-	// On the Properties Page, this is the string which explains to the user what to do. The string
-	// is
-	// displayed in a label.
-	public static final String VBF_UI_LBL_DESC = "VBF_UI_LBL_DESC"; //$NON-NLS-1$
-
-	// On the Properties Page, this is the string which explains to the user what to do. The string
-	// is
-	// displayed in a label.
-	public static final String VBF_UI_LBL_NOVALIDATORS_DESC = "VBF_UI_LBL_NOVALIDATORS_DESC"; //$NON-NLS-1$
-
-	// Label on the checkbox button of the validator page
-	public static final String VBF_UI_LBL_AUTO_VALIDATE = "VBF_UI_LBL_AUTO_VALIDATE"; //$NON-NLS-1$
-
-	// If the user has selected "Validate this project" from the popupMenu, but has no validators
-	// enabled, tell them that nothing will run.
-	public static final String VBF_UI_NO_VALIDATORS_ENABLED = "VBF_UI_NO_VALIDATORS_ENABLED"; //$NON-NLS-1$
-
-	// On the Properties Page, this is the title of the group which encloses the CheckboxTableViewer
-	// (the list of configured validators).
-	public static final String VBF_UI_CHECKBOXGROUP_TITLE = "VBF_UI_CHECKBOXGROUP_TITLE"; //$NON-NLS-1$
-	public static final String VBF_UI_AUTO_ON_NONINC = "VBF_UI_AUTO_ON_NONINC"; //$NON-NLS-1$
-	public static final String VBF_UI_MSSGBOX_TITLE_NONINC = "VBF_UI_MSSGBOX_TITLE_NONINC"; //$NON-NLS-1$
-	public static final String VBF_UI_AUTO_NOTE = "VBF_UI_AUTO_NOTE"; //$NON-NLS-1$
-	public static final String VBF_UI_AUTO_NOTE_TEXT = "VBF_UI_AUTO_NOTE_TEXT"; //$NON-NLS-1$
-	public static final String VBF_UI_MENUITEM_TEXT = "VBF_UI_MENUITEM_TEXT"; //$NON-NLS-1$
-	public static final String VBF_UI_MENUITEM_TEXT_DEFAULT = "VBF_UI_MENUITEM_TEXT_DEFAULT"; //$NON-NLS-1$
-	public static final String VBF_UI_CLOSED_PROJECT = "VBF_UI_CLOSED_PROJECT"; //$NON-NLS-1$
-	public static final String VBF_UI_NO_VALIDATORS_INSTALLED = "VBF_UI_NO_VALIDATORS_INSTALLED"; //$NON-NLS-1$
-
-	public static final String VBF_UI_POPUP_RUNVALIDATION = "%VBF_UI_POPUP_RUNVALIDATION"; //$NON-NLS-1$
-
-	/* package */static final String PREF_BUTTON_ENABLEALL = "PREF_BUTTON_ENABLEALL"; //$NON-NLS-1$
-	/* package */static final String PREF_BUTTON_DISABLEALL = "PREF_BUTTON_DISABLEALL"; //$NON-NLS-1$
-	/* package */static final String PREF_VALLIST_TITLE = "PREF_VALLIST_TITLE"; //$NON-NLS-1$
-	/* package */static final String PREF_BUTTON_AUTO = "PREF_BUTTON_AUTO"; //$NON-NLS-1$
-	/* package */static final String PREF_BUTTON_OVERRIDE = "PREF_BUTTON_OVERRIDE"; //$NON-NLS-1$
-	/* package */static final String PREF_BUTTON_FULL = "PREF_BUTTON_FULL"; //$NON-NLS-1$
-	/* package */static final String PREF_LBL_MAXMSGS = "PREF_LBL_MAXMSGS"; //$NON-NLS-1$
-  /* package */static final String PREF_MNU_MANUAL = "PREF_MNU_MANUAL"; //$NON-NLS-1$
-  /* package */static final String PREF_MNU_BUILD = "PREF_MNU_BUILD"; //$NON-NLS-1$
-  /* package */static final String PREF_MNU_SETTINGS = "PREF_MNU_SETTINGS"; //$NON-NLS-1$
-  /* package */static final String PROP_BUTTON_OVERRIDE = "PROP_BUTTON_OVERRIDE"; //$NON-NLS-1$
-	/* package */static final String PROP_BUTTON_FULL = "PROP_BUTTON_FULL"; //$NON-NLS-1$
-	/* package */static final String PROP_BUTTON_SELECTALL = "PROP_BUTTON_SELECTALL"; //$NON-NLS-1$
-	/* package */static final String PROP_BUTTON_DESELECTALL = "PROP_BUTTON_DESELECTALL"; //$NON-NLS-1$
-	/* package */static final String PROP_LBL_MAXMSSGS = "PROP_LBL_MAXMSSGS"; //$NON-NLS-1$
-	/* package */static final String PREF_ERROR_INT = "PREF_ERROR_INT"; //$NON-NLS-1$
-	/* package */static final String PROP_ERROR_INT = "PROP_ERROR_INT"; //$NON-NLS-1$
-
-	/* package */static final String VBF_UI_PRJNEEDINPUT = "VBF_UI_PRJNEEDINPUT"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_RESNEEDINPUT = "VBF_UI_RESNEEDINPUT"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_MAX_REPORTED = "VBF_UI_MAX_REPORTED"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_PRJVALIDATED = "VBF_UI_PRJVALIDATED"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_RESVALIDATED = "VBF_UI_RESVALIDATED"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_CANCELLED = "VBF_UI_CANCELLED"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_COMPLETE = "VBF_UI_COMPLETE"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_CLOSE = "VBF_UI_CLOSE"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_STATUS = "VBF_UI_STATUS"; //$NON-NLS-1$
-	/* package */static final String VBF_UI_RESCANCELLED = "VBF_UI_RESCANCELLED"; //$NON-NLS-1$
-	
-	/* package */static final String DISABLE_VALIDATION = "DISABLE_VALIDATION"; //$NON-NLS-1$
-	/* package */static final String ADD_VALIDATION_BUILDER = "ADD_VALIDATION_BUILDER"; //$NON-NLS-1$
-	static final String INFO = "INFO"; //$NON-NLS-1$
-  
-  String DELEGATES_DIALOG_TITLE = "DELEGATES_DIALOG_TITLE"; //$NON-NLS-1$
-  String DELEGATES_COMBO_LABEL = "DELEGATES_COMBO_LABEL"; //$NON-NLS-1$
-  
-  	public static final String CONFIG_WS_SETTINGS="CONFIG_WS_SETTINGS";//$NON-NLS-1$
-  	public static final String VALIDATOR = "VALIDATOR"; //$NON-NLS-1$
-  	public static final String MANUAL = "MANUAL"; //$NON-NLS-1$
-  	public static final String BUILD = "BUILD"; //$NON-NLS-1$
-  	public static final String SETTINGS = "SETTINGS"; //$NON-NLS-1$
-  	
- }
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceHandler.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceHandler.java
deleted file mode 100644
index 531ff42..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ResourceHandler.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.validation.internal.ui;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.logging.Level;
-
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
-
-
-/**
- * This class retrieves the Strings from the .properties file appropriate for the machine's Locale.
- */
-public class ResourceHandler {
-	//TODO Make this class final once the public ResourceHandler has been deleted.
-	private static ResourceBundle _bundle = null;
-
-	protected ResourceHandler() {
-		//TODO Make this method private once the public ResourceHandler has been deleted.
-		super();
-	}
-
-	/**
-	 * Return the resource bundle which contains the messages, as identified by
-	 */
-	public static ResourceBundle getBundle() {
-		if (_bundle == null) {
-			try {
-				_bundle = ResourceBundle.getBundle(ValidationUIPlugin.getBundleName());
-			} catch (MissingResourceException exc) {
-				_bundle = null;
-				Logger logger = WTPUIPlugin.getLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
-					LogEntry entry = ValidationUIPlugin.getLogEntry();
-					entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getBundle()"); //$NON-NLS-1$
-					entry.setText("Cannot find bundle " + ValidationUIPlugin.getBundleName()); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.FINE, entry);
-				}
-			}
-		}
-		return _bundle;
-	}
-
-	public static String getExternalizedMessage(String key) {
-		try {
-			ResourceBundle bundle = getBundle();
-			if (bundle == null) {
-				Logger logger = WTPUIPlugin.getLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
-					LogEntry entry = ValidationUIPlugin.getLogEntry();
-					entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String)"); //$NON-NLS-1$
-					entry.setText("Resource bundle is null"); //$NON-NLS-1$
-					logger.write(Level.FINE, entry);
-				}
-				return key;
-			}
-
-			return bundle.getString(key);
-		} catch (NullPointerException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String)"); //$NON-NLS-1$
-				entry.setText("Cannot find message id " + key); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
-		}
-		return key;
-	}
-
-	public static String getExternalizedMessage(String key, String[] parms) {
-		String res = ""; //$NON-NLS-1$
-		try {
-			res = java.text.MessageFormat.format(getExternalizedMessage(key), parms);
-		} catch (MissingResourceException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String, String[])"); //$NON-NLS-1$
-				entry.setText("Cannot find message id " + key); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
-		} catch (NullPointerException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String, String[])"); //$NON-NLS-1$
-				entry.setText("Cannot format message id " + key + " with " + parms.length + " parameters."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
-		}
-		return res;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/SaveFilesDialog.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/SaveFilesDialog.java
index 9807bfd..2deb872 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/SaveFilesDialog.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/SaveFilesDialog.java
@@ -1,13 +1,14 @@
-/**
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2006, 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/cpl-v10.html
- * 
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
  * Contributors:
  *   IBM - Initial API and implementation
- */
+ * /
+ *******************************************************************************/
 package org.eclipse.wst.validation.internal.ui;
 
 import java.lang.reflect.InvocationTargetException;
@@ -66,7 +67,8 @@
 				  }
 				  catch(InvocationTargetException exc)
 				  {
-					Logger.getLogger(ValidationUIPlugin.getBundleName()).log(Level.WARNING, "Unable to set save automatically preference in save files for validation dialog: " + exc);
+					Logger.getLogger(ValidationUIPlugin.getBundleName()).log(Level.WARNING, 
+						ValidationUIMessages.UnableToSave + exc);
 				  }
 				  
 				}
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/SaveFilesHelper.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/SaveFilesHelper.java
index 4e15e0a..f323332 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/SaveFilesHelper.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/SaveFilesHelper.java
@@ -1,17 +1,18 @@
-/**
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2006, 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/cpl-v10.html
- * 
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
  * Contributors:
  *   IBM - Initial API and implementation
- */
+ * /
+ *******************************************************************************/
 package org.eclipse.wst.validation.internal.ui;
 
-import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 
@@ -38,8 +39,8 @@
 	 * 			An array of IEditorParts containing all the dirty editors for the files in the list.
 	 */
 	public static IEditorPart[] getDirtyEditors(List files) {
-		Set inputs = new HashSet();
-		List result = new ArrayList(0);
+		Set<IEditorInput> inputs = new HashSet<IEditorInput>();
+		List<IEditorPart> result = new LinkedList<IEditorPart>();
 		IWorkbench workbench = PlatformUI.getWorkbench();
 		IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
 		for (int i = 0; i < windows.length; i++) {
@@ -61,6 +62,6 @@
 				}
 			}
 		}
-		return (IEditorPart[]) result.toArray(new IEditorPart[result.size()]);
+		return result.toArray(new IEditorPart[result.size()]);
 	}
 }
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidateAction.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidateAction.java
index d52b12d..a04c829 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidateAction.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidateAction.java
@@ -1,25 +1,26 @@
-/***************************************************************************************************
- * Copyright (c) 2001, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.validation.internal.ui;
 
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.actions.SelectionListenerAction;
-import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
 
 
 public class ValidateAction extends SelectionListenerAction {
 	protected ValidationMenuAction delegate;
 
 	public ValidateAction() {
-		super(ValidationUIPlugin.getResourceString(ResourceConstants.VBF_UI_POPUP_RUNVALIDATION));
+		super(ValidationUIMessages.Validate);
 		delegate = new ValidationMenuAction();
 	}
 
@@ -63,4 +64,4 @@
 	protected IResource[] getResource(Object selected) {
 		return null;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationJob.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationJob.java
index 860dfe7..aa37f64 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationJob.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationJob.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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.wst.validation.internal.ui;
 
 import java.util.Map;
@@ -9,7 +19,7 @@
 public class ValidationJob extends Job {
 
 
-	private Map projects = null;
+	private Map projects;
 	public ValidationJob(String name) {
 		super(name);
 	}
@@ -24,4 +34,8 @@
 
 		return null;
 	}
+	
+	protected Map getProjects() {
+		return projects;
+	}
 }
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationMenuAction.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationMenuAction.java
index d2a5d13..126c407 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationMenuAction.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationMenuAction.java
@@ -1,40 +1,33 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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.wst.validation.internal.ui;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -42,44 +35,37 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
+import org.eclipse.wst.validation.ValidationFramework;
 import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.GlobalConfiguration;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
+import org.eclipse.wst.validation.internal.DisabledResourceManager;
+import org.eclipse.wst.validation.internal.ValType;
 import org.eclipse.wst.validation.internal.ValidationRegistryReader;
 import org.eclipse.wst.validation.internal.ValidationSelectionHandlerRegistryReader;
-import org.eclipse.wst.validation.internal.operations.ManualIncrementalValidatorsOperation;
-import org.eclipse.wst.validation.internal.operations.ManualValidatorsOperation;
-import org.eclipse.wst.validation.internal.operations.ValidatorManager;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
+import org.eclipse.wst.validation.ui.internal.ManualValidationRunner;
 
 /**
  * This class implements the pop-up menu item "Run Validation" When the item is selected, this
  * action triggers a validation of the project, using all configured, enabled validators.
  */
 public class ValidationMenuAction implements IViewActionDelegate {
-	private ISelection _currentSelection = null;
+	private ISelection 		_currentSelection;
 	protected static final String SEP = "/"; //$NON-NLS-1$
-	private Display _currentDisplay = null;
-	private IResourceVisitor _folderVisitor = null;
-	private IResourceVisitor _projectVisitor = null;
-	private Map _selectedResources = null;
-	//protected IWorkbenchContext workbenchContext;
+	private Display 		_currentDisplay;
+	private IResourceVisitor _folderVisitor;
+	private IResourceVisitor _projectVisitor;
+	private Map<IProject, Set<IResource>> _selectedResources;
 
 	public ValidationMenuAction() {
-		super();
-		_currentDisplay = Display.getCurrent(); // cache the display before
-		// this action is forked. After
-		// the action is forked,
-		// Display.getCurrent() returns
-		// null.
-		_selectedResources = new HashMap();
+		// cache the display before this action is forked. After the action is forked,
+		// Display.getCurrent() returns null.
+		_currentDisplay = Display.getCurrent(); 
+		_selectedResources = new HashMap<IProject, Set<IResource>>();
 	}
 
 	private Display getDisplay() {
@@ -100,10 +86,6 @@
 		return shell;
 	}
 
-	private ISelection getCurrentSelection() {
-		return _currentSelection;
-	}
-
 	/**
 	 * Return a map of the selected elements. Each key of the map is an IProject, and the value is a
 	 * Set of the selected resources in that project. If a project is selected, and nothing else in
@@ -111,26 +93,19 @@
 	 * project is selected, and some files/folders in the project are also selected, only the
 	 * files/folders will be validated. If a folder is selected, all of its contents are also
 	 * validated.
+	 * 
+	 * @return null if there is no selection.
 	 */
-	// TODO: Check this method for selected resources.
-	private Map loadSelected(ValidateAction action, boolean refresh) {
-		if (refresh) {
-			// selectionChanged(IAction, ISelection) has been called. Flush the
-			// existing cache of resources and
-			// add just the currently selected ones.
-			_selectedResources.clear();
-		}
-		ISelection selection = getCurrentSelection();
-		if ((selection == null) || selection.isEmpty() || !(selection instanceof IStructuredSelection)) {
-			return null;
-		}
-		Object[] elements = ((IStructuredSelection) selection).toArray();
-		for (int i = 0; i < elements.length; i++) {
-			Object element = elements[i];
-			if (element == null) {
-				continue;
-			}
-			addSelected(action, element);
+	private Map<IProject, Set<IResource>> loadSelected(ValidateAction action) {
+		// GRK previously this did not do a clear, but I couldn't understand why that would be so I am forcing a clear
+		// GRK In my testing, not doing a clear caused duplicate validations
+		_selectedResources.clear();
+		if ((_currentSelection == null) || _currentSelection.isEmpty() || 
+			!(_currentSelection instanceof IStructuredSelection))return null;
+		
+		Object[] elements = ((IStructuredSelection) _currentSelection).toArray();
+		for (Object element : elements) {
+			if (element != null)addSelected(action, element);
 		}
 		return _selectedResources;
 	}
@@ -145,8 +120,7 @@
 		} else if (isValidType(getExtendedType(selected))) {
 			addSelected(action,getExtendedType(selected));
 		} else {
-			// Not a valid input type. Must be IProject, IJavaProject, or
-			// IResource.
+			// Not a valid input type. Must be IProject, IJavaProject, or IResource.
 			// If this ValidationMenuAction is a delegate of ValidateAction, is
 			// the input type recognized by the ValidateAction?
 			boolean valid = false;
@@ -160,9 +134,8 @@
 				}
 			}
 			if (!valid) {
-				// Stop processing. (This allows the "Run Validation" menu item
-				// to gray
-				// out once at least one non-validatable element is selected.)
+				// Stop processing. This allows the "Run Validation" menu item
+				// to gray out once an element that can not be validated is selected.
 				_selectedResources.clear();
 			}
 		}
@@ -181,16 +154,14 @@
 	void addSelected(IResource selected) {
 		IProject project = selected.getProject();
 		boolean added = _selectedResources.containsKey(project);
-		Set changedRes = null;
+		Set<IResource> changedRes = null;
 		if (added) {
-			// If the value is null, the entire project needs to be validated
-			// anyway.
-			changedRes = (Set) _selectedResources.get(project);
-			if (changedRes == null) {
-				return;
-			}
+			// If the value is null, the entire project needs to be validated anyway.
+			changedRes = _selectedResources.get(project);
+			if (changedRes == null)return;
+			
 		} else {
-			changedRes = new HashSet();
+			changedRes = new HashSet<IResource>();
 		}
 		if (changedRes.add(selected)) {
 			_selectedResources.put(project, changedRes);
@@ -202,14 +173,7 @@
 		try {
 			selected.accept(getFolderVisitor());
 		} catch (CoreException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidationMenuAction.addSelected(IFolder)"); //$NON-NLS-1$
-				entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL);
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			ValidationUIPlugin.getPlugin().handleException(exc);
 			return;
 		}
 	}
@@ -232,19 +196,11 @@
 	
 	private void addVisitor(IProject selected) {
 		// add the folder and its children
-		if( !selected.isAccessible() )
-			return;
+		if(!selected.isAccessible())return;
 		try {
 			selected.accept(getProjectVisitor());
 		} catch (CoreException exc) {
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationUIPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidationMenuAction.addSelected(IFolder)"); //$NON-NLS-1$
-				entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL);
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			ValidationUIPlugin.getPlugin().handleException(exc);
 			return;
 		}
 	}
@@ -253,12 +209,12 @@
 		if (_projectVisitor == null) {
 			_projectVisitor = new IResourceVisitor() {
 				public boolean visit(IResource res) {
-					if (res instanceof IFile) {
-						addSelected(res);
-					} else if (res instanceof IFolder) {
-						addSelected(res);
-					}
-					return true; // visit the resource's children
+					if (DisabledResourceManager.getDefault().isDisabled(res))return false;
+					if (res instanceof IFile)addSelected(res);
+					else if (res instanceof IFolder)addSelected(res);
+					else if (res instanceof IProject)addSelected(res);
+					
+					return true;
 				}
 			};
 		}
@@ -266,222 +222,31 @@
 	}
 
 	/**
-	 * The delegating action has been performed. Implement this method to do the actual work.
+	 * The delegating action has been invoked. This method does the actual work.
 	 * 
 	 * @param action
-	 *            action proxy that handles the presentation portion of the plugin action
-	 * @param window
-	 *            the desktop window passed by the action proxy
+	 *            Action proxy that handles the presentation portion of the plug-in action.
 	 */
 	public void run(IAction action) {
-		// TODO: Insert dirty file check here.
 		ValidateAction vaction = null;
 		if (action instanceof ValidateAction) {
 			vaction = (ValidateAction) action;
 		}
-		final Map projects = loadSelected(vaction, false);
+		final Map<IProject, Set<IResource>> projects = loadSelected(vaction);
 		if ((projects == null) || (projects.size() == 0)) {
 			return;
 		}
 		
 		// If the files aren't saved do not run validation.
-		if(!handleFilesToSave(projects))
-		{
-		  return;
-		}
+		if(!handleFilesToSave(projects))return;
 
-		ValidationJob validationop = new ValidationJob(ValidationUIMessages.RunValidationDialogTitle){
-			protected IStatus run(IProgressMonitor monitor) {
-				final Map projectsMap = projects;
-				IStatus stat = validate(monitor, projectsMap);	
-				_selectedResources.clear();
-				return stat;
-			}
-		};
-		validationop.setProjectsMap(projects);
-		validationop.setRule(ResourcesPlugin.getWorkspace().getRoot());
-		validationop.setUser(true);
-		validationop.schedule();
-	}
-	
-	private IStatus validate(final IProgressMonitor monitor, final Map projects) {
-		boolean cancelled = false; // Was the operation cancelled?
-		Iterator iterator = projects.keySet().iterator();
-		while (iterator.hasNext()) {
-			
-			if ( monitor.isCanceled() )
-				return new Status(IStatus.CANCEL, "org.eclipse.wst.validation", 0, "OK", null);;
-			IProject project = (IProject) iterator.next();
-			if (project == null) {
-				continue;
-			}
-			try {
-				if (cancelled) {
-					String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_RESCANCELLED, new String[]{project.getName()});
-					monitor.setTaskName(message);
-					continue;
-				}
-				if (!project.isOpen()) {
-					String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_CLOSED_PROJECT, new String[]{project.getName()});
-					monitor.setTaskName(message);
-					continue;
-				}
-				performValidation(monitor, projects, project);
-			} catch (OperationCanceledException exc) {
-				// When loading file deltas, if the operation has been
-				// cancelled, then
-				// resource.accept throws an OperationCanceledException.
-				cancelled = true;
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_RESCANCELLED, new String[]{project.getName()});
-				monitor.setTaskName(message);
-			} catch (Throwable exc) {
-				logException(monitor, project, exc);
-			}
-		}
-		return new Status(IStatus.OK, "org.eclipse.wst.validation", 0, "OK", null);
-	}
-	
-
-
-	/**
-	 * @param dialog
-	 * @param project
-	 * @param exc
-	 */
-
-	private void logException(IProgressMonitor monitor, IProject project, Throwable exc) {
-		Logger logger = WTPUIPlugin.getLogger();
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationUIPlugin.getLogEntry();
-			entry.setSourceID("ValidationMenuAction.validate"); //$NON-NLS-1$
-			entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL);
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-		}
-		String internalErrorMessage = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PROJECT, new String[]{project.getName()});
-		monitor.setTaskName(internalErrorMessage);
-	}	
-
-	/**
-	 * @param monitor
-	 * @param projects
-	 * @param dialog
-	 * @param project
-	 * @throws CoreException
-	 */
-
-	private IStatus performValidation(final IProgressMonitor monitor, final Map projects,
-				 IProject project) throws CoreException {
-		// Even if the "maximum number of messages" message is on
-		// the task list,
-		// run validation, because some messages may have been
-		// fixed
-		// and there may be space for more messages.
-		
-		if ( monitor.isCanceled() )
-			return new Status(IStatus.CANCEL, "org.eclipse.wst.validation", 0, "OK", null);
-		
-		Set changedResources = (Set) projects.get(project);
-		IResource[] resources = null;
-		if (changedResources != null) {
-			resources = new IResource[changedResources.size()];
-			changedResources.toArray(resources);
-		}
-		try {
-			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-			if (prjp.numberOfManualEnabledValidators() > 0) {
-				checkProjectConfiguration(monitor, project, resources, prjp);
-			} else {
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_NO_VALIDATORS_ENABLED, new String[]{project.getName()});
-				monitor.setTaskName(message);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidationMenuAction::run"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-		return new Status(IStatus.OK, "org.eclipse.wst.validation", 0, "OK", null);
+		boolean confirm = org.eclipse.wst.validation.internal.ValManager.getDefault().getGlobalPreferences()
+			.getConfirmDialog();
+		ManualValidationRunner.validate(projects, ValType.Manual, confirm);
 	}
 	
 	/**
-	 * @param monitor
-	 * @param dialog
-	 * @param project
-	 * @param resources
-	 * @param prjp
-	 * @throws InvocationTargetException
-	 * @throws CoreException
-	 */
-	private IStatus checkProjectConfiguration(final IProgressMonitor monitor,
-				IProject project, IResource[] resources, ProjectConfiguration prjp) throws InvocationTargetException, CoreException {
-		boolean successful = true; // Did the operation
-		// complete
-		// successfully?
-		if ( monitor.isCanceled() )
-			new Status(IStatus.CANCEL, "org.eclipse.wst.validation", 0, "OK", null);
-		
-		ManualValidatorsOperation validOp = null;
-		//validOp = new ManualValidatorsOperation(project, resources);
-		if (resources == null) {
-			validOp = new ManualValidatorsOperation(project);
-		} else {
-			validOp = new ManualIncrementalValidatorsOperation(project, resources);
-		}
-		if (validOp.isNecessary(monitor)) {
-			validOp.run(monitor);
-		} else {
-			if (resources == null) {
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_PRJNEEDINPUT, new String[]{project.getName()});
-				monitor.setTaskName(message);
-			} else {
-				for (int i = 0; i < resources.length; i++) {
-					String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_RESNEEDINPUT, new String[]{resources[i].getFullPath().toString()});
-					monitor.setTaskName(message);
-				}
-			}
-		}
-		if (successful) {
-			performSucessful(monitor, project, resources);
-		} else {
-			String internalErrorMessage = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PROJECT, new String[]{project.getName()});
-			monitor.setTaskName(internalErrorMessage);
-		}
-		return new Status(IStatus.OK, "org.eclipse.wst.validation", 0, "OK", null);
-	}
-	
-
-
-	/**
-	 * @param dialog
-	 * @param project
-	 * @param resources
-	 */
-	private void performSucessful(final IProgressMonitor monitor, IProject project, IResource[] resources) {
-		boolean limitExceeded = ValidatorManager.getManager().wasValidationTerminated(project);
-		if (limitExceeded) {
-			String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_MAX_REPORTED, new String[]{project.getName()});
-			monitor.setTaskName(message);
-		} else if (resources == null) {
-			String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_PRJVALIDATED, new String[]{project.getName()});
-			monitor.setTaskName(message);
-		} else {
-			for (int i = 0; i < resources.length; i++) {
-				String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_RESVALIDATED, new String[]{resources[i].getFullPath().toString()});
-				monitor.setTaskName(message);
-			}
-		}
-	}	
-
-	/**
-	 * Selection in the desktop has changed. Plugin provider can use it to change the availability
+	 * Selection in the desktop has changed. Plug-in provider can use it to change the availability
 	 * of the action or to modify other presentation properties.
 	 * 
 	 * <p>
@@ -492,107 +257,68 @@
 	 * </p>
 	 * 
 	 * @param action
-	 *            action proxy that handles presentation portion of the plugin action
+	 *            action proxy that handles presentation portion of the plug-in action
 	 * @param selection
 	 *            current selection in the desktop
 	 */
 	public void selectionChanged(IAction action, ISelection selection) {
 		_currentSelection = selection;
-		int count = 0;
-		boolean fwkActivated = (ValidationPlugin.isActivated() && ValidationRegistryReader.isActivated());
-		if (fwkActivated) {
-			ValidateAction vaction = null;
-			if (action instanceof ValidateAction) {
-				vaction = (ValidateAction) action;
-			}
-			final Map projects = loadSelected(vaction, true);
-			if ((projects != null) && (projects.size() > 0)) {
-				Iterator iterator = projects.keySet().iterator();
-				while (iterator.hasNext()) {
-					// If at least one project can be validated, make "enabled"
-					// true and
-					// let the dialog tell the user which projects need to be
-					// opened,
-					// validators enabled, etc.
-					IProject project = (IProject) iterator.next();
-					if ((project != null) && (project.isOpen())) {
-						// If the validation plugin hasn't been activated yet,
-						// don't activate it just to
-						// find out if there are validators. Only ask if there
-						// are enabled validators if
-						// the plugin has already been activated.
-						try {
-							ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfigurationWithoutMigrate(project);
-							if( !prjp.isDisableAllValidation() ){
-								count += prjp.numberOfManualValidators();
-							}							
-						} catch (InvocationTargetException exc) {
-							Logger logger = ValidationPlugin.getPlugin().getLogger();
-							if (logger.isLoggingLevel(Level.SEVERE)) {
-								LogEntry entry = ValidationPlugin.getLogEntry();
-								entry.setSourceIdentifier("ValidationMenuAction::selectionChanged"); //$NON-NLS-1$
-								entry.setTargetException(exc);
-								logger.write(Level.SEVERE, entry);
-								if (exc.getTargetException() != null) {
-									entry.setTargetException(exc);
-									logger.write(Level.SEVERE, entry);
-								}
-							}
-						}
-						if (count > 0)
-							break;
-					}
+		boolean enabled = quickCheck(selection);
+		
+		// Don't force the plug-in to be activated just to check this setting.
+		if (enabled && ValidationPlugin.isActivated() && ValidationRegistryReader.isActivated()){
+			enabled = hasManualValidators(selection);
+		}
+		action.setEnabled(enabled);
+	}
+	
+	/**
+	 * Do a quick check on the selection, so see if we know that we don't want to validate the selection.
+	 * 
+	 * @param selection
+	 * @return false if we are sure that we don't want to validate it. Return true if we are still not sure.
+	 */
+	private boolean quickCheck(ISelection selection){
+		if (selection == null || selection.isEmpty())return false;
+		if (selection instanceof IStructuredSelection){
+			IStructuredSelection ss = (IStructuredSelection)selection;
+			Object sel = ss.getFirstElement();
+			if (sel != null){
+				if (sel instanceof IProject){
+					IProject project = (IProject)sel;
+					if (!project.isOpen())return false;
 				}
 			}
 		}
-		action.setEnabled((count > 0) || (!fwkActivated)); // Don't disable the
-		// action just
-		// because the
-		// framework hasn't
-		// been activated.
+
+		return true;
 	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorActionsExtension#init(org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorExtensionSite)
+	
+	/**
+	 * Answer true if any of the selected items have manual validators enabled.
+	 * @param selection
 	 */
-
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.IActionDelegate2#runWithEvent(org.eclipse.jface.action.IAction,
-	 *      org.eclipse.swt.widgets.Event)
-	 */
-	public void runWithEvent(IAction action, Event event) {
-		run(action);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.IActionDelegate2#init(org.eclipse.jface.action.IAction)
-	 */
-	public void init(IAction action) {
-		//init
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.IActionDelegate2#dispose()
-	 */
-	public void dispose() { 
-		//dispose
+	private boolean hasManualValidators(ISelection selection){
+				
+		if (selection instanceof IStructuredSelection){
+			IStructuredSelection ss = (IStructuredSelection)selection;
+			for (Iterator it = ss.iterator(); it.hasNext();){
+				Object sel = it.next();
+				if (sel instanceof IResource){
+					IResource resource = (IResource)sel;
+					if (ValidationFramework.getDefault().hasValidators(resource, true, false))return true;
+				}
+			}		
+		}
+		
+		return false;
+		
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
 	 */
 	public void init(IViewPart view) { 
-		//init
-		
 	}
 	
 	/**
@@ -604,16 +330,15 @@
 	 * @return
 	 * 			True if all files have been saved, false otherwise.
 	 */
-	protected boolean handleFilesToSave(Map projects)
+	protected boolean handleFilesToSave(Map<IProject, Set<IResource>> projects)
 	{
 	  List fileList = getIFiles(projects);
       final IEditorPart[] dirtyEditors = SaveFilesHelper.getDirtyEditors(fileList);
-      if(dirtyEditors == null || dirtyEditors.length == 0)
-    	return true;
+      if(dirtyEditors == null || dirtyEditors.length == 0)return true;
       boolean saveAutomatically = false;
       try
       {
-        saveAutomatically = new GlobalConfiguration(ConfigurationManager.getManager().getGlobalConfiguration()).getSaveAutomatically();
+        saveAutomatically = ConfigurationManager.getManager().getGlobalConfiguration().getSaveAutomatically();
       }
       catch(InvocationTargetException e)
       {
@@ -630,8 +355,7 @@
     	  ProgressMonitorDialog ctx = new ProgressMonitorDialog(getShell());
           
           IRunnableWithProgress runnable = new IRunnableWithProgress(){
-              public void run(IProgressMonitor monitor) throws InvocationTargetException,
-                  InterruptedException{
+              public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException{
             	  try {
             		  monitor.beginTask(ValidationUIMessages.SaveFilesDialog_saving, dirtyEditors.length);
             		  int numDirtyEditors = dirtyEditors.length;
@@ -648,30 +372,19 @@
                 ctx.run(false, true, runnable);
                 return true;
           } catch (InvocationTargetException e) {
-                Logger.getLogger().logError(e);
+                ValidationUIPlugin.getPlugin().handleException(e);
           } catch (InterruptedException e) {
+        	  ValidationUIPlugin.getPlugin().handleException(e);
           }
       }
 	  return false;
 	}
 	
-	protected List getIFiles(Map projects)
-	{
-		List fileList = new ArrayList();
-		Set projectKeys = projects.keySet();
-		Iterator projectIter = projectKeys.iterator();
-		while(projectIter.hasNext())
-		{
-		  IProject project = (IProject) projectIter.next();
-		  Set resourcesList = (Set) projects.get(project);
-		  Iterator resourcesIter = resourcesList.iterator();
-		  while(resourcesIter.hasNext())
-		  {
-			IResource resource = (IResource)resourcesIter.next();
-			if(resource instanceof IFile)
-			{
-				fileList.add(resource);
-			}
+	protected List<IFile> getIFiles(Map<IProject, Set<IResource>> projects) {
+		List<IFile> fileList = new LinkedList<IFile>();
+		for(IProject project : projects.keySet()) {
+		  for(IResource resource : projects.get(project)) {
+			if(resource instanceof IFile)fileList.add((IFile)resource);
 		  }
 		}
 		return fileList;
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPreferencePage.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPreferencePage.java
deleted file mode 100644
index 3487d6c..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPreferencePage.java
+++ /dev/null
@@ -1,1180 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.validation.internal.ui;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jface.viewers.ColumnWeightData;
-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.TableLayout;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.MenuAdapter;
-import org.eclipse.swt.events.MenuEvent;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.GlobalConfiguration;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.operations.ValidatorManager;
-import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
-
-/**
- * This class and its inner classes are not intended to be subclassed outside of the validation
- * framework.
- */
-public class ValidationPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
-	private IValidationPage _pageImpl = null;
-
-	/**
- * Initially, this interface was created as an abstract class, and getControl() was implemented.
- * (getProject() could also have been implemented in the abstract class.) However, at runtime, a
- * NullPointerException was thrown; the inner class had lost its pointer to its enclosing class.
- * After some experimentation, I discovered that if I changed the parent to an interface, the
- * enclosing class could be found. (Merely moving the AValidationPage into its own file was
- * insufficient.)
- */
-public interface IValidationPage {
-	public Composite createPage(Composite parent) throws InvocationTargetException;
-
-	public boolean performOk() throws InvocationTargetException;
-
-	public boolean performDefaults() throws InvocationTargetException;
-
-	public Composite getControl();
-
-	public void dispose();
-
-	public void loseFocus(); // Page is losing focus (event notification)
-
-	public void gainFocus(); // Page is gaining focus (event notification)
-}
-
-public class InvalidPage implements IValidationPage {
-	private Composite page = null;
-
-	private Composite composite = null;
-	private GridLayout layout = null;
-	private Label messageLabel = null;
-
-	public InvalidPage(Composite parent) {
-		page = createPage(parent);
-	}
-
-	/**
-	 * This page is added to the Properties guide if some internal problem occurred; for
-	 * example, the highlighted item in the workbench is not an IProject (according to this
-	 * page's plugin.xml, this page is only valid when an IProject is selected).
-	 */
-	public Composite createPage(Composite parent) {
-		// Don't create the default and apply buttons.
-		noDefaultAndApplyButton();
-
-		final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-		sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-		composite = new Composite(sc1, SWT.NONE);
-		sc1.setContent(composite);
-		layout = new GridLayout();
-		composite.setLayout(layout);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-		messageLabel = new Label(composite, SWT.NONE);
-		messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_REGISTER));
-
-		composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-		return composite;
-	}
-
-	public boolean performDefaults() {
-		return true;
-	}
-
-	/**
-	 * Since this page occurs under invalid circumstances, there is nothing to save.
-	 */
-	public boolean performOk() {
-		return true;
-	}
-
-	public Composite getControl() {
-		return page;
-	}
-
-	public void dispose() {
-		messageLabel.dispose();
-		//			layout.dispose();
-		composite.dispose();
-	}
-
-	public void loseFocus() {
-		// This page does not depend on the contents of any other page in the wizard, so do
-		// nothing.
-	}
-
-	public void gainFocus() {
-		// This page does not depend on the contents of any other page in the wizard, so do
-		// nothing.
-	}
-}
-
-private class NoValidatorsPage implements IValidationPage {
-	private Composite page = null;
-	private Composite composite = null;
-	private GridLayout layout = null;
-	private GridData data = null;
-	private Label messageLabel = null;
-
-	public NoValidatorsPage(Composite parent) {
-		page = createPage(parent);
-	}
-
-	/**
-	 * This page is created if an IProject is selected, but that project has no validators
-	 * configured (i.e., the page is valid, but an empty list.)
-	 */
-	public Composite createPage(Composite parent) {
-		// Don't create the default and apply buttons.
-		noDefaultAndApplyButton();
-
-		// top level group
-		final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-		sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-		composite = new Composite(sc1, SWT.NONE);
-		sc1.setContent(composite);
-		layout = new GridLayout();
-		composite.setLayout(layout);
-		data = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
-		composite.setLayoutData(data);
-
-		messageLabel = new Label(composite, SWT.NONE);
-		messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_NO_VALIDATORS_INSTALLED));
-
-		composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-		return composite;
-	}
-
-
-	/**
-	 * Since there are no validators, there is nothing to save.
-	 */
-	public boolean performOk() {
-		return true;
-	}
-
-	public boolean performDefaults() {
-		return true;
-	}
-
-	public Composite getControl() {
-		return page;
-	}
-
-	public void dispose() {
-		messageLabel.dispose();
-		//			layout.dispose();
-		//			data.dispose();
-		composite.dispose();
-	}
-
-	public void loseFocus() {
-		// This page does not depend on the contents of any other page in the wizard, so do
-		// nothing.
-	}
-
-	public void gainFocus() {
-		// This page does not depend on the contents of any other page in the wizard, so do
-		// nothing.
-	}
-}
-
-private class ValidatorListPage implements IValidationPage {
-	private Composite page = null;
-
-	private Composite composite = null;
-	TableViewer validatorList = null;
-	private Button enableAllButton = null;
-	private Button disableAllButton = null;
-	private Label emptyRowPlaceholder = null;
-	Button disableAllValidation = null;
-	Button overrideButton = null;
-	Button saveButton = null;
-	private Label listLabel = null;
-	private Table validatorsTable;
-
-	GlobalConfiguration pagePreferences = null; // the values currently on the page, but not
-	// necessarily stored yet. Package visibility
-	// for the widget listeners (the compiler would
-	// have to create a synthetic accessor method in
-	// order to access this field)
-	//private boolean _isAutoBuildEnabled; // initialized in the constructor
-	private ValidatorMetaData[] _oldVmd = null; // Cache the enabled validators so that, if
-  private Map _oldDelegates = null; // Cache the validator delegates.
-	// there is no change to this list, the
-	// expensive task list update can be avoided
-	private boolean _allow = false; // Cache the value of the prefence "allow projects to
-
-	// override" so that, when OK is clicked, we can determine
-	// if "allow" has changed or not.
-
-	/**
-	 * This class is provided for the CheckboxTableViewer in the
-	 * ValidationPropertiesPage$ValidatorListPage class.
-	 */
-	public class ValidationContentProvider implements IStructuredContentProvider {
-		/**
-		 * Disposes of this content provider. This is called by the viewer when it is disposed.
-		 */
-		public void dispose() {
-			//dispose
-		}
-
-		/**
-		 * Returns the elements to display in the viewer when its input is set to the given
-		 * element. These elements can be presented as rows in a table, items in a list, etc.
-		 * The result is not modified by the viewer.
-		 * 
-		 * @param inputElement
-		 *            the input element
-		 * @return the array of elements to display in the viewer
-		 */
-		public java.lang.Object[] getElements(Object inputElement) {
-			if (inputElement instanceof ValidatorMetaData[]) {
-				// The Collection is the Collection which is returned by ValidatorManager's
-				// getConfiguredValidatorMetaData(IProject) call.
-				// This Collection is set to be the input of the CheckboxTableViewer in
-				// ValidationPropertiesPage$ValidatorListPage's createPage(Composite)
-				// method.
-				return (ValidatorMetaData[]) inputElement;
-			}
-			return new Object[0];
-		}
-
-		/**
-		 * Notifies this content provider that the given viewer's input has been switched to a
-		 * different element.
-		 * <p>
-		 * A typical use for this method is registering the content provider as a listener to
-		 * changes on the new input (using model-specific means), and deregistering the viewer
-		 * from the old input. In response to these change notifications, the content provider
-		 * propagates the changes to the viewer.
-		 * </p>
-		 * 
-		 * @param viewer
-		 *            the viewer
-		 * @param oldInput
-		 *            the old input element, or <code>null</code> if the viewer did not
-		 *            previously have an input
-		 * @param newInput
-		 *            the new input element, or <code>null</code> if the viewer does not have
-		 *            an input
-		 */
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			//do nothing
-		}
-
-
-
-	}
-
-	/**
-	 * This class is provided for ValidationPropertiesPage$ValidatorListPage's
-	 * checkboxTableViewer element.
-	 */
-	public class ValidationLabelProvider extends LabelProvider implements ITableLabelProvider {
-		/**
-		 * Override the LabelProvider's text, by customizing the text for a ValidatorMetaData
-		 * element.
-		 */
-		public String getText(Object element) {
-			if (element == null) {
-				return ""; //$NON-NLS-1$
-			} else if (element instanceof ValidatorMetaData) {
-				return ((ValidatorMetaData) element).getValidatorDisplayName();
-			} else {
-				return super.getText(element);
-			}
-		}
-
-    private Image getImage(String imageName) {
-      boolean isDisabled = !validatorsTable.isEnabled();
-      if (isDisabled) {
-          imageName = imageName + "_disabled";  //$NON-NLS-N$
-      }
-      Image image = ValidationUIPlugin.getPlugin().getImage(imageName);
-      return image;
-    }
-    
-		public Image getColumnImage(Object element, int columnIndex) {
-			if(columnIndex == 1) {
-				if(((ValidatorMetaData)element).isManualValidation())
-					return  getImage("ok_tbl");
-				return getImage("fail_tbl");
-			} 
-      else if(columnIndex == 2) {
-				if(((ValidatorMetaData)element).isBuildValidation())
-					return getImage("ok_tbl");;
-				return getImage("fail_tbl");
-			}
-      else if (columnIndex == 3)
-      {
-        ValidatorMetaData vmd = (ValidatorMetaData)element;
-
-        if (vmd.isDelegating())
-        {
-          return getImage("settings");          
-        }
-      }
-			return null;
-		
-		}
-
-		public String getColumnText(Object element, int columnIndex) {
-			if(columnIndex == 0) {
-				return ((ValidatorMetaData) element).getValidatorDisplayName();
-			}
-			/*if(columnIndex == 1) {
-				if(((ValidatorMetaData)element).isManualValidation())
-					return COMBO_VALUES[0];
-				return COMBO_VALUES[1];	
-			} else if(columnIndex == 2) {
-				if(((ValidatorMetaData)element).isBuildValidation())
-					return COMBO_VALUES[0];
-				return COMBO_VALUES[1];
-			}*/
-			return null;
-		}
-	}
-
-	/**
-	 * This class is used to sort the CheckboxTableViewer elements.
-	 */
-	public class ValidationViewerSorter extends ViewerSorter {
-		/**
-		 * Returns a negative, zero, or positive number depending on whether the first element
-		 * is less than, equal to, or greater than the second element.
-		 * <p>
-		 * The default implementation of this method is based on comparing the elements'
-		 * categories as computed by the <code>category</code> framework method. Elements
-		 * within the same category are further subjected to a case insensitive compare of their
-		 * label strings, either as computed by the content viewer's label provider, or their
-		 * <code>toString</code> values in other cases. Subclasses may override.
-		 * </p>
-		 * 
-		 * @param viewer
-		 *            the viewer
-		 * @param e1
-		 *            the first element
-		 * @param e2
-		 *            the second element
-		 * @return a negative number if the first element is less than the second element; the
-		 *         value <code>0</code> if the first element is equal to the second element;
-		 *         and a positive number if the first element is greater than the second element
-		 */
-		public int compare(Viewer viewer, Object e1, Object e2) {
-			// Can't instantiate ViewerSorter because it's abstract, so use this
-			// inner class to represent it.
-			return super.compare(viewer, e1, e2);
-		}
-	}
-
-	public ValidatorListPage(Composite parent) throws InvocationTargetException {
-		//_isAutoBuildEnabled = ValidatorManager.getManager().isGlobalAutoBuildEnabled();
-		pagePreferences = new GlobalConfiguration(ConfigurationManager.getManager().getGlobalConfiguration()); // This
-		// represents the values on the page that haven't been persistedyet.
-		// Start with the last values that were persisted into the current page's starting values.
-		
-		_oldVmd = pagePreferences.getEnabledValidators(); // Cache the enabled validators so
-		// that, if there is no change to this
-		// list, the expensive task list
-		// update can be avoided
-
-    _oldDelegates =  new HashMap(pagePreferences.getDelegatingValidators());
-		
-    _allow = pagePreferences.canProjectsOverride();
-
-		page = createPage(parent);
-	}
-	
-	private void setupTableColumns(Table table, TableViewer viewer) {
-		TableColumn validatorColumn = new TableColumn(table, SWT.NONE);
-        validatorColumn.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VALIDATOR));
-        validatorColumn.setResizable(false);
-        validatorColumn.setWidth(320);
-        TableColumn manualColumn = new TableColumn(table, SWT.NONE);
-        manualColumn.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.MANUAL));
-        manualColumn.setResizable(false);
-        manualColumn.setWidth(40);
-        TableColumn buildColumn = new TableColumn(table, SWT.NONE);
-        buildColumn.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.BUILD));
-        buildColumn.setResizable(false);
-        buildColumn.setWidth(40);
-        TableColumn settingsColumn = new TableColumn(table, SWT.NONE);
-        settingsColumn.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.SETTINGS));
-        settingsColumn.setResizable(false);
-        settingsColumn.setWidth(50);
-    }
-	
-	public Composite createPage(Composite parent) throws InvocationTargetException {
-		// top level group
-		final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-		sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-		composite = new Composite(sc1, SWT.NONE);
-		sc1.setContent(composite);
-		composite.setLayout(new GridLayout()); // use the layout's default preferences
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.VALIDATION_PREFERENCE_PAGE);
-
-		Composite validatorGroup = new Composite(composite, SWT.NONE);
-
-		
-		GridLayout validatorGroupLayout = new GridLayout();
-		validatorGroupLayout.numColumns = 2;
-		validatorGroup.setLayout(validatorGroupLayout);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorGroup, ContextIds.VALIDATION_PREFERENCE_PAGE);
-
-		GridData overrideData = new GridData(GridData.FILL_HORIZONTAL);
-		emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-		emptyRowPlaceholder.setLayoutData(new GridData());
-		emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-		emptyRowPlaceholder.setLayoutData(new GridData());		
-		
-		overrideData.horizontalSpan = 2;
-		overrideButton = new Button(validatorGroup, SWT.CHECK);
-		overrideButton.setLayoutData(overrideData);
-		overrideButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_OVERRIDE));
-		overrideButton.setEnabled(true);
-		overrideButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				pagePreferences.setCanProjectsOverride(overrideButton.getSelection());
-				try {
-					updateWidgets();
-				} catch (InvocationTargetException exc) {
-					displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-				}
-			}
-		});
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideButton, ContextIds.VALIDATION_PREFERENCE_PAGE_OVERRIDE);
-
-		emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-		emptyRowPlaceholder.setLayoutData(new GridData());
-		
-		GridData disableValidationData = new GridData(GridData.FILL_HORIZONTAL);
-		disableValidationData.horizontalSpan = 2;
-		disableAllValidation = new Button(validatorGroup, SWT.CHECK);
-		disableAllValidation.setLayoutData(disableValidationData);
-		disableAllValidation.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.DISABLE_VALIDATION));
-		disableAllValidation.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				pagePreferences.setDisableAllValidation(disableAllValidation.getSelection());
-				disableAllValidation.setFocus();
-				validatorsTable.setEnabled(!disableAllValidation.getSelection());
-				enableAllButton.setEnabled(!disableAllValidation.getSelection());
-				disableAllButton.setEnabled(!disableAllValidation.getSelection());
-        validatorList.refresh();
-			}
-		});
-		
-		emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-		emptyRowPlaceholder.setLayoutData(new GridData());
-		
-		GridData saveFileData = new GridData(GridData.FILL_HORIZONTAL);
-		saveFileData.horizontalSpan = 2;
-		saveButton = new Button(validatorGroup, SWT.CHECK);
-		saveButton.setLayoutData(saveFileData);
-		saveButton.setText(ValidationUIMessages.PrefPage_always_save);
-		saveButton.setSelection(pagePreferences.getSaveAutomatically());
-		saveButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				pagePreferences.setSaveAutomatically(saveButton.getSelection());
-				saveButton.setFocus();
-			}
-		});
-		
-		emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-		emptyRowPlaceholder.setLayoutData(new GridData());
-
-		listLabel = new Label(validatorGroup, SWT.NONE);
-		GridData listLabelData = new GridData(GridData.FILL_HORIZONTAL);
-		listLabelData.horizontalSpan = 2;
-		listLabel.setLayoutData(listLabelData);
-		listLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_VALLIST_TITLE));
-
-		validatorsTable = new Table(validatorGroup,SWT.BORDER | SWT.FULL_SELECTION);
-		TableLayout tableLayout = new TableLayout();
-		tableLayout.addColumnData(new ColumnWeightData(160, true));
-    tableLayout.addColumnData(new ColumnWeightData(40, true));
-    tableLayout.addColumnData(new ColumnWeightData(30, true));
-    tableLayout.addColumnData(new ColumnWeightData(40, true));
-    
-		validatorsTable.setHeaderVisible(true);
-		validatorsTable.setLinesVisible(true);
-        validatorsTable.setLayout(tableLayout);
-		
-		validatorList = new TableViewer(validatorsTable);
-        GridData validatorListData = new GridData(GridData.FILL_HORIZONTAL);
-		validatorListData.horizontalSpan = 2;
-		validatorsTable.setLayoutData(validatorListData);
-		validatorList.getTable().setLayoutData(validatorListData);
-		validatorList.setLabelProvider(new ValidationLabelProvider());
-		validatorList.setContentProvider(new ValidationContentProvider());
-		validatorList.setSorter(new ValidationViewerSorter());
-    setupTableColumns(validatorsTable,validatorList);
-		validatorList.setInput(pagePreferences.getValidators());
-    validatorsTable.addMouseListener(new MouseAdapter() {
-
-      public void mouseDown(MouseEvent e)
-      {
-        if (e.button != 1)
-        {
-          return;
-        }
-        
-        TableItem tableItem = validatorsTable.getItem(new Point(e.x, e.y));
-        if (tableItem == null || tableItem.isDisposed())
-        {
-          // item no longer exists
-          return;
-        }
-        int columnNumber;
-        int columnsCount = validatorsTable.getColumnCount();
-        if (columnsCount == 0)
-        {
-          // If no TableColumn, Table acts as if it has a single column
-          // which takes the whole width.
-          columnNumber = 0;
-        }
-        else
-        {
-          columnNumber = -1;
-          for (int i = 0; i < columnsCount; i++)
-          {
-            Rectangle bounds = tableItem.getBounds(i);
-            if (bounds.contains(e.x, e.y))
-            {
-              columnNumber = i;
-              break;
-            }
-          }
-          if (columnNumber == -1)
-          {
-            return;
-          }
-        }
-
-        columnClicked(columnNumber);          
-      }});
-    
-    
-    
-    validatorsTable.setMenu(createContextMenu());
-    validatorsTable.addFocusListener(new FocusAdapter(){
-
-      public void focusGained(FocusEvent e)
-      {
-        super.focusGained(e);
-        if (validatorsTable.getSelectionCount() == 0)
-        {
-          validatorsTable.select(0);
-        }
-      }});
-
-    enableAllButton = new Button(validatorGroup, SWT.PUSH);
-		enableAllButton.setLayoutData(new GridData());
-		enableAllButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_ENABLEALL));
-		enableAllButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				try {
-					performEnableAll();
-				} catch (InvocationTargetException exc) {
-					displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-				}
-			}
-		});
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(enableAllButton, ContextIds.VALIDATION_PREFERENCE_PAGE);
-
-		disableAllButton = new Button(validatorGroup, SWT.PUSH);
-		disableAllButton.setLayoutData(new GridData());
-		disableAllButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_DISABLEALL));
-		disableAllButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				try {
-					performDisableAll();
-				} catch (InvocationTargetException exc) {
-					displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-				}
-			}
-		});
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(disableAllButton, ContextIds.VALIDATION_PREFERENCE_PAGE);
-
-		Composite buttonGroup = new Composite(composite, SWT.NONE);
-		GridLayout buttonGroupLayout = new GridLayout();
-		buttonGroupLayout.numColumns = 2;
-		buttonGroup.setLayout(buttonGroupLayout);
-		buttonGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
-		// Have to set the tab order or only the first checkbox in a Composite can
-		// be tab-ed to. (Seems to apply only to checkboxes. Have to use the arrow
-		// key to navigate the checkboxes.)
-		validatorGroup.setTabList(new Control[]{overrideButton, disableAllValidation, saveButton, validatorList.getTable(), enableAllButton, disableAllButton});
-
-		updateWidgets();
-
-		applyDialogFont(composite);
-		composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-		return composite;
-	}
-  
-  protected Menu createContextMenu()
-  {
-    final Menu menu = new Menu(validatorsTable.getShell(), SWT.POP_UP);
-    final MenuItem manualItem = new MenuItem (menu, SWT.CHECK);
-    manualItem.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_MNU_MANUAL));
-    final MenuItem buildItem = new MenuItem (menu, SWT.CHECK);
-    buildItem.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_MNU_BUILD));
-    final MenuItem settingsItem = new MenuItem (menu, SWT.PUSH);
-    settingsItem.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_MNU_SETTINGS));
-    
-    class MenuItemListener extends SelectionAdapter
-    {
-      public void widgetSelected(SelectionEvent e)
-      {
-        MenuItem menuItem = (MenuItem) e.getSource();
-        int index = menu.indexOf(menuItem) + 1;
-        columnClicked(index);
-      }   
-    }
-    MenuItemListener listener = new MenuItemListener();
-    manualItem.addSelectionListener(listener);
-    buildItem.addSelectionListener(listener);
-    settingsItem.addSelectionListener(listener);
-
-    menu.addMenuListener(new MenuAdapter() {
-      public void menuShown(MenuEvent e)
-      {
-        IStructuredSelection selection = (IStructuredSelection) validatorList.getSelection();
-        ValidatorMetaData vmd = (ValidatorMetaData) selection.getFirstElement();
-        manualItem.setSelection(vmd.isManualValidation());
-        buildItem.setSelection(vmd.isBuildValidation());
-        settingsItem.setEnabled(vmd.isDelegating());
-      }});
-    
-    return menu;
-  }
-
-  protected void columnClicked(int columnToEdit)
-  {
-    IStructuredSelection selection = (IStructuredSelection) validatorList.getSelection();
-    ValidatorMetaData vmd = (ValidatorMetaData) selection.getFirstElement();
-    
-    switch (columnToEdit)
-    {
-    case 1:
-      vmd.setManualValidation(!vmd.isManualValidation());
-      break;
-    case 2:
-      vmd.setBuildValidation(!vmd.isBuildValidation());
-      break;
-    case 3:
-      {
-        if (!vmd.isDelegating()) {
-          break;
-        }
-          
-        String delegateID = pagePreferences.getDelegateUniqueName(vmd);
-  
-        Shell shell = Display.getCurrent().getActiveShell();
-        DelegatingValidatorPreferencesDialog dialog = new DelegatingValidatorPreferencesDialog(shell, vmd, delegateID);
-  
-        dialog.setBlockOnOpen(true);
-        dialog.create();
-  
-        int result = dialog.open();
-  
-        if (result == Window.OK)
-        {
-          pagePreferences.setDelegateUniqueName(vmd, dialog.getDelegateID());
-        }
-      }
-      break;
-    default:
-      break;
-    }
-    validatorList.refresh();      
-  }	
-  
-  protected void updateWidgets() throws InvocationTargetException {
-		// Need to update even the widgets that do not change based on another
-		// widgets because of performDefaults(). If performDefaults() is selected,
-		// then the pagePreferences values are reset, and these widgets
-		// might also need to be updated.
-		updateTable();
-		updateAllWidgets();
-		updateHelp();
-	}
-	
-	protected void updateWidgetsForDefaults() throws InvocationTargetException {
-		updateTableForDefaults();
-		updateAllWidgets();
-		updateHelp();
-	}
-
-	/**
-	 * @throws InvocationTargetException
-	 */
-	private void updateAllWidgets() throws InvocationTargetException {
-		overrideButton.setSelection(pagePreferences.canProjectsOverride());
-		disableAllValidation.setSelection(pagePreferences.isDisableAllValidation());
-		validatorsTable.setEnabled(!disableAllValidation.getSelection());
-		enableAllButton.setEnabled(!disableAllValidation.getSelection());
-		disableAllButton.setEnabled(!disableAllValidation.getSelection());
-	}
-
-	protected void updateTable() throws InvocationTargetException {
-		TableItem[] items = validatorsTable.getItems();
-		for (int i = 0; i < items.length; i++) {
-				TableItem item = items[i];
-				ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-
-				// Should the validator be enabled? Read the user's preferences from last time,
-				// if they exist, and set from that. If they don't exist, use the Validator class'
-				// default value.
-				if (pagePreferences.isManualEnabled(vmd))
-					vmd.setManualValidation(true);
-				else
-					vmd.setManualValidation(false);
-				if (pagePreferences.isBuildEnabled(vmd))
-					vmd.setBuildValidation(true);
-				else
-					vmd.setBuildValidation(false);
-
-			}
-		validatorList.refresh();
-	}
-	
-	protected void updateTableForDefaults() throws InvocationTargetException {
-		TableItem[] items = validatorsTable.getItems();
-		for (int i = 0; i < items.length; i++) {
-			TableItem item = items[i];
-			ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-
-			// Should the validator be enabled? Read the user's preferences from last time,
-			// if they exist, and set from that. If they don't exist, use the Validator class'
-			// default value.
-			if(pagePreferences.isEnabled(vmd)) {
-				vmd.setManualValidation(true);
-				vmd.setBuildValidation(true);
-			} else {
-				vmd.setManualValidation(false);
-				vmd.setBuildValidation(false);
-			}
-		}
-		validatorList.refresh();
-	}
-	
-	protected void enableManualAndBuildValues() {
-		TableItem[] items = validatorsTable.getItems();
-		for (int i = 0; i < items.length; i++) {
-			TableItem item = items[i];
-			ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-			vmd.setManualValidation(true);
-			vmd.setBuildValidation(true);
-		}
-		validatorList.refresh();
-	}
-	
-	protected void disableManualAndBuildValues() {
-		TableItem[] items = validatorsTable.getItems();
-		for (int i = 0; i < items.length; i++) {
-			TableItem item = items[i];
-			ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-			vmd.setManualValidation(false);
-			vmd.setBuildValidation(false);
-		}
-		validatorList.refresh();
-	}
-	
-	public boolean performOk() throws InvocationTargetException {
-		storeValues();
-		updateTaskList();
-		return true;
-	}
-
-	public boolean performDefaults() throws InvocationTargetException {
-		pagePreferences.resetToDefault();
-		updateWidgetsForDefaults();
-		getDefaultsButton().setFocus();
-		return true;
-	}
-
-	public boolean performEnableAll() throws InvocationTargetException {
-		setAllValidators(true);
-		pagePreferences.setEnabledValidators(getEnabledValidators());
-		enableManualAndBuildValues();
-		enableAllButton.setFocus();
-		return true;
-	}
-
-	/**
-	 * 
-	 */
-	private void setAllValidators(boolean bool) {
-		TableItem[] items = validatorsTable.getItems();
-		for (int i = 0; i < items.length; i++) {
-			ValidatorMetaData validatorMetaData = (ValidatorMetaData) items[i].getData();
-			validatorMetaData.setManualValidation(bool);
-			validatorMetaData.setBuildValidation(bool);
-		}
-	}
-	
-	public ValidatorMetaData[] getEnabledValidators() {
-		List enabledValidators = new ArrayList();
-		TableItem[] items = validatorsTable.getItems();
-		for (int i = 0; i < items.length; i++) {
-			ValidatorMetaData validatorMetaData = (ValidatorMetaData) items[i].getData();
-			if(validatorMetaData.isManualValidation() || validatorMetaData.isBuildValidation())
-				enabledValidators.add(validatorMetaData);
-		}
-		return (ValidatorMetaData[])enabledValidators.toArray(new ValidatorMetaData[enabledValidators.size()]);
-	}
-	
-	public ValidatorMetaData[] getEnabledManualValidators() {
-		List enabledValidators = new ArrayList();
-		TableItem[] items = validatorsTable.getItems();
-		for (int i = 0; i < items.length; i++) {
-			ValidatorMetaData validatorMetaData = (ValidatorMetaData) items[i].getData();
-			if(validatorMetaData.isManualValidation())
-				enabledValidators.add(validatorMetaData);
-		}
-		return (ValidatorMetaData[])enabledValidators.toArray(new ValidatorMetaData[enabledValidators.size()]);
-	
-	}
-	
-	public ValidatorMetaData[] getEnabledBuildValidators() {
-		List enabledValidators = new ArrayList();
-		TableItem[] items = validatorsTable.getItems();
-		for (int i = 0; i < items.length; i++) {
-			ValidatorMetaData validatorMetaData = (ValidatorMetaData) items[i].getData();
-			if(validatorMetaData.isBuildValidation())
-				enabledValidators.add(validatorMetaData);
-		}
-		return (ValidatorMetaData[])enabledValidators.toArray(new ValidatorMetaData[enabledValidators.size()]);
-	
-	}
-
-	public boolean performDisableAll() throws InvocationTargetException {
-		setAllValidators(false);
-		pagePreferences.setEnabledValidators(getEnabledValidators());
-		disableManualAndBuildValues();
-		disableAllButton.setFocus();
-		return true;
-	}
-
-	protected void updateHelp() {
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(disableAllValidation, ContextIds.VALIDATION_PREFERENCE_PAGE_DISABLE_ALL_ENABLED);
-	}
-
-	/*
-	 * Store the current values of the controls into the preference store.
-	 */
-	private void storeValues() throws InvocationTargetException {
-		pagePreferences.setCanProjectsOverride(overrideButton.getSelection());
-		
-		if (disableAllValidation.isEnabled()) {
-			pagePreferences.setDisableAllValidation(disableAllValidation.getSelection());
-		}
-		//pagePreferences.setEnabledValidators(getEnabledValidators());
-		
-		pagePreferences.setEnabledManualValidators(getEnabledManualValidators());
-		
-		pagePreferences.setEnabledBuildValidators(getEnabledBuildValidators());
-
-		pagePreferences.passivate();
-		pagePreferences.store();
-		
-		// If the projects aren't allowed to override, clear their settings.
-		if (!pagePreferences.canProjectsOverride()) {
-			IWorkspace workspace = ResourcesPlugin.getWorkspace();
-			IProject[] projects = workspace.getRoot().getProjects();
-			for (int i = 0; i < projects.length; i++) {
-				IProject project = projects[i];
-				try {
-					if (project.isOpen()) {
-						if (ConfigurationManager.getManager().isMigrated(project)) {
-							ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-							prjp.setDoesProjectOverride(false);
-							prjp.passivate();
-							prjp.store();
-						}
-					}
-				} catch (InvocationTargetException exc) {
-					displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-				}
-			}
-		}
-
-	}
-
-	private void updateTaskList() {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IProject[] projects = workspace.getRoot().getProjects();
-		boolean allowChanged = (pagePreferences.canProjectsOverride() != _allow);
-		for (int i = 0; i < projects.length; i++) {
-			IProject project = projects[i];
-			try {
-				if (project.isOpen()) {
-					ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-					if (!prjp.doesProjectOverride() && (prjp.hasEnabledValidatorsChanged(_oldVmd, allowChanged) || true) && 
-              (prjp.haveDelegatesChanged(_oldDelegates, allowChanged) || true)) {
-						// If the project used to override the preferences, and the preferences
-						// make that impossible now, then update the task list.
-						//
-						// If the preferences allow projects to override, and they don't, and if
-						// the validators have changed, then update the task list.
-						ValidatorManager.getManager().updateTaskList(project); // Do not remove
-						// the exceeded message; only ValidationOperation should do that
-						// because it's about to run validation. If the limit is increased, 
-						//messages may still be missing, so don't remove the "messages
-						// may be missing" message.
-					}
-				}
-			} catch (InvocationTargetException exc) {
-				displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			}
-		}
-	}
-
-	public Composite getControl() {
-		return page;
-	}
-
-	public void dispose() {
-		listLabel.dispose();
-		overrideButton.dispose();
-		disableAllValidation.dispose();
-		emptyRowPlaceholder.dispose();
-		disableAllButton.dispose();
-		enableAllButton.dispose();
-		validatorList.getTable().dispose();
-		composite.dispose();
-	}
-
-	public void loseFocus() {
-		// This page does not need to cache anything before it loses focus.
-	}
-
-	public void gainFocus() {/*
-		// This page depends on the Workbench Preference page, so update the value of the
-		// isAutoBuild (in case the workbench page's value has changed), and then update
-		// this page's widgets.
-		try {
-			//_isAutoBuildEnabled = ValidatorManager.getManager().isGlobalAutoBuildEnabled();
-			updateWidgets();
-		} catch (InvocationTargetException exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		}
-	*/}
-}
-
-/*
- * @see PreferencePage#createContents(Composite)
- */
-protected Control createContents(Composite parent) {
-	try {
-		GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-		if (gp.numberOfValidators() == 0) {
-			_pageImpl = new NoValidatorsPage(parent);
-		} else {
-			try {
-				_pageImpl = new ValidatorListPage(parent);
-			} catch (InvocationTargetException exc) {
-				_pageImpl = new InvalidPage(parent);
-				displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			} catch (Throwable exc) {
-				_pageImpl = new InvalidPage(parent);
-				displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			}
-		}
-	} catch (InvocationTargetException exc) {
-		_pageImpl = new InvalidPage(parent);
-		displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-	} catch (Throwable exc) {
-		_pageImpl = new InvalidPage(parent);
-		displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-	}
-
-	return _pageImpl.getControl();
-}
-
-/*
- * @see IWorkbenchPreferencePage#init(IWorkbench)
- */
-public void init(IWorkbench workbench) {
-	//init
-}
-
-protected void noDefaultAndApplyButton() {
-	super.noDefaultAndApplyButton();
-}
-
-/**
- * Performs special processing when this page's Defaults button has been pressed.
- * <p>
- * This is a framework hook method for sublcasses to do special things when the Defaults button
- * has been pressed. Subclasses may override, but should call <code>super.performDefaults</code>.
- * </p>
- */
-protected void performDefaults() {
-	super.performDefaults();
-
-	try {
-		_pageImpl.performDefaults();
-	} catch (InvocationTargetException exc) {
-		displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-	} catch (Throwable exc) {
-		displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-	}
-}
-
-/**
- * When the user presses the "OK" or "Apply" button on the Properties Guide/Properties Page,
- * respectively, some processing is performed by this PropertyPage. If the page is found, and
- * completes successfully, true is returned. Otherwise, false is returned, and the guide doesn't
- * finish.
- */
-public boolean performOk() {
-	try {
-		return _pageImpl.performOk();
-	} catch (InvocationTargetException exc) {
-		displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		return false;
-	} catch (Throwable exc) {
-		displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		return false;
-	}
-}
-
-/**
- * Since the pages are inner classes of a child PreferencePage, not a PreferencePage itself,
- * DialogPage's automatic disposal of its children's widgets cannot be used. Instead, dispose of
- * each inner class' widgets explicitly.
- */
-public void dispose() {
-	super.dispose();
-	try {
-		if (_pageImpl != null) {
-			_pageImpl.dispose();
-		}
-	} catch (Throwable exc) {
-		displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-	}
-}
-
-private void logError(Throwable exc) {
-	Logger logger = WTPUIPlugin.getLogger();
-	if (logger.isLoggingLevel(Level.SEVERE)) {
-		LogEntry entry = ValidationUIPlugin.getLogEntry();
-		entry.setSourceIdentifier("ValidationPreferencePage.displayAndLogError"); //$NON-NLS-1$
-		entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL_PAGE);
-		entry.setTargetException(exc);
-		logger.write(Level.SEVERE, entry);
-
-		if (exc instanceof InvocationTargetException) {
-			if (((InvocationTargetException) exc).getTargetException() != null) {
-				entry.setTargetException(((InvocationTargetException) exc).getTargetException());
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-}
-
-/**
- * package visibility because if this method is private, then the compiler needs to create a
- * synthetic accessor method for the internal classes, and that can have performance
- * implications.
- */
-void displayAndLogError(String title, String message, Throwable exc) {
-	logError(exc);
-	displayMessage(title, message, org.eclipse.swt.SWT.ICON_ERROR);
-}
-
-private void displayMessage(String title, String message, int iIconType) {
-	MessageBox messageBox = new MessageBox(getShell(), org.eclipse.swt.SWT.OK | iIconType | org.eclipse.swt.SWT.APPLICATION_MODAL);
-	messageBox.setMessage(message);
-	messageBox.setText(title);
-	messageBox.open();
-}
-
-/**
- * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
- */
-public void setVisible(boolean visible) {
-	super.setVisible(visible);
-	if (_pageImpl == null)
-		return;
-	if (visible) {
-		_pageImpl.gainFocus();
-	} else {
-		_pageImpl.loseFocus();
-	}
-}
-
-/**
- * @see org.eclipse.jface.preference.PreferencePage#getDefaultsButton()
- */
-protected Button getDefaultsButton() {
-	return super.getDefaultsButton();
-}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPropertiesPage.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPropertiesPage.java
deleted file mode 100644
index 0ba4c52..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationPropertiesPage.java
+++ /dev/null
@@ -1,1307 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2006 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
- * David Schneider, david.schneider@unisys.com - [142500] WTP properties pages fonts don't follow Eclipse preferences
- *******************************************************************************/
-package org.eclipse.wst.validation.internal.ui;
-
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-
-import javax.swing.event.HyperlinkEvent;
-
-import org.eclipse.core.resources.ICommand;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.viewers.ColumnWeightData;
-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.TableLayout;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.MenuAdapter;
-import org.eclipse.swt.events.MenuEvent;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.PreferencesUtil;
-import org.eclipse.ui.dialogs.PropertyPage;
-import org.eclipse.ui.forms.events.IHyperlinkListener;
-import org.eclipse.ui.forms.widgets.Hyperlink;
-import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.GlobalConfiguration;
-import org.eclipse.wst.validation.internal.ProjectConfiguration;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.operations.ValidatorManager;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
-
-/**
- * This class and its inner classes are not intended to be subclassed outside of the validation
- * framework.
- * 
- * This page implements the PropertyPage for validators; viewed when the user right-clicks on the
- * IProject, selects "Properties", and then "Validation."
- * 
- * There exist three possible page layouts: if there is an eclipse internal error, and the page is
- * brought up on a non-IProject type; if there are no validators configured on that type of
- * IProject, and a page which lists all validators configured on that type of IProject. These three
- * pages are implemented as inner classes, so that it's clear which method is needed for which
- * input. When all of the methods, and behaviour, were implemented in this one class, much more
- * error-checking had to be done, to ensure that the method wasn't being called incorrectly by one
- * of the pages.
- */
-public class ValidationPropertiesPage extends PropertyPage {
-	static final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$
-	static final String TAB = "\t"; //$NON-NLS-1$
-	static final String NEWLINE_AND_TAB = NEWLINE + TAB;
-	private IValidationPage _pageImpl = null;
-
-	/**
-	 * Initially, this interface was created as an abstract class, and getControl() was implemented.
-	 * (getProject() could also have been implemented in the abstract class.) However, at runtime, a
-	 * NullPointerException was thrown; the inner class had lost its pointer to its enclosing class.
-	 * After some experimentation, I discovered that if I changed the parent to an interface, the
-	 * enclosing class could be found. (Merely moving the AValidationPage into its own file was
-	 * insufficient.)
-	 */
-	public interface IValidationPage {
-		public abstract Composite createPage(Composite parent) throws InvocationTargetException;
-
-		public abstract boolean performOk() throws InvocationTargetException;
-
-		public boolean performDefaults() throws InvocationTargetException;
-		
-		public Composite getControl();
-
-		public abstract void dispose();
-
-		public abstract boolean performCancel();
-	}
-
-	public class InvalidPage implements IValidationPage {
-		private Composite page = null;
-
-		private Composite composite = null;
-		private GridLayout layout = null;
-		private Label messageLabel = null;
-
-		public InvalidPage(Composite parent) {
-			page = createPage(parent);
-		}
-
-		/**
-		 * This page is added to the Properties guide if some internal problem occurred; for
-		 * example, the highlighted item in the workbench is not an IProject (according to this
-		 * page's plugin.xml, this page is only valid when an IProject is selected).
-		 */
-		public Composite createPage(Composite parent) {
-			// Don't create the default and apply buttons.
-			noDefaultAndApplyButton();
-
-			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-			composite = new Composite(sc1, SWT.NONE);
-			sc1.setContent(composite);
-			layout = new GridLayout();
-			composite.setLayout(layout);
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-			messageLabel = new Label(composite, SWT.NONE);
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_REGISTER));
-
-			composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-			return composite;
-		}
-
-		public boolean performDefaults() {
-			return true;
-		}
-
-		/**
-		 * Since this page occurs under invalid circumstances, there is nothing to save.
-		 */
-		public boolean performOk() {
-			return true;
-		}
-
-		public Composite getControl() {
-			return page;
-		}
-
-		public void dispose() {
-			messageLabel.dispose();
-			//			layout.dispose();
-			composite.dispose();
-		}
-
-		public boolean performCancel() {
-			return true;
-		}
-	}
-
-	public class NoValidatorsPage implements IValidationPage {
-		private Composite page = null;
-
-		private Composite composite = null;
-		private GridLayout layout = null;
-		private GridData data = null;
-		private Label messageLabel = null;
-		
-		public NoValidatorsPage(Composite parent) {
-			page = createPage(parent);
-		}
-
-		/**
-		 * This page is created if an IProject is selected, but that project has no validators
-		 * configured (i.e., the page is valid, but an empty list.)
-		 */
-		public Composite createPage(Composite parent) {
-			// Don't create the default and apply buttons.
-			noDefaultAndApplyButton();
-
-			// top level group
-			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-			composite = new Composite(sc1, SWT.NONE);
-			sc1.setContent(composite);
-			layout = new GridLayout();
-			composite.setLayout(layout);
-			data = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
-			composite.setLayoutData(data);
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-			messageLabel = new Label(composite, SWT.NONE);
-			String[] msgParm = {getProject().getName()};
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_LBL_NOVALIDATORS_DESC, msgParm));
-			composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-			return composite;
-		}
-
-		public boolean performDefaults() {
-			return true;
-		}
-
-		/**
-		 * Since there are no validators, there is nothing to save.
-		 */
-		public boolean performOk() {
-			return true;
-		}
-
-		public Composite getControl() {
-			return page;
-		}
-
-		public void dispose() {
-			messageLabel.dispose();
-			//			layout.dispose();
-			//			data.dispose();
-			composite.dispose();
-		}
-
-		public boolean performCancel() {
-			return true;
-		}
-	}
-
-	public class ValidatorListPage implements IValidationPage {
-		Composite page = null;
-		GridLayout layout = null;
-		GridData data = null;
-		Label messageLabel = null;
-		TableViewer validatorList = null;
-		Button overrideGlobalButton = null;
-		boolean existingOverrideGlobalVal = false;
-		Button disableAllValidation = null;
-		boolean existingDisableAllValidation = false;
-		private Button enableAllButton = null;
-		private Button disableAllButton = null;
-		Label emptyRowPlaceholder = null;
-		private Table validatorsTable;
-		private Label globalPrefLink = null;
-		ProjectConfiguration pagePreferences = null;
-		private boolean canOverride = false;
-		private Button addValidationBuilder = null;
-		private Color color = null;
-
-		private ValidatorMetaData[] oldVmd = null; // Cache the enabled validators so that, if there
-    private Map oldDelegates = null; // Cache the validator delegates.
-
-		// is no change to this list, the expensive task
-		// list update can be avoided
-
-		/**
-		 * This class is provided for the CheckboxTableViewer in the
-		 * ValidationPropertiesPage$ValidatorListPage class.
-		 */
-		public class ValidationContentProvider implements IStructuredContentProvider {
-			/**
-			 * Disposes of this content provider. This is called by the viewer when it is disposed.
-			 */
-			public void dispose() {
-				//dispose
-			}
-
-			/**
-			 * Returns the elements to display in the viewer when its input is set to the given
-			 * element. These elements can be presented as rows in a table, items in a list, etc.
-			 * The result is not modified by the viewer.
-			 * 
-			 * @param inputElement
-			 *            the input element
-			 * @return the array of elements to display in the viewer
-			 */
-			public java.lang.Object[] getElements(Object inputElement) {
-				if (inputElement instanceof ValidatorMetaData[]) {
-					// The ValidatorMetaData[] is the array which is returned by ValidatorManager's
-					// getConfiguredValidatorMetaData(IProject) call.
-					// This array is set to be the input of the CheckboxTableViewer in
-					// ValidationPropertiesPage$ValidatorListPage's createPage(Composite)
-					// method.
-					return (ValidatorMetaData[]) inputElement;
-				}
-				return new Object[0];
-			}
-
-			/**
-			 * Notifies this content provider that the given viewer's input has been switched to a
-			 * different element.
-			 * <p>
-			 * A typical use for this method is registering the content provider as a listener to
-			 * changes on the new input (using model-specific means), and deregistering the viewer
-			 * from the old input. In response to these change notifications, the content provider
-			 * propagates the changes to the viewer.
-			 * </p>
-			 * 
-			 * @param viewer
-			 *            the viewer
-			 * @param oldInput
-			 *            the old input element, or <code>null</code> if the viewer did not
-			 *            previously have an input
-			 * @param newInput
-			 *            the new input element, or <code>null</code> if the viewer does not have
-			 *            an input
-			 */
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-				//do nothing
-			}
-
-
-
-		}
-
-		/**
-		 * This class is provided for ValidationPropertiesPage$ValidatorListPage's
-		 * checkboxTableViewer element.
-		 */
-		public class ValidationLabelProvider extends LabelProvider implements ITableLabelProvider {
-			/**
-			 * Override the LabelProvider's text, by customizing the text for a ValidatorMetaData
-			 * element.
-			 */
-			public String getText(Object element) {
-				if (element == null) {
-					return ""; //$NON-NLS-1$
-				} else if (element instanceof ValidatorMetaData) {
-					return ((ValidatorMetaData) element).getValidatorDisplayName();
-				} else {
-					return super.getText(element);
-				}
-			}
-			
-			public String getColumnText(Object element, int columnIndex) {
-				if(columnIndex == 0) {
-					return ((ValidatorMetaData) element).getValidatorDisplayName();
-				}
-				/*if(columnIndex == 1) {
-					if(((ValidatorMetaData)element).isManualValidation())
-						return ENABLED;
-					return DISABLED;	
-				} else if(columnIndex == 2) {
-					if(((ValidatorMetaData)element).isBuildValidation())
-						return ENABLED;
-					return DISABLED;
-				}*/
-				return null;
-			}
-
-      private Image getImage(String imageName) {
-        boolean isDisabled = !validatorsTable.isEnabled();
-        if (isDisabled) {
-            imageName = imageName + "_disabled";  //$NON-NLS-N$
-        }
-        Image image = ValidationUIPlugin.getPlugin().getImage(imageName);
-        return image;
-      }
-      
-
-      public Image getColumnImage(Object element, int columnIndex) {
-				if(columnIndex == 1) {
-					if(((ValidatorMetaData)element).isManualValidation())
-						return  getImage("ok_tbl");
-					return getImage("fail_tbl");
-				} else if(columnIndex == 2) {
-					if(((ValidatorMetaData)element).isBuildValidation())
-						return getImage("ok_tbl");;
-					return getImage("fail_tbl");
-				}
-        else if (columnIndex == 3)
-        {
-          ValidatorMetaData vmd = (ValidatorMetaData)element;
-
-          if (vmd.isDelegating())
-          {
-            return getImage("settings");          
-          }
-        }
-				return null;
-			}
-		}
-
-		/**
-		 * This class is used to sort the CheckboxTableViewer elements.
-		 */
-		public class ValidationViewerSorter extends ViewerSorter {
-			/**
-			 * Returns a negative, zero, or positive number depending on whether the first element
-			 * is less than, equal to, or greater than the second element.
-			 * <p>
-			 * The default implementation of this method is based on comparing the elements'
-			 * categories as computed by the <code>category</code> framework method. Elements
-			 * within the same category are further subjected to a case insensitive compare of their
-			 * label strings, either as computed by the content viewer's label provider, or their
-			 * <code>toString</code> values in other cases. Subclasses may override.
-			 * </p>
-			 * 
-			 * @param viewer
-			 *            the viewer
-			 * @param e1
-			 *            the first element
-			 * @param e2
-			 *            the second element
-			 * @return a negative number if the first element is less than the second element; the
-			 *         value <code>0</code> if the first element is equal to the second element;
-			 *         and a positive number if the first element is greater than the second element
-			 */
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				// Can't instantiate ViewerSorter because it's abstract, so use this
-				// inner class to represent it.
-				return super.compare(viewer, e1, e2);
-			}
-		}
-
-		public ValidatorListPage(Composite parent) throws InvocationTargetException {
-			ConfigurationManager prefMgr = ConfigurationManager.getManager();
-			ValidatorManager vMgr = ValidatorManager.getManager();
-
-			pagePreferences = prefMgr.getProjectConfiguration(getProject()); // This
-			// represents the values on the page that haven't been persisted yet.
-			// Start with the last values that were persisted into the current
-			// page's starting values.
-
-			// store the default values for the widgets
-			canOverride = prefMgr.getGlobalConfiguration().canProjectsOverride();
-			//isAutoBuildEnabled = vMgr.isGlobalAutoBuildEnabled();
-			//isBuilderConfigured = ValidatorManager.doesProjectSupportBuildValidation(getProject());
-			oldVmd = pagePreferences.getEnabledValidators(); // Cache the enabled validators so
-      // that, if there is no change to this
-      // list, the expensive task list update
-      // can be avoided
-
-      oldDelegates =  new HashMap(pagePreferences.getDelegatingValidators());
-
-			createPage(parent);
-			
-			existingOverrideGlobalVal = overrideGlobalButton.getSelection();
-			existingDisableAllValidation = disableAllValidation.getSelection();
-		}
-		
-		private void setupTableColumns(Table table, TableViewer viewer) {
-			TableColumn validatorColumn = new TableColumn(table, SWT.NONE);
-	        validatorColumn.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VALIDATOR));
-	        validatorColumn.setResizable(false);
-	        validatorColumn.setWidth(320);
-	        TableColumn manualColumn = new TableColumn(table, SWT.NONE);
-	        manualColumn.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.MANUAL));
-	        manualColumn.setResizable(false);
-	        manualColumn.setWidth(40);
-	        TableColumn buildColumn = new TableColumn(table, SWT.NONE);
-	        buildColumn.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.BUILD));
-	        buildColumn.setResizable(false);
-	        buildColumn.setWidth(40);
-          TableColumn settingsColumn = new TableColumn(table, SWT.NONE);
-          settingsColumn.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.SETTINGS));
-          settingsColumn.setResizable(false);
-          settingsColumn.setWidth(50);
-	    }
-
-		/**
-		 * This page is created if the current project has at least one validator configured on it.
-		 */
-		public Composite createPage(Composite parent) throws InvocationTargetException {
-			// top level group
-			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
-			page = new Composite(sc1, SWT.NONE);
-			sc1.setContent(page);
-			page.setLayout(new GridLayout()); // use the layout's default preferences
-			
-			Composite validatorGroup = new Composite(page, SWT.NONE);
-			GridLayout validatorGroupLayout = new GridLayout();
-			validatorGroupLayout.numColumns = 2;
-			validatorGroup.setLayout(validatorGroupLayout);
-			
-			Hyperlink link = new Hyperlink(validatorGroup,SWT.None);
-			GridData layout = new GridData(GridData.HORIZONTAL_ALIGN_END);
-			layout.horizontalSpan = 2;
-			link.setLayoutData(layout);
-			link.setUnderlined(true);
-			color = new Color(validatorGroup.getDisplay(),new RGB(0,0,255) );
-			link.setForeground(color);
-			link.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.CONFIG_WS_SETTINGS));
-			link.addHyperlinkListener(new IHyperlinkListener() {
-				public static final String DATA_NO_LINK = "PropertyAndPreferencePage.nolink"; //$NON-NLS-1$
-
-				public void hyperlinkUpdate(HyperlinkEvent e) {
-				}
-
-				public void linkEntered(org.eclipse.ui.forms.events.HyperlinkEvent e) {
-				}
-
-				public void linkExited(org.eclipse.ui.forms.events.HyperlinkEvent e) {
-				}
-
-				public void linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent e) {
-					String id = getPreferencePageID();
-					PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[]{id}, DATA_NO_LINK).open();
-					try {
-						updateWidgets();
-					} catch (InvocationTargetException ie) {
-
-					}
-				}
-
-				private String getPreferencePageID() {
-					return "ValidationPreferencePage";
-				}
-			});
-			
-			GridData overrideData = new GridData(GridData.GRAB_HORIZONTAL);
-			overrideData.horizontalSpan = 2;
-			overrideGlobalButton = new Button(validatorGroup, SWT.CHECK);
-			overrideGlobalButton.setLayoutData(overrideData);
-			overrideGlobalButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PROP_BUTTON_OVERRIDE, new String[]{getProject().getName()}));
-			overrideGlobalButton.setFocus(); // must focus on something for F1 to have a topic to lanuch
-			overrideGlobalButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setDoesProjectOverride(overrideGlobalButton.getSelection());
-					try {
-						updateWidgets();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			
-			emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-			emptyRowPlaceholder.setLayoutData(new GridData());
-			
-			GridData data = new GridData(GridData.FILL_HORIZONTAL);
-			data.horizontalSpan = 2;
-			disableAllValidation = new Button(validatorGroup, SWT.CHECK);
-			disableAllValidation.setLayoutData(data);
-			disableAllValidation.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.DISABLE_VALIDATION));
-			disableAllValidation.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					pagePreferences.setDisableAllValidation(disableAllValidation.getSelection());
-					disableAllValidation.setFocus();
-					validatorsTable.setEnabled(!disableAllValidation.getSelection());
-					enableAllButton.setEnabled(!disableAllValidation.getSelection());
-					disableAllButton.setEnabled(!disableAllValidation.getSelection());
-	          try {
-	            updateWidgets();
-	          } catch (InvocationTargetException exc) {
-	            displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-	          }
-				}
-			});
-			
-			emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-			emptyRowPlaceholder.setLayoutData(new GridData());
-
-
-
-			GridData listLabelData = new GridData(GridData.FILL_HORIZONTAL);
-			listLabelData.horizontalSpan = 2;
-			messageLabel = new Label(validatorGroup, SWT.NONE);
-			messageLabel.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_UI_LBL_DESC, new String[]{getProject().getName()}));
-			messageLabel.setLayoutData(listLabelData);
-
-			validatorsTable = new Table(validatorGroup,SWT.BORDER | SWT.FULL_SELECTION);
-			TableLayout tableLayout = new TableLayout();
-			tableLayout.addColumnData(new ColumnWeightData(160, true));
-			tableLayout.addColumnData(new ColumnWeightData(40, true));
-			tableLayout.addColumnData(new ColumnWeightData(30, true));
-			tableLayout.addColumnData(new ColumnWeightData(40, true));
-			validatorsTable.setHeaderVisible(true);
-			validatorsTable.setLinesVisible(true);
-	        validatorsTable.setLayout(tableLayout);
-			
-			validatorList = new TableViewer(validatorsTable);
-	        GridData validatorListData = new GridData(GridData.FILL_HORIZONTAL);
-			validatorListData.horizontalSpan = 2;
-			validatorsTable.setLayoutData(validatorListData);
-			validatorList.getTable().setLayoutData(validatorListData);
-			validatorList.setLabelProvider(new ValidationLabelProvider());
-			validatorList.setContentProvider(new ValidationContentProvider());
-			validatorList.setSorter(new ValidationViewerSorter());
-	    setupTableColumns(validatorsTable,validatorList);
-      validatorsTable.addMouseListener(new MouseAdapter() {
-
-        public void mouseDown(MouseEvent e)
-        {
-          if (e.button != 1) {
-            return;
-          }
-
-          // Handles mouse clicks in the table.
-          TableItem tableItem = validatorsTable.getItem(new Point(e.x, e.y));
-          if (tableItem == null || tableItem.isDisposed())
-          {
-            // item no longer exists
-            return;
-          }
-          int columnNumber;
-          int columnsCount = validatorsTable.getColumnCount();
-          if (columnsCount == 0)
-          {
-            // If no TableColumn, Table acts as if it has a single column
-            // which takes the whole width.
-            columnNumber = 0;
-          }
-          else
-          {
-            columnNumber = -1;
-            for (int i = 0; i < columnsCount; i++)
-            {
-              Rectangle bounds = tableItem.getBounds(i);
-              if (bounds.contains(e.x, e.y))
-              {
-                columnNumber = i;
-                break;
-              }
-            }
-            if (columnNumber == -1)
-            {
-              return;
-            }
-          }
-
-          columnClicked(columnNumber);          
-        }});
-      
-      validatorsTable.setMenu(createContextMenu());
-      validatorsTable.addFocusListener(new FocusAdapter(){
-
-        public void focusGained(FocusEvent e)
-        {
-          super.focusGained(e);
-          if (validatorsTable.getSelectionCount() == 0)
-          {
-            validatorsTable.select(0);
-          }
-        }});			
-      
-			validatorList.setInput(pagePreferences.getValidators());
-			
-			enableAllButton = new Button(validatorGroup, SWT.PUSH);
-			GridData selectData = new GridData();
-			enableAllButton.setLayoutData(selectData);
-			enableAllButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_ENABLEALL));
-			enableAllButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					try {
-						performEnableAll();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(enableAllButton, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-			GridData deselectData = new GridData();
-			disableAllButton = new Button(validatorGroup, SWT.PUSH);
-			disableAllButton.setLayoutData(deselectData);
-			disableAllButton.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_BUTTON_DISABLEALL));
-			disableAllButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					try {
-						performDisableAll();
-					} catch (InvocationTargetException exc) {
-						displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-					}
-				}
-			});
-			PlatformUI.getWorkbench().getHelpSystem().setHelp(disableAllButton, ContextIds.VALIDATION_PROPERTIES_PAGE);
-
-			emptyRowPlaceholder = new Label(validatorGroup, SWT.NONE);
-			emptyRowPlaceholder.setLayoutData(new GridData());
-			
-			GridData disableValidationData = new GridData(GridData.FILL_HORIZONTAL);
-			disableValidationData.horizontalSpan = 2;
-			addValidationBuilder = new Button(validatorGroup, SWT.CHECK);
-			addValidationBuilder.setLayoutData(disableValidationData);
-			addValidationBuilder.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.ADD_VALIDATION_BUILDER));
-
-			// Have to set the tab order or only the first checkbox in a Composite can
-			// be tab-ed to. (Seems to apply only to checkboxes. Have to use the arrow
-			// key to navigate the checkboxes.)
-			validatorGroup.setTabList(new Control[]{overrideGlobalButton,disableAllValidation, validatorList.getTable(), enableAllButton, disableAllButton});
-
-			updateWidgets();
-
-		    Dialog.applyDialogFont(parent);
-			page.setSize(page.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-			return page;
-		}
-
-		protected void updateTable() throws InvocationTargetException {
-			TableItem[] items = validatorsTable.getItems();
-			for (int i = 0; i < items.length; i++) {
-				TableItem item = items[i];
-				ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-
-				// Should the validator be enabled? Read the user's preferences from last time,
-				// if they exist, and set from that. If they don't exist, use the Validator class'
-				if (pagePreferences.isManualEnabled(vmd))
-					vmd.setManualValidation(true);
-				else
-					vmd.setManualValidation(false);
-				
-				if (pagePreferences.isBuildEnabled(vmd))
-					vmd.setBuildValidation(true);
-				else
-					vmd.setBuildValidation(false);
-			}
-			validatorList.refresh();
-		}
-		
-		protected void enableManualAndBuildValues() {
-			TableItem[] items = validatorsTable.getItems();
-			for (int i = 0; i < items.length; i++) {
-				TableItem item = items[i];
-				ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-				vmd.setManualValidation(true);
-				vmd.setBuildValidation(true);
-			}
-			validatorList.refresh();
-		}
-		
-		protected void disableManualAndBuildValues() {
-			TableItem[] items = validatorsTable.getItems();
-			for (int i = 0; i < items.length; i++) {
-				TableItem item = items[i];
-				ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-				vmd.setManualValidation(false);
-				vmd.setBuildValidation(false);
-			}
-			validatorList.refresh();
-		}
-
-		public boolean performDefaults() throws InvocationTargetException {
-			pagePreferences.resetToDefault();
-			updateWidgets();
-			getDefaultsButton().setFocus();
-			return true;
-		}
-
-		public boolean performEnableAll() throws InvocationTargetException {
-			setAllValidators(true);
-			pagePreferences.setEnabledValidators(getEnabledValidators());
-			enableManualAndBuildValues();
-			enableAllButton.setFocus();
-			return true;
-		}
-
-		public boolean performDisableAll() throws InvocationTargetException {
-			setAllValidators(false);
-			pagePreferences.setEnabledValidators(getEnabledValidators());
-			disableManualAndBuildValues();
-			disableAllButton.setFocus();
-			return true;
-		}
-		
-		public ValidatorMetaData[] getEnabledValidators() {
-			List enabledValidators = new ArrayList();
-			TableItem[] items = validatorsTable.getItems();
-			for (int i = 0; i < items.length; i++) {
-				ValidatorMetaData validatorMetaData = (ValidatorMetaData) items[i].getData();
-				if(validatorMetaData.isManualValidation() || validatorMetaData.isBuildValidation())
-					enabledValidators.add(validatorMetaData);
-			}
-			return (ValidatorMetaData[])enabledValidators.toArray(new ValidatorMetaData[enabledValidators.size()]);
-		}
-		
-		public ValidatorMetaData[] getManualEnabledValidators() {
-			List enabledValidators = new ArrayList();
-			TableItem[] items = validatorsTable.getItems();
-			for (int i = 0; i < items.length; i++) {
-				ValidatorMetaData validatorMetaData = (ValidatorMetaData) items[i].getData();
-				if(validatorMetaData.isManualValidation())
-					enabledValidators.add(validatorMetaData);
-			}
-			return (ValidatorMetaData[])enabledValidators.toArray(new ValidatorMetaData[enabledValidators.size()]);
-		}
-		
-		public ValidatorMetaData[] getBuildEnabledValidators() {
-			List enabledValidators = new ArrayList();
-			TableItem[] items = validatorsTable.getItems();
-			for (int i = 0; i < items.length; i++) {
-				ValidatorMetaData validatorMetaData = (ValidatorMetaData) items[i].getData();
-				if(validatorMetaData.isBuildValidation())
-					enabledValidators.add(validatorMetaData);
-			}
-			return (ValidatorMetaData[])enabledValidators.toArray(new ValidatorMetaData[enabledValidators.size()]);
-		}
-
-		
-		/**
-		 * 
-		 */
-		private void setAllValidators(boolean bool) {
-			TableItem[] items = validatorsTable.getItems();
-			for (int i = 0; i < items.length; i++) {
-				ValidatorMetaData validatorMetaData = (ValidatorMetaData) items[i].getData();
-				validatorMetaData.setManualValidation(bool);
-				validatorMetaData.setBuildValidation(bool);
-			}
-		}
-
-    protected Menu createContextMenu()
-    {
-      final Menu menu = new Menu(validatorsTable.getShell(), SWT.POP_UP);
-      final MenuItem manualItem = new MenuItem (menu, SWT.CHECK);
-      manualItem.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_MNU_MANUAL));
-      final MenuItem buildItem = new MenuItem (menu, SWT.CHECK);
-      buildItem.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_MNU_BUILD));
-      final MenuItem settingsItem = new MenuItem (menu, SWT.PUSH);
-      settingsItem.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.PREF_MNU_SETTINGS));
-      
-      class MenuItemListener extends SelectionAdapter
-      {
-        public void widgetSelected(SelectionEvent e)
-        {
-          MenuItem menuItem = (MenuItem) e.getSource();
-          int index = menu.indexOf(menuItem) + 1;
-          columnClicked(index);
-        }   
-      }
-      MenuItemListener listener = new MenuItemListener();
-      manualItem.addSelectionListener(listener);
-      buildItem.addSelectionListener(listener);
-      settingsItem.addSelectionListener(listener);
-
-      menu.addMenuListener(new MenuAdapter() {
-        public void menuShown(MenuEvent e)
-        {
-          IStructuredSelection selection = (IStructuredSelection) validatorList.getSelection();
-          ValidatorMetaData vmd = (ValidatorMetaData) selection.getFirstElement();
-          manualItem.setSelection(vmd.isManualValidation());
-          buildItem.setSelection(vmd.isBuildValidation());
-          settingsItem.setEnabled(vmd.isDelegating());
-        }});
-      
-      return menu;
-    }
-    
-    protected void columnClicked(int columnToEdit)
-    {
-      IStructuredSelection selection = (IStructuredSelection) validatorList.getSelection();
-      ValidatorMetaData vmd = (ValidatorMetaData) selection.getFirstElement();
-      
-      switch (columnToEdit)
-      {
-      case 1:
-        vmd.setManualValidation(!vmd.isManualValidation());
-        break;
-      case 2:
-        vmd.setBuildValidation(!vmd.isBuildValidation());
-        break;
-      case 3:
-      {
-        if (!vmd.isDelegating()) {
-          break;
-        }
-        
-        String delegateID = pagePreferences.getDelegateUniqueName(vmd);
-  
-        Shell shell = Display.getCurrent().getActiveShell();
-        DelegatingValidatorPreferencesDialog dialog = new DelegatingValidatorPreferencesDialog(shell, vmd, delegateID);
-  
-        dialog.setBlockOnOpen(true);
-        dialog.create();
-  
-        int result = dialog.open();
-  
-        if (result == Window.OK)
-        {
-          pagePreferences.setDelegateUniqueName(vmd, dialog.getDelegateID());
-        }
-      }
-      default:
-        break;
-      }
-      validatorList.refresh();      
-    }
-    
-		void updateWidgets() throws InvocationTargetException {
-			// Since the setting of the "override" button enables/disables the other widgets on the
-			// page, update the enabled state of the other widgets from the "override" button.
-			updateTable();
-			updateAllWidgets();
-			
-		}
-		
-		protected void updateWidgetsForDefaults() throws InvocationTargetException {
-			updateTableForDefaults();
-			updateAllWidgets();
-		}
-		
-		private void updateAllWidgets() throws InvocationTargetException {
-			// Since the setting of the "override" button enables/disables the other widgets on the
-			// page, update the enabled state of the other widgets from the "override" button.
-			ConfigurationManager prefMgr = ConfigurationManager.getManager();
-			canOverride = prefMgr.getGlobalConfiguration().canProjectsOverride();
-			boolean overridePreferences = canOverride && pagePreferences.doesProjectOverride();
-			overrideGlobalButton.setEnabled(canOverride);
-			overrideGlobalButton.setSelection(overridePreferences);
-			disableAllValidation.setEnabled(overridePreferences);
-			disableAllValidation.setSelection(pagePreferences.isDisableAllValidation());
-			if (overridePreferences)
-				enableDependentControls(!pagePreferences.isDisableAllValidation());
-			else
-				enableDependentControls(overridePreferences);
-			setAddValidationBuilderButtonEnablement();
-			updateHelp();
-		}
-
-		private void setAddValidationBuilderButtonEnablement() {
-			try {
-				boolean builderExists = false;
-				IProjectDescription description = getProject().getDescription();
-				ICommand[] commands = description.getBuildSpec();
-				for (int i = 0; i < commands.length; i++) {
-					if (commands[i].getBuilderName().equals(ValidationPlugin.VALIDATION_BUILDER_ID) | isValidationBuilderEnabled(commands[i]))
-						builderExists = true;
-				}
-				if (builderExists) {
-					addValidationBuilder.setVisible(false);
-				} else {
-					addValidationBuilder.setVisible(true);
-					addValidationBuilder.setSelection(false);
-					addValidationBuilder.setEnabled(true);
-				}
-
-			} catch (CoreException ce) {
-				Logger.getLogger().log(ce);
-			}
-		}
-		
-		private  boolean isValidationBuilderEnabled(ICommand command) {
-			Map args = command.getArguments();
-			if(args.isEmpty())
-				return false;
-			String handle = (String)args.get("LaunchConfigHandle");
-			if(handle != null && handle.length() > 0 && handle.indexOf(ValidationPlugin.VALIDATION_BUILDER_ID) != -1)
-				return true;
-			return false;
-		}
-
-		private void updateTableForDefaults() throws InvocationTargetException {
-			TableItem[] items = validatorsTable.getItems();
-			for (int i = 0; i < items.length; i++) {
-				TableItem item = items[i];
-				ValidatorMetaData vmd = (ValidatorMetaData) item.getData();
-
-				// Should the validator be enabled? Read the user's preferences from last time,
-				// if they exist, and set from that. If they don't exist, use the Validator class'
-				if(pagePreferences.isEnabled(vmd)) {
-					vmd.setManualValidation(true);
-					vmd.setBuildValidation(true);
-				} else {
-					vmd.setManualValidation(false);
-					vmd.setBuildValidation(false);
-				}
-			}
-			validatorList.refresh();
-		}
-
-		/**
-		 * @param overridePreferences
-		 */
-		private void enableDependentControls(boolean overridePreferences) {
-			validatorsTable.setEnabled(overridePreferences);
-      validatorList.refresh();
-			enableAllButton.setEnabled(overridePreferences); // since help messsage isn't
-			disableAllButton.setEnabled(overridePreferences);
-      
-		}
-
-		protected void updateHelp() throws InvocationTargetException {
-			// Whenever a widget is disabled, it cannot get focus.
-			// Since it can't have focus, its context-sensitive F1 help can't come up.
-			// From experimentation, I know that the composite parent of the widget
-			// can't have focus either. So, fudge the focus by making the table the widget
-			// surrogate so that the F1 help can be shown, with its instructions on how to
-			// enable the disabled widget. The table never has F1 help associated with it other
-			// than the page F1, so this fudge doesn't remove any context-sensitive help
-			// from the table widget.
-
-			/*if (autoButton.getEnabled()) {
-				// set the table's help back to what it was
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE);
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(autoButton, ContextIds.VALIDATION_PROPERTIES_PAGE_AUTO_ENABLED);
-			} else {
-				// The order of the following if statement is important!
-				// If the user cannot enable automatic validation on the project, then the user
-				// should not be told, for example, to turn auto-build on. Let the user know that
-				// no matter what they do they cannot run auto-validate on the project. IF the
-				// project
-				// supports auto-validate, THEN check for the items which the user can change.
-				validatorList.getTable().setFocus();
-				if (pagePreferences.numberOfIncrementalValidators() == 0) {
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_AUTO_NOINCVALCONFIG);
-				} else if (!ValidatorManager.getManager().isGlobalAutoBuildEnabled()) {
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_AUTO_AUTOBUILD);
-				} else {
-					// Incremental validators configured but not selected
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_AUTO_NOINCVALSELECTED);
-				}
-			}
-
-			// if autoButton AND build button are disabled, show the build button's "to enable" text
-			if (valWhenBuildButton.getEnabled()) {
-				// Do NOT set the table's help back to what it was.
-				// Only if auto-validate is enabled should the page go back.
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(valWhenBuildButton, ContextIds.VALIDATION_PROPERTIES_PAGE_REBUILD_ENABLED);
-			} else {
-				//				page.getParent().setFocus();
-				validatorList.getTable().setFocus();
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_BUILD_NOVALSELECTED);
-			}
-*/
-			// if the override button is disabled, show its "to enable" text.
-			if (overrideGlobalButton.getEnabled()) {
-				// Do NOT set the table's help back to what it was.
-				// Only if auto-validate is enabled should the page go back.
-				boolean doesProjectSupportBuildValidation = ValidatorManager.doesProjectSupportBuildValidation(getProject());
-				GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-				//boolean isPrefAuto = gp.isAutoValidate();
-				//boolean isPrefManual = gp.isBuildValidate();
-				if (doesProjectSupportBuildValidation) {
-					// Project supports build validation, so it doesn't matter what the preferences
-					// are
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED);
-				} /*else if (!doesProjectSupportBuildValidation && (isPrefAuto && isPrefManual)) {
-					// Project doesn't support build validation, and the user prefers both auto and
-					// manual build validation
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED_CANNOT_HONOUR_BOTH);
-				} else if (!doesProjectSupportBuildValidation && isPrefAuto) {
-					// Project doesn't support build validation, and the user prefers auto build
-					// validation
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED_CANNOT_HONOUR_AUTO);
-				} else if (!doesProjectSupportBuildValidation && isPrefManual) {
-					// Project doesn't support build validation, and the user prefers manual build
-					// validation
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED_CANNOT_HONOUR_MANUAL);
-				} else if (!doesProjectSupportBuildValidation && !isPrefAuto && !isPrefManual) {
-					// Project doesn't support build validation, but that doesn't matter because the
-					// user prefers no build validation.
-					PlatformUI.getWorkbench().getHelpSystem().setHelp(overrideGlobalButton, ContextIds.VALIDATION_PROPERTIES_PAGE_OVERRIDE_ENABLED);
-				}*/
-			} else {
-				validatorList.getTable().setFocus();
-				// Preference page doesn't allow projects to override
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(validatorList.getTable(), ContextIds.VALIDATION_PROPERTIES_PAGE_DISABLED_OVERRIDE);
-			}
-		}
-
-		/*
-		 * Store the current values of the controls into the preference store.
-		 */
-		private void storeValues() throws InvocationTargetException {
-			pagePreferences.setDoesProjectOverride(overrideGlobalButton.getSelection());
-
-			if (pagePreferences.doesProjectOverride()) {
-				pagePreferences.setEnabledManualValidators(getManualEnabledValidators());
-				pagePreferences.setEnabledBuildValidators(getBuildEnabledValidators());
-			} else {
-				pagePreferences.resetToDefault(); // If the project can't or doesn't override,
-				// update its values to match the global
-				// preference values.
-			}
-			pagePreferences.store();
-		}
-
-		/**
-		 * Reads the list of validators, enables the validators which are selected, disables the
-		 * validators which are not selected, and if the auto-validate checkbox is chosen, performs
-		 * a full validation.
-		 */
-		public boolean performOk() throws InvocationTargetException {
-			// addBuilder MUST be called before storeValues
-			// addBuilder adds a builder to the project, and that changes the project description.
-			// Changing a project's description triggers the validation framework's "natureChange"
-			// migration, and a nature change requires that the list of validators be recalculated.
-			// If the builder is added after the values are stored, the stored values are
-			// overwritten.
-			addBuilder();
-
-			// If this method is being called because an APPLY was hit instead of an OK,
-			// recalculate the "can build be enabled" status because the builder may have
-			// been added in the addBuilder() call above.
-			// Also recalculate the values that depend on the isBuilderConfigured value.
-			//isBuilderConfigured = ValidatorManager.doesProjectSupportBuildValidation(getProject());
-
-			// Persist the values.
-			storeValues();
-
-			if (pagePreferences.hasEnabledValidatorsChanged(oldVmd, false) ||
-          pagePreferences.haveDelegatesChanged(oldDelegates, false)) { 
-				// false means that the preference "allow" value hasn't changed
-				ValidatorManager.getManager().updateTaskList(getProject()); 
-			}
-
-			return true;
-		}
-
-		/**
-		 * If the current project doesn't have the validation builder configured on it, add the
-		 * builder. Otherwise return without doing anything.
-		 */
-		private void addBuilder() {
-			if (addValidationBuilder.isEnabled() && addValidationBuilder.getSelection())
-				ValidatorManager.addProjectBuildValidationSupport(getProject());
-		}
-
-		public Composite getControl() {
-			return page;
-		}
-
-		public void dispose() {
-			enableAllButton.dispose();
-			disableAllButton.dispose();
-			validatorList.getTable().dispose();
-			messageLabel.dispose();
-			//			layout.dispose();
-			//			data.dispose();
-			emptyRowPlaceholder.dispose();
-			overrideGlobalButton.dispose();
-			page.dispose();
-			color.dispose();
-		}
-
-		public boolean performCancel() {
-			pagePreferences.setDoesProjectOverride(existingOverrideGlobalVal);
-			pagePreferences.setDisableAllValidation(existingDisableAllValidation);
-			return true;
-		}
-	}
-
-	/**
-	 * ValidationPreferencePage constructor comment.
-	 */
-	public ValidationPropertiesPage() {
-		// Some of the initialization is done in the "initialize" method, which is
-		// called by the "getPageType" method, because the current project must
-		// be known in order to initialize those fields.
-	}
-
-	/**
-	 * Given a parent (the Properties guide), create the Validators page to be added to it.
-	 */
-	protected Control createContents(Composite parent) {
-		IProject project = getProject();
-
-		if ((project == null) || !project.isOpen()) {
-			_pageImpl = new InvalidPage(parent);
-		} else {
-			try {
-				if (ConfigurationManager.getManager().getProjectConfiguration(project).numberOfValidators() == 0) {
-					_pageImpl = new NoValidatorsPage(parent);
-				} else {
-					_pageImpl = new ValidatorListPage(parent);
-				}
-			} catch (InvocationTargetException exc) {
-				_pageImpl = new InvalidPage(parent);
-				displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			} catch (Throwable exc) {
-				_pageImpl = new InvalidPage(parent);
-				displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			}
-		}
-
-		return _pageImpl.getControl();
-	}
-
-	/**
-	 * Since the pages are inner classes of a child PreferencePage, not a PreferencePage itself,
-	 * DialogPage's automatic disposal of its children's widgets cannot be used. Instead, dispose of
-	 * each inner class' widgets explicitly.
-	 */
-	public void dispose() {
-		super.dispose();
-		try {
-			_pageImpl.dispose();
-		} catch (Throwable exc) {
-			logError(exc);
-		}
-	}
-
-	/**
-	 * Returns the highlighted item in the workbench.
-	 */
-	public IProject getProject() {
-		Object element = getElement();
-
-		if (element == null) {
-			return null;
-		}
-
-		if (element instanceof IProject) {
-			return (IProject) element;
-		}
-
-		return null;
-	}
-
-	protected void noDefaultAndApplyButton() {
-		super.noDefaultAndApplyButton();
-	}
-
-	/**
-	 * Performs special processing when this page's Defaults button has been pressed.
-	 * <p>
-	 * This is a framework hook method for sublcasses to do special things when the Defaults button
-	 * has been pressed. Subclasses may override, but should call <code>super.performDefaults</code>.
-	 * </p>
-	 */
-	protected void performDefaults() {
-		super.performDefaults();
-		try {
-			_pageImpl.performDefaults();
-		} catch (InvocationTargetException exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		} catch (Throwable exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-		}
-	}
-	
-	public boolean performCancel() {
-		_pageImpl.performCancel();
-		return true;
-	}
-
-	/**
-	 * When the user presses the "OK" or "Apply" button on the Properties Guide/Properties Page,
-	 * respectively, some processing is performed by this PropertyPage. If the page is found, and
-	 * completes successfully, true is returned. Otherwise, false is returned, and the guide doesn't
-	 * finish.
-	 */
-	public boolean performOk() {
-		try {
-			return _pageImpl.performOk();
-		} catch (InvocationTargetException exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			return false;
-		} catch (Throwable exc) {
-			displayAndLogError(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_TITLE), ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INTERNAL_PAGE), exc);
-			return false;
-		}
-	}
-
-	void logError(Throwable exc) {
-		Logger logger = WTPUIPlugin.getLogger();
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationUIPlugin.getLogEntry();
-			entry.setSourceIdentifier("ValidationPropertiesPage.displayAndLogError"); //$NON-NLS-1$
-			entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INTERNAL_PAGE);
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-
-			if (exc instanceof InvocationTargetException) {
-				if (((InvocationTargetException) exc).getTargetException() != null) {
-					entry.setTargetException(((InvocationTargetException) exc).getTargetException());
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-	}
-
-	void displayAndLogError(String title, String message, Throwable exc) {
-		logError(exc);
-		displayMessage(title, message, org.eclipse.swt.SWT.ICON_ERROR);
-	}
-
-	private void displayMessage(String title, String message, int iIconType) {
-		MessageBox messageBox = new MessageBox(getShell(), org.eclipse.swt.SWT.OK | iIconType | org.eclipse.swt.SWT.APPLICATION_MODAL);
-		messageBox.setMessage(message);
-		messageBox.setText(title);
-		messageBox.open();
-	}
-
-	/**
-	 * @see org.eclipse.jface.preference.PreferencePage#getDefaultsButton()
-	 */
-	protected Button getDefaultsButton() {
-		return super.getDefaultsButton();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIConstants.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIConstants.java
deleted file mode 100644
index b06484b..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIConstants.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.validation.internal.ui;
-
-
-/**
- * @deprecated For use by the validation framework only.
- */
-public interface ValidationUIConstants extends org.eclipse.wst.validation.internal.ui.ResourceConstants {
-	//Default
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIMessages.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIMessages.java
index a8001d5..d6963b3 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIMessages.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/ValidationUIMessages.java
@@ -1,13 +1,14 @@
-/**
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 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/cpl-v10.html
- * 
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
  * Contributors:
  *   IBM - Initial API and implementation
- */
+ * /
+ *******************************************************************************/
 package org.eclipse.wst.validation.internal.ui;
 
 import org.eclipse.osgi.util.NLS;
@@ -24,6 +25,30 @@
 	public static String SaveFilesDialog_must_save;
 	public static String PrefPage_always_save;
 	public static String RunValidationDialogTitle;
+	public static String UnableToSave;
+	
+	public static String Validate;
+	
+	public static String ValResults;
+
+	// results validating one resource
+	public static String ValError1Resource1;
+	public static String ValErrorsResource1;
+	public static String ValWarn1Resource1;
+	public static String ValWarnResource1;
+	public static String ValInfo1Resource1;
+	public static String ValInfoResource1;
+
+	// results validating multiple resources
+	public static String ValError1Resources;
+	public static String ValErrorsResources;
+	public static String ValWarn1Resources;
+	public static String ValWarnResources;
+	public static String ValInfo1Resources;
+	public static String ValInfoResources;
+
+	public static String ValSuccess;
+	
 
 	static {
 		// load message values from bundle file
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/RunnableWithProgressWrapper.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/RunnableWithProgressWrapper.java
index cf32408..4a8acb8 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/RunnableWithProgressWrapper.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/RunnableWithProgressWrapper.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -94,4 +94,4 @@
 	protected void setValidationOperation(ValidationOperation op) {
 		validationOperation = op;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/ValidationUIPlugin.java b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/ValidationUIPlugin.java
index 2674b33..3f0496b 100644
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/ValidationUIPlugin.java
+++ b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/plugin/ValidationUIPlugin.java
@@ -1,30 +1,30 @@
-/***************************************************************************************************
- * Copyright (c) 2001, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.validation.internal.ui.plugin;
 
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.ImageRegistry;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
 import org.eclipse.wst.validation.internal.operations.ValidationOperation;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 
@@ -35,7 +35,7 @@
 
 	public final static String VALIDATION_PROP_FILE_NAME = "validate_ui"; //$NON-NLS-1$
 	public static final String VALIDATION_PLUGIN_ID = "org.eclipse.wst.validation.ui"; //$NON-NLS-1$
-	public static final String[] ICON_DIRS = new String[]{"icons"};
+	public static final String[] ICON_DIRS = new String[]{"icons"}; //$NON-NLS-1$
 
 	public ValidationUIPlugin() {
 		super();
@@ -48,11 +48,6 @@
 		return VALIDATION_PROP_FILE_NAME;
 	}
 
-	public static LogEntry getLogEntry() {
-		return ValidationPlugin.getLogEntry();
-	}
-
-
 	public static ValidationUIPlugin getPlugin() {
 		return _plugin;
 	}
@@ -68,15 +63,7 @@
 		try {
 			return Platform.getResourceString(Platform.getBundle(VALIDATION_PLUGIN_ID), key);
 		} catch (Exception e) {
-			e.printStackTrace();
-			Logger logger = WTPUIPlugin.getLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = getLogEntry();
-				entry.setSourceID("ValidationUIPlugin.getResourceString(String)"); //$NON-NLS-1$
-				entry.setText("Missing resource for key" + key); //$NON-NLS-1$
-				logger.write(Level.FINE, entry);
-			}
-
+			ValidationUIPlugin.getPlugin().handleException(e);
 			return key;
 		}
 	}
@@ -159,4 +146,26 @@
 		}
 		return null;
 	}
-}
\ No newline at end of file
+	
+	
+	public void handleException(Throwable e){
+		Status status = new Status(IStatus.ERROR, PLUGIN_ID, e.getLocalizedMessage(), e);
+		getLog().log(status);
+	}
+	
+	/** 
+	 * Write a message into the log. 
+	 * 
+	 * We are in the transition of moving to a new approach for localized messages. This is the new 
+	 * approach for exceptions.
+	 * 
+	 * @param severity message severity, see IStaus
+	 * @param message a localized message
+	 */
+	public void logMessage(int severity, String message){
+		Status status = new Status(severity, PLUGIN_ID, message);
+		getLog().log(status);
+		
+	}	
+
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/validationui.properties b/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/validationui.properties
deleted file mode 100644
index d9a8c24..0000000
--- a/plugins/org.eclipse.wst.validation.ui/validateui/org/eclipse/wst/validation/internal/ui/validationui.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 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
-###############################################################################
-
-SaveFilesDialog_saving=Saving Resources
-SaveFilesDialog_always_save=&Always save all modified resources automatically prior to validating
-SaveFilesDialog_save_all_resources=Save All Modified Resources
-SaveFilesDialog_must_save=All modified resources must be saved before this operation.
-
-PrefPage_always_save=&Save all modified resources automatically prior to validating
-
-RunValidationDialogTitle=Running Validation
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/AdapterFactory.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/AdapterFactory.java
new file mode 100644
index 0000000..750c6fd
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/AdapterFactory.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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.wst.validation.ui.internal;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.ValidatorMutable;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+import org.eclipse.wst.validation.internal.model.FilterRule;
+
+public class AdapterFactory implements IAdapterFactory {
+
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		if (adapterType == IWorkbenchAdapter.class && adaptableObject instanceof Validator.V2)return _valAdaptor;
+		if (adapterType == IWorkbenchAdapter.class && adaptableObject instanceof FilterGroup)return _fgAdaptor;
+		if (adapterType == IWorkbenchAdapter.class && adaptableObject instanceof FilterRule)return _ruleAdaptor;
+		if (adapterType == IWorkbenchAdapter.class && adaptableObject instanceof ValidatorMutable)return _valMutableAdaptor;
+
+		return null;
+	}
+
+	public Class[] getAdapterList() {
+		return new Class[] { IWorkbenchAdapter.class };
+	}
+
+	private IWorkbenchAdapter _valAdaptor = new IWorkbenchAdapter() {
+
+		public Object[] getChildren(Object o) {
+			return ((Validator.V2) o).getGroups();
+		}
+
+		public ImageDescriptor getImageDescriptor(Object o) {
+			return null;
+		}
+
+		public String getLabel(Object o) {
+			return ((Validator.V2) o).getName();
+		}
+
+		public Object getParent(Object o) {
+			return null;
+		}
+
+	};
+	private IWorkbenchAdapter _valMutableAdaptor = new IWorkbenchAdapter() {
+
+		public Object[] getChildren(Object o) {
+			return ((ValidatorMutable) o).getGroups();
+		}
+
+		public ImageDescriptor getImageDescriptor(Object o) {
+			return null;
+		}
+
+		public String getLabel(Object o) {
+			return ((ValidatorMutable) o).getName();
+		}
+
+		public Object getParent(Object o) {
+			return null;
+		}
+
+	};
+
+	private IWorkbenchAdapter _fgAdaptor = new IWorkbenchAdapter() {
+
+		public Object[] getChildren(Object o) {
+			return ((FilterGroup) o).getRules();
+		}
+
+		public ImageDescriptor getImageDescriptor(Object o) {
+			return null;
+		}
+
+		public String getLabel(Object o) {
+			FilterGroup fg = (FilterGroup) o;
+			return fg.getDisplayableType();
+		}
+
+		public Object getParent(Object o) {
+			return null;
+		}
+	};
+
+	private IWorkbenchAdapter _ruleAdaptor = new IWorkbenchAdapter() {
+
+		public Object[] getChildren(Object o) {
+			return new Object[0];
+		}
+
+		public ImageDescriptor getImageDescriptor(Object o) {
+			return null;
+		}
+
+		public String getLabel(Object o) {
+			FilterRule rule = (FilterRule) o;
+			return rule.getName();
+		}
+
+		public Object getParent(Object o) {
+			return null;
+		}
+
+	};
+
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/HelpContextIds.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/HelpContextIds.java
new file mode 100644
index 0000000..1af7aeb
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/HelpContextIds.java
@@ -0,0 +1,18 @@
+package org.eclipse.wst.validation.ui.internal;
+
+import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
+
+public interface HelpContextIds {
+	String PreferencePage = ValidationUIPlugin.VALIDATION_PLUGIN_ID + ".jvgp0000"; //$NON-NLS-1$
+	
+	String FilterRule = ValidationUIPlugin.VALIDATION_PLUGIN_ID + ".jvgp0100";  //$NON-NLS-1$
+	String FRFileExt = ValidationUIPlugin.VALIDATION_PLUGIN_ID + ".jvgp0101";  //$NON-NLS-1$
+	String FRName = ValidationUIPlugin.VALIDATION_PLUGIN_ID + ".jvgp0102";  //$NON-NLS-1$
+	String FRProjectNature = ValidationUIPlugin.VALIDATION_PLUGIN_ID + ".jvgp0103";  //$NON-NLS-1$
+	String FRFacet = ValidationUIPlugin.VALIDATION_PLUGIN_ID + ".jvgp0104";  //$NON-NLS-1$
+	String FRContentType = ValidationUIPlugin.VALIDATION_PLUGIN_ID + ".jvgp0105";  //$NON-NLS-1$
+	
+	String ProjectPage = ValidationUIPlugin.VALIDATION_PLUGIN_ID + ".jvpp0000"; //$NON-NLS-1$
+	String ProjectFilterRule = ValidationUIPlugin.VALIDATION_PLUGIN_ID + ".jvpp0100";  //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ImageNames.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ImageNames.java
new file mode 100644
index 0000000..5873170
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ImageNames.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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.wst.validation.ui.internal;
+
+/**
+ * Names of the images.
+ * @author karasiuk
+ *
+ */
+public interface ImageNames {
+	
+	String okTable 		= "ok_tbl"; //$NON-NLS-1$
+	String failTable 	= "fail_tbl"; //$NON-NLS-1$	
+	String settings 	= "settings"; //$NON-NLS-1$
+	String disabled 	= "_disabled"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ManualValidationRunner.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ManualValidationRunner.java
new file mode 100644
index 0000000..f70bcce
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ManualValidationRunner.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.ui.internal;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.MultiRule;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.wst.validation.internal.ValOperation;
+import org.eclipse.wst.validation.internal.ValType;
+import org.eclipse.wst.validation.internal.ValidationResultSummary;
+import org.eclipse.wst.validation.internal.ValidationRunner;
+import org.eclipse.wst.validation.ui.internal.dialog.ResultsDialog;
+
+/**
+ * Run a manual validation. 
+ * @author karasiuk
+ *
+ */
+public class ManualValidationRunner extends WorkspaceJob {
+	
+	private Map<IProject, Set<IResource>> 	_projects;
+	private ValType _valType;
+	private boolean	_showResults;
+	
+	/**
+	 * Validate the selected projects and/or resources.
+	 * 
+	 * @param projects
+	 *            The selected projects. The key is an IProject and the value is
+	 *            the Set of IResources that were selected. Often this will be
+	 *            every resource in the project.
+	 * 
+	 * @param isManual
+	 *            Is this a manual validation?
+	 * 
+	 * @param isBuild
+	 *            Is this a build based validation?
+	 * 
+	 * @param showResults
+	 *            When the validation is finished, show the results in a dialog box.
+	 */
+	public static void validate(Map<IProject, Set<IResource>> projects, ValType valType, boolean showResults){
+		ManualValidationRunner me = new ManualValidationRunner(projects, valType, showResults);
+		
+		//TODO optimize this, I don't like the idea of validators having to lock the entire project
+		Set<IProject> keys = projects.keySet();
+		IProject[] projectArray = new IProject[keys.size()];
+		keys.toArray(projectArray);
+		if (projectArray.length == 1)me.setRule(projectArray[0]);
+		else {
+			me.setRule(MultiRule.combine(projectArray));
+		}
+		me.schedule();
+	}
+	
+	private ManualValidationRunner(Map<IProject, Set<IResource>> projects, ValType valType, boolean showResults){
+		super(ValUIMessages.Validation);
+		_projects = projects;
+		_valType = valType;
+		_showResults = showResults;
+	}
+
+	public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+		
+		long start = System.currentTimeMillis();
+		final ValOperation vo = ValidationRunner.validate(_projects, _valType, monitor, false);
+		final long time = System.currentTimeMillis() - start;
+		int resourceCount = 0;
+		for (Set s : _projects.values())resourceCount += s.size();
+		final int finalResourceCount = resourceCount;
+		if (vo.isCanceled())return Status.CANCEL_STATUS;
+		
+		if (_showResults){
+			Display display = Display.getDefault();
+			Runnable run = new Runnable(){
+
+				public void run() {
+					ValidationResultSummary vr = vo.getResult();
+					ResultsDialog rd = new ResultsDialog(null, vr, time, finalResourceCount);
+					rd.open();
+				}
+				
+			};
+			display.asyncExec(run);			
+		}
+		return Status.OK_STATUS;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ValUIMessages.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ValUIMessages.java
new file mode 100644
index 0000000..99da9b9
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ValUIMessages.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.ui.internal;
+
+import org.eclipse.osgi.util.NLS;
+
+public class ValUIMessages extends NLS {
+	
+	private static final String BUNDLE_NAME = "org.eclipse.wst.validation.ui.internal.messages"; //$NON-NLS-1$
+	   
+	public static String ADD_VALIDATION_BUILDER;
+	
+	public static String PREF_BUTTON_OVERRIDE;
+	public static String PREF_VALLIST_TITLE;
+	public static String PREF_BUTTON_ENABLEALL;
+	public static String PREF_BUTTON_DISABLEALL;
+	public static String PREF_MNU_MANUAL;
+	public static String PREF_MNU_BUILD;
+	public static String PREF_MNU_SETTINGS;
+	
+	public static String ConfigWsSettings;
+	public static String DoNotShowResults;
+	public static String DelegatesDialogTitle;
+	public static String DelegatesComboLabel;
+	
+	public static String ErrorsWarnings;
+		
+	public static String VBF_EXC_INTERNAL_TITLE;
+	public static String VBF_EXC_INTERNAL_PAGE;
+	public static String VBF_EXC_INVALID_REGISTER;
+	public static String DISABLE_VALIDATION;
+	
+	public static String MANUAL;
+	public static String BUILD;
+	public static String SETTINGS;
+	public static String VALIDATOR;
+	public static String VBF_UI_NO_VALIDATORS_INSTALLED;
+	
+	public static String SaveFilesDialog_saving;
+	public static String SaveFilesDialog_always_save;
+	public static String SaveFilesDialog_save_all_resources;
+	public static String SaveFilesDialog_must_save;
+	public static String PrefPage_always_save;
+	public static String PrefPageConfirmDialog;
+	public static String ProjectOverridesNotAllowed;
+	public static String RunValidationDialogTitle;
+	
+	/* Validator Filters */
+	public static String fdTitle;
+	public static String fdNoFilters;
+
+	public static String ErrConfig;
+	
+	public static String FilterHelp;
+	
+	public static String ButtonAddGroupInclude;	
+	public static String ButtonAddGroupExclude;	
+	public static String ButtonAddRule;	
+	public static String ButtonRemove;
+	
+	public static String LabelExtension;
+	public static String LabelFile;
+	public static String LabelProjects;
+	public static String LabelFacets;
+	public static String LabelContentType;
+	public static String LabelEnableProjectSpecific;
+	
+	public static String DescExtension;
+	public static String DescFile;
+	public static String DescProjects;
+	public static String DescFacets;
+	public static String DescContentType;
+	
+	public static String Validation;
+	public static String ValidationStatus;
+	
+	public static String ErrSummary;
+	public static String ValidationSuccessful;
+	
+	public static String FrWizard;
+	public static String FrSelectFilterType;
+	public static String FrFileExtension;
+	public static String FrFileExtensionLabel;
+	public static String FrCaseSensitive;
+	public static String FrExactMatch;
+	public static String FrFolderOrFile;
+	public static String FrFolderOrFileLabel;
+	public static String FrBrowseFile;
+	public static String FrFileFilter;
+	public static String FrBrowseFolder;
+	public static String FrFolderFilter;
+	public static String FrProjectNature;
+	public static String FrProjectNatureLabel;
+	public static String FrSimpleFileName;
+	public static String FrFacit;
+	public static String FrFacitLabel;
+	public static String FrContentType;
+	public static String FrContentTypeLabel;
+	public static String FrMsgSev;
+	
+	public static String RebuildTitle;
+	public static String RebuildMsg;
+	
+		
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, ValUIMessages.class);
+	  }
+
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/FilterDialog.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/FilterDialog.java
new file mode 100644
index 0000000..186eaae
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/FilterDialog.java
@@ -0,0 +1,469 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 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.wst.validation.ui.internal.dialog;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.wizard.WizardDialog;
+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.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+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.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.model.BaseWorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.wst.validation.MessageSeveritySetting;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValMessages;
+import org.eclipse.wst.validation.internal.ValidatorMutable;
+import org.eclipse.wst.validation.internal.delegates.ValidatorDelegateDescriptor;
+import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+import org.eclipse.wst.validation.internal.model.FilterRule;
+import org.eclipse.wst.validation.internal.model.ValidatorHelper;
+import org.eclipse.wst.validation.ui.internal.AdapterFactory;
+import org.eclipse.wst.validation.ui.internal.ValUIMessages;
+
+/**
+ * Display a filter dialog for a particular Validator, that is a list of all the filters that are active for
+ * the validator.
+ * 
+ * @author karasiuk
+ *
+ */
+public final class FilterDialog extends Dialog {
+	
+	/** 
+	 * If we are doing project level filters this will point to the project. This is null if we are doing
+	 * workspace level filters. 
+	 */
+	private IProject	_project;
+	
+	private ValidatorMutable 	_validator;
+	
+	private TreeViewer		_tree;
+	private Combo			_delegating;
+	private IAdapterFactory _adaptorFactory = new AdapterFactory();
+	
+	private Button		_addGroupInclude;
+	private Button		_addGroupExclude;
+	private Button		_addRule;
+	private Button		_remove;
+	private ISelectionChangedListener	_nodeChangedListener;
+	
+	/** The currently selected group. If a rule is selected instead, then this will be null. */
+	private FilterGroup	_selectedGroup;
+	
+	/** The currently selected rule. If a group is selected instead, then this will be null. */
+	private FilterRule	_selectedRule;
+	
+	private Combo[]		_messageSev;
+	
+	private static String[] _messages = new String[]{
+		ValMessages.SevError, ValMessages.SevWarning, ValMessages.SevIgnore};
+	
+	private Shell		_shell;
+	
+	/**
+	 * Create a dialog that knows how to change a validator's filters.
+	 * 
+	 * @param shell
+	 * 
+	 * @param validator the validator that is being updated.
+	 * 
+	 * @param project the project that the filters are being added to. If these are workspace
+	 * level filters, then this must be null. 
+	 */
+	public FilterDialog(Shell shell, ValidatorMutable validator, IProject project){
+		super(shell);
+		_shell = shell;
+		setShellStyle(getShellStyle() | SWT.CLOSE|SWT.MIN|SWT.MAX|SWT.RESIZE);
+		_validator = validator;
+		_project = project;
+	}
+	
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(NLS.bind(ValUIMessages.fdTitle, _validator.getName()));
+	}
+	
+	protected Control createDialogArea(Composite parent) {
+		Composite c = (Composite)super.createDialogArea(parent);
+		c.setLayout(new GridLayout(2, false));
+		if (!_validator.isV2Validator()){
+			new Label(c, SWT.NONE).setText(ValUIMessages.fdNoFilters);
+		}
+		else {
+			Label blurb = new Label(c, SWT.LEFT | SWT.WRAP);
+			blurb.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
+			blurb.setText(ValUIMessages.FilterHelp);
+			
+			_tree = new TreeViewer(c, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+			_tree.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+			Platform.getAdapterManager().registerAdapters(_adaptorFactory, ValidatorMutable.class);
+			Platform.getAdapterManager().registerAdapters(_adaptorFactory, FilterGroup.class);
+			Platform.getAdapterManager().registerAdapters(_adaptorFactory, FilterRule.class);
+			_tree.setContentProvider(new BaseWorkbenchContentProvider());
+			_tree.setLabelProvider(new WorkbenchLabelProvider());
+			_tree.setInput(_validator);
+			_tree.expandAll();
+			
+			addButtons(c);
+			
+			String delegatingId = _validator.getDelegatingId();
+			if (delegatingId != null){
+				addDelegatorSelection(c);
+			}
+				
+			_nodeChangedListener = new ISelectionChangedListener(){
+
+				public void selectionChanged(SelectionChangedEvent event) {
+					_selectedGroup = null;
+					_selectedRule = null;
+					if (event.getSelection() instanceof IStructuredSelection){
+						IStructuredSelection sel = (IStructuredSelection)event.getSelection();
+						if (sel.getFirstElement() instanceof FilterGroup){
+							_selectedGroup = (FilterGroup)sel.getFirstElement();
+						}
+						else if (sel.getFirstElement() instanceof FilterRule){
+							_selectedRule = (FilterRule)sel.getFirstElement();
+						}
+					}
+					updateButtons();
+				}
+				
+			};
+			
+			_tree.addSelectionChangedListener(_nodeChangedListener);
+			
+			addMessageMappings(c);
+		}
+		return c;
+	}
+
+	private void addButtons(Composite c) {
+		Composite buttons = new Composite(c, SWT.TOP);
+		GridData gd = new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1);
+		buttons.setLayoutData(gd);
+		buttons.setLayout(new GridLayout(1, true));
+		_addGroupInclude = new Button(buttons, SWT.PUSH | SWT.FILL | SWT.CENTER);
+		_addGroupInclude.setText(ValUIMessages.ButtonAddGroupInclude);
+		_addGroupInclude.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
+		
+		_addGroupInclude.addSelectionListener(new SelectionListener(){
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				addGroup(false);				
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				addGroup(false);						
+			}
+			
+		});
+			
+		_addGroupExclude = new Button(buttons, SWT.PUSH | SWT.FILL | SWT.CENTER);
+		_addGroupExclude.setText(ValUIMessages.ButtonAddGroupExclude);
+		_addGroupExclude.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
+		
+		_addGroupExclude.addSelectionListener(new SelectionListener(){
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				addGroup(true);				
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				addGroup(true);						
+			}
+			
+		});
+
+		_addRule = new Button(buttons, SWT.PUSH | SWT.FILL | SWT.CENTER);
+		_addRule.setText(ValUIMessages.ButtonAddRule);
+		_addRule.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
+		_addRule.addSelectionListener(new SelectionListener(){
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				doIt();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				doIt();
+			}
+			
+			private void doIt(){
+				NewFilterRule nfr = new NewFilterRule(_project);
+				WizardDialog wd = new WizardDialog(_shell, nfr);
+				wd.setBlockOnOpen(true);
+				int rc = wd.open();
+				if (rc == WizardDialog.CANCEL)return;
+				
+				FilterRule rule = nfr.getRule();
+				if (rule != null){
+					FilterGroup newGroup = FilterGroup.addRule(_selectedGroup, rule);
+					_validator.replaceFilterGroup(_selectedGroup, newGroup);
+					_selectedGroup = newGroup;
+					refresh();
+				}
+			}
+			
+		});
+
+		_remove = new Button(buttons, SWT.PUSH | SWT.FILL | SWT.CENTER);
+		_remove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
+		_remove.setText(ValUIMessages.ButtonRemove);
+		_remove.addSelectionListener(new SelectionListener(){
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				remove();					
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				remove();						
+			}				
+		});
+		
+		Button restore = new Button(buttons, SWT.PUSH | SWT.FILL | SWT.CENTER);
+		restore.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
+		String defaults = JFaceResources.getString("defaults"); //$NON-NLS-1$
+		restore.setText(defaults);
+		restore.addSelectionListener(new SelectionListener(){
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				restoreDefaults();					
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				restoreDefaults();						
+			}				
+		});
+	}
+	
+	private void restoreDefaults() {
+		if (_validator.isV2Validator()){
+			try {
+				String id = _validator.getId();
+				Validator[] vals = ValManager.getDefaultValidators();
+				for (Validator v : vals){
+					if (v.getId().equals(id)){
+						_validator = new ValidatorMutable(v);
+						_tree.setInput(_validator);
+						_tree.expandAll();
+						refresh();
+						return;
+					}
+				}
+			}
+			catch (InvocationTargetException e){
+				
+			}
+		}
+		
+	}
+
+
+	private void addMessageMappings(Composite c) {
+		if (!_validator.isV2Validator())return;
+		Map<String,MessageSeveritySetting> mappings = _validator.getMessageSettings();
+		if (mappings == null || mappings.size() == 0)return;
+		
+		Group group = new Group(c, SWT.NONE);
+		group.setText(ValUIMessages.FrMsgSev);
+		group.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
+		group.setLayout(new GridLayout(2, false));
+		
+//		Label heading = new Label(c, SWT.LEFT);
+//		heading.setText(ValUIMessages.ErrorsWarnings);
+//		heading.setFont(JFaceResources.getHeaderFont());
+//		heading.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
+		
+		_messageSev = new Combo[mappings.size()];
+		int i= 0;
+		for (MessageSeveritySetting ms : mappings.values()){
+			Label label = new Label(group, SWT.LEFT);
+			label.setText("   " + ms.getLabel() + ":"); //$NON-NLS-1$ //$NON-NLS-2$
+			
+			Combo sev = new Combo(group, SWT.RIGHT);
+			_messageSev[i++] = sev;
+			sev.setItems(_messages);
+			sev.select(ms.getCurrent().ordinal());
+			sev.setData(ms);
+			sev.addSelectionListener(new SelectionListener(){
+
+				public void widgetDefaultSelected(SelectionEvent e) {
+					select(e);
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					select(e);
+				}
+				
+				private void select(SelectionEvent e){
+					Combo w = (Combo)e.widget;
+					MessageSeveritySetting ms = (MessageSeveritySetting)w.getData();
+					int i = w.getSelectionIndex();
+					if (ms.setCurrent(MessageSeveritySetting.Severity.values()[i]))
+						_validator.bumpChangeCountMessages();
+				}
+				
+			});
+		}
+	}
+		
+	/**
+	 * Add a combo box so that the user can change which delegating validator to call.
+	 */
+	private void addDelegatorSelection(Composite c) {
+		Map map = ValidatorDelegatesRegistry.getInstance().getDelegateDescriptors(_validator.getValidatorClassname());
+		if (map == null)return;
+		
+		Composite line = new Composite(c, SWT.NONE);
+		line.setLayout(new RowLayout(SWT.HORIZONTAL));
+		line.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
+
+		Label label = new Label(line, SWT.CENTER);
+		label.setText(ValUIMessages.DelegatesComboLabel);
+
+				
+		_delegating = new Combo(line, SWT.READ_ONLY);
+		String[] items = new String[map.size()];
+		final String ids[] = new String[map.size()];
+		String selected = null;
+		Iterator it = map.values().iterator();
+		for (int i=0; i<items.length;i++){
+			ValidatorDelegateDescriptor vd = (ValidatorDelegateDescriptor)it.next();
+			items[i] = vd.getName();
+			ids[i] = vd.getId();
+			if (vd.getId().equals(_validator.getDelegatingId())){
+				selected = vd.getName();
+			}
+		}
+		_delegating.setItems(items);
+		_delegating.setText(selected);
+		_delegating.addSelectionListener(new SelectionListener(){
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				int sel = _delegating.getSelectionIndex();
+				_validator.setDelegatingId(ids[sel]);
+			}
+			
+		});
+	}
+
+	/**
+	 * Add a new filter group to the validator.
+	 * @param exclude
+	 */
+	private void addGroup(boolean exclude){
+		if (!_validator.isV2Validator())return;
+		FilterRule[] rules = new FilterRule[0];
+		_validator.add(FilterGroup.create(exclude, rules));
+		refresh();
+		
+	}
+	
+	private void refresh(){
+		_tree.refresh();
+		_tree.expandAll();
+		updateButtons();		
+	}
+	
+	/**
+	 * Remove the current selection from the validator.
+	 */
+	private void remove(){
+		if (_selectedRule != null){
+			FilterGroup group = findGroup(_selectedRule);
+			if (group != null){
+				FilterGroup newGroup = FilterGroup.removeRule(group, _selectedRule);
+				_validator.replaceFilterGroup(group, newGroup);
+				refresh();
+			}
+		}
+		
+		if (_selectedGroup != null){
+			_validator.remove(_selectedGroup);
+			refresh();
+			return;
+		}
+	}
+	
+	/**
+	 * Find the group in the current validator that has this rule.
+	 * @param rule The rule that we are searching for.
+	 * @return null if we can not find the group.
+	 */
+	private FilterGroup findGroup(FilterRule rule) {
+		for (FilterGroup group : _validator.getGroups()){
+			for (FilterRule fr : group.getRules()){
+				if (fr.equals(rule))return group;
+			}
+		}
+		return null;
+	}
+
+	private void updateButtons() {
+		if (_validator.isV2Validator()){
+			_addGroupExclude.setEnabled(!ValidatorHelper.hasExcludeGroup(_validator));
+		}
+		_addRule.setEnabled(_selectedGroup != null);
+		_remove.setEnabled(_selectedGroup != null || _selectedRule != null);
+		if (_messageSev != null){
+			Map<String,MessageSeveritySetting> msgs = _validator.getMessageSettings();
+			if (msgs != null && _messageSev.length == msgs.size()){
+				int i = 0;
+				for (MessageSeveritySetting ms : msgs.values()){
+					_messageSev[i++].select(ms.getCurrent().ordinal());
+				}
+			}
+		}
+	}
+
+
+	public boolean close() {
+		Platform.getAdapterManager().unregisterAdapters(_adaptorFactory);
+		if (_tree != null)_tree.removeSelectionChangedListener(_nodeChangedListener);
+		return super.close();
+	}
+	
+	protected Point getInitialSize() {
+		return new Point(600, 475);
+	}
+
+	public ValidatorMutable getValidator() {
+		return _validator;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/NewFilterRule.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/NewFilterRule.java
new file mode 100644
index 0000000..fad49d7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/NewFilterRule.java
@@ -0,0 +1,568 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 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.wst.validation.ui.internal.dialog;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectNatureDescriptor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+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.DirectoryDialog;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.validation.internal.model.FilterRule;
+import org.eclipse.wst.validation.ui.internal.HelpContextIds;
+import org.eclipse.wst.validation.ui.internal.ValUIMessages;
+
+/**
+ * A wizard that adds new rules to validators.
+ * @author karasiuk
+ *
+ */
+public class NewFilterRule extends Wizard {
+	
+	private Page1 			_page1;
+	private IWizardPage		_page2;
+	
+	private IProject		_project;
+	
+	private FilterRule		_rule;
+	
+	public NewFilterRule(IProject project){
+		_project = project;
+		setWindowTitle(ValUIMessages.FrWizard);
+		_page1 = new Page1(project);
+		addPage(_page1);
+		setForcePreviousAndNextButtons(true);
+	}
+	
+	public boolean canFinish() {	
+		if (_page2 != null)return _page2.isPageComplete();
+		return false;
+	}
+		
+	public FilterRule getRule(){
+		return _rule;
+	}
+	
+	public boolean performFinish() {
+		if (_page2 == null)return false;
+		FilterWizardPage page = (FilterWizardPage)_page2;
+		_rule = page.getFilterRule();
+		return _rule != null;
+	}
+	
+	public IWizardPage getNextPage(IWizardPage page) {
+		if (page == _page1){
+			setForcePreviousAndNextButtons(false);
+			_page2 = returnOrBuildPage(_page1.getSelectedFilter());
+			return _page2;
+		}
+		return null;
+	}
+	
+	private IWizardPage returnOrBuildPage(int selectedFilter) {
+			IWizardPage page =  null;
+			if (_project != null && selectedFilter == 2)selectedFilter = 4;
+			switch (selectedFilter){
+			case 0:
+				page = new FileExtPage();
+				break;
+			case 1:
+				page = new FilePage(_project);
+				break;
+			case 2:
+				page = new ProjectPage();
+				break;
+			case 3:
+				page = new FacetPage();
+				break;
+			case 4:
+				page = new ContentTypePage();
+				break;
+			}
+		addPage(page);
+		return page;
+	}
+
+	public static class Page1 extends WizardPage {
+		
+		private int 		_selectedFilter;
+		private IProject	_project;
+
+		
+		public Page1(IProject project){
+			super("page1", ValUIMessages.FrSelectFilterType, null); //$NON-NLS-1$
+			setPageComplete(true);
+			_project = project;
+		}
+		
+		public void createControl(Composite parent) {
+			String helpId = _project == null ? HelpContextIds.FilterRule : HelpContextIds.ProjectFilterRule;
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, helpId);
+			String[] labels = null;
+			String[] desc = null;
+			if (_project != null){
+				labels = new String[]{ValUIMessages.LabelExtension, ValUIMessages.LabelFile,
+						ValUIMessages.LabelContentType};
+				
+				desc = new String[]{ValUIMessages.DescExtension, ValUIMessages.DescFile,
+						ValUIMessages.DescContentType};
+			}
+			else {
+				labels = new String[]{ValUIMessages.LabelExtension, ValUIMessages.LabelFile,
+						ValUIMessages.LabelProjects, ValUIMessages.LabelFacets,
+						ValUIMessages.LabelContentType};
+				
+				desc = new String[]{ValUIMessages.DescExtension, ValUIMessages.DescFile,
+						ValUIMessages.DescProjects, ValUIMessages.DescFacets, 
+						ValUIMessages.DescContentType};
+			}
+			
+			Composite control = new Composite(parent, SWT.NONE);
+			control.setLayout(new GridLayout(2, false));
+
+			SelectionListener listener = new SelectionListener(){
+
+				public void widgetDefaultSelected(SelectionEvent e) {
+					doIt(e);
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					doIt(e);
+				}
+				
+				private void doIt(SelectionEvent e){
+					if (e.getSource() instanceof Button){
+						Button b = (Button)e.getSource();
+						if (b.getData() instanceof Integer) {
+							Integer index = (Integer) b.getData();
+							setSelectedFilter(index.intValue());
+						}
+					}
+				}
+				
+			};
+			for (int i=0; i<labels.length; i++){
+				Button button = new Button(control, SWT.RADIO);
+				button.setText(labels[i]);
+				button.setData(new Integer(i));			
+				button.addSelectionListener(listener);
+				(new Label(control, SWT.WRAP)).setText(desc[i]);
+				if (i == 0)button.setSelection(true);				
+			}			
+			setControl(control);			
+		}
+
+		public int getSelectedFilter() {
+			return _selectedFilter;
+		}
+
+		public void setSelectedFilter(int selectedFilter) {
+			_selectedFilter = selectedFilter;
+			getContainer().updateButtons();
+		}
+						
+	}
+	
+	public static class FileExtPage extends WizardPage implements FilterWizardPage {
+		
+		private Text 	_pattern;
+		private Button	_case;
+		
+		public FileExtPage(){
+			super("fileext", ValUIMessages.FrFileExtension, null); //$NON-NLS-1$
+		}
+
+		public void createControl(Composite parent) {
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HelpContextIds.FRFileExt);
+			Composite control = new Composite(parent, SWT.NONE);
+			setControl(control);
+			control.setLayout(new GridLayout(2, false));
+			(new Label(control, SWT.NONE)).setText(ValUIMessages.FrFileExtensionLabel);
+			_pattern = new Text(control, SWT.NONE);
+			_pattern.setFocus();
+			_pattern.addModifyListener(new ModifyListener(){
+
+				public void modifyText(ModifyEvent e) {
+					getContainer().updateButtons();
+				}
+				
+			});
+			
+			_case = new Button(control, SWT.CHECK);
+			_case.setText(ValUIMessages.FrCaseSensitive);
+			_case.setSelection(false);
+			_case.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING,false, false, 2, 1));
+			
+		}
+
+		public FilterRule getFilterRule() {
+			if (!isPageComplete())return null;
+			return FilterRule.FileExt.createFileExt(_pattern.getText(), _case.getSelection());
+		}
+		
+		public boolean isPageComplete() {
+			return _pattern != null && _pattern.getText().trim().length() > 0;
+		}
+		
+		
+	}
+	
+	public static class FilePage extends WizardPage implements FilterWizardPage {
+		
+		private Text 	_pattern;
+		private Button	_browseFile;
+		private Button	_browseFolder;
+		private Button	_case;
+		private Button	_simpleFileName;
+		
+		private IProject	_project;
+		private int			_type = FilterRule.File.FileTypeFile;
+		private IPath		_fullFileName;
+		private String		_root;
+		
+		public FilePage(IProject project){
+			super("file", ValUIMessages.FrFolderOrFile, null); //$NON-NLS-1$
+			_project = project;
+		}
+
+		public void createControl(Composite parent) {
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HelpContextIds.FRName);
+			final Composite control = new Composite(parent, SWT.NONE);
+			setControl(control);
+			control.setLayout(new GridLayout(4, false));
+			(new Label(control, SWT.NONE)).setText(ValUIMessages.FrFolderOrFileLabel);
+			_pattern = new Text(control, SWT.NONE);
+			_pattern.setFocus();
+			_pattern.setLayoutData(new GridData(300, SWT.DEFAULT));
+			_pattern.addModifyListener(new ModifyListener(){
+
+				public void modifyText(ModifyEvent e) {
+					getContainer().updateButtons();
+				}
+				
+			});
+
+			_root = null;
+			IPath base = _project == null ? ResourcesPlugin.getWorkspace().getRoot().getLocation() :
+				_project.getLocation();
+			if (base != null)_root = base.toOSString();
+						
+			_browseFile = new Button(control, SWT.PUSH);
+			_browseFile.setText(ValUIMessages.FrBrowseFile);
+			_browseFile.setEnabled(_root != null);
+			_browseFile.addSelectionListener(new SelectionListener(){
+
+				public void widgetDefaultSelected(SelectionEvent e) {
+					browse();
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					browse();
+				}
+				
+				private void browse(){
+					FileDialog fd = new FileDialog(control.getShell(), SWT.OPEN);
+					fd.setText(ValUIMessages.FrFileFilter);
+					fd.setFilterPath(_root);
+					
+					String file = fd.open();
+					if (file != null){
+						if (file.startsWith(_root))file = file.substring(_root.length()+1);
+						else file = null;
+					}
+					if (file != null){
+						_fullFileName = new Path(file);
+						if (_project == null)_fullFileName = _fullFileName.removeFirstSegments(1);
+
+						if (_simpleFileName.getSelection()){
+							_type = FilterRule.File.FileTypeFile;
+							_pattern.setText(_fullFileName.lastSegment());
+						}
+						else {
+							_type = FilterRule.File.FileTypeFull;
+							_pattern.setText(_fullFileName.toPortableString());
+						}
+					}
+					else {
+						_fullFileName = null;
+						_pattern.setText(""); //$NON-NLS-1$
+					}
+				}				
+			});
+			
+			_browseFolder = new Button(control, SWT.PUSH);
+			_browseFolder.setText(ValUIMessages.FrBrowseFolder);
+			_browseFolder.setEnabled(_root != null);
+			_browseFolder.addSelectionListener(new SelectionListener(){
+
+				public void widgetDefaultSelected(SelectionEvent e) {
+					browse();
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					browse();
+				}
+				
+				private void browse(){
+					DirectoryDialog fd = new DirectoryDialog(control.getShell());
+					fd.setMessage(ValUIMessages.FrFolderFilter);
+					fd.setFilterPath(_root);
+					String dir = fd.open();
+					if (dir != null){
+						_fullFileName = null;
+						_type = FilterRule.File.FileTypeFolder;
+						if (dir.startsWith(_root) && dir.length() > _root.length()){
+							dir = dir.substring(_root.length()+1);
+							IPath path = new Path(dir);
+							if (_project == null)path = path.removeFirstSegments(1);
+							_pattern.setText(path.toPortableString());
+						}
+						else {
+							_pattern.setText(""); //$NON-NLS-1$
+						}
+					}
+				}
+				
+			});
+			
+			_case = new Button(control, SWT.CHECK);
+			_case.setText(ValUIMessages.FrCaseSensitive);
+			_case.setSelection(false);
+			_case.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING,false, false, 4, 1));
+			
+			addSimpleFileNameButton(control);
+		}
+
+		private void addSimpleFileNameButton(final Composite control) {
+			_simpleFileName = new Button(control, SWT.CHECK);
+			_simpleFileName.setText(ValUIMessages.FrSimpleFileName);
+			_simpleFileName.setSelection(_type == FilterRule.File.FileTypeFile);
+			_simpleFileName.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING,false, false, 4, 1));
+			
+			_simpleFileName.addSelectionListener(new SelectionListener(){
+
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					if (_type == FilterRule.File.FileTypeFolder)return;
+					if (_simpleFileName.getSelection()){
+						if (_fullFileName != null)_pattern.setText(_fullFileName.lastSegment());
+						_type = FilterRule.File.FileTypeFile;
+					}
+					else {
+						if (_fullFileName != null)_pattern.setText(_fullFileName.toPortableString());
+						_type = FilterRule.File.FileTypeFull;					}
+					}				
+				});
+		}
+
+		public FilterRule getFilterRule() {
+			if (!isPageComplete())return null;
+			return FilterRule.createFile(_pattern.getText(), _case.getSelection(), _type);
+		}
+		
+		public boolean isPageComplete() {
+			if (_pattern == null)return false;
+			if (_pattern.getText() == null)return false;
+			return _pattern.getText().trim().length() > 0;
+		}
+		
+	}
+	
+	public static class ProjectPage extends WizardPage implements FilterWizardPage{
+		
+		private Combo		_natures;
+		private String[]	_ids;
+		
+		public ProjectPage(){
+			super("project", ValUIMessages.FrProjectNature, null); //$NON-NLS-1$
+		}
+
+		public void createControl(Composite parent) {
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HelpContextIds.FRProjectNature);
+			Composite control = new Composite(parent, SWT.NONE);
+			setControl(control);
+			control.setLayout(new GridLayout(2, false));
+			(new Label(control, SWT.NONE)).setText(ValUIMessages.FrProjectNatureLabel);
+			
+			IProjectNatureDescriptor[] pn = ResourcesPlugin.getWorkspace().getNatureDescriptors();
+			String items[] = new String[pn.length];
+			_ids = new String[pn.length];
+			for (int i=0; i<pn.length; i++){
+				_ids[i] = pn[i].getNatureId();
+				items[i] = pn[i].getLabel() + " - " + _ids[i]; //$NON-NLS-1$
+			}
+			_natures = new Combo(control, SWT.DROP_DOWN);
+			_natures.setItems(items);
+			_natures.addModifyListener(new ModifyListener(){
+
+				public void modifyText(ModifyEvent e) {
+					getContainer().updateButtons();					
+				}
+				
+			});
+						
+		}
+
+		public FilterRule getFilterRule() {
+			if (!isPageComplete())return null;
+			int i = _natures.getSelectionIndex();
+			if (i == -1)return null;
+			
+			return FilterRule.createProject(_ids[i]);
+		}
+		
+		public boolean isPageComplete() {
+			if (_natures == null)return false;
+			if (_natures.getText() == null)return false;
+			return _natures.getText().trim().length() > 0;
+		}
+	
+	}
+	
+	public static class FacetPage extends WizardPage implements FilterWizardPage {
+		
+		private Text	_pattern;
+		
+		public FacetPage(){
+			super("facet", ValUIMessages.FrFacit, null); //$NON-NLS-1$
+		}
+
+		public void createControl(Composite parent) {
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HelpContextIds.FRFacet);
+			Composite control = new Composite(parent, SWT.NONE);
+			setControl(control);
+			control.setLayout(new GridLayout(2, false));
+			(new Label(control, SWT.NONE)).setText(ValUIMessages.FrFacitLabel);
+			_pattern = new Text(control, SWT.NONE);
+			_pattern.setFocus();
+			_pattern.setLayoutData(new GridData(300, SWT.DEFAULT));
+			_pattern.addModifyListener(new ModifyListener(){
+
+				public void modifyText(ModifyEvent e) {
+					getContainer().updateButtons();
+				}
+				
+			});
+		}
+
+		public FilterRule getFilterRule() {
+			if (!isPageComplete())return null;
+			FilterRule rule = FilterRule.createFacet(_pattern.getText());
+			return rule;
+		}
+		
+		public boolean isPageComplete() {
+			if (_pattern == null)return false;
+			if (_pattern.getText() == null)return false;
+			return _pattern.getText().trim().length() > 0;
+		}
+		
+	}
+	
+	public static class ContentTypePage extends WizardPage implements FilterWizardPage {
+		private Combo	_pattern;
+		private Button	_exactMatch;
+		private Map<String, IContentType> _map;
+		
+		public ContentTypePage(){
+			super("contentType", ValUIMessages.FrContentType, null); //$NON-NLS-1$
+		}
+
+		public void createControl(Composite parent) {
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HelpContextIds.FRContentType);
+			Composite control = new Composite(parent, SWT.NONE);
+			setControl(control);
+			control.setLayout(new GridLayout(2, false));
+			(new Label(control, SWT.NONE)).setText(ValUIMessages.FrContentTypeLabel);
+			
+			IContentType[] types = Platform.getContentTypeManager().getAllContentTypes();
+			_map = new TreeMap<String, IContentType>();
+			for (IContentType type : types){
+				String name = type.getName();
+				if (name == null)name = type.getId();
+				_map.put(name, type);
+			}
+			String items[] = new String[_map.size()];
+			int i = 0;
+			for (String label : _map.keySet()){
+				items[i++] = label;
+			}
+			_pattern = new Combo(control, SWT.DROP_DOWN | SWT.READ_ONLY);
+			_pattern.setFocus();
+			_pattern.setLayoutData(new GridData(300, SWT.DEFAULT));
+			_pattern.setVisibleItemCount(20);
+			_pattern.setItems(items);
+			_pattern.addModifyListener(new ModifyListener(){
+
+				public void modifyText(ModifyEvent e) {
+					getContainer().updateButtons();
+				}
+				
+			});
+			
+			_exactMatch = new Button(control, SWT.CHECK);
+			_exactMatch.setText(ValUIMessages.FrExactMatch);
+			_exactMatch.setSelection(false);
+			_exactMatch.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING,false, false, 2, 1));
+
+		}
+
+		public FilterRule getFilterRule() {
+			if (!isPageComplete())return null;
+			IContentType type = _map.get(_pattern.getText());
+			if (type == null)return null;
+			FilterRule rule = FilterRule.createContentType(type.getId(), _exactMatch.getSelection());
+			return rule;
+		}
+		
+		public boolean isPageComplete() {
+			if (_pattern == null)return false;
+			if (_pattern.getText() == null)return false;
+			return _pattern.getText().trim().length() > 0;
+		}
+		
+	}
+	
+	interface FilterWizardPage {
+		/**
+		 * Answer the rule that was created.
+		 * 
+		 * @return null if the user didn't create a new rule.
+		 */
+		FilterRule getFilterRule();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/ResultsDialog.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/ResultsDialog.java
new file mode 100644
index 0000000..3534eb7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/ResultsDialog.java
@@ -0,0 +1,162 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.ui.internal.dialog;
+
+
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IconAndMessageDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Button;
+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.wst.validation.internal.Misc;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValPrefManagerGlobal;
+import org.eclipse.wst.validation.internal.ValidationResultSummary;
+import org.eclipse.wst.validation.internal.model.GlobalPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+import org.eclipse.wst.validation.internal.ui.ValidationUIMessages;
+import org.eclipse.wst.validation.ui.internal.ValUIMessages;
+
+/**
+ * A dialog for displaying the results of a manual validation.
+ * @author karasiuk
+ *
+ */
+public class ResultsDialog extends IconAndMessageDialog {
+	
+	private ValidationResultSummary 	_result;
+	private long				_time;
+	private int					_resourceCount;
+	private Button _hideButton;
+
+	/**
+	 * Create a dialog for displaying validation results.
+	 * 
+	 * @param parentShell this can be null
+	 * @param results the results of the validation
+	 * @param time the time that the validation took in milliseconds
+	 * @param resourceCount the number of resources that were validated
+	 */
+	public ResultsDialog(Shell parentShell, ValidationResultSummary results, long time, int resourceCount) {
+		super(parentShell);
+		_result = results;
+		_time = time;
+		_resourceCount = resourceCount;
+	}
+	
+	@Override
+	protected void okPressed() {
+		if(_hideButton!=null) {
+			ValManager vm = ValManager.getDefault();
+			GlobalPreferences gp = vm.getGlobalPreferences();
+			GlobalPreferencesValues gpv = gp.asValues();
+			gpv.confirmDialog = !_hideButton.getSelection();
+			int changes = vm.replace(gpv);
+			if (changes != 0)ValPrefManagerGlobal.getDefault().savePreferences();
+		}
+		super.okPressed();
+	}
+	
+	@Override
+	public int open() {
+		if (!ErrorDialog.AUTOMATED_MODE) {
+			return super.open();
+		}
+		setReturnCode(OK);
+		return OK;
+	}
+	
+	@Override
+	protected Image getImage() {
+		if (_result.getSeverityError() > 0)return getErrorImage();
+		if (_result.getSeverityWarning() > 0)return getWarningImage();
+		return getInfoImage();
+	}
+	
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		message = getMessage();
+		createMessageArea(parent);
+				
+		new Label(parent, SWT.NONE).setLayoutData(GridDataFactory.swtDefaults().span(2, 1).create());		
+		addHideCheckbox(parent);
+
+		Control c = super.createDialogArea(parent);
+		return c;
+	}
+	
+	private void addHideCheckbox(Composite parent) {
+		_hideButton = new Button(parent, SWT.CHECK);
+		GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.BEGINNING).span(2, 1).applyTo(_hideButton);
+		_hideButton.setText(ValUIMessages.DoNotShowResults);
+		if (ValManager.getDefault().getGlobalPreferences().getConfirmDialog() && _hideButton.getSelection()) {
+			// tell the user where to re-enable it?
+		}
+		_hideButton.setSelection(!ValManager.getDefault().getGlobalPreferences().getConfirmDialog());
+	}
+
+	
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ValidationUIMessages.ValResults);
+	}
+	
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		Button ok = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false);
+		ok.setFocus();
+	}
+
+	private String getMessage(){
+		if (_resourceCount > 1) {
+			if (_result.getSeverityError() > 1)
+				return NLS.bind(ValidationUIMessages.ValErrorsResources, new Object[]{_result.getSeverityError(), _resourceCount, Misc.getTimeMS(_time)});
+			if (_result.getSeverityError() == 1)
+				return NLS.bind(ValidationUIMessages.ValError1Resources, _resourceCount, Misc.getTimeMS(_time));
+
+			if (_result.getSeverityWarning() > 1)
+				return NLS.bind(ValidationUIMessages.ValWarnResources, new Object[]{_result.getSeverityWarning(), _resourceCount, Misc.getTimeMS(_time)});
+			if (_result.getSeverityWarning() == 1)
+				return NLS.bind(ValidationUIMessages.ValWarn1Resources, _resourceCount, Misc.getTimeMS(_time));
+
+			if (_result.getSeverityInfo() > 1)
+				return NLS.bind(ValidationUIMessages.ValInfoResources, new Object[]{_result.getSeverityInfo(), _resourceCount, Misc.getTimeMS(_time)});
+			if (_result.getSeverityInfo() == 1)
+				return NLS.bind(ValidationUIMessages.ValInfo1Resources, _resourceCount, Misc.getTimeMS(_time));
+		}
+		else if (_resourceCount == 1) {
+			if (_result.getSeverityError() > 1)
+				return NLS.bind(ValidationUIMessages.ValErrorsResource1, _result.getSeverityError(), Misc.getTimeMS(_time));
+			if (_result.getSeverityError() == 1)
+				return NLS.bind(ValidationUIMessages.ValError1Resource1, Misc.getTimeMS(_time));
+
+			if (_result.getSeverityWarning() > 1)
+				return NLS.bind(ValidationUIMessages.ValWarnResource1, _result.getSeverityWarning(), Misc.getTimeMS(_time));
+			if (_result.getSeverityWarning() == 1)
+				return NLS.bind(ValidationUIMessages.ValWarn1Resource1, Misc.getTimeMS(_time));
+
+			if (_result.getSeverityInfo() > 1)
+				return NLS.bind(ValidationUIMessages.ValInfoResource1, _result.getSeverityInfo(), Misc.getTimeMS(_time));
+			if (_result.getSeverityInfo() == 1)
+				return NLS.bind(ValidationUIMessages.ValInfo1Resource1, Misc.getTimeMS(_time));
+		}
+		return ValidationUIMessages.ValSuccess;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/preferences/ValidationPreferencePage.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/preferences/ValidationPreferencePage.java
new file mode 100644
index 0000000..30e1556
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/preferences/ValidationPreferencePage.java
@@ -0,0 +1,844 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 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.wst.validation.ui.internal.preferences;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.preference.PreferencePage;
+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.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.ConfigurationManager;
+import org.eclipse.wst.validation.internal.FullBuildJob;
+import org.eclipse.wst.validation.internal.GlobalConfiguration;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValPrefManagerGlobal;
+import org.eclipse.wst.validation.internal.ValidatorMetaData;
+import org.eclipse.wst.validation.internal.ValidatorMutable;
+import org.eclipse.wst.validation.internal.model.GlobalPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+import org.eclipse.wst.validation.internal.ui.DelegatingValidatorPreferencesDialog;
+import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
+import org.eclipse.wst.validation.ui.internal.HelpContextIds;
+import org.eclipse.wst.validation.ui.internal.ImageNames;
+import org.eclipse.wst.validation.ui.internal.ValUIMessages;
+import org.eclipse.wst.validation.ui.internal.dialog.FilterDialog;
+
+/**
+ * From this page the user can configure individual validators.
+ * <p>
+ * This class and its inner classes are not intended to be subclassed outside of
+ * the validation framework.
+ * </p>
+ */
+public class ValidationPreferencePage extends PreferencePage implements	IWorkbenchPreferencePage {
+
+	private IValidationPage _pageImpl = null;
+	private Shell _shell;
+
+	public interface IValidationPage {
+		
+		Composite createPage(Composite parent) throws InvocationTargetException;
+		boolean performOk() throws InvocationTargetException;
+		boolean performDefaults() throws InvocationTargetException;
+		Composite getControl();
+		void dispose();
+		void loseFocus();
+		void gainFocus();
+	}
+
+	public final class InvalidPage implements IValidationPage {
+		private Composite page = null;
+
+		private Composite composite = null;
+		private GridLayout layout = null;
+		private Label messageLabel = null;
+
+		public InvalidPage(Composite parent) {
+			page = createPage(parent);
+		}
+
+		/**
+		 * This page is added to the Properties guide if some internal problem
+		 * occurred; for example, the highlighted item in the workbench is not
+		 * an IProject (according to this page's plugin.xml, this page is only
+		 * valid when an IProject is selected).
+		 */
+		public Composite createPage(Composite parent) {
+			// Don't create the default and apply buttons.
+			noDefaultAndApplyButton();
+
+			final ScrolledComposite sc1 = new ScrolledComposite(parent,	SWT.H_SCROLL | SWT.V_SCROLL);
+			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
+			composite = new Composite(sc1, SWT.NONE);
+			sc1.setContent(composite);
+			layout = new GridLayout();
+			composite.setLayout(layout);
+
+			messageLabel = new Label(composite, SWT.NONE);
+			messageLabel.setText(ValUIMessages.VBF_EXC_INVALID_REGISTER);
+
+			composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+			return composite;
+		}
+
+		public boolean performDefaults() {
+			return true;
+		}
+
+		/**
+		 * Since this page occurs under invalid circumstances, there is nothing
+		 * to save.
+		 */
+		public boolean performOk() {
+			return true;
+		}
+
+		public Composite getControl() {
+			return page;
+		}
+
+		public void dispose() {
+			messageLabel.dispose();
+			// layout.dispose();
+			composite.dispose();
+		}
+
+		public void loseFocus() {
+			// This page does not depend on the contents of any other page in
+			// the wizard, so do nothing.
+		}
+
+		public void gainFocus() {
+			// This page does not depend on the contents of any other page in
+			// the wizard, so do nothing.
+		}
+	}
+
+	private final class ValidatorListPage implements IValidationPage {
+		private Composite _page;
+		private TableViewer _validatorList;
+		private Button _enableAllButton;
+		private Button _disableAllButton;
+		private Button _override;
+		private Button _suspend;
+		private Button _autoSave;
+		private Button _confirmButton;
+		private Label _listLabel;
+		private Table _validatorsTable;
+		private GlobalPreferencesValues 	_globalPreferences = ValManager.getDefault().getGlobalPreferences().asValues();
+		private GlobalConfiguration _globalConfig;
+		private ValidatorMutable[] _validators;
+		
+		private int _changeCount;
+
+		/**
+		 * This class is provided for the CheckboxTableViewer in the
+		 * ValidationPropertiesPage$ValidatorListPage class.
+		 */
+		public class ValidationContentProvider implements IStructuredContentProvider {
+			public void dispose() {
+			}
+
+			public Object[] getElements(Object inputElement) {
+				if (inputElement instanceof ValidatorMutable[]) {
+					return (ValidatorMutable[]) inputElement;
+				}
+				return new Object[0];
+			}
+
+			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			}
+		}
+
+		/**
+		 * This class is provided for
+		 * ValidationPropertiesPage$ValidatorListPage's checkboxTableViewer element.
+		 */
+		public class ValidationLabelProvider extends LabelProvider implements ITableLabelProvider {
+			public String getText(Object element) {
+				if (element == null)return ""; //$NON-NLS-1$
+				else if (element instanceof ValidatorMutable)
+					return ((ValidatorMutable) element).getName();
+				else
+					return super.getText(element);
+			}
+
+			private Image getImage(String imageName) {
+				boolean isDisabled = !_validatorsTable.isEnabled();
+				if (isDisabled)imageName = imageName + ImageNames.disabled;
+
+				return ValidationUIPlugin.getPlugin().getImage(imageName);
+			}
+
+			public Image getColumnImage(Object element, int columnIndex) {
+				ValidatorMutable v = (ValidatorMutable) element;
+				if (columnIndex == 1) {
+					return getImage(v.isManualValidation() ? ImageNames.okTable : ImageNames.failTable);
+				} else if (columnIndex == 2) {
+					return getImage(v.isBuildValidation() ? ImageNames.okTable : ImageNames.failTable);
+				} else if (columnIndex == 3) {
+					if (hasSettings(v))return getImage(ImageNames.settings);
+					return  null;
+
+				}
+				return null;
+			}
+
+			public String getColumnText(Object element, int columnIndex) {
+				if (columnIndex == 0)return ((ValidatorMutable) element).getName();
+				return null;
+			}
+		}
+
+		/**
+		 * This class is used to sort the CheckboxTableViewer elements.
+		 */
+		public class ValidationViewerSorter extends ViewerSorter {
+			public int compare(Viewer viewer, Object e1, Object e2) {
+				// Can't instantiate ViewerSorter because it's abstract, so use this
+				// inner class to represent it.
+				return super.compare(viewer, e1, e2);
+			}
+		}
+
+		public ValidatorListPage(Composite parent) throws InvocationTargetException {
+			_page = createPage(parent);
+		}
+
+		private void setupTableColumns(Table table) {
+			TableColumn validatorColumn = new TableColumn(table, SWT.NONE);
+			validatorColumn.setText(ValUIMessages.VALIDATOR);
+			validatorColumn.setWidth(245);
+			TableColumn manualColumn = new TableColumn(table, SWT.CENTER);
+			manualColumn.setText(ValUIMessages.MANUAL);
+			manualColumn.pack();
+			TableColumn buildColumn = new TableColumn(table, SWT.CENTER);
+			buildColumn.setText(ValUIMessages.BUILD);
+			buildColumn.pack();
+			TableColumn settingsColumn = new TableColumn(table, SWT.CENTER);
+			settingsColumn.setText(ValUIMessages.SETTINGS);
+			settingsColumn.pack();
+		}
+		
+		private ValidatorMutable[] getDefaultValidators(){
+			Validator[] vals = ValManager.getDefault().getValidators();
+			ValidatorMutable[] vms = new ValidatorMutable[vals.length];
+			for (int i=0; i<vals.length; i++)vms[i] = new ValidatorMutable(vals[i]);
+			return vms;
+		}
+
+		public Composite createPage(Composite parent) throws InvocationTargetException {
+			_globalConfig = new GlobalConfiguration(ConfigurationManager.getManager().getGlobalConfiguration());
+			_validators = getDefaultValidators();
+			
+			Composite validatorGroup = new Composite(parent, SWT.NONE);
+
+			GridLayout validatorGroupLayout = new GridLayout();
+			validatorGroupLayout.numColumns = 2;
+			validatorGroup.setLayout(validatorGroupLayout);
+			GridDataFactory.fillDefaults().grab(true, true).applyTo(validatorGroup);
+			
+			new Label(validatorGroup, SWT.NONE).setLayoutData(new GridData());
+
+			addOverride(validatorGroup);
+			addSuspend(validatorGroup);
+			addAutoSave(validatorGroup);
+			addConfirm(validatorGroup);
+
+			_listLabel = new Label(validatorGroup, SWT.NONE);
+			GridData listLabelData = new GridData(GridData.FILL_HORIZONTAL);
+			listLabelData.horizontalSpan = 2;
+			_listLabel.setLayoutData(listLabelData);
+			_listLabel.setText(ValUIMessages.PREF_VALLIST_TITLE);
+			
+			_validatorsTable = new Table(validatorGroup, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
+			Point preferredSize = _validatorsTable.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			GridDataFactory.fillDefaults().grab(true, true).hint(preferredSize)
+				.span(2,1).applyTo(_validatorsTable);
+						
+
+			_validatorsTable.setHeaderVisible(true);
+			_validatorsTable.setLinesVisible(true);
+
+			_validatorList = new TableViewer(_validatorsTable);			
+//			_validatorsTable.setLayoutData(validatorListData);
+//			_validatorList.getTable().setLayoutData(validatorListData);
+			_validatorList.setLabelProvider(new ValidationLabelProvider());
+			_validatorList.setContentProvider(new ValidationContentProvider());
+			_validatorList.setSorter(new ValidationViewerSorter());
+			setupTableColumns(_validatorsTable);
+
+			_validatorList.setInput(_validators);
+			_validatorsTable.addMouseListener(new MouseAdapter() {
+
+				public void mouseDown(MouseEvent e) {
+					if (e.button != 1)return;
+
+					TableItem tableItem = _validatorsTable.getItem(new Point(e.x, e.y));
+					if (tableItem == null || tableItem.isDisposed())return;
+					int columnNumber;
+					int columnsCount = _validatorsTable.getColumnCount();
+					if (columnsCount == 0) {
+						// If no TableColumn, Table acts as if it has a single
+						// column which takes the whole width.
+						columnNumber = 0;
+					} else {
+						columnNumber = -1;
+						for (int i = 0; i < columnsCount; i++) {
+							Rectangle bounds = tableItem.getBounds(i);
+							if (bounds.contains(e.x, e.y)) {
+								columnNumber = i;
+								break;
+							}
+						}
+						if (columnNumber == -1)return;
+					}
+
+					columnClicked(columnNumber);
+				}
+			});
+
+			_validatorsTable.setMenu(createContextMenu());
+			_validatorsTable.addFocusListener(new FocusAdapter() {
+
+				public void focusGained(FocusEvent e) {
+					super.focusGained(e);
+					if (_validatorsTable.getSelectionCount() == 0) {
+						_validatorsTable.select(0);
+					}
+				}
+			});
+
+			addEnableDisable(validatorGroup);
+
+			// Have to set the tab order or only the first checkbox in a
+			// Composite can be tabbed to. (Seems to apply only to checkboxes. Have to use the
+			// arrow key to navigate the checkboxes.)
+			validatorGroup.setTabList(new Control[] { _suspend, _autoSave,
+				_validatorsTable, _enableAllButton, _disableAllButton });
+
+			updateWidgets();
+
+			applyDialogFont(validatorGroup);
+			validatorGroup.setSize(validatorGroup.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+			return validatorGroup;
+		}
+
+		private void addEnableDisable(Composite validatorGroup) {
+			_enableAllButton = new Button(validatorGroup, SWT.PUSH);
+			_enableAllButton.setLayoutData(new GridData());
+			_enableAllButton.setText(ValUIMessages.PREF_BUTTON_ENABLEALL);
+			_enableAllButton.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					try {
+						performEnableAll();
+					} catch (InvocationTargetException exc) {
+						displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE,
+							ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+					}
+				}
+			});
+
+			_disableAllButton = new Button(validatorGroup, SWT.PUSH);
+			_disableAllButton.setLayoutData(new GridData());
+			_disableAllButton.setText(ValUIMessages.PREF_BUTTON_DISABLEALL);
+			_disableAllButton.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					try {
+						performDisableAll();
+					} catch (InvocationTargetException exc) {
+						displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE,
+							ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+					}
+				}
+			});
+		}
+		
+		private void addConfirm(Composite validatorGroup) {
+			GridData gd;
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			_confirmButton = new Button(validatorGroup, SWT.CHECK);
+			_confirmButton.setLayoutData(gd);
+			_confirmButton.setText(ValUIMessages.PrefPageConfirmDialog);
+			_confirmButton.setSelection(_globalPreferences.confirmDialog);
+			_confirmButton.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					// do not increment the _changeCount as this by itself should not trigger a build prompt
+					_globalPreferences.confirmDialog = _confirmButton.getSelection();
+					_confirmButton.setFocus();
+				}
+			});
+		}
+
+		private void addAutoSave(Composite validatorGroup) {
+			GridData gd;
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			_autoSave = new Button(validatorGroup, SWT.CHECK);
+			_autoSave.setLayoutData(gd);
+			_autoSave.setText(ValUIMessages.PrefPage_always_save);
+			_autoSave.setSelection(_globalPreferences.saveAutomatically);
+			_autoSave.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					// do not increment the _changeCount as this by itself should not trigger a build prompt
+					_globalPreferences.saveAutomatically = _autoSave.getSelection();
+					_autoSave.setFocus();
+				}
+			});
+		}
+
+		private void addSuspend(Composite validatorGroup) {
+			GridData gd;
+			gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			
+			_suspend = new Button(validatorGroup, SWT.CHECK);
+			_suspend.setLayoutData(gd);
+			_suspend.setText(ValUIMessages.DISABLE_VALIDATION);
+			_suspend.setSelection(_globalPreferences.disableAllValidation);
+			_suspend.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					_suspend.setFocus();
+					_validatorsTable.setEnabled(!_suspend.getSelection());
+					_enableAllButton.setEnabled(!_suspend.getSelection());
+					_disableAllButton.setEnabled(!_suspend.getSelection());
+					_validatorList.refresh();
+				}
+			});
+		}
+
+		private void addOverride(Composite validatorGroup) {
+			GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			
+			_override = new Button(validatorGroup, SWT.CHECK);
+			_override.setLayoutData(gd);
+			_override.setText(ValUIMessages.PREF_BUTTON_OVERRIDE);
+			_override.setEnabled(true);
+			_override.setSelection(_globalPreferences.override);
+			_override.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					_globalPreferences.override = _override.getSelection();
+					_override.setFocus();
+					
+				}
+			});
+		}
+
+		protected Menu createContextMenu() {
+			final Menu menu = new Menu(_validatorsTable.getShell(), SWT.POP_UP);
+			final MenuItem manualItem = new MenuItem(menu, SWT.CHECK);
+			manualItem.setText(ValUIMessages.PREF_MNU_MANUAL);
+			final MenuItem buildItem = new MenuItem(menu, SWT.CHECK);
+			buildItem.setText(ValUIMessages.PREF_MNU_BUILD);
+			final MenuItem settingsItem = new MenuItem(menu, SWT.PUSH);
+			settingsItem.setText(ValUIMessages.PREF_MNU_SETTINGS);
+
+			class MenuItemListener extends SelectionAdapter {
+				public void widgetSelected(SelectionEvent e) {
+					MenuItem menuItem = (MenuItem) e.getSource();
+					int index = menu.indexOf(menuItem) + 1;
+					columnClicked(index);
+				}
+			}
+			MenuItemListener listener = new MenuItemListener();
+			manualItem.addSelectionListener(listener);
+			buildItem.addSelectionListener(listener);
+			settingsItem.addSelectionListener(listener);
+
+			menu.addMenuListener(new MenuAdapter() {
+				public void menuShown(MenuEvent e) {
+					IStructuredSelection selection = (IStructuredSelection) _validatorList.getSelection();
+					ValidatorMutable vw = (ValidatorMutable) selection.getFirstElement();
+					manualItem.setSelection(vw.isManualValidation());
+					buildItem.setSelection(vw.isBuildValidation());
+					settingsItem.setEnabled(hasSettings(vw));
+				}
+			});
+
+			return menu;
+		}
+
+		protected void columnClicked(int columnToEdit) {
+			IStructuredSelection selection = (IStructuredSelection) _validatorList.getSelection();
+			ValidatorMutable val = (ValidatorMutable) selection.getFirstElement();
+
+			switch (columnToEdit) {
+			case 1:
+				_changeCount++;
+				val.setManualValidation(!val.isManualValidation());
+				break;
+			case 2:
+				_changeCount++;
+				val.setBuildValidation(!val.isBuildValidation());
+				break;
+			case 3:
+				if (val.isV2Validator()){
+					ValidatorMutable newVal = new ValidatorMutable(val);
+					FilterDialog fd = new FilterDialog(_shell, newVal, null);
+					if (Window.OK == fd.open()){
+						_changeCount++;
+						newVal = fd.getValidator();
+						int i = findit(val);
+						if (i != -1)_validators[i] = newVal;
+					}
+				}
+				else {
+					handleOldDelegate(val);
+				}
+
+				break;
+			default:
+				break;
+			}
+			_validatorList.refresh();
+		}
+
+		private int findit(ValidatorMutable val) {
+			for (int i=0; i<_validators.length; i++)if (_validators[i] == val)return i;
+			return -1;
+		}
+
+		private void handleOldDelegate(ValidatorMutable val) {
+			if (!val.isV1Validator())return;
+			
+			ValidatorMetaData vmd = val.getVmd();
+		    if (!vmd.isDelegating())return;
+		    
+		    String delegateID = _globalConfig.getDelegateUniqueName(vmd);
+		    Shell shell = Display.getCurrent().getActiveShell();
+		    DelegatingValidatorPreferencesDialog dialog = 
+		    	new DelegatingValidatorPreferencesDialog(shell, vmd, delegateID);
+		
+		    dialog.setBlockOnOpen(true);
+		    dialog.create();
+		
+		    int result = dialog.open();
+	        if (result == Window.OK){
+	        	_changeCount++;
+	        	_globalConfig.setDelegateUniqueName(vmd, dialog.getDelegateID());
+	        }
+		}
+		
+		/**
+		 * Does this validator have extra settings that can be configured?
+		 * @param v
+		 * @return true if it does
+		 */
+		boolean hasSettings(ValidatorMutable v){
+			if (v.isV2Validator())return true;
+			if (v.getDelegatingId() != null)return true;
+			return false;
+		}
+
+		protected void updateWidgets() throws InvocationTargetException {
+			// Need to update even the widgets that do not change based on another
+			// widgets because of performDefaults(). If performDefaults() is
+			// selected, then the pagePreferences values are reset, and these widgets
+			// might also need to be updated.
+			updateAllWidgets();
+			updateHelp();
+		}
+
+		private void updateAllWidgets() throws InvocationTargetException {
+			_suspend.setSelection(_globalPreferences.disableAllValidation);
+			_autoSave.setSelection(_globalPreferences.saveAutomatically);
+			_confirmButton.setSelection(_globalPreferences.confirmDialog);
+			_override.setSelection(_globalPreferences.override);
+			_validatorsTable.setEnabled(!_suspend.getSelection());
+			_enableAllButton.setEnabled(!_suspend.getSelection());
+			_disableAllButton.setEnabled(!_suspend.getSelection());
+			_validatorList.setInput(_validators);
+			_validatorList.refresh();
+		}
+
+		public boolean performOk() throws InvocationTargetException {
+			_globalPreferences.disableAllValidation = _suspend.getSelection();
+			_globalPreferences.saveAutomatically = _autoSave.getSelection();
+			ValManager vm = ValManager.getDefault();
+			int changes = vm.replace(_globalPreferences);
+			if ((changes & GlobalPreferences.BuildChangeMask) != 0)_changeCount++;
+			
+			ValPrefManagerGlobal vpm = ValPrefManagerGlobal.getDefault();
+			vpm.savePreferences(vm.getGlobalPreferences(), _validators, null);
+			saveV1Preferences();
+			
+			if (_changeCount > 0 && 
+				MessageDialog.openQuestion(_shell, ValUIMessages.RebuildTitle, ValUIMessages.RebuildMsg)){
+				
+				FullBuildJob fbj = new FullBuildJob();
+				fbj.schedule();
+			}
+			return true;
+		}
+		
+		/**
+		 * Save the V1 preferences, so that the old validators continue to work.
+		 */
+		private void saveV1Preferences(){
+			try {
+				GlobalConfiguration gc = ConfigurationManager.getManager().getGlobalConfiguration();
+				gc.setDisableAllValidation(_globalPreferences.disableAllValidation);
+				gc.setEnabledManualValidators(getEnabledManualValidators());				
+				gc.setEnabledBuildValidators(getEnabledBuildValidators());
+	
+				gc.passivate();
+				gc.store();
+			}
+			catch (InvocationTargetException e){
+				ValidationUIPlugin.getPlugin().handleException(e);
+			}			
+		}
+
+		/**
+		 * Answer all the V1 validators that are manually enabled.
+		 * @return
+		 */
+		private ValidatorMetaData[] getEnabledManualValidators() {
+			List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+			for (ValidatorMutable v : _validators){
+				if (v.isManualValidation() && v.isV1Validator())list.add(v.getVmd());
+			}
+			ValidatorMetaData[] result = new ValidatorMetaData[list.size()];
+			list.toArray(result);
+			return result;
+		}
+
+		/**
+		 * Answer all the V1 validators that are enabled for build.
+		 * @return
+		 */
+		private ValidatorMetaData[] getEnabledBuildValidators() {
+			List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+			for (ValidatorMutable v : _validators){
+				if (v.isBuildValidation() && v.isV1Validator())list.add(v.getVmd());
+			}
+			ValidatorMetaData[] result = new ValidatorMetaData[list.size()];
+			list.toArray(result);
+			return result;
+		}
+
+		public boolean performDefaults() throws InvocationTargetException {
+			_changeCount++;
+			Validator[] vals = ValManager.getDefaultValidators();
+			_validators = new ValidatorMutable[vals.length];
+			for (int i=0; i<vals.length; i++)_validators[i] = new ValidatorMutable(vals[i]);
+			updateWidgets();
+			getDefaultsButton().setFocus();
+			return true;
+		}
+
+		public boolean performEnableAll() throws InvocationTargetException {
+			setAllValidators(true);
+			_enableAllButton.setFocus();
+			_validatorList.refresh();
+			return true;
+		}
+
+		public boolean performDisableAll() throws InvocationTargetException {
+			setAllValidators(false);
+			_disableAllButton.setFocus();
+			_validatorList.refresh();
+			return true;
+		}
+		
+		private void setAllValidators(boolean bool){
+			_changeCount++;
+			for (ValidatorMutable v : _validators){
+				v.setBuildValidation(bool);
+				v.setManualValidation(bool);
+			}
+		}
+
+		protected void updateHelp() {
+//			PlatformUI.getWorkbench().getHelpSystem().setHelp(_suspend, ContextIds.VALIDATION_PREFERENCE_PAGE_DISABLE_ALL_ENABLED);
+		}
+
+		/*
+		 * Store the current values of the controls into the preference store.
+		 */
+
+		public Composite getControl() {
+			return _page;
+		}
+
+		public void dispose() {
+			_autoSave.dispose();
+			_suspend.dispose();
+			_disableAllButton.dispose();
+			_enableAllButton.dispose();
+			_listLabel.dispose();
+			_suspend.dispose();
+			_validatorList.getTable().dispose();
+		}
+
+		public void loseFocus() {
+		}
+
+		public void gainFocus() {
+		}
+	}
+
+	/*
+	 * @see PreferencePage#createContents(Composite)
+	 */
+	protected Control createContents(Composite parent) {
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HelpContextIds.PreferencePage);
+		try {
+			_shell = parent.getShell();
+			_pageImpl = new ValidatorListPage(parent);
+		} catch (Exception exc) {
+			_pageImpl = new InvalidPage(parent);
+			displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE, ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+		}
+
+		return _pageImpl.getControl();
+	}
+
+	public void init(IWorkbench workbench) {
+	}
+
+	/**
+	 * Performs special processing when this page's Defaults button has been
+	 * pressed.
+	 * <p>
+	 * This is a framework hook method for subclasses to do special things when
+	 * the Defaults button has been pressed. Subclasses may override, but should
+	 * call <code>super.performDefaults</code>.
+	 * </p>
+	 */
+	protected void performDefaults() {
+		super.performDefaults();
+
+		try {
+			_pageImpl.performDefaults();
+		} catch (Exception exc) {
+			displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE, ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+		}
+	}
+
+	/**
+	 * When the user presses the "OK" or "Apply" button on the Properties
+	 * Guide/Properties Page, respectively, some processing is performed by this
+	 * PropertyPage. If the page is found, and completes successfully, true is
+	 * returned. Otherwise, false is returned, and the guide doesn't finish.
+	 */
+	public boolean performOk() {
+		try {
+			return _pageImpl.performOk();
+		} 
+		catch (Exception exc) {
+			displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE, ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+			return false;
+		}
+	}
+
+	/**
+	 * Since the pages are inner classes of a child PreferencePage, not a
+	 * PreferencePage itself, DialogPage's automatic disposal of its children's
+	 * widgets cannot be used. Instead, dispose of each inner class' widgets
+	 * explicitly.
+	 */
+	public void dispose() {
+		super.dispose();
+		try {
+			if (_pageImpl != null) {
+				_pageImpl.dispose();
+				_pageImpl = null;
+			}
+
+			// TODO figure out what this thing did
+			// ExtensionManger.instance().getDelegate().disposePreferencePage();
+		} catch (Exception exc) {
+			displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE, ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+		}
+	}
+
+	private void logError(Throwable exc) {
+		ValidationUIPlugin.getPlugin().handleException(exc);
+	}
+
+	/*
+	 * package visibility because if this method is private, then the compiler
+	 * needs to create a synthetic accessor method for the internal classes, and
+	 * that can have performance implications.
+	 */
+	void displayAndLogError(String title, String message, Throwable exc) {
+		logError(exc);
+		displayMessage(title, message, org.eclipse.swt.SWT.ICON_ERROR);
+	}
+
+	private void displayMessage(String title, String message, int iIconType) {
+		MessageBox messageBox = new MessageBox(getShell(),
+				org.eclipse.swt.SWT.OK | iIconType	| org.eclipse.swt.SWT.APPLICATION_MODAL);
+		messageBox.setMessage(message);
+		messageBox.setText(title);
+		messageBox.open();
+	}
+
+	/**
+	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
+	 */
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+
+		if (_pageImpl == null)return;
+		if (visible)_pageImpl.gainFocus();
+		else _pageImpl.loseFocus();
+	}
+
+	protected Button getDefaultsButton() {
+		return super.getDefaultsButton();
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/preferences/ValidationPropertyPage.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/preferences/ValidationPropertyPage.java
new file mode 100644
index 0000000..9aabee4
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/preferences/ValidationPropertyPage.java
@@ -0,0 +1,872 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 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.wst.validation.ui.internal.preferences;
+
+import java.lang.reflect.InvocationTargetException;
+import org.eclipse.core.resources.ICommand;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+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.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+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.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+import org.eclipse.ui.dialogs.PropertyPage;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.ConfigurationManager;
+import org.eclipse.wst.validation.internal.GlobalConfiguration;
+import org.eclipse.wst.validation.internal.ProjectConfiguration;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValPrefManagerProject;
+import org.eclipse.wst.validation.internal.ValidatorMetaData;
+import org.eclipse.wst.validation.internal.ValidatorMutable;
+import org.eclipse.wst.validation.internal.ValManager.UseProjectPreferences;
+import org.eclipse.wst.validation.internal.model.ProjectPreferences;
+import org.eclipse.wst.validation.internal.operations.ValidatorManager;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.eclipse.wst.validation.internal.ui.DelegatingValidatorPreferencesDialog;
+import org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin;
+import org.eclipse.wst.validation.ui.internal.HelpContextIds;
+import org.eclipse.wst.validation.ui.internal.ImageNames;
+import org.eclipse.wst.validation.ui.internal.ValUIMessages;
+import org.eclipse.wst.validation.ui.internal.dialog.FilterDialog;
+
+/**
+ * From this page the user can configure individual validators on individual projects.
+ * 
+ * @author karasiuk
+ */
+public class ValidationPropertyPage extends PropertyPage  {
+
+	private IValidationPage _pageImpl;
+	private Shell 			_shell;
+
+	public interface IValidationPage {
+		
+		Composite createPage(Composite parent) throws InvocationTargetException;
+		boolean performOk() throws InvocationTargetException;
+		boolean performDefaults() throws InvocationTargetException;
+		Composite getControl();
+		void dispose();
+		void loseFocus();
+		void gainFocus();
+	}
+
+	public class InvalidPage implements IValidationPage {
+		
+		private Composite page = null;
+		private Composite composite = null;
+		private GridLayout layout = null;
+		private Label messageLabel = null;
+
+		public InvalidPage(Composite parent) {
+			page = createPage(parent);
+		}
+
+		/**
+		 * This page is added to the Properties guide if some internal problem
+		 * occurred; for example, the highlighted item in the workbench is not
+		 * an IProject (according to this page's plugin.xml, this page is only
+		 * valid when an IProject is selected).
+		 */
+		public Composite createPage(Composite parent) {
+			noDefaultAndApplyButton();
+
+			final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
+			sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
+			composite = new Composite(sc1, SWT.NONE);
+			sc1.setContent(composite);
+			layout = new GridLayout();
+			composite.setLayout(layout);
+
+			messageLabel = new Label(composite, SWT.NONE);
+			messageLabel.setText(ValUIMessages.VBF_EXC_INVALID_REGISTER);
+
+			composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+			return composite;
+		}
+
+		public boolean performDefaults() {
+			return true;
+		}
+
+		/**
+		 * Since this page occurs under invalid circumstances, there is nothing
+		 * to save.
+		 */
+		public boolean performOk() {
+			return true;
+		}
+
+		public Composite getControl() {
+			return page;
+		}
+
+		public void dispose() {
+			messageLabel.dispose();
+			// layout.dispose();
+			composite.dispose();
+		}
+
+		public void loseFocus() {
+		}
+
+		public void gainFocus() {
+		}
+	}
+
+	private final class ValidatorListPage implements IValidationPage {
+		private Composite 		_page;
+
+		private TableViewer 	_validatorList;
+		private Button 			_enableAllButton;
+		private Button 			_disableAllButton;
+		private Button 			_override;
+		private Button 			_suspend;
+		private Link			_configLink;
+		private Button			_addValidationBuilder;
+		private Table 			_validatorsTable;
+		private ValidatorMutable[]		_validators;
+		
+		/** Number of things that may have changed. */
+		private int				_changes;
+
+		/**
+		 * This class is provided for the CheckboxTableViewer in the
+		 * ValidationPropertiesPage$ValidatorListPage class.
+		 */
+		public class ValidationContentProvider implements IStructuredContentProvider {
+			public void dispose() {
+			}
+
+			public Object[] getElements(Object inputElement) {
+				if (inputElement instanceof ValidatorMutable[]) {
+					return (ValidatorMutable[]) inputElement;
+				}
+				return new Object[0];
+			}
+
+			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			}
+		}
+
+		/**
+		 * This class is provided for
+		 * ValidationPropertiesPage$ValidatorListPage's checkboxTableViewer
+		 * element.
+		 */
+		public class ValidationLabelProvider extends LabelProvider implements ITableLabelProvider {
+			public String getText(Object element) {
+				if (element == null)return ""; //$NON-NLS-1$
+				else if (element instanceof Validator)
+					return ((ValidatorMutable) element).getName();
+				else
+					return super.getText(element);
+			}
+
+			private Image getImage(String imageName) {
+				boolean isDisabled = !_validatorsTable.isEnabled();
+				if (isDisabled)
+					imageName = imageName + ImageNames.disabled;
+
+				return ValidationUIPlugin.getPlugin().getImage(imageName);
+			}
+
+			public Image getColumnImage(Object element, int columnIndex) {
+				ValidatorMutable v = (ValidatorMutable) element;
+				if (columnIndex == 1) {
+					return getImage(v.isManualValidation() ? ImageNames.okTable
+							: ImageNames.failTable);
+				} else if (columnIndex == 2) {
+					return getImage(v.isBuildValidation() ? ImageNames.okTable
+							: ImageNames.failTable);
+				} else if (columnIndex == 3) {
+					if (hasSettings(v))return getImage(ImageNames.settings);
+					return  null;
+				}
+				return null;
+			}
+
+			public String getColumnText(Object element, int columnIndex) {
+				if (columnIndex == 0)return ((ValidatorMutable) element).getName();
+				return null;
+			}
+		}
+
+		public ValidatorListPage(Composite parent) throws InvocationTargetException {
+			_page = createPage(parent);
+		}
+
+		private void setupTableColumns(Table table) {
+			TableColumn validatorColumn = new TableColumn(table, SWT.NONE);
+			validatorColumn.setText(ValUIMessages.VALIDATOR);
+			validatorColumn.setWidth(245);
+			TableColumn manualColumn = new TableColumn(table, SWT.CENTER);
+			manualColumn.setText(ValUIMessages.MANUAL);
+			manualColumn.pack();
+			TableColumn buildColumn = new TableColumn(table, SWT.CENTER);
+			buildColumn.setText(ValUIMessages.BUILD);
+			buildColumn.pack();
+			TableColumn settingsColumn = new TableColumn(table, SWT.CENTER);
+			settingsColumn.setText(ValUIMessages.SETTINGS);
+			settingsColumn.pack();
+		}
+
+		public Composite createPage(Composite parent) throws InvocationTargetException {
+			Validator[] vals = ValManager.getDefault()
+				.getValidatorsConfiguredForProject(getProject(), UseProjectPreferences.MustUse);
+			_validators = new ValidatorMutable[vals.length];
+			for (int i=0; i<vals.length; i++)_validators[i] = new ValidatorMutable(vals[i]);
+
+			Composite validatorGroup = new Composite(parent, SWT.NONE);
+
+			GridLayout validatorGroupLayout = new GridLayout();
+			validatorGroupLayout.numColumns = 2;
+			validatorGroup.setLayout(validatorGroupLayout);
+			GridDataFactory.fillDefaults().grab(true, true).applyTo(validatorGroup);
+
+			addOverride(validatorGroup);
+			addConfigLink(validatorGroup);
+			addSuspend(validatorGroup);
+			addValidationBuilder(validatorGroup);
+			new Label(validatorGroup, SWT.NONE).setLayoutData(new GridData());
+
+			Label listLabel = new Label(validatorGroup, SWT.NONE);
+			GridData listLabelData = new GridData(GridData.FILL_HORIZONTAL);
+			listLabelData.horizontalSpan = 2;
+			listLabel.setLayoutData(listLabelData);
+			listLabel.setText(ValUIMessages.PREF_VALLIST_TITLE);
+			
+			_validatorsTable = new Table(validatorGroup, SWT.BORDER | SWT.FULL_SELECTION);
+			Point preferredSize = _validatorsTable.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			GridDataFactory.fillDefaults().grab(true, true).hint(preferredSize)
+				.span(2,1).applyTo(_validatorsTable);
+
+			_validatorsTable.setHeaderVisible(true);
+			_validatorsTable.setLinesVisible(true);
+
+			_validatorList = new TableViewer(_validatorsTable);
+			_validatorList.setLabelProvider(new ValidationLabelProvider());
+			_validatorList.setContentProvider(new ValidationContentProvider());
+			_validatorList.setSorter(new ViewerSorter());
+			setupTableColumns(_validatorsTable);
+
+			_validatorList.setInput(_validators);
+			_validatorsTable.addMouseListener(new MouseAdapter() {
+
+				public void mouseDown(MouseEvent e) {
+					if (e.button != 1)return;
+
+					TableItem tableItem = _validatorsTable.getItem(new Point(e.x, e.y));
+					if (tableItem == null || tableItem.isDisposed()) {
+						// item no longer exists
+						return;
+					}
+					int columnNumber;
+					int columnsCount = _validatorsTable.getColumnCount();
+					if (columnsCount == 0) {
+						// If no TableColumn, Table acts as if it has a single column
+						// which takes the whole width.
+						columnNumber = 0;
+					} else {
+						columnNumber = -1;
+						for (int i = 0; i < columnsCount; i++) {
+							Rectangle bounds = tableItem.getBounds(i);
+							if (bounds.contains(e.x, e.y)) {
+								columnNumber = i;
+								break;
+							}
+						}
+						if (columnNumber == -1)return;
+					}
+
+					columnClicked(columnNumber);
+				}
+			});
+
+			_validatorsTable.setMenu(createContextMenu());
+			_validatorsTable.addFocusListener(new FocusAdapter() {
+
+				public void focusGained(FocusEvent e) {
+					super.focusGained(e);
+					if (_validatorsTable.getSelectionCount() == 0) {
+						_validatorsTable.select(0);
+					}
+				}
+			});
+			
+			addButtons(validatorGroup);
+
+			// Have to set the tab order or only the first checkbox in a
+			// Composite can be tabbed to. (Seems to apply only to checkboxes. Have to use the
+			// arrow key to navigate the checkboxes.)
+			validatorGroup.setTabList(new Control[] { _override, _suspend});
+
+			updateWidgets();
+
+			applyDialogFont(validatorGroup);
+			validatorGroup.setSize(validatorGroup.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+			return validatorGroup;
+		}
+
+		private void addButtons(Composite validatorGroup) {
+			
+			Composite buttons = new Composite(validatorGroup, SWT.NONE);
+			GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			buttons.setLayout(new RowLayout());
+			
+			_enableAllButton = new Button(buttons, SWT.PUSH);
+			_enableAllButton.setText(ValUIMessages.PREF_BUTTON_ENABLEALL);
+			_enableAllButton.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					try {
+						performEnableAll();
+					} catch (InvocationTargetException exc) {
+						displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE,ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+					}
+				}
+			});
+
+			_disableAllButton = new Button(buttons, SWT.PUSH);
+			_disableAllButton.setText(ValUIMessages.PREF_BUTTON_DISABLEALL);
+			_disableAllButton.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					try {
+						performDisableAll();
+					} catch (InvocationTargetException exc) {
+						displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE, ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+					}
+				}
+			});
+		}
+
+		private void addSuspend(Composite validatorGroup) {
+			GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			_suspend = new Button(validatorGroup, SWT.CHECK);
+			_suspend.setLayoutData(gd);
+			_suspend.setText(ValUIMessages.DISABLE_VALIDATION);
+			_suspend.setSelection(getProjectPreferences().getSuspend());
+			_suspend.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					_suspend.setFocus();
+					_changes++;
+					enableDisableWidgets();
+					_validatorList.refresh();
+				}
+			});
+		}
+		
+		private void addConfigLink(Composite validatorGroup){
+			_configLink = new Link(validatorGroup,SWT.None);
+			GridData layout = new GridData(GridData.HORIZONTAL_ALIGN_END);
+			_configLink.setLayoutData(layout);
+			_configLink.setText("<A>"+ //$NON-NLS-1$
+				ValUIMessages.ConfigWsSettings+"</A>"); //$NON-NLS-1$
+			_configLink.addSelectionListener(new SelectionListener() {
+				public static final String DATA_NO_LINK = "PropertyAndPreferencePage.nolink"; //$NON-NLS-1$
+
+				public void doLinkActivated(Link e) {
+					String id = getPreferencePageID();
+					PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[]{id}, DATA_NO_LINK).open();
+					try {
+						updateWidgets();
+					} catch (InvocationTargetException ie) {
+
+					}
+				}
+
+				private String getPreferencePageID() {
+					return "ValidationPreferencePage"; //$NON-NLS-1$
+				}
+
+				public void widgetDefaultSelected(SelectionEvent e) {
+					doLinkActivated((Link) e.widget);					
+				}
+
+				public void widgetSelected(SelectionEvent e) {
+					doLinkActivated((Link) e.widget);					
+				}
+			});
+			
+		}
+		
+		/**
+		 * If the current project doesn't have the validation builder configured on it, 
+		 * and the user has asked us to add a builder, add the builder. 
+		 * Otherwise return without doing anything.
+		 */
+		private void addBuilder() {
+			if (_addValidationBuilder != null && _addValidationBuilder.getSelection())
+				ValidatorManager.addProjectBuildValidationSupport(getProject());
+		}
+
+		
+		private void addValidationBuilder(Composite validatorGroup) {
+			if (hasValidationBuilder())return;
+			
+			GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.horizontalSpan = 2;
+			_addValidationBuilder = new Button(validatorGroup, SWT.CHECK);
+			_addValidationBuilder.setLayoutData(gd);
+			_addValidationBuilder.setText(ValUIMessages.ADD_VALIDATION_BUILDER);
+			_addValidationBuilder.setSelection(false);
+		}
+				
+		/**
+		 * Does this validator have extra settings that can be configured?
+		 * @param v
+		 * @return true if it does
+		 */
+		boolean hasSettings(ValidatorMutable v){
+			if (v.isV2Validator())return true;
+			if (v.getDelegatingId() != null)return true;
+			return false;
+		}
+
+		/**
+		 * Answer if this project has a validator builder assigned to it.
+		 */
+		private boolean hasValidationBuilder(){
+			try {
+				IProjectDescription description = getProject().getDescription();
+				ICommand[] commands = description.getBuildSpec();
+				for (int i = 0; i < commands.length; i++) {
+					if (commands[i].getBuilderName().equals(ValidationPlugin.VALIDATION_BUILDER_ID))
+						return true;
+				}
+				return false;
+			}
+			catch (CoreException e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+			return false;
+		}
+
+
+		private void addOverride(Composite validatorGroup) {
+			GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+//			gd.horizontalSpan = 2;
+			_override = new Button(validatorGroup, SWT.CHECK);
+			_override.setLayoutData(gd);
+			_override.setText(ValUIMessages.LabelEnableProjectSpecific);
+			_override.setSelection(getProjectPreferences().getOverride());
+			_override.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					_override.setFocus();
+					_changes++;
+					ValManager vm = ValManager.getDefault();
+					if (vm.getGlobalPreferences().getOverride()){
+//						IProject project = getProject();
+//						UseProjectPreferences useProject = UseProjectPreferences.Normal;
+//						if (_override.getSelection())useProject = UseProjectPreferences.MustUse;
+//						_validators = copyValidators(vm.getValidatorsConfiguredForProject(project, useProject));
+//						_validatorList.setInput(_validators);
+						enableDisableWidgets();
+						_validatorList.refresh();
+					}
+					else {
+						MessageDialog.openWarning(_shell, ValUIMessages.Validation, 
+							ValUIMessages.ProjectOverridesNotAllowed);						
+					}
+				}
+
+			});
+		}
+
+		protected Menu createContextMenu() {
+			final Menu menu = new Menu(_validatorsTable.getShell(), SWT.POP_UP);
+			final MenuItem manualItem = new MenuItem(menu, SWT.CHECK);
+			manualItem.setText(ValUIMessages.PREF_MNU_MANUAL);
+			final MenuItem buildItem = new MenuItem(menu, SWT.CHECK);
+			buildItem.setText(ValUIMessages.PREF_MNU_BUILD);
+			final MenuItem settingsItem = new MenuItem(menu, SWT.PUSH);
+			settingsItem.setText(ValUIMessages.PREF_MNU_SETTINGS);
+
+			class MenuItemListener extends SelectionAdapter {
+				public void widgetSelected(SelectionEvent e) {
+					MenuItem menuItem = (MenuItem) e.getSource();
+					int index = menu.indexOf(menuItem) + 1;
+					columnClicked(index);
+				}
+			}
+			MenuItemListener listener = new MenuItemListener();
+			manualItem.addSelectionListener(listener);
+			buildItem.addSelectionListener(listener);
+			settingsItem.addSelectionListener(listener);
+
+			menu.addMenuListener(new MenuAdapter() {
+				public void menuShown(MenuEvent e) {
+					IStructuredSelection selection = (IStructuredSelection) _validatorList.getSelection();
+					ValidatorMutable val = (ValidatorMutable) selection.getFirstElement();
+					manualItem.setSelection(val.isManualValidation());
+					buildItem.setSelection(val.isBuildValidation());
+					settingsItem.setEnabled(hasSettings(val));
+				}
+			});
+
+			return menu;
+		}
+
+		protected void columnClicked(int columnToEdit) {
+			IStructuredSelection selection = (IStructuredSelection) _validatorList.getSelection();
+			ValidatorMutable val = (ValidatorMutable) selection.getFirstElement();
+
+			switch (columnToEdit) {
+			case 1:
+				val.setManualValidation(!val.isManualValidation());
+				break;
+			case 2:
+				val.setBuildValidation(!val.isBuildValidation());
+				break;
+			case 3:
+				if (val.isV2Validator()){
+					ValidatorMutable newVal = new ValidatorMutable(val);
+					FilterDialog fd = new FilterDialog(_shell, newVal, getProject());
+					if (Window.OK == fd.open()){
+						_changes++;
+						newVal = fd.getValidator();
+						int i = findit(val);
+						if (i != -1)_validators[i] = newVal;
+					}
+				}
+				else {
+					handleOldDelegate(val);
+				}
+
+				break;
+			default:
+				break;
+			}
+			_validatorList.refresh();
+		}
+
+		private int findit(ValidatorMutable val) {
+			for (int i=0; i<_validators.length; i++)if (_validators[i] == val)return i;
+			return -1;
+		}
+		
+		private void handleOldDelegate(ValidatorMutable val) {
+			try {
+				if (!val.isV1Validator())return;
+				
+				ValidatorMetaData vmd = val.getVmd();
+			    if (!vmd.isDelegating())return;
+			    
+			    GlobalConfiguration gc = ConfigurationManager.getManager().getGlobalConfiguration();
+			    String delegateID = gc.getDelegateUniqueName(vmd);
+			    Shell shell = Display.getCurrent().getActiveShell();
+			    DelegatingValidatorPreferencesDialog dialog = 
+			    	new DelegatingValidatorPreferencesDialog(shell, vmd, delegateID);
+			
+			    dialog.setBlockOnOpen(true);
+			    dialog.create();
+			
+			    int result = dialog.open();
+		        if (result == Window.OK){
+		        	_changes++;
+		        	gc.setDelegateUniqueName(vmd, dialog.getDelegateID());
+		        }
+			}
+			catch (InvocationTargetException e){
+				
+			}
+		}
+
+		protected void updateWidgets() throws InvocationTargetException {
+			// Need to update even the widgets that do not change based on another
+			// widgets because of performDefaults(). If performDefaults() is selected,
+			// then the pagePreferences values are reset, and these widgets
+			// might also need to be updated.
+			updateAllWidgets();
+			updateHelp();
+		}
+
+		protected void updateWidgetsForDefaults() throws InvocationTargetException {
+			_suspend.setSelection(false);
+			_override.setSelection(false);
+			enableDisableWidgets();
+			_validatorList.setInput(_validators);
+			_validatorList.refresh();
+		}
+
+		private void updateAllWidgets() throws InvocationTargetException {
+			_suspend.setSelection(getProjectPreferences().getSuspend());
+			_override.setSelection(getProjectPreferences().getOverride());
+			enableDisableWidgets();
+			_validatorList.setInput(_validators);
+			_validatorList.refresh();
+		}
+
+		public boolean performOk() throws InvocationTargetException {
+			
+			addBuilder();
+			for (ValidatorMutable vm : _validators)if (vm.isChanged())_changes++;
+			if (_changes == 0)return true;
+			// [213631] this warning should only be shown if the user actually tried to override
+			// the validators
+			if (!ValManager.getDefault().getGlobalPreferences().getOverride() && _override.getSelection()){
+				MessageDialog.openWarning(_shell, ValUIMessages.Validation, ValUIMessages.ProjectOverridesNotAllowed);
+				return false;
+			}
+			updateV1ProjectSettings();
+			IProject project = getProject();
+			ProjectPreferences pp = new ProjectPreferences(project, _override.getSelection(), _suspend.getSelection(), null);
+			ValPrefManagerProject vpm = new ValPrefManagerProject(project);
+			vpm.savePreferences(pp, _validators);
+			return true;
+		}
+		
+		/**
+		 * Update the version 1 project settings.
+		 */
+		private void updateV1ProjectSettings() {
+			try {
+				ProjectConfiguration pc = ConfigurationManager.getManager().getProjectConfiguration(getProject());
+				pc.setDoesProjectOverride(_override.getSelection());
+				pc.setDisableAllValidation(_suspend.getSelection());
+			}
+			catch (InvocationTargetException e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}			
+		}
+
+		/**
+		 * Answer the specific project preferences. If the project didn't have any specific project
+		 * preferences, then create a default set.
+		 * @return
+		 */
+		private ProjectPreferences getProjectPreferences(){
+			return ValManager.getDefault().getProjectPreferences(getProject());
+		}
+
+		public boolean performDefaults() throws InvocationTargetException {
+			Validator[] vals = ValManager.getDefault()
+				.getValidatorsConfiguredForProject(getProject(), UseProjectPreferences.MustNotUse);
+			_validators = new ValidatorMutable[vals.length];
+			for (int i=0; i<vals.length; i++)_validators[i] = new ValidatorMutable(vals[i]);
+
+			_changes++;
+			updateWidgetsForDefaults();
+			getDefaultsButton().setFocus();
+			return true;
+		}
+
+		public boolean performEnableAll() throws InvocationTargetException {
+			setAllValidators(true);
+			_enableAllButton.setFocus();
+			_validatorList.refresh();
+			return true;
+		}
+
+		private void setAllValidators(boolean bool) {
+			for (TableItem item : _validatorsTable.getItems()) {
+				ValidatorMutable val = (ValidatorMutable) item.getData();
+				val.setManualValidation(bool);
+				val.setBuildValidation(bool);
+			}
+		}
+
+		public boolean performDisableAll() throws InvocationTargetException {
+			setAllValidators(false);
+			_disableAllButton.setFocus();
+			_validatorList.refresh();
+			return true;
+		}
+
+		protected void updateHelp() {
+//			PlatformUI.getWorkbench().getHelpSystem().setHelp(_suspend, ContextIds.VALIDATION_PREFERENCE_PAGE_DISABLE_ALL_ENABLED);
+		}
+
+		/*
+		 * Store the current values of the controls into the preference store.
+		 */
+
+		public Composite getControl() {
+			return _page;
+		}
+
+		public void dispose() {
+			_override.dispose();
+			_suspend.dispose();
+			_configLink.dispose();
+			_disableAllButton.dispose();
+			_enableAllButton.dispose();
+			_validatorList.getTable().dispose();
+		}
+		
+		/**
+		 * Enable or disable the widgets based on some top level preferences. 
+		 */
+		private void enableDisableWidgets() {
+			boolean globalOverride = ValManager.getDefault().getGlobalPreferences().getOverride();
+			boolean enable = !_suspend.getSelection() & _override.getSelection() & globalOverride;
+			_suspend.setEnabled(_override.getSelection() & globalOverride);
+			_validatorsTable.setEnabled(enable);
+			_enableAllButton.setEnabled(enable);
+			_disableAllButton.setEnabled(enable);
+			_configLink.setEnabled(!globalOverride || !_override.getSelection());
+		}
+
+		public void loseFocus() {
+			// This page does not need to cache anything before it loses focus.
+		}
+
+		public void gainFocus() {
+		}
+	}
+
+	protected Control createContents(Composite parent) {
+		try {
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HelpContextIds.ProjectPage);
+			_shell = parent.getShell();
+			_pageImpl = new ValidatorListPage(parent);
+		} catch (Exception exc) {
+			_pageImpl = new InvalidPage(parent);
+			displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE, ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+		}
+
+		return _pageImpl.getControl();
+	}
+
+	protected void performDefaults() {
+		super.performDefaults();
+
+		try {
+			_pageImpl.performDefaults();
+		} catch (Exception exc) {
+			displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE, ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+		}
+	}
+
+	public boolean performOk() {
+		try {
+			return _pageImpl.performOk();
+		} catch (Exception exc) {
+			displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE, ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+			return false;
+		}
+	}
+
+	/**
+	 * Since the pages are inner classes of a child PreferencePage, not a
+	 * PreferencePage itself, DialogPage's automatic disposal of its children's
+	 * widgets cannot be used. Instead, dispose of each inner class' widgets
+	 * explicitly.
+	 */
+	public void dispose() {
+		super.dispose();
+		try {
+			if (_pageImpl != null) {
+				_pageImpl.dispose();
+				_pageImpl = null;
+			}
+		} catch (Exception exc) {
+			displayAndLogError(ValUIMessages.VBF_EXC_INTERNAL_TITLE, ValUIMessages.VBF_EXC_INTERNAL_PAGE, exc);
+		}
+	}
+
+	private void logError(Throwable exc) {
+		ValidationUIPlugin.getPlugin().handleException(exc);
+	}
+
+	/*
+	 * package visibility because if this method is private, then the compiler
+	 * needs to create a synthetic accessor method for the internal classes, and
+	 * that can have performance implications.
+	 */
+	void displayAndLogError(String title, String message, Throwable exc) {
+		logError(exc);
+		displayMessage(title, message, org.eclipse.swt.SWT.ICON_ERROR);
+	}
+
+	private void displayMessage(String title, String message, int iIconType) {
+		MessageBox messageBox = new MessageBox(getShell(),
+			org.eclipse.swt.SWT.OK | iIconType | org.eclipse.swt.SWT.APPLICATION_MODAL);
+		messageBox.setMessage(message);
+		messageBox.setText(title);
+		messageBox.open();
+	}
+
+	/**
+	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
+	 */
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+
+		if (_pageImpl == null)return;
+		if (visible)_pageImpl.gainFocus();
+		else _pageImpl.loseFocus();
+	}
+
+	/**
+	 * @see org.eclipse.jface.preference.PreferencePage#getDefaultsButton()
+	 */
+	protected Button getDefaultsButton() {
+		return super.getDefaultsButton();
+	}
+	
+	/**
+	 * Returns the selected project.
+	 */
+	public IProject getProject() {
+		IAdaptable selectedElement = getElement();
+		if (selectedElement == null)return null;
+		if (selectedElement instanceof IProject)return (IProject) selectedElement;
+
+		Object adaptedObject = selectedElement.getAdapter(IProject.class);
+		if (adaptedObject instanceof IProject)return (IProject) adaptedObject;
+		return null;
+
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/.classpath b/plugins/org.eclipse.wst.validation/.classpath
index f8323da..64ae09a 100644
--- a/plugins/org.eclipse.wst.validation/.classpath
+++ b/plugins/org.eclipse.wst.validation/.classpath
@@ -3,7 +3,12 @@
 	<classpathentry kind="src" path="validate"/>
 	<classpathentry kind="src" path="validate_core"/>
 	<classpathentry kind="src" path="property_files"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="vf2"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="org/eclipse/wst/common/**"/>
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.validation/.options b/plugins/org.eclipse.wst.validation/.options
index 26565de..404c71b 100644
--- a/plugins/org.eclipse.wst.validation/.options
+++ b/plugins/org.eclipse.wst.validation/.options
@@ -1,2 +1,37 @@
-com.ibm.etools.validation/debug=true
-com.ibm.etools.validation/tracefilter=
\ No newline at end of file
+org.eclipse.wst.validation/debug=true
+
+# Set this to true if you wish performance information to be logged
+org.eclipse.wst.validation/timings=false
+
+# set this to true if you want version 1 validator tracing
+org.eclipse.wst.validation/v1=false
+
+# Set this to a file name, if you wish the results to be logged to a file, otherwise
+# they will be written to stderr. When logged to a file the results are in a
+# CSV (comma separated values) form. When logged to stderr they are in a more 
+# human readable form.
+org.eclipse.wst.validation/timings/tracefile=
+
+# By default times that are written to the trace file are in milliseconds for elapsed
+# time and nanoseconds for cpu time. If you find these times easier to read as seconds
+# as expressed by a double, the following flag can be turned on.
+org.eclipse.wst.validation/timings/useDoubles=false
+
+# If extra detail is needed for a particular validator it's id can be specified here.
+# For example, if you wanted more detail on the XML validator you would use
+# org.eclipse.wst.xml.core.xml 
+org.eclipse.wst.validation/extraValDetail=
+
+# To make debugging easier, you can make it appear is if only one validator has been 
+# registered via the extension points. You do this by setting the following filter
+# to validator id of the one validator that you want registered.
+#
+# As an example, you could use this plug-in id for a v1 validator: org.eclipse.jst.j2ee.ejb.EJBValidator
+# and org.eclipse.wst.html.ui.HTMLValidator for a v2 validator
+org.eclipse.wst.validation/filter/allExcept=
+
+# The tracing level. If not supplied a default of zero is used. The higher the number the
+# more verbose the tracing.
+org.eclipse.wst.validation/trace/level=
+
+
diff --git a/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.core.prefs
index 62c0483..58507dd 100644
--- a/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,78 @@
-#Wed Mar 29 04:07:08 EST 2006
+#Fri Apr 11 07:15:44 EDT 2008
 eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=_
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=_
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.ui.prefs
index 35ee23b..76ddc11 100644
--- a/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.ui.prefs
+++ b/plugins/org.eclipse.wst.validation/.settings/org.eclipse.jdt.ui.prefs
@@ -1,3 +1,7 @@
-#Wed Mar 29 04:07:07 EST 2006
+#Mon Jun 11 14:58:22 EDT 2007
 eclipse.preferences.version=1
-internal.default.compliance=default
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.overrideannotation=true
diff --git a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
index 1200507..8fb0e19 100644
--- a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
@@ -1,22 +1,24 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Validation Framework
+Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.wst.validation; singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.2.10.qualifier
 Bundle-Activator: org.eclipse.wst.validation.internal.plugin.ValidationPlugin
-Bundle-Vendor: Eclipse.org
+Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.validation.internal;x-internal:=true,
- org.eclipse.wst.validation.internal.core;x-internal:=true,
+Export-Package: org.eclipse.wst.validation,
+ org.eclipse.wst.validation.internal;x-friends:="org.eclipse.wst.common.tests.validation",
+ org.eclipse.wst.validation.internal.core;x-friends:="org.eclipse.wst.common.tests.validation",
  org.eclipse.wst.validation.internal.delegates;x-internal:=true,
- org.eclipse.wst.validation.internal.operations;x-internal:=true,
- org.eclipse.wst.validation.internal.plugin;x-internal:=true,
+ org.eclipse.wst.validation.internal.model;x-internal:=true,
+ org.eclipse.wst.validation.internal.operations;x-friends:="org.eclipse.wst.common.tests.validation",
+ org.eclipse.wst.validation.internal.plugin;x-friends:="org.eclipse.wst.common.tests.validation",
  org.eclipse.wst.validation.internal.provisional;x-internal:=true,
- org.eclipse.wst.validation.internal.provisional.core;x-internal:=true
-Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)"
-Eclipse-LazyStart: true
+ org.eclipse.wst.validation.internal.provisional.core
+Require-Bundle: org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,2.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.validation/about.html b/plugins/org.eclipse.wst.validation/about.html
index 4ec5989..2199df3 100644
--- a/plugins/org.eclipse.wst.validation/about.html
+++ b/plugins/org.eclipse.wst.validation/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>May 2, 2006</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/plugins/org.eclipse.wst.validation/build.properties b/plugins/org.eclipse.wst.validation/build.properties
index 8a3225d..167d165 100644
--- a/plugins/org.eclipse.wst.validation/build.properties
+++ b/plugins/org.eclipse.wst.validation/build.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2001, 2008 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
 ###############################################################################
@@ -12,11 +12,14 @@
                plugin.properties,\
                META-INF/,\
                about.html,\
-               .
+               .,\
+               .options,\
+               xsds/
 jars.compile.order = .
 src.includes = component.xml,\
                xsds/
 output.. = bin/
 source.. = validate_core/,\
            property_files/,\
-           validate/
+           validate/,\
+           vf2/
diff --git a/plugins/org.eclipse.wst.validation/plugin.properties b/plugins/org.eclipse.wst.validation/plugin.properties
index 4561d96..d7722e4 100644
--- a/plugins/org.eclipse.wst.validation/plugin.properties
+++ b/plugins/org.eclipse.wst.validation/plugin.properties
@@ -1,21 +1,26 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2001, 2008 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
 ###############################################################################
-#
-# Version 1.3
-#
+
 VALIDATION_BUILDER_NAME=Validation
 VALIDATION_PROBLEMMARKER_NAME=Validation Message
+ProblemMarkerV2=Validation Message
+
 VALIDATION_PROJECTMARKER_NAME=Enabled Validators
 VALIDATION_PREFERENCEMARKER_NAME=Validation Preferences
 Validator=Validator
 ReferencialFileValidator=ReferencialFileValidator
 validationSelectionHandler=validationSelectionHandler
 ValidatorDelegates=Validator Delegates
+
+Bundle-Name.0 = Validation Framework
+Bundle-Vendor.0 = Eclipse.org
+
+Extension.validator=Validator (Version 2)
diff --git a/plugins/org.eclipse.wst.validation/plugin.xml b/plugins/org.eclipse.wst.validation/plugin.xml
index 9187915..1b17568 100644
--- a/plugins/org.eclipse.wst.validation/plugin.xml
+++ b/plugins/org.eclipse.wst.validation/plugin.xml
@@ -1,14 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
 <plugin>
-
-    
+  
 <!-- Validation extension points -->
    <extension-point id="validator" name="%Validator" schema="xsds/validatorExtSchema.exsd"/>
+   <extension-point id="validatorV2" name="%Extension.validator" schema="xsds/validator.exsd"/>
    <extension-point id="referencialFileValidator" name="%ReferencialFileValidator" schema="xsds/referencialFileExtSchema.exsd"/>
    <extension-point id="validationSelectionHandler" name="%validationSelectionHandler" schema="xsds/validationSelectionHandler.exsd"/>
    <extension-point id="validationHelper" name="validationHelper" schema="xsds/validationHelper.exsd"/>
    <extension-point id="validatorDelegates" name="%ValidatorDelegates" schema="xsds/validatorDelegates.exsd"/>   
+   <extension-point id="validatorGroup" name="Validator Group" schema="xsds/validatorgroup.exsd"/>   
+   <extension-point id="exclude" name="Validator Exclusions" schema="xsds/exclude.exsd"/>   
    
 <!--============================-->
 <!-- Validation Contributions   -->
@@ -110,5 +112,20 @@
             name="version">
       </attribute>
    </extension>
+   <!-- GRK - I added a new problem marker so that we can keep the v2 changes separate from the v1 framework. -->
+   <extension
+         id="problemmarker2"
+         name="%ProblemMarkerV2"
+         point="org.eclipse.core.resources.markers">
+      <super
+            type="org.eclipse.core.resources.problemmarker">
+      </super>
+      <persistent
+            value="true">
+      </persistent>
+      <attribute
+            name="owner">
+      </attribute>
+  </extension>
 
 </plugin>
diff --git a/plugins/org.eclipse.wst.validation/prepareforpii.xml b/plugins/org.eclipse.wst.validation/prepareforpii.xml
deleted file mode 100644
index 1aad5fe..0000000
--- a/plugins/org.eclipse.wst.validation/prepareforpii.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<project name="PrepareForPII" default="main" basedir=".">
-		
-	<!-- Setup temp variables -->
-	<target name="init">
-		<property name="nlsDir" value="d:/NLS/Corona/0526"/>
-		<property name="plugin" value="com.ibm.etools.validation"/>
-		<property name="plugindir" value="d:/workspaceCorona/${plugin}"/>
-		<property name="outputDir" value="${nlsDir}/${plugin}"/>
-		
-	
-	</target>
-
-	<!-- Create the destination dir -->
-	<target name="nlsDir" depends="init">
-		<mkdir dir="${nlsDir}"/>
-	</target>
-	
-	<!-- Create the destination dir -->
-	<target name="plugindir" depends="nlsDir">
-		<delete dir="${outputDir}"/>
-		<mkdir dir="${outputDir}"/>
-	</target>
-
-	<!-- Move the files to the correct locations in the workspace. -->
-	<target name="main" depends="plugindir">
-	
-		<messageIdGen folderPath = "${plugindir}" componentId = "E" />
-		
-		<copy todir = "${outputDir}/property_files" >
-			 <fileset dir="${plugindir}/property_files">
-           	  <include name="**/*.properties"/>
-  			 </fileset>
-  		</copy>
-  		
-  		<copy file="${plugindir}/plugin.properties" todir="${outputDir}"/>
-  		
-	</target>
-</project>
diff --git a/plugins/org.eclipse.wst.validation/property_files/org/eclipse/wst/validation/internal/messages.properties b/plugins/org.eclipse.wst.validation/property_files/org/eclipse/wst/validation/internal/messages.properties
new file mode 100644
index 0000000..a5062b8
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/property_files/org/eclipse/wst/validation/internal/messages.properties
@@ -0,0 +1,73 @@
+###############################################################################
+# Copyright (c) 2005, 2008 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
+###############################################################################
+ErrConfig=IWAE0100E Extension configuration error. An internal error has happened, the validator {0} has incorrectly configured the validation extension point.
+ErrGroupName=IWAE0101E Invalid element, expect either the element "include" or "exclude".
+ErrFilterRule=IWAE0102E An invalid filter rule has been encountered.
+
+ErrGroupNoType=IWAE0103E Groups must have a valid type, no type was returned
+ErrGroupInvalidType=IWAE0104E Groups must have a valid type, the following invalid type was returned: {0}
+ErrDependencyVersion=IWAE0105E Only version {0} is supported
+
+ErrPatternAttrib=IWAE0106E The pattern attribute must be supplied
+ErrTypeReq=IWAE0107E Type is a required attribute for file filters
+
+VbfExcSyntaxNoValClass=IWAE0016E Validator cannot be created because no "class" attribute is specified in the <run> element of the plugin.xml file for the validator named {0}. Cannot create a validator unless a <run> element exists that specifies the "class" attribute. The value of the "class" attribute should be the name of the class that implements the IWorkbenchHelper interface.
+VbfExcSyntaxNoValRun=IWAE0015E Validator cannot be created because no <run> element is specified in the plugin.xml file for the validator named {0}. Cannot create a validator unless a <run> element exists that specifies the "class" attribute. The value of the "class" attribute should be the name of the class that implements the IWorkbenchHelper interface.
+VbfExcSyntaxNoValNull=IWAE0018E Validator class {0} could not be created. IConfigurationElement.createExecutableExtension(String) returned null.
+
+ErrType=The value of the type attribute is incorrect. It was specified as {0} but the only valid values are: {1}, {2}, {3}
+ConfigError=It appears that validator {0} (with id {1}) has been configured incorrectly, it produced {2} messages while validating {3}. It has been disabled. Try restoring the defaults for this validator.
+
+DecodeError1=IWAE0019E There was a problem deserializing a string. A boolean was expected but not found. 
+Error20=IWAE0020E Internal error, the incoming validator must be a v2 validator
+GroupInclude=Include Group
+GroupExclude=Exclude Group
+
+TypeInclude=include
+TypeExclude=exclude
+
+JobName=Validation
+JobNameMonitor=Validation Monitor
+JobIndexSave=Index Save
+
+MigrationJobName=Validation Setup
+
+RuleProjectNature=Project nature
+RuleFileExt=File extension
+RuleFile=File
+RuleContentType=Content Type
+RuleFacet=Facet
+RuleFolder=Folder
+RuleFull=Qualified File
+
+FileExtWithCase={0}: {1} (case sensitive)
+FileExtWithoutCase={0}: {1}
+
+ContentTypeExact={0}: {1} (excludes subtypes)
+ContentTypeNotExact={0}: {1} (includes subtypes)
+
+LogValStart=Validator {0} starting to validate: {1}
+LogValEnd=Validator {0} finished validating: {1}
+LogValEndTime=Validator {0} with id {1} finished validating: {2} in {3}
+LogValSummary=Validator {0} with id {1} validated {2} resources in {3}
+LogValSummary2=Validator {0} with id {1} validated {2} resources in {3} using {4} of CPU time
+LogSession=Session started on: {0}
+
+SevError=Error
+SevWarning=Warning
+SevIgnore=Ignore
+
+TimeUnder=under a second
+TimeNano={0} nanoseconds
+TimeMicro={0} microseconds
+TimeSec={0} seconds
+TimeMin={0} minutes
+
diff --git a/plugins/org.eclipse.wst.validation/property_files/validate_base.properties b/plugins/org.eclipse.wst.validation/property_files/validate_base.properties
index 0a0955a..9e2583d 100644
--- a/plugins/org.eclipse.wst.validation/property_files/validate_base.properties
+++ b/plugins/org.eclipse.wst.validation/property_files/validate_base.properties
@@ -1,10 +1,10 @@
 ###############################################################################
-# Copyright (c) 2001, 2004 IBM Corporation and others.
+# Copyright (c) 2001, 2008 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
 ###############################################################################
@@ -79,14 +79,10 @@
 
 VBF_EXC_RUNTIME=IWAE0010E Run-time exception {0} occurred during validation. The validator being run was {1} and the message thrown was {2}.
 
-VBF_EXC_SYNTAX_NULL_NAME=IWAE0011E Resource {0} cannot be added to file list because IWorkbenchContext.getPortableName() returns null. This resource will not be validated by the validator named {1}.
 VBF_EXC_SYNTAX_NO_HELPER=IWAE0012E No <helper> element is specified in the plugin.xml file for validator {0}. Since the helper cannot be created, the validator will not be loaded.
 VBF_EXC_SYNTAX_NO_HELPER_CLASS=IWAE0013E No "class" attribute in the <helper> element is specified in the plugin.xml file for validator {0}. The helper cannot be created without the name of the class that implements it. Since the helper cannot be created, the validator will not be loaded.
 VBF_EXC_SYNTAX_NO_HELPER_THROWABLE=IWAE0014E The helper {0} cannot be created because a Throwable was caught.
-VBF_EXC_SYNTAX_NO_VAL_RUN=IWAE0015E Validator cannot be created because no <run> element is specified in the plugin.xml file for the validator named {0}. Cannot create a validator unless a <run> element exists that specifies the "class" attribute. The value of the "class" attribute should be the name of the class that implements the IWorkbenchHelper interface.
-VBF_EXC_SYNTAX_NO_VAL_CLASS=IWAE0016E Validator cannot be created because no "class" attribute is specified in the <run> element of the plugin.xml file for the validator named {0}. Cannot create a validator unless a <run> element exists that specifies the "class" attribute. The value of the "class" attribute should be the name of the class that implements the IWorkbenchHelper interface.
 VBF_EXC_SYNTAX_NO_VAL_THROWABLE=IWAE0017E Cannot create validator {0} because a Throwable was caught.
-VBF_EXC_SYNTAX_NO_VAL_NULL=IWAE0018E Validator class {0} could not be created. IConfigurationElement.createExecutableExtension(String) returned null.
 
 VBF_EXC_DISABLEV=IWAE0019E Cannot instantiate validator {0}. Disabling the validator; read the log for details.
 VBF_EXC_DISABLEH=IWAE0020E Cannot instantiate helper {0}. Disabling validator {1}; read the log for details.
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationConstants.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationConstants.java
index 171596b..16aef08 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationConstants.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationConstants.java
@@ -1,85 +1,86 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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.wst.validation.internal;
 
-
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
-
 /**
  * Validation constants needed to implement the marker extension point and the user's preferences.
  * 
  * Only the validation framework should use this interface.
  */
 public interface ConfigurationConstants {
-	public static final String DISABLE_ALL_VALIDATION_SETTING = "disableAllValidation"; //$NON-NLS-1$ // boolean
-	///* package */static final String AUTO_SETTING = "autoValidate"; //$NON-NLS-1$ // boolean
-	///* package */static final String BUILD_SETTING = "runWhenBuild"; //$NON-NLS-1$ // boolean
-	public static final String SAVE_AUTOMATICALLY_SETTING = "saveAutomatically"; //$NON-NLS-1$ // boolean
+	String DISABLE_ALL_VALIDATION_SETTING = "disableAllValidation"; //$NON-NLS-1$ // boolean
+	String SAVE_AUTOMATICALLY_SETTING = "saveAutomatically"; //$NON-NLS-1$ // boolean
 
 	// Defaults for the preference and project values
 	
-	/* package */static String CURRENT_VERSION = (String) ValidationPlugin.getPlugin().getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION); //$NON-NLS-1$ // this is a constant, so it should be intern
-	/* package */static final boolean DEFAULT_ASYNC = true;
-	/* package */static final boolean DEFAULT_DISABLE_VALIDATION_SETTING = false;
-	///* package */static final boolean DEFAULT_AUTO_SETTING = true;
-	///* package */static final boolean DEFAULT_BUILD_SETTING = true;
-	/* package */static ValidatorMetaData[] DEFAULT_ENABLED_VALIDATORS = ValidationRegistryReader.getReader().getValidatorMetaDataArrayEnabledByDefault(); //$NON-NLS-1$ // store a copy here so that we don't modify the original and don't create a copy every time we need this value
-	/* package */static final int DEFAULT_MAXNUMMESSAGES = 50;
-	public static final int DEPTH_INFINITE = IResource.DEPTH_INFINITE;
-	public static final int DEPTH_ZERO = IResource.DEPTH_ZERO;
-	/* package */static final String ELEMENT_SEPARATOR = ";"; //$NON-NLS-1$ // separates the name of one IValidator from the next in the list of enabled validators for a project or preference
-  static final String DELEGATES_SEPARATOR = "="; //$NON-NLS-1$ // Separates the delegating validator id from the delegate validator id in the list of delegates
-	// The following values must match the attributes in the preference marker as shown in
-	// plugin.xml
+	String CURRENT_VERSION = (String) ValidationPlugin.getPlugin().getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);  // this is a constant, so it should be intern
+	boolean DEFAULT_ASYNC = true;
+	boolean DEFAULT_DISABLE_VALIDATION_SETTING = false;
+	ValidatorMetaData[] DEFAULT_ENABLED_VALIDATORS = ValidationRegistryReader.getReader().getValidatorMetaDataArrayEnabledByDefault();  // store a copy here so that we don't modify the original and don't create a copy every time we need this value
+	int DEFAULT_MAXNUMMESSAGES = 50;
+	int DEPTH_INFINITE = IResource.DEPTH_INFINITE;
+	int DEPTH_ZERO = IResource.DEPTH_ZERO;
+	String ELEMENT_SEPARATOR = ";"; //$NON-NLS-1$ // separates the name of one IValidator from the next in the list of enabled validators for a project or preference
+	String DELEGATES_SEPARATOR = "="; //$NON-NLS-1$ // Separates the delegating validator id from the delegate validator id in the list of delegates
+
+	// The following values must match the attributes in the preference marker as shown in plugin.xml
 	// Even though the plugin.xml values are not used to create new Preference or Project markers,
 	// maintaining one local name ensures that there's no confusion writing the migration code.
 	// These are the QualifiedNames used to persist the user's settings.
-	/* package */static final String ENABLED_MANUAL_VALIDATORS = "enabledManualValidatorList"; //$NON-NLS-1$ // String
-	/* package */static final String ENABLED_BUILD_VALIDATORS = "enabledBuildValidatorList"; //$NON-NLS-1$ // String
-  /* package */static final String DELEGATE_VALIDATORS = "delegateValidatorList"; //$NON-NLS-1$ // String
-	public static final String J2EE_PLUGIN_ID = "org.eclipse.jst.j2ee"; //$NON-NLS-1$ // For 4.03, this is the plugin id that the validation constants were declared in.
-	/* package */static final String MAXNUMMESSAGES = "maxNumMessages"; //$NON-NLS-1$ // integer
-	public static final String PLUGIN_ID = ValidationPlugin.PLUGIN_ID;
-	/* package */static final String PREF_PROJECTS_CAN_OVERRIDE = "projectsCanOverride"; //$NON-NLS-1$ // boolean
+	String ENABLED_MANUAL_VALIDATORS = "enabledManualValidatorList"; //$NON-NLS-1$ // String
+	String ENABLED_BUILD_VALIDATORS = "enabledBuildValidatorList"; //$NON-NLS-1$ // String
+	String DELEGATE_VALIDATORS = "delegateValidatorList"; //$NON-NLS-1$ // String
+	String J2EE_PLUGIN_ID = "org.eclipse.jst.j2ee"; //$NON-NLS-1$ // For 4.03, this is the plugin id that the validation constants were declared in.
+	String MAXNUMMESSAGES = "maxNumMessages"; //$NON-NLS-1$ // integer
+	String PLUGIN_ID = ValidationPlugin.PLUGIN_ID;
+	String PREF_PROJECTS_CAN_OVERRIDE = "projectsCanOverride"; //$NON-NLS-1$ // boolean
 	// end validation message marker constants
 
 	// Preference and Project constants
-	/* package */static final String PREFERENCE_MARKER = PLUGIN_ID + ".preferencemarker"; //$NON-NLS-1$
-	/* package */static final String PRJ_MARKER = PLUGIN_ID + ".projectmarker"; //$NON-NLS-1$ // The extension which saves user validation preferences for a particular project (e.g. which validators run on the project)
-	/* package */static final String PRJ_MARKER_403 = J2EE_PLUGIN_ID + ".projectmarker"; //$NON-NLS-1$ // The extension which saves user validation preferences for a particular project (e.g. which validators run on the project)
-	/* package */static final String PRJ_OVERRIDEGLOBAL = "overrideGlobalPreferences"; //$NON-NLS-1$ // boolean (Use the global preferences or override)
+	String PREFERENCE_MARKER = PLUGIN_ID + ".preferencemarker"; //$NON-NLS-1$
+	String PRJ_MARKER = PLUGIN_ID + ".projectmarker"; //$NON-NLS-1$ // The extension which saves user validation preferences for a particular project (e.g. which validators run on the project)
+	String PRJ_MARKER_403 = J2EE_PLUGIN_ID + ".projectmarker"; //$NON-NLS-1$ // The extension which saves user validation preferences for a particular project (e.g. which validators run on the project)
+	String PRJ_OVERRIDEGLOBAL = "overrideGlobalPreferences"; //$NON-NLS-1$ // boolean (Use the global preferences or override)
 
-	/* package */static final QualifiedName USER_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
-	/* package */static final QualifiedName USER_MANUAL_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationManualConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
-	/* package */static final QualifiedName USER_BUILD_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationBuildConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
-  /* package */static final QualifiedName DELEGATES_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationDelegatesConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
+	QualifiedName USER_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
+	QualifiedName USER_MANUAL_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationManualConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
+	QualifiedName USER_BUILD_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationBuildConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
+	QualifiedName DELEGATES_PREFERENCE = new QualifiedName(PLUGIN_ID, "ValidationDelegatesConfiguration"); //$NON-NLS-1$ // ValidationConfiguration for the IResource
 
 	// Validation message marker constants
-	/* package */static final String VALIDATION_MARKER = PLUGIN_ID + ".problemmarker"; //$NON-NLS-1$ // The extension which is used to add validation markers to the task list
-	/* package */static final String VALIDATION_MARKER_GROUP = "groupName"; //$NON-NLS-1$ // For incremental validation, this field associates a message with a group, so that a subset of messages may be removed from a file.
-	/* package */static final String VALIDATION_MARKER_MESSAGEID = "messageId"; //$NON-NLS-1$ // Persist the message id of the message, not just the translated text.
-
-	// The following values must match the attributes in the validation message marker as shown in
-	// plugin.xml
-	/* package */static final String VALIDATION_MARKER_OWNER = "owner"; //$NON-NLS-1$ // The IValidator who owns the IMarker on the task list
-	/* package */static final String VALIDATION_MARKER_SEVERITY = "validationSeverity"; //$NON-NLS-1$ // one of the SeverityEnum values
-	/* package */static final String VALIDATION_MARKER_TARGETOBJECT = "targetObject"; //$NON-NLS-1$ // When more than one target object resolves to the same IResource, this field identifies which targetObject owns a particular message.
-	/* package */static final String VERSION = "version"; //$NON-NLS-1$
+	
+	/** 
+	 * org.eclipse.wst.validation.problemmarker - The marker id which is used to add v1 validation markers 
+	 * to the task list */
+	String VALIDATION_MARKER = PLUGIN_ID + ".problemmarker"; //$NON-NLS-1$ 
+	
+	/** For incremental validation, this field associates a message with a group, so that a subset of messages may be removed from a file. */
+	String VALIDATION_MARKER_GROUP = "groupName"; //$NON-NLS-1$
+	
+	/**  Persist the message id of the message, not just the translated text. */
+	String VALIDATION_MARKER_MESSAGEID = "messageId"; //$NON-NLS-1$
+	
+	// The following values must match the attributes in the validation message marker as shown in plugin.xml
+	String VALIDATION_MARKER_OWNER = "owner"; //$NON-NLS-1$ // The IValidator who owns the IMarker on the task list
+	String VALIDATION_MARKER_SEVERITY = "validationSeverity"; //$NON-NLS-1$ // one of the SeverityEnum values
+	String VALIDATION_MARKER_TARGETOBJECT = "targetObject"; //$NON-NLS-1$ // When more than one target object resolves to the same IResource, this field identifies which targetObject owns a particular message.
+	String VERSION = "version"; //$NON-NLS-1$
 
 	// WSAD versions which created markers of these types
-	/* package */static final String VERSION4_03 = "4.03"; //$NON-NLS-1$
-	/* package */static final String VERSION5_0 = "5.0"; //$NON-NLS-1$
-	/* package */static final String VERSION5_01 = "5.0.1"; //$NON-NLS-1$
+	String VERSION4_03 = "4.03"; //$NON-NLS-1$
+	String VERSION5_0 = "5.0"; //$NON-NLS-1$
+	String VERSION5_01 = "5.0.1"; //$NON-NLS-1$
 	// end preference and project defaults
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationManager.java
index 2cc1ff8..47e919c 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationManager.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ConfigurationManager.java
@@ -1,24 +1,22 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 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.wst.validation.internal;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 
@@ -26,17 +24,15 @@
  * Only the validation framework can use this class.
  */
 public final class ConfigurationManager implements ConfigurationConstants {
-	private static ConfigurationManager inst = null;
+	private static ConfigurationManager _instance = null;
 
-	private ConfigurationManager() {
-		//Default constructor
-	}
+	private ConfigurationManager() {}
 
 	public static ConfigurationManager getManager() {
-		if (inst == null) {
-			inst = new ConfigurationManager();
+		if (_instance == null) {
+			_instance = new ConfigurationManager();
 		}
-		return inst;
+		return _instance;
 	}
 
 	/**
@@ -45,29 +41,16 @@
 	 * return null.
 	 */
 	public String getValidator(IMarker marker) {
-		if (marker == null) {
-			return null;
-		}
+		if (marker == null)return null;
 
 		try {
-			if (!marker.getType().equals(VALIDATION_MARKER)) {
-				return null;
-			}
+			if (!marker.getType().equals(VALIDATION_MARKER))return null;
 
 			Object attrib = marker.getAttribute(VALIDATION_MARKER_OWNER);
-			if (attrib == null) {
-				// owner not set
-				return null;
-			}
+			if (attrib == null)return null;
 			return attrib.toString();
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("InternalPreferenceManager.getValidator(IMarker)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
@@ -76,47 +59,30 @@
 	 * Return true if the given marker is a validation marker. Otherwise return false.
 	 */
 	public boolean isValidationMarker(IMarker marker) {
-		if (marker == null) {
-			return false;
-		}
+		if (marker == null)return false;
 
 		try {
 			return marker.getType().equals(VALIDATION_MARKER);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("InternalPreferenceManager.isValidationMarker(IMarker)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return false;
 		}
 	}
 
 	/**
-	 * This method is for use by the TVT Validation plugin ONLY!!! No code should access the
+	 * This method is for use by the TVT Validation plug-in ONLY!!! No code should access the
 	 * validation markers in the list directly except for the validation framework and the TVT
-	 * Validation plugin.
+	 * Validation plug-in.
 	 */
 	public void removeAllValidationMarkers(IProject project) {
-		if ((project == null) || (!project.isOpen())) {
-			return;
-		}
+		if ((project == null) || (!project.isOpen()))return;
 
 		try {
 			project.deleteMarkers(VALIDATION_MARKER, false, DEPTH_INFINITE); // false means only
 			// consider VALIDATION_MARKER, not variants of VALIDATION_MARKER. 
 			//Since addTask only adds VALIDATION_MARKER, we don't need to consider its subtypes.
-		} catch (CoreException exc) {
-			// Couldn't retrieve the markers from the resource for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("WorkbenchMonitor.removeAllValidationMarkers(IProject)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -124,12 +90,26 @@
 	 * This method returns the global preferences for the workspace.
 	 */
 	public GlobalConfiguration getGlobalConfiguration() throws InvocationTargetException {
-		IWorkspaceRoot root = ValidationConfiguration.getRoot();
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		GlobalConfiguration gp = null;
+		try {
+			gp = (GlobalConfiguration) root.getSessionProperty(USER_PREFERENCE);
+			if (gp == null)gp = getGlobalConfiguration(root);
+		} catch (CoreException exc) {
+			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{root.getName()}));
+		}
+		return gp;
+	}
+	
+	private synchronized GlobalConfiguration getGlobalConfiguration(IWorkspaceRoot root) throws InvocationTargetException {
 		GlobalConfiguration gp = null;
 		try {
 			gp = (GlobalConfiguration) root.getSessionProperty(USER_PREFERENCE);
 			if (gp == null) {
 				gp = new GlobalConfiguration(root);
+				PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+//				prefs.addPropertyChangeListener(gp);
+				
 				gp.getVersion(); // initialize the configuration's version attribute
 				gp.load(); // initialize this instance from the stored values
 				gp.passivate(); // store this instance as a property on the IResource
@@ -175,45 +155,36 @@
 
 	/**
 	 * The nature of the project has changed; update the enabled validators on the project.
+	 * 
+	 * @deprecated this method doesn't do anything.
 	 */
 	public void resetProjectNature(IProject project) throws InvocationTargetException {
-		resetProjectNature(getProjectConfiguration(project));
-	}
-
-	/**
-	 * When a project has been created for the first time, its natures may not have been complete at
-	 * the time that this Preference was recreated. Call this method to recalculate the vmds.
-	 */
-	protected void resetProjectNature(ProjectConfiguration prjp) throws InvocationTargetException {
-		prjp.resetProjectNature();
 	}
 
 	public void closing(IProject project) {
 		try {
 			if (isMigrated(project)) {
 				ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-				if(!prjp.useGlobalPreference())
-					prjp.store();
+				if(!prjp.useGlobalPreference())prjp.store();
 			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("InternalPreferenceManager::closing(" + project.getName() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
+	/**
+	 * @deprecated this method does not do anything.
+	 * @param project
+	 */
 	public void deleting(IProject project) {
 	}
 
+	/**
+	 * @deprecated this method does not do anything.
+	 * @param project
+	 */
 	public void opening(IProject project) {
 		// Do not load or migrate the project in this method; let the getConfiguration(IProject)
 		// method do that. Do not load the project before it's necessary.
@@ -224,9 +195,7 @@
 	 */
 	public boolean isGlobalMigrated() throws InvocationTargetException {
 		IWorkspaceRoot root = ValidationConfiguration.getRoot();
-		if (root == null) {
-			return false;
-		}
+		if (root == null)return false;
 
 		try {
 			GlobalConfiguration gp = (GlobalConfiguration) root.getSessionProperty(USER_PREFERENCE);
@@ -251,20 +220,17 @@
 	 * Return true if the given project has the current level of metadata, false otherwise.
 	 */
 	public boolean isMigrated(IProject project) throws InvocationTargetException {
-		if (project == null) {
-			return false;
-		}
+		if (project == null)return false;
+		
 		try {
 			if (project.isAccessible()) {
 				ProjectConfiguration prjp = (ProjectConfiguration) project.getSessionProperty(USER_PREFERENCE);
-				if (prjp != null) {
-					return prjp.isVersionCurrent();
-				}
+				if (prjp != null)return prjp.isVersionCurrent();
+				
 				String serializedPrjp = project.getPersistentProperty(USER_PREFERENCE);
 				if (serializedPrjp != null) {
 					prjp = new ProjectConfiguration(project);
-					prjp.getVersion(); // initialize the configuration's
-					// version attribute
+					prjp.getVersion(); 
 					return prjp.isVersionCurrent();
 				}
 			}
@@ -273,4 +239,18 @@
 		}
 		return false;
 	}
-}
\ No newline at end of file
+
+	/**
+	 * Answer the appropriate configuration based on whether the project has overridden the configuration
+	 * or not. If the project exists and is allowed to override the global configuration answer the
+	 * project configuration, otherwise answer the global configuration.
+	 * @param project it can be null
+	 */
+	public ValidationConfiguration getConfiguration(IProject project) throws InvocationTargetException {
+		if (project == null)return getGlobalConfiguration();
+		ProjectConfiguration pc = getProjectConfiguration(project);
+		if (pc != null && !pc.useGlobalPreference())return pc;
+		return getGlobalConfiguration();
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/EventManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/EventManager.java
index ab83e87..d603b8d 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/EventManager.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/EventManager.java
@@ -1,17 +1,18 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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.wst.validation.internal;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -23,9 +24,6 @@
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.UIContextDetermination;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
@@ -33,47 +31,70 @@
  * This class manages resource change events for the validation framework.
  */
 public class EventManager implements IResourceChangeListener {
-	private static EventManager _inst = null;
-	private boolean _shutdown = false; // false means that eclipse is not shutting down, and true
-	// means that it is shutting down. Used in two methods:
-	// shutdown(),and resourceChanged(IResourceChangeEvent)
-	private IResourceDeltaVisitor _postAutoBuildVisitor = null;
-	private boolean _isActive = false; // has the registry been read?
+	private static EventManager _inst;
+	
+	// false means that eclipse is not shutting down, and true means that it is shutting down. 
+	private boolean _shutdown; 
+
+	private IResourceDeltaVisitor _postAutoBuildVisitor;
+	private boolean _isActive; // has the registry been read?
+	
+	private Set<IProjectChangeListener> _listeners = new CopyOnWriteArraySet<IProjectChangeListener>();
 
 	private EventManager() {
-		super();
 	}
 
 	public static EventManager getManager() {
-		if (_inst == null) {
-			_inst = new EventManager();
-		}
+		if (_inst == null)_inst = new EventManager();
 		return _inst;
 	}
+	
+	public void addProjectChangeListener(IProjectChangeListener listener){
+		Tracing.log("EventManager-03: add listener: ", listener); //$NON-NLS-1$
+		_listeners.add(listener);
+	}
+	
+	public void removeProjectChangeListener(IProjectChangeListener listener){
+		_listeners.remove(listener);
+	}
+	
+	private void signal(IProject project, int type){
+		if (Tracing.isLogging()){
+			String name = "Null"; //$NON-NLS-1$
+			if (project != null)name = project.getName();
+			Tracing.log("EventManager-02: signal project: " + name + ", IProjectChangeListener type: " + type); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		for (IProjectChangeListener pcl : _listeners){
+			try {
+				pcl.projectChanged(project, type);
+			}
+			catch (Exception e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+		}
+	}
 
 	public void opening(IProject project) {
-		if (project == null || !ValidationPlugin.isActivated()) {
-			return;
-		}
+		if (project == null || !ValidationPlugin.isActivated())return;
+		
+		signal(project, IProjectChangeListener.ProjectOpened);
 
-		// When the project is opened, check for any orphaned tasks
-		// or tasks whose owners need to be updated.
-		ConfigurationManager.getManager().opening(project);
+		// When the project is opened, check for any orphaned tasks or tasks whose owners need to be updated.
+//		ConfigurationManager.getManager().opening(project);
 	}
 
 	public void closing(IProject project) {
-		if (project == null || !ValidationPlugin.isActivated()) {
-			return;
-		}
-
+		if (project == null || !ValidationPlugin.isActivated())return;
+		
+		signal(project, IProjectChangeListener.ProjectClosed);
+		
 		try {
 			boolean isMigrated = ConfigurationManager.getManager().isMigrated(project);
 			// If it's not migrated, then it hasn't been loaded, and we don't want to load the
-			// validator and its prerequisite plugins until they're needed.
+			// validator and its prerequisite plug-ins until they're needed.
 			if (isMigrated) {
 				ValidatorMetaData[] vmds = ConfigurationManager.getManager().getProjectConfiguration(project).getValidators();
-				for (int i = 0; i < vmds.length; i++) {
-					ValidatorMetaData vmd = vmds[i];
+				for (ValidatorMetaData vmd : vmds) {
 
 					if (!vmd.isActive()) {
 						// If this validator has not been activated, or if it has been shut down,
@@ -85,66 +106,39 @@
 					try {
 						helper = vmd.getHelper(project);
 						helper.closing();
-					} catch (InstantiationException exc) {
+					} catch (InstantiationException e) {
 						// Remove the vmd from the reader's list
 						ValidationRegistryReader.getReader().disableValidator(vmd);
 
-						// Log the reason for the disabled validator
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("EventManager::closing(IProject)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-
-						continue;
-					} catch (Throwable exc) {
+						ValidationPlugin.getPlugin().handleException(e);
+					} catch (Exception e) {
 						// If there is a problem with this particular helper, log the error and
-						// continue
-						// with the next validator.
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("EventManager::closing(IProject)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-						continue;
+						// continue with the next validator.
+						ValidationPlugin.getPlugin().handleException(e);
 					}
 				}
 
 				ConfigurationManager.getManager().closing(project);
 			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("EventManager::closing(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
 	public void deleting(IProject project) {
-		if (project == null) {
-			return;
-		}
+		if (project == null)return;
+		
+		signal(project, IProjectChangeListener.ProjectDeleted);
 
 		try {
 			boolean isMigrated = ConfigurationManager.getManager().isMigrated(project);
 			// If it's not migrated, then it hasn't been loaded, and we don't want to load the
-			// validator and its prerequisite plugins until they're needed.
+			// validator and its prerequisite plug-ins until they're needed.
 			if (isMigrated) {
 				ValidatorMetaData[] vmds = ConfigurationManager.getManager().getProjectConfiguration(project).getValidators();
-				for (int i = 0; i < vmds.length; i++) {
-					ValidatorMetaData vmd = vmds[i];
+				for (ValidatorMetaData vmd : vmds) {
 
 					if (!vmd.isActive()) {
 						// If this validator has not been activated, or if it has been shut down,
@@ -156,50 +150,26 @@
 					try {
 						helper = vmd.getHelper(project);
 						helper.deleting();
-					} catch (InstantiationException exc) {
+					} catch (InstantiationException e) {
 						// Remove the vmd from the reader's list
 						ValidationRegistryReader.getReader().disableValidator(vmd);
-
-						// Log the reason for the disabled validator
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("EventManager::deleting(IProject)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-
+						ValidationPlugin.getPlugin().handleException(e);
 						continue;
-					} catch (Throwable exc) {
+					} catch (Exception e) {
 						// If there is a problem with this particular helper, log the error and
-						// continue
-						// with the next validator.
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("EventManager::deleting(IProject)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
+						// continue with the next validator.
+						ValidationPlugin.getPlugin().handleException(e);
 						continue;
 					}
 				}
 
-				ConfigurationManager.getManager().deleting(project);
+//				ConfigurationManager.getManager().deleting(project);
 			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("EventManager::deleting(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
 		}
 	}
 
@@ -211,55 +181,33 @@
 		if (_postAutoBuildVisitor == null) {
 			_postAutoBuildVisitor = new IResourceDeltaVisitor() {
 				public boolean visit(IResourceDelta subdelta) throws CoreException {
-					if (subdelta == null)
-						return true;
+					if (subdelta == null)return false;
 
 					IResource resource = subdelta.getResource();
+					if (resource instanceof IWorkspaceRoot)return true;
 					if (resource instanceof IProject) {
 						IProject project = (IProject) resource;
 						if ((subdelta.getFlags() & IResourceDelta.DESCRIPTION) == IResourceDelta.DESCRIPTION) {
-							try {
-								ConfigurationManager.getManager().resetProjectNature(project); // flush
-								// existing
-								// "enabled
-								// validator"
-								// settings
-								// and
-								// reset
-								// to
-								// default
-							} catch (InvocationTargetException exc) {
-								Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-								if (logger.isLoggingLevel(Level.SEVERE)) {
-									LogEntry entry = ValidationPlugin.getLogEntry();
-									entry.setSourceIdentifier("EventManager::postAutoChange"); //$NON-NLS-1$
-									entry.setTargetException(exc);
-									logger.write(Level.SEVERE, entry);
-
-									if (exc.getTargetException() != null) {
-										entry.setTargetException(exc);
-										logger.write(Level.SEVERE, entry);
-									}
-								}
-							}
+							signal(project, IProjectChangeListener.ProjectChanged);
 							return false;
 						}
 
 						if ((subdelta.getFlags() & IResourceDelta.OPEN) == IResourceDelta.OPEN) {
 							if (project.isOpen()) {
 								// Project was just opened. If project.isOpen() had returned false,
-								// project
-								// would just have been closed.
+								// project would just have been closed.
 								opening(project);
 							}
-							// closing is called by PRE_CLOSE in resourceChanged
-							//							else {
-							//								closing(project);
-							//							}
+							return false;
+						}
+						
+						if ((subdelta.getFlags() & IResourceDelta.ADDED) == IResourceDelta.ADDED) {
+							signal(project, IProjectChangeListener.ProjectAdded);
+							return false;
 						}
 					}
 
-					return true;
+					return false;
 				}
 			};
 		}
@@ -267,7 +215,7 @@
 		try {
 			delta.accept(_postAutoBuildVisitor, true);
 		} catch (CoreException exc) {
-			exc.printStackTrace();
+			ValidationPlugin.getPlugin().handleException(exc);
 		}
 	}
 
@@ -279,50 +227,42 @@
 	 * @see IResource
 	 */
 	public void resourceChanged(IResourceChangeEvent event) {
-		if (_shutdown && (!isActive())) {
-			// If we're shutting down, and nothing has been activated, don't need to
-			// do anything.
+		if (_shutdown && !isActive()) {
+			// If we're shutting down, and nothing has been activated, don't need to do anything.
 			return;
 		}
 
-		/*
-		 * StringBuffer buffer = new StringBuffer(); buffer.append("IResourceChangeEvent type = ");
-		 * buffer.append(event.getType()); buffer.append(", resource = ");
-		 * buffer.append(event.getResource()); buffer.append(", source = ");
-		 * buffer.append(event.getSource()); buffer.append(", delta = ");
-		 * buffer.append(event.getDelta()); System.out.println(buffer.toString());
-		 */
-
+		if (Tracing.isLogging()){
+			Tracing.log("Eventmanager-01: IResourceChangeEvent type=" + //$NON-NLS-1$
+				Misc.resourceChangeEventType(event.getType()) + 
+				", resource=" +  //$NON-NLS-1$
+				event.getResource() + ", source=" + event.getSource() + ", delta=" +   //$NON-NLS-1$//$NON-NLS-2$
+				event.getDelta());				
+		}
+		
 		if (event.getSource() instanceof IWorkspace) {
-			if ((event.getType() == IResourceChangeEvent.PRE_DELETE) && (event.getResource() instanceof IProject)) {
+			boolean isProject = event.getResource() instanceof IProject;
+			if ((event.getType() == IResourceChangeEvent.PRE_DELETE) && isProject) {
 				deleting((IProject) event.getResource());
-			} else if ((event.getType() == IResourceChangeEvent.PRE_CLOSE) && (event.getResource() instanceof IProject)) {
+			} else if ((event.getType() == IResourceChangeEvent.PRE_CLOSE) && isProject) {
 				closing((IProject) event.getResource());
 			} else if (event.getType() == IResourceChangeEvent.POST_BUILD) {
 				postAutoChange(event.getDelta());
 			}
-
 		}
 	}
 
 	/**
 	 * Notifies this manager that the ValidationPlugin is shutting down. (Usually implies that
-	 * either the plugin could not load, or that the workbench is shutting down.)
-	 * 
+	 * either the plug-in could not load, or that the workbench is shutting down.)
+	 * <p>
 	 * The manager will then notify all active helpers of the shutdown, so that they may perform any
 	 * last-minute writes to disk, cleanup, etc.
 	 */
 	public void shutdown() {
 		try {
-			_shutdown = true; // resourceChanged(IResourceChangeEvent) needs to know when a shutdown
-			// has started.
-
-			/*
-			 * if( !isHeadless() && ConfigurationManager.getManager().isGlobalMigrated()) {
-			 * GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
-			 * gp.store(); // First, see if any validators are loaded. If none are, there is nothing
-			 * to // clean up. if(gp.numberOfValidators() == 0) { return; } }
-			 */
+			// resourceChanged(IResourceChangeEvent) needs to know when a shutdown has started.
+			_shutdown = true;
 
 			// If the validators are loaded, then for every project in the workbench,
 			// we must see if it has been loaded. If it has, every enabled IWorkbenchContext
@@ -332,9 +272,7 @@
 			IWorkspaceRoot workspaceRoot = workspace.getRoot();
 			IProject[] projects = workspaceRoot.getProjects();
 			ProjectConfiguration prjp = null;
-			IProject project = null;
-			for (int i = 0; i < projects.length; i++) {
-				project = projects[i];
+			for (IProject project : projects) {
 				if (!project.isOpen()) {
 					// If the project isn't opened, there's nothing to clean up.
 					// If the project was opened, it would have been migrated, and there's something
@@ -345,17 +283,12 @@
 				try {
 					boolean isMigrated = ConfigurationManager.getManager().isMigrated(project);
 					// If it's not migrated, then it hasn't been loaded, and we don't want to load
-					// the
-					// validator and its prerequisite plugins until they're needed.
+					// the validator and its prerequisite plug-ins until they're needed.
 					if (isMigrated) {
 						prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
-						//No need to save project level validation preferences at shutdown.b
-						//if(!prjp.useGlobalPreference())
-						//	prjp.store();
 
 						ValidatorMetaData[] vmdList = prjp.getEnabledValidators();
-						// if vmdList is null, IProject has never been loaded, so nothing to clean
-						// up
+						// if vmdList is null, IProject has never been loaded, so nothing to clean up
 						if (vmdList != null) {
 							for (int j = 0; j < vmdList.length; j++) {
 								ValidatorMetaData vmd = vmdList[j];
@@ -370,36 +303,28 @@
 								if (helper != null) {
 									try {
 										helper.shutdown();
-									} catch (Throwable exc) {
+									} catch (Exception exc) {
 										// Since we're shutting down, ignore the exception.
 									}
 								}
 							}
 						}
 					}
-				} catch (InvocationTargetException exc) {
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceIdentifier("EventManager::shutdown(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
+				} catch (InvocationTargetException e) {
+					ValidationPlugin.getPlugin().handleException(e);
+					if (e.getTargetException() != null)
+						ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-						if (exc.getTargetException() != null) {
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-					}
 				}
 			}
-		} catch (Throwable exc) {
+		} catch (Exception exc) {
 			// Since we're shutting down, ignore the exception.
 		}
 	}
 
 	public boolean isActive() {
 		// Have to use this convoluted technique for the shutdown problem.
-		// i.e., when eclipse is shut down, if validation plugin hasn't been loaded,
+		// i.e., when eclipse is shut down, if validation plug-in hasn't been loaded,
 		// the EventManager is activated for the first time, and it
 		// sends many exceptions to the .log. At first, I wrote a
 		// static method on ValidationRegistryReader, which returned true
@@ -421,12 +346,13 @@
 	}
 
 	/**
-	 * This method should be used to determine if the workbench is running in UI or Headless
+	 * This method should be used to determine if the workbench is running in UI or Headless.
+	 * 
+	 * @deprecated This plug-in no longer depends on jem. If you need this function use the jem
+	 * code directly.
 	 */
 	public static boolean isHeadless() {
-		boolean ret = UIContextDetermination.getCurrentContext() == UIContextDetermination.HEADLESS_CONTEXT;
-		return ret;
-		//return UIContextDetermination.getCurrentContext() ==
-		// UIContextDetermination.HEADLESS_CONTEXT;
+		//return UIContextDetermination.getCurrentContext() == UIContextDetermination.HEADLESS_CONTEXT;
+		return false;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/FilterUtil.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/FilterUtil.java
index 3a82813..39a36bc 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/FilterUtil.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/FilterUtil.java
@@ -1,23 +1,20 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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.wst.validation.internal;
 
 
-import java.text.MessageFormat;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
@@ -28,10 +25,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.core.IFileDelta;
 import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
 import org.eclipse.wst.validation.internal.operations.WorkbenchFileDelta;
@@ -45,9 +41,9 @@
 	private static VMDResourceVisitor _resourceVisitor = null;
 
 	private interface VMDRecorder {
-		public Map getResult();
+		public Map<ValidatorMetaData, Set<IFileDelta>> getResult();
 
-		public void setEnabledValidators(Set enabledValidators);
+		public void setEnabledValidators(Set<ValidatorMetaData> enabledValidators);
 
 		public void setProgressMonitor(IProgressMonitor monitor);
 
@@ -55,53 +51,40 @@
 	}
 
 	private interface VMDDeltaVisitor extends VMDRecorder, IResourceDeltaVisitor {
-		//constructor
 	}
 
 	private interface VMDResourceVisitor extends VMDRecorder, IResourceVisitor {
-		//constructor
 	}
 
-	/**
-	 * Don't let anyone create an instance of this class.
-	 */
 	private FilterUtil() {
-		//default
 	}
 
 	/**
 	 * Given a Set of enabled ValidatorMetaData, create a Map with each ValidatorMetaData as a key
 	 * with an associated null value.
 	 */
-	static Map wrapInMap(Set enabledValidators) {
-		Map result = new HashMap();
-		if ((enabledValidators == null) || (enabledValidators.size() == 0)) {
-			return result;
-		}
+	static Map<ValidatorMetaData, Set<IFileDelta>> wrapInMap(Set<ValidatorMetaData> enabledValidators) {
+		Map<ValidatorMetaData, Set<IFileDelta>> result = new HashMap<ValidatorMetaData, Set<IFileDelta>>();
+		if ((enabledValidators == null) || (enabledValidators.size() == 0))return result;
 
-		Iterator iterator = enabledValidators.iterator();
-		while (iterator.hasNext()) {
-			result.put(iterator.next(), null);
-		}
+		for (ValidatorMetaData vmd : enabledValidators)result.put(vmd, null);
 		return result;
 	}
 
 	static void checkCanceled(IProgressMonitor monitor) throws OperationCanceledException {
-		if (monitor == null) {
-			return;
-		} else if (monitor.isCanceled()) {
-			throw new OperationCanceledException(""); //$NON-NLS-1$
-		}
+		if (monitor == null)return;
+		else if (monitor.isCanceled())throw new OperationCanceledException(""); //$NON-NLS-1$
 	}
 
 	/**
 	 * Given a Map of VMD <=>Set(IFileDelta), either return the existing Set or create a Set and
 	 * return it.
 	 */
-	private static Set getResourceDeltas(Map enabledValidators, ValidatorMetaData vmd) {
-		Set fileDeltas = (Set) enabledValidators.get(vmd);
+	private static Set<IFileDelta> getResourceDeltas(Map<ValidatorMetaData, Set<IFileDelta>> enabledValidators, 
+			ValidatorMetaData vmd) {
+		Set<IFileDelta> fileDeltas = enabledValidators.get(vmd);
 		if (fileDeltas == null) {
-			fileDeltas = new HashSet();
+			fileDeltas = new HashSet<IFileDelta>();
 			enabledValidators.put(vmd, fileDeltas);
 		}
 		return fileDeltas;
@@ -168,8 +151,9 @@
 	 * Return the validators which are both configured on this type of project, (as stored in
 	 * getProject()), and enabled by the user on this project.
 	 */
-	static void addFileDelta(Map enabledValidators, ValidatorMetaData vmd, WorkbenchFileDelta fileDelta) {
-		Set fileDeltas = getResourceDeltas(enabledValidators, vmd);
+	static void addFileDelta(Map<ValidatorMetaData, Set<IFileDelta>> enabledValidators, 
+			ValidatorMetaData vmd, WorkbenchFileDelta fileDelta) {
+		Set<IFileDelta> fileDeltas = getResourceDeltas(enabledValidators, vmd);
 		fileDeltas.add(fileDelta);
 		enabledValidators.put(vmd, fileDeltas);
 	}
@@ -181,59 +165,43 @@
 	 * If filterIn is true, do not check if the resources are filtered in by the validator. If
 	 * filterIn is false, check if the resources are filtered in by the validator (recommended).
 	 */
-	public static Map getFileDeltas(Set enabledValidators, Object[] changedResources, boolean filterIn) {
-		return getFileDeltas(enabledValidators, changedResources, IFileDelta.CHANGED, filterIn); // by
-		// default,
-		// assume
-		// that
-		// the
-		// resources
-		// have
-		// changed,
-		// not
-		// added
-		// or
-		// deleted
+	public static Map<ValidatorMetaData, Set<IFileDelta>> 
+		getFileDeltas(Set<ValidatorMetaData> enabledValidators, Object[] changedResources, boolean filterIn) {
+		// by default assume that the resources have changed, i.e. not added or deleted
+		return getFileDeltas(enabledValidators, changedResources, IFileDelta.CHANGED, filterIn); 
 	}
 
 	/**
 	 * Return a Map wrapper, with each VMD from enabledValidators as the key, and the value a Set of
 	 * IFileDelta wrapper around the changed Object[], with each delta of type deltaType.
 	 */
-	public static Map getFileDeltas(Set enabledValidators, Object[] changedResources, int ifileDeltaType) {
-		return getFileDeltas(enabledValidators, changedResources, ifileDeltaType, false); // by
-		// default,
-		// check
-		// if the
-		// Object[]
-		// are
-		// filtered
-		// in by
-		// the
-		// validator
+	public static Map<ValidatorMetaData, Set<IFileDelta>> 
+		getFileDeltas(Set<ValidatorMetaData> enabledValidators, Object[] changedResources, int ifileDeltaType) {
+		// by default check if the Objects are filtered in by the validator
+		return getFileDeltas(enabledValidators, changedResources, ifileDeltaType, false); 
 	}
 
 	/**
 	 * Return a Map wrapper, with each VMD from enabledValidators as the key, and the value a Set of
 	 * IFileDelta wrapper around the changed Object[].
-	 * 
+	 * <p>
 	 * If "force" is true, then don't check if the object is filtered in by the validator or not.
 	 * ValidatorSubsetOperation can use validators that don't filter in these particular resources,
 	 * but can use a defaultExtension's validators instead.
 	 */
-	public static Map getFileDeltas(Set enabledValidators, Object[] changedResources, int ifileDeltaType, boolean force) {
-		Map result = new HashMap();
+	public static Map<ValidatorMetaData, Set<IFileDelta>> getFileDeltas(Set<ValidatorMetaData> enabledValidators, 
+		Object[] changedResources, int ifileDeltaType, boolean force) {
+		
+		Map<ValidatorMetaData, Set<IFileDelta>> result = new HashMap<ValidatorMetaData, Set<IFileDelta>>();
 		if ((enabledValidators == null) || (enabledValidators.size() == 0)) {
 			return result;
 		}
 
-		Iterator iterator = enabledValidators.iterator();
 		boolean cannotLoad = false;
 		IWorkbenchContext helper = null;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+		for (ValidatorMetaData vmd : enabledValidators) {
 			try {
-				Set deltas = new HashSet();
+				Set<IFileDelta> deltas = new HashSet<IFileDelta>();
 				IProgressMonitor monitor = new NullProgressMonitor();
 				for (int i = 0; i < changedResources.length; i++) {
 					Object obj = changedResources[i];
@@ -254,20 +222,12 @@
 					}
 				}
 				result.put(vmd, deltas);
-			} catch (InstantiationException exc) {
+			} catch (InstantiationException e) {
 				cannotLoad = true;
 
 				// Remove the vmd from the reader's list
 				ValidationRegistryReader.getReader().disableValidator(vmd);
-
-				// Log the reason for the disabled validator
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("FilterUtil::getFileDeltas(Set, Object[], int, boolean)"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				continue;
 			}
 
@@ -285,7 +245,6 @@
 			}
 		}
 
-
 		return result;
 	}
 
@@ -295,16 +254,11 @@
 		if (fileName == null) {
 			// The resource is not contained in the current project.
 			// Can't see how this would happen, but check for it anyway.
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("FilterUtil::getFileDelta(IWorkbenchContext, ValidatorMetaData, IResource, int)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NULL_NAME);
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NULL_NAME), new String[]{resource.getName(), vmd.getValidatorDisplayName()});
-				entry.setText(result);
-				//entry.setTokens(new String[]{resource.getName(), vmd.getValidatorDisplayName()});
-				logger.write(Level.SEVERE, entry);
-			}
+			
+			// [122960] null should be allowed
+//			String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NULL_NAME), 
+//				new Object[]{resource.getName(), vmd.getValidatorDisplayName()});
+//			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, result);
 
 			IPath resourcePath = resource.getFullPath();
 			if (resourcePath != null) {
@@ -312,12 +266,8 @@
 				// resource.
 				fileName = resourcePath.toString();
 			} else {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("FilterUtil::getFileDelta(IWorkbenchContext, ValidtaorMetaData, IResource, int)"); //$NON-NLS-1$
-					entry.setText("portableName is null and path is null for resource " + resource); //$NON-NLS-1$
-					logger.write(Level.SEVERE, entry);
-				}
+				ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, 
+					"portableName is null and path is null for resource " + resource); //$NON-NLS-1$
 				return null;
 			}
 		}
@@ -331,23 +281,15 @@
 	 * Add the IResource to the vmd's list of resources to validate. Return true if the add was
 	 * successful or false if the add was not successful.
 	 */
-	static boolean addToFileList(Map enabledValidators, IWorkbenchContext helper, ValidatorMetaData vmd, IResource resource, int resourceDelta, boolean isFullBuild) {
+	static boolean addToFileList(Map<ValidatorMetaData, Set<IFileDelta>> enabledValidators, IWorkbenchContext helper, ValidatorMetaData vmd, IResource resource, int resourceDelta, boolean isFullBuild) {
 		if ((vmd == null) || (resource == null)) {
 			return false;
 		}
 
 		try {
 			helper.registerResource(resource);
-		} catch (Throwable exc) {
-			// How to log this????
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("FilterUtil.addToFileList"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-
+		} catch (Exception exc) {
+			ValidationPlugin.getPlugin().handleException(exc);
 			InternalValidatorManager.getManager().addInternalErrorTask(resource.getProject(), vmd, exc);
 
 			// Don't return ... even though the register threw an exception, that's not to say
@@ -398,55 +340,50 @@
 	}
 
 	/**
-	 * Whether a full verification or a delta verification is in progress, both will call this
-	 * method to process the resource. This method calls the current Validator to filter the
-	 * resource (i.e., this method returns if the resource fails the filter test).
-	 * <code>process</code> also sends output to the <code>IProgressMonitor</code>, and calls
-	 * the current Validator to validate the resource.
-	 * 
-	 * To process a resource, there are several steps: 1. check if the resource is registered for
-	 * this validator (i.e., the validator has either specified it in a filter, or has not filtered
-	 * it out explicitly) 2. call <code>isValidationSource</code> on the current validator with
-	 * the current resource. This method performs further filtering by the Validator itself, in
-	 * addition to the static filtering done by the framework, based on the information in
-	 * plugin.xml. 3. If the resource passes both filters, call <code>validate</code> on the
-	 * validator, with the resource. 4. When complete (either by failing to pass a filter, or by the
-	 * completion of the <code>validate</code>), increment the IProgressMonitor's status by one
-	 * (i.e., one resource has been processed.)
+	 * Whether a full verification or a delta verification is in progress, both
+	 * will call this method to process the resource. This method calls the
+	 * current Validator to filter the resource (i.e., this method returns if
+	 * the resource fails the filter test). It also sends output to the
+	 * <code>IProgressMonitor</code>, and calls the current Validator to
+	 * validate the resource.
+	 * <p>
+	 * To process a resource, there are several steps:
+	 * <ol>
+	 * <li>Check if the resource is registered for this validator (i.e., the
+	 * validator has either specified it in a filter, or has not filtered it out
+	 * explicitly)
+	 * <li>Call <code>isValidationSource</code> on the current validator with
+	 * the current resource. This method performs further filtering by the
+	 * Validator itself, in addition to the static filtering done by the
+	 * framework, based on the information in the extension point.
+	 * <li>If the resource passes both filters, call <code>validate</code> on
+	 * the validator, with the resource.
+	 * <li>When complete (either by failing to pass a filter, or by the
+	 * completion of the <code>validate</code>), increment the
+	 * IProgressMonitor's status by one (i.e., one resource has been processed.)
+	 * </ol>
 	 */
-	static void filterOut(IProgressMonitor monitor, Map enabledValidators, IResource resource, int resourceDelta, boolean isFullBuild) {
-		if (monitor == null) {
-			return;
-		}
+	static void filterOut(IProgressMonitor monitor, Map<ValidatorMetaData, Set<IFileDelta>> enabledValidators, 
+		IResource resource, int resourceDelta, boolean isFullBuild) {
+		if (monitor == null)return;
 
 		checkCanceled(monitor);
 
-		Iterator iterator = enabledValidators.keySet().iterator();
 		boolean cannotLoad = false;
-		while (iterator.hasNext()) {
+		for (ValidatorMetaData vmd : enabledValidators.keySet()) {
 			checkCanceled(monitor);
 
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-
 			if (!filterOut(monitor, vmd, resource, resourceDelta)) {
 				try {
 					// Notify the helper that a resource is about to be filtered in
 					IWorkbenchContext helper = vmd.getHelper(resource.getProject());
 					addToFileList(enabledValidators, helper, vmd, resource, resourceDelta, isFullBuild);
-				} catch (InstantiationException exc) {
+				} catch (InstantiationException e) {
 					cannotLoad = true;
 
 					// Remove the vmd from the reader's list
 					ValidationRegistryReader.getReader().disableValidator(vmd);
-
-					// Log the reason for the disabled validator
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("FilterUtil::filterOut(IProgressMonitor, Map, IResource, int, boolean)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
+					ValidationPlugin.getPlugin().handleException(e);
 				}
 			}
 		}
@@ -487,12 +424,12 @@
 	 * completion of the <code>validate</code>), increment the IProgressMonitor's status by one
 	 * (i.e., one resource has been processed.)
 	 */
-	static void filterOut(IProgressMonitor monitor, Map enabledValidators, IResource resource, IResourceDelta delta) {
+	static void filterOut(IProgressMonitor monitor, Map<ValidatorMetaData, Set<IFileDelta>> enabledValidators, 
+			IResource resource, IResourceDelta delta) {
 		// filter in only resources which have been added, deleted, or its content changed.
 		// moves will be registered as an add & delete combination
-		if (filterOut(delta)) {
-			return;
-		}
+		if (filterOut(delta))return;
+		
 		filterOut(monitor, enabledValidators, resource, delta.getKind(), false); // false =
 		// incremental
 		// build
@@ -608,17 +545,17 @@
 		return true;
 	}
 
-	private static VMDResourceVisitor getResourceVisitor(IProgressMonitor monitor, Set enabledValidators) {
+	private static VMDResourceVisitor getResourceVisitor(IProgressMonitor monitor, Set<ValidatorMetaData> enabledValidators) {
 		if (_resourceVisitor == null) {
 			_resourceVisitor = new VMDResourceVisitor() {
-				private Map _vmdDeltas = null;
+				private Map<ValidatorMetaData, Set<IFileDelta>> _vmdDeltas = null;
 				private IProgressMonitor _progressMonitor = null;
 
-				public Map getResult() {
+				public Map<ValidatorMetaData, Set<IFileDelta>> getResult() {
 					return _vmdDeltas;
 				}
 
-				public void setEnabledValidators(Set validators) {
+				public void setEnabledValidators(Set<ValidatorMetaData> validators) {
 					_vmdDeltas = wrapInMap(validators);
 				}
 
@@ -635,12 +572,7 @@
 
 					// We don't need to filter out anything, because a full validation
 					// is about to be performed.
-					filterOut(getProgressMonitor(), _vmdDeltas, res, IResourceDelta.CHANGED, true); // true
-					// -
-					// this
-					// is a
-					// full
-					// build
+					filterOut(getProgressMonitor(), _vmdDeltas, res, IResourceDelta.CHANGED, true);
 
 					return true; // visit the resource's children as well
 				}
@@ -652,17 +584,17 @@
 		return _resourceVisitor;
 	}
 
-	private static VMDDeltaVisitor getDeltaVisitor(IProgressMonitor monitor, Set enabledValidators) {
+	private static VMDDeltaVisitor getDeltaVisitor(IProgressMonitor monitor, Set<ValidatorMetaData> enabledValidators) {
 		if (_deltaVisitor == null) {
 			_deltaVisitor = new VMDDeltaVisitor() {
-				private Map _vmdDeltas = null;
+				private Map<ValidatorMetaData, Set<IFileDelta>> _vmdDeltas = null;
 				private IProgressMonitor _progressMonitor = null;
 
-				public Map getResult() {
+				public Map<ValidatorMetaData, Set<IFileDelta>> getResult() {
 					return _vmdDeltas;
 				}
 
-				public void setEnabledValidators(Set validators) {
+				public void setEnabledValidators(Set<ValidatorMetaData> validators) {
 					_vmdDeltas = wrapInMap(validators);
 				}
 
@@ -681,24 +613,16 @@
 
 					IResource resource = subdelta.getResource();
 
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.FINEST)) {
-						StringBuffer buffer = new StringBuffer("subdelta of "); //$NON-NLS-1$
+					if (Tracing.isLogging(2)) {
+						StringBuffer buffer = new StringBuffer("FilterUtil-01: subdelta of "); //$NON-NLS-1$
 						buffer.append(resource.getName());
-						buffer.append(" is "); //$NON-NLS-1$
+						buffer.append(" has resource delta kind: "); //$NON-NLS-1$
 						buffer.append(subdelta.getKind());
-						buffer.append(" resource exists? "); //$NON-NLS-1$
+						buffer.append(" Does the resource exist? "); //$NON-NLS-1$
 						buffer.append(resource.exists());
-						buffer.append(" resource.isPhantom?"); //$NON-NLS-1$
+						buffer.append(" Is it a phantom? "); //$NON-NLS-1$
 						buffer.append(resource.isPhantom());
-
-						if (logger.isLoggingLevel(Level.FINEST)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("FilterUtil::visit(IResourceDelta)"); //$NON-NLS-1$
-							entry.setText(buffer.toString());
-							logger.write(Level.FINEST, entry);
-						}
-
+						Tracing.log(buffer);
 					}
 
 					// If the delta is an IProject, and the IProject is getting deleted or closed,
@@ -717,16 +641,18 @@
 		return _deltaVisitor;
 	}
 
-	public static Map loadDeltas(final IProgressMonitor monitor, final Set enabledValidators, IResourceDelta delta) throws CoreException {
+	public static Map<ValidatorMetaData, Set<IFileDelta>> loadDeltas(final IProgressMonitor monitor, 
+			final Set<ValidatorMetaData> enabledValidators,	IResourceDelta delta) throws CoreException {
 		VMDDeltaVisitor visitor = getDeltaVisitor(monitor, enabledValidators);
 		delta.accept(visitor, true); // true means include phantom resources
 		return visitor.getResult();
 	}
 
-	public static Map loadDeltas(final IProgressMonitor monitor, final Set enabledValidators, IProject project) throws CoreException {
+	public static Map<ValidatorMetaData, Set<IFileDelta>> loadDeltas(final IProgressMonitor monitor, 
+			final Set<ValidatorMetaData> enabledValidators,	IProject project) throws CoreException {
 		VMDResourceVisitor visitor = getResourceVisitor(monitor, enabledValidators);
 		project.accept(visitor, IResource.DEPTH_INFINITE, true); // true means include phantom
 		// resources
 		return visitor.getResult();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/GlobalConfiguration.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/GlobalConfiguration.java
index 3239cb0..20c044f 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/GlobalConfiguration.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/GlobalConfiguration.java
@@ -1,24 +1,21 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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.wst.validation.internal;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 
@@ -26,7 +23,7 @@
  * This class represents the global Preferences as set on the Validation Preferences page.
  */
 public class GlobalConfiguration extends ValidationConfiguration {
-	/* package */static final boolean PREF_PROJECTS_CAN_OVERRIDE_DEFAULT = true;
+	static final boolean PREF_PROJECTS_CAN_OVERRIDE_DEFAULT = true;
 	static final boolean PREF_SAVE_AUTOMATICALLY_DEFAULT = false;
 
 	private boolean _canProjectsOverride = getCanProjectsOverrideDefault();
@@ -38,14 +35,11 @@
 	public GlobalConfiguration(IWorkspaceRoot root) throws InvocationTargetException {
 		super(root, convertToArray(ValidationRegistryReader.getReader().getAllValidators()));
 
-		// Can't put the call to load() and passivate() in the ValidationConfiguration constructor
-		// due
+		// Can't put the call to load() and passivate() in the ValidationConfiguration constructor due
 		// to the order of initialization.
-		//    1. First the ValidationConfiguration constructor is called, and that loads the stored
-		// values.
+		//    1. First the ValidationConfiguration constructor is called, and that loads the stored values.
 		//    2. Then this class's <init> method is called, and that initializes the "override" field
-		// to the default,
-		//       which may be different than the stored value.
+		// 	  to the default, which may be different than the stored value.
 	}
 
 	/**
@@ -53,7 +47,7 @@
 	 * without persisting them (i.e., if the user presses Cancel then nothing needs to be done.)
 	 */
 	public GlobalConfiguration(GlobalConfiguration original) throws InvocationTargetException {
-		super();
+		super(original.getResource());
 		original.copyTo(this);
 	}
 
@@ -80,7 +74,7 @@
 		setEnabledBuildValidators(getBuildEnabledValidators());
 		setCanProjectsOverride(getCanProjectsOverrideDefault());
 		setSaveAutomatically(getSaveAutomaticallyDefault());
-    setDefaultDelegates(getValidators());
+		setDefaultDelegates(getValidators());
 	}
 
 	/**
@@ -98,15 +92,9 @@
 			// job is done. Nothing to migrate.
 			return null;
 
-		} catch (CoreException exc) {
+		} catch (CoreException e) {
 			// Can't find the IMarker? Assume it's deleted.
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("GlobalConfiguration.getMarker()"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
@@ -126,7 +114,7 @@
 
 			IMarker rootMarker = marker[0]; // getMarker() has already checked that there's a marker
 			// in the array
-			ValidatorMetaData[] enabledValidators = null;
+//			ValidatorMetaData[] enabledValidators = null;
 //			String enabledValidatorsString = (String) getValue(rootMarker, ConfigurationConstants.ENABLED_VALIDATORS);
 //			if (enabledValidatorsString == null) {
 //				enabledValidators = ConfigurationConstants.DEFAULT_ENABLED_VALIDATORS;
@@ -139,18 +127,12 @@
 			setEnabledManualValidators(getStringAsEnabledElementsArray(enabledManualValidators));
 			String enabledBuildValidators = (String) getValue(rootMarker, ConfigurationConstants.ENABLED_BUILD_VALIDATORS);
 			setEnabledManualValidators(getStringAsEnabledElementsArray(enabledBuildValidators));
-			if (enabledManualValidators.equals(null) || enabledBuildValidators.equals(null)) 
-				enabledValidators = ConfigurationConstants.DEFAULT_ENABLED_VALIDATORS;
+//			if (enabledManualValidators.equals(null) || enabledBuildValidators.equals(null)) 
+//				enabledValidators = ConfigurationConstants.DEFAULT_ENABLED_VALIDATORS;
 			setCanProjectsOverride(getValue(rootMarker, ConfigurationConstants.PREF_PROJECTS_CAN_OVERRIDE, PREF_PROJECTS_CAN_OVERRIDE_DEFAULT));
 			root.getWorkspace().deleteMarkers(marker);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("GlobalConfiguration.loadV50"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -212,4 +194,4 @@
 	}
 
 	
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IProjectValidationHelper.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IProjectValidationHelper.java
index f22df4f..959988e 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IProjectValidationHelper.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/IProjectValidationHelper.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -13,6 +13,9 @@
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IProject;
 
+/**
+ * ValidatorHelper extensions must implement this interface.
+ */
 public interface IProjectValidationHelper {
 	
 	public IContainer[] getOutputContainers(IProject project);
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/InternalValidatorManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/InternalValidatorManager.java
index 07d3845..5f9dba8 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/InternalValidatorManager.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/InternalValidatorManager.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -14,24 +14,18 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.core.Message;
 import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 
-/**
- */
 public final class InternalValidatorManager {
 	private static InternalValidatorManager _inst = null;
 	private static final String OP_GROUP = "ValidationOperation"; //$NON-NLS-1$ // when the ValidationOperation
@@ -59,15 +53,11 @@
 	/**
 	 * Return a new Set that contains all of the elements from the array.
 	 */
-	public static Set wrapInSet(Object[] obj) {
-		Set result = new HashSet();
-		if ((obj == null) || (obj.length == 0)) {
-			return result;
-		}
+	public static Set<ValidatorMetaData> wrapInSet(ValidatorMetaData[] vmds) {
+		Set<ValidatorMetaData> result = new HashSet<ValidatorMetaData>();
+		if ((vmds == null) || (vmds.length == 0))return result;
 
-		for (int i = 0; i < obj.length; i++) {
-			result.add(obj[i]);
-		}
+		for (ValidatorMetaData vmd : vmds)result.add(vmd);
 
 		return result;
 	}
@@ -113,11 +103,10 @@
 	 * Return an array of the fully-qualified names of the validator classes.
 	 */
 	public String[] getValidatorNames(ValidatorMetaData[] vmds) {
-		Set temp = new HashSet();
-		for (int i = 0; i < vmds.length; i++) {
-			String[] names = vmds[i].getValidatorNames();
-			for (int j = 0; j < names.length; j++) {
-				temp.add(names[j]);
+		Set<String> temp = new HashSet<String>();
+		for (ValidatorMetaData vmd : vmds) {
+			for (String name : vmd.getValidatorNames()) {
+				temp.add(name);
 			}
 		}
 
@@ -129,14 +118,11 @@
 	/**
 	 * Return an array of the fully-qualified names of the validator classes.
 	 */
-	public String[] getValidatorNames(Collection vmds) {
-		Set temp = new HashSet();
-		Iterator iterator = vmds.iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			String[] names = vmd.getValidatorNames();
-			for (int j = 0; j < names.length; j++) {
-				temp.add(names[j]);
+	public String[] getValidatorNames(Collection<ValidatorMetaData> vmds) {
+		Set<String> temp = new HashSet<String>();
+		for (ValidatorMetaData vmd : vmds) {
+			for (String name : vmd.getValidatorNames()) {
+				temp.add(name);
 			}
 		}
 
@@ -174,19 +160,10 @@
 			ValidatorMetaData[] result = new ValidatorMetaData[count];
 			System.arraycopy(temp, 0, result, 0, count);
 			return result;
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("InternalValidatorManager::getValidatorsForExtension(" + project.getName() + ", " + fileExtension + ")"); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return new ValidatorMetaData[0];
 		}
 	}
@@ -203,4 +180,4 @@
 		}
 		return names;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ProjectConfiguration.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ProjectConfiguration.java
index 105d838..5f39ecf 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ProjectConfiguration.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ProjectConfiguration.java
@@ -1,42 +1,40 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 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.wst.validation.internal;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.HashSet;
 import java.util.Map;
-import java.util.logging.Level;
+import java.util.Set;
+import java.util.StringTokenizer;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ProjectScope;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IScopeContext;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegateDescriptor;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.osgi.service.prefs.BackingStoreException;
 
-
 /**
  * This class represents the Project Preferences as set on the Project's Validation Properties page.
  */
 public class ProjectConfiguration extends ValidationConfiguration {
-	/* package */static final boolean PRJ_OVERRIDEGLOBAL_DEFAULT = false; // If the user has never
-	// set
-	// a preference before, this
-	// is the override default
-	// (on)
+	
+	/** false - If the user has never set a preference before, this is the override default */
+	static final boolean PRJ_OVERRIDEGLOBAL_DEFAULT = false;
+	
+	/** default_value - the configuration is using the defaults. */
+	private static final String DefaultValue = "default_value"; //$NON-NLS-1$
+	
 	private boolean _doesProjectOverride = getDoesProjectOverrideDefault();
 
 	/**
@@ -47,22 +45,21 @@
 		// global list.
 		super(project, extractProjectValidators(convertToArray(ValidationRegistryReader.getReader().getAllValidators()), project));
 
-		// Can't put the call to load() and passivate() in the ValidationConfiguration constructor
-		// due
+		// Can't put the call to load() and passivate() in the ValidationConfiguration constructor due
 		// to the order of initialization.
-		//    1. First the ValidationConfiguration constructor is called, and that loads the stored
-		// values.
+		//    1. First the ValidationConfiguration constructor is called, and that loads the stored values.
 		//    2. Then this class's <init> method is called, and that initializes the "override" field
-		// to the default,
-		//       which may be different than the stored value.
+		//       to the default, which may be different than the stored value.
 	}
 
 	/**
 	 * This constructor is provided only for the Properties page, so that the page can store values
 	 * without persisting them (i.e., if the user presses Cancel then nothing needs to be done.)
+	 * 
+	 * @deprecated
 	 */
 	public ProjectConfiguration(ProjectConfiguration original) throws InvocationTargetException {
-		super();
+		super(original.getResource());
 		original.copyTo(this);
 	}
 
@@ -84,17 +81,15 @@
 			// If the project overrides, then don't use the global.
 			// If the project does not override, use the global.
 			return !_doesProjectOverride;
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ProjectConfiguration.userGlobalPreference"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return false;
 		}
 	}
+	
+	public boolean getDoesProjectOverride(){
+		return _doesProjectOverride;
+	}
 
 	public boolean doesProjectOverride() {
 		// If the global preference doesn't allow projects to override, it doesn't matter what the
@@ -152,11 +147,7 @@
 		return super.getValidators();
 	}
 
-	/*
-   * (non-Javadoc)
-   * @see org.eclipse.wst.validation.internal.ValidationConfiguration#getDelegatingValidators()
-	 */
-  public Map getDelegatingValidators() throws InvocationTargetException {
+  public Map<String,String> getDelegatingValidators() throws InvocationTargetException {
     if (useGlobalPreference()) {
       return ConfigurationManager.getManager().getGlobalConfiguration().getDelegatingValidators();
     }
@@ -283,7 +274,7 @@
 
 		setEnabledManualValidators(gp.getManualEnabledValidators());
 		setEnabledBuildValidators(gp.getBuildEnabledValidators());
-    setDelegatingValidators(gp.getDelegatingValidators());
+		setDelegatingValidators(gp.getDelegatingValidators());
 		
 		// except for this field, which is unique to the project preferences
 		setDoesProjectOverride(getDoesProjectOverrideDefault());
@@ -294,12 +285,14 @@
 		GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
 		setEnabledManualValidators(gp.getManualEnabledValidators());
 		setEnabledBuildValidators(gp.getBuildEnabledValidators());
-    setDelegatingValidators(gp.getDelegatingValidators());
+		setDelegatingValidators(gp.getDelegatingValidators());
 	}
 
 	/**
 	 * The project's nature has changed, so recalculate the validators that are configured on the
 	 * project, and reset the values of the project to the default.
+	 * 
+	 * @deprecated this method doesn't do anything
 	 */
 	public void resetProjectNature() {
 		/*
@@ -333,15 +326,8 @@
 			}
 			// Job is done. Nothing to migrate.
 			return null;
-		} catch (CoreException exc) {
-			// Can't find the IMarker? Assume it's deleted.
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ProjectConfiguration::getMarker"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
@@ -364,7 +350,7 @@
 
 			IMarker prjMarker = marker[0]; // getProjectMarker() has already checked that there's a
 			// marker in the array
-			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
+//			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
 
 //			String enabledValStr = (String) getValue(prjMarker, ConfigurationConstants.ENABLED_VALIDATORS);
 //			ValidatorMetaData[] enabledVal = null;
@@ -379,10 +365,11 @@
 			ValidatorMetaData[] enabledBuildVal = null;
 			String enabledManualValStr = (String) getValue(prjMarker, ConfigurationConstants.ENABLED_MANUAL_VALIDATORS);
 			String enabledBuildValStr = (String) getValue(prjMarker, ConfigurationConstants.ENABLED_BUILD_VALIDATORS);
-			ValidatorMetaData[] enabledVal = null;
-			if (enabledManualValStr.equals(null) || enabledBuildValStr.equals(null)) {
-				enabledVal = gp.getEnabledValidators();
-			} else {
+//			ValidatorMetaData[] enabledVal = null;
+//			if (enabledManualValStr.equals(null) || enabledBuildValStr.equals(null)) {
+//				enabledVal = gp.getEnabledValidators();
+//			} else {
+			if (!enabledManualValStr.equals(null) && !enabledBuildValStr.equals(null)) {
 				enabledManaualVal = getStringAsEnabledElementsArray(enabledManualValStr);
 				setEnabledManualValidators(enabledManaualVal);
 				enabledBuildVal = getStringAsEnabledElementsArray(enabledManualValStr);
@@ -402,25 +389,12 @@
 			} else {
 				setDoesProjectOverride(boolVal.booleanValue());
 			}
-			boolean override = doesProjectOverride();
 
 			getResource().getWorkspace().deleteMarkers(marker);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ProjectConfiguration.loadMarker "); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ProjectConfiguration.loadMarker InvocationTargetException"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -472,10 +446,7 @@
 		if (allow) {
 			// "allow" has changed, so see if the preference and the project validators match.
 			ValidatorMetaData[] projEnabledVmd = super.getEnabledValidators(); // bypass the check
-			// for whether the
-			// global preferences
-			// are to be used or
-			// not
+			// for whether the global preferences are to be used or not
 			GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
 			return gp.hasEnabledValidatorsChanged(projEnabledVmd);
 		}
@@ -483,14 +454,14 @@
 		return false;
 	}
 
-  public boolean haveDelegatesChanged(Map oldDelegates, boolean allow) throws InvocationTargetException {
+  public boolean haveDelegatesChanged(Map<String, String> oldDelegates, boolean allow) throws InvocationTargetException {
 
     if (super.haveDelegatesChanged(oldDelegates)) {
       return true;
     }
 
     if (allow) {
-      Map projDelegates = super.getDelegatingValidators(); 
+      Map<String, String> projDelegates = super.getDelegatingValidators(); 
       GlobalConfiguration gp = ConfigurationManager.getManager().getGlobalConfiguration();
       return gp.haveDelegatesChanged(projDelegates);
     }
@@ -499,11 +470,8 @@
   }
 
 
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#deserialize(String)
-	 */
 	public void deserialize(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 			resetToDefault();
 		} else if (storedConfiguration != null) {
 			int prjOverrideIndex = storedConfiguration.indexOf(ConfigurationConstants.PRJ_OVERRIDEGLOBAL);
@@ -513,7 +481,7 @@
 				String disableAllValidation = storedConfiguration.substring(disableAllValidationIndex + ConfigurationConstants.DISABLE_ALL_VALIDATION_SETTING.length(), versionIndex);
 				setDisableAllValidation(Boolean.valueOf(disableAllValidation).booleanValue());
 			} else {
-				setDisableAllValidation(false);;
+				setDisableAllValidation(false);
 			}
 			// project doesn't override the global
 			if (disableAllValidationIndex != -1) {
@@ -523,9 +491,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#serialize()
-	 */
 	public String serialize() throws InvocationTargetException {
 		StringBuffer buffer = new StringBuffer();
 		buffer.append(ConfigurationConstants.PRJ_OVERRIDEGLOBAL);
@@ -537,11 +502,6 @@
 		return buffer.toString();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.validation.internal.operations.internal.attribute.ValidationConfiguration#getEnabledFullBuildValidators(boolean)
-	 */
 	public ValidatorMetaData[] getEnabledFullBuildValidators(boolean fullBuild) throws InvocationTargetException {
 		if (useGlobalPreference()) {
 			return extractProjectValidators(ConfigurationManager.getManager().getGlobalConfiguration().getEnabledFullBuildValidators(fullBuild), getResource());
@@ -625,35 +585,75 @@
   
   public void store() throws InvocationTargetException {
 		IProject project = (IProject) getResource();
-		IScopeContext projectContext = new ProjectScope((IProject) getResource());
-		final IEclipsePreferences pref = projectContext.getNode(ValidationPlugin.PLUGIN_ID);
+		final PreferencesWrapper pref = PreferencesWrapper.getPreferences(project, null);
 		if (pref != null) {
 			try {
-				pref.put(USER_PREFERENCE, serialize());
-				pref.put(USER_MANUAL_PREFERENCE, serializeManualSetting());
-				pref.put(USER_BUILD_PREFERENCE, serializeBuildSetting());
-				pref.put(DELEGATES_PREFERENCE, serializeDelegatesSetting());
+				pref.put(ValidationConfiguration.UserPreference, serialize());
+				pref.put(ValidationConfiguration.UserManualPreference, serializeManualSetting());
+				pref.put(ValidationConfiguration.UserBuildPreference, serializeBuildSetting());
+				pref.put(ValidationConfiguration.DelegatesPreference, serializeDelegatesSetting());
 				pref.flush();
-			} catch (BackingStoreException bse) {
-				Logger.getLogger().log(bse);
+			} catch (BackingStoreException e) {
+				// A common error is that the project has been closed, in which case there
+				// is nothing that we can do.
+				if (project.isAccessible())ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 	}
   
   protected void loadPreference() throws InvocationTargetException {
 		IProject project = (IProject) getResource();
-		IScopeContext projectContext = new ProjectScope(project);
-		final IEclipsePreferences prefs = projectContext.getNode(ValidationPlugin.PLUGIN_ID);
-		if (prefs != null) {
-			String projectName = project.getName();
-			String storedConfig = prefs.get(USER_PREFERENCE,"default_value");
+		final PreferencesWrapper prefs = PreferencesWrapper.getPreferences(project, null);
+		if (prefs.nodeExists()) { 
+			String storedConfig = prefs.get(ValidationConfiguration.UserPreference, DefaultValue);
 			deserialize(storedConfig);
-			String storedManualConfig = prefs.get(USER_MANUAL_PREFERENCE,"default_value");
+			String storedManualConfig = prefs.get(ValidationConfiguration.UserManualPreference, DefaultValue);
 			deserializeManual(storedManualConfig);
-			String storedBuildConfig = prefs.get(USER_BUILD_PREFERENCE,"default_value");
+			String storedBuildConfig = prefs.get(ValidationConfiguration.UserBuildPreference, DefaultValue);
 			deserializeBuild(storedBuildConfig);
-			String storedDelegatesConfiguration = prefs.get(DELEGATES_PREFERENCE,"default_value");
+			String storedDelegatesConfiguration = prefs.get(ValidationConfiguration.DelegatesPreference, DefaultValue);
 			deserializeDelegates(storedDelegatesConfiguration);
 		}
 	}
-}
\ No newline at end of file
+  
+  /**
+   * Answer the validator id's that have been enabled for manual validation.
+   * @return null if they are all enabled
+   */
+  Set<String> getEnabledManualValidators(){
+	  return getIds(ValidationConfiguration.UserManualPreference, ConfigurationConstants.ENABLED_MANUAL_VALIDATORS);
+  }
+  
+  /**
+   * Answer the validator id's that have been enabled for build validation.
+   * @return null if they are all enabled
+   */
+  Set<String> getEnabledBuildlValidators(){
+	  return getIds(ValidationConfiguration.UserBuildPreference, ConfigurationConstants.ENABLED_BUILD_VALIDATORS);
+  }
+  
+  /**
+   * A helper method to extract some validator id's from a preference store field.
+   * 
+   * @return null if all the validators are enabled.
+   */
+  private Set<String> getIds(String prefKey, String enabledPhrase){
+	IProject project = (IProject) getResource();
+	final PreferencesWrapper prefs = PreferencesWrapper.getPreferences(project, null);
+	if (prefs == null)return null;
+	
+	String storedConfig = prefs.get(prefKey, DefaultValue);
+	if (storedConfig == null || storedConfig.length() == 0 || storedConfig.equals(DefaultValue))return null;
+	int validationIndex = storedConfig.indexOf(enabledPhrase);
+
+	String ids = storedConfig.substring(validationIndex + enabledPhrase.length(),storedConfig.length());
+
+	StringTokenizer tokenizer = new StringTokenizer(ids, ConfigurationConstants.ELEMENT_SEPARATOR);
+	Set<String> set = new HashSet<String>(20);
+	while (tokenizer.hasMoreTokens())set.add(tokenizer.nextToken());
+	if (set.size() == 0)return null;
+	  
+	return set;
+	  
+  }
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorExtension.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorExtension.java
index 9927fd4..d638d0a 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorExtension.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorExtension.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -17,28 +17,30 @@
 package org.eclipse.wst.validation.internal;
 
 import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.operations.ReferencialFileValidator;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 /**
  * @author vijayb
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
  */
 public class ReferencialFileValidatorExtension {
 	private String id = null;
 	private ReferencialFileValidator instance;
 	private boolean errorCondition = false;
 	private IConfigurationElement element;
+	
+	/** referencialFileValidator */
 	public static final String REF_FILE_VALIDATOR_EXTENSION = "referencialFileValidator"; //$NON-NLS-1$
+	
+	/** run */
 	public static final String RUN = "run"; //$NON-NLS-1$
+	
+	/** id */
 	public static final String ATT_ID = "id"; //$NON-NLS-1$
+	
+	/** class */
 	public static final String ATT_CLASS = "class"; //$NON-NLS-1$
 
-	/**
-	 *  
-	 */
 	public ReferencialFileValidatorExtension() {
 		super();
 	}
@@ -46,9 +48,9 @@
 	public ReferencialFileValidator getInstance() {
 		try {
 			if (instance == null && !errorCondition)
-				instance = (ReferencialFileValidator) element.createExecutableExtension("run"); //$NON-NLS-1$
-		} catch (Throwable e) {
-			Logger.getLogger().logError(e);
+				instance = (ReferencialFileValidator) element.createExecutableExtension(RUN);
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			errorCondition = true;
 		}
 		return instance;
@@ -83,4 +85,4 @@
 	public void setId(String id) {
 		this.id = id;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorRegistryReader.java
index 59f803a..c9233ef 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorRegistryReader.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ReferencialFileValidatorRegistryReader.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -17,32 +17,60 @@
 package org.eclipse.wst.validation.internal;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.wst.validation.internal.operations.ReferencialFileValidator;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 /**
  * @author vijayb
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
  */
-public class ReferencialFileValidatorRegistryReader extends RegistryReader {
-	static ReferencialFileValidatorRegistryReader instance = null;
-	protected List referencialFileValidationExtensions;
+public class ReferencialFileValidatorRegistryReader {
+	static ReferencialFileValidatorRegistryReader instance;
+	
+	private static final String Id = "id"; //$NON-NLS-1$
+	private static final String ExtensionPoint = "referencialFileValidator"; //$NON-NLS-1$
+	
+	protected List<ReferencialFileValidatorExtension> referencialFileValidationExtensions;
 
-	/**
-	 * @param arg0
-	 * @param arg1
-	 * @param arg2
-	 */
 	public ReferencialFileValidatorRegistryReader() {
-		super(ValidationPlugin.PLUGIN_ID, "referencialFileValidator"); //$NON-NLS-1$
 	}
+	
+	/**
+	 * Read the extension point and parse it.
+	 */
+	public void readRegistry() {
+		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(Id, ExtensionPoint);
+		if (point == null)return;
+		IConfigurationElement[] elements = point.getConfigurationElements();
+		for (int i = 0; i < elements.length; i++) {
+			internalReadElement(elements[i]);
+		}
+	}
+	
+	private void internalReadElement(IConfigurationElement element) {
+		boolean recognized = this.readElement(element);
+		if (!recognized) {
+			logError(element, "Error processing extension: " + element); //$NON-NLS-1$
+		}
+	}
+
+	/*
+	 * Logs the error in the desktop log using the provided text and the information in the configuration element.
+	 */
+	protected void logError(IConfigurationElement element, String text) {
+		IExtension extension = element.getDeclaringExtension();
+		StringBuffer buf = new StringBuffer();
+		buf.append("Plugin " + extension.getContributor().getName() + ", extension " + extension.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
+		buf.append("\n" + text); //$NON-NLS-1$
+		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, buf.toString());
+	}
+
 
 	/*
 	 * (non-Javadoc)
@@ -60,19 +88,15 @@
 	/**
 	 * Sets the extension point.
 	 * 
-	 * @param extensions
+	 * @param newExtension
 	 *            The extensions to set
 	 */
 	protected void addExtension(IConfigurationElement newExtension) {
 
-    	//add to the list of post validator extesions only if the ext is not added yet
+    	//add to the list of post validator extensions only if the extension is not added yet
     	boolean containsExt = true;
-    	List extensions = getReferencialFileValidationExtensions();
-    	Iterator it = extensions.iterator();
-    	while(it.hasNext()) {
-    		ReferencialFileValidatorExtension ext = (ReferencialFileValidatorExtension)it.next();
-    		if(!ext.getElement().getAttribute("id").equals(newExtension.getAttribute("id")))
-    			containsExt = false;
+    	for(ReferencialFileValidatorExtension ext : getReferencialFileValidationExtensions()) {
+    		if(!ext.getElement().getAttribute(Id).equals(newExtension.getAttribute(Id)))containsExt = false;
     	}
     	if(!containsExt ||getReferencialFileValidationExtensions().isEmpty())
     		getReferencialFileValidationExtensions().add(new ReferencialFileValidatorExtension(newExtension));
@@ -83,12 +107,12 @@
 	/**
 	 * Sets the extension point.
 	 * 
-	 * @param extensions
+	 * @param newExtension
 	 *            The extensions to set
 	 */
 	protected void addExtensionPoint(ReferencialFileValidatorExtension newExtension) {
 		if (referencialFileValidationExtensions == null)
-			referencialFileValidationExtensions = new ArrayList();
+			referencialFileValidationExtensions = new ArrayList<ReferencialFileValidatorExtension>();
 		referencialFileValidationExtensions.add(newExtension);
 	}
 
@@ -97,18 +121,14 @@
 	 *         available and enabled
 	 */
 	public ReferencialFileValidator getReferencialFileValidator() {
-		ReferencialFileValidatorExtension refFileValExt;
-		for (Iterator refFileValItr = getReferencialFileValidationExtensions().iterator(); refFileValItr.hasNext();) {
-			refFileValExt = (ReferencialFileValidatorExtension) refFileValItr.next();
+		for (ReferencialFileValidatorExtension refFileValExt: getReferencialFileValidationExtensions()) {
 			return refFileValExt.getInstance();
 		}
 		return null;
 	}
 
 	/**
-	 * Gets the instance.
-	 * 
-	 * @return Returns a EJBCodegenHandlerExtensionReader
+	 * Gets the singleton instance.
 	 */
 	public static ReferencialFileValidatorRegistryReader getInstance() {
 		if (instance == null) {
@@ -121,10 +141,10 @@
 	/**
 	 * @return Returns the handlerExtensions.
 	 */
-	protected List getReferencialFileValidationExtensions() {
+	protected List<ReferencialFileValidatorExtension> getReferencialFileValidationExtensions() {
 		if (referencialFileValidationExtensions == null)
-			referencialFileValidationExtensions = new ArrayList();
+			referencialFileValidationExtensions = new ArrayList<ReferencialFileValidatorExtension>();
 		return referencialFileValidationExtensions;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/RegistryConstants.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/RegistryConstants.java
index ee6e106..81a78b4 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/RegistryConstants.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/RegistryConstants.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -19,55 +19,122 @@
  * Validation constants needed to declare an extension point, and to implement an extension.
  */
 public interface RegistryConstants {
-	public static final String PLUGIN_ID = ValidationPlugin.PLUGIN_ID;
-	public static final String VALIDATOR_EXT_PT_ID = "validator"; //$NON-NLS-1$ // extension point declaration of the validator
+	String PLUGIN_ID = ValidationPlugin.PLUGIN_ID;
+	
+	/** validator - extension point declaration of the validator */
+	String VALIDATOR_EXT_PT_ID = "validator"; //$NON-NLS-1$
 
-	/* package */static final String TAG_RUN_CLASS = "run"; //$NON-NLS-1$ // identifies the Validator class
-	/* package */static final String TAG_FILTER = "filter"; //$NON-NLS-1$ // identifies a filter -- type and/or name -- used to filter out resources which are not to be validated. (i.e., if the resource doesn't pass this filter test, don't validate it.)
-	/* package */static final String TAG_HELPER_CLASS = "helper"; //$NON-NLS-1$ // IValidationContext which loads the MOF model for the IValidator
-	/* package */static final String TAG_PROJECT_NATURE = "projectNature"; //$NON-NLS-1$ // identifies the projects which the validator should run on
-	/* package */static final String TAG_AGGREGATE_VALIDATORS = "aggregateValidator"; //$NON-NLS-1$ // identifies a validator(s) which this validator aggregates. This value is used to remove all messages owned by a particular validator. Aggregate validators cannot be shared. Only one validator may use an aggregate of that type.
+	/** run - identifies the Validator class */
+	String TAG_RUN_CLASS = "run"; //$NON-NLS-1$
+	
+	/** 
+	 * filter - identifies a filter -- type and/or name -- used to filter out resources which are
+	 * not to be validated. (i.e., if the resource doesn't pass this filter test, don't validate it.) 
+	 */ 
+	String TAG_FILTER = "filter"; //$NON-NLS-1$
+	
+	/**
+	 * identifies a filter -- type and/or name -- used to filter out resources which are not to be validated. (i.e., if the resource doesn't pass this filter test, don't validate it.)
+	 */
+	String TAG_CONTENTTYPE = "contentTypeBinding"; //$NON-NLS-1$ 
+	
+	/**
+	 *  identifies a type
+	 */
+	String ATT_CONTENTTYPEID = "contentTypeId"; //$NON-NLS-1$ 
+	/** helper - IValidationContext which loads the MOF model for the IValidator */ 
+	String TAG_HELPER_CLASS = "helper"; //$NON-NLS-1$
+	
+	/** projectNature - identifies the projects which the validator should run on */
+	String TAG_PROJECT_NATURE = "projectNature"; //$NON-NLS-1$
+	
+	/** 
+	 * aggregateValidator - identifies a validator(s) which this validator aggregates. This value is used 
+	 * to remove all messages owned by a particular validator. Aggregate validators cannot be shared. 
+	 * only one validator may use an aggregate of that type. */
+	String TAG_AGGREGATE_VALIDATORS = "aggregateValidator"; //$NON-NLS-1$ 
 
-	/* package */static final String ATT_OBJECT_CLASS = "objectClass"; //$NON-NLS-1$ // identifies a type
-	/* package */static final String ATT_NAME_FILTER = "nameFilter"; //$NON-NLS-1$ // identifies a name (may include the '*' wildcard anywhere in the name)
-	/* package */static final String ATT_ID = "id"; //$NON-NLS-1$ // identifies a unique id to filter on
-	/* package */static final String ATT_CLASS = "class"; //$NON-NLS-1$ // identifies a class name of a tag, e.g. "helper class", or "run class"
-	/* package */static final String ATT_ACTION_FILTER = "action"; //$NON-NLS-1$ // identifies the incremental validation actions for which a resource should be filtered in
-	/* package */static final String ATT_INCREMENTAL = "incremental"; //$NON-NLS-1$ // identifies whether or not the validator supports incremental build validation. Default is true (i.e., incremental builds are supported).
-	/* package */static final boolean ATT_INCREMENTAL_DEFAULT = true; // The incremental default.
-	/* package */static final String ATT_FULLBUILD = "fullBuild"; //$NON-NLS-1$ // identifies whether or not the validator supports full build validation. Default is true (i.e., full build validation is supported).
-	/* package */static final boolean ATT_FULLBUILD_DEFAULT = true; // The build default.
-	/* package */static final String ATT_ENABLED = "enabled"; //$NON-NLS-1$ // identifies whether or not the validator is enabled by default. Default is "true" (enabled).
-	/* package */static final boolean ATT_ENABLED_DEFAULT = true; // The "enabled" default.
-	/* package */static final String ATT_INCLUDE = "include"; //$NON-NLS-1$ // Include projects with this nature
-	/* package */static final boolean ATT_INCLUDE_DEFAULT = true; // By default, if "include" is not
-	// specified in the projectNature
-	// element, then assume that the
-	// nature is included.
-	/* package */static final String ATT_RULE_GROUP = "ruleGroup"; //$NON-NLS-1$ // identifies the different validation passes which this validator recognizes. The values are identified in IRuleGroup.
-	/* package */static final int ATT_RULE_GROUP_DEFAULT = IRuleGroup.PASS_FAST; // the default pass
-	// includes only the
-	// FAST PASS. FULL
-	// can be invoked
-	// only explicitly by
-	// an operation.
-	/* package */static final String ATT_CASE_SENSITIVE = "caseSensitive"; //$NON-NLS-1$
-	/* package */static final String ATT_ASYNC = "async"; //$NON-NLS-1$ // Is the validator thread-safe? 
-	/* package */static final boolean ATT_ASYNC_DEFAULT = false; // The "can validator run
-	// asynchronously" default. Initially
-	// set to false, but in future this
-	// will be changed to true.
+	/** objectClass - identifies a type */ 
+	String ATT_OBJECT_CLASS = "objectClass"; //$NON-NLS-1$
+	
+	/** nameFilter - identifies a name (may include the '*' wildcard anywhere in the name) */
+	String ATT_NAME_FILTER = "nameFilter"; //$NON-NLS-1$
+	
+	/** id - identifies a unique id to filter on */
+	String ATT_ID = "id"; //$NON-NLS-1$
+	
+	/** class - identifies a class name of a tag, e.g. "helper class", or "run class" */
+	String ATT_CLASS = "class"; //$NON-NLS-1$
+	
+	/** action - identifies the incremental validation actions for which a resource should be filtered in */ 
+	String ATT_ACTION_FILTER = "action"; //$NON-NLS-1$
+	
+	/** 
+	 * incremental - identifies whether or not the validator supports incremental build validation. 
+	 * Default is true (i.e., incremental builds are supported). 
+	 */
+	String ATT_INCREMENTAL = "incremental"; //$NON-NLS-1$
+	
+	/** true - The incremental default. */
+	boolean ATT_INCREMENTAL_DEFAULT = true;
+	
+	/** 
+	 * fullBuild - identifies whether or not the validator supports full build validation. 
+	 * Default is true (i.e., full build validation is supported).
+	 */ 
+	String ATT_FULLBUILD = "fullBuild"; //$NON-NLS-1$ 
+	
+	/** true - The build default. */
+	boolean ATT_FULLBUILD_DEFAULT = true;
+	
+	/** enabled - identifies whether or not the validator is enabled by default. Default is "true" (enabled). */ 
+	String ATT_ENABLED = "enabled"; //$NON-NLS-1$
+	
+	/** true - The "enabled" default. */
+	boolean ATT_ENABLED_DEFAULT = true;
+	
+	/** include - Include projects with this nature */
+	String ATT_INCLUDE = "include"; //$NON-NLS-1$
+	
+	/** 
+	 * true - By default, if "include" is not specified in the projectNature element, 
+	 * then assume that the nature is included. */
+	boolean ATT_INCLUDE_DEFAULT = true;
+	
+	/** 
+	 * ruleGroup - identifies the different validation passes which this validator recognizes. 
+	 * The values are identified in IRuleGroup.
+	 */
+	String ATT_RULE_GROUP = "ruleGroup"; //$NON-NLS-1$
+	
+	/** the default pass includes only the FAST PASS. FULL can be invoked only explicitly by an operation. */
+	int ATT_RULE_GROUP_DEFAULT = IRuleGroup.PASS_FAST;
+	
+	/** caseSensitive */
+	String ATT_CASE_SENSITIVE = "caseSensitive"; //$NON-NLS-1$
+	
+	/** async - Is the validator thread-safe? */
+	String ATT_ASYNC = "async"; //$NON-NLS-1$
+	
+	/** false - The "can validator run asynchronously" default. In the future this may be changed to true. */
+	boolean ATT_ASYNC_DEFAULT = false;
 
-
-	/* package */static final String TAG_MIGRATE = "migrate"; //$NON-NLS-1$ // the "migrate" section of the validator
-	/* package */static final String TAG_VALIDATOR = "validator"; //$NON-NLS-1$ // the "validator" element of the "migrate" section
-	/* package */static final String ATT_FROM = "from"; //$NON-NLS-1$ // the fully-qualified class name of the former validator class
-	/* package */static final String ATT_TO = "to"; //$NON-NLS-1$ // the fully-qualified class name of the current validator class
-	static final String DEP_VALIDATOR = "dependentValidator"; //$NON-NLS-1$
-	static final String DEP_VAL_VALUE = "depValValue"; //$NON-NLS-1$
-	static final String MARKER_ID = "markerId"; //$NON-NLS-1$
-	static final String MARKER_ID_VALUE = "markerIdValue"; //$NON-NLS-1$
-	static final boolean DEP_VAL_VALUE_DEFAULT = false;
-	static final String FACET = "facet"; //$NON-NLS-1$
-	static final String FACET_ID ="facetId"; //$NON-NLS-1$
-}
\ No newline at end of file
+	/** migrate - the "migrate" section of the validator */
+	String TAG_MIGRATE = "migrate"; //$NON-NLS-1$
+	
+	/** validator - the "validator" element of the "migrate" section */
+	String TAG_VALIDATOR = "validator"; //$NON-NLS-1$
+	
+	/** from - the fully-qualified class name of the former validator class */
+	String ATT_FROM = "from"; //$NON-NLS-1$
+	
+	/** to - the fully-qualified class name of the current validator class */
+	String ATT_TO = "to"; //$NON-NLS-1$
+	String DEP_VALIDATOR = "dependentValidator"; //$NON-NLS-1$
+	String DEP_VAL_VALUE = "depValValue"; //$NON-NLS-1$
+	String MARKER_ID = "markerId"; //$NON-NLS-1$
+	String MARKER_ID_VALUE = "markerIdValue"; //$NON-NLS-1$
+	boolean DEP_VAL_VALUE_DEFAULT = false;
+	String FACET = "facet"; //$NON-NLS-1$
+	String FACET_ID ="facetId"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceConstants.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceConstants.java
index 515768e..62f8a08 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceConstants.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceConstants.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -13,111 +13,107 @@
 
 
 /**
- * Constants used to access the string resources associated with the plugin.
+ * Constants used to access the string resources associated with the plug-in.
  * 
  * See the plugin.properties file, in the plugin's directory, for the contents of the strings.
  */
 public interface ResourceConstants {
 	// A marker cannot be added to the task list.
-	public static final String VBF_EXC_CANNOT_ADD_MARKER = "VBF_EXC_CANNOT_ADD_MARKER"; //$NON-NLS-1$ 
+	String VBF_EXC_CANNOT_ADD_MARKER = "VBF_EXC_CANNOT_ADD_MARKER"; //$NON-NLS-1$ 
 
 	// A marker cannot be removed from the task list.
-	public static final String VBF_EXC_CANNOT_REMOVE_MARKER = "VBF_EXC_CANNOT_REMOVE_MARKER"; //$NON-NLS-1$ 
+	String VBF_EXC_CANNOT_REMOVE_MARKER = "VBF_EXC_CANNOT_REMOVE_MARKER"; //$NON-NLS-1$ 
 
 	// Internal error has occurred.
-	public static final String VBF_EXC_INTERNAL = "VBF_EXC_INTERNAL"; //$NON-NLS-1$ 
+	String VBF_EXC_INTERNAL = "VBF_EXC_INTERNAL"; //$NON-NLS-1$ 
 
 	// If the validator cannot be loaded because it didn't specify a helper
-	public static final String VBF_EXC_HELPER_MISSING = "VBF_EXC_HELPER_MISSING"; //$NON-NLS-1$ 
+	String VBF_EXC_HELPER_MISSING = "VBF_EXC_HELPER_MISSING"; //$NON-NLS-1$ 
 
 	// If the validator cannot be loaded because its helper cannot be loaded
-	public static final String VBF_EXC_HELPER_CANNOTLOAD = "VBF_EXC_HELPER_CANNOTLOAD"; //$NON-NLS-1$ 
+	String VBF_EXC_HELPER_CANNOTLOAD = "VBF_EXC_HELPER_CANNOTLOAD"; //$NON-NLS-1$ 
 
-	// A java.lang.Runtime error has occured during the build.
-	public static final String VBF_EXC_RUNTIME = "VBF_EXC_RUNTIME"; //$NON-NLS-1$ 
+	// A java.lang.Runtime error has occurred during the build.
+	String VBF_EXC_RUNTIME = "VBF_EXC_RUNTIME"; //$NON-NLS-1$ 
 
 	// If the "Validator" extension point has been removed from the plugin.xml file.
-	public static final String VBF_EXC_MISSING_VALIDATOR_EP = "VBF_EXC_MISSING_VALIDATOR_EP"; //$NON-NLS-1$ 
+	String VBF_EXC_MISSING_VALIDATOR_EP = "VBF_EXC_MISSING_VALIDATOR_EP"; //$NON-NLS-1$ 
 
 	// If the user has specified an invalid type filter in their plugin.xml file.
 	// i.e., it isn't an instance of IResource.
-	public static final String VBF_EXC_INVALID_TYPE_FILTER = "VBF_EXC_INVALID_TYPE_FILTER"; //$NON-NLS-1$ 
+	String VBF_EXC_INVALID_TYPE_FILTER = "VBF_EXC_INVALID_TYPE_FILTER"; //$NON-NLS-1$ 
 
 	// The validator extension has made a mistake in its plugin.xml's projectNature tag
-	public static final String VBF_EXC_MISSING_PROJECTNATURE_ID = "VBF_EXC_MISSING_PROJECTNATURE_ID"; //$NON-NLS-1$ 
+	String VBF_EXC_MISSING_PROJECTNATURE_ID = "VBF_EXC_MISSING_PROJECTNATURE_ID"; //$NON-NLS-1$ 
 
 	// The validator extension has made a mistake in its plugin.xml's syntax.
-	public static final String VBF_EXC_VALIDATORNAME_IS_NULL = "VBF_EXC_VALIDATORNAME_IS_NULL"; //$NON-NLS-1$ 
+	String VBF_EXC_VALIDATORNAME_IS_NULL = "VBF_EXC_VALIDATORNAME_IS_NULL"; //$NON-NLS-1$ 
 
 	// Title for the IProgressMonitor.
-	public static final String VBF_STATUS_PROGRESSMONITOR_TITLE = "VBF_STATUS_PROGRESSMONITOR_TITLE"; //$NON-NLS-1$ 
+	String VBF_STATUS_PROGRESSMONITOR_TITLE = "VBF_STATUS_PROGRESSMONITOR_TITLE"; //$NON-NLS-1$ 
 
 	// Status line for the IProgressMonitor
-	public static final String VBF_STATUS_INITIALIZING = "VBF_STATUS_INITIALIZING"; //$NON-NLS-1$ 
+	String VBF_STATUS_INITIALIZING = "VBF_STATUS_INITIALIZING"; //$NON-NLS-1$ 
 
 	// If the user has cancelled validation, each validator might have cleanup to do. This message
 	// is shown to tell the user which validator is being cleaned up at the moment.
-	public static final String VBF_STATUS_VALIDATOR_CLEANUP = "VBF_STATUS_VALIDATOR_CLEANUP"; //$NON-NLS-1$ 
+	String VBF_STATUS_VALIDATOR_CLEANUP = "VBF_STATUS_VALIDATOR_CLEANUP"; //$NON-NLS-1$ 
 
 	// If the user cancelled validation, remove all of the validator's tasks from the task list, and
 	// put an entry saying that validation on {project} using {validator} was cancelled.
-	public static final String VBF_STATUS_VALIDATOR_TERMINATED = "VBF_STATUS_VALIDATOR_TERMINATED"; //$NON-NLS-1$ 
+	String VBF_STATUS_VALIDATOR_TERMINATED = "VBF_STATUS_VALIDATOR_TERMINATED"; //$NON-NLS-1$ 
 
 	// Before a validator is begun, this message informs the user that validation, using a
 	// particular validator, has begun
-	public static final String VBF_STATUS_STARTING_VALIDATION = "VBF_STATUS_STARTING_VALIDATION"; //$NON-NLS-1$ 
+	String VBF_STATUS_STARTING_VALIDATION = "VBF_STATUS_STARTING_VALIDATION"; //$NON-NLS-1$ 
 
-	// After a validator is finished, this message informs the user that validtaion, using a
+	// After a validator is finished, this message informs the user that validation, using a
 	// particular validator, has completed.
-	public static final String VBF_STATUS_ENDING_VALIDATION = "VBF_STATUS_ENDING_VALIDATION"; //$NON-NLS-1$ 
+	String VBF_STATUS_ENDING_VALIDATION = "VBF_STATUS_ENDING_VALIDATION"; //$NON-NLS-1$ 
 
 	// If a validator throws an unchecked exception, this message is displayed to the user.
-	public static final String VBF_STATUS_ENDING_VALIDATION_ABNORMALLY = "VBF_STATUS_ENDING_VALIDATION_ABNORMALLY"; //$NON-NLS-1$ 
+	String VBF_STATUS_ENDING_VALIDATION_ABNORMALLY = "VBF_STATUS_ENDING_VALIDATION_ABNORMALLY"; //$NON-NLS-1$ 
 
 	// If the build's getDelta(getProject()) method returns null, let the user know that a full
 	// validation will be performed because there's no delta information.
-	public static final String VBF_STATUS_NULL_DELTA = "VBF_STATUS_NULL_DELTA"; //$NON-NLS-1$ 
+	String VBF_STATUS_NULL_DELTA = "VBF_STATUS_NULL_DELTA"; //$NON-NLS-1$ 
 
-	public static final String VBF_EXC_SYNTAX_NULL_NAME = "VBF_EXC_SYNTAX_NULL_NAME"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_HELPER = "VBF_EXC_SYNTAX_NO_HELPER"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_HELPER_CLASS = "VBF_EXC_SYNTAX_NO_HELPER_CLASS"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_HELPER_THROWABLE = "VBF_EXC_SYNTAX_NO_HELPER_THROWABLE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_VAL_RUN = "VBF_EXC_SYNTAX_NO_VAL_RUN"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_VAL_CLASS = "VBF_EXC_SYNTAX_NO_VAL_CLASS"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_VAL_THROWABLE = "VBF_EXC_SYNTAX_NO_VAL_THROWABLE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SYNTAX_NO_VAL_NULL = "VBF_EXC_SYNTAX_NO_VAL_NULL"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_INVALID_RESOURCE = "VBF_EXC_INVALID_RESOURCE"; //$NON-NLS-1$ 
+	String VBF_EXC_SYNTAX_NO_HELPER = "VBF_EXC_SYNTAX_NO_HELPER"; //$NON-NLS-1$ 
+	String VBF_EXC_SYNTAX_NO_HELPER_CLASS = "VBF_EXC_SYNTAX_NO_HELPER_CLASS"; //$NON-NLS-1$ 
+	String VBF_EXC_SYNTAX_NO_HELPER_THROWABLE = "VBF_EXC_SYNTAX_NO_HELPER_THROWABLE"; //$NON-NLS-1$ 
+	String VBF_EXC_SYNTAX_NO_VAL_THROWABLE = "VBF_EXC_SYNTAX_NO_VAL_THROWABLE"; //$NON-NLS-1$ 
+	String VBF_EXC_INVALID_RESOURCE = "VBF_EXC_INVALID_RESOURCE"; //$NON-NLS-1$ 
 
-	public static final String VBF_EXC_NULLCREATE = "VBF_EXC_NULLCREATE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_NULLSAVE = "VBF_EXC_NULLSAVE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_SAVE = "VBF_EXC_SAVE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_NULLRETRIEVE = "VBF_EXC_NULLRETRIEVE"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_RETRIEVE = "VBF_EXC_RETRIEVE"; //$NON-NLS-1$ 
+	String VBF_EXC_NULLCREATE = "VBF_EXC_NULLCREATE"; //$NON-NLS-1$ 
+	String VBF_EXC_NULLSAVE = "VBF_EXC_NULLSAVE"; //$NON-NLS-1$ 
+	String VBF_EXC_SAVE = "VBF_EXC_SAVE"; //$NON-NLS-1$ 
+	String VBF_EXC_NULLRETRIEVE = "VBF_EXC_NULLRETRIEVE"; //$NON-NLS-1$ 
+	String VBF_EXC_RETRIEVE = "VBF_EXC_RETRIEVE"; //$NON-NLS-1$ 
 
-	public static final String VBF_EXC_BADVMD = "VBF_EXC_BADVMD"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_OPENPRJ = "VBF_EXC_OPENPRJ"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_EXISTPRJ = "VBF_EXC_EXISTPRJ"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_BADPRJ = "VBF_EXC_BADPRJ"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_MULTIPRJ = "VBF_EXC_MULTIPRJ"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_BADVAL = "VBF_EXC_BADVAL"; //$NON-NLS-1$ 
+	String VBF_EXC_BADVMD = "VBF_EXC_BADVMD"; //$NON-NLS-1$ 
+	String VBF_EXC_OPENPRJ = "VBF_EXC_OPENPRJ"; //$NON-NLS-1$ 
+	String VBF_EXC_EXISTPRJ = "VBF_EXC_EXISTPRJ"; //$NON-NLS-1$ 
+	String VBF_EXC_BADPRJ = "VBF_EXC_BADPRJ"; //$NON-NLS-1$ 
+	String VBF_EXC_MULTIPRJ = "VBF_EXC_MULTIPRJ"; //$NON-NLS-1$ 
+	String VBF_EXC_BADVAL = "VBF_EXC_BADVAL"; //$NON-NLS-1$ 
 
-	public static final String VBF_STATUS_START_REMOVING_OLD_MESSAGES = "VBF_STATUS_START_REMOVING_OLD_MESSAGES"; //$NON-NLS-1$ 
-	public static final String VBF_STATUS_FINISH_REMOVING_OLD_MESSAGES = "VBF_STATUS_FINISH_REMOVING_OLD_MESSAGES"; //$NON-NLS-1$ 
+	String VBF_STATUS_START_REMOVING_OLD_MESSAGES = "VBF_STATUS_START_REMOVING_OLD_MESSAGES"; //$NON-NLS-1$ 
+	String VBF_STATUS_FINISH_REMOVING_OLD_MESSAGES = "VBF_STATUS_FINISH_REMOVING_OLD_MESSAGES"; //$NON-NLS-1$ 
 
-	public static final String VBF_TASK_WARN_MESSAGE_LIMIT_VAL = "VBF_TASK_WARN_MESSAGE_LIMIT_VAL"; //$NON-NLS-1$
+	String VBF_TASK_WARN_MESSAGE_LIMIT_VAL = "VBF_TASK_WARN_MESSAGE_LIMIT_VAL"; //$NON-NLS-1$
 	
-	public static final String VBF_VALIDATION_JOB_MSG = "VBF_VALIDATION_JOB_MSG"; //$NON-NLS-1$
+	String VBF_VALIDATION_JOB_MSG = "VBF_VALIDATION_JOB_MSG"; //$NON-NLS-1$
 
-	public static final String VBF_EXC_DISABLEV = "VBF_EXC_DISABLEV"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_DISABLEH = "VBF_EXC_DISABLEH"; //$NON-NLS-1$ 
-	public static final String VBF_EXC_ORPHAN_IVALIDATOR = "VBF_EXC_ORPHAN_IVALIDATOR"; //$NON-NLS-1$ 
+	String VBF_EXC_DISABLEV = "VBF_EXC_DISABLEV"; //$NON-NLS-1$ 
+	String VBF_EXC_DISABLEH = "VBF_EXC_DISABLEH"; //$NON-NLS-1$ 
+	String VBF_EXC_ORPHAN_IVALIDATOR = "VBF_EXC_ORPHAN_IVALIDATOR"; //$NON-NLS-1$ 
 
-	public static final String VBF_STATUS_LOOKING = "VBF_STATUS_LOOKING"; //$NON-NLS-1$ 
-	public static final String VBF_STATUS_LOOKINGDONE = "VBF_STATUS_LOOKINGDONE"; //$NON-NLS-1$ 
-	public static final String VBF_STATUS_REMOVING = "VBF_STATUS_REMOVING"; //$NON-NLS-1$ 
-	public static final String VBF_STATUS_REMOVINGDONE = "VBF_STATUS_REMOVINGDONE"; //$NON-NLS-1$
+	String VBF_STATUS_LOOKING = "VBF_STATUS_LOOKING"; //$NON-NLS-1$ 
+	String VBF_STATUS_LOOKINGDONE = "VBF_STATUS_LOOKINGDONE"; //$NON-NLS-1$ 
+	String VBF_STATUS_REMOVING = "VBF_STATUS_REMOVING"; //$NON-NLS-1$ 
+	String VBF_STATUS_REMOVINGDONE = "VBF_STATUS_REMOVINGDONE"; //$NON-NLS-1$
   
-  public static final String VBF_WRONG_CONTEXT_FOR_DELEGATE = "VBF_WRONG_CONTEXT_FOR_DELEGATE"; //$NON-NLS-1$
-  public static final String VBF_NO_DELEGATE = "VBF_NO_DELEGATE"; //$NON-NLS-1$
-  public static final String VBF_CANNOT_INSTANTIATE_DELEGATE = "VBF_CANNOT_INSTANTIATE_DELEGATE"; //$NON-NLS-1$  
-}
\ No newline at end of file
+	String VBF_WRONG_CONTEXT_FOR_DELEGATE = "VBF_WRONG_CONTEXT_FOR_DELEGATE"; //$NON-NLS-1$
+	String VBF_NO_DELEGATE = "VBF_NO_DELEGATE"; //$NON-NLS-1$
+	String VBF_CANNOT_INSTANTIATE_DELEGATE = "VBF_CANNOT_INSTANTIATE_DELEGATE"; //$NON-NLS-1$  
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceHandler.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceHandler.java
index 0cf1cd4..c3d2f7e 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceHandler.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ResourceHandler.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -12,17 +12,12 @@
 
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
-import java.util.logging.Level;
 
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 
 /**
  * This class retrieves the Strings from the .properties file appropriate for the machine's Locale.
- * 
- *  
  */
 public class ResourceHandler {
 	//TODO Make this class final once the public ResourceHandler has been deleted.
@@ -39,16 +34,11 @@
 	public static ResourceBundle getBundle() {
 		if (_bundle == null) {
 			try {
-				_bundle = ResourceBundle.getBundle(ValidationPlugin.getBundleName());
+				_bundle = ResourceBundle.getBundle(ValidationPlugin.getBundlePropertyFileName());
 			} catch (MissingResourceException exc) {
 				_bundle = null;
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("org.eclipse.wst.validation.internal.operations.internal.ResourceHandler.getBundle()"); //$NON-NLS-1$
-					entry.setText("Cannot find bundle " + ValidationPlugin.getBundleName()); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.FINE, entry);
+				if (Tracing.isLogging()) {
+					Tracing.log("ResourceHandler-01", "Cannot find bundle " + ValidationPlugin.getBundlePropertyFileName()); //$NON-NLS-1$ //$NON-NLS-2$
 				}
 			}
 		}
@@ -59,26 +49,13 @@
 		try {
 			ResourceBundle bundle = getBundle();
 			if (bundle == null) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("org.eclipse.wst.validation.internal.operations.internal.ResourceHandler.getExternalizedMessage(String)"); //$NON-NLS-1$
-					entry.setText("Resource bundle is null"); //$NON-NLS-1$
-					logger.write(Level.FINE, entry);
-				}
+				Tracing.log("ResourceHandler-02: ", "Resource bundle is null"); //$NON-NLS-1$ //$NON-NLS-2$
 				return key;
 			}
 
 			return bundle.getString(key);
 		} catch (NullPointerException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.ui.ResourceHandler.getExternalizedMessage(String)"); //$NON-NLS-1$
-				entry.setText("Cannot find message id " + key); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
+			Tracing.log("ResourceHandler-03: ", "Cannot find message id ", key); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		return key;
 	}
@@ -86,26 +63,14 @@
 	public static String getExternalizedMessage(String key, String[] parms) {
 		String res = ""; //$NON-NLS-1$
 		try {
-			res = java.text.MessageFormat.format(getExternalizedMessage(key), parms);
+			res = java.text.MessageFormat.format(getExternalizedMessage(key), (Object[])parms);
 		} catch (MissingResourceException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.internal.ResourceHandler.getExternalizedMessage(String, String[])"); //$NON-NLS-1$
-				entry.setText("Cannot find message id " + key); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
-			}
+			Tracing.log("ResourceHandler-04: ", "Cannot find message id ", key); //$NON-NLS-1$ //$NON-NLS-2$
 		} catch (NullPointerException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("org.eclipse.wst.validation.internal.operations.internal.ResourceHandler.getExternalizedMessage(String, String[])"); //$NON-NLS-1$
-				entry.setText("Cannot format message id " + key + " with " + parms.length + " parameters."); //$NON-NLS-1$  //$NON-NLS-2$  //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.FINE, entry);
+			if (Tracing.isLogging()) {
+				Tracing.log("ResourceHandler-05: Cannot format message id " + key + " with " + parms.length + " parameters."); //$NON-NLS-1$  //$NON-NLS-2$  //$NON-NLS-3$
 			}
 		}
 		return res;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java
index cdbf991..1cae3c1 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java
@@ -1,17 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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.wst.validation.internal;
 
 import java.util.Map;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
@@ -19,8 +18,6 @@
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 
@@ -48,6 +45,7 @@
 	 * This method is here for use by the SABER validator's reporter instance ONLY. Do not use. See
 	 * defect 260144 for details.
 	 */
+	@SuppressWarnings("unchecked")
 	public static IMarker setPriority(IMarker item, int priority) throws CoreException {
 		Map attrib = item.getAttributes();
 		attrib.put(IMarker.PRIORITY, new Integer(priority));
@@ -58,8 +56,11 @@
 	/**
 	 * This method adds a message to a resource in the task list.
 	 */
-	public static IMarker addTask(String pluginId, IResource resource, String location, String messageId, String message, int markerType, String markerName, String targetObjectName, String groupName, int offset, int length) throws CoreException {
-		if ((message == null) || (resource == null)) {
+	public static IMarker addTask(String pluginId, IResource resource, String location, 
+		String messageId, String message, int markerType, String markerName, String targetObjectName, 
+		String groupName, int offset, int length) throws CoreException {
+		
+		if ((message == null) || (resource == null) || (!resource.exists())) {
 			return null;
 		}
 
@@ -75,6 +76,7 @@
 		// in more than one place, and also to clear out any old messages which are not cleared
 		// by the validation framework.
 		IMarker item = null;
+		MarkerManager.getDefault().hook(resource);
 		if(markerName != null && markerName.length() >0 )
 			 item = resource.createMarker(markerName); // add a validation marker
 		else
@@ -141,80 +143,12 @@
 	/**
 	 * This method adds a message to a resource in the task list.
 	 */
-	public static IMarker addTask(String pluginId, IResource resource, String location, String messageId, String message, int markerType, String targetObjectName, String groupName, int offset, int length) throws CoreException {
-		if ((message == null) || (resource == null)) {
-			return null;
-		}
-
-		int severity = getSeverity(markerType);
-
-		// Allow duplicate entries in the task list.
-		// Prior to a full validation, the validation framework will remove all messages owned
-		// by a validator before it is executed.
-		// Prior to an incremental validation, the validation framework will remove all messages,
-		// on each of the changed resources, owned by a validator before it is invoked.
-		// 
-		// It is up to the validator to make sure that it is not adding the same message
-		// in more than one place, and also to clear out any old messages which are not cleared
-		// by the validation framework.
-		IMarker item = resource.createMarker(VALIDATION_MARKER); // add a validation marker
-
-		// For performance reasons, replace the multiple setAttribute
-		// calls above with a single setAttributes call.
-		boolean offsetSet = ((offset != IMessage.OFFSET_UNSET) && (length != IMessage.OFFSET_UNSET));
-		int size = (offsetSet) ? 10 : 8; // add CHAR_START, CHAR_END only if the offset is set. If
-		// the offset is set, it takes precendence over the line
-		// number. (eclipse's rule, not mine.)
-		String[] attribNames = new String[size];
-		Object[] attribValues = new Object[size];
-
-		// Very first thing, add the owner. That way, if the code dies
-		// before things are persisted, hopefully this marker will be persisted.
-		// Hopefully, eclipse WILL persist this field, as requested.
-		attribNames[0] = VALIDATION_MARKER_OWNER;
-		attribValues[0] = pluginId;
-		attribNames[1] = VALIDATION_MARKER_SEVERITY; // this validation severity is stored, in
-		// addition to the marker severity, to enable
-		// more than one severity of message to be
-		// displayed. e.g. ERROR | WARNING (using
-		// binary OR). The IMarker constants are
-		// regular decimal constants.
-		attribValues[1] = new Integer(markerType);
-		attribNames[2] = VALIDATION_MARKER_TARGETOBJECT; // to distinguish between messages which
-		// are registered on an IResource, but
-		// against different target objects
-		attribValues[2] = ((targetObjectName == null) ? "" : targetObjectName); //$NON-NLS-1$
-		attribNames[3] = VALIDATION_MARKER_GROUP;
-		attribValues[3] = ((groupName == null) ? "" : groupName); //$NON-NLS-1$
-		attribNames[4] = IMarker.MESSAGE;
-		attribValues[4] = message;
-		attribNames[5] = VALIDATION_MARKER_MESSAGEID;
-		attribValues[5] = messageId;
-
-		attribNames[6] = IMarker.SEVERITY; // IMarker.SEVERITY_ERROR, IMarker.SEVERITY_WARNING,
-		// IMarker.SEVERITY_INFO
-		attribValues[6] = new Integer(severity);
-		try {
-			// If the location is a line number, store it as a line number
-			Integer lineNumber = Integer.valueOf(location);
-			attribNames[7] = IMarker.LINE_NUMBER;
-			attribValues[7] = lineNumber;
-		} catch (NumberFormatException exc) {
-			// Otherwise, store it as a text location
-			attribNames[7] = IMarker.LOCATION;
-			attribValues[7] = location;
-		}
-
-		if (offsetSet) {
-			attribNames[8] = IMarker.CHAR_START;
-			attribValues[8] = new Integer(offset);
-			attribNames[9] = IMarker.CHAR_END;
-			attribValues[9] = new Integer(offset + length);
-		}
-
-		item.setAttributes(attribNames, attribValues);
-
-		return item;
+	public static IMarker addTask(String pluginId, IResource resource, String location, 
+		String messageId, String message, int markerType, String targetObjectName, 
+		String groupName, int offset, int length) throws CoreException {
+		
+		return addTask(pluginId, resource, location, messageId, 
+				message, markerType, null, targetObjectName, groupName, offset, length);
 	}
 
 	/**
@@ -282,14 +216,8 @@
 			}
 
 			return ((String) owner).equals(ownerId);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("TaskListUtility.isOwner(IMarker, ownerId)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return false;
 		}
 	}
@@ -297,75 +225,42 @@
 	private static IMarker[] getValidationTasks(IResource resource, int severity, int depth) {
 		IMarker[] tempMarkers = null;
 		int validCount = 0;
+		IMarker[] allMarkers = null;
 		try {
-			IMarker[] allMarkers = null;
-			try {
-				allMarkers = resource.findMarkers(VALIDATION_MARKER, true, depth); // false means
-				// only consider
-				// PROBLEM_MARKER,
-				// not variants
-				// of
-				// PROBLEM_MARKER.
-				// Since addTask
-				// only adds
-				// PROBLEM_MARKER,
-				// we don't need
-				// to consider
-				// its subtypes.
-			} catch (CoreException exc) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("TaskListUtility.getValidationTasks(IResource, int)"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				return NO_MARKERS;
-			}
+			allMarkers = resource.findMarkers(VALIDATION_MARKER, true, depth);
+		} catch (CoreException e) {
+			if (Tracing.isLogging())ValidationPlugin.getPlugin().handleException(e);
+			return NO_MARKERS;
+		}
 
-			// Now filter in the markers, based on severity type.
-			if (allMarkers.length != 0) {
-				tempMarkers = new IMarker[allMarkers.length];
-				for (int i = 0; i < allMarkers.length; i++) {
-					IMarker marker = allMarkers[i];
-					Integer filterSeverity = (Integer) marker.getAttribute(VALIDATION_MARKER_SEVERITY);
-					if (filterSeverity == null) {
-						// odd...marker wasn't created correctly. How could this happen?
-						// Default to the current severity and add it to the list.
-						try {
+		// Now filter in the markers, based on severity type.
+		if (allMarkers.length != 0) {
+			tempMarkers = new IMarker[allMarkers.length];
+			for (IMarker marker : allMarkers) {
+				Integer filterSeverity = null;
+				try {
+					filterSeverity = (Integer) marker.getAttribute(VALIDATION_MARKER_SEVERITY);
+				}
+				catch (CoreException e){
+					// Someone may have deleted the marker on us. All we can do is skip it.
+					continue;
+				}
+				if (filterSeverity == null) {
+					// odd...marker wasn't created correctly. How could this happen?
+					// Default to the current severity and add it to the list.
+					try {
+						// 226541 - I was seeing markers with valid severities being reset, so I added this
+						// additional test.
+						if (marker.getAttribute(IMarker.SEVERITY, -1) == -1)
 							marker.setAttribute(IMarker.SEVERITY, getSeverity(severity));
-						} catch (CoreException exc) {
-							Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-							if (logger.isLoggingLevel(Level.SEVERE)) {
-								LogEntry entry = ValidationPlugin.getLogEntry();
-								entry.setSourceID("TaskListUtility.getValidationTasks(int, IResource, int)"); //$NON-NLS-1$
-								entry.setTargetException(exc);
-								logger.write(Level.SEVERE, entry);
-							}
-							continue;
-						} catch (Throwable exc) {
-							Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-							if (logger.isLoggingLevel(Level.SEVERE)) {
-								LogEntry entry = ValidationPlugin.getLogEntry();
-								entry.setSourceID("TaskListUtility.getValidationTasks(int, IResource, int)"); //$NON-NLS-1$
-								entry.setTargetException(exc);
-								logger.write(Level.SEVERE, entry);
-							}
-							continue;
-						}
-					} else if ((severity & filterSeverity.intValue()) == 0) {
+					} catch (Exception e) {
+						ValidationPlugin.getPlugin().handleException(e);
 						continue;
 					}
-					tempMarkers[validCount++] = marker;
+				} else if ((severity & filterSeverity.intValue()) == 0) {
+					continue;
 				}
-			}
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("TaskListUtility.getValidationTasks(int, IResource, int)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
+				tempMarkers[validCount++] = marker;
 			}
 		}
 
@@ -388,40 +283,32 @@
 
 	private static IMarker[] getValidationTasks(IResource resource, String[] messageOwners, int depth) {
 		IMarker[] markers = getValidationTasks(resource, IMessage.ALL_MESSAGES, depth);
-		if (markers.length == 0) {
-			return NO_MARKERS;
-		}
+		if (markers.length == 0)return NO_MARKERS;
 
 		IMarker[] temp = new IMarker[markers.length];
 		int validCount = 0;
-		for (int i = 0; i < markers.length; i++) {
-			IMarker marker = markers[i];
-
+		for (IMarker marker : markers) {
+			Object owner = null;
 			try {
-				Object owner = marker.getAttribute(VALIDATION_MARKER_OWNER);
-				if ((owner == null) || !(owner instanceof String)) {
-					// The ValidationMigrator will remove any "unowned" validation markers.
-					continue;
-				}
+				owner = marker.getAttribute(VALIDATION_MARKER_OWNER);
+			} catch (CoreException e) {
+				// eat it -- if it no longer exists there is nothing we can do about it
+			}
+			
+			if ((owner == null) || !(owner instanceof String)) {
+				// The ValidationMigrator will remove any "unowned" validation markers.
+				continue;
+			}
 
-				for (int j = 0; j < messageOwners.length; j++) {
-					String messageOwner = messageOwners[j];
-					if (((String) owner).equals(messageOwner)) {
-						temp[validCount++] = marker;
-						break;
-					}
+			for (String messageOwner : messageOwners) {
+				if (((String) owner).equals(messageOwner)) {
+					temp[validCount++] = marker;
+					break;
 				}
-			} catch (CoreException exc) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("TaskListUtility.getValidationTasks(project, String[])"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				return NO_MARKERS;
 			}
 		}
+		
+		if (validCount == 0)return NO_MARKERS;
 
 		IMarker[] result = new IMarker[validCount];
 		System.arraycopy(temp, 0, result, 0, validCount);
@@ -487,15 +374,8 @@
 		try {
 			IMarker[] markers = getValidationTasks(resource, IMessage.ALL_MESSAGES);
 			ResourcesPlugin.getWorkspace().deleteMarkers(markers);
-		} catch (CoreException exc) {
-			// Couldn't remove the task from the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchMonitor.removeAllMessages(String[], IResource, String)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -568,4 +448,4 @@
 			marker.setAttribute(VALIDATION_MARKER_OWNER, to);
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TimeEntry.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TimeEntry.java
deleted file mode 100644
index d63ed17..0000000
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TimeEntry.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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.wst.validation.internal;
-
-import org.eclipse.jem.util.logger.LogEntry;
-
-
-/**
- * This class should be used when logging "elapsed time" information and nothing else. Instead of
- * creating a new instance of this class every time it is needed, for performance reasons, create an
- * instance and reuse it. The text in this class is never translated.
- */
-public class TimeEntry extends LogEntry {
-	private String _toolName = null;
-	private String _details = null;
-	private String _projectName = null;
-	private String _sourceId = null;
-	private int _executionMap = 0x0;
-
-	public TimeEntry() {
-		super();
-	}
-
-	/**
-	 * The name of the tool (e.g., a validator, a builder) whose time is measured.
-	 */
-	public String getToolName() {
-		return _toolName;
-	}
-
-	public void setToolName(String name) {
-		_toolName = name;
-	}
-
-
-	/**
-	 * If there are any details that need to be recorded about the tool, such as what input it runs
-	 * on, this field stores the value. This field is optional.
-	 */
-	public String getDetails() {
-		return _details;
-	}
-
-	public void setDetails(String d) {
-		_details = d;
-	}
-
-	/**
-	 * The name of the project on which the tool ran.
-	 */
-	public String getProjectName() {
-		return _projectName;
-	}
-
-	public void setProjectName(String name) {
-		_projectName = name;
-	}
-
-	/**
-	 * The id of the code that launched the tool.
-	 */
-	public String getSourceID() {
-		return _sourceId;
-	}
-
-	public void setSourceID(String id) {
-		_sourceId = id;
-	}
-
-	/**
-	 * If, in addition to elapsed time, the tool needs to track the execution path of a method, this
-	 * field stores the hexadecimal number that tracks the path. See ValidationBuilder::build for an
-	 * example that uses an execution path.
-	 */
-	public int getExcecutionMap() {
-		return _executionMap;
-	}
-
-	public void setExecutionMap(int map) {
-		_executionMap = map;
-	}
-
-	/**
-	 * Clear all of the fields back to their initial setting so that this TimeEntry instance can be
-	 * reused.
-	 */
-	public void reset() {
-		_toolName = null;
-		_details = null;
-		_projectName = null;
-		_sourceId = null;
-		_executionMap = 0;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/VThreadManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/VThreadManager.java
index 05b3891..e9d9b7e 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/VThreadManager.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/VThreadManager.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -12,10 +12,8 @@
 
 
 import java.util.Vector;
-import java.util.logging.Level;
 
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 
@@ -45,13 +43,8 @@
 					try {
 						if (restart > MAX_NUM_OF_RESTART) {
 							// something has gone seriously, seriously wrong
-							Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-							if (logger.isLoggingLevel(Level.SEVERE)) {
-								LogEntry entry = ValidationPlugin.getLogEntry();
-								entry.setSourceID("VThreadManager::validationRunnable"); //$NON-NLS-1$
-								entry.setText("restart = " + restart); //$NON-NLS-1$
-								logger.write(Level.SEVERE, entry);
-							}
+							String message = "restart = " + restart; //$NON-NLS-1$
+							ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
 							break;
 						}
 
@@ -63,20 +56,10 @@
 							job.run();
 							getJobs().setActive(false);
 						}
-					} catch (Throwable exc) {
-						// This exception is added as FINE instead of SEVERE because it's not
-						// improbable
-						// that an exception will be thrown
+					} catch (Exception e) {
 						restart++;
 						getJobs().setActive(false);
-
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.FINE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("VThreadManager::validationRunnable"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.FINE, entry);
-						}
+						ValidationPlugin.getPlugin().handleException(e);
 					} finally {
 						//do nothing
 					}
@@ -111,11 +94,11 @@
 	}
 
 	private class Jobs {
-		private Vector __jobs = null; // The queued Runnables that need to be run.
-		private boolean _isActive = false; // Is a job being run in the validation thread?
+		private Vector<Runnable> _queuedJobs; // The queued Runnables that need to be run.
+		private boolean _isActive; // Is a job being run in the validation thread?
 
 		public Jobs() {
-			__jobs = new Vector();
+			_queuedJobs = new Vector<Runnable>();
 		}
 
 		public synchronized void queue(Runnable runnable) {
@@ -125,7 +108,7 @@
 			// instead of the last state of changes.
 
 			// Have to wait for the current Runnable to finish, so add this to the end of the queue
-			__jobs.add(runnable);
+			_queuedJobs.add(runnable);
 			notifyAll();
 		}
 
@@ -133,7 +116,7 @@
 		 * Pop the Runnable off of the head of the queue.
 		 */
 		synchronized Runnable dequeue() {
-			while (__jobs.size() == 0) {
+			while (_queuedJobs.size() == 0) {
 				try {
 					wait();
 				} catch (InterruptedException exc) {
@@ -142,10 +125,10 @@
 			} // Block on the semaphore; break when a job has been added to the queue.
 
 			Runnable job = null;
-			if (__jobs.size() > 0) {
-				job = (Runnable) __jobs.get(0);
+			if (_queuedJobs.size() > 0) {
+				job = _queuedJobs.get(0);
 				if (job != null) {
-					__jobs.remove(0);
+					_queuedJobs.remove(0);
 				}
 			}
 			return job;
@@ -163,7 +146,7 @@
 		 * Return true if all of the Runnables have been run.
 		 */
 		public synchronized boolean isDone() {
-			return ((__jobs.size() == 0) && !isActive());
+			return ((_queuedJobs.size() == 0) && !isActive());
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationConfiguration.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationConfiguration.java
index 76a2236..3ddb087 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationConfiguration.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationConfiguration.java
@@ -1,30 +1,24 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 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.wst.validation.internal;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.StringTokenizer;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
@@ -34,12 +28,10 @@
 import org.eclipse.core.runtime.Preferences;
 import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
 import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegateDescriptor;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
+import org.osgi.service.prefs.BackingStoreException;
 
 /**
  * This class represents the user's preference or project settings.
@@ -48,31 +40,43 @@
  * property while the resource is open.
  */
 public abstract class ValidationConfiguration implements IPropertyChangeListener {
-	private IResource _resource = null;
-	private boolean disableAllValidation = getDisableAllValidation();
-	private String _version = null;
-	private Map _validators = null; // Map of all validators (ValidatorMetaData) configured on the
-	// project or installed globally. The value is a Boolean; TRUE
-	// means that the VMD is enabled, FALSE means that the VMD is
-	// disabled.
-	protected HashMap manualValidators = null;
-	protected HashMap buildValidators = null;
-	protected String USER_PREFERENCE = "USER_PREFERENCE";
-	protected String USER_MANUAL_PREFERENCE = "USER_MANUAL_PREFERENCE";
-	protected String USER_BUILD_PREFERENCE = "USER_BUILD_PREFERENCE";
-	protected String DELEGATES_PREFERENCE = "DELEGATES_PREFERENCE";
+	private final IResource 	_resource;
+	private boolean 	disableAllValidation = getDisableAllValidation();
+	private String 		_version;
 	
-  private Map _delegatesByTarget = null;
+	/**
+	 * Map of all validators configured on the project or installed globally. The value of true
+	 * means that the VMD is enabled, and a value of false means that the VMD is disabled.
+	 */
+	private Map<ValidatorMetaData, Boolean>		_validators = new HashMap<ValidatorMetaData, Boolean>();
+	protected Map<ValidatorMetaData, Boolean> 	manualValidators;
+	protected Map<ValidatorMetaData, Boolean> 	buildValidators;
+	
+	protected static final String UserPreference = "USER_PREFERENCE"; //$NON-NLS-1$
+	protected static final String UserBuildPreference = "USER_BUILD_PREFERENCE"; //$NON-NLS-1$
+	protected static final String UserManualPreference = "USER_MANUAL_PREFERENCE"; //$NON-NLS-1$
+	protected static final String DelegatesPreference = "DELEGATES_PREFERENCE"; //$NON-NLS-1$
+	
+	// GRK - I am keeping these "constants" in the off chance that they were used somewhere outside the framework
+	protected String USER_PREFERENCE 		= UserPreference;
+	protected String USER_MANUAL_PREFERENCE = UserManualPreference;
+	protected String USER_BUILD_PREFERENCE 	= UserBuildPreference;
+	protected String DELEGATES_PREFERENCE 	= DelegatesPreference;
+	
+	/**
+	 * The key is the target id, that is the id of the place holder validator. The value is the id 
+	 * of the real validator. 
+	 */
+	private Map<String, String> _delegatesByTarget = new HashMap<String, String>();
+	
+	private static final String DefaultValue = "default_value"; //$NON-NLS-1$
 
-	public static String getEnabledElementsAsString(Set elements) {
-		if (elements == null) {
-			return null;
-		}
+	public static String getEnabledElementsAsString(Set<ValidatorMetaData> elements) {
+		if (elements == null)return null;
 
 		StringBuffer buffer = new StringBuffer();
-		Iterator iterator = elements.iterator();
-		while (iterator.hasNext()) {
-			buffer.append(((ValidatorMetaData) iterator.next()).getValidatorUniqueName());
+		for (ValidatorMetaData vmd : elements) {
+			buffer.append(vmd.getValidatorUniqueName());
 			buffer.append(ConfigurationConstants.ELEMENT_SEPARATOR);
 		}
 		return buffer.toString();
@@ -82,36 +86,30 @@
 		return false;
 	}
 
-	public static String getEnabledElementsAsString(Object[] elements) {
+	public static String getEnabledElementsAsString(ValidatorMetaData[] elements) {
 		StringBuffer buffer = new StringBuffer();
-		for (int i = 0; i < elements.length; i++) {
-			buffer.append(((ValidatorMetaData) elements[i]).getValidatorUniqueName());
+		for (ValidatorMetaData vmd : elements) {
+			buffer.append(vmd.getValidatorUniqueName());
 			buffer.append(ConfigurationConstants.ELEMENT_SEPARATOR);
 		}
 		return buffer.toString();
 	}
 
-	public static Set getStringAsEnabledElements(String elements) {
-		if (elements == null) {
-			return null;
-		}
+	public static Set<ValidatorMetaData> getStringAsEnabledElements(String elements) {
+		if (elements == null)return null;
 
-		HashSet result = new HashSet();
+		Set<ValidatorMetaData> result = new HashSet<ValidatorMetaData>();
 		StringTokenizer tokenizer = new StringTokenizer(elements, ConfigurationConstants.ELEMENT_SEPARATOR);
 		while (tokenizer.hasMoreTokens()) {
 			String elem = tokenizer.nextToken();
 			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(elem);
-			if (vmd != null) {
-				result.add(vmd);
-			}
+			if (vmd != null)result.add(vmd);
 		}
 		return result;
 	}
 
 	public static ValidatorMetaData[] getStringAsEnabledElementsArray(String elements) {
-		if (elements == null) {
-			return null;
-		}
+		if (elements == null)return null;
 
 		StringTokenizer tokenizer = new StringTokenizer(elements, ConfigurationConstants.ELEMENT_SEPARATOR);
 		ValidatorMetaData[] result = new ValidatorMetaData[tokenizer.countTokens()];
@@ -119,9 +117,7 @@
 		while (tokenizer.hasMoreTokens()) {
 			String elem = tokenizer.nextToken();
 			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(elem);
-			if (vmd != null) {
-				result[count++] = vmd;
-			}
+			if (vmd != null)result[count++] = vmd;
 		}
 
 		if (count != result.length) {
@@ -132,29 +128,47 @@
 
 		return result;
 	}
+	
+	/**
+	 * Answer the validators
+	 * @return
+	 */
+	public static Set<String> getValidatorIdsManual(){
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+		String config = prefs.get(UserManualPreference, null);
+		return getValidatorIds(config);
+	}
+	
+	public static Set<String> getValidatorIdsBuild(){
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+		String config = prefs.get(UserBuildPreference, null);
+		return getValidatorIds(config);
+	}
+	
+	private static Set<String> getValidatorIds(String elements){
+		Set<String> set = new HashSet<String>(50);
+		if (elements != null){
+			StringTokenizer tokenizer = new StringTokenizer(elements, ConfigurationConstants.ELEMENT_SEPARATOR);
+			while (tokenizer.hasMoreTokens())set.add(tokenizer.nextToken());
+		}
+		return set;
+	}
 
 	public static IWorkspaceRoot getRoot() {
 		return ResourcesPlugin.getWorkspace().getRoot();
 	}
-
-	protected ValidationConfiguration() throws InvocationTargetException {
-		_validators = new HashMap();
-    _delegatesByTarget = new HashMap();
+	
+	protected ValidationConfiguration(IResource resource){
+		_resource = resource;
 	}
 
 	protected ValidationConfiguration(IResource resource, ValidatorMetaData[] validators) throws InvocationTargetException {
-		this();
-
 		if (resource == null) {
 			throw new InvocationTargetException(null, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_NULLCREATE));
 		}
 
-		setResource(resource);
-		setValidators(validators);
-	}
-
-	private void setResource(IResource resource) {
 		_resource = resource;
+		setValidators(validators);
 	}
 	
 	public boolean isDisableAllValidation() throws InvocationTargetException {
@@ -174,7 +188,7 @@
 	 * false, return the enabled non-incremental validators.
 	 */
 	public ValidatorMetaData[] getEnabledIncrementalValidators(boolean incremental) throws InvocationTargetException {
-		return getEnabledFullBuildValidators(incremental);
+		return getEnabledFullBuildValidators(!incremental);
 	}
 
 	/**
@@ -191,17 +205,13 @@
 		ValidatorMetaData[] result = null;
 		 
 		if( !isDisableAllValidation() ){
-			ValidatorMetaData[] temp = new ValidatorMetaData[numberOfValidators()];
-			Iterator iterator = getBuildEnabledValidatorsMap().keySet().iterator();
-
-			
-			while (iterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-				Boolean bvalue = (Boolean)(getBuildEnabledValidatorsMap().get(vmd));
-				if (bvalue.booleanValue() == true) {
+			Set<ValidatorMetaData> set = getBuildEnabledValidatorsMap().keySet();
+			ValidatorMetaData[] temp = new ValidatorMetaData[set.size()];
+			for (ValidatorMetaData vmd : set) {
+				Boolean bvalue = getBuildEnabledValidatorsMap().get(vmd);
+				if (bvalue) {
 					// If the validator is enabled
-					if (vmd == null)
-						continue;
+					if (vmd == null)continue;
 					if ( vmd.isBuildValidation() ) {
 						if (!onlyReferenced || vmd.isDependentValidator())
 							temp[count++] = vmd;
@@ -210,7 +220,8 @@
 			}
 			result = new ValidatorMetaData[count];
 			System.arraycopy(temp, 0, result, 0, count);
-		}else{
+		}
+		else {
 			 result = new ValidatorMetaData[0];
 		}
 		return result;
@@ -218,49 +229,69 @@
 
 	public void setEnabledValidators(ValidatorMetaData[] vmds) {
 		// First, "disable" all validators
-		Map all = getValidatorMetaData();
-		Iterator iterator = all.keySet().iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+		Map<ValidatorMetaData, Boolean> all = getValidatorMetaData();
+		for (ValidatorMetaData vmd : all.keySet()) {
 			all.put(vmd, Boolean.FALSE);
 		}
 
 		// Then enable only the validators in the array
-		if ((vmds == null) || (vmds.length == 0)) {
-			return;
-		}
-		for (int i = 0; i < vmds.length; i++) {
-			all.put(vmds[i], Boolean.TRUE);
+		if ((vmds == null) || (vmds.length == 0))return;
+		
+		for (ValidatorMetaData vmd : vmds) {
+			all.put(vmd, Boolean.TRUE);
 		}
 	}
 	
 	public void setEnabledManualValidators(ValidatorMetaData[] vmds) throws InvocationTargetException {
-		List manualEnabledVMDList = Arrays.asList(vmds);
-		List allValidators = Arrays.asList(getValidators());
-		for(int i = 0; i < allValidators.size(); i++) {
-			ValidatorMetaData data = (ValidatorMetaData) allValidators.get(i);
-			if(manualEnabledVMDList.contains(data))
-				getManualEnabledValidatorsMap().put(data, new Boolean(true));
+		Set<ValidatorMetaData> manualEnabledVMDs = new HashSet<ValidatorMetaData>(vmds.length);
+		for (ValidatorMetaData vmd : vmds)manualEnabledVMDs.add(vmd);
+		
+		for(ValidatorMetaData data : getValidators()) {
+			if(manualEnabledVMDs.contains(data))
+				getManualEnabledValidatorsMap().put(data, Boolean.TRUE);
 			else
-				getManualEnabledValidatorsMap().put(data, new Boolean(false));
-			
+				getManualEnabledValidatorsMap().put(data, Boolean.FALSE);			
+		}
+	}
+	
+	/**
+	 * Update the list of validators that have been enabled for manual validation.
+	 * 
+	 * @param vmds the validators that are enabled for manual validation.
+	 * @throws InvocationTargetException
+	 */
+	public void setEnabledManualValidators(Set<ValidatorMetaData> vmds) throws InvocationTargetException {
+		for(ValidatorMetaData data : getValidators()) {
+			if(vmds.contains(data))getManualEnabledValidatorsMap().put(data, Boolean.TRUE);
+			else getManualEnabledValidatorsMap().put(data, Boolean.FALSE);			
 		}
 	}
 	
 	public void setEnabledBuildValidators(ValidatorMetaData[] vmds) throws InvocationTargetException {
-		List buildEnabledVMDList = Arrays.asList(vmds);
-		List allValidators = Arrays.asList(getValidators());
-		for(int i = 0; i < allValidators.size(); i++) {
-			ValidatorMetaData data = (ValidatorMetaData) allValidators.get(i);
-			if(buildEnabledVMDList.contains(data))
-				getBuildEnabledValidatorsMap().put(data, new Boolean(true));
+		Set<ValidatorMetaData> buildEnabledVMDs = new HashSet<ValidatorMetaData>(vmds.length);
+		for (ValidatorMetaData vmd : vmds)buildEnabledVMDs.add(vmd);
+		for(ValidatorMetaData data : getValidators()) {
+			if(buildEnabledVMDs.contains(data))
+				getBuildEnabledValidatorsMap().put(data, Boolean.TRUE);
 			else
-				getBuildEnabledValidatorsMap().put(data, new Boolean(false));
-			
+				getBuildEnabledValidatorsMap().put(data, Boolean.FALSE);			
+		}
+	}
+	
+	/**
+	 * Update the list of validators that have been enabled for build validation.
+	 * 
+	 * @param vmds the validators that are enabled for build validation.
+	 * @throws InvocationTargetException
+	 */
+	public void setEnabledBuildValidators(Set<ValidatorMetaData> vmds) throws InvocationTargetException {
+		for(ValidatorMetaData data : getValidators()) {
+			if(vmds.contains(data))getBuildEnabledValidatorsMap().put(data, Boolean.TRUE);
+			else getBuildEnabledValidatorsMap().put(data, Boolean.FALSE);			
 		}
 	}
 
-	private Map getValidatorMetaData() {
+	private Map<ValidatorMetaData, Boolean> getValidatorMetaData() {
 		return _validators;
 	}
 	
@@ -275,11 +306,9 @@
 	 */
 	private ValidatorMetaData[] getValidators(boolean value) throws InvocationTargetException {
 		ValidatorMetaData[] temp = new ValidatorMetaData[numberOfValidators()];
-		Iterator iterator = getValidatorMetaData().keySet().iterator();
 		int count = 0;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			Boolean bvalue = (Boolean) getValidatorMetaData().get(vmd);
+		for (ValidatorMetaData vmd : getValidatorMetaData().keySet()) {
+			Boolean bvalue = getValidatorMetaData().get(vmd);
 			if (bvalue.booleanValue() == value) {
 				temp[count++] = vmd;
 			}
@@ -291,50 +320,46 @@
 	}
 	
 	public ValidatorMetaData[] getManualEnabledValidators() throws InvocationTargetException {
-		HashMap map = getManualEnabledValidatorsMap();
-		Set set = getManualEnabledValidatorsMap().keySet();
-		if (!set.isEmpty()) {
-			Iterator it = set.iterator();
-			List enabledManualValidators = new ArrayList();
-			while (it.hasNext()) {
-				ValidatorMetaData data = (ValidatorMetaData) it.next();
-				Boolean obj = (Boolean) map.get(data);
-				if (obj != null && obj.booleanValue() == true) {
-					enabledManualValidators.add(data);
-				}
+		Map<ValidatorMetaData, Boolean> map = getManualEnabledValidatorsMap();
+		if (!map.isEmpty()) {
+			List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+			for (Map.Entry<ValidatorMetaData, Boolean> me : map.entrySet()) {
+				Boolean obj = me.getValue();
+				if (obj != null && obj)list.add(me.getKey());
 			}
-			return (ValidatorMetaData[]) enabledManualValidators.toArray(new ValidatorMetaData[enabledManualValidators.size()]);
+			return (ValidatorMetaData[]) list.toArray(new ValidatorMetaData[list.size()]);
 		}
 		return getEnabledValidators();
 	}	
 	
 	public  ValidatorMetaData[] getBuildEnabledValidators() throws InvocationTargetException {
-		HashMap map = getBuildEnabledValidatorsMap();
-		Set set = getBuildEnabledValidatorsMap().keySet();
-		Iterator it = set.iterator();
-		List enabledBuildValidators = new ArrayList();
-		if (!set.isEmpty()) {
-			while (it.hasNext()) {
-				ValidatorMetaData data = (ValidatorMetaData) it.next();
-				Boolean obj = (Boolean) map.get(data);
-				if (obj != null && obj.booleanValue() == true) {
-					enabledBuildValidators.add(data);
-				}
+		Map<ValidatorMetaData, Boolean> map = getBuildEnabledValidatorsMap();
+		List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+		if (!map.isEmpty()) {
+			for (Map.Entry<ValidatorMetaData, Boolean> me : map.entrySet()) {
+				Boolean obj = me.getValue();
+				if (obj != null && obj)list.add(me.getKey());
 			}
-			return (ValidatorMetaData[]) enabledBuildValidators.toArray(new ValidatorMetaData[enabledBuildValidators.size()]);
+			return (ValidatorMetaData[]) list.toArray(new ValidatorMetaData[list.size()]);
 		}
 		return getEnabledValidators();
 	}
 	
-	protected  HashMap getBuildEnabledValidatorsMap() {
-		if(buildValidators == null)
-			buildValidators = new HashMap();
+	/**
+	 * Answer the map of the validators that have been enabled for build validation, 
+	 * creating it if necessary.
+	 */
+	protected  Map<ValidatorMetaData, Boolean> getBuildEnabledValidatorsMap() {
+		if(buildValidators == null)buildValidators = new HashMap<ValidatorMetaData, Boolean>();
 		return buildValidators;
 	}	
 	
-	protected  HashMap getManualEnabledValidatorsMap() {
-		if(manualValidators == null)
-			manualValidators = new HashMap();
+	/**
+	 * Answer the map of the validators that have been enabled for manual validation, 
+	 * creating it if necessary.
+	 */
+	protected  Map<ValidatorMetaData, Boolean> getManualEnabledValidatorsMap() {
+		if(manualValidators == null)manualValidators = new HashMap<ValidatorMetaData, Boolean>();
 		return manualValidators;
 	}	
 
@@ -344,17 +369,10 @@
 	 */
 	public ValidatorMetaData[] getIncrementalValidators() throws InvocationTargetException {
 		ValidatorMetaData[] temp = new ValidatorMetaData[numberOfValidators()];
-		Iterator iterator = getValidatorMetaData().keySet().iterator();
 		int count = 0;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			Boolean bvalue = (Boolean) getValidatorMetaData().get(vmd);
-			if (bvalue.booleanValue() == true) {
-				// If the validator is enabled
-				if (vmd.isIncremental()) {
-					temp[count++] = vmd;
-				}
-			}
+		for (ValidatorMetaData vmd : getValidatorMetaData().keySet()) {
+			Boolean bvalue = getValidatorMetaData().get(vmd);
+			if (bvalue && vmd.isIncremental())temp[count++] = vmd;
 		}
 
 		ValidatorMetaData[] result = new ValidatorMetaData[count];
@@ -372,25 +390,20 @@
 	
 	public void setValidators(ValidatorMetaData[] vmds) {
 		_validators.clear();
-		for (int i = 0; i < vmds.length; i++) {
-			if (vmds[i] == null)
-				continue;
-			_validators.put(vmds[i], (vmds[i].isEnabledByDefault() ? Boolean.TRUE : Boolean.FALSE));
+		for (ValidatorMetaData vmd : vmds) {
+			if (vmd == null)continue;
+			_validators.put(vmd, (vmd.isEnabledByDefault() ? Boolean.TRUE : Boolean.FALSE));
 		}
 	}
 	
   public void setDefaultDelegates(ValidatorMetaData[] vmds) throws InvocationTargetException {
     _delegatesByTarget.clear();
-    for (int i = 0; i < vmds.length; i++) {
-      ValidatorMetaData vmd = vmds[i];
-      if (vmd == null) {
-        continue;
-      }
+    for (ValidatorMetaData vmd : vmds) {
+      if (vmd == null)continue;
+      
       String targetID = vmd.getValidatorUniqueName();
       String delegateID = ValidatorDelegatesRegistry.getInstance().getDefaultDelegate(targetID);
-      if (delegateID == null) {
-        continue;
-      }
+      if (delegateID == null)continue;
       _delegatesByTarget.put(targetID, ValidatorDelegatesRegistry.getInstance().getDefaultDelegate(targetID));
     }
   }
@@ -413,11 +426,8 @@
 
 	private static int numberOfIncrementalValidators(ValidatorMetaData[] vmds) {
 		int count = 0;
-		for (int i = 0; i < vmds.length; i++) {
-			ValidatorMetaData vmd = vmds[i];
-			if (vmd.isIncremental()) {
-				count++;
-			}
+		for (ValidatorMetaData vmd : vmds) {
+			if (vmd.isIncremental())count++;
 		}
 		return count;
 	}
@@ -436,21 +446,11 @@
 		return getDisabledValidators().length;
 	}
 
-	/*public int getMaximumNumberOfMessages() throws InvocationTargetException {
-		return _maxMessages;
-	}
-
-	public void setMaximumNumberOfMessages(int max) {
-		_maxMessages = max;
-	}*/
-
 	/**
 	 * The value returned from this method is guaranteed to be non-null.
 	 */
 	public final String getVersion() throws InvocationTargetException {
-		if (_version == null) {
-			loadVersion();
-		}
+		if (_version == null)loadVersion();
 		return _version;
 	}
 
@@ -460,6 +460,7 @@
 
 	/**
 	 * This preference has been migrated; change the version to the current version.
+	 * @deprecated dead code.
 	 */
 	public void markVersionCurrent() {
 		// The version should not be marked current until the migration is complete
@@ -493,14 +494,10 @@
 	 * Return true if the validator is enabled on this preference.
 	 */
 	public boolean isEnabled(ValidatorMetaData vmd) throws InvocationTargetException {
-		if (vmd == null) {
-			return false;
-		}
+		if (vmd == null)return false;
 
-		Boolean value = (Boolean) getValidatorMetaData().get(vmd);
-		if (value == null) {
-			return false;
-		}
+		Boolean value = getValidatorMetaData().get(vmd);
+		if (value == null)return false;
 
 		return value.booleanValue();
 	}
@@ -544,19 +541,13 @@
 		return t.intValue();
 	}
 
-	public static ValidatorMetaData[] convertToArray(Collection c) {
+	public static ValidatorMetaData[] convertToArray(Collection<ValidatorMetaData> c) {
 		int length = (c == null) ? 0 : c.size();
 		ValidatorMetaData[] result = new ValidatorMetaData[length];
-		if (length == 0) {
-			return result;
-		}
+		if (length == 0)return result;
 
-		Iterator iterator = c.iterator();
 		int count = 0;
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			result[count++] = vmd;
-		}
+		for (ValidatorMetaData vmd : c)result[count++] = vmd;
 
 		return result;
 	}
@@ -564,34 +555,33 @@
 	public static ValidatorMetaData[] convertToArray(Object[] c) {
 		int length = (c == null) ? 0 : c.length;
 		ValidatorMetaData[] result = new ValidatorMetaData[length];
-		if (length == 0) {
-			return result;
-		}
+		if (length == 0)return result;
 
 		System.arraycopy(c, 0, result, 0, length);
 		return result;
 	}
+	
+	/**
+	 * Save the values of these fields before the project or workspace is closed.
+	 */
+	public void store() throws InvocationTargetException {
+		store(null);
+	}
 
 	/**
 	 * Save the values of these fields before the project or workspace is closed.
 	 */
-	public void store() throws InvocationTargetException {
-		Preferences pref = ValidationPlugin.getPlugin().getPluginPreferences();
-		if (pref != null) {
-			try {
-				OutputStream os = new ByteArrayOutputStream();
-				pref.setValue(USER_PREFERENCE, serialize());
-				pref.store(os, USER_PREFERENCE);
-				pref.setValue(USER_MANUAL_PREFERENCE, serializeManualSetting());
-				pref.store(os, USER_MANUAL_PREFERENCE);
-				pref.setValue(USER_BUILD_PREFERENCE, serializeBuildSetting());
-				pref.store(os, USER_BUILD_PREFERENCE);
-				pref.setValue(DELEGATES_PREFERENCE, serializeDelegatesSetting());
-				pref.store(os, DELEGATES_PREFERENCE);
-			} catch (IOException ie) {
-				Logger.getLogger().log(ie);
-			}
-
+	public void store(Boolean persist) throws InvocationTargetException {
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, persist);
+		pref.put(ValidationConfiguration.UserPreference, serialize());
+		pref.put(ValidationConfiguration.UserManualPreference, serializeManualSetting());
+		pref.put(ValidationConfiguration.UserBuildPreference, serializeBuildSetting());
+		pref.put(ValidationConfiguration.DelegatesPreference, serializeDelegatesSetting());
+		try {
+			pref.flush();
+		}
+		catch (BackingStoreException e){
+			throw new InvocationTargetException(e);
 		}
 	}
 
@@ -622,9 +612,7 @@
 
 	protected final String loadVersion(IMarker[] marker) throws InvocationTargetException {
 		String version = (String) getValue(marker[0], ConfigurationConstants.VERSION);
-		if (version == null) {
-			return ConfigurationConstants.VERSION4_03;
-		}
+		if (version == null)	return ConfigurationConstants.VERSION4_03;
 
 		return version;
 	}
@@ -674,7 +662,7 @@
 			}
 		} catch (InvocationTargetException exc) {
 			throw exc;
-		} catch (Throwable exc) {
+		} catch (Exception exc) {
 			String resourceName = (getResource() == null) ? "null" : getResource().getName(); //$NON-NLS-1$
 			throw new InvocationTargetException(exc, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_RETRIEVE, new String[]{resourceName}));
 		}
@@ -689,47 +677,33 @@
 	protected abstract void load(IMarker[] marker) throws InvocationTargetException;
 
 	protected Object getValue(IMarker marker, String attribName) {
-		if (marker == null) {
-			return null;
-		}
+		if (marker == null)return null;
 
 		try {
 			return marker.getAttribute(attribName);
-		} catch (CoreException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidationConfiguration::getValue(" + attribName + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
 
 	protected boolean getValue(IMarker marker, String attribName, boolean defaultValue) {
 		Boolean bool = (Boolean) getValue(marker, attribName);
-		if (bool == null) {
-			return defaultValue;
-		}
+		if (bool == null)return defaultValue;
 
 		return bool.booleanValue();
 	}
 
 	protected int getValue(IMarker marker, String attribName, int defaultValue) {
 		Integer integer = (Integer) getValue(marker, attribName);
-		if (integer == null) {
-			return defaultValue;
-		}
+		if (integer == null)return defaultValue;
 
 		return integer.intValue();
 	}
 
 	protected String getValue(IMarker marker, String attribName, String defaultValue) {
 		String string = (String) getValue(marker, attribName);
-		if (string == null) {
-			return defaultValue;
-		}
+		if (string == null)return defaultValue;
 
 		return string;
 	}
@@ -739,24 +713,22 @@
 		// 1. This is a new workspace and no preferences exist.
 		// 2. This is a migrated workspace and the old preferences have already been created as
 		// persistent properties.
-		Preferences prefs = ValidationPlugin.getPlugin().getPluginPreferences();
-		if (prefs != null) {
-			deserializeAllPrefs(prefs);
-		}
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+		deserializeAllPrefs(prefs);
 	}
 
 	/**
 	 * @param prefs
 	 * @throws InvocationTargetException
 	 */
-	private void deserializeAllPrefs(Preferences prefs) throws InvocationTargetException {
-		String storedConfig = prefs.getString(USER_PREFERENCE);
+	private void deserializeAllPrefs(PreferencesWrapper prefs) throws InvocationTargetException {
+		String storedConfig = prefs.get(ValidationConfiguration.UserPreference, null);
 		deserialize(storedConfig);
-		String storedManualConfig = prefs.getString(USER_MANUAL_PREFERENCE);
+		String storedManualConfig = prefs.get(ValidationConfiguration.UserManualPreference, null);
 		deserializeManual(storedManualConfig);
-		String storedBuildConfig = prefs.getString(USER_BUILD_PREFERENCE);
+		String storedBuildConfig = prefs.get(ValidationConfiguration.UserBuildPreference, null);
 		deserializeBuild(storedBuildConfig);
-		String storedDelegatesConfiguration = prefs.getString(DELEGATES_PREFERENCE);
+		String storedDelegatesConfiguration = prefs.get(ValidationConfiguration.DelegatesPreference, null);
 		deserializeDelegates(storedDelegatesConfiguration);
 	}
 	
@@ -764,15 +736,30 @@
 		Preferences prefs = (Preferences) event.getSource();
 		if (prefs != null && !event.getOldValue().equals(event.getNewValue())) {
 			try {
-				deserializeAllPrefs(prefs);
-			 } catch (InvocationTargetException ie) {
-				Logger.getLogger().log(ie);
+				deserializeAllPrefs(event);
+				passivate();
+			 } catch (InvocationTargetException e) {
+				 ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 	}
 
+	private void deserializeAllPrefs(PropertyChangeEvent event) throws InvocationTargetException {
+		String storedConfig = (String)event.getNewValue();
+		if( event.getProperty().equals(ValidationConfiguration.UserPreference) ){
+			deserialize(storedConfig);
+		}else if(event.getProperty().equals(ValidationConfiguration.UserManualPreference)){
+			deserializeManual(storedConfig);
+		}else if(event.getProperty().equals(ValidationConfiguration.UserBuildPreference)){
+			deserializeBuild(storedConfig);
+		}else if(event.getProperty().equals(ValidationConfiguration.DelegatesPreference)){
+			deserializeDelegates(storedConfig);
+		}
+	}
+	
+	
 	protected void deserializeBuild(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 			// Assume that the configuration has never been set (new workspace).
 			resetToDefault();
 			return;
@@ -784,7 +771,7 @@
 	}
 
 	protected void deserializeManual(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 			// Assume that the configuration has never been set (new workspace).
 			resetToDefault();
 			return;
@@ -797,7 +784,7 @@
 
 	protected void deserializeDelegates(String storedConfiguration) throws InvocationTargetException {
 
-    if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+    if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 	    // Assume that the configuration has never been set (new workspace).
 	    resetToDefault();
 	    return;
@@ -823,7 +810,6 @@
 
 	protected void copyTo(ValidationConfiguration up) throws InvocationTargetException {
 		up.setVersion(getVersion());
-		up.setResource(getResource());
 		up.setValidators(getValidators());
 		up.setDisableAllValidation(isDisableAllValidation());
 		up.setEnabledValidators(getEnabledValidators());
@@ -832,15 +818,19 @@
     up.setDelegatingValidators(getDelegatingValidators());
 	}
 
-  public Map getDelegatingValidators() throws InvocationTargetException {
-    return _delegatesByTarget;
-  }
+	/**
+	 * The key is the id of the place holder validator, and the value is the id of validator
+	 * that will perform the validation. 
+	 */
+	public Map<String, String> getDelegatingValidators() throws InvocationTargetException {
+		return _delegatesByTarget;
+	}
 
-  public void setDelegatingValidators(Map source)
-  {
-    // It is safe to copy this map as it contains only immutable strings.
-    _delegatesByTarget.putAll(source);
-  }
+	public void setDelegatingValidators(Map<String, String> source)
+	{
+		// It is safe to copy this map as it contains only immutable strings.
+		_delegatesByTarget.putAll(source);
+	}
 
   /**
 	 * Return true if the enabled validators have not changed since this ValidationConfiguration was
@@ -878,32 +868,20 @@
    * @return true if there has been a change, false otherwise.
    * @throws InvocationTargetException
    */
-  protected boolean haveDelegatesChanged(Map oldDelegates) throws InvocationTargetException {
+  protected boolean haveDelegatesChanged(Map<String, String> oldDelegates) throws InvocationTargetException {
     
-    if (oldDelegates == null) {
-      return true;
-    }
+    if (oldDelegates == null)return true;
     
-    Iterator iterator = oldDelegates.keySet().iterator();
-    
-    while (iterator.hasNext())
-    {
-      String targetID = (String) iterator.next();
-      String oldDelegateID = (String) oldDelegates.get(targetID);
-      String newDelegateID = (String) _delegatesByTarget.get(targetID);
+    for (String targetID : oldDelegates.keySet()) {
+      String oldDelegateID = oldDelegates.get(targetID);
+      String newDelegateID = _delegatesByTarget.get(targetID);
       
-      if (oldDelegateID == null || newDelegateID == null) {
-        return true;
-      }
+      if (oldDelegateID == null || newDelegateID == null)return true;
         
-      if (!newDelegateID.equals(oldDelegateID)) {
-        return true;
-      }
+      if (!newDelegateID.equals(oldDelegateID))return true;
     }
     
-    if (oldDelegates.size() != _delegatesByTarget.size()) {
-      return true;
-    }
+    if (oldDelegates.size() != _delegatesByTarget.size())return true;
     
     return false;
   }
@@ -943,20 +921,14 @@
    * @param validatorMetaData a Map with the currently configured validators.
    * @return a String.
    */
-  private String getDelegatesAsString(Map validatorMetaData) {
+  private String getDelegatesAsString(Map<ValidatorMetaData, Boolean> validatorMetaData) {
     
     StringBuffer buffer = new StringBuffer();
-    Iterator iterator = validatorMetaData.keySet().iterator();
-    
-    while (iterator.hasNext()) {
-    
-      ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+    for (ValidatorMetaData vmd : validatorMetaData.keySet()) {    
       String targetID = vmd.getValidatorUniqueName();
       String delegateID = getDelegateUniqueName(vmd);
       
-      if (delegateID == null) {
-        continue;
-      }
+      if (delegateID == null)continue;
 
       // Write out pairs targetID=delegateID
 
@@ -971,14 +943,25 @@
   
   /**
    * Provides the delegate's ID of the validator delegate configured in this configuration for 
-   * a given delegating validator.
+   * a given delegating validator. That is answer the id of validator that is going to do the real work.
    * 
-   * @param vmd the delegating validator's metadata. Must not be null.
-   * @return a String with the unique name (ID) of the validator delegate, null if there isn't one.
+   * @param vmd the delegating validator's meta data. Must not be null.
+   * @return a String with the id of the validator delegate, null if there isn't one.
    */
   public String getDelegateUniqueName(ValidatorMetaData vmd) {
     String targetID = vmd.getValidatorUniqueName();    
-    return (String) _delegatesByTarget.get(targetID);
+    return _delegatesByTarget.get(targetID);
+  }
+  
+  /**
+   * Provides the delegate's ID of the validator delegate configured in this configuration for 
+   * a given delegating validator. That is answer the id of validator that is going to do the real work.
+   * 
+   * @param targetId the id of the target (or place holder) validator. Must not be null.
+   * @return a String with the id of the validator delegate, null if there isn't one.
+   */
+  public String getDelegateForTarget(String targetId){
+	  return _delegatesByTarget.get(targetId);
   }
 
   /**
@@ -998,7 +981,7 @@
 	 * loadVersion() method.
 	 */
 	protected void deserialize(String storedConfiguration) throws InvocationTargetException {
-		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals("default_value")) {
+		if (storedConfiguration == null || storedConfiguration.length() == 0 || storedConfiguration.equals(DefaultValue)) {
 			// Assume that the configuration has never been set (new workspace).
 			resetToDefault();
 			return;
@@ -1009,7 +992,7 @@
 				String disableAllValidation = storedConfiguration.substring(disableAllValidationIndex + ConfigurationConstants.DISABLE_ALL_VALIDATION_SETTING.length(),versionIndex);
 				setDisableAllValidation(Boolean.valueOf(disableAllValidation).booleanValue());
 		} else {
-				setDisableAllValidation(false);;
+				setDisableAllValidation(false);
 		}
 		
 	}
@@ -1032,32 +1015,53 @@
 		// method.)
 		return ConfigurationConstants.CURRENT_VERSION;
 	}
-
 	
 	public boolean isManualEnabled(ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return false;
-		}
-		Boolean value = (Boolean) getManualEnabledValidatorsMap().get(vmd);
-		if (value == null) 
-			return false;
-		return value.booleanValue();
+		if (vmd == null)return false;
+		Boolean value = getManualEnabledValidatorsMap().get(vmd);
+		if (value == null)return false;
+		return value;
 	}
 
 	public boolean isBuildEnabled(ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return false;
-		}
-		Boolean value = (Boolean) getBuildEnabledValidatorsMap().get(vmd);
-		if (value == null) 
-			return false;
-		return value.booleanValue();
+		if (vmd == null)return false;
+		Boolean value = getBuildEnabledValidatorsMap().get(vmd);
+		if (value == null)return false;
+		return value;
 	}
 	
 	public int numberOfManualEnabledValidators() throws InvocationTargetException {
 		return getManualEnabledValidators().length;
 	}
+	
+	public void enableSingleValidator(ValidatorMetaData  vmd){
+		getValidatorMetaData().put(vmd, Boolean.TRUE);
+	}
+	
+	
+	public void disableSingleValidator(ValidatorMetaData  vmd){
+		getValidatorMetaData().put(vmd, Boolean.FALSE);
+	}
+	
+	public void enableSingleManualValidator(ValidatorMetaData  vmd){
+		getManualEnabledValidatorsMap().put(vmd, Boolean.TRUE);
+	}
+	
+	
+	public void disableSingleManualValidator(ValidatorMetaData  vmd){
+		getManualEnabledValidatorsMap().put(vmd, Boolean.FALSE);
+	}
 
+	
+	public void enableSingleBuildValidator(ValidatorMetaData  vmd){
+		getBuildEnabledValidatorsMap().put(vmd, Boolean.TRUE);
+	}
+	
+	
+	public void disableSingleBuildValidator(ValidatorMetaData  vmd){
+		getBuildEnabledValidatorsMap().put(vmd, Boolean.FALSE);
+	}
+	
   /**
    * Provides the delegate validator descriptor of the validator delegate configured 
    * for the given delegating validator in the context of this configuration. 
@@ -1071,4 +1075,4 @@
     ValidatorDelegateDescriptor descriptor = ValidatorDelegatesRegistry.getInstance().getDescriptor(targetID, delegateID); 
     return descriptor;    
   }
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationFactoryImpl.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationFactoryImpl.java
index b8ec7c3..1ba2ed1 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationFactoryImpl.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationFactoryImpl.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 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
  *******************************************************************************/
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java
index 4859af5..9766048 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 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
  *******************************************************************************/
@@ -14,13 +14,12 @@
 import java.text.MessageFormat;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Set;
 import java.util.StringTokenizer;
-import java.util.logging.Level;
 
 import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.EvaluationResult;
@@ -34,13 +33,14 @@
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
 import org.eclipse.wst.validation.internal.operations.IRuleGroup;
 import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
@@ -54,32 +54,41 @@
  * ValidatorManager's loadValidatorMetaData(IProject) method. ValidatorManager delegates the load
  * call to this class, and if this class is null, the singleton is new'ed up, and the registry is
  * read.
- * 
+ * <p>
  * No Validator should need to know about this class. The only class which should call
  * ValidationRegistryReader is ValidatorManager.
- * 
+ * </p>
+ * <p>
  * The Validator itself is initialized in the "initializeValidator" method.
- * 
- * <extension point="org.eclipse.wst.validation.internal.provisional.core.core.validator" id="EJBValidator" name="EJB
- * Validator"> <validator><projectNature id="com.ibm.etools.j2ee.EJBNature" include="false"/>
- * <filter objectClass="org.eclipse.core.resources.IFile" nameFilter = "ejb-jar.xml"/> <filter
- * objectClass="org.eclipse.core.resources.IFile" nameFilter = "*.java"/> <helper
- * class="org.eclipse.wst.validation.internal.provisional.core.core.ejb.workbenchimpl.EJBHelper"/> <run
- * class="org.eclipse.wst.validation.internal.provisional.core.core.ejb.EJBValidator" incremental="false" enabled="false"
- * pass="fast,full" async="false"/> <aggregateValidator class="my.aggregate.ValidatorClass"/>
- * <migrate><validator from="old.class.name" to="new.class.name"/> </migrate> </validator>
- * </extension>
+ * </p>
  */
 public final class ValidationRegistryReader implements RegistryConstants {
-	private static ValidationRegistryReader inst = null;
-	private HashMap _validators; // list of all validators registered, with their associated
-	// ValidatorMetaData, indexed by project nature id
-	private HashMap _indexedValidators; // list of all validators, indexed by validator class name,
+	
+	 /* <extension point="org.eclipse.wst.validation.internal.provisional.core.core.validator" id="EJBValidator" name="EJB
+		 * Validator"> <validator><projectNature id="com.ibm.etools.j2ee.EJBNature" include="false"/>
+		 * <filter objectClass="org.eclipse.core.resources.IFile" nameFilter = "ejb-jar.xml"/> <filter
+		 * objectClass="org.eclipse.core.resources.IFile" nameFilter = "*.java"/> <helper
+		 * class="org.eclipse.wst.validation.internal.provisional.core.core.ejb.workbenchimpl.EJBHelper"/> <run
+		 * class="org.eclipse.wst.validation.internal.provisional.core.core.ejb.EJBValidator" incremental="false" enabled="false"
+		 * pass="fast,full" async="false"/> <aggregateValidator class="my.aggregate.ValidatorClass"/>
+		 * <migrate><validator from="old.class.name" to="new.class.name"/> </migrate> </validator>
+		 * </extension>
+		 */
+	
+	private static ValidationRegistryReader _inst = new ValidationRegistryReader();
+	
+	/** list of all validators registered, with their associated ValidatorMetaData, indexed by project nature id */
+	private final Map<String,Set<ValidatorMetaData>> _validators;
+	
+	// list of all validators, indexed by validator class name,
 	// with the validator's ValidatorMetaData as the value.
 	// Needed by the WorkbenchReporter, because sometimes the
 	// IValidator is not enough to remove all messages from the
 	// task list.
-	private Set _defaultEnabledValidators;
+	private final Map<String, ValidatorMetaData> _indexedValidators; 
+	
+	private final Set<ValidatorMetaData> _defaultEnabledValidators;
+	
 	// Since IProject's contents are all instances of IResource, every type filter for a validator
 	// must be an instance of IResource. This applies to both the rebuildCache pass and to the
 	// validation pass.
@@ -88,18 +97,18 @@
 	private static final String UNKNOWN_PROJECT = "UNKNOWN"; //$NON-NLS-1$ // This 'project nature id' is used as a key to get the validators which can run on a project type which hasn't been explicitly filtered in or out by any validator.
 	private static final String EXCLUDED_PROJECT = "EXCLUDED"; //$NON-NLS-1$ // This 'project nature id' is used as a key to get the validators which are excluded on certain projects.
 	
-	public HashMap projectValidationMetaData = null;
+	/** @deprecated this instance variable should not be public. */
+	public HashMap<IProject, Set<ValidatorMetaData>> projectValidationMetaData = new HashMap<IProject, Set<ValidatorMetaData>>();
 
 	/**
 	 * The registry is read once - when this class is instantiated.
 	 */
 	private ValidationRegistryReader() {
-		super();
 
+		_validators = new HashMap<String,Set<ValidatorMetaData>>();
+		_indexedValidators = new HashMap<String, ValidatorMetaData>();
+		_defaultEnabledValidators = new HashSet<ValidatorMetaData>();
 		try {
-			_validators = new HashMap();
-			_indexedValidators = new HashMap();
-			_defaultEnabledValidators = new HashSet();
 
 			// Read the registry and build a map of validators. The key into
 			// the map is the IValidator instance and the value is the ValidatorMetaData
@@ -109,14 +118,8 @@
 			// Once all of the validators have been read, the caches of the
 			// validators need to be updated.
 			buildCache();
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader()"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -125,9 +128,7 @@
 	 * created to increase runtime performance.
 	 */
 	private void buildCache() {
-		Iterator iterator = _indexedValidators.values().iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+		for (ValidatorMetaData vmd : _indexedValidators.values()) {
 			buildProjectNatureCache(vmd);
 			buildDefaultEnabledCache(vmd);
 		}
@@ -137,17 +138,12 @@
 		addRemainder();
 
 		// this temporary list isn't needed any more. All of the excluded
-		// projects have been added to the project natures which they don't exlcude.
+		// projects have been added to the project natures which they don't exclude.
 		_validators.remove(EXCLUDED_PROJECT);
 
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.buildCache()"); //$NON-NLS-1$
-			entry.setText(debug());
-			logger.write(Level.FINEST, entry);
+		if (Tracing.isTraceV1()) {
+			Tracing.log("ValidationRegistryReader-01: ", debug()); //$NON-NLS-1$
 		}
-
 	}
 
 	/**
@@ -188,13 +184,9 @@
 	 * Build the list of validators which are enabled by default.
 	 */
 	private void buildDefaultEnabledCache(ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return;
-		}
+		if (vmd == null)return;
 
-		if (vmd.isEnabledByDefault()) {
-			_defaultEnabledValidators.add(vmd);
-		}
+		if (vmd.isEnabledByDefault())_defaultEnabledValidators.add(vmd);
 	}
 
 	/**
@@ -228,23 +220,20 @@
 	}
 
 	private void addExcludedRemainder() {
-		Set excludedProjVmds = (Set) _validators.get(EXCLUDED_PROJECT);
+		Set<ValidatorMetaData> excludedProjVmds = _validators.get(EXCLUDED_PROJECT);
 		if (excludedProjVmds == null) {
 			// no excluded project natures
 			return;
 		}
 
-		Iterator exIterator = excludedProjVmds.iterator();
-		while (exIterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) exIterator.next();
+		for (ValidatorMetaData vmd : excludedProjVmds) {
 
-			boolean noneIncluded = true; // assume that, by default, if someone explicitly excludes
-			// a project nature then they don't include any project
-			// natures
-			Set keys = _validators.keySet();
-			Iterator iterator = keys.iterator();
-			while (iterator.hasNext()) {
-				String projId = (String) iterator.next();
+			// assume that, by default, if someone explicitly excludes
+			// a project nature then they don't include any project natures
+			boolean noneIncluded = true;
+			
+			// a project nature then they don't include any project natures
+			for (String projId : _validators.keySet()) {
 				if (projId.equals(UNKNOWN_PROJECT) || projId.equals(EXCLUDED_PROJECT)) {
 					// Don't add list to a project nature which is excluded or applicable to all.
 					continue;
@@ -277,16 +266,13 @@
 	}
 
 	private void addAnyRemainder() {
-		Set anyProjVmds = (Set) _validators.get(UNKNOWN_PROJECT);
+		Set<ValidatorMetaData> anyProjVmds = _validators.get(UNKNOWN_PROJECT);
 		if (anyProjVmds == null) {
 			// no validators run on all projects
 			return;
 		}
 
-		Set keys = _validators.keySet();
-		Iterator iterator = keys.iterator();
-		while (iterator.hasNext()) {
-			String projId = (String) iterator.next();
+		for (String projId : _validators.keySet()) {
 			if (projId.equals(UNKNOWN_PROJECT) || projId.equals(EXCLUDED_PROJECT)) {
 				// Don't add list to itself or to a project nature which is excluded.
 				continue;
@@ -296,26 +282,22 @@
 		}
 	}
 
-	private void add(String projectNatureId, Set vmdList) {
-		if ((vmdList == null) || (vmdList.size() == 0)) {
-			return;
-		}
+	private void add(String projectNatureId, Set<ValidatorMetaData> vmdList) {
+		if ((vmdList == null) || (vmdList.size() == 0))return;
 
-		Set pnVal = createSet(projectNatureId); // whether the validator includes or excludes this
-		// project nature id, make sure that an entry is
-		// created for it in the table
+		// whether the validator includes or excludes this
+		// project nature id, make sure that an entry is created for it in the table
+		Set<ValidatorMetaData> pnVal = createSet(projectNatureId); 
 		pnVal.addAll(vmdList);
 		_validators.put(projectNatureId, pnVal);
 	}
 
 	private void add(String projectNatureId, ValidatorMetaData vmd) {
-		if (vmd == null) {
-			return;
-		}
+		if (vmd == null)return;
 
-		Set pnVal = createSet(projectNatureId); // whether the validator includes or excludes this
-		// project nature id, make sure that an entry is
-		// created for it in the table
+		// whether the validator includes or excludes this
+		// project nature id, make sure that an entry is created for it in the table
+		Set<ValidatorMetaData> pnVal = createSet(projectNatureId); 
 		pnVal.add(vmd);
 		_validators.put(projectNatureId, pnVal);
 	}
@@ -333,25 +315,21 @@
 		// a lot of processing time... Instead, traverse the list of proj nature ids,
 		// and search the Set of that proj nature id, and remove the vmd if it's in the
 		// Set.
-		Object[] keys = _validators.keySet().toArray();
-		for (int i = 0; i < keys.length; i++) {
-			Object key = keys[i];
-			Set value = (Set) _validators.get(key);
-			if (value == null) {
-				continue;
-			}
+		for (String projId : _validators.keySet()) {
+			Set<ValidatorMetaData> value = _validators.get(projId);
+			if (value == null)continue;
 
 			if (value.contains(vmd)) {
 				value.remove(vmd);
-				_validators.put(key, value);
+				_validators.put(projId, value);
 			}
 		}
 	}
 
-	private Set createSet(String projNature) {
-		Set v = (Set) _validators.get(projNature);
+	private Set<ValidatorMetaData> createSet(String projNature) {
+		Set<ValidatorMetaData> v = _validators.get(projNature);
 		if (v == null) {
-			v = new HashSet();
+			v = new HashSet<ValidatorMetaData>();
 		}
 		return v;
 	}
@@ -388,6 +366,20 @@
 		}
 		return names;
 	}
+	
+	private String[] getContentTypeBindings(IConfigurationElement element){
+		IConfigurationElement[] bindings = element.getChildren(TAG_CONTENTTYPE);
+		if(bindings.length == 0)
+			return null;
+		String[] cTypeIDs = new String[bindings.length];
+		for (int i = 0; i < bindings.length; i ++){
+			
+			cTypeIDs[i] = bindings[i].getAttribute(ATT_CONTENTTYPEID);
+		}
+		
+		return cTypeIDs;
+		
+	}
 
 	/**
 	 * Given an IConfigurationElement from plugin.xml, if it has any filter tags, construct the
@@ -481,53 +473,36 @@
 		return helpers[0].getAttribute(ATT_CLASS);
 	}
 
-	/* package */static IWorkbenchContext createHelper(IConfigurationElement element, String helperClassName) {
+	static IWorkbenchContext createHelper(IConfigurationElement element, String helperClassName) {
 		IWorkbenchContext wh = null;
 		try {
 			wh = (IWorkbenchContext) element.createExecutableExtension(TAG_HELPER_CLASS);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.createHelper(IConfigurationElement, String)"); //$NON-NLS-1$
-				entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_SYNTAX_NO_HELPER_THROWABLE);
-				entry.setTargetException(exc);
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_HELPER_THROWABLE), new String[]{helperClassName});
-				entry.setText(result);				
-				//entry.setTokens(new String[]{helperClassName});
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (Exception exc) {
+			ValidationPlugin.getPlugin().handleException(exc);
+			String result = MessageFormat.format(
+				ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_HELPER_THROWABLE), 
+				new Object[]{helperClassName});
+			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, result);	
 			return null;
 		}
 		return wh;
 	}
 
-	/* package */static IValidator createValidator(IConfigurationElement element, String validatorClassName) {
+	static IValidator createValidator(IConfigurationElement element, String validatorClassName) {
 		IValidator validator = null;
 		try {
-			validator = (IValidator) element.createExecutableExtension(TAG_RUN_CLASS);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.createValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_THROWABLE);
-				//entry.setTokens(new String[]{validatorClassName});
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_THROWABLE), new String[]{validatorClassName});
-				entry.setText(result);				
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			validator = (IValidator) element.createExecutableExtension(ATT_CLASS);
+		} catch (Exception e) {
+			String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_THROWABLE), 
+				new Object[]{validatorClassName});
+			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, result);	
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 
 		if (validator == null) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.createValidator(IConfigurationElement, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_NULL);
-				entry.setTokens(new String[]{validatorClassName});
-				logger.write(Level.FINE, entry);
+			if (Tracing.isTraceV1()) {
+				Tracing.log("ValidationRegistryReader-02: ",  //$NON-NLS-1$
+					NLS.bind(ValMessages.VbfExcSyntaxNoValNull, validatorClassName));
 			}
 			return null;
 		}
@@ -672,7 +647,7 @@
 		return result;
 	}
 
-	private ValidatorMetaData.MigrationMetaData getMigrationMetaData(IConfigurationElement element, ValidatorMetaData vmd) {
+	private ValidatorMetaData.MigrationMetaData getMigrationMetaData(IConfigurationElement element) {
 		IConfigurationElement[] runChildren = element.getChildren(TAG_MIGRATE);
 		if ((runChildren == null) || (runChildren.length == 0)) {
 			return null;
@@ -687,7 +662,7 @@
 			return null;
 		}
 
-		ValidatorMetaData.MigrationMetaData mmd = vmd.new MigrationMetaData();
+		ValidatorMetaData.MigrationMetaData mmd = new ValidatorMetaData.MigrationMetaData();
 		for (int i = 0; i < migrateChildren.length; i++) {
 			IConfigurationElement migrateChild = migrateChildren[i];
 			String from = migrateChild.getAttribute(ATT_FROM);
@@ -746,12 +721,7 @@
 	 * Returns the singleton ValidationRegistryReader.
 	 */
 	public static ValidationRegistryReader getReader() {
-		if (inst == null) {
-			inst = new ValidationRegistryReader();
-
-			EventManager.getManager().setActive(true);
-		}
-		return inst;
+		return _inst;
 	}
 
 	public static boolean isActivated() {
@@ -767,21 +737,14 @@
 	 */
 	private IExtensionPoint getValidatorExtensionPoint() {
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IExtensionPoint extensionPoint = registry.getExtensionPoint(PLUGIN_ID, VALIDATOR_EXT_PT_ID);
+		IExtensionPoint extensionPoint = registry.getExtensionPoint(ValidationPlugin.PLUGIN_ID, VALIDATOR_EXT_PT_ID);
 		if (extensionPoint == null) {
 			// If this happens it means that someone removed the "validator" extension point
-			// declaration
-			// from our plugin.xml file.
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorExtensionPoint()"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_MISSING_VALIDATOR_EP);
-				//entry.setTokens(new String[]{ValidationPlugin.PLUGIN_ID + "." + VALIDATOR_EXT_PT_ID}); //$NON-NLS-1$
+			// declaration from our plugin.xml file.
+			if (Tracing.isTraceV1()) {
 				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_MISSING_VALIDATOR_EP),
-						new String[]{ValidationPlugin.PLUGIN_ID + "." + VALIDATOR_EXT_PT_ID});
-				entry.setText(result);		
-				logger.write(Level.FINE, entry);
+						new Object[]{ValidationPlugin.PLUGIN_ID + "." + VALIDATOR_EXT_PT_ID}); //$NON-NLS-1$
+				Tracing.log("ValidationRegistryReader-03: ", result);		 //$NON-NLS-1$
 			}
 		}
 		return extensionPoint;
@@ -794,13 +757,9 @@
 	public ValidatorMetaData getValidatorMetaData(IValidator validator) {
 		// retrieval will be in log(n) time
 		if (validator == null) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IValidator)"); //$NON-NLS-1$
-				entry.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_ORPHAN_IVALIDATOR, new String[]{"null"})); //$NON-NLS-1$
-				logger.write(Level.SEVERE, entry);
-			}
+				String message = ResourceHandler.getExternalizedMessage(
+					ResourceConstants.VBF_EXC_ORPHAN_IVALIDATOR, new String[]{"null"}); //$NON-NLS-1$
+				ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
 			return null;
 		}
 
@@ -812,19 +771,15 @@
 
 		// If we got here, then vmd is neither a root nor an aggregate validator,
 		// yet the IValidator exists. Internal error.
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IValidator)"); //$NON-NLS-1$
-			entry.setText(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_ORPHAN_IVALIDATOR, new String[]{validatorClassName}));
-			logger.write(Level.SEVERE, entry);
-		}
+		String message = ResourceHandler.getExternalizedMessage(
+				ResourceConstants.VBF_EXC_ORPHAN_IVALIDATOR, new String[]{validatorClassName});
+		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
 		return null;
 	}
 
-	public Set getValidatorMetaData(IWorkspaceRoot root) {
+	public Set<ValidatorMetaData> getValidatorMetaData(IWorkspaceRoot root) {
 		// Every validator on the Preferences page must be returned
-		Set copy = new HashSet();
+		Set<ValidatorMetaData> copy = new HashSet<ValidatorMetaData>();
 		clone(_indexedValidators.values(), copy);
 		return copy;
 	}
@@ -835,8 +790,8 @@
 	 * 
 	 * This is a long-running process. If you can, cache the result.
 	 */
-	public Set getValidatorMetaData(IProject project) {
-		Set copy = new HashSet();
+	public Set<ValidatorMetaData> getValidatorMetaData(IProject project) {
+		Set<ValidatorMetaData> copy = new HashSet<ValidatorMetaData>();
 		getValidatorMetaData(project, copy);
 		return copy;
 	}
@@ -844,19 +799,13 @@
 	/**
 	 * Copy the set of configured validator metadata into the Set.
 	 */
-	public void getValidatorMetaData(IProject project, Set vmds) {
-		if (vmds == null) {
-			return;
-		}
+	public void getValidatorMetaData(IProject project, Set<ValidatorMetaData> vmds) {
+		if (vmds == null)return;
 		vmds.clear();
 		int executionMap = 0x0;
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
 		try {
-			if (logger.isLoggingLevel(Level.FINEST)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IProject)"); //$NON-NLS-1$
-				entry.setText("IProject is " + String.valueOf(project)); //$NON-NLS-1$
-				logger.write(Level.FINEST, entry);
+			if (Tracing.isTraceV1()) {
+				Tracing.log("ValidationRegistryReader-04: IProject is " + String.valueOf(project)); //$NON-NLS-1$
 			}
 			if (project == null) {
 				executionMap |= 0x1;
@@ -866,23 +815,16 @@
 			String[] projectNatures = null;
 			try {
 				projectNatures = project.getDescription().getNatureIds();
-			} catch (CoreException exc) {
+			} catch (CoreException e) {
 				executionMap |= 0x2;
 				// vmds is already clear
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-					entry.setTargetException(exc);
-					entry.setExecutionMap(executionMap);
-					logger.write(Level.SEVERE, entry);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				return;
 			}
 			// If there are no project natures on a particular project,
 			// or if this project nature has no validators configured
 			// on it, return the validators which are configured on all
 			// projects.
-			Set projVmds = null;
 			if ((projectNatures == null) || (projectNatures.length == 0)) {
 				executionMap |= 0x4;
 				
@@ -896,10 +838,8 @@
 		        //  <test forcePluginActivation="true" property="foo.testProperty"/>
 		        // </enablement> 
 				
-				Set validatorsWithEnablementExpression = new HashSet();
-				Iterator allValidators = getAllValidators().iterator();
-				while (allValidators.hasNext()) {
-					ValidatorMetaData vmd = (ValidatorMetaData) allValidators.next();
+				Set<ValidatorMetaData> validatorsWithEnablementExpression = new HashSet<ValidatorMetaData>();
+				for (ValidatorMetaData vmd : getAllValidators()) {
 					if (isFacetEnabled(vmd, project)) {
 						validatorsWithEnablementExpression.add(vmd);
 					}
@@ -914,12 +854,8 @@
 
 			} else {
 				executionMap |= 0x8;
-				if (logger.isLoggingLevel(Level.FINEST)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IProject)"); //$NON-NLS-1$
-					// entry.setTokens(projectNatures);
-					entry.setText(projectNatures.toString());
-					logger.write(Level.FINEST, entry);
+				if (Tracing.isTraceV1()) {
+					Tracing.log("ValidationRegistryReader-05: ", projectNatures.toString()); //$NON-NLS-1$
 				}
 				calculateVmdsForNatureAndFacets(vmds, projectNatures,project);
 				// Now filter out the validators which must not run on this project
@@ -930,20 +866,13 @@
 				}
 			}
 		} finally {
-			if (logger.isLoggingLevel(Level.FINER)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(IProject)"); //$NON-NLS-1$
-				entry.setExecutionMap(executionMap);
-				
+			if (Tracing.isTraceV1()) {
 				StringBuffer buffer = new StringBuffer();
-				Iterator iterator = vmds.iterator();
-				while (iterator.hasNext()) {
-					ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+				for (ValidatorMetaData vmd : vmds) {
 					buffer.append(vmd.getValidatorUniqueName());
 					buffer.append("\n"); //$NON-NLS-1$
 				}
-				entry.setText(buffer.toString());
-				logger.write(Level.FINER, entry);
+				Tracing.log("ValidationRegistryReader-06: ", buffer.toString()); //$NON-NLS-1$
 			}
 		}
 	}
@@ -953,31 +882,22 @@
 	 * @param vmds
 	 * @param projectNatures
 	 */
-	private void calculateVmdsForNatureAndFacets(Set vmds, String[] projectNatures, IProject project) {
-		Set projVmds;
+	private void calculateVmdsForNatureAndFacets(Set<ValidatorMetaData> vmds, String[] projectNatures, IProject project) {
+		Set<ValidatorMetaData> projVmds;
 		String[] projectFacetIds = getProjectFacetIds(project);
-		Iterator allValidators = getAllValidators().iterator();
-		while (allValidators.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) allValidators.next();
+		for (ValidatorMetaData vmd : getAllValidators()) {
 			if (containsProjectFacet(vmd, projectFacetIds) || isFacetEnabled(vmd, project)) {
 				vmds.add(vmd);
 			}
 		}
-		for (int i = 0; i < projectNatures.length; i++) {
-			String projectNatureId = projectNatures[i];
-			projVmds = (Set) _validators.get(projectNatureId);
-			if (projVmds == null)
-				continue;
+		for (String projectNatureId : projectNatures) {
+			projVmds = _validators.get(projectNatureId);
+			if (projVmds == null)continue;
 
-			Iterator iterator = projVmds.iterator();
-			while (iterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+			for (ValidatorMetaData vmd : projVmds) {
 				if (!vmds.contains(vmd) && (vmd.getFacetFilters() == null || vmd.getFacetFilters().length == 0)) {
-					if (vmd.getEnablementExpresion() == null)
-						vmds.add(vmd);
-					else if (isFacetEnabled(vmd, project))
-						vmds.add(vmd);
-
+					if (vmd.getEnablementExpresion() == null)vmds.add(vmd);
+					else if (isFacetEnabled(vmd, project))vmds.add(vmd);
 				}
 			}
 		}
@@ -1004,7 +924,6 @@
 				return result == EvaluationResult.TRUE;
 			}
 		} catch (CoreException ce) {
-			Logger.getLogger().log(ce);
 		}
 		return false;
 	}
@@ -1022,7 +941,6 @@
 				return projectFacetIds;
 			}
 		} catch (CoreException ce) {
-			Logger.getLogger().log(ce);
 		}
 
 		return null;
@@ -1036,34 +954,21 @@
 	 * instance of a java project, then the AValidator is included by the java nature and excluded
 	 * by the J2EE nature. The AValidator would have to be removed from the set.
 	 */
-	private void removeExcludedProjects(IProject project, Set vmds) {
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.removeExcludedProjects"); //$NON-NLS-1$
-
-			StringBuffer buffer = new StringBuffer("\nBefore:\n"); //$NON-NLS-1$
-			Iterator viterator = vmds.iterator();
-			while (viterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) viterator.next();
+	private void removeExcludedProjects(IProject project, Set<ValidatorMetaData> vmds) {
+		if (Tracing.isTraceV1()) {
+			StringBuffer buffer = new StringBuffer("\nValidationRegistryReader-12: before:\n"); //$NON-NLS-1$
+			for (ValidatorMetaData vmd : vmds) {
 				buffer.append(vmd.getValidatorUniqueName());
 				buffer.append("\n"); //$NON-NLS-1$
 			}
-			entry.setText(buffer.toString());
-			logger.write(Level.FINEST, entry);
+			Tracing.log(buffer);
 		}
 
 		String[] projectNatures = null;
 		try {
 			projectNatures = project.getDescription().getNatureIds();
-		} catch (CoreException exc) {
-			// if there's no natures, there's no list.
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.getValidatorMetaData(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return;
 		}
 		if ((projectNatures == null) || (projectNatures.length == 0)) {
@@ -1072,17 +977,16 @@
 		}
 		for (int i = 0; i < projectNatures.length; i++) {
 			String nature = projectNatures[i];
-			Iterator iterator = vmds.iterator();
+			Iterator<ValidatorMetaData> iterator = vmds.iterator();
 			while (iterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+				ValidatorMetaData vmd = iterator.next();
 				ValidatorNameFilter[] natureFilters = vmd.getProjectNatureFilters();
 				if (natureFilters == null) {
 					// Can run on any project
 					continue;
 				}
 
-				for (int j = 0; j < natureFilters.length; j++) {
-					ValidatorNameFilter pn = natureFilters[j];
+				for (ValidatorNameFilter pn : natureFilters) {
 					if (nature.equals(pn.getNameFilter()) && !pn.isInclude()) {
 						iterator.remove();
 						break;
@@ -1091,30 +995,19 @@
 			}
 		}
 
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.removeExcludedProjects"); //$NON-NLS-1$
-
-			StringBuffer buffer = new StringBuffer("\nAfter:\n"); //$NON-NLS-1$
-			Iterator viterator = vmds.iterator();
-			while (viterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) viterator.next();
+		if (Tracing.isTraceV1()) {
+			StringBuffer buffer = new StringBuffer("\nValidationRegistryReader-13: after:\n"); //$NON-NLS-1$
+			for (ValidatorMetaData vmd : vmds) {
 				buffer.append(vmd.getValidatorUniqueName());
 				buffer.append("\n"); //$NON-NLS-1$
 			}
-			entry.setText(buffer.toString());
-			logger.write(Level.FINEST, entry);
+			Tracing.log(buffer);
 		}
 	}
 
+	@SuppressWarnings("unchecked")
 	private Collection clone(Collection input, Collection copy) {
-		if (input == null) {
-			return null;
-		}
-
-		if (copy == null) {
-			return null;
-		}
+		if (input == null || copy == null)return null;
 		copy.clear();
 		copy.addAll(input);
 		return copy;
@@ -1124,16 +1017,12 @@
 		StringBuffer buffer = new StringBuffer();
 		buffer.append("Project nature => validators configured"); //$NON-NLS-1$
 		buffer.append("\n"); //$NON-NLS-1$
-		Iterator viterator = _validators.keySet().iterator();
-		while (viterator.hasNext()) {
-			String projId = (String) viterator.next();
+		for (String projId : _validators.keySet()) {
 			buffer.append("projId: "); //$NON-NLS-1$
 			buffer.append(projId);
 			buffer.append("\n"); //$NON-NLS-1$
-			Set validators = (Set) _validators.get(projId);
-			Iterator innerIterator = validators.iterator();
-			while (innerIterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData) innerIterator.next();
+			Set<ValidatorMetaData> validators = _validators.get(projId);
+			for (ValidatorMetaData vmd : validators) {
 				buffer.append("\t"); //$NON-NLS-1$
 				buffer.append(vmd.getValidatorUniqueName());
 				buffer.append("\n"); //$NON-NLS-1$
@@ -1143,9 +1032,7 @@
 
 		buffer.append("Enable/disable validator by default"); //$NON-NLS-1$
 		buffer.append("\n"); //$NON-NLS-1$
-		viterator = _indexedValidators.values().iterator();
-		while (viterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) viterator.next();
+		for (ValidatorMetaData vmd : _indexedValidators.values()) {
 			buffer.append(vmd.getValidatorUniqueName());
 			buffer.append(" enabled? "); //$NON-NLS-1$
 			buffer.append(vmd.isEnabledByDefault());
@@ -1156,26 +1043,27 @@
 	}
 
 	public boolean isConfiguredOnProject(ValidatorMetaData vmd, IProject project) {
-		if (projectValidationMetaData == null)
-			projectValidationMetaData = new HashMap();
-
-		Object vmds = projectValidationMetaData.get(project);
+		Set<ValidatorMetaData> vmds = null;
+		synchronized(projectValidationMetaData){
+			vmds = projectValidationMetaData.get(project);
+		}
 		if (vmds != null) {
-			Set pvmds = (Set) vmds;
-			return pvmds.contains(vmd);
+			return vmds.contains(vmd);
 		} else {
-			Set prjVmds = getValidatorMetaData(project);
-			if (prjVmds == null) {
-				return false;
+			Set<ValidatorMetaData> prjVmds = getValidatorMetaData(project);
+			if (prjVmds == null || prjVmds.size() == 0)return false;
+			synchronized(projectValidationMetaData){
+				projectValidationMetaData.put(project, prjVmds);
 			}
-
-			if (prjVmds.size() == 0) {
-				return false;
-			}
-			projectValidationMetaData.put(project, prjVmds);
 			return prjVmds.contains(vmd);
 		}
 	}
+	
+	public void clearCachedMaps(){
+		synchronized(projectValidationMetaData){
+			projectValidationMetaData.clear();
+		}
+	}
 
 	/**
 	 * Return a set of ValidatorMetaData which are configured on all projects or which run on any
@@ -1185,10 +1073,10 @@
 	 * 
 	 * @see addExcludedRemainder()
 	 */
-	private Set getValidatorMetaDataUnknownProject() {
-		Set projVmds = (Set) _validators.get(UNKNOWN_PROJECT);
+	private Set<ValidatorMetaData> getValidatorMetaDataUnknownProject() {
+		Set<ValidatorMetaData> projVmds = _validators.get(UNKNOWN_PROJECT);
 		if (projVmds == null) {
-			projVmds = Collections.EMPTY_SET;
+			projVmds = new HashSet<ValidatorMetaData>();
 		}
 		return projVmds;
 	}
@@ -1196,8 +1084,8 @@
 	/**
 	 * Return a set of ValidatorMetaData which are enabled by default.
 	 */
-	public Set getValidatorMetaDataEnabledByDefault() {
-		Set copy = new HashSet();
+	public Set<ValidatorMetaData> getValidatorMetaDataEnabledByDefault() {
+		Set<ValidatorMetaData> copy = new HashSet<ValidatorMetaData>();
 		clone(_defaultEnabledValidators, copy);
 		return copy;
 	}
@@ -1219,34 +1107,21 @@
 	 * any code not in this package.
 	 */
 	public ValidatorMetaData getValidatorMetaData(String validatorClassName) {
-		if (validatorClassName == null) {
-			return null;
-		}
+		if (validatorClassName == null)return null;
 
-		ValidatorMetaData vmd = (ValidatorMetaData) _indexedValidators.get(validatorClassName);
-		if (vmd != null) {
-			return vmd;
-		}
+		ValidatorMetaData vmd2 = _indexedValidators.get(validatorClassName);
+		if (vmd2 != null)return vmd2;
 
 		// Check for an aggregate validator
-		Iterator iterator = _indexedValidators.values().iterator();
-		while (iterator.hasNext()) {
-			vmd = (ValidatorMetaData) iterator.next();
-			if (vmd == null) {
-				continue;
-			}
+		for (ValidatorMetaData vmd : _indexedValidators.values()) {
+			if (vmd == null)continue;
 
-			if (vmd.getValidatorUniqueName().equals(validatorClassName)) {
-				return vmd;
-			}
+			if (vmd.getValidatorUniqueName().equals(validatorClassName))return vmd;
 
 			String[] aggregateNames = vmd.getAggregatedValidatorNames();
 			if (aggregateNames != null) {
-				for (int i = 0; i < aggregateNames.length; i++) {
-					String aggregateName = aggregateNames[i];
-					if (validatorClassName.equals(aggregateName)) {
-						return vmd;
-					}
+				for (String aggregateName : aggregateNames) {
+					if (validatorClassName.equals(aggregateName))return vmd;
 				}
 			}
 
@@ -1258,15 +1133,13 @@
 				continue;
 			}
 
-			Set idList = mmd.getIds();
+			Set<String[]> idList = mmd.getIds();
 			if (idList == null) {
 				// Invalid <migrate> element.
 				continue;
 			}
 
-			Iterator idIterator = idList.iterator();
-			while (idIterator.hasNext()) {
-				String[] ids = (String[]) idIterator.next();
+			for (String[] ids : idList) {
 				if (ids.length != 2) {
 					// log
 					continue;
@@ -1302,37 +1175,22 @@
 	private ValidatorMetaData initializeValidator(IConfigurationElement element, String validatorName, String pluginId) {
 		IConfigurationElement[] runChildren = element.getChildren(TAG_RUN_CLASS);
 		if ((runChildren == null) || (runChildren.length < 1)) {
-			// How can an IValidatorImpl be created when there no class name to
-			// instantiate?
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.initializeValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_RUN);
-				//entry.setTokens(new String[]{validatorName});
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_RUN),
-						new String[]{validatorName});
-				entry.setText(result);
-				
-				logger.write(Level.FINE, entry);
+			// How can an IValidatorImpl be created when there no class name to instantiate?
+			if (Tracing.isLogging()) {
+				Tracing.log("ValidationRegistryReader-07: ", NLS.bind(ValMessages.VbfExcSyntaxNoValRun, validatorName));				 //$NON-NLS-1$
 			}
 			return null;
 		}
 
 		//WTP Bugzilla defect: 82338
-		//Using the Unique Identifier give the flexibility of the same validator class used by other validator extentions without writing a new validation class
+		//Using the Unique Identifier give the flexibility of the same validator class used by other validator extensions without writing a new validation class
 		//Reverting the fix back as the class name defined in the ext is unique to this validator and has to be used for the unique id in the validation metadata
 		String validatorImplName = runChildren[0].getAttribute(ATT_CLASS);
 		
 		if (validatorImplName == null) {
 			// Same as before; how can we instantiate when...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.initializeValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_CLASS);
-				entry.setTokens(new String[]{validatorName});
-				logger.write(Level.FINE, entry);
+			if (Tracing.isLogging()) {
+				Tracing.log("ValidationRegistryReader-08: ", NLS.bind(ValMessages.VbfExcSyntaxNoValClass, validatorName)); //$NON-NLS-1$
 			}
 			return null;
 		}
@@ -1340,13 +1198,8 @@
 		String helperImplName = getHelperName(element);
 		if (helperImplName == null) {
 			// Same as before; how can we instantiate when...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.initializeValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-				entry.setMessageTypeID(ResourceConstants.VBF_EXC_SYNTAX_NO_VAL_RUN);
-				entry.setTokens(new String[]{validatorImplName});
-				logger.write(Level.FINE, entry);
+			if (Tracing.isLogging()) {
+				Tracing.log("ValidationRegistryReader-09: ", NLS.bind(ValMessages.VbfExcSyntaxNoValRun, validatorImplName)); //$NON-NLS-1$
 			}
 			return null;
 		}
@@ -1361,34 +1214,18 @@
 		//
 		// To load a String into the constants space, call intern() on the String.
 		//
-		ValidatorMetaData vmd = new ValidatorMetaData();
-		vmd.addFilters(getFilters(element)); // validator may, or may not, have filters
-		vmd.addProjectNatureFilters(getProjectNatureFilters(element)); // validator may, or may not, specify a project nature
-		vmd.addFacetFilters(getFacetIds(element));//validator may or may not specify the facet
-		vmd.setEnablementElement(getEnablementElement(element));
-		vmd.addAggregatedValidatorNames(getAggregateValidatorsNames(element)); // if a validator
-		// aggregated another validator, it should identify
-		// the sub-validator(s)' class name
-		vmd.setValidatorDisplayName(validatorName.intern()); // validator must have a display name.
-		vmd.setValidatorUniqueName(validatorImplName.intern());
-		vmd.setPluginId(pluginId);
-		vmd.setIncremental(getIncremental(element));
-		vmd.setFullBuild(getFullBuild(element));
-		vmd.setAsync(getAsync(element));
-		vmd.setRuleGroup(getRuleGroup(element));
-		vmd.setEnabledByDefault(getEnabledByDefault(element));
-		vmd.setMigrationMetaData(getMigrationMetaData(element, vmd));
-		vmd.setHelperClass(element, helperImplName);
-		vmd.setValidatorClass(element); // associate the above attributes with the validator
-		vmd.addDependentValidator(getDependentValidatorValue(element));
-		initializeValidatorCustomMarkers(element, pluginId, vmd);
 		
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationRegistryReader.initializeValidator(IConfigurationElement, String, String)"); //$NON-NLS-1$
-			entry.setText("validator loaded: " + validatorImplName); //$NON-NLS-1$
-			logger.write(Level.FINEST, entry);
+		boolean async = getAsync(element);
+		String[] markerIds = initializeValidatorCustomMarkers(element, pluginId);
+		ValidatorMetaData vmd = new ValidatorMetaData(async, getAggregateValidatorsNames(element), getEnabledByDefault(element),
+				getIncremental(element), getFullBuild(element), element, helperImplName, getMigrationMetaData(element),
+				pluginId, getRuleGroup(element), runChildren[0], validatorName.intern(), validatorImplName.intern(),
+				getContentTypeBindings(element), getDependentValidatorValue(element), getEnablementElement(element),
+				getFacetIds(element), getFilters(element), getProjectNatureFilters(element), markerIds);
+		
+		
+		if (Tracing.isTraceV1()) {
+			Tracing.log("ValidationRegistryReader-10: validator loaded: " + validatorImplName); //$NON-NLS-1$
 		}
 
 		return vmd;
@@ -1399,24 +1236,25 @@
 	 * @param pluginId
 	 * @param vmd
 	 */
-	private void initializeValidatorCustomMarkers(IConfigurationElement element, String pluginId, ValidatorMetaData vmd) {
+	private String[] initializeValidatorCustomMarkers(IConfigurationElement element, String pluginId) {
+		String[] qualifiedMarkerIds = null;
 		String[] customMarkerIds = getMarkerIdsValue(element);
 		if (customMarkerIds != null && customMarkerIds.length > 0) {
-			String[] qualifiedMarkerIds = new String[customMarkerIds.length];
+			qualifiedMarkerIds = new String[customMarkerIds.length];
 			for (int i = 0; i < customMarkerIds.length; i++) {
 				String markerid = customMarkerIds[i];
-				if (markerid.lastIndexOf(".") != -1) {
-					String pluginID = markerid.substring(0, markerid.lastIndexOf("."));
+				if (markerid.lastIndexOf(".") != -1) { //$NON-NLS-1$
+					String pluginID = markerid.substring(0, markerid.lastIndexOf(".")); //$NON-NLS-1$
 					Bundle bundle = Platform.getBundle(pluginID);
 					if (bundle == null)
-						qualifiedMarkerIds[i] = pluginId + "." + customMarkerIds[i];
+						qualifiedMarkerIds[i] = pluginId + "." + customMarkerIds[i]; //$NON-NLS-1$
 					else
 						qualifiedMarkerIds[i] = customMarkerIds[i];
 				} else
-					qualifiedMarkerIds[i] = pluginId + "." + customMarkerIds[i];
+					qualifiedMarkerIds[i] = pluginId + "." + customMarkerIds[i]; //$NON-NLS-1$
 			}
-			vmd.setMarkerIds(qualifiedMarkerIds); //$NON-NLS-1$
 		}
+		return qualifiedMarkerIds;
 	}
 
 	private Expression getEnablementElement(IConfigurationElement element) {
@@ -1425,8 +1263,8 @@
 			return null;
 		try {
 			return ExpressionConverter.getDefault().perform(enablements[0]);
-		} catch (CoreException ce) {
-			Logger.getLogger().log(ce);
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 		return null;
 	}
@@ -1435,8 +1273,8 @@
 	 * This method should be called ONLY BY THE VALIDATION FRAMEWORK! The value from this method is
 	 * used to populate the validation preference page.
 	 */
-	public Collection getAllValidators() {
-		Set validators = new HashSet();
+	public Collection<ValidatorMetaData> getAllValidators() {
+		Set<ValidatorMetaData> validators = new HashSet<ValidatorMetaData>(50);
 		clone(_indexedValidators.values(), validators);
 		return validators;
 	}
@@ -1456,29 +1294,25 @@
 
 			String label = extension.getLabel();
 			if (label == null || label.equals("")) { //$NON-NLS-1$
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.FINE)) {
+				if (Tracing.isTraceV1()) {
 					String[] msgParm = {extension.getUniqueIdentifier()};
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationRegistryReader.readExtension(IExtension)"); //$NON-NLS-1$
-					entry.setMessageTypeID(ResourceConstants.VBF_EXC_VALIDATORNAME_IS_NULL);
-					//entry.setTokens(msgParm);
 					String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_VALIDATORNAME_IS_NULL),
-							msgParm);
-					entry.setText(result);					
-					logger.write(Level.FINE, entry);
+							(Object[])msgParm);
+					Tracing.log("ValidationRegistryReader-11: ", result); //$NON-NLS-1$
 				}
 			} else {
 				// If getLabel() returns an empty string, this is an illegal validator.
 				// The PropertyPage, and other status messages, need to have a displayable name for
 				// the validator.
-				String pluginId = extension.getNamespace();
-				ValidatorMetaData vmd = initializeValidator(element, label, pluginId);
-
-				if (vmd != null) {
-					// Add this validator to the list of validators; if vmd is null, the validator
-					// couldn't be created.
-					add(vmd);
+				String pluginId = extension.getContributor().getName();
+				if (Tracing.isEnabled(extension.getUniqueIdentifier())){
+					ValidatorMetaData vmd = initializeValidator(element, label, pluginId);
+	
+					if (vmd != null) {
+						// Add this validator to the list of validators; if vmd is null, the validator
+						// couldn't be created.
+						add(vmd);
+					}
 				}
 			}
 		}
@@ -1501,13 +1335,19 @@
 		for (int i = 0; i < extensions.length; i++) {
 			readExtension(extensions[i]);
 		}
+    
+    // Force the delegate validators registry to be read early to avoid
+    // the non-synchronized singleton issue which occurs when two delegating
+    // validators race to load the registry.
+    
+    ValidatorDelegatesRegistry.getInstance();
 	}
 
 	public IValidator getValidator(String validatorClassName) throws InstantiationException {
-		ValidatorMetaData vmd = (ValidatorMetaData) _indexedValidators.get(validatorClassName);
+		ValidatorMetaData vmd = _indexedValidators.get(validatorClassName);
 		if(vmd != null)
 			return vmd.getValidator();
 		return null;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationSelectionHandlerRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationSelectionHandlerRegistryReader.java
index 3876c4e..cf3ce9a 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationSelectionHandlerRegistryReader.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationSelectionHandlerRegistryReader.java
@@ -1,42 +1,38 @@
-/*
- * Created on Nov 23, 2004
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 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
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.validation.internal;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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
- *******************************************************************************/
-public class ValidationSelectionHandlerRegistryReader extends RegistryReader {
+public class ValidationSelectionHandlerRegistryReader {
 
 	public static final String VALIDATION_SELECTION_HANDLER = "validationSelectionHandler"; //$NON-NLS-1$
 	static final String ATT_ID = "id"; //$NON-NLS-1$ 
-	static final String ATT_HANDLER_CLASS = "handlerClass"; //$NON-NLS-1$
-	static final String ATT_SELECTION_TYPE = "selectionType"; //$NON-NLS-1$
-	private static ValidationSelectionHandlerRegistryReader INSTANCE = null;
-	private List validationSelectionHandlers = null;
 	
-	/**
-	 * Default constructor
-	 */
+	/** handlerClass - */
+	static final String ATT_HANDLER_CLASS = "handlerClass"; //$NON-NLS-1$
+	
+	static final String ATT_SELECTION_TYPE = "selectionType"; //$NON-NLS-1$
+	private static ValidationSelectionHandlerRegistryReader INSTANCE;
+	private List<IValidationSelectionHandler> _validationSelectionHandlers;
+	
 	public ValidationSelectionHandlerRegistryReader() {
-		super(ValidationPlugin.PLUGIN_ID, VALIDATION_SELECTION_HANDLER);
 	}
 	
 	public static ValidationSelectionHandlerRegistryReader getInstance() {
@@ -47,6 +43,36 @@
 		return INSTANCE;
 	}
 
+	/**
+	 * Read the extension point and parse it.
+	 */
+	public void readRegistry() {
+		IExtensionPoint point = Platform.getExtensionRegistry()
+			.getExtensionPoint(ValidationPlugin.PLUGIN_ID, VALIDATION_SELECTION_HANDLER);
+		if (point == null)return;
+		IConfigurationElement[] elements = point.getConfigurationElements();
+		for (int i = 0; i < elements.length; i++) {
+			internalReadElement(elements[i]);
+		}
+	}
+	
+	private void internalReadElement(IConfigurationElement element) {
+		boolean recognized = this.readElement(element);
+		if (!recognized) {
+			logError(element, "Error processing extension: " + element); //$NON-NLS-1$
+		}
+	}
+
+	/*
+	 * Logs the error in the desktop log using the provided text and the information in the configuration element.
+	 */
+	protected void logError(IConfigurationElement element, String text) {
+		IExtension extension = element.getDeclaringExtension();
+		StringBuffer buf = new StringBuffer();
+		buf.append("Plugin " + extension.getContributor().getName() + ", extension " + extension.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
+		buf.append("\n" + text); //$NON-NLS-1$
+		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, buf.toString());
+	}
 	
 
 	/* (non-Javadoc)
@@ -71,19 +97,17 @@
 	   return false;
 	}
 	
-	private List getValidationSelectionHandlers() {
-		if (validationSelectionHandlers == null)
-			validationSelectionHandlers = new ArrayList();
-		return validationSelectionHandlers;
+	private List<IValidationSelectionHandler> getValidationSelectionHandlers() {
+		if (_validationSelectionHandlers == null)
+			_validationSelectionHandlers = new ArrayList<IValidationSelectionHandler>();
+		return _validationSelectionHandlers;
 	}
 	
 	public Object getExtendedType(Object selection) {
 		Object result = null;
-		for (int i=0; i<getValidationSelectionHandlers().size(); i++ ) {
-			IValidationSelectionHandler handler = (IValidationSelectionHandler) getValidationSelectionHandlers().get(i);
+		for (IValidationSelectionHandler handler : getValidationSelectionHandlers()) {
 			result = handler.getBaseValidationType(selection);
-			if (result != null)
-				break;
+			if (result != null)break;
 		}
 		return result;
 	}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorFilter.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorFilter.java
index 8035a0c..d51a217 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorFilter.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorFilter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -12,26 +12,24 @@
 
 import org.eclipse.core.resources.IResource;
 
-
-
 /**
  * This class represents the plugin.xml tags, for a validator, for both name filters and type
  * filters. i.e., if an object has name filter and type filter specified, the filter filters out
  * objects which are not both of that type and named like the filter.
  */
 public class ValidatorFilter {
-	private ValidatorNameFilter _nameFilter = null;
-	private ValidatorTypeFilter _typeFilter = null;
-	private ValidatorActionFilter _actionFilter = null;
+	private ValidatorNameFilter _nameFilter;
+	private ValidatorTypeFilter _typeFilter;
+	private ValidatorActionFilter _actionFilter;
 
-	/* package */ValidatorFilter() {
+	ValidatorFilter() {
 		super();
 		_nameFilter = new ValidatorNameFilter();
 		_typeFilter = new ValidatorTypeFilter();
 		_actionFilter = new ValidatorActionFilter();
 	}
 
-	/* package */ValidatorFilter(String mustImplementClass) {
+	ValidatorFilter(String mustImplementClass) {
 		this();
 		_nameFilter = new ValidatorNameFilter();
 		_typeFilter.setMustImplementClass(mustImplementClass);
@@ -48,7 +46,7 @@
 	 * e.g. if the name filter is "*.java", and this resource is "readme.txt", this method will
 	 * return false. If the resource is named "readme.java", this method will return true.
 	 */
-	/* package */boolean isApplicableName(IResource resource) {
+	boolean isApplicableName(IResource resource) {
 		return _nameFilter.isApplicableName(resource);
 	}
 
@@ -58,7 +56,7 @@
 	 * e.g. if the type filter is "IFile", and this resource is "IProject", this method will return
 	 * false. If the resource is an IFile, this method will return true.
 	 */
-	/* package */boolean isApplicableType(IResource resource) {
+	boolean isApplicableType(IResource resource) {
 		return _typeFilter.isApplicableType(resource);
 	}
 
@@ -69,7 +67,7 @@
 	/**
 	 * Sets the name filter.
 	 */
-	/* package */void setNameFilter(String filter, String isCaseSensitiveString) {
+	void setNameFilter(String filter, String isCaseSensitiveString) {
 		_nameFilter.setNameFilter(filter);
 		if(filter != null)
 			  _nameFilter.setNameFilterExtension(getFilterExt(filter));
@@ -77,14 +75,14 @@
 	}
 	
 	private String getFilterExt(String filter) {
-		return filter.substring(filter.indexOf(".") + 1);
+		return filter.substring(filter.indexOf(".") + 1); //$NON-NLS-1$
 	}
 	
 
 	/**
 	 * Sets the type filter.
 	 */
-	/* package */void setTypeFilter(String filter) {
+	void setTypeFilter(String filter) {
 		_typeFilter.setTypeFilter(filter);
 	}
 
@@ -108,4 +106,4 @@
 	public ValidatorNameFilter get_nameFilter() {
 		return _nameFilter;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java
index d5a101d..90da739 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -18,19 +18,22 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
 
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.core.runtime.content.IContentDescription;
+import org.eclipse.core.runtime.content.IContentType;
 import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
 import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
 import org.eclipse.wst.validation.internal.operations.WorkbenchContext;
 import org.eclipse.wst.validation.internal.plugin.ValidationHelperRegistryReader;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 import org.eclipse.wst.validation.internal.provisional.core.IValidatorJob;
 import org.osgi.framework.Bundle;
@@ -41,82 +44,82 @@
  * ValidatorMetaData; it is for use by the base framework only.
  */
 public class ValidatorMetaData {
-	private ValidatorFilter[] _filters = null;
-	private ValidatorNameFilter[] _projectNatureFilters = null;
-	private String[] facetFilters = null;
-	private IValidator _validator = null;
-	private IWorkbenchContext _helper = null;
-	private String _validatorDisplayName = null;
-	private String _validatorUniqueName = null;
-	private String[] _aggregatedValidators = null;
-	private String[] _validatorNames = null;
-	private String _pluginId = null;
-	private boolean _supportsIncremental = RegistryConstants.ATT_INCREMENTAL_DEFAULT;
-	private boolean _supportsFullBuild = RegistryConstants.ATT_FULLBUILD_DEFAULT;
-	private Logger _logger = null;
-	private boolean _isEnabledByDefault = RegistryConstants.ATT_ENABLED_DEFAULT;
-	private MigrationMetaData _migrationMetaData = null;
-	private int _ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT;
-	private boolean _async = RegistryConstants.ATT_ASYNC_DEFAULT;
-	private boolean dependentValidator = RegistryConstants.DEP_VAL_VALUE_DEFAULT;
-	private String[] markerIds = null;
-	private String _helperClassName = null;
-	private IConfigurationElement _helperClassElement = null;
-	private IConfigurationElement _validatorClassElement = null;
-	private boolean _cannotLoad = false;
-	private boolean manualValidation = true;
-	private boolean buildValidation = true;
-	private Map helpers = Collections.synchronizedMap( new HashMap() );
-	private Expression enablementExpression = null;
-
-	/* package */ValidatorMetaData() {
-		//default
-	}
-
+	private final ValidatorFilter[] _filters;
+	private final ValidatorNameFilter[] 	_projectNatureFilters;
+	private final String[]			_facetFilters;
+	private final AtomicReference<IValidator>	_validator = new AtomicReference<IValidator>();
+	private final AtomicReference<IWorkbenchContext> 		_helper = new AtomicReference<IWorkbenchContext>();
+	private final String 			_validatorDisplayName;
+	private final String 			_validatorUniqueName;
+	
 	/**
-	 * Add to the list of class names of every validator which this validator aggregates. For
+	 * The list of class names of every validator which this validator aggregates. For
 	 * example, if the EJB Validator instantiated another validator, and started its validate
 	 * method, then that instantiated class' name should be in this list.
 	 */
-	/* package */void addAggregatedValidatorNames(String[] val) {
-		_aggregatedValidators = val;
-	}
+	private final String[] 	_aggregatedValidators;
+    private final String[] 	_contentTypeIds;
+	private final String[] 	_validatorNames;
+	private final String 	_pluginId;
+	private final boolean	_supportsIncremental;
+	private final boolean 	_supportsFullBuild;
+	private final boolean 	_isEnabledByDefault;
+	private final MigrationMetaData _migrationMetaData;
+	private final int 		_ruleGroup;
+	private final boolean 	_async;
+	private final boolean 	_dependentValidator;
+	private final String[]	_markerIds;
+	private final String 	_helperClassName;
+	private final IConfigurationElement _helperClassElement;
+	private final IConfigurationElement _validatorClassElement;
+	private volatile boolean 	_cannotLoad;
+	private volatile boolean 	_manualValidation = true;
+	private volatile boolean	_buildValidation = true;
+	private final Map<IValidatorJob, IWorkbenchContext> _helpers = 
+		Collections.synchronizedMap( new HashMap<IValidatorJob, IWorkbenchContext>() );
+	private final Expression 		_enablementExpression;
 
-	/**
-	 * Add the name/type filter pair(s).
-	 */
-	/* package */void addFilters(ValidatorFilter[] filters) {
+	ValidatorMetaData(boolean async, String[] aggregatedValidators, boolean isEnabledByDefault, boolean supportsIncremental,
+			boolean supportsFullBuild, IConfigurationElement helperClassElement, String helperClassName, 
+			MigrationMetaData migrationMetaData, String pluginId, int ruleGroup, IConfigurationElement validatorClassElement,
+			String validatorDisplayName, String validatorUniqueName, String[] contentTypeIds, boolean dependentValidator,
+			Expression enablementExpression, String[] facetFilters, ValidatorFilter[] filters,
+			ValidatorNameFilter[] projectNatureFilters, String[] markerIds) {
+		_async = async;
+		_aggregatedValidators = aggregatedValidators;
+		_isEnabledByDefault = isEnabledByDefault;
+		_supportsIncremental = supportsIncremental;
+		_supportsFullBuild = supportsFullBuild;
+		_helperClassElement = helperClassElement;
+		_helperClassName = helperClassName;
+		_migrationMetaData = migrationMetaData;
+		_pluginId = pluginId;
+		_ruleGroup = ruleGroup;
+		_validatorClassElement = validatorClassElement;
+		_validatorDisplayName = validatorDisplayName;
+		_validatorUniqueName = validatorUniqueName;
+		_contentTypeIds = contentTypeIds;
+		_dependentValidator = dependentValidator;
+		_enablementExpression = enablementExpression;
+		_facetFilters = facetFilters;
 		_filters = filters;
+		_projectNatureFilters = projectNatureFilters;
+		_markerIds = markerIds;
+		_validatorNames = buildValidatorNames();
 	}
-
-	/**
-	 * Add the project nature filter(s).
-	 */
-	/* package */void addProjectNatureFilters(ValidatorNameFilter[] filters) {
-		_projectNatureFilters = filters;
-	}
-	
-	/**
-	 * Add the facet  filter(s).
-	 */
-	protected void addFacetFilters(String[] filters) {
-		facetFilters = filters;
-	}
-	
+		
 	protected String[] getFacetFilters() {
-		return facetFilters;
+		return _facetFilters;
 	}
 
-	public List getNameFilters() {
-		List nameFilters = new ArrayList();
+	public List<String> getNameFilters() {
+		List<String> nameFilters = new ArrayList<String>();
 		if (_filters != null && _filters.length > 0) {
-			for (int i = 0; i < _filters.length; i++) {
-				ValidatorFilter filter = _filters[i];
+			for (ValidatorFilter filter : _filters) {
 				ValidatorNameFilter nameFilter = filter.get_nameFilter();
 				if (nameFilter != null) {
 					nameFilters.add(nameFilter.getNameFilter());
 				}
-
 			}
 		}
 		return nameFilters;
@@ -126,16 +129,18 @@
 	 * Return the list of class names of the primary validator and its aggregates.
 	 */
 	public String[] getValidatorNames() {
-		if (_validatorNames == null) {
-			int aLength = (_aggregatedValidators == null) ? 0 : _aggregatedValidators.length;
-			_validatorNames = new String[aLength + 1]; // add 1 for the primary validator name
-			_validatorNames[0] = getValidatorUniqueName();
-			if (_aggregatedValidators != null) {
-				System.arraycopy(_aggregatedValidators, 0, _validatorNames, 1, aLength);
-			}
-		}
 		return _validatorNames;
 	}
+	
+	private String[] buildValidatorNames() {
+		int aLength = (_aggregatedValidators == null) ? 0 : _aggregatedValidators.length;
+		String [] validatorNames = new String[aLength + 1]; // add 1 for the primary validator name
+		validatorNames[0] = getValidatorUniqueName();
+		if (_aggregatedValidators != null) {
+			System.arraycopy(_aggregatedValidators, 0, validatorNames, 1, aLength);
+		}
+		return validatorNames;
+	}
 
 	/**
 	 * Return the list of class names of every validator which this validator aggregates. For
@@ -191,30 +196,25 @@
 	//TODO just want to remember to figure out the many-temporary-objects problem if this method
 	// continues to new an IValidationContext every time - Ruth
 	public IWorkbenchContext getHelper(IProject project) throws InstantiationException {
-		if (_helper == null) {
-			_helper = ValidationRegistryReader.createHelper(_helperClassElement, _helperClassName);
-			if (_helper == null) {
-				_helper = new WorkbenchContext();
-				//setCannotLoad();
-				//throw new InstantiationException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_DISABLEH, new String[]{_helperClassName, getValidatorUniqueName()}));
-			}
-			// Won't be using the element & name again, so clear them.
-			//_helperClassElement = null;
-			//_helperClassName = null;
+		IWorkbenchContext helper = _helper.get();
+		if (helper != null){
+			IProject oldProject = helper.getProject();
+			if ((oldProject == null) || !(oldProject.equals(project)))helper.setProject(project);
+			return helper;
 		}
-		if ((_helper.getProject() == null) || !(_helper.getProject().equals(project))) {
-			// Initialize helper with the new project
-			_helper.setProject(project);
+		
+		helper = ValidationRegistryReader.createHelper(_helperClassElement, _helperClassName);
+		if (helper == null)helper = new WorkbenchContext();
+		
+		if ((helper.getProject() == null) || !(helper.getProject().equals(project))) {
+			helper.setProject(project);
 		}
-		return _helper;
+		if (_helper.compareAndSet(null, helper))return helper;
+		return _helper.get();
 	}
 
 	/**
 	 * cannotLoad is false if both the IValidator and IWorkbenchContext instance can be instantiated.
-	 * This method should be called only by the validation framework, and only if an
-	 * InstantiationException was thrown.
-	 * 
-	 * @param can
 	 */
 	private void setCannotLoad() {
 		_cannotLoad = true;
@@ -229,23 +229,6 @@
 		return _cannotLoad;
 	}
 
-	/**
-	 * This method must not be called until the unique id of the validator has been initialized.
-	 */
-	public Logger getMsgLogger() {
-		if (_logger == null) {
-			_logger = ValidationPlugin.getPlugin().getMsgLogger();
-			/*
-			 * // Decided against having a logger for each validator because each validator // would
-			 * need to contribute an extension in their plugins for it to be recognized // by the
-			 * logging preference page. For now, just use the validation framework's logger. _logger =
-			 * (MsgLogger)MsgLogger.getFactory().getLogger(getValidatorUniqueName());
-			 * _logger.write(Level.CONFIG, getValidatorDisplayName());
-			 */
-		}
-		return _logger;
-	}
-
 	public MigrationMetaData getMigrationMetaData() {
 		return _migrationMetaData;
 	}
@@ -260,7 +243,7 @@
 	/**
 	 * Return the filters which identify which project(s) this validator may run on.
 	 */
-	/* package */ValidatorNameFilter[] getProjectNatureFilters() {
+	ValidatorNameFilter[] getProjectNatureFilters() {
 		return _projectNatureFilters;
 	}
 
@@ -268,23 +251,19 @@
 	 * This method returns the validator if it can be loaded; if the validator cannot be loaded,
 	 * e.g., if its plugin is disabled for some reason, then this method throws an
 	 * InstantiationException. Before the CoreException is thrown, this validator is disabled.
-	 * 
-	 * @return IValidator
-	 * @throws InstantiationException
 	 */
 	public IValidator getValidator() throws InstantiationException {
-		if (_validator == null) {
-			_validator = ValidationRegistryReader.createValidator(_validatorClassElement, getValidatorUniqueName());
+		IValidator val = _validator.get();
+		if (val != null)return val;
+		
+		val = ValidationRegistryReader.createValidator(_validatorClassElement, getValidatorUniqueName());
 
-			// Since the element won't be used any more, clear it.
-			//_validatorClassElement = null;
-
-			if (_validator == null) {
-				setCannotLoad();
-				throw new InstantiationException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_DISABLEV, new String[]{getValidatorUniqueName()}));
-			}
+		if (val == null) {
+			setCannotLoad();
+			throw new InstantiationException(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_DISABLEV, new String[]{getValidatorUniqueName()}));
 		}
-		return _validator;
+		if (_validator.compareAndSet(null, val))return val;
+		return _validator.get();
 	}
 
 	public String getValidatorDisplayName() {
@@ -314,9 +293,9 @@
 	 */
 	public boolean isApplicableTo(IResource resource, int resourceDelta) {
 		// If no filters are specified, then every type of resource should be validated/trigger a
-		// rebuild of the model cache
-		if (_filters == null)
-			return true;
+		// rebuild of the model cache.
+		// Also make sure no content type id is specified (BUG 193816)
+		if (_filters == null  && getContentTypeIds() == null)return true;
 
 		return isApplicableTo(resource, resourceDelta, _filters);
 	}
@@ -324,19 +303,29 @@
 	/**
 	 * Return true if the resource passes the name/type filters for this validator.
 	 */
-	/* package */boolean isApplicableTo(IResource resource, int resourceDelta, ValidatorFilter[] filters) {
+	boolean isApplicableTo(IResource resource, int resourceDelta, ValidatorFilter[] filters) {
 		// Are any of the filters satisfied? (i.e., OR them, not AND them.)
-		if (checkIfValidSourceFile(resource)) {
-			for (int i = 0; i < filters.length; i++) {
-				ValidatorFilter filter = filters[i];
-				if (filter.isApplicableType(resource) &&
-					filter.isApplicableName(resource) &&
-					filter.isApplicableAction(resourceDelta)){
+		// make sure filters is not null (BUG 193816)
+		if (filters != null && checkIfValidSourceFile(resource)) {
+			for (ValidatorFilter filter : filters) {
+				if (filter.isApplicableType(resource)
+						&& filter.isApplicableName(resource)
+						&& filter.isApplicableAction(resourceDelta)) {
 					return true;
-                }
-
+				}
 			}
 		}
+		if (getContentTypeIds() != null) {
+			IContentDescription description = null;
+			try {
+				if (resource.getType() == IResource.FILE && resource.exists())
+					description = ((IFile) resource).getContentDescription();
+			} catch (CoreException e) {
+				//Resource exceptions
+			}
+			if (description == null)return false;
+			if (isApplicableContentType(description))return true;
+		}
 		return false;
 	}
 
@@ -420,129 +409,55 @@
 		return _async;
 	}
 
-	/* package */void setHelperClass(IConfigurationElement element, String helperClassName) {
-		_helperClassElement = element;
-		_helperClassName = helperClassName;
-	}
-
-	/* package */void setEnabledByDefault(boolean enabledByDefault) {
-		_isEnabledByDefault = enabledByDefault;
-	}
-
-	/* package */void setIncremental(boolean isIncremental) {
-		_supportsIncremental = isIncremental;
-	}
-
-	/* package */void setFullBuild(boolean fullBuild) {
-		_supportsFullBuild = fullBuild;
-	}
-
-	/* package */void setAsync(boolean isAsync) {
-		_async = isAsync;
-	}
-
-	/* package */void setMigrationMetaData(MigrationMetaData mmd) {
-		_migrationMetaData = mmd;
-	}
-
-	/* package */void setRuleGroup(int ruleGroup) {
-		_ruleGroup = ruleGroup;
-	}
-
-	/* package */void setValidatorClass(IConfigurationElement element) {
-		_validatorClassElement = element;
-		// validator class name == validatorUniqueName
-	}
-
-	/* package */void setValidatorDisplayName(String validatorName) {
-		_validatorDisplayName = validatorName;
-	}
-
-	/* package */void setValidatorUniqueName(String validatorUniqueName) {
-		_validatorUniqueName = validatorUniqueName;
-	}
-
-	/* package */void setPluginId(String validatorPluginId) {
-		_pluginId = validatorPluginId;
-	}
-
 	public String toString() {
 		return getValidatorUniqueName();
 	}
 
-	public class MigrationMetaData {
-		private Set _ids = null;
+	public final static class MigrationMetaData {
+		private Set<String[]> _ids;
 
 		public MigrationMetaData() {
-			//default
 		}
 
 		public void addId(String oldId, String newId) {
-			if (oldId == null) {
-				// log
-				return;
-			}
-
-			if (newId == null) {
-				// log
-				return;
-			}
+			if (oldId == null)return;
+			if (newId == null)return;
 
 			String[] ids = new String[]{oldId, newId};
 			getIds().add(ids);
 		}
 
-		public Set getIds() {
-			if (_ids == null) {
-				_ids = new HashSet();
-			}
+		public Set<String[]> getIds() {
+			if (_ids == null)_ids = new HashSet<String[]>();
 			return _ids;
 		}
 	}
 
-	/**
-	 * @param b
-	 */
-	public void addDependentValidator(boolean b) {
-		dependentValidator = b;
-	}
-
-	/**
-	 * @param b
-	 */
 	public boolean isDependentValidator() {
-		return dependentValidator;
+		return _dependentValidator;
 	}
 
 	/**
 	 * @return Returns the markerId.
 	 */
 	public String[] getMarkerIds() {
-		return markerIds;
-	}
-
-	/**
-	 * @param markerId
-	 *            The markerId to set.
-	 */
-	public void setMarkerIds(String[] markerId) {
-		this.markerIds = markerId;
+		return _markerIds;
 	}
 
 	public boolean isBuildValidation() {
-		return buildValidation;
+		return _buildValidation;
 	}
 
 	public void setBuildValidation(boolean buildValidation) {
-		this.buildValidation = buildValidation;
+		_buildValidation = buildValidation;
 	}
 
 	public boolean isManualValidation() {
-		return manualValidation;
+		return _manualValidation;
 	}
 
 	public void setManualValidation(boolean manualValidation) {
-		this.manualValidation = manualValidation;
+		_manualValidation = manualValidation;
 	}
   
 	/**
@@ -569,15 +484,15 @@
 	}	  
 	
    public void addHelper( IValidatorJob validator, IWorkbenchContext helper ){
-	   helpers.put( validator, helper );
+	   _helpers.put( validator, helper );
    }
    
    public void removeHelper( IValidatorJob validator ){
-	   helpers.remove( validator );
+	   _helpers.remove( validator );
    }
    
    private IWorkbenchContext getHelper( IValidatorJob validator ){
-	   return (IWorkbenchContext)helpers.get( validator );
+	   return _helpers.get( validator );
    }   
    
    public IWorkbenchContext getHelper( IProject project, IValidator validator ){
@@ -607,12 +522,25 @@
    }   
    
    public Expression getEnablementExpresion() {
-		return enablementExpression;
+		return _enablementExpression;
 	}
 
-   public void setEnablementElement(Expression enablementElement) {
-	 enablementExpression = enablementElement;
+public String[] getContentTypeIds() {
+	return _contentTypeIds;
+}
+
+ 
+private boolean isApplicableContentType(IContentDescription desc){
+	
+	IContentType ct = desc.getContentType();
+	String[] applicableContentTypes = getContentTypeIds();
+	if (applicableContentTypes != null) {
+		for (int i = 0; i < applicableContentTypes.length; i ++){
+			if(applicableContentTypes[i].equals(ct.getId()))
+				return true;
+		}
 	}
+	return false;
+}
    
-   
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorNameFilter.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorNameFilter.java
index f80648c..946cfba 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorNameFilter.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorNameFilter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -20,8 +20,8 @@
  * this class would store the "*.*", and provide the wildcard matching functionality.
  */
 public class ValidatorNameFilter {
-	private String _nameFilter = null;
-	private String nameFilterExtension = null;
+	private String _nameFilter;
+	private String nameFilterExtension;
 	private boolean _include = true; // by default, filter in the IFile specified
 	private final static String WILDCARD = "*"; //$NON-NLS-1$
 	private boolean _isCaseSensitive = true; // by default, the filter name is case-sensitive
@@ -29,29 +29,29 @@
 	/**
 	 * Insert the method's description here. Creation date: (12/4/00 11:08:41 AM)
 	 */
-	/* package */ValidatorNameFilter() {
+	ValidatorNameFilter() {
 		//default
 	}
 
 	/**
 	 * Get the filter, as specified in plugin.xml
 	 */
-	/* package */String getNameFilter() {
+	String getNameFilter() {
 		return _nameFilter;
 	}
 
-	/* package */boolean isCaseSensitive() {
+	boolean isCaseSensitive() {
 		return _isCaseSensitive;
 	}
 
-	/* package */boolean isInclude() {
+	boolean isInclude() {
 		return _include;
 	}
 
 	/**
 	 * Return true if the given resource is both applicable and include="true".
 	 */
-	/* package */boolean isApplicableTo(IResource resource) {
+	boolean isApplicableTo(IResource resource) {
 		return (isApplicableName(resource) && isInclude());
 	}
 	
@@ -75,12 +75,12 @@
 		if (name.equalsIgnoreCase(_nameFilter))
 			return true;
 
-		int indexOfStarDot = _nameFilter.indexOf("*.");
+		int indexOfStarDot = _nameFilter.indexOf("*."); //$NON-NLS-1$
 
-		//return value if the fileter name extension matches the extension
+		//return value if the filter name extension matches the extension
 		//of the resource 
 		if (indexOfStarDot != -1) {
-			String nameExtension = name.substring(name.lastIndexOf(".") + 1);
+			String nameExtension = name.substring(name.lastIndexOf(".") + 1); //$NON-NLS-1$
 			return nameFilterExtension.equalsIgnoreCase(nameExtension);
 		}
 
@@ -91,7 +91,7 @@
 		return verifyNameMatch(_nameFilter, name);
 	}
 
-	/* package */void setInclude(String includeValue) {
+	void setInclude(String includeValue) {
 		if (includeValue != null) {
 			setInclude(Boolean.valueOf(includeValue).booleanValue());
 		}
@@ -104,11 +104,11 @@
 	/**
 	 * Set the filter, as specified in plugin.xml
 	 */
-	/* package */void setNameFilter(String filter) {
+	void setNameFilter(String filter) {
 		_nameFilter = filter;
 	}
 
-	/* package */void setCaseSensitive(String isCaseSensitiveString) {
+	void setCaseSensitive(String isCaseSensitiveString) {
 		if (isCaseSensitiveString != null) {
 			// only change the value from the default if the case-sensitive attribute is defined
 			_isCaseSensitive = Boolean.valueOf(isCaseSensitiveString).booleanValue();
@@ -127,7 +127,7 @@
 	 * 
 	 * The only filter wildcard allowed is '*'.
 	 */
-	/* package */static boolean verifyNameMatch(final String filter, String name) {
+	static boolean verifyNameMatch(final String filter, String name) {
 		/*
 		 * There are eight possible wildcard combinations, given that a wildcard may, if present, be
 		 * at the beginning, middle, or end of a name; or any combination of those positions. i.e.,
@@ -167,4 +167,4 @@
 		}
 		return true;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorTypeFilter.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorTypeFilter.java
index 0f00ce3..f495aa6 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorTypeFilter.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorTypeFilter.java
@@ -1,22 +1,18 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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.wst.validation.internal;
 
 import java.text.MessageFormat;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IResource;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 /**
  * Represents a type filter tag in a validator's plugin.xml file. e.g. &lt;filter
@@ -24,17 +20,17 @@
  * provide the "instanceof" matching functionality.
  */
 public class ValidatorTypeFilter {
-	private Class _typeFilterClass = null;
-	private String _mustImplementClass = null; // the type set in setTypeFilter must implement the
+	private Class _typeFilterClass;
+	private String _mustImplementClass; // the type set in setTypeFilter must implement the
 
 	// class/interface identified by this fully-qualified
 	// Java string.
 
-	/* package */ValidatorTypeFilter() {
+	ValidatorTypeFilter() {
 		//default
 	}
 
-	/* package */ValidatorTypeFilter(String mustImplementClass) {
+	ValidatorTypeFilter(String mustImplementClass) {
 		setMustImplementClass(mustImplementClass);
 	}
 
@@ -42,14 +38,14 @@
 	 * Type filters are allowed only for certain types of classes. This method returns the name of
 	 * the class which this type must implement before it can be a filter.
 	 */
-	/* package */String getMustImplementClass() {
+	String getMustImplementClass() {
 		return _mustImplementClass;
 	}
 
 	/**
 	 * Return the type filter as a java.lang.Class object.
 	 */
-	/* package */Class getTypeFilterClass() {
+	Class getTypeFilterClass() {
 		return _typeFilterClass;
 	}
 
@@ -71,7 +67,7 @@
 	/**
 	 * Checks if filterClass is a parent (interface or superclass) of objectClass.
 	 */
-	/* package */boolean isInstance(Class objectClass, Class filterClass) {
+	boolean isInstance(Class objectClass, Class filterClass) {
 		// The java.lang.Class.isInstance call doesn't check interfaces fully.
 		// i.e., if I have two interfaces, A and B, and B extends A but
 		// doesn't implement A, then the isInstance call will return false.
@@ -96,7 +92,7 @@
 	 * Type filters are allowed only for certain types of classes. This method sets the name of the
 	 * class which this type must implement before it can be a filter.
 	 */
-	/* package */void setMustImplementClass(String className) {
+	void setMustImplementClass(String className) {
 		_mustImplementClass = className;
 	}
 
@@ -104,7 +100,7 @@
 	 * If the filter implements the mustImplementClass (in ValidatorFilter's case, IResource), then
 	 * this is a valid filter, and store the filter value.
 	 */
-	/* package */void setTypeFilter(String filter) {
+	void setTypeFilter(String filter) {
 		Class filterClass = null;
 		Class mustImplementClass = null;
 
@@ -121,26 +117,19 @@
 				// If the filter class is not an instance of mustImplementClass
 				if (!isInstance(filterClass, mustImplementClass)) {
 					_typeFilterClass = null;
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.FINE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidatorTypeFilter.setTypeFilter(String)"); //$NON-NLS-1$
-						entry.setMessageTypeID(ResourceConstants.VBF_EXC_INVALID_TYPE_FILTER);
-						String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_TYPE_FILTER), new String[]{filter, getMustImplementClass()});
-						entry.setText(result);						
-						//entry.setTokens(new String[]{filter, getMustImplementClass()});
-						logger.write(Level.FINE, entry);
+					if (Tracing.isLogging()) {
+						String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_TYPE_FILTER), 
+							new Object[]{filter, getMustImplementClass()});
+						Tracing.log("ValidatorTypeFilter-01: ", result); //$NON-NLS-1$
 					}
 				}
 			}
 		} catch (ClassNotFoundException exc) {
 			_typeFilterClass = null;
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorTypeFilter.setTypeFilter(String)"); //$NON-NLS-1$
-				entry.setText("The class named " + filter + " cannot be instantiated because it does not exist. Check the spelling of the name, in the validator's plugin.xml contribution, and try restarting eclipse again."); //$NON-NLS-1$  //$NON-NLS-2$
-				logger.write(Level.FINE, entry);
+			if (Tracing.isLogging()) {
+				Tracing.log("ValidatorTypeFilter-02: The class named " + filter +  //$NON-NLS-1$
+					" cannot be instantiated because it does not exist. Check the spelling of the name, " + //$NON-NLS-1$
+					"in the validator's plugin.xml contribution, and try restarting eclipse again."); //$NON-NLS-1$
 			}
 			return;
 		}
@@ -154,4 +143,4 @@
 		buffer.append("     _mustImplementClass = " + _mustImplementClass); //$NON-NLS-1$
 		return buffer.toString();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/DelegatingValidator.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/DelegatingValidator.java
index 0daf071..d143f9b 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/DelegatingValidator.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/DelegatingValidator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 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
@@ -15,8 +15,13 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.wst.validation.AbstractValidator;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationState;
 import org.eclipse.wst.validation.internal.ConfigurationManager;
 import org.eclipse.wst.validation.internal.ProjectConfiguration;
 import org.eclipse.wst.validation.internal.ResourceConstants;
@@ -50,11 +55,8 @@
  * API will almost certainly be broken (repeatedly) as the API evolves.
  * </p>
  */
-public class DelegatingValidator implements IDelegatingValidator
+public class DelegatingValidator extends AbstractValidator implements IDelegatingValidator
 {
-  /**
-   * Default constructor.
-   */
   public DelegatingValidator()
   {
   }
@@ -78,7 +80,7 @@
    */
   public void validate(IValidationContext helper, IReporter reporter) throws ValidationException
   {
-    // Apparently this method will not be called on an IValidatorJob.
+    validateInJob(helper, reporter);
   }
 
   /**
@@ -260,4 +262,9 @@
   {
     return null;
   }
+
+@Override
+public ValidationResult validate(IResource resource, int kind, ValidationState state, IProgressMonitor monitor) {
+	return null;
+}
 }
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegateDescriptor.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegateDescriptor.java
index 21312cb..51910e0 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegateDescriptor.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegateDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 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
@@ -13,125 +13,142 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.wst.validation.AbstractValidator;
 import org.eclipse.wst.validation.internal.ResourceConstants;
 import org.eclipse.wst.validation.internal.ResourceHandler;
 import org.eclipse.wst.validation.internal.ValidationRegistryReader;
+import org.eclipse.wst.validation.internal.ValidatorMetaData;
 import org.eclipse.wst.validation.internal.core.ValidationException;
 import org.eclipse.wst.validation.internal.operations.LocalizedMessage;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 
 /**
  * ValidatorDelegateDescriptor stores information about a delegate validator.
- * 
+ * <p>
  * It is also used to store the instance of the validator it describes. To
  * obtain the instance call getValidator().
+ * </p>
  */
-public class ValidatorDelegateDescriptor
-{
-  /**
-   * The instance of the validator refered to by this descriptor.
-   */
-  private IValidator delegate;
+public class ValidatorDelegateDescriptor {
+	/**
+	 * The platform configuration element describing this delegate.
+	 */
+	private IConfigurationElement _delegateConfiguration;
 
-  /**
-   * The platform configuration element describing this delegate.
-   */
-  private IConfigurationElement delegateConfiguration;
+	/**
+	 * The delegating validator's ID.
+	 */
+	private String _delegatingValidatorID;
 
-  /**
-   * The delegating validator's ID.
-   */
-  private String delegatingValidatorID;
+	/**
+	 * The delegate's ID.
+	 */
+	private String _id;
 
-  /**
-   * The delegate's ID.
-   */
-  private String id;
+	/**
+	 * The delegate's display name.
+	 */
+	private String _name;
 
-  /**
-   * The delegate's display name.
-   */
-  private String name;
+	/**
+	 * Constructs a descriptor.
+	 * 
+	 * @param id
+	 *            The delegate's unique id. Must be unique in the context of a
+	 *            delegating validator.
+	 * @param delegateConfiguration
+	 *            The delegates configuration element
+	 * @param delegateName
+	 *            The delegate's display name.
+	 * @param targetValidatorID
+	 *            The target validator's unique id.
+	 */
+	public ValidatorDelegateDescriptor(String id,
+			IConfigurationElement delegateConfiguration, String delegateName,
+			String targetValidatorID) {
 
-  /**
-   * Constructs a descriptor.
-   * 
-   * @param id
-   *          the delegate's uniques id. Must be unique in the context of a
-   *          delegating validator.
-   * @param delegateConfiguration
-   *          the delegates configuration element
-   * @param delegateName
-   *          the delegate's display name.
-   * @param targetValidatorID
-   *          the target validator's unique id.
-   */
-  public ValidatorDelegateDescriptor(String id, IConfigurationElement delegateConfiguration, String delegateName, String targetValidatorID)
-  {
-    this.id = id;
-    this.delegateConfiguration = delegateConfiguration;
-    this.name = delegateName;
-    this.delegatingValidatorID = targetValidatorID;
-  }
+		assert id != null;
+		assert delegateConfiguration != null;
+		assert targetValidatorID != null;
 
-  /**
-   * Provides the delegate's ID.
-   * 
-   * @return a string with the fully qualified class name of this validator
-   *         implementation.
-   */
-  public String getId()
-  {
-    return id;
-  }
+		_id = id;
+		_delegateConfiguration = delegateConfiguration;
+		_name = delegateName;
+		_delegatingValidatorID = targetValidatorID;
+	}
 
-  /**
-   * Provides the delegate's name.
-   * 
-   * @return a String with the validator's display name.
-   */
-  public String getName()
-  {
-    return name;
-  }
+	/**
+	 * Provides the delegate's ID.
+	 * 
+	 * @return a string with the fully qualified class name of this validator
+	 *         implementation.
+	 */
+	public String getId() {
+		return _id;
+	}
 
-  /**
-   * Retrieves the target validator's ID.
-   * 
-   * @return a String with the fully qualified class name of the delegating
-   *         validator who will delegate its implementation to the validator
-   *         described by this descriptor.
-   */
-  public String getTargetID()
-  {
-    return delegatingValidatorID;
-  }
+	/**
+	 * Provides the delegate's name.
+	 * 
+	 * @return a String with the validator's display name.
+	 */
+	public String getName() {
+		return _name;
+	}
 
-  /**
-   * Provides the instance of the validator delegate pointed to by this
-   * descriptor.
-   * 
-   * @return an IValidator instance.
-   * @throws ValidationException
-   */
-  public IValidator getValidator() throws ValidationException
-  {
-    if (delegate != null)
-    {
-      return delegate;
-    }
+	/**
+	 * Retrieves the target validator's ID.
+	 * 
+	 * @return a String with the fully qualified class name of the delegating
+	 *         validator who will delegate its implementation to the validator
+	 *         described by this descriptor.
+	 */
+	public String getTargetID() {
+		return _delegatingValidatorID;
+	}
 
-    try
-    {
-      delegate = (IValidator) delegateConfiguration.createExecutableExtension(ValidatorDelegatesRegistryReader.CLASS_ATTRIBUTE);
-    }
-    catch (CoreException e)
-    {
-      String delegatingValidatorName = ValidationRegistryReader.getReader().getValidatorMetaData(getTargetID()).getValidatorDisplayName();
-      throw new ValidationException(new LocalizedMessage(IMessage.HIGH_SEVERITY, ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_CANNOT_INSTANTIATE_DELEGATE, new String[] { getName(), delegatingValidatorName })));
-    }
+	/**
+	 * Provides the instance of the validator delegate pointed to by this descriptor.
+	 * 
+	 * @return an IValidator instance.
+	 * @throws ValidationException
+	 */
+	public IValidator getValidator() throws ValidationException {
+		try {
+			IValidator delegate = (IValidator) _delegateConfiguration
+					.createExecutableExtension(ValidatorDelegatesRegistryReader.CLASS_ATTRIBUTE);
+			return delegate;
+		} catch (CoreException e) {
+			handleException(e);
+		}
+		return null;
+	}
 
-    return delegate;
-  }
+	/**
+	 * Answer an AbstractValidator if one has been defined, otherwise answer null.
+	 */
+	public AbstractValidator getValidator2() throws ValidationException {
+		try {
+			Object o = _delegateConfiguration
+					.createExecutableExtension(ValidatorDelegatesRegistryReader.CLASS_ATTRIBUTE);
+			if (o instanceof AbstractValidator)
+				return (AbstractValidator) o;
+		} catch (CoreException e) {
+			handleException(e);
+		}
+		return null;
+	}
+
+	private void handleException(CoreException e) throws ValidationException {
+		ValidationPlugin.getPlugin().handleException(e);
+		String delegatingValidatorName = getTargetID();
+		ValidatorMetaData vmd = ValidationRegistryReader.getReader()
+			.getValidatorMetaData(getTargetID());
+		if (vmd != null)delegatingValidatorName = vmd.getValidatorDisplayName();
+		throw new ValidationException(new LocalizedMessage(
+			IMessage.HIGH_SEVERITY, ResourceHandler.getExternalizedMessage(
+			ResourceConstants.VBF_CANNOT_INSTANTIATE_DELEGATE, new String[] { getName(), delegatingValidatorName })));
+	}
 }
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistry.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistry.java
index 5169850..3ea034f 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistry.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2008 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
@@ -12,22 +12,29 @@
 package org.eclipse.wst.validation.internal.delegates;
 
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
 
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.wst.validation.internal.ConfigurationConstants;
 import org.eclipse.wst.validation.internal.core.ValidationException;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 
 /**
  * ValidatorDelegatesRegistry is a singleton used to store validator delegate
  * descriptors for each delegating validator.
  */
-public class ValidatorDelegatesRegistry
-{
+public class ValidatorDelegatesRegistry {
+	
   /**
    * The one and only instance of this registry.
    */
-  private static ValidatorDelegatesRegistry instance;
+  private static ValidatorDelegatesRegistry _instance;
 
   /**
    * Provides the one and only instance of this class.
@@ -38,45 +45,76 @@
    * 
    * @return the validator delegates registry singleton instance.
    */
-  public static ValidatorDelegatesRegistry getInstance()
-  {
-    if (instance == null)
-    {
-      instance = new ValidatorDelegatesRegistry();
-
-      ValidatorDelegatesRegistryReader reader = new ValidatorDelegatesRegistryReader(instance);
-      reader.readRegistry();
+  public static ValidatorDelegatesRegistry getInstance() {
+    if (_instance == null) {
+    	ValidatorDelegatesRegistry instance = new ValidatorDelegatesRegistry();
+    	ValidatorDelegatesRegistryReader reader = new ValidatorDelegatesRegistryReader(instance);
+    	reader.readRegistry();
+    	instance.initDefaults();
+    	_instance = instance;
     }
 
-    return instance;
+    return _instance;
   }
 
   /**
+   * Determine if the product defined any default delegate validators, by setting the old
+   * DELEGATES_PREFERENCE preference in the default preference scope. If they did, we remember
+   * them, so that if we every need to return a default for the delegating validator, we can return the one
+   * that the product requested.
+   */
+  private void initDefaults() {
+	  	// This code was copied from the ValidationConfiguration#deserializeDelegates() method. The code was copied because this
+	  	// change is part of a patch and I didn't want to disturb the ValidationConfiguration class.
+	  
+		IEclipsePreferences prefs = new DefaultScope().getNode(ValidationPlugin.PLUGIN_ID);
+		String delegatePref = prefs.get("DELEGATES_PREFERENCE", null); //$NON-NLS-1$
+		if (delegatePref == null)return;
+
+		int delegatesIndex = delegatePref.indexOf(ConfigurationConstants.DELEGATE_VALIDATORS);
+		String delegates = delegatePref.substring(delegatesIndex + ConfigurationConstants.DELEGATE_VALIDATORS.length(), delegatePref.length());
+
+		if (delegates == null)return;
+
+		_defaultDelegates = new HashSet<String>(10);
+		StringTokenizer tokenizer = new StringTokenizer(delegates, ConfigurationConstants.ELEMENT_SEPARATOR);
+		while (tokenizer.hasMoreTokens()) {
+			String delegateConfiguration = tokenizer.nextToken();
+			int separatorIndex = delegateConfiguration.indexOf(ConfigurationConstants.DELEGATES_SEPARATOR);
+//			String targetID = delegateConfiguration.substring(0, separatorIndex);
+			String delegateID = delegateConfiguration.substring(separatorIndex + 1);
+			_defaultDelegates.add(delegateID);
+		}
+
+	}
+
+/**
    * The map of target validator id to Map of delegates by id.
    */
-  private Map delegatesByTarget = new HashMap();
+  private Map<String, Map<String,ValidatorDelegateDescriptor>> _delegatesByTarget = 
+	  new HashMap<String, Map<String,ValidatorDelegateDescriptor>>();
+  
+  /**
+   * Validator ids that have been defined by the product to be the default validators, for some of the delegating validtors.
+   */
+  private Set<String> _defaultDelegates;
 
   /**
    * Adds a descriptor to the registry.
    * 
    * @param descriptor
-   *          the descriptor to add. Must not be null.
+   *          The descriptor to add. Must not be null.
    */
-  void add(ValidatorDelegateDescriptor descriptor)
-  {
-    if (descriptor == null)
-    {
-      return;
-    }
+  void add(ValidatorDelegateDescriptor descriptor) {
+    if (descriptor == null)return;
 
     String targetID = descriptor.getTargetID();
 
-    Map delegates = (Map) delegatesByTarget.get(targetID);
+    Map<String,ValidatorDelegateDescriptor> delegates = _delegatesByTarget.get(targetID);
 
-    if (delegates == null)
-    {
-      delegates = new HashMap();
-      delegatesByTarget.put(targetID, delegates);
+    if (delegates == null) {
+      delegates = new HashMap<String,ValidatorDelegateDescriptor>();
+      _delegatesByTarget.put(targetID, delegates);
     }
 
     delegates.put(descriptor.getId(), descriptor);
@@ -86,32 +124,31 @@
    * Provides the default delegate ID for the given delegating validator ID.
    * 
    * @param targetID
-   *          the delegating validator's ID.
+   *          The delegating validator's ID.
    * @return a String with the ID of the default delegate.
    */
   public String getDefaultDelegate(String targetID)
   {
-    Map delegates = getDelegateDescriptors(targetID);
+    Map<String,ValidatorDelegateDescriptor> delegates = getDelegateDescriptors(targetID);
 
-    if (delegates == null)
-    {
-      return null;
+    if (delegates == null)return null;
+
+    if (_defaultDelegates != null){
+    	for (ValidatorDelegateDescriptor vdd : delegates.values()){
+    		String id = vdd.getId();
+    		if (_defaultDelegates.contains(id))return id;
+    	}
     }
-
+    
     // TODO: Implement a default attribute and use that to get the default?
     // What happens if two or more delegates claim to be the default one?
     // For now, just pick the first one in the list.
 
-    Iterator delegatesIterator = delegates.values().iterator();
+    Iterator<ValidatorDelegateDescriptor> delegatesIterator = delegates.values().iterator();
+    
+    if (!delegatesIterator.hasNext())return null;
 
-    if (!delegatesIterator.hasNext())
-    {
-      return null;
-    }
-
-    ValidatorDelegateDescriptor descriptor = (ValidatorDelegateDescriptor) delegatesIterator.next();
-
-    return descriptor.getId();
+    return delegatesIterator.next().getId();
   }
 
   /**
@@ -128,10 +165,7 @@
   {
     ValidatorDelegateDescriptor descriptor = getDescriptor(targetID, delegateID);
 
-    if (descriptor == null)
-    {
-      return null;
-    }
+    if (descriptor == null)return null;
 
     IValidator delegate = descriptor.getValidator();
 
@@ -147,9 +181,8 @@
    * @return a Map <string, ValidatorDelegateDescriptor>. May be null if the ID
    *         passed in is not a delegating validator.
    */
-  public Map getDelegateDescriptors(String targetID)
-  {
-    return (Map) delegatesByTarget.get(targetID);
+  public Map<String,ValidatorDelegateDescriptor> getDelegateDescriptors(String targetID) {
+    return _delegatesByTarget.get(targetID);
   }
 
   /**
@@ -164,19 +197,9 @@
    */
   public ValidatorDelegateDescriptor getDescriptor(String targetID, String delegateID)
   {
-    Map delegates = (Map) delegatesByTarget.get(targetID);
+    Map<String,ValidatorDelegateDescriptor> delegates = _delegatesByTarget.get(targetID);
 
-    if (delegates == null)
-    {
-      // No delegates registered for this target.
-
-      return null;
-    }
-
-    if (delegateID == null)
-    {
-      return null;
-    }
+    if (delegates == null || delegateID == null)return null;
     
     ValidatorDelegateDescriptor descriptor = (ValidatorDelegateDescriptor) delegates.get(delegateID);
 
@@ -192,7 +215,7 @@
    */
   public boolean hasDelegates(String targetID)
   {
-    Map delegatesByID = (Map) delegatesByTarget.get(targetID);
+    Map<String,ValidatorDelegateDescriptor> delegatesByID = _delegatesByTarget.get(targetID);
 
     boolean hasDelegates = (delegatesByID != null && !delegatesByID.isEmpty());
     return hasDelegates;
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistryReader.java
index e64f0e6..368f267 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistryReader.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/delegates/ValidatorDelegatesRegistryReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 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
@@ -12,12 +12,15 @@
 package org.eclipse.wst.validation.internal.delegates;
 
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IContributor;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 /**
- * This class reads the plugin extension registry and registers each delegating
+ * This class reads the plug-in extension registry and registers each delegating
  * validator descriptor with the delegates registry.
  * 
  * @see ValidatorDelegatesRegistry
@@ -83,9 +86,9 @@
 
     if (elementName.equals(DELEGATE_ELEMENT))
     {
-      String delegateID = (String) element.getAttribute(CLASS_ATTRIBUTE);
-      String delegateName = (String) element.getAttribute(NAME_ATTRIBUTE);
-      String targetValidatorID = (String) element.getAttribute(TARGET_ATTRIBUTE);
+      String delegateID = element.getAttribute(CLASS_ATTRIBUTE);
+      String delegateName = element.getAttribute(NAME_ATTRIBUTE);
+      String targetValidatorID = element.getAttribute(TARGET_ATTRIBUTE);
 
       ValidatorDelegateDescriptor descriptor = new ValidatorDelegateDescriptor(delegateID, element, delegateName, targetValidatorID);
 
@@ -103,12 +106,19 @@
 
     if (point != null)
     {
-      IConfigurationElement[] elements = point.getConfigurationElements();
-
-      for (int index = 0; index < elements.length; index++)
-      {
-        readElement(elements[index]);
-      }
-    }
+			IConfigurationElement[] elements = point.getConfigurationElements();
+			for (IConfigurationElement configurationElement : elements) {
+				try {
+					readElement(configurationElement);
+				}
+				catch (Exception e) {
+					// we don't want all the validators to be rendered helpless by some 
+					// rogue contribution, so, we catch any exception that occurs during 
+					// initialization, log it, and continue on.
+					IContributor contributor = configurationElement.getContributor();
+					ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, "Rogue validator delegate from " + contributor);
+				}
+			}
+		}
   }
 }
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/AllValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/AllValidatorsOperation.java
index f32ae59..66809bc 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/AllValidatorsOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/AllValidatorsOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -12,11 +12,8 @@
 
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IProject;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.ConfigurationManager;
 import org.eclipse.wst.validation.internal.InternalValidatorManager;
 import org.eclipse.wst.validation.internal.ProjectConfiguration;
@@ -53,20 +50,12 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getValidators()));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EventManager::closing(" + project.getName() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, exc);
-				}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null) {
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			}
 		}
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledIncrementalValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledIncrementalValidatorsOperation.java
index 7fcd3f4..df5a832 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledIncrementalValidatorsOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledIncrementalValidatorsOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -13,13 +13,10 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.ConfigurationManager;
 import org.eclipse.wst.validation.internal.FilterUtil;
 import org.eclipse.wst.validation.internal.InternalValidatorManager;
@@ -111,19 +108,11 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true)));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EnabledIncrementalVAlidatorsOperation(IProject<" + project.getName() + ">, IResourceDelta, int, boolean)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, exc);
-				}
-			}
 		}
 		setDelta(delta);
 		setContext(context);
@@ -145,19 +134,11 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true)));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EnabledIncrementalVAlidatorsOperation(IProject<" + project.getName() + ">, IResourceDelta, int, boolean)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, exc);
-				}
-			}
 		}
 		setDelta(delta);
 	}
@@ -179,19 +160,11 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true)));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EnabledIncrementalValidatorsOperation(IResource[], IProject<" + project.getName() + ">, boolean)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
 		}
 		//construct an array of IFileDelta[] to wrap the Object[]; one IFileDelta for each Object in the array
 		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, false));
@@ -215,22 +188,14 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			setEnabledValidators(InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true)));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("EnabledIncrementalValidatorsOperation(IResource[], IProject<" + project.getName() + ">, boolean)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, exc);
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			if (e.getTargetException() != null)
+				ValidationPlugin.getPlugin().handleException(e.getTargetException());
 
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
 		}
 		//construct an array of IFileDelta[] to wrap the Object[]; one IFileDelta for each Object in the array
 		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, false));
 	}
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledValidatorsOperation.java
index 9566a7b..9b8afb3 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledValidatorsOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/EnabledValidatorsOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 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
  *******************************************************************************/
@@ -15,6 +15,7 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.wst.validation.internal.RegistryConstants;
+import org.eclipse.wst.validation.internal.ValidatorMetaData;
 
 
 /**
@@ -116,7 +117,7 @@
 	 * in the background validation thread, if async is false, it would run in the main thread. 
 	 * All validators implementing IValidator interface will run in in the main thread regardless of this flag.
 	 */
-	protected EnabledValidatorsOperation(IProject project, Set enabledValidators, boolean async) {
+	protected EnabledValidatorsOperation(IProject project, Set<ValidatorMetaData> enabledValidators, boolean async) {
 		this(project, enabledValidators, RegistryConstants.ATT_RULE_GROUP_DEFAULT, DEFAULT_FORCE, async); 
 		// true = force validation to run whether or not auto-validate is on
 	}
@@ -130,7 +131,8 @@
 	 * in the background validation thread, if async is false, it would run in the main thread. 
 	 * All validators implementing IValidator interface will run in in the main thread regardless of this flag.
 	 */
-	protected EnabledValidatorsOperation(IProject project,IWorkbenchContext aWorkbenchContext, Set enabledValidators, boolean async) {
+	protected EnabledValidatorsOperation(IProject project,IWorkbenchContext aWorkbenchContext, 
+		Set<ValidatorMetaData> enabledValidators, boolean async) {
 		this(project,aWorkbenchContext, enabledValidators, RegistryConstants.ATT_RULE_GROUP_DEFAULT, DEFAULT_FORCE, async); 
 		// true = force validation to run whether or not auto-validate is on
 	}
@@ -144,7 +146,9 @@
 	 * in the background validation thread, if async is false, it would run in the main thread. 
 	 * All validators implementing IValidator interface will run in in the main thread regardless of this flag.
 	 */
-	protected EnabledValidatorsOperation(IProject project, Set enabledValidators, int ruleGroup, boolean force, boolean async) {
+	protected EnabledValidatorsOperation(IProject project, Set<ValidatorMetaData> enabledValidators, 
+		int ruleGroup, boolean force, boolean async) {
+		
 		super(project, force, ruleGroup, async);
 		setEnabledValidators(enabledValidators);
 	}
@@ -158,8 +162,9 @@
 	 * in the background validation thread, if async is false, it would run in the main thread. 
 	 * All validators implementing IValidator interface will run in in the main thread regardless of this flag.
 	 */
-	protected EnabledValidatorsOperation(IProject project, IWorkbenchContext aWorkbenchContext, Set enabledValidators, int ruleGroup, boolean force, boolean async) {
+	protected EnabledValidatorsOperation(IProject project, IWorkbenchContext aWorkbenchContext, 
+		Set<ValidatorMetaData> enabledValidators, int ruleGroup, boolean force, boolean async) {
 		super(project,aWorkbenchContext,force, ruleGroup, async);
 		setEnabledValidators(enabledValidators);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IRuleGroup.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IRuleGroup.java
index dabcee8..1c2ad11 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IRuleGroup.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IRuleGroup.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -38,4 +38,4 @@
 	public static final int PASS_FULL = 0x2 | PASS_FAST;
 	public static final String PASS_FULL_NAME = "full"; //$NON-NLS-1$ // In plugin.xml, identify this pass by this constant
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IWorkbenchContext.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IWorkbenchContext.java
index b3c8ec0..2ee4b60 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IWorkbenchContext.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/IWorkbenchContext.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -15,9 +15,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.wst.validation.internal.provisional.core.IProjectValidationContext;
 
-
-
-
 /**
  * In the eclipse environment, not only does the IValidationContext need to be able to load the MOF model, it
  * also needs to load items from the eclipse workbench. This interface should be extended by
@@ -30,7 +27,7 @@
 	 * 
 	 * If the cleanup is a long-running operation, subtask messages should be sent to the IReporter.
 	 */
-	public void cleanup(WorkbenchReporter reporter);
+	void cleanup(WorkbenchReporter reporter);
 
 	/**
 	 * When the IProject is closing, perform any cleanup that needs to be done. When this method is
@@ -38,7 +35,7 @@
 	 * resources. If you do not allocate resources in your helper, then this method should be a
 	 * no-op.
 	 */
-	public void closing();
+	void closing();
 
 	/**
 	 * When the IProject is being deleted, perform any cleanup that needs to be done. When this
@@ -46,7 +43,7 @@
 	 * those resources. If you do not allocate resources in your helper, then this method should be
 	 * a no-op.
 	 */
-	public void deleting();
+	void deleting();
 
 	/**
 	 * Given an Object, if the object has a corresponding IFile in the workbench, return the IFile.
@@ -68,7 +65,7 @@
 	 * 
 	 * @deprecated Implement getResource(Object) instead.
 	 */
-	public IFile getFile(Object object);
+	IFile getFile(Object object);
 
 	/**
 	 * Given an Object, if the object has a corresponding IResource in the workbench, return the
@@ -88,7 +85,7 @@
 	 * If this method returns null, then the WorkbenchReporter will add the message to the IProject
 	 * instead of an IResource.
 	 */
-	public IResource getResource(Object object);
+	IResource getResource(Object object);
 
 	/**
 	 * Given an IMessage's target object, return the line number, of the IFile, which the target
@@ -99,18 +96,18 @@
 	 * Line numbers are valid only for IFile types; if the resource is not an IFile, then a text
 	 * description of the location must be returned.
 	 */
-	public String getLocation(Object object);
+	String getLocation(Object object);
 
 	/**
 	 * Return the name of the resource, without the project-specific information in front.
-	 * 
+	 * <p>
 	 * This method is used by ValidationOperation to calculate the non-environment specific names of
 	 * the files. Only the IWorkbenchContext implementation knows how much information to strip off
 	 * of the IResource name. For example, if there is an EJB Project named "MyEJBProject", and it
 	 * uses the default names for the source and output folders, "source" and "ejbModule",
 	 * respectively, then the current implementation of EJB Helper knows how much of that structure
 	 * is eclipse-specific.
-	 * 
+	 * </p><p>
 	 * Since the "source" folder contains Java source files, a portable name would be the
 	 * fully-qualified name of the Java class, without the eclipse-specific project and folder names
 	 * in front of the file name. The EJBHelper knows that everything up to the "source" folder, for
@@ -119,20 +116,21 @@
 	 * Project named "/MyEJBProject/source/com/ibm/myclasses/MyJavaFile.java", this method would
 	 * make this name portable by stripping off the "/MyEJBProject/source", and returning
 	 * "com/ibm/myclasses/MyJavaFile.java".
-	 * 
+	 * </p><p>
 	 * The output of this method is used by the ValidationOperation, when it is calculating the list
 	 * of added/changed/deleted file names for incremental validation. If getPortableName(IResource)
 	 * returns null, that means that the IWorkbenchContext's implementation does not support that
 	 * particular type of resource, and the resource should not be included in the array of
 	 * IFileDelta objects in the IValidator's "validate" method.
+	 * </p>
 	 */
-	public String getPortableName(IResource resource);
+	String getPortableName(IResource resource);
 
 	/**
 	 * Return the IProject which is about to be validated. Each IWorkbenchContext knows how to
 	 * traverse a certain type of IProject, for example, an EJB project or a web project.
 	 */
-	public IProject getProject();
+	IProject getProject();
 
 	/**
 	 * When an IValidator associates a target object with an IMessage, the WorkbenchReporter
@@ -148,7 +146,7 @@
 	 * identify a particular object must be returned. The id needs to be unique only within one
 	 * particular IValidator.
 	 */
-	public String getTargetObjectName(Object object);
+	String getTargetObjectName(Object object);
 
 	/**
 	 * Whether full or incremental validation is running, this method will be called, by the
@@ -156,13 +154,13 @@
 	 * IValidationContext can receive notification that one of the resources, which validation will run on, is
 	 * being filtered in.
 	 */
-	public void registerResource(IResource resource);
+	void registerResource(IResource resource);
 
 	/**
 	 * This method is called by the Validation Framework, to initialize the IWorkbenchContext so that
 	 * it can gather information from the current project.
 	 */
-	public void setProject(IProject project);
+	void setProject(IProject project);
 
 	/**
 	 * Notifies this IWorkbenchContext that the Validation Framework is shutting down. There will be
@@ -172,5 +170,5 @@
 	 * shut down. This method will be called once for every IProject in the workbench. The IProject
 	 * may, or may not, be closed.
 	 */
-	public void shutdown();
-}
\ No newline at end of file
+	void shutdown();
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/LocalizedMessage.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/LocalizedMessage.java
index 2472f76..9b03057 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/LocalizedMessage.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/LocalizedMessage.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -15,14 +15,13 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.wst.validation.internal.core.Message;
 
-
 /**
  * This class is provided for validators which run only in UI and whose messages, because they
  * come from another tool, are already localized. LocalizedMessage cannot be used by any validator
  * which needs to run in both WebSphere and WSAD.
  */
 public class LocalizedMessage extends Message {
-	private String _message = null;
+	private String _message;
 
 	public LocalizedMessage(int severity, String messageText) {
 		this(severity, messageText, null);
@@ -61,4 +60,4 @@
 	public String getText(Locale l, ClassLoader cl) {
 		return getLocalizedMessage();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualIncrementalValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualIncrementalValidatorsOperation.java
index e837ccb..59d5f0f 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualIncrementalValidatorsOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualIncrementalValidatorsOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 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
  *******************************************************************************/
@@ -28,4 +28,4 @@
 		super( project, changedResources );
 		setFileDeltas( FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, false) );
 	}	
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualValidatorsOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualValidatorsOperation.java
index 35b85d0..03a0bf2 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualValidatorsOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ManualValidatorsOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 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
  *******************************************************************************/
@@ -20,11 +20,13 @@
  * ValidationOperation, because some initialization of the validator, and handling of error
  * conditions, is done in the operation. The initialization is separated because some of the
  * information needed to initialize the validator (i.e., the project) isn't known until runtime.
- * 
+ * <p>
  * Instances of this operation run every enabled validator (both full and incremental) on the
  * project.
- * 
+ * </p>
+ * <p>
  * This operation is not intended to be subclassed outside of the validation framework.
+ * </p>
  */
 public class ManualValidatorsOperation extends ValidatorSubsetOperation {
 
@@ -36,4 +38,4 @@
 		super(project, shouldForce(changedResources), RegistryConstants.ATT_RULE_GROUP_DEFAULT, true);
 		setEnabledValidators(ValidatorManager.getManager().getManualEnabledValidators(project));
 	}	
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/MessageInfo.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/MessageInfo.java
index 96d1771..16b93c0 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/MessageInfo.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/MessageInfo.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 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
  *******************************************************************************/
@@ -23,20 +23,12 @@
 	private String		targetObjectName;	
 	private String		markerId;	
 	private IMessage	msg;
-
-				
 	
-	public MessageInfo(){
-		
+	public MessageInfo(){		
 	}
 	
-	public MessageInfo(String messageOwnerId,
-						IResource resource,
-						String location, 
-						String text,
-						String targetObjectName,
-						String markerId,
-						IMessage msg){
+	public MessageInfo(String messageOwnerId, IResource resource, String location, 
+		String text, String targetObjectName, String markerId, IMessage msg){
 		
 		this.messageOwnerId = messageOwnerId;	
 		this.resource = resource;
@@ -103,4 +95,10 @@
 		this.text = text;
 	}
 	
+	@Override
+	public String toString() {
+		if (text != null)return "MessageInfo: " + text; //$NON-NLS-1$
+		return super.toString();
+	}
+	
 }
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/OneValidatorOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/OneValidatorOperation.java
index c11ec1d..99d359b 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/OneValidatorOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/OneValidatorOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -80,45 +80,46 @@
 	 * OneValidatorOperation constructor comment.
 	 * 
 	 * @param project
-	 *            org.eclipse.core.resources.IProject
+	 *            The project to be validated. It must exist and be open.
 	 * @param validatorId
-	 *            The plugin id of the validator which you wish to run.
+	 *            The plug-in id of the validator which you wish to run.
 	 * @param force
-	 *            If the value is "true", the validator should be run regardless of what the
-	 *            environment settings are; if the value is "false", this operation should be run
-	 *            only if the validation builder will not run the validator.
+	 *            If the value is "true", the validator should be run regardless
+	 *            of what the environment settings are; if the value is "false",
+	 *            this operation should be run only if the validation builder
+	 *            will not run the validator.
 	 * @param ruleGroup
 	 *            Whether a FULL or FAST pass should be invoked.
+	 * @param async
+	 *            If async is true, the validation will run all thread-safe
+	 *            validators in the background validation thread, and all other
+	 *            validators in the main thread. If async is false, all
+	 *            validators will run in in the main thread.
 	 * 
-	 * IllegalArgumentException will be thrown if the named validator is not configured on the
-	 * project.
+	 * IllegalArgumentException will be thrown if the named validator is not
+	 * configured on the project.
 	 * 
-	 * IProject must exist and be open.
-	 * 
-	 * If async is true, the validation will run all thread-safe validators in the background
-	 * validation thread, and all other validators in the main thread. If async is false, all
-	 * validators will run in in the main thread.
 	 */
 	public OneValidatorOperation(IProject project, String validatorId, boolean force, int ruleGroup, boolean async) throws IllegalArgumentException {
 		super(project, force, ruleGroup, async);
 
 		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
 		if (vmd == null) {
-			// No validator, with that plugin id, can be run on that project.
+			// No validator, with that plug-in id, can be run on that project.
 			// Either the validator isn't installed, or the IProject passed in
 			// doesn't have the necessary nature.
 			throw new IllegalArgumentException(validatorId);
 		}
 
 		if (!vmd.isConfiguredOnProject(project)) {
-			// No validator, with that plugin id, can be run on that project.
+			// No validator, with that plug-in id, can be run on that project.
 			// Either the validator isn't installed, or the IProject passed in
 			// doesn't have the necessary nature.
 			throw new IllegalArgumentException(validatorId);
 		}
 
-		Set enabled = new HashSet();
+		Set<ValidatorMetaData> enabled = new HashSet<ValidatorMetaData>();
 		enabled.add(vmd);
 		setEnabledValidators(enabled);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidator.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidator.java
index a2e1fcc..c15609c 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidator.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidator.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -18,12 +18,18 @@
 
 import java.util.List;
 
+import org.eclipse.core.resources.IFile;
+
 /**
  * @author vijayb
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
  */
 public interface ReferencialFileValidator {
-	public List getReferencedFile(List inputFiles);
-}
\ No newline at end of file
+	
+	/**
+	 * Answer the referenced files.
+	 * 
+	 * @param inputFiles
+	 * @return a list of IFile's.
+	 */
+	public List<IFile> getReferencedFile(List inputFiles);
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidatorHelper.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidatorHelper.java
index 1dbe0bd..99d66e1 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidatorHelper.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ReferencialFileValidatorHelper.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -27,25 +27,18 @@
 
 /**
  * @author vijayb
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
  */
 public class ReferencialFileValidatorHelper {
-	/**
-	 *  
-	 */
 	public ReferencialFileValidatorHelper() {
-		super();
 	}
 
 	/**
-	 * return a list of all files contained in project to infinite depth
+	 * Return a list of all files contained in project to infinite depth
 	 */
-	public static List getAllProjectFiles(IProject project) {
-		List result = new ArrayList();
-		if (project == null)
-			return result;
+	public static List<IFile> getAllProjectFiles(IProject project) {
+		List<IFile> result = new ArrayList<IFile>();
+		if (project == null)return result;
+		
 		try {
 			result = collectFiles(project.members(), result);
 		} catch (CoreException e) {
@@ -54,16 +47,12 @@
 		return result;
 	}
 
-	private static List collectFiles(IResource[] members, List result) throws CoreException {
+	private static List<IFile> collectFiles(IResource[] members, List<IFile> result) throws CoreException {
 		// recursively collect files for the given members
-		for (int i = 0; i < members.length; i++) {
-			IResource res = members[i];
-			if (res instanceof IFolder) {
-				collectFiles(((IFolder) res).members(), result);
-			} else if (res instanceof IFile) {
-				result.add(res);
-			}
+		for (IResource res : members) {
+			if (res instanceof IFolder)collectFiles(((IFolder) res).members(), result);
+			else if (res instanceof IFile)result.add((IFile)res);
 		}
 		return result;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ResourceHandler.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ResourceHandler.java
index fe47c03..8e942ea 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ResourceHandler.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ResourceHandler.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -17,4 +17,4 @@
  */
 public final class ResourceHandler extends org.eclipse.wst.validation.internal.ResourceHandler {
 	//Default
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationBuilder.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationBuilder.java
index 01074b5..5bb1c28 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationBuilder.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationBuilder.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 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
  *******************************************************************************/
@@ -12,70 +12,83 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResourceDelta;
 import org.eclipse.core.resources.IncrementalProjectBuilder;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.validation.ValidationFramework;
 import org.eclipse.wst.validation.internal.ConfigurationManager;
 import org.eclipse.wst.validation.internal.InternalValidatorManager;
 import org.eclipse.wst.validation.internal.ProjectConfiguration;
 import org.eclipse.wst.validation.internal.ResourceConstants;
 import org.eclipse.wst.validation.internal.ResourceHandler;
-import org.eclipse.wst.validation.internal.TimeEntry;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValBuilderJob;
+import org.eclipse.wst.validation.internal.ValManager;
 import org.eclipse.wst.validation.internal.ValidatorMetaData;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 
 /**
  * Validation Framework Builder.
- * 
- * This builder is configured on J2EE IProjects automatically, can be added to other types of
- * projects through the Properties page, and launches validation on the project if the project has
+ * <p>
+ * This builder is configured on J2EE IProjects automatically, and can be added to other types of
+ * projects through the Properties page. It launches validation on the project if the project has
  * build validation enabled.
+ * </p>
+ * <p>
+ * This launches a Job for the new V2 validators and also a Job for each of the Job based V1
+ * validators. If there are any "in-line" V1 validations they are done as part of this builder.
+ * Because of all the jobs that this builder spawns, the build will usually be finished long before
+ * all the validation has finished.
+ * </p>
  */
 public class ValidationBuilder extends IncrementalProjectBuilder {
-	public static final int NO_DELTA_CHANGE = -1; // Since IResourceConstants
-	protected List referencedProjects;
+	/*
+	 * GRK - This class serves as a main entry point into the framework. There is one instance of this class for every
+	 * project that has a validation builder configured for it. Typically if you had ten projects in your workspace you would have
+	 * ten of these objects. They are created early in the life cycle of the workbench, and then are reused. 
+	 * 
+	 * My observation was that they are run serially by the same thread.
+	 */
+	public static final int NO_DELTA_CHANGE = -1;
+	protected List<IProject> referencedProjects;
 	protected IWorkbenchContext workbenchContext = null;
-
-	// doesn't have a "no delta"
-	// flag, let this constant be
-	// the flag.
+	
+	/** 
+	 * All the jobs that the validation framework spawns will belong to this family. 
+	 */
+	public static final Object FAMILY_VALIDATION_JOB = new Object();
+	
 	public ValidationBuilder() {
-		super();
 	}
 
-	private IProject[] getAllReferencedProjects(IProject project, Set visitedProjects) {
-		if (visitedProjects == null)
-			visitedProjects = new HashSet();
-		else if (visitedProjects.contains(project))
-			return getReferencedProjects();
-		else
-			visitedProjects.add(project);
-		if (referencedProjects == null)
-			referencedProjects = new ArrayList();
+	private IProject[] getAllReferencedProjects(IProject project, Set<IProject> visitedProjects) {
+		if (visitedProjects == null)visitedProjects = new HashSet<IProject>();
+		else if (visitedProjects.contains(project))return getReferencedProjects();
+		else visitedProjects.add(project);
+		
+		if (referencedProjects == null)referencedProjects = new ArrayList<IProject>();
 		try {
 			if (project.isAccessible()) {
 				IProject[] refProjArray = project.getReferencedProjects();
 				collectReferecedProject(refProjArray);
-				for (int i = 0; i < refProjArray.length; i++) {
-					IProject refProject = refProjArray[i];
+				for (IProject refProject : refProjArray) {
 					getAllReferencedProjects(refProject, visitedProjects);
 				}
 			}
 			return getReferencedProjects();
-		} catch (CoreException core) {
-			return null;
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
+		return null;
 	}
 	
 	public IWorkbenchContext getWorkbenchContext() {
@@ -86,28 +99,23 @@
 		return workbenchContext;
 	}
 
-
 	/**
-	 * @param referencedProjects2
+	 * Add the projects from refProjArray to the list of referenced projects (if they are not
+	 * already in the list).
 	 * @param refProjArray
 	 */
 	private void collectReferecedProject(IProject[] refProjArray) {
-		for (int i = 0; i < refProjArray.length; i++) {
-			IProject project = refProjArray[i];
-			if (!referencedProjects.contains(project))
-				referencedProjects.add(project);
+		for (IProject project : refProjArray) {
+			if (!referencedProjects.contains(project))referencedProjects.add(project);
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#clean(org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	protected void clean(IProgressMonitor monitor) throws CoreException {
 		IProject currentProject = getProject();
-		if (currentProject == null || !currentProject.isAccessible())
-			return;
+		Tracing.log("ValidationBuilder-02 clean ", currentProject); //$NON-NLS-1$
+
+		newClean(monitor);
+		if (currentProject == null || !currentProject.isAccessible())return;
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(currentProject);
 			ValidatorMetaData[] vmds = prjp.getValidators();
@@ -118,64 +126,44 @@
 				// The uniqueness of each Validator is checked by the plugin registry.
 				WorkbenchReporter.removeAllMessages(currentProject, vmd.getValidatorNames(), null);
 			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.updateTaskList(" + currentProject.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 
 	}
 
-	/**
-	 * @param referencedProjects
-	 * @return
-	 */
 	private IProject[] getReferencedProjects() {
 		IProject[] refProjArray = new IProject[referencedProjects.size()];
-		for (int i = 0; i < referencedProjects.size(); i++) {
-			refProjArray[i] = (IProject) referencedProjects.get(i);
-		}
-		return refProjArray;
+		return referencedProjects.toArray(refProjArray);
 	}
-
+	
+	@SuppressWarnings("unchecked")
 	public IProject[] build(int kind, Map parameters, IProgressMonitor monitor) {
-		long start = System.currentTimeMillis();
-		int executionMap = 0x0;
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
 		IResourceDelta delta = null;
 		IProject project = getProject();
+		Tracing.log("ValidationBuilder-01 build ", kind, project);  //$NON-NLS-1$
+		if (Tracing.isLogging(1)){
+			Tracing.logResourceDeltas(getDelta(project), 50);
+		}
+		
+		// GRK I wonder why this builder needs to know about all the other referenced projects?
+		// won't they have builders of their own.
 		IProject[] referenced = getAllReferencedProjects(project, null);
+		if (ValidationFramework.getDefault().isSuspended(project) || 
+			ValManager.getDefault().isDisabled(project))return referenced;
+
 		try {
-			if (ValidatorManager.getManager().isSuspended(project)) {
-				// Do not perform validation on this project
-				executionMap |= 0x1;
-				return referenced;
-			}
+			newBuild(kind, monitor);
+
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			delta = getDelta(project);
 			boolean doFullBuild = (kind == FULL_BUILD);
-			boolean doAutoBuild = ((delta != null) && (kind == AUTO_BUILD));
-			boolean doIncrementalBuild = ((delta != null) && (kind == INCREMENTAL_BUILD));
-//			if ((doFullBuild || doIncrementalBuild) && !prjp.isBuildValidate()) {
-//				// Is a build validation about to be invoked? If so, does the
-//				// user want build validation to run?
-//				executionMap |= 0x2;
-//				return referenced;
-//			}
+			
 			// It is possible for kind to == AUTO_BUILD while delta is null
-			// (saw this
-			// when creating a project by copying another project.)
+			// (saw this when creating a project by copying another project.)
 			// However, a "Rebuild Project" will invoke this builder with
-			// kind==FULL_BUILD
-			// and a null delta, and validation should run in that case.
+			// kind==FULL_BUILD and a null delta, and validation should run in that case.
 			if (!doFullBuild && delta == null) {
 				if (isReferencedProjectInDelta(referenced)) {
 					performFullBuildForReferencedProjectChanged(monitor, prjp);
@@ -183,55 +171,72 @@
 					String[] msgParms = new String[]{project.getName()};
 					monitor.subTask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_NULL_DELTA, msgParms));
 					// A null delta means that a full build must be performed,
-					// but this builder was invoked with an incremental or
-					// automatic
-					// build kind. Return without doing anything so that the
-					// user
+					// but this builder was invoked with an incremental or automatic
+					// build kind. Return without doing anything so that the user
 					// doesn't have to wait forever.
-					executionMap |= 0x4;
 				}
 				return referenced;
 			}
 			if (doFullBuild) {
+				cleanupReferencedProjectsMarkers(prjp, referenced);
 				performFullBuild(monitor, prjp);
 			} else {
-//				if (doAutoBuild && !prjp.isAutoValidate()) {
-//					executionMap |= 0x8;
-//					return referenced;
-//				}
 				if (delta.getAffectedChildren().length == 0) {
-					if (isReferencedProjectInDelta(referenced))
+					if (isReferencedProjectInDelta(referenced)){
+						cleanupReferencedProjectsMarkers(prjp, referenced);
 						performFullBuildForReferencedProjectChanged(monitor, prjp);
-					else
-						executionMap |= 0x10;
+					}
 					return referenced;
 				}
 				EnabledIncrementalValidatorsOperation operation = new EnabledIncrementalValidatorsOperation(project, delta, true);
 				operation.run(monitor);
 			}
 			return referenced;
-		} catch (InvocationTargetException exc) {
-			logInvocationTargetException(logger, exc);
-			executionMap |= 0x20;
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return referenced;
-		} catch (Throwable exc) {
-			logBuildError(logger, exc);
-			executionMap |= 0x40;
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return referenced;
 		} finally {
 			referencedProjects = null;
-			// The builder's time needs to be FINE because the builder is
-			// called often.
-			if (logger.isLoggingLevel(Level.FINE)) {
-				logBuilderTimeEntry(start, executionMap, logger, delta);
-			}
 		}
 	}
+	
+	private void cleanupReferencedProjectsMarkers(final ProjectConfiguration prjp, IProject[] referenced){
+		//When a project references one or more project, performing a clean build on referenced
+		//causes delta to be invoked on referencee, aka, parent. This causes following code to
+		//be invoked.
+		//The following code is trying to fix a case where Ejb project references a utility project,
+		//and the clean build on utility project causes the code to come here, the ejb validator runs
+		//on the ejb  project due to performFullBuildForReferencedProjectChanged() below, but it also
+		//causes marker to be generated for the util project, but the markers for util project are not
+		//cleaned up.   
+		
+		if( referenced == null || referenced.length == 0 )return;
+		
+		try{
+			ValidatorMetaData[] enabledValidators = prjp.getEnabledFullBuildValidators(true, false);
+ 
+			Set<ValidatorMetaData>  set = new HashSet<ValidatorMetaData>();
+			set.addAll( Arrays.asList( enabledValidators ) );
+			for (IProject p : referenced) {
+				if (!p.isAccessible())continue;
+				ProjectConfiguration refProjectCfg = ConfigurationManager.getManager().getProjectConfiguration(p);
+		
+				ValidatorMetaData[] refEnabledValidators = refProjectCfg.getEnabledFullBuildValidators(true, false);
+				
+				//remove from the set the validators which are also in child
+				for(ValidatorMetaData vmd : refEnabledValidators)set.remove(vmd);
+				
+				for(ValidatorMetaData vmd : set)WorkbenchReporter.removeAllMessages(p, vmd.getValidator());		
+			}	
+		}catch (Exception exc) {
+			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, exc.toString());
+	}
+}
 
-	/**
-	 * @param referenced
-	 * @return
-	 */
 	private boolean isReferencedProjectInDelta(IProject[] referenced) {
 		IProject p = null;
 		for (int i = 0; i < referenced.length; i++) {
@@ -243,10 +248,6 @@
 		return false;
 	}
 
-	/**
-	 * @param monitor
-	 * @param prjp
-	 */
 	private void performFullBuildForReferencedProjectChanged(IProgressMonitor monitor, ProjectConfiguration prjp) throws InvocationTargetException {
 		performFullBuild(monitor, prjp, true);
 	}
@@ -258,46 +259,45 @@
 	private void performFullBuild(IProgressMonitor monitor, ProjectConfiguration prjp, boolean onlyDependentValidators) throws InvocationTargetException {
 		ValidatorMetaData[] enabledValidators = prjp.getEnabledFullBuildValidators(true, onlyDependentValidators);
 		if ((enabledValidators != null) && (enabledValidators.length > 0)) {
-			Set enabledValidatorsSet = InternalValidatorManager.wrapInSet(enabledValidators);
+			Set<ValidatorMetaData> enabledValidatorsSet = InternalValidatorManager.wrapInSet(enabledValidators);
 			EnabledValidatorsOperation op = new EnabledValidatorsOperation(getProject(), enabledValidatorsSet, true);
 			op.run(monitor);
 		}
 	}
+	
+	/**
+	 * Run the new validation builder. This is a transition method, while we continue to have
+	 * the old and new validation builders.
+	 * 
+	 * @param kind the kind of build
+	 * 
+	 * @see IncrementalProjectBuilder#AUTO_BUILD
+	 * @see IncrementalProjectBuilder#CLEAN_BUILD
+	 * @see IncrementalProjectBuilder#FULL_BUILD
+	 * @see IncrementalProjectBuilder#INCREMENTAL_BUILD
+	 */
+	private void newBuild(int kind, IProgressMonitor monitor)	throws CoreException {
 
-	private void logInvocationTargetException(Logger logger, InvocationTargetException exc) {
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("ValidationBuilder::build"); //$NON-NLS-1$
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-			if (exc.getTargetException() != null) {
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		IResourceDelta delta = null;
+		IProject project = getProject();
+		
+		switch (kind){
+			case AUTO_BUILD:
+			case INCREMENTAL_BUILD:
+				delta = getDelta(project);
+				break;
 		}
+		
+		ValBuilderJob.validateProject(project, delta, kind);		
 	}
-
-	private void logBuildError(Logger logger, Throwable exc) {
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			if( ! (exc instanceof OperationCanceledException) ){
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationBuilder.build(int, Map, IProgressMonitor)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-	}
-
-	private void logBuilderTimeEntry(long start, int executionMap, Logger logger, IResourceDelta delta) {
-		TimeEntry entry = ValidationPlugin.getTimeEntry();
-		entry.setSourceID("ValidationBuilder.build(int, Map, IProgressMonitor)"); //$NON-NLS-1$
-		entry.setProjectName(getProject().getName()); //$NON-NLS-1$  //$NON-NLS-2$
-		entry.setExecutionMap(executionMap);
-		entry.setElapsedTime(System.currentTimeMillis() - start);
-		if (delta == null) {
-			entry.setDetails("delta == null"); //$NON-NLS-1$
-		}
-		entry.setToolName("ValidationBuilder"); //$NON-NLS-1$
-		logger.write(Level.FINE, entry);
-	}
-}
\ No newline at end of file
+	
+	
+	/**
+	 * Run the new clean method. This is a transition method, while we continue to have
+	 * the old and new validation builders.
+	 */
+	private void newClean(IProgressMonitor monitor) throws CoreException {
+		ValManager.getDefault().clean(getProject(), monitor);
+	}	
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationConstants.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationConstants.java
index 1e37524..260fa72 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationConstants.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationConstants.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -22,4 +22,4 @@
  */
 public interface ValidationConstants extends ResourceConstants {
 	//Default
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationOperation.java
index a7d5a21..c9f7b53 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationOperation.java
@@ -1,25 +1,24 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 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.wst.validation.internal.operations;
 
-
 import java.text.MessageFormat;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Queue;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -32,7 +31,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.core.runtime.Status;
@@ -40,9 +38,8 @@
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.frameworks.internal.operations.IHeadlessRunnableWithProgress;
+import org.eclipse.wst.validation.ValidationFramework;
 import org.eclipse.wst.validation.internal.FilterUtil;
 import org.eclipse.wst.validation.internal.IProjectValidationHelper;
 import org.eclipse.wst.validation.internal.InternalValidatorManager;
@@ -51,7 +48,8 @@
 import org.eclipse.wst.validation.internal.ResourceConstants;
 import org.eclipse.wst.validation.internal.ResourceHandler;
 import org.eclipse.wst.validation.internal.TaskListUtility;
-import org.eclipse.wst.validation.internal.TimeEntry;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValManager;
 import org.eclipse.wst.validation.internal.ValidationRegistryReader;
 import org.eclipse.wst.validation.internal.ValidatorMetaData;
 import org.eclipse.wst.validation.internal.core.IFileDelta;
@@ -63,44 +61,86 @@
 import org.eclipse.wst.validation.internal.provisional.core.IValidationContext;
 import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 import org.eclipse.wst.validation.internal.provisional.core.IValidatorJob;
-import org.eclipse.wst.validation.internal.provisional.core.MessageLimitException;
 
 /**
- * Implemented Validators methods must not be called directly by anyone other than this class, since
+ * Validators must not be called directly by anyone other than this class, since
  * some initialization of the validator is done here (via the getProject() method). The
  * initialization is separated because the IProject isn't known until runtime.
- * 
+ * <p>
  * This operation is not intended to be subclassed outside of the validation framework.
+ * </p>
  */
 public abstract class ValidationOperation implements IWorkspaceRunnable, IHeadlessRunnableWithProgress {
-	public static final int NO_DELTA_CHANGE = -1; // Since IResourceConstants
-	// doesn't have a "no delta"
-	// flag, let this constant be
-	// the flag.
+	// Since IResourceConstants don't have a "no delta" flag, let this constant be the flag.
+	public static final int NO_DELTA_CHANGE = -1; 
 	private static final String DELTA_AS_STRING = "IFileDelta[{0}] '{'{1}'}'"; //$NON-NLS-1$
 	private static final String COMMA = ", "; //$NON-NLS-1$
-	protected static final boolean DEFAULT_ASYNC = true; // For the deprecated
-	// constructors, by
-	// default the
-	// operation will not
-	// fork.
-	protected static final boolean DEFAULT_FORCE = true; // By default, run the
-	protected static final String VALIDATIONLAUNCHERMSG = "Waiting for build"; // By default, run the
-	// operation whether
-	// or not it needs to
 	
-	class ValidationLauncherJob extends Job {
-	    private Job validationJob;
-	    public ValidationLauncherJob(Job validationJob) {
-	            super(ResourceHandler.getExternalizedMessage("VBF_VALIDATION_JOB_MSG"));
-	            
-	            setSystem(true);
-	            setRule(ResourcesPlugin.getWorkspace().getRoot());
-	            this.validationJob= validationJob;
+	// For the depreciated constructors, by default the operation will not fork. 
+	protected static final boolean DEFAULT_ASYNC = true;
+	
+	protected static final boolean DEFAULT_FORCE = true;
+	
+	private static ValidationLauncherJob launcherJob = new ValidationLauncherJob();
+	
+	private static final int jobsPerProcessor = 3;
+	
+	private final static class ValidationLauncherJob extends Job {
+	    private Queue<Job> _validationJobs = new LinkedList<Job>();
+	    
+	    public ValidationLauncherJob() {
+            super(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_VALIDATION_JOB_MSG));
+            setSystem(true);
+            setRule(ResourcesPlugin.getWorkspace().getRoot());
 	    }
+	    
 	    protected IStatus run(IProgressMonitor monitor) {
-	    		validationJob.schedule();
-	            return Status.OK_STATUS;
+			int processors = Runtime.getRuntime().availableProcessors();
+			int totalInitialJobs = processors * jobsPerProcessor;
+    		synchronized (_validationJobs) {
+    			// never schedule more than 3 validation jobs per processor at a time
+    			for (int i=0; i< totalInitialJobs; i++) {
+    				Job validationJob = _validationJobs.poll();
+    				if (validationJob == null) break;
+    				addJobChangeAdapter(validationJob);
+    				validationJob.schedule();
+    			}
+    		}
+            return Status.OK_STATUS;
+	    }
+	    
+	    private void addJobChangeAdapter(Job job) {
+	    	job.addJobChangeListener(new JobChangeAdapter(){
+	    		// when done, see if there is another validation job to schedule
+				public void done(IJobChangeEvent event) {
+					synchronized (_validationJobs) {
+						Job validationJob = _validationJobs.poll();
+						if (validationJob != null) {
+							addJobChangeAdapter(validationJob);
+							validationJob.schedule();
+						}
+					}
+				}
+			});
+	    }
+	    
+	    @Override
+	    public boolean belongsTo(Object family) {
+			if (family == ResourcesPlugin.FAMILY_MANUAL_BUILD)return true;
+			if (family == ValidationBuilder.FAMILY_VALIDATION_JOB){
+				return true;
+			}
+			return super.belongsTo(family);
+	    }
+	    
+	    public void addValidationJob(Job validationJob) {
+	    	synchronized (_validationJobs) {
+	    		_validationJobs.add(validationJob);
+	    		// schedule the job if we were empty
+	    		if (_validationJobs.size() == 1) {
+	    			this.schedule();
+	    		}
+	    	}
 	    }
 	}
 	
@@ -108,38 +148,29 @@
 	 * @deprecated Will be removed in Milestone 3. Use DEFAULT_ASYNC
 	 */
 	protected static final boolean DEFAULT_FORK = false; // @deprecated
-	private IProject _project = null; // project to be validated
-	private int _ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT; // which
-	// pass
-	// should
-	// the
-	// validation
-	// invoke
+	private IProject 		_project; // project to be validated
+	private int 			_ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT;
 	private boolean _fork = DEFAULT_ASYNC; // do not fork the validation into a
 	// different thread by default
-	private Map _fileDeltas = null; // To reduce object creation,
-	private IResourceDelta _delta = null;
+	private Map<ValidatorMetaData, Set<IFileDelta>> _fileDeltas; // To reduce object creation,
+	private IResourceDelta _delta;
+	
 	// the resource delta tree to be processed, or null if a full build/menu
 	// option was triggered. This value is cached so that validation can be run
 	// either from a builder, or from a menu item. (The Operation interface
 	// doesn't allow any parameter on execute except the IProgressMonitor.)
-	private Set _enabledValidators = null;
-	private boolean _force = DEFAULT_FORCE; // force this operation to run even
-	// if it doesn't need to?
-	private boolean _isFullValidate = false; // Run a full validation or an
-	// incremental? (true = full)
-	private Boolean _isAutoBuild = null; // Is the global auto-build preference
-	// enabled?
-	private Set _launchedValidators = null; // A list of the validators that
+	private Set<ValidatorMetaData> _enabledValidators;
+	
+	private boolean _force = DEFAULT_FORCE; // force this operation to run even if it doesn't need to?
+	private boolean _isFullValidate; 	// Run a full validation or an incremental? (true = full)
+	private Boolean _isAutoBuild; 		// Is the global auto-build preference enabled?
+	private Set<ValidatorMetaData> _launchedValidators;
 	
 	protected IWorkbenchContext context;
 
-	// are enabled and were launched
-	// (i.e., that have input to
-	// validate). For internal
+	// are enabled and were launched (i.e., that have input to validate). For internal
 	// validation framework use only;
-	// it's needed for the automatic
-	// tests.
+	// it's needed for the automatic tests.
 	/**
 	 * This method is used for FINEST logging, to report exactly what deltas were about to be
 	 * validated.
@@ -157,13 +188,12 @@
 			buffer.replace(0, 1, ""); //$NON-NLS-1$ // magic numbers 0 and 1 => Remove first COMMA from the list (hence index 0); length of COMMA is 2, hence index 0, 1.
 			args = buffer.toString();
 		}
-		return MessageFormat.format(DELTA_AS_STRING, new String[]{String.valueOf(numArgs), args});
+		return MessageFormat.format(DELTA_AS_STRING, new Object[]{String.valueOf(numArgs), args});
 	}
 
 	protected static void checkCanceled(WorkbenchReporter reporter) throws OperationCanceledException {
-		if (reporter == null) {
-			return;
-		} else if (reporter.getProgressMonitor().isCanceled()) {
+		if (reporter == null)return;
+		else if (reporter.getProgressMonitor().isCanceled()) {
 			throw new OperationCanceledException(""); //$NON-NLS-1$
 		}
 	}
@@ -216,7 +246,7 @@
 		_ruleGroup = ruleGroup;
 		_fork = fork;
 		_force = force;
-		_enabledValidators = new HashSet();
+		_enabledValidators = new HashSet<ValidatorMetaData>();
 	}
 	
 	/**
@@ -230,7 +260,7 @@
 		_ruleGroup = ruleGroup;
 		_fork = fork;
 		_force = force;
-		_enabledValidators = new HashSet();
+		_enabledValidators = new HashSet<ValidatorMetaData>();
 		context = aContext;
 	}
 
@@ -238,26 +268,14 @@
 	 * @deprecated Will be removed in Milestone 3.
 	 */
 	protected void terminateCleanup(WorkbenchReporter reporter) {
-		Set enabledValidators = getEnabledValidators();
-		Iterator iterator = enabledValidators.iterator();
-		ValidatorMetaData vmd = null;
-
-		while (iterator.hasNext()) {
-			vmd = (ValidatorMetaData) iterator.next();
+		for (ValidatorMetaData vmd : getEnabledValidators()) {
 			reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_CLEANUP, new String[]{vmd.getValidatorDisplayName()}));
 			try {
 				reporter.removeAllMessages(vmd.getValidator());
-			} catch (InstantiationException exc) {
+			} catch (InstantiationException e) {
 				// Remove the vmd from the reader's list
 				ValidationRegistryReader.getReader().disableValidator(vmd);
-				// Log the reason for the disabled validator
-				final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation::terminateCleanup"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				continue;
 			}
 			addCancelTask(vmd);
@@ -476,19 +494,8 @@
 	 * run automatically.)
 	 */
 	private boolean isValidationNecessary(ValidatorMetaData vmd, IFileDelta[] delta) {
-		// Validation is not necessary if:
-		//    1. auto-validation has run and the validator is incremental,
-		//    2. There are no files for the validator to validate.
-		// There are files to validate if this is a full validation or if the
-		// validator filtered in some of the deltas.
-		boolean autoValidateRan = false;
-		if (_isAutoBuild != null) {
-			// User set the autoBuild default, so check if validation is
-			// necessary or not.
-			autoValidateRan = ValidatorManager.getManager().isAutoValidate(getProject(), _isAutoBuild.booleanValue()) && vmd.isIncremental();
-		}
-		boolean hasFiles = (isFullValidate() || (delta.length > 0));
-		return (!autoValidateRan && hasFiles);
+		// Validation is not necessary if there are no files for the validator to validate.
+		return isFullValidate() || (delta.length > 0);
 	}
 
 	/**
@@ -496,35 +503,27 @@
 	 * operation to do.
 	 */
 	public boolean isNecessary(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
-		Set enabledValidators = getEnabledValidators();
+		Set<ValidatorMetaData> enabledValidators = getEnabledValidators();
 		if ((enabledValidators == null) || (enabledValidators.size() == 0)) {
 			return false;
 		}
-		if (isFullValidate()) {
-			return true;
-		}
-		Iterator iterator = enabledValidators.iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
-			if (isValidationNecessary(vmd, getFileDeltas(monitor, vmd))) {
-				return true;
-			}
+		if (isFullValidate())return true;
+		
+		for (ValidatorMetaData vmd : enabledValidators) {
+			if (isValidationNecessary(vmd, getFileDeltas(monitor, vmd)))return true;
 		}
 		return false;
 	}
 
-	private Map getFileDeltas(IProgressMonitor monitor) throws CoreException {
-		if (_fileDeltas == null) {
-			loadFileDeltas(monitor);
-		}
+	private Map<ValidatorMetaData, Set<IFileDelta>> getFileDeltas(IProgressMonitor monitor) throws CoreException {
+		if (_fileDeltas == null)loadFileDeltas(monitor);
 		return _fileDeltas;
 	}
 
 	private IFileDelta[] getFileDeltas(IProgressMonitor monitor, ValidatorMetaData vmd) throws CoreException {
-		Set result = (Set) getFileDeltas(monitor).get(vmd);
-		if (result == null) {
-			return new IFileDelta[0];
-		}
+		Set<IFileDelta> result = getFileDeltas(monitor).get(vmd);
+		if (result == null)return new IFileDelta[0];
+		
 		IFileDelta[] temp = new IFileDelta[result.size()];
 		result.toArray(temp);
 		return temp;
@@ -550,7 +549,7 @@
 		}
 	}
 
-	protected void setFileDeltas(Map deltas) {
+	protected void setFileDeltas(Map<ValidatorMetaData, Set<IFileDelta>> deltas) {
 		_fileDeltas = deltas;
 	}
 
@@ -570,7 +569,7 @@
 	 * Return the validators which are both configured on this type of project, (as stored in
 	 * getProject()), and enabled by the user on this project.
 	 */
-	public Set getEnabledValidators() {
+	public Set<ValidatorMetaData> getEnabledValidators() {
 		return _enabledValidators;
 	}
 
@@ -578,21 +577,19 @@
 	 * This is an internal method, subject to change without notice. It is provided only for the
 	 * automated validation framework tests.
 	 */
-	public Set getLaunchedValidators() {
+	public Set<ValidatorMetaData> getLaunchedValidators() {
 		if (_launchedValidators == null) {
-			_launchedValidators = new HashSet();
+			_launchedValidators = new HashSet<ValidatorMetaData>();
 		}
 		return _launchedValidators;
 	}
 
-	protected void setEnabledValidators(Set evmds) {
+	protected void setEnabledValidators(Set<ValidatorMetaData> evmds) {
 		// Check that every VMD in the set is configured on this project.
 		// Necessary because the user can manually choose which validators
 		// to launch, and the validator may not be installed.
 		_enabledValidators.clear();
-		Iterator iterator = evmds.iterator();
-		while (iterator.hasNext()) {
-			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
+		for (ValidatorMetaData vmd : evmds) {
 			if (ValidationRegistryReader.getReader().isConfiguredOnProject(vmd, getProject())) {
 				_enabledValidators.add(vmd);
 			}
@@ -608,10 +605,10 @@
 
 	protected int getUnitsOfWork() {
 		/*
-		 * // Let one unit of work equal one resource. number of enabled validators // i.e., each
+		 * Let one unit of work equal one resource. number of enabled validators. i.e., each
 		 * enabled validator must process (at most) each resource in the project; count each process
-		 * as one unit of work // Note that this is a ceiling number, because if we're doing an
-		 * incremental validation, not all resources will // be validated.
+		 * as one unit of work. Note that this is a ceiling number, because if we're doing an
+		 * incremental validation, not all resources will be validated.
 		 * setNumResources(countResources(getProject())); getEnabledValidators().size();
 		 */
 		// Until the validators can report units-of-work complete,
@@ -636,17 +633,13 @@
 	 * The IProgressMonitor passed in must not be null.
 	 */
 	public void run(IProgressMonitor progressMonitor) throws OperationCanceledException {
-		long start = System.currentTimeMillis();
-		final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
 		try {
-			// In order to check whether or not the monitor has been cancelled,
-			// the monitor must not be null.
-			if (progressMonitor == null) {
-				return;
-			}
-			if (ValidatorManager.getManager().isSuspended(getProject())) {
-				return;
-			}
+			// In order to check whether or not the monitor has been canceled, the monitor must not be null.
+			if (progressMonitor == null)return;
+			IProject project = getProject();
+			if (ValidationFramework.getDefault().isSuspended(project))return;
+			if (ValManager.getDefault().isDisabled(project))return;
+			
 			if (!areValidatorsEnabled()) {
 				// save some processing time...
 				return;
@@ -655,35 +648,28 @@
 			final WorkbenchReporter reporter = new WorkbenchReporter(getProject(), progressMonitor);
 
 			try {
-				// Periodically check if the user has cancelled the operation
+				// Periodically check if the user has canceled the operation
 				checkCanceled(reporter);
 				preValidate(reporter);
 				validate(reporter);
 				validateReferencialFiles(reporter);
-			} catch (CoreException exc) {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation.run"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+			} catch (CoreException e) {
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		} finally {
-			if (logger.isLoggingLevel(Level.FINE)) {
-				long finish = System.currentTimeMillis();
-				TimeEntry entry = ValidationPlugin.getTimeEntry();
-				entry.setSourceID("ValidationOperation.run(WorkbenchMonitor)"); //$NON-NLS-1$
-				entry.setProjectName(getProject().getName());
-				entry.setToolName("ValidationOperation"); //$NON-NLS-1$
-				entry.setElapsedTime(finish - start);
-				logger.write(Level.FINE, entry);
-			}
+			//TODO GRK determine if timing info should be added here
+//			if (logger.isLoggingLevel(Level.FINE)) {
+//				long finish = System.currentTimeMillis();
+//				TimeEntry entry = ValidationPlugin.getTimeEntry();
+//				entry.setSourceID("ValidationOperation.run(WorkbenchMonitor)"); //$NON-NLS-1$
+//				entry.setProjectName(getProject().getName());
+//				entry.setToolName("ValidationOperation"); //$NON-NLS-1$
+//				entry.setElapsedTime(finish - start);
+//				logger.write(Level.FINE, entry);
+//			}
 		}
 	}
 
-	/**
-	 * @param reporter
-	 */
 	private void validateReferencialFiles(WorkbenchReporter reporter) {
 		ReferencialFileValidatorRegistryReader reader = ReferencialFileValidatorRegistryReader.getInstance();
 		if (reader != null) {
@@ -699,14 +685,11 @@
 		}
 	}
 
-	/**
-	 * @param reporter
-	 * @param referencialFileValidator
-	 */
 	private void refFileValidateFileDelta(WorkbenchReporter reporter, ReferencialFileValidator refFileValidator) {
 		IResourceDelta[] resourceDelta = _delta.getAffectedChildren(IResourceDelta.ADDED | IResourceDelta.CHANGED | IResourceDelta.REMOVED);
-		List inputFiles = new ArrayList();
-		List referencingFiles = new ArrayList();
+		List<IResource> inputFiles = new ArrayList<IResource>();
+		
+		List<IFile> referencingFiles = new ArrayList<IFile>();
 		if (resourceDelta != null && resourceDelta.length > 0) {
 			for (int i = 0; i < resourceDelta.length; i++) {
 				IResource resource = resourceDelta[i].getResource();
@@ -715,88 +698,66 @@
 				} else if (resource instanceof IFile)
 					inputFiles.add(resource);
 			}
-			List rFilesToValidate = refFileValidator.getReferencedFile(inputFiles);
+			List<IFile> rFilesToValidate = refFileValidator.getReferencedFile(inputFiles);
 			if (rFilesToValidate != null && !rFilesToValidate.isEmpty())
 				referencingFiles.addAll(rFilesToValidate);
 			try {
 				if (!referencingFiles.isEmpty())
 					validateReferencingFiles(reporter, referencingFiles);
 			} catch (Exception e) {
-				Logger.getLogger().log(e);
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 	}
 
-	/**
-	 * @param delta
-	 * @return
-	 */
-	private void getFileResourceDeltaInFolder(IResourceDelta delta, List inputFiles) {
+	private void getFileResourceDeltaInFolder(IResourceDelta delta, List<IResource> inputFiles) {
 		IResourceDelta[] resourceDelta = delta.getAffectedChildren();
 		for (int i = 0; i < resourceDelta.length; i++) {
 			IResource resource = resourceDelta[i].getResource();
-			if (resource instanceof IFile) {
-				inputFiles.add(resource);
-			} else if (resource instanceof IFolder)
-				getFileResourceDeltaInFolder(resourceDelta[i], inputFiles);
+			if (resource instanceof IFile)inputFiles.add(resource);
+			else if (resource instanceof IFolder)getFileResourceDeltaInFolder(resourceDelta[i], inputFiles);
 		}
 	}
 
-	/**
-	 * @param reporter
-	 * @param referencialFileValidator
-	 */
 	private void postValidateProject(WorkbenchReporter reporter, ReferencialFileValidator refFileValidator) {
-		Set set = ValidationRegistryReader.getReader().getValidatorMetaData(_project);
-		Iterator it = set.iterator();
-		while (it.hasNext()) {
-			ValidatorMetaData data = (ValidatorMetaData) it.next();
-			List filters = data.getNameFilters();
-			List files = getAllFilesForFilter(filters);
+		Set<ValidatorMetaData> set = ValidationRegistryReader.getReader().getValidatorMetaData(_project);
+		for (ValidatorMetaData data : set) {
+			List<String> filters = data.getNameFilters();
+			List<IFile> files = getAllFilesForFilter(filters);
 			if (!files.isEmpty()) {
-				List fileForValidation = refFileValidator.getReferencedFile(files);
+				List<IFile> fileForValidation = refFileValidator.getReferencedFile(files);
 				try {
 					validateReferencingFiles(reporter, fileForValidation);
 				} catch (Exception e) {
-					Logger.getLogger().log(e);
+					ValidationPlugin.getPlugin().handleException(e);
 				}
 			}
 		}
 	}
 
-	/**
-	 * @param filters
-	 * @return
-	 */
-	private List getAllFilesForFilter(List filters) {
+	private List<IFile> getAllFilesForFilter(List<String> filters) {
 		if (!filters.isEmpty()) {
-			List allProjectFiles = ReferencialFileValidatorHelper.getAllProjectFiles(_project);
-			List filterFiles = new ArrayList();
-			for (int i = 0; i < filters.size(); i++) {
-				String fileName = (String) filters.get(i);
-				if (fileName == null)
-					continue;
-				for (int j = 0; j < allProjectFiles.size(); j++) {
-					IFile projectFile = (IFile) allProjectFiles.get(j);
+			List<IFile> allProjectFiles = ReferencialFileValidatorHelper.getAllProjectFiles(_project);
+			List<IFile> filterFiles = new ArrayList<IFile>();
+			for (String fileName : filters) {
+				if (fileName == null)continue;
+				
+				for (IFile projectFile : allProjectFiles) {
 					if (fileName.charAt(0) == '*') {
 						String extName = fileName.substring(2, fileName.length());
 						String ext = projectFile.getFileExtension();
-						if (ext != null && ext.equals(extName))
-							filterFiles.add(projectFile);
-					} else if (fileName.equals(projectFile.getName()))
-						filterFiles.add(projectFile);
+						if (ext != null && ext.equals(extName))filterFiles.add(projectFile);
+					} else if (fileName.equals(projectFile.getName()))filterFiles.add(projectFile);
 				}
-
 			}
 			return filterFiles;
 		}
-		return Collections.EMPTY_LIST;
+		return new LinkedList<IFile>();
 	}
 
-	private void validateReferencingFiles(IReporter reporter, List referencingFiles) throws Exception {
-		HashSet validatedFiles = new HashSet();
-		for (int i = 0; i < referencingFiles.size(); i++) {
-			IFile refFile = (IFile) referencingFiles.get(i);
+	private void validateReferencingFiles(IReporter reporter, List<IFile> referencingFiles) throws Exception {
+		Set<IFile> validatedFiles = new HashSet<IFile>();
+		for (IFile refFile : referencingFiles) {
 			if (!validatedFiles.contains(refFile)) {
 				IResource resource = refFile.getParent();
 				IProject project = null;
@@ -805,13 +766,10 @@
 				else
 					project = (IProject) resource;
 				if (project != null) {
-					Set set = ValidationRegistryReader.getReader().getValidatorMetaData(project);
-//					IFileDelta[] changedfiles = new FileDelta[]{new WorkbenchFileDelta(refFile.getProjectRelativePath().toString(), IFileDelta.CHANGED, refFile)};
-					Iterator it = set.iterator();
-					while (it.hasNext()) {
-						ValidatorMetaData data = (ValidatorMetaData) it.next();
+					Set<ValidatorMetaData> set = ValidationRegistryReader.getReader().getValidatorMetaData(project);
+					for (ValidatorMetaData data : set) {
 						if (data.isApplicableTo(refFile)) {
-							IValidator validator = (IValidator)data.getValidator();
+							IValidator validator = data.getValidator();
 							validator.validate(data.getHelper(project),reporter);
 							validatedFiles.add(refFile);
 						}
@@ -838,83 +796,60 @@
 	 * thread, and the not-thread-safe validators in this thread.
 	 */
 	protected void validate(WorkbenchReporter reporter) throws OperationCanceledException {
-		if (reporter == null) {
-			return;
-		}
+		if (reporter == null)return;
 		checkCanceled(reporter);
 		reporter.getProgressMonitor().beginTask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_PROGRESSMONITOR_TITLE), getUnitsOfWork());
 		IValidator validator = null;
-		ValidatorMetaData vmd = null;
-		Iterator iterator = null;
-		WorkbenchReporter nullReporter = new WorkbenchReporter(getProject(), new NullProgressMonitor());
-		final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
+		Iterator<ValidatorMetaData> iterator = null;
 		IFileDelta[] delta = null;
 		
-		HashSet jobValidators = new HashSet();
-		HashSet validators = new HashSet();
-		
-		
-		iterator = getEnabledValidators().iterator();
-		
-			while( iterator.hasNext() ){
-				vmd = (ValidatorMetaData) iterator.next();
-				IValidator valInstance = null;
-				try {
-					valInstance = vmd.getValidator();
-				} catch (InstantiationException e1) {
-					if(!ValidatorManager.getManager().getProblemValidators().contains(vmd)) {
-						ValidatorManager.getManager().getProblemValidators().add(vmd);
-						System.out.println(e1.getMessage());
-					}
-				}
+		Set<ValidatorMetaData> jobValidators = new HashSet<ValidatorMetaData>();
+		Set<ValidatorMetaData> validators = new HashSet<ValidatorMetaData>();
 				
-					if( isFork() && (valInstance != null) && valInstance instanceof IValidatorJob ){
-						try {
-							delta = getFileDeltas(reporter.getProgressMonitor(), vmd);
-						} catch (CoreException e) {
-							e.printStackTrace();
-						}
-						boolean willRun = (isForce() || isValidationNecessary(vmd, delta));
-						if( willRun ){
-							jobValidators.add( vmd );
-						}
-					}else if (valInstance != null){
-						validators.add( vmd );
+		for(ValidatorMetaData vmd : getEnabledValidators()){
+			IValidator valInstance = null;
+			try {
+				valInstance = vmd.getValidator();
+			} 
+			catch (InstantiationException e1) {
+				if(!ValidatorManager.getManager().getProblemValidators().contains(vmd)) {
+					ValidatorManager.getManager().getProblemValidators().add(vmd);
+					System.out.println(e1.getMessage());
 				}
 			}
-			if( jobValidators.size() > 0 ){
-				launchJobs( jobValidators, reporter );
-			}
-		
-		
-		try {
-			//iterator = getEnabledValidators().iterator();
-			iterator = validators.iterator();
 			
-			// In order to allow validators to run, must first check if there's
-			// space for new markers.
-			// But we don't want the old markers to prevent validation from
-			// running again, so delete all
-			// of the old markers first, and then run validation.
-			while (iterator.hasNext()) {
-				vmd = (ValidatorMetaData) iterator.next();
+			if( isFork() && (valInstance != null) && valInstance instanceof IValidatorJob ){
+				try {
+					delta = getFileDeltas(reporter.getProgressMonitor(), vmd);
+				} catch (CoreException e) {
+					e.printStackTrace();
+				}
+				boolean willRun = (isForce() || isValidationNecessary(vmd, delta));
+				if( willRun )jobValidators.add( vmd );
+			}
+			else if (valInstance != null){
+				validators.add( vmd );
+			}
+		}
+		if( jobValidators.size() > 0 ){
+			launchJobs( jobValidators, reporter );
+		}
+				
+		ValidatorMetaData currentVmd = null;
+		try {
+			for (ValidatorMetaData vmd : validators) {
+				currentVmd = vmd;
 				// Is validation about to be run on this validator?
-				// Validation will run either if this operation forces
-				// regardless
+				// Validation will run either if this operation forces regardless
 				// of need, or if the validator was not run automatically.
 				// If validation is not about to be run, then don't activate
-				// the plugin
+				// the plug-in
 				try {
 					delta = getFileDeltas(reporter.getProgressMonitor(), vmd);
 					boolean willRun = (isForce() || isValidationNecessary(vmd, delta));
-					if (logger.isLoggingLevel(Level.FINEST)) {
-						TimeEntry entry = ValidationPlugin.getTimeEntry();
-						entry.setSourceID("ValidationOperation.validate(WorkbenchReporter)"); //$NON-NLS-1$
-						entry.setProjectName(getProject().getName());
-						entry.setToolName(vmd.getValidatorUniqueName());
-						entry.setElapsedTime(0);
+					if (Tracing.isTraceV1()) {
 						StringBuffer buffer = new StringBuffer();
-						buffer.append("will run? "); //$NON-NLS-1$
+						buffer.append("ValidationOperation-01: will run? "); //$NON-NLS-1$
 						buffer.append(willRun);
 						buffer.append("  "); //$NON-NLS-1$
 						buffer.append("is force? "); //$NON-NLS-1$
@@ -924,8 +859,6 @@
 						buffer.append(_isAutoBuild);
 						buffer.append("  "); //$NON-NLS-1$
 						buffer.append("isAutoValidate? "); //$NON-NLS-1$
-						boolean autoBuild = (_isAutoBuild == null) ? ValidatorManager.getManager().isGlobalAutoBuildEnabled() : _isAutoBuild.booleanValue();
-						buffer.append(ValidatorManager.getManager().isAutoValidate(getProject(), autoBuild));
 						buffer.append("  "); //$NON-NLS-1$
 						buffer.append("isIncremental? "); //$NON-NLS-1$
 						buffer.append(vmd.isIncremental());
@@ -939,33 +872,15 @@
 								buffer.append(getDeltaAsString(delta));
 							}
 						}
-						entry.setDetails(buffer.toString());
-						logger.write(Level.FINEST, entry);
+						Tracing.log(buffer);
 					}
 					if (!willRun) {
 						continue;
 					}
-				} catch (CoreException exc) {
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidationOperation.validate(WorkbenchReporter)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
+				} catch (CoreException e) {
+					ValidationPlugin.getPlugin().handleException(e);
 					String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 					reporter.displaySubtask(mssg);
-					/*
-					 The code  below  causes bundle not found exception since, the  bundle here is
-					 validate_base and we  are  trying to load that bundle from the classloader of 
-					 the Validator. 
-			  
-					String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-					Message message = ValidationPlugin.getMessage();
-					message.setSeverity(IMessage.NORMAL_SEVERITY);
-					message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-					message.setParams(msgParm);
-					reporter.addMessage(validator, message);
-					*/
 					continue;
 				}
 				try {
@@ -975,16 +890,10 @@
 					
 					checkCanceled(reporter);
 					
-				} catch (InstantiationException exc) {
+				} catch (InstantiationException e) {
 					// Remove the vmd from the reader's list
 					ValidationRegistryReader.getReader().disableValidator(vmd);
-					// Log the reason for the disabled validator
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidationOperation::validate(WorkbenchReporter)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
+					ValidationPlugin.getPlugin().handleException(e);
 					continue;
 				}
 				
@@ -998,23 +907,19 @@
 //				} else {
 //					internalValidate(reporter, validator, vmd, context, delta);
 //				}
-				internalValidate(reporter, (IValidator)validator, vmd, context, delta);
-				}
-		} catch (OperationCanceledException exc) {
-			handleOperationCancelledValidateException(reporter, validator, vmd, iterator, logger, exc);
-		} finally {
+				internalValidate(reporter, validator, vmd, context, delta);
+			}
+		} 
+		catch (OperationCanceledException exc) {
+			handleOperationCancelledValidateException(reporter, validator, currentVmd, iterator, exc);
+		} 
+		finally {
 			releaseCachedMaps();
 		}
 	}
 
-	/**
-	 * 
-	 */
 	private void releaseCachedMaps() {
-		if (ValidationRegistryReader.getReader().projectValidationMetaData != null) {
-			ValidationRegistryReader.getReader().projectValidationMetaData.clear();
-			ValidationRegistryReader.getReader().projectValidationMetaData = null;
-		}
+		ValidationRegistryReader.getReader().clearCachedMaps();
 		IProjectValidationHelper helper = ValidationHelperRegistryReader.getInstance().getValidationHelper();
 		if (helper != null)
 			helper.disposeInstance();
@@ -1022,9 +927,8 @@
 
 	private void initValidateContext(IFileDelta[] delta) {
 		 if (context instanceof WorkbenchContext) {
-			 ((WorkbenchContext)context).setValidationFileURIs(new ArrayList());
-			 for(int i = 0; i < delta.length; i++) {
-				 IFileDelta file = delta[i];
+			 ((WorkbenchContext)context).setValidationFileURIs(new ArrayList<String>());
+			 for(IFileDelta file : delta) {
 				 if(file.getDeltaType() != IFileDelta.DELETED ) {
 					 ((WorkbenchContext)context).getValidationFileURIs().add(file.getFileName());
 				 }
@@ -1040,7 +944,8 @@
 	 * @param logger
 	 * @param exc
 	 */
-	private void handleOperationCancelledValidateException(WorkbenchReporter reporter, IValidator validator, ValidatorMetaData vmd, Iterator iterator, final Logger logger, OperationCanceledException exc) {
+	private void handleOperationCancelledValidateException(WorkbenchReporter reporter, IValidator validator, 
+		ValidatorMetaData vmd, Iterator<ValidatorMetaData> iterator, OperationCanceledException exc) {
 		/*
 		 * If the user terminates validation (i.e., presses "cancel" on the progress monitor) before
 		 * the validation completes, perform clean up on each configured enabled validator.
@@ -1069,13 +974,7 @@
 			} catch (InstantiationException exc2) {
 				// Remove the vmd from the reader's list
 				ValidationRegistryReader.getReader().disableValidator(vmd);
-				// Log the reason for the disabled validator
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation::validate(WorkbenchReporter)"); //$NON-NLS-1$
-					entry.setTargetException(exc2);
-					logger.write(Level.SEVERE, entry);
-				}
+				ValidationPlugin.getPlugin().handleException(exc2);
 				continue;
 			}
 			reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_CLEANUP, new String[]{vmd.getValidatorDisplayName()}));
@@ -1084,14 +983,13 @@
 			reporter.displaySubtask(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_VALIDATOR_TERMINATED, new String[]{getProject().getName(), vmd.getValidatorDisplayName()}));
 		}
 		throw exc; // propagate the exception up to the framework so that
-		// the framework can display the correct "cancelled"
+		// the framework can display the correct "canceled"
 		// message in the dialog
 
 	}
 
 	/* package */
 	void internalValidate(final WorkbenchReporter reporter, final IValidator validator, final ValidatorMetaData vmd,final IWorkbenchContext aContext, final IFileDelta[] delta) throws OperationCanceledException {
-		final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
 		try {
 			checkCanceled(reporter);
 			removeOldMessages(reporter, validator, vmd, delta);
@@ -1110,21 +1008,13 @@
 		} catch (OperationCanceledException exc) {
 			// This is handled in the validate(WorkbenchReporter) method.
 			throw exc;
-		}catch (Throwable exc) {
+		}catch (Exception e) {
 			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
-			// If a runtime exception has occured, e.g. NullPointer or
-			// ClassCast, display it with the "A runtime exception has occurred
-			// " messsage.
-			// This will provide more information to the user when he/she calls
-			// IBM Service.
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationOperation.internalValidate"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			// error and continue with the next validator.
+			// If a runtime exception has occurred, e.g. NullPointer or
+			// ClassCast, display it with the "A runtime exception has occurred" message.
+			// This will provide more information to the user when he/she calls Service.
+			ValidationPlugin.getPlugin().handleException(e);
 			String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 			reporter.displaySubtask(mssg);
 			
@@ -1165,7 +1055,6 @@
 		// task.
 		InternalValidatorManager.getManager().removeOperationTasks(getProject(), vmd);
 		checkCanceled(reporter);
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
 		try {
 			// Check to see if a full build must be performed, or if a delta
 			// build is to be performed, if there are files to verify for that
@@ -1197,11 +1086,6 @@
 						IResource resource = reporter.getMessageResource(validator, fd);
 						if (fd.getObject().equals(fd.getResource())) {
 							WorkbenchReporter.removeAllMessages(resource, validator); // remove
-							// all
-							// messages
-							// from
-							// this
-							// resource
 						} else {
 							reporter.removeAllMessages(validator, fd.getObject());
 						}
@@ -1212,35 +1096,10 @@
 			}
 		} catch (OperationCanceledException exc) {
 			throw exc;
-		} catch (Throwable exc) {
-			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
-			// If a runtime exception has occured, e.g. NullPointer or
-			// ClassCast, display it with the "A runtime exception has occurred
-			// " messsage.
-			// This will provide more information to the user when he/she calls
-			// IBM Service.
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationOperation.validate(WorkbenchMonitor)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 			reporter.displaySubtask(mssg);
-			
-			/*
-			 The code  below  causes bundle not found exception since, the  bundle here is
-			 validate_base and we  are  trying to load that bundle from the classloader of 
-			 the Validator. 			 * 
-			String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-			Message message = ValidationPlugin.getMessage();
-			message.setSeverity(IMessage.NORMAL_SEVERITY);
-			message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-			message.setParams(msgParm);
-			reporter.addMessage(validator, message);
-			*/
 			return;
 		}
 	}
@@ -1252,22 +1111,26 @@
 	 * <code>process</code> also sends output to the <code>IProgressMonitor</code>, and calls
 	 * the current Validator to validate the resource.
 	 * 
-	 * To process a resource, there are several steps: 1. check if the resource is registered for
+	 * <p>To process a resource, there are several steps:</p> 
+	 * <p>1. check if the resource is registered for
 	 * this validator (i.e., the validator has either specified it in a filter, or has not filtered
-	 * it out explicitly) 2. call <code>isValidationSource</code> on the current validator with
+	 * it out explicitly)</p>
+	 * 
+	 * <p>2. call <code>isValidationSource</code> on the current validator with
 	 * the current resource. This method performs further filtering by the Validator itself, in
 	 * addition to the static filtering done by the framework, based on the information in
-	 * plugin.xml. 3. If the resource passes both filters, call <code>validate</code> on the
-	 * validator, with the resource. 4. When complete (either by failing to pass a filter, or by the
+	 * plugin.xml.</p> 
+	 * 
+	 * <p>3. If the resource passes both filters, call <code>validate</code> on the
+	 * validator, with the resource.</p> 
+	 * 
+	 * <p>4. When complete (either by failing to pass a filter, or by the
 	 * completion of the <code>validate</code>), increment the IProgressMonitor's status by one
-	 * (i.e., one resource has been processed.)
+	 * (i.e., one resource has been processed.)</p>
 	 */
 	private final void launchValidator(WorkbenchReporter reporter, IValidator validator, ValidatorMetaData vmd, IWorkbenchContext helper, IFileDelta[] delta) {
-		if (reporter == null) {
-			return;
-		}
+		if (reporter == null)return;
 		checkCanceled(reporter);
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
 		// Check to see if a full build must be performed, or if a delta
 		// build is to be performed, if there are files to verify for that
 		// validator. (If it's delta, but there are no files, calling
@@ -1277,47 +1140,42 @@
 			// Validate the resource; this step will add errors/warnings to the
 			// task list, and remove errors/warnings from the task list.
 			if (helper instanceof WorkbenchContext) {
-				// Initialize the "loadRuleGroup" method with the group of
-				// rules
+				// Initialize the "loadRuleGroup" method with the group of rules
 				// which the validator should validate.
 				((WorkbenchContext) helper).setRuleGroup(getRuleGroup());
 			}
-			long start = System.currentTimeMillis();
 			String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_STARTING_VALIDATION, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 			reporter.displaySubtask(message);
-			if (logger.isLoggingLevel(Level.FINEST)) {
-				// This internal "launched validators" value is used only in
-				// tests.
+			if (Tracing.isLogging()) {
+				// This internal "launched validators" value is used only in tests.
 				getLaunchedValidators().add(vmd);
 			}
 			//initValidateContext(delta);
 			ValidatorLauncher.getLauncher().start(helper, validator, reporter);
-			long finish = System.currentTimeMillis();
-			if (logger.isLoggingLevel(Level.INFO)) {
-				TimeEntry entry = ValidationPlugin.getTimeEntry();
-				entry.setSourceID("ValidationOperation.launchValidator"); //$NON-NLS-1$
-				entry.setProjectName(getProject().getName());
-				entry.setToolName(vmd.getValidatorUniqueName());
-				entry.setElapsedTime(finish - start);
-				if (logger.isLoggingLevel(Level.FINE)) {
-					StringBuffer buffer = new StringBuffer();
-					if (isFullValidate()) {
-						buffer.append("EVERYTHING"); //$NON-NLS-1$
-					} else {
-						if (delta.length == 0) {
-							buffer.append("NOTHING"); //$NON-NLS-1$
-						} else {
-							buffer.append(getDeltaAsString(delta));
-						}
-					}
-					entry.setDetails(buffer.toString());
-				}
-				logger.write(Level.INFO, entry);
-			}
+			//TODO GRK determine if timing info should be added here
+//			if (logger.isLoggingLevel(Level.INFO)) {
+//				TimeEntry entry = ValidationPlugin.getTimeEntry();
+//				entry.setSourceID("ValidationOperation.launchValidator"); //$NON-NLS-1$
+//				entry.setProjectName(getProject().getName());
+//				entry.setToolName(vmd.getValidatorUniqueName());
+//				entry.setElapsedTime(finish - start);
+//				if (logger.isLoggingLevel(Level.FINE)) {
+//					StringBuffer buffer = new StringBuffer();
+//					if (isFullValidate()) {
+//						buffer.append("EVERYTHING"); //$NON-NLS-1$
+//					} else {
+//						if (delta.length == 0) {
+//							buffer.append("NOTHING"); //$NON-NLS-1$
+//						} else {
+//							buffer.append(getDeltaAsString(delta));
+//						}
+//					}
+//					entry.setDetails(buffer.toString());
+//				}
+//				logger.write(Level.INFO, entry);
+//			}
 			message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 			reporter.displaySubtask(message);
-		} catch (MessageLimitException exc) {
-			throw exc;
 		} catch (OperationCanceledException exc) {
 			throw exc;
 		} catch (ValidationException exc) {
@@ -1325,78 +1183,25 @@
 			// accidentally wrapped a MessageLimitException instead of
 			// propagating it.
 			if (exc.getAssociatedException() != null) {
-				if (exc.getAssociatedException() instanceof MessageLimitException) {
-					MessageLimitException mssgExc = (MessageLimitException) exc.getAssociatedException();
-					throw mssgExc;
-				} else if (exc.getAssociatedException() instanceof ValidationException) {
+				if (exc.getAssociatedException() instanceof ValidationException) {
 					ValidationException vexc = (ValidationException) exc.getAssociatedException();
 					vexc.setClassLoader(validator.getClass().getClassLoader()); // first,
-					// set
-					// the
-					// class
-					// loader,
-					// so
-					// that
-					// the
-					// exception's
-					// getMessage()
-					// method
-					// can
-					// retrieve
-					// the
-					// resource
-					// bundle
+					// set the class loader, so that the exception's getMessage() method
+					// can retrieve the resource bundle
 				}
 			}
 			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
+			// error and continue with the next validator.
 			exc.setClassLoader(validator.getClass().getClassLoader()); // first,
-			// set
-			// the
-			// class
-			// loader,
-			// so
-			// that
-			// the
-			// exception's
-			// getMessage()
-			// method
-			// can
-			// retrieve
-			// the
-			// resource
-			// bundle
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationOperation.validate(WorkbenchMonitor)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				if (exc.getAssociatedException() != null) {
-					entry.setTargetException(exc.getAssociatedException());
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+			ValidationPlugin.getPlugin().handleException(exc);
+			ValidationPlugin.getPlugin().handleException(exc.getAssociatedException());
 			String message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 			reporter.displaySubtask(message);
 			if (exc.getAssociatedMessage() != null) {
 				reporter.addMessage(validator, exc.getAssociatedMessage());
 			}
-		} catch (Throwable exc) {
-			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
-			// If a runtime exception has occured, e.g. NullPointer or
-			// ClassCast, display it with the "A runtime exception has occurred
-			// " messsage.
-			// This will provide more information to the user when he/she calls
-			// IBM Service.
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationOperation.validate(WorkbenchMonitor)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 			reporter.displaySubtask(mssg);
 			
@@ -1416,76 +1221,18 @@
 		} finally {
 			try {
 				validator.cleanup(reporter);
-			} catch (MessageLimitException e) {
-				throw e;
 			} catch (OperationCanceledException e) {
 				throw e;
-			} catch (Throwable exc) {
-				// If a runtime exception has occured, e.g. NullPointer or
-				// ClassCast, display it with the "A runtime exception has
-				// occurred " messsage.
-				// This will provide more information to the user when he/she
-				// calls IBM Service.
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation::launchValidator"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				
-				/*
-			 The code  below  causes bundle not found exception since, the  bundle here is
-			 validate_base and we  are  trying to load that bundle from the classloader of 
-			 the Validator.  
-				String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-				Message message = ValidationPlugin.getMessage();
-				message.setSeverity(IMessage.NORMAL_SEVERITY);
-				message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-				message.setParams(msgParm);
-				try {
-					reporter.addMessage(validator, message);
-				} catch (MessageLimitException e) {
-					throw e;
-				}
-				
-				*/
+			} catch (Exception e) {
+				ValidationPlugin.getPlugin().handleException(e);
 				return;
 			}
 			try {
 				helper.cleanup(reporter);
-			} catch (MessageLimitException e) {
-				throw e;
 			} catch (OperationCanceledException e) {
 				throw e;
-			} catch (Throwable exc) {
-				// If a runtime exception has occured, e.g. NullPointer or
-				// ClassCast, display it with the "A runtime exception has
-				// occurred " messsage.
-				// This will provide more information to the user when he/she
-				// calls IBM Service.
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation::launchValidator"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-				
-				/*
-			 The code  below bundle not found exception since, the  bundle here is
-			 validate_base and we  are  trying to load that bundle from the classloader of 
-			 the Validator. 
-			 				 
-				String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-				Message message = ValidationPlugin.getMessage();
-				message.setSeverity(IMessage.NORMAL_SEVERITY);
-				message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-				message.setParams(msgParm);
-				try {
-					reporter.addMessage(validator, message);
-				} catch (MessageLimitException e) {
-					throw e;
-				}
-				*/
+			} catch (Exception e) {
+				ValidationPlugin.getPlugin().handleException(e);
 				return;
 			} finally {
 				// Now that cleanup has been called, set the project to null.
@@ -1502,23 +1249,16 @@
 			}
 			// Tell the progress monitor that we've completed n units of work
 			// (i.e., n resources validated by one validator).
-			reporter.getProgressMonitor().worked(((delta == null) ? 1 : delta.length)); // One
-			// unit
-			// of
-			// work
-			// = 1
-			// (i.e.,
-			// 1
-			// resource)
+			reporter.getProgressMonitor().worked(((delta == null) ? 1 : delta.length));
 		}
 	}
 
-	private Runnable wrapInRunnable(final WorkbenchReporter reporter, final IValidator validator, final ValidatorMetaData vmd, final IWorkbenchContext helper, final IFileDelta[] delta, final Iterator iterator) {
-		// Need to create a new Runnable each time because several Runnable
-		// instances may exist at the same time.
-		Runnable runnable = new ProjectRunnable(reporter, validator, vmd, helper, delta, iterator);
-		return runnable;
-	}
+//	private Runnable wrapInRunnable(final WorkbenchReporter reporter, final IValidator validator, final ValidatorMetaData vmd, final IWorkbenchContext helper, final IFileDelta[] delta, final Iterator iterator) {
+//		// Need to create a new Runnable each time because several Runnable
+//		// instances may exist at the same time.
+//		Runnable runnable = new ProjectRunnable(reporter, validator, vmd, helper, delta, iterator);
+//		return runnable;
+//	}
 
 	/*
 	 * // For convenience, keep this method in the class but commented out. // When async needs to
@@ -1531,27 +1271,30 @@
 	 * (hProject.getName().indexOf("fork") > -1)) { Thread.dumpStack(); } System.err.println(prefix +
 	 * "End ValidationOperation"); }
 	 */
+	
+	/**
+	 * @deprecated This class is no longer used by the framework.
+	 */
 	public class ProjectRunnable implements Runnable {
-		private WorkbenchReporter _reporter = null;
-		private IValidator _validator = null;
-		private ValidatorMetaData _vmd = null;
-//		private IValidationContext _helper = null;
-		private IFileDelta[] __delta = null;
+		private WorkbenchReporter _reporter;
+		private IValidator _validator;
+		private ValidatorMetaData _vmd;
+		private IFileDelta[] _delta;
 
-		public ProjectRunnable(WorkbenchReporter reporter, IValidator validator, ValidatorMetaData vmd, IWorkbenchContext helper, IFileDelta[] delta, Iterator iterator) {
+		@SuppressWarnings("unchecked")
+		public ProjectRunnable(WorkbenchReporter reporter, IValidator validator, 
+			ValidatorMetaData vmd, IWorkbenchContext helper, IFileDelta[] delta, Iterator iterator) {
 			_reporter = reporter;
 			_validator = validator;
 			_vmd = vmd;
-//			_helper = helper;
-			__delta = delta;
+			_delta = delta;
 		}
 
 		public void run() {
 			try {
-				internalValidate(_reporter, _validator, _vmd, context,__delta);
+				internalValidate(_reporter, _validator, _vmd, context,_delta);
 			} catch (OperationCanceledException exc) {
-				// User can't cancel a job in a background thread, so ignore
-				// this exception.
+				// User can't cancel a job in a background thread, so ignore this exception.
 			}
 		}
 
@@ -1574,49 +1317,24 @@
 		this.context = context;
 	}
 	
-	void launchJobs(HashSet validators, final WorkbenchReporter reporter) throws OperationCanceledException{
+	void launchJobs(Set<ValidatorMetaData> validators, final WorkbenchReporter reporter) throws OperationCanceledException{
 		
-		final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		Iterator iterator = validators.iterator();
-		ValidatorMetaData vmd = null;
 		IValidator validator = null;
 		IFileDelta[] delta = null;
 		IWorkbenchContext workbenchcontext = null;
 		
-		while (iterator.hasNext()) {
+		for (ValidatorMetaData vmd : validators) {
 			checkCanceled(reporter);
 			
-			vmd = (ValidatorMetaData) iterator.next();
-
 			try {
 				delta = getFileDeltas(reporter.getProgressMonitor(), vmd);
 				boolean willRun = (isForce() || isValidationNecessary(vmd, delta));
-				if (!willRun) {
-					continue;
-				}
-			} catch (CoreException exc) {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation.launchJobs()"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+				if (!willRun)continue;
+
+			} catch (CoreException e) {
+				ValidationPlugin.getPlugin().handleException(e);
 				String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 				reporter.displaySubtask(mssg);
-				
-				/*
-			 The code  below  causes bundle not found exception since, the  bundle here is
-			 validate_base and we  are  trying to load that bundle from the classloader of 
-			 the Validator. 
-			  
-				String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-				Message message = ValidationPlugin.getMessage();
-				message.setSeverity(IMessage.NORMAL_SEVERITY);
-				message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-				message.setParams(msgParm);
-				reporter.addMessage(validator, message);
-				*/
-				
 				continue;
 			}
 			
@@ -1627,16 +1345,10 @@
 				vmd.addHelper((IValidatorJob)validator, workbenchcontext);				
 				checkCanceled(reporter);
 				
-			} catch (InstantiationException exc) {
+			} catch (InstantiationException e) {
 				// Remove the vmd from the reader's list
 				ValidationRegistryReader.getReader().disableValidator(vmd);
-				// Log the reason for the disabled validator
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation.launchJobs()"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				continue;
 			}
 			
@@ -1652,142 +1364,97 @@
 			} catch (OperationCanceledException exc) {
 				throw exc;
 
-			} catch (Throwable exc) {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationOperation.launchJobs()"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+			} catch (Exception e) {
+				ValidationPlugin.getPlugin().handleException(e);
 				String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
 				reporter.displaySubtask(mssg);
-
-				/*
-				 The code  below  causes bundle not found exception since, the  bundle here is
-				 validate_base and we  are  trying to load that bundle from the classloader of 
-				 the Validator. 
-				 */
-				 
-//				String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
-//				Message message = ValidationPlugin.getMessage();
-//				message.setSeverity(IMessage.NORMAL_SEVERITY);
-//				message.setId(ResourceConstants.VBF_EXC_RUNTIME);
-//				message.setParams(msgParm);
-//				reporter.addMessage(validator, message);
+			} catch (Error e) {
+				ValidationPlugin.getPlugin().handleException(e);
+				String mssg = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY, new String[]{getProject().getName(), vmd.getValidatorDisplayName()});
+				reporter.displaySubtask(mssg);
+				throw e;
 			} finally {
 				// If user fixes problem, and limit exceeded, add "exceeded"
-				// message, or
-				// if limit not exceeded any more, remove "exceeded" message.
+				// message, or if limit not exceeded any more, remove "exceeded" message.
 				reporter.getProgressMonitor().done();
 			}
 		}
-				
-				
-				
-		
-
 	}
-	
-	
-
-	
+		
 	private void initValidateContext(IFileDelta[] delta, IWorkbenchContext context ) {
 		 if (context instanceof WorkbenchContext) {
-			 ((WorkbenchContext)context).setValidationFileURIs(new ArrayList());
-			 for(int i = 0; i < delta.length; i++) {
-				 IFileDelta file = delta[i];
+			 ((WorkbenchContext)context).setValidationFileURIs(new ArrayList<String>());
+			 for(IFileDelta file : delta) {
 				 if(file.getDeltaType() != IFileDelta.DELETED ) {
 					 ((WorkbenchContext)context).getValidationFileURIs().add(file.getFileName());
 				 }
 			 } 
 		}
 	}
-			
-			
+						
 	private final void launchValidatorJob(WorkbenchReporter reporter,
-				   IValidatorJob validator, ValidatorMetaData vmd,
-				   IWorkbenchContext helper, IFileDelta[] delta) {
+		IValidatorJob validator, ValidatorMetaData vmd, IWorkbenchContext helper, IFileDelta[] delta) {
 		
-		if (reporter == null) {
-			return;
-		}
+		if (reporter == null)return;
 		checkCanceled(reporter);
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
 
 		if (helper instanceof WorkbenchContext) {
 			((WorkbenchContext) helper).setRuleGroup(getRuleGroup());
 		}
-		if (logger.isLoggingLevel(Level.FINEST)) {
-			// This internal "launched validators" value is used only in
-			// tests.
+		if (Tracing.isLogging()) {
+			// This internal "launched validators" value is used only in tests.
 			getLaunchedValidators().add(vmd);
 		}
 		
-		ValidatorJob validatorjob = new ValidatorJob( validator, vmd.getValidatorDisplayName(), vmd.getValidatorUniqueName(),
-					helper.getProject(), helper );
-
+		ValidatorJob validatorjob = new ValidatorJob( validator, vmd.getValidatorDisplayName(), 
+			vmd.getValidatorUniqueName(), helper.getProject(), helper );
 
 		ISchedulingRule schedulingRule = validator.getSchedulingRule(helper);
 		validatorjob.setRule( schedulingRule );		
 		QualifiedName validatorKey = new QualifiedName(null, "Validator"); //$NON-NLS-1$
 		validatorjob.setProperty( validatorKey, validator );
 		validatorjob.addJobChangeListener(
-					new JobChangeAdapter(){
-						
-						public void done(IJobChangeEvent event){
-							Job job = event.getJob();
-							QualifiedName validatorKey = new QualifiedName(null, "Validator"); //$NON-NLS-1$
-							IValidatorJob validator = (IValidatorJob)job.getProperty( validatorKey );
-							ValidatorManager mgr = ValidatorManager.getManager();
-							final ArrayList list = mgr.getMessages(validator);							
-							
-							IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-							    public void run(IProgressMonitor monitor) throws CoreException {
+			new JobChangeAdapter(){
+				
+				public void done(IJobChangeEvent event){
+					Job job = event.getJob();
+					QualifiedName validatorKey = new QualifiedName(null, "Validator"); //$NON-NLS-1$
+					IValidatorJob validator = (IValidatorJob)job.getProperty( validatorKey );
+					ValidatorManager mgr = ValidatorManager.getManager();
+					final List<MessageInfo> list = mgr.getMessages(validator);							
+					
+					IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+					    public void run(IProgressMonitor monitor) throws CoreException {
 
-							    	Iterator it = list.iterator();
-									while( it.hasNext() ){
-										MessageInfo info = (MessageInfo)it.next();
-										try {
-										
-										TaskListUtility.addTask( info.getMessageOwnerId(), info.getResource(),
-												info.getLocation(), info.getMsg().getId(), info.getText(),
-												info.getMsg().getSeverity(),
-												info.getMarkerId(),
-												info.getTargetObjectName(),
-												info.getMsg().getGroupName(),
-												info.getMsg().getOffset(),
-												info.getMsg().getLength());
-										
-										
-										} catch (CoreException exc) {
-											Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-											if (logger.isLoggingLevel(Level.SEVERE)) {
-												LogEntry entry = ValidationPlugin.getLogEntry();
-												entry.setTargetException(exc);
-												logger.write(Level.SEVERE, entry);
-											}
-										}										
-									}
-							    }
-							};
-							try {
-								
-								ResourcesPlugin.getWorkspace().run(runnable, null, IWorkspace.AVOID_UPDATE, null);
-							} catch (CoreException e) {
-							   e.printStackTrace();
+							for(MessageInfo info : list){
+								try {								
+									TaskListUtility.addTask( info.getMessageOwnerId(), info.getResource(),
+										info.getLocation(), info.getMsg().getId(), info.getText(),
+										info.getMsg().getSeverity(),
+										info.getMarkerId(),
+										info.getTargetObjectName(),
+										info.getMsg().getGroupName(),
+										info.getMsg().getOffset(),
+										info.getMsg().getLength());								
+								} catch (CoreException e) {
+									ValidationPlugin.getPlugin().handleException(e);
+								}										
 							}
-							mgr.clearMessages( validator );
-							validator = null;
-						}
+					    }
+					};
+					try {
+						
+						ResourcesPlugin.getWorkspace().run(runnable, null, IWorkspace.AVOID_UPDATE, null);
+					} catch (CoreException e) {
+					   e.printStackTrace();
 					}
+					mgr.clearMessages( validator );
+					validator = null;
+				}
+			}
 		);
 		validatorjob.setPriority(Job.DECORATE);
-
-		ValidationLauncherJob validationLauncherJob = new ValidationLauncherJob(validatorjob);
-		validationLauncherJob.schedule();
-		
-		//validatorjob.schedule();		
-		
+		launcherJob.addValidationJob(validatorjob);
 	}
 		
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationUtility.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationUtility.java
index 0a29729..4e53471 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationUtility.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidationUtility.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -13,14 +13,11 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.ConfigurationConstants;
 import org.eclipse.wst.validation.internal.ConfigurationManager;
 import org.eclipse.wst.validation.internal.ProjectConfiguration;
@@ -45,7 +42,7 @@
 			return new String[0];
 		}
 
-		Set tempSet = new HashSet();
+		Set<String> tempSet = new HashSet<String>();
 		for (int i = 0; i < markers.length; i++) {
 			IMarker marker = markers[i];
 			try {
@@ -54,15 +51,9 @@
 					// The ValidationMigrator will remove any "unowned" validation markers.
 					continue;
 				}
-				tempSet.add(owner);
-			} catch (CoreException exc) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidationUtility.listValidatorClasses(" + resource.getName() + ", " + severity); //$NON-NLS-1$  //$NON-NLS-2$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+				tempSet.add((String)owner);
+			} catch (CoreException e) {
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 
@@ -100,22 +91,12 @@
 					return false;
 				}
 			}
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationUtility::isEnabled(" + project.getName() + ", String[])"); //$NON-NLS-1$  //$NON-NLS-2$  //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return false;
 		}
 
 		return true;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorJob.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorJob.java
index 473fea2..048dd39 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorJob.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorJob.java
@@ -1,16 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 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.wst.validation.internal.operations;
 
-import java.util.logging.Level;
-
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
+import org.eclipse.wst.validation.IPerformanceMonitor;
+import org.eclipse.wst.validation.PerformanceCounters;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.internal.Misc;
 import org.eclipse.wst.validation.internal.ResourceConstants;
 import org.eclipse.wst.validation.internal.ResourceHandler;
 import org.eclipse.wst.validation.internal.ValidationRegistryReader;
@@ -25,20 +34,15 @@
 
 
 	private IProject			project;
-	private String				validatorUniqueName;
 	private IWorkbenchContext 	helper;
 	private IValidatorJob		validator;
 	
 	public ValidatorJob(String name) {
 		super(name);
 	}
-
-
-	   
 	   
 	public ValidatorJob( IValidatorJob validator, String displayName, String name, IProject project, IWorkbenchContext aHelper  ){
 		super(displayName);
-		validatorUniqueName = name;
 		this.project = project;
 		this.helper = aHelper;
 		this.validator = validator;
@@ -49,6 +53,14 @@
 	//error information is reported by the IReporter
 	
 	protected IStatus run(IProgressMonitor monitor) {
+		
+		IPerformanceMonitor pm = ValidationFramework.getDefault().getPerformanceMonitor();
+		long elapsed = -1;
+		long cpuTime = -1;
+		if (pm.isCollecting()){
+			elapsed = System.currentTimeMillis();
+			cpuTime = Misc.getCPUTime();
+		}
 
 		monitor.beginTask("Validating", IProgressMonitor.UNKNOWN); //$NON-NLS-1$
 		IStatus status = IValidatorJob.OK_STATUS;
@@ -56,28 +68,17 @@
 
 		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
 		
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-
 		try {
 
 			String message = ResourceHandler.getExternalizedMessage(
 				ResourceConstants.VBF_STATUS_STARTING_VALIDATION,
 				new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
 			
-			monitor.subTask(message);
-			
-		
+			monitor.subTask(message);		
 			status = validator.validateInJob(helper, reporter);
 		
-			//to remove, if error is returned from the validator, the job stays back in the UI...
-			//should we even return error status if error is found in the validator
-			//status = IValidatorJob.OK_STATUS;	
-			
-			
-			
-			message = ResourceHandler.getExternalizedMessage(
-					ResourceConstants.VBF_STATUS_ENDING_VALIDATION,
-					new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
+			message = ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_STATUS_ENDING_VALIDATION,
+				new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
 			monitor.subTask(message);
  
 		} catch (OperationCanceledException exc) {
@@ -93,42 +94,24 @@
 				}
 			}
 			// If there is a problem with this particular validator, log the
-			// error and continue
-			// with the next validator.
+			// error and continue with the next validator.
 			exc.setClassLoader(validator.getClass().getClassLoader());
 
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorJob.run()"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				if (exc.getAssociatedException() != null) {
-					entry.setTargetException(exc.getAssociatedException());
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+			ValidationPlugin.getPlugin().handleException(exc);
+			ValidationPlugin.getPlugin().handleException(exc.getAssociatedException());
 			String message = ResourceHandler.getExternalizedMessage(
-						ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY,
-						new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
+					ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY,
+					new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName()});
 			
 			monitor.subTask(message);
 			if (exc.getAssociatedMessage() != null) {
 				reporter.addMessage(validator, exc.getAssociatedMessage());
 			}
-		} catch (Throwable exc) {
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorJob.run()"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-				IStatus stat = new Status(IStatus.ERROR,
-			    		      ValidationPlugin.getPlugin().PLUGIN_ID, 0, "", exc );
-					logger.write(Level.SEVERE, stat);
-				
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			String mssg = ResourceHandler.getExternalizedMessage(
-						ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY,
-						new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName() });
+				ResourceConstants.VBF_STATUS_ENDING_VALIDATION_ABNORMALLY,
+				new String[]{helper.getProject().getName(), vmd.getValidatorDisplayName() });
 			
 			monitor.subTask(mssg);
 			
@@ -137,13 +120,8 @@
 				validator.cleanup(reporter);
 			} catch (OperationCanceledException e) {
 				throw e;
-			} catch (Throwable exc) {
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidatorJob.run()"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+			} catch (Exception exc) {
+				ValidationPlugin.getPlugin().handleException(exc);
 				
 				String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$				
 				Message message = ValidationPlugin.getMessage();
@@ -158,13 +136,8 @@
 					vmd.removeHelper( validator );
 				}catch (OperationCanceledException e) {
 					throw e;
-				} catch (Throwable exc) {
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("ValidatorJob.run()"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
+				} catch (Exception exc) {
+					ValidationPlugin.getPlugin().handleException(exc);
 					String[] msgParm = {exc.getClass().getName(), vmd.getValidatorDisplayName(), (exc.getMessage() == null ? "" : exc.getMessage())}; //$NON-NLS-1$
 					Message message = ValidationPlugin.getMessage();
 					message.setSeverity(IMessage.NORMAL_SEVERITY);
@@ -185,6 +158,16 @@
 			//monitor.worked(((delta == null) ? 1 : delta.length)); // One
 			monitor.done();
 		}
+		if (pm.isCollecting()){
+			if (cpuTime != -1){
+				cpuTime = Misc.getCPUTime() - cpuTime;
+			}
+			String projectName = null;
+			if (project != null)projectName = project.getName();
+			pm.add(new PerformanceCounters(vmd.getValidatorUniqueName(), 
+				vmd.getValidatorDisplayName(),projectName, -1, 
+				System.currentTimeMillis()-elapsed, cpuTime));
+		}
 		return status;
 	}
 
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorManager.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorManager.java
index 68605e6..7cf398b 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorManager.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorManager.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -20,7 +20,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.ICommand;
 import org.eclipse.core.resources.IMarker;
@@ -30,8 +29,7 @@
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.wst.validation.ValidationFramework;
 import org.eclipse.wst.validation.internal.ConfigurationManager;
 import org.eclipse.wst.validation.internal.GlobalConfiguration;
 import org.eclipse.wst.validation.internal.InternalValidatorManager;
@@ -40,40 +38,33 @@
 import org.eclipse.wst.validation.internal.ValidationRegistryReader;
 import org.eclipse.wst.validation.internal.ValidatorMetaData;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 import org.eclipse.wst.validation.internal.provisional.core.IValidatorJob;
 
 /**
- * A centralised class for accessing validation metadata.
+ * A centralized class for accessing validation metadata.
  * 
  * This class is not intended to be subclassed outside of the validation framework.
  */
 public final class ValidatorManager {
 	public static final String VALIDATOR_JOB_FAMILY = "validators";	 //$NON-NLS-1$	
-	private static ValidatorManager inst = null;
-	private static IResourceUtil _resourceUtil = null; // a common utility, different whether or not
-	// WSAD is running in headless or UI mode,
-	// which can retrieve the line number of some
-	// MOF objects.
+	private static ValidatorManager inst;
+	private static IResourceUtil _resourceUtil; // a common utility, different whether or not
+	// WSAD is running in headless or UI mode, which can retrieve the line number of some MOF objects.
 	private static final Class RESOURCEUTIL_DEFAULTCLASS = org.eclipse.wst.validation.internal.operations.DefaultResourceUtil.class;
 	private static Class _resourceUtilClass = RESOURCEUTIL_DEFAULTCLASS;
-	private static final Set EMPTY_SET = Collections.EMPTY_SET; // an empty set, provided for
-	// convenience, so that we only
-	// construct one empty set once.
-	private Set _suspendedProjects = null;
-	private boolean _suspendAllValidation = false;
-	private static Class _messageLimitOwner = null;
-	private String[] _internalOwners = null;
-	private Map validatorMsgs = Collections.synchronizedMap( new HashMap() );	
-	private Set problemValidators = new HashSet();	
+		
+	// an empty set, provided for convenience, so that we only construct one empty set once.
+	private static final Set<ValidatorMetaData> EMPTY_SET = new HashSet<ValidatorMetaData>();
 	
-	/**
-	 * ValidatorManager constructor comment.
-	 */
+	private static Class 	_messageLimitOwner;
+	private String[] 		_internalOwners;
+	private Map<IValidatorJob, List<MessageInfo>> _validatorMsgs = 
+		Collections.synchronizedMap( new HashMap<IValidatorJob, List<MessageInfo>>() );	
+	private Set<ValidatorMetaData> _problemValidators = new HashSet<ValidatorMetaData>();	
+	
 	private ValidatorManager() {
 		super();
-		_suspendedProjects = new HashSet();
 		_internalOwners = new String[0];
 
 		addInternalOwner(getMessageLimitOwner());
@@ -87,23 +78,81 @@
 		setEnabledValidators(currentProject, EMPTY_SET, monitor);
 	}
 
+	public void enableValidator(String validatorId) {
+
+		try {
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
+			GlobalConfiguration gf = ConfigurationManager.getManager().getGlobalConfiguration();
+			gf.enableSingleValidator(vmd);
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	
+	public void disableValidator(String validatorId){
+
+		try {
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
+			GlobalConfiguration gf = ConfigurationManager.getManager().getGlobalConfiguration();
+			gf.disableSingleValidator(vmd);
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	
+	public void enableValidator(String validatorId, IProject project, boolean manualValidation, boolean buildValidation) {		
+		try {
+			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
+			prjp.setDoesProjectOverride(true);
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
+			
+			if(manualValidation)prjp.enableSingleManualValidator(vmd);
+			if (buildValidation)prjp.enableSingleBuildValidator(vmd);
+			prjp.store();		
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void disableValidator(String validatorId, IProject project, boolean manualValidation, boolean buildValidation){
+
+		try {
+			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
+			prjp.setDoesProjectOverride(true);
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorId);
+			
+			if(manualValidation)prjp.disableSingleManualValidator(vmd);
+			if (buildValidation)prjp.disableSingleBuildValidator(vmd);
+			prjp.store();
+			
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+
+	}
+	
+	
+	
 	/**
 	 * Given an IProject, if the IProject does not support build validation, add the validation
-	 * builder to the project description so that the project can support bulid validation.
+	 * builder to the project description so that the project can support build validation.
 	 */
 	public static void addProjectBuildValidationSupport(IProject project) {
-		if (project == null) {
-			return;
-		}
+		/*
+		 * I'm working my way through the code to see where this gets called. One place was in ModuleCoreNature
+		 * which had hard coded the builder id.
+		 */
+		if (project == null)return;
 
 		boolean isBuilderAdded = false;
 		try {
 			IProjectDescription description = project.getDescription();
-			ICommand[] commands = description.getBuildSpec(); // don't need to check if description
-			// is null, because it's never null
+			ICommand[] commands = description.getBuildSpec();
 			if (commands != null) {
-				for (int i = 0; i < commands.length; i++) {
-					String builderName = commands[i].getBuilderName();
+				for (ICommand command : commands) {
+					String builderName = command.getBuilderName();
 					if (builderName == null) {
 						// builder name will be null if it has not been set
 						continue;
@@ -146,7 +195,7 @@
 	 * incremental validation), and false otherwise. The test, to find out if the project supports
 	 * build validation or not, is to see if the ValidationBuilder is configured on that type of
 	 * project.
-	 * 
+	 * <p>
 	 * This is a long-running process - is there any way that I can shorten the amount of time this
 	 * takes?
 	 */
@@ -196,19 +245,9 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			prjp.setEnabledValidators(prjp.getValidators());
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorManager::enableAllValidators(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
@@ -222,19 +261,9 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			return InternalValidatorManager.wrapInSet(prjp.getIncrementalValidators());
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorManager::getProjectConfiguredIncrementalValidators(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -251,19 +280,9 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			return InternalValidatorManager.wrapInSet(prjp.getValidators());
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidatorManager::getProjectConfiguredValidatorMetaData(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -281,19 +300,9 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			return InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(true));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getProjectEnabledIncrementalValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -311,19 +320,9 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			return InternalValidatorManager.wrapInSet(prjp.getEnabledIncrementalValidators(false));
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getProjectEnabledNonIncrementalValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -401,12 +400,10 @@
 	/**
 	 * @deprecated For use by the validation framework only.
 	 */
-	public Set getIncrementalValidators(Collection vmds) {
-		if (vmds == null) {
-			return Collections.EMPTY_SET;
-		}
+	public Set<ValidatorMetaData> getIncrementalValidators(Collection vmds) {
+		if (vmds == null)return new HashSet<ValidatorMetaData>();
 
-		Set result = new HashSet();
+		Set<ValidatorMetaData> result = new HashSet<ValidatorMetaData>();
 		Iterator iterator = vmds.iterator();
 		while (iterator.hasNext()) {
 			ValidatorMetaData vmd = (ValidatorMetaData) iterator.next();
@@ -528,19 +525,9 @@
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			ValidatorMetaData[] vmds = prjp.getEnabledIncrementalValidators(true);
 			return InternalValidatorManager.wrapInSet(vmds);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getEnabledIncrementalValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
@@ -551,21 +538,18 @@
 	 * Given a checked list of enabled validators, return a set of the ones which are configured on
 	 * the project and, if getIncremental is true, which also run incrementally.
 	 */
-	public Set getProjectConfiguredValidators(IProject project, Object[] enabledVal, boolean getIncremental) {
+	public Set<ValidatorMetaData> getProjectConfiguredValidators(IProject project, Object[] enabledVal, 
+			boolean getIncremental) {
 		if ((project == null) || (enabledVal == null) || (enabledVal.length == 0)) {
-			return Collections.EMPTY_SET;
+			return new HashSet<ValidatorMetaData>();
 		}
 
-		Set val = new HashSet();
+		Set<ValidatorMetaData> val = new HashSet<ValidatorMetaData>();
 		for (int i = 0; i < enabledVal.length; i++) {
 			ValidatorMetaData vmd = (ValidatorMetaData) enabledVal[i];
-			if (!vmd.isConfiguredOnProject(project)) {
-				continue;
-			}
+			if (!vmd.isConfiguredOnProject(project))continue;
 
-			if (!getIncremental || vmd.isIncremental()) {
-				val.add(vmd);
-			}
+			if (!getIncremental || vmd.isIncremental())val.add(vmd);
 		}
 		return val;
 	}
@@ -589,7 +573,7 @@
 	/**
 	 * For use by the validation framework only.
 	 */
-	protected Set getEnabledValidators(IProject project) {
+	protected Set<ValidatorMetaData> getEnabledValidators(IProject project) {
 		try {
 			ValidatorMetaData[] vmds = null;
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
@@ -598,86 +582,55 @@
 			else
 			   vmds = getStateOfProjectLevelValidatorsFromGlobal(prjp);
 			return InternalValidatorManager.wrapInSet(vmds);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getEnabledValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}
 
 	private ValidatorMetaData[] getStateOfProjectLevelValidatorsFromGlobal(ProjectConfiguration prjp) throws InvocationTargetException {
-		List enabledGlobalValidatorsForProject = new ArrayList();
+		List<ValidatorMetaData> enabledGlobalValidatorsForProject = new ArrayList<ValidatorMetaData>();
 		GlobalConfiguration gf = ConfigurationManager.getManager().getGlobalConfiguration();
 		List allProjectValidator = getAllValidatorUniqueNames(prjp.getValidators());
-		ValidatorMetaData[] vmd = gf.getBuildEnabledValidators();
-		for(int i = 0; i < vmd.length; i++) {
-			if(allProjectValidator.contains(vmd[i].getValidatorUniqueName())) {
-				enabledGlobalValidatorsForProject.add(vmd[i]);
+		for(ValidatorMetaData vmd : gf.getBuildEnabledValidators()) {
+			if(allProjectValidator.contains(vmd.getValidatorUniqueName())) {
+				enabledGlobalValidatorsForProject.add(vmd);
 			}
 	   }
 		return (ValidatorMetaData[]) enabledGlobalValidatorsForProject.toArray(new ValidatorMetaData[enabledGlobalValidatorsForProject.size()]);
 	}
 	
-	private List getAllValidatorUniqueNames(ValidatorMetaData[] metaData) {
-		List names = new ArrayList();
-		for(int i = 0; i < metaData.length; i++) {
-			names.add(metaData[i].getValidatorUniqueName());
+	private List<String> getAllValidatorUniqueNames(ValidatorMetaData[] metaData) {
+		List<String> names = new ArrayList<String>();
+		for(ValidatorMetaData vmd : metaData) {
+			names.add(vmd.getValidatorUniqueName());
 		}
 		return names;
 	}
 	
 	
 
-	protected Set getManualEnabledValidators(IProject project) {
+	protected Set<ValidatorMetaData> getManualEnabledValidators(IProject project) {
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			ValidatorMetaData[] vmds = prjp.getManualEnabledValidators();
 			return InternalValidatorManager.wrapInSet(vmds);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getEnabledValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}	
 	
-	protected Set getBuildEnabledValidators(IProject project) {
+	protected Set<ValidatorMetaData> getBuildEnabledValidators(IProject project) {
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			ValidatorMetaData[] vmds = prjp.getBuildEnabledValidators();
 			return InternalValidatorManager.wrapInSet(vmds);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::getEnabledValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return Collections.EMPTY_SET;
 		}
 	}	
@@ -721,19 +674,9 @@
 				// Can't run validation, so remove the "exceeded" message
 				ValidatorManager.getManager().removeMessageLimitExceeded(project);
 			}*/
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.updateTaskList(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
@@ -743,19 +686,9 @@
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			boolean incrementalValEnabled = (prjp.numberOfEnabledIncrementalValidators() > 0);
 			return canAutoValidateButtonBeEnabled(project, isGlobalAutoBuildOn, incrementalValEnabled);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::canAutoValidateButtonBeEnabled" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return false;
 		}
 	}
@@ -773,19 +706,9 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			return prjp.isEnabled(validatorName);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.isEnabled(" + project.getName() + ", " + validatorName + ")"); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return false;
 		}
 	}
@@ -798,19 +721,9 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			return prjp.isEnabled(vmd);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::isEnabled" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return false;
 		}
 	}
@@ -840,112 +753,52 @@
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			return prjp.numberOfEnabledValidators();
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager::numberProjectEnabledValidators" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return 0;
 		}
 	}
 
 
 	/**
-	 * Suspends, or undoes the suspension of, validation on the current project. If "suspend" is
-	 * true then validation is suspended and if it's "false" then validation will run on the
-	 * project. The value of this variable is not persisted.
-	 * 
-	 * Be VERY CAREFUL when you use this method! Turn validation back on in a finally block because
-	 * if the code which suspended validation crashes, the user has no way to unsuspend validation.
-	 * The user will have to shut down & restart WSAD to get validation to work again.
-	 * 
-	 * If an operation is used to make changes that should not be validated, then use the technique
-	 * documented in the "Preventing Validation" topic of the "Validation Guide" (in the
-	 * org.eclipse.wst.validation.internal.provisional.core.core.prop plugin). If you don't, validation may not be suspended.
+	 * @deprecated Use ValidationFramework.suspendValidation(project, suspend) directly.
+	 * @see ValidationFramework#suspendValidation(IProject, boolean)
 	 */
 	public void suspendValidation(IProject project, boolean suspend) {
-		if (project == null) {
-			return;
-		}
-
-		if (!project.exists()) {
-			return;
-		}
-
-		// Ignore whether or not the project is closed. If it's closed then it will not be built
-		// and the "Run Validation" option will not be available.
-		if (suspend) {
-			_suspendedProjects.add(project);
-		} else {
-			_suspendedProjects.remove(project);
-		}
+		ValidationFramework.getDefault().suspendValidation(project, suspend);
 	}
 
 	/**
-	 * Suspends, or undoes the suspension of, validation on all projects in the workbench. If
-	 * "suspend" is true then validation is suspended and if it's "false" then validation will run.
-	 * The value of this variable is not persisted.
-	 * 
-	 * Be VERY CAREFUL when you use this method! Turn validation back on in a finally block because
-	 * if the code which suspended validation crashes, the user has no way to unsuspend validation.
-	 * The user will have to shut down & restart WSAD to get validation to work again.
-	 * 
-	 * If an operation is used to make changes that should not be validated, then use the technique
-	 * documented in the "Preventing Validation" topic of the "Validation Guide" (in the
-	 * org.eclipse.wst.validation.internal.provisional.core.core.prop plugin). If you don't, validation may not be suspended.
+	 * @deprecated Use ValidationFramework.getDefault().suspendAllValidation(suspend) directly.
+	 * @see ValidationFramework#suspendAllValidation(boolean)
 	 */
 	public void suspendAllValidation(boolean suspend) {
-		_suspendAllValidation = suspend;
+		ValidationFramework.getDefault().suspendAllValidation(suspend);
 	}
 
 	/**
-	 * Return true if "suspend all" is enabled, false otherwise.
+	 * @deprecated Use ValidationFramework.getDefault().isSuspended() directly.
+	 * @see ValidationFramework#isSuspended()
 	 */
 	public boolean isSuspended() {
-		return _suspendAllValidation;
+		return ValidationFramework.getDefault().isSuspended();
 	}
 
 	/**
-	 * Returns true if validation will not run on the project because it's been suspended. This
-	 * method checks only the suspension status; if validation cannot run for some other reason (for
-	 * example, there are no enabled validators), yet the IProject is not suspended, this method
-	 * will return true even though validation will not run.
+	 * @deprecated Use ValidationFramework.getDefault().isSuspended(project) directly.
+	 * @see ValidationFramework#isSuspended(IProject)
 	 */
 	public boolean isSuspended(IProject project) {
-		if (project == null) {
-			return false;
-		}
-
-		if (_suspendAllValidation) {
-			return true;
-		}
-
-		return _suspendedProjects.contains(project);
+		return ValidationFramework.getDefault().isSuspended(project);
 	}
 
 	/**
-	 * This method should be called by any code that is preparing to suspend validation on a
-	 * project. Rather than calling isSuspsend(IProject), which will return true if all validation
-	 * has been suspended, this method returns the state of the project itself. See the
-	 * ValidationMigrator::migrateProject for an example.
-	 * 
-	 * @param project
-	 * @return boolean
+	 * @deprecated Use ValidationFramework.getDefault().isProjectSuspended(project) directly.
+	 * @see ValidationFramework#isProjectSuspended(IProject)
 	 */
 	public boolean isProjectSuspended(IProject project) {
-		if (project == null) {
-			return false;
-		}
-
-		return _suspendedProjects.contains(project);
+		return ValidationFramework.getDefault().isProjectSuspended(project);
 	}
 
 	/**
@@ -954,7 +807,7 @@
 	 * Given a list of validators' plugin ids, make those validators enabled for this project. All
 	 * others, disable for this project.
 	 */
-	public void setEnabledValidators(IProject project, Set vmdsSet, IProgressMonitor monitor) {
+	public void setEnabledValidators(IProject project, Set<ValidatorMetaData> vmdsSet, IProgressMonitor monitor) {
 		try {
 			ProjectConfiguration prjp = ConfigurationManager.getManager().getProjectConfiguration(project);
 			ValidatorMetaData[] vmds = null;
@@ -968,19 +821,9 @@
 			prjp.setEnabledValidators(vmds);
 
 			updateTaskList(project);
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceIdentifier("ValidatorManager.setEnabledValidators(" + project.getName() + ", Set, IProgressMonitor)"); //$NON-NLS-1$  //$NON-NLS-2$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 		}
 	}
 
@@ -989,7 +832,7 @@
 	}
 
 	/**
-	 * This method is for use by batch EJB deploy only. Only in batch mode is an infinitie number of
+	 * This method is for use by batch EJB deploy only. Only in batch mode is an infinite number of
 	 * messages allowed.
 	 * 
 	 * Enable a project to have an infinite number of messages.
@@ -1012,45 +855,45 @@
 		return null;
 	}
 
-	/**
-	 * Return true if the given IMarker is a "limit was exceeded" message, false otherwise.
-	 */
-	private boolean isLimitMessage(IMarker marker) {
-		if (marker == null) {
-			return false;
-		}
+//	/**
+//	 * Return true if the given IMarker is a "limit was exceeded" message, false otherwise.
+//	 */
+//	private boolean isLimitMessage(IMarker marker) {
+//		if (marker == null) {
+//			return false;
+//		}
+//
+//		return TaskListUtility.isOwner(marker, WorkbenchReporter.getUniqueId(getMessageLimitOwner()));
+//	}
 
-		return TaskListUtility.isOwner(marker, WorkbenchReporter.getUniqueId(getMessageLimitOwner()));
-	}
-
-	/**
-	 * Return all of the IMarkers on the IProject excluding the "limit was exceeded" message. If
-	 * there are no markers, return null.
-	 */
-	private IMarker[] getValidationTasksWithoutLimitMessage(IProject project) {
-		IMarker[] allTasks = TaskListUtility.getValidationTasks(project, IMessage.ALL_MESSAGES);
-		if ((allTasks == null) || (allTasks.length == 0)) {
-			return null;
-		}
-
-		// Don't check if the limit message exists because
-		// any interaction with markers is costly. Since the
-		// interaction has to be done at least once, make that
-		// single occasion in the for loop below.
-		IMarker[] validatorMessages = new IMarker[allTasks.length];
-		int count = 0; // how many markers have been added to the result array?
-		for (int i = 0; i < allTasks.length; i++) {
-			IMarker marker = allTasks[i];
-			if (isLimitMessage(marker)) {
-				continue;
-			}
-			validatorMessages[count++] = marker;
-		}
-
-		IMarker[] result = new IMarker[count];
-		System.arraycopy(validatorMessages, 0, result, 0, count);
-		return result;
-	}
+//	/**
+//	 * Return all of the IMarkers on the IProject excluding the "limit was exceeded" message. If
+//	 * there are no markers, return null.
+//	 */
+//	private IMarker[] getValidationTasksWithoutLimitMessage(IProject project) {
+//		IMarker[] allTasks = TaskListUtility.getValidationTasks(project, IMessage.ALL_MESSAGES);
+//		if ((allTasks == null) || (allTasks.length == 0)) {
+//			return null;
+//		}
+//
+//		// Don't check if the limit message exists because
+//		// any interaction with markers is costly. Since the
+//		// interaction has to be done at least once, make that
+//		// single occasion in the for loop below.
+//		IMarker[] validatorMessages = new IMarker[allTasks.length];
+//		int count = 0; // how many markers have been added to the result array?
+//		for (int i = 0; i < allTasks.length; i++) {
+//			IMarker marker = allTasks[i];
+//			if (isLimitMessage(marker)) {
+//				continue;
+//			}
+//			validatorMessages[count++] = marker;
+//		}
+//
+//		IMarker[] result = new IMarker[count];
+//		System.arraycopy(validatorMessages, 0, result, 0, count);
+//		return result;
+//	}
 
 	/**
 	 * This method should be called only by the validation framework. Return true if the message was
@@ -1064,14 +907,8 @@
 			try {
 				ResourcesPlugin.getWorkspace().deleteMarkers(exceededMessage);
 				return true;
-			} catch (CoreException exc) {
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("ValidatorManager.removeMessageLimitExceeded(" + project.getName() + ")"); //$NON-NLS-1$  //$NON-NLS-2$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+			} catch (CoreException e) {
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 		return false;
@@ -1134,32 +971,31 @@
 	}
 	
 	public void cacheMessage(IValidatorJob validator, MessageInfo info){
-		ArrayList list = (ArrayList) validatorMsgs.get(validator);
+		List<MessageInfo> list = _validatorMsgs.get(validator);
 		if( list == null ){
-			list = new ArrayList();
-			validatorMsgs.put(validator, list);
+			list = new ArrayList<MessageInfo>();
+			_validatorMsgs.put(validator, list);
 		}
 		list.add(info);
 	}
 	
-	public ArrayList getMessages(IValidatorJob validator){
-		ArrayList list = (ArrayList) validatorMsgs.get(validator);
-		if( list == null )
-			list = new ArrayList();		
+	public List<MessageInfo> getMessages(IValidatorJob validator){
+		List<MessageInfo> list = _validatorMsgs.get(validator);
+		if( list == null )list = new ArrayList<MessageInfo>();		
 		return list;
 	}
 	
 	public void clearMessages(IValidatorJob validator){
-		ArrayList list = (ArrayList) validatorMsgs.get(validator);
+		List<MessageInfo> list = _validatorMsgs.get(validator);
 		if( list != null ){
 			list.clear();
 		}
-		validatorMsgs.remove( validator );
+		_validatorMsgs.remove( validator );
 	}
 
 	
-	public Set getProblemValidators() {
-		return problemValidators;
+	public Set<ValidatorMetaData> getProblemValidators() {
+		return _problemValidators;
 	}
 	
 }
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorSubsetOperation.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorSubsetOperation.java
index 533bb70..274ddec 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorSubsetOperation.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/ValidatorSubsetOperation.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -33,10 +33,8 @@
  * This operation is not intended to be subclassed outside of the validation framework.
  */
 public class ValidatorSubsetOperation extends ValidationOperation {
-	protected static final String DEFAULT_DEFAULTEXTENSION = null; // By default, assume that there
-
-	// is no default fallback
-	// extension
+	// By default, assume that there is no default fallback extension
+	protected static final String DEFAULT_DEFAULTEXTENSION = null; 
 
 	/**
 	 * Create an operation that runs a full validation on the named validators either if validation
@@ -149,40 +147,12 @@
 	public ValidatorSubsetOperation(IProject project, String fileExtension, String defaultExtension, Object[] changedResources, boolean async) throws IllegalArgumentException {
 		super(project, shouldForce(changedResources), async);
 
-		boolean filterIn = false; // force the resources to be filtered in even if the validator
-		// doesn't normally take them?
-		ValidatorMetaData[] vmds = InternalValidatorManager.getManager().getValidatorsForExtension(project, fileExtension); // return
-		// a
-		// list
-		// of
-		// validators
-		// which
-		// are
-		// configured
-		// to
-		// run
-		// on
-		// files
-		// with
-		// that
-		// extension.
-		// A
-		// validator
-		// will
-		// be
-		// in
-		// the
-		// list
-		// whether
-		// it
-		// has
-		// been
-		// enabled
-		// or
-		// disabled
-		// by
-		// the
-		// user.
+		// force the resources to be filtered in even if the validator doesn't normally take them?
+		boolean filterIn = false; 
+		
+		// a list of validators which are configured to run on files with that extension.
+		// A validator will be in the list whether it has been enabled or disabled by the user.
+		ValidatorMetaData[] vmds = InternalValidatorManager.getManager().getValidatorsForExtension(project, fileExtension);
 		if ((defaultExtension != null) && ((vmds == null) || (vmds.length == 0))) {
 			filterIn = true;
 			vmds = InternalValidatorManager.getManager().getValidatorsForExtension(project, defaultExtension);
@@ -194,23 +164,9 @@
 
 		setEnabledValidators(InternalValidatorManager.wrapInSet(vmds));
 
-		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, filterIn)); // construct
-		// an
-		// array
-		// of
-		// IFileDelta[]
-		// to
-		// wrap
-		// the
-		// Object[];
-		// one
-		// IFileDelta
-		// for
-		// each
-		// Object
-		// in
-		// the
-		// array
+		// construct an array of IFileDelta[] to wrap the Object[];
+		// one IFileDelta for each Object in the array
+		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, filterIn));
 	}
 
 	/**
@@ -249,7 +205,7 @@
 		}
 
 		if ((changedResources != null) && (changedResources.length > 0)) {
-			Set tempSet = new HashSet();
+			Set<IProject> tempSet = new HashSet<IProject>();
 			for (int i = 0; i < changedResources.length; i++) {
 				IProject p = changedResources[i].getProject();
 				if (!p.isOpen()) {
@@ -266,9 +222,9 @@
 			}
 			if (tempSet.size() != 1) {
 				StringBuffer buffer = new StringBuffer("\n"); //$NON-NLS-1$
-				Iterator iterator = tempSet.iterator();
+				Iterator<IProject> iterator = tempSet.iterator();
 				while (iterator.hasNext()) {
-					IProject p = (IProject) iterator.next();
+					IProject p = iterator.next();
 					buffer.append("\t"); //$NON-NLS-1$
 					buffer.append(p.getName());
 					if (iterator.hasNext()) {
@@ -288,22 +244,7 @@
 
 		setEnabledValidators(InternalValidatorManager.wrapInSet(vmds));
 		setFileDeltas(FilterUtil.getFileDeltas(getEnabledValidators(), changedResources, ifileDeltaType)); // construct
-		// an
-		// array
-		// of
-		// IFileDelta[]
-		// to
-		// wrap
-		// the
-		// IResource[];
-		// one
-		// IFileDelta
-		// for
-		// each
-		// IResource
-		// in
-		// the
-		// array
+		// an array of IFileDelta[] to wrap the IResource[]; one IFileDelta for each IResource in the array
 	}
 
 	/**
@@ -313,14 +254,14 @@
 	 * of IProject.)
 	 */
 	public void setValidators(String[] validatorNames) throws IllegalArgumentException {
-		Set enabled = new HashSet();
-		for (int i = 0; i < validatorNames.length; i++) {
-			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorNames[i]);
+		Set<ValidatorMetaData> enabled = new HashSet<ValidatorMetaData>();
+		for (String name : validatorNames) {
+			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(name);
 			if (vmd == null) {
-				// No validator, with that plugin id, can be run on that project.
+				// No validator, with that plug-in id, can be run on that project.
 				// Either the validator isn't installed, or the IProject passed in
 				// doesn't have the necessary nature.
-				throw new IllegalArgumentException(validatorNames[i]);
+				throw new IllegalArgumentException(name);
 			}
 			enabled.add(vmd);
 		}
@@ -333,4 +274,4 @@
 	public void setAlwaysRun(boolean force) {
 		setForce(force);
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchContext.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchContext.java
index 58b281f..eea36c1 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchContext.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchContext.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -16,7 +16,6 @@
 import java.util.Collection;
 import java.util.Hashtable;
 import java.util.List;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -25,9 +24,8 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.RegistryConstants;
+import org.eclipse.wst.validation.internal.Tracing;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 
@@ -37,20 +35,18 @@
  * symbolic model name.
  */
 public class WorkbenchContext implements IWorkbenchContext {
-	private IProject _project = null;
-	private Hashtable _modelRegistry = null;
-//	private static final IContainer[] NO_CONTAINERS = new IContainer[0];
-	private int _ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT;
-	public List validationFileURIs = null; 
+	private IProject 	_project;
+	private Hashtable<String,Method> 	_modelRegistry;
+	private int 		_ruleGroup = RegistryConstants.ATT_RULE_GROUP_DEFAULT;
+	public List<String> validationFileURIs; 
 	public static final String GET_PROJECT_FILES = "getAllFiles"; //$NON-NLS-1$
 	public static final String GET_FILE = "getFile"; //$NON-NLS-1$
-//	private static final IContainer[] NO_CONTAINERS = new IContainer[0];
 	public static final String VALIDATION_MARKER = "com.ibm.etools.validation.problemmarker"; //$NON-NLS-1$
 	public static final String VALIDATION_MARKER_OWNER = "owner";  //$NON-NLS-1$
 
 	public WorkbenchContext() {
 		super();
-		_modelRegistry = new Hashtable();
+		_modelRegistry = new Hashtable<String, Method>();
 
 		registerModel(IRuleGroup.PASS_LEVEL, "loadRuleGroup"); //$NON-NLS-1$
 		
@@ -157,16 +153,9 @@
 						foundResource = null;
 					}
 				}
-			} catch (IllegalArgumentException exc) {
+			} catch (IllegalArgumentException e) {
 				foundResource = null;
-
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("WorkbenchContext::getContainerRelativePath(IResource, IContainer)"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 			}
 		}
 
@@ -292,14 +281,8 @@
 		}
 		try {
 			return util.getLineNo(object);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext.getLineNo(Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return IMessage.LINENO_UNSET;
 		}
 
@@ -337,14 +320,8 @@
 		Method m = null;
 		try {
 			m = getClass().getMethod(methodName, parmTypes);
-		} catch (NoSuchMethodException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::getMethod(String, Class[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (NoSuchMethodException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 
@@ -390,10 +367,10 @@
 	   * @param validatorClassName The name of the validator class.
 	   * @return The collection of files relevant for the validator class specified.
 	   */
-	  public Collection getFiles(String validatorClassName)
+	  public Collection<IFile> getFiles(String validatorClassName)
 	  {
 	    IProject project = getProject();
-	    List files = new ArrayList();
+	    List<IFile> files = new ArrayList<IFile>();
 	    getFiles(files, project, validatorClassName);
 	    return files;
 	  }
@@ -406,7 +383,7 @@
 	   * @param resource The resource to look for files in.
 	   * @param validatorClassName The name of the validator class.
 	   */
-	  protected void getFiles(Collection files, IContainer resource, String validatorClassName)
+	  protected void getFiles(Collection<IFile> files, IContainer resource, String validatorClassName)
 	  {
 	    try
 	    {
@@ -416,7 +393,7 @@
 	        if (ValidatorManager.getManager().isApplicableTo(validatorClassName, resourceArray[i])) 
 	        {
 	          if (resourceArray[i] instanceof IFile) 
-				  files.add(resourceArray[i]);
+				  files.add((IFile)resourceArray[i]);
 	        }
 	        if (resourceArray[i].getType() == IResource.FOLDER)
 	         getFiles(files,(IContainer)resourceArray[i], validatorClassName) ;
@@ -549,9 +526,7 @@
 	 * "registerModel" method.
 	 */
 	public final boolean isRegistered(String symbolicName) {
-		if (symbolicName == null) {
-			return false;
-		}
+		if (symbolicName == null)return false;
 		return _modelRegistry.containsKey(symbolicName);
 	}
 
@@ -577,52 +552,22 @@
 	 */
 	public Object loadModel(String symbolicName, Object[] parms) {
 		try {
-			Method loader = (Method) _modelRegistry.get(symbolicName);
-			if (loader == null) {
-				return null;
-			}
+			Method loader = _modelRegistry.get(symbolicName);
+			if (loader == null)return null;
 
 			return loader.invoke(this, parms);
-		} catch (IllegalAccessException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::loadModel(String, Object[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (IllegalAccessException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
-		} catch (InvocationTargetException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::loadModel(String, Object[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-
-				if (exc.getTargetException() != null) {
-					entry.setTargetException(exc.getTargetException());
-					logger.write(Level.SEVERE, exc);
-				}
-			}
+		} catch (InvocationTargetException e) {
+			ValidationPlugin.getPlugin().handleException(e);
+			ValidationPlugin.getPlugin().handleException(e.getTargetException());
 			return null;
-		} catch (NullPointerException exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::loadModel(String, Object[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (NullPointerException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
-		} catch (ExceptionInInitializerError exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchContext::loadModel(String, Object[])"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (ExceptionInInitializerError e) {
+			ValidationPlugin.getPlugin().handleException(e);
 			return null;
 		}
 	}
@@ -688,9 +633,8 @@
 	protected final void registerModel(String symbolicName, String loadMethodName, Class[] parms) {
 		Method method = getMethod(loadMethodName, parms);
 		if (method == null) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				StringBuffer buffer = new StringBuffer("Load method "); //$NON-NLS-1$
+			if (Tracing.isLogging()) {
+				StringBuffer buffer = new StringBuffer("WorkbenchContext-01: load method "); //$NON-NLS-1$
 				buffer.append(loadMethodName);
 				buffer.append("("); //$NON-NLS-1$
 				for (int i = 0; (parms != null) && (i < parms.length); i++) {
@@ -698,10 +642,7 @@
 				}
 				buffer.append(") must exist. " + getClass().getName() + " cannot support model " + symbolicName); //$NON-NLS-1$ //$NON-NLS-2$
 
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("ValidationRegistryReader.readExtension(IExtension)"); //$NON-NLS-1$
-				entry.setText(buffer.toString());
-				logger.write(Level.FINE, entry);
+				Tracing.log(buffer);
 			}
 		} else {
 			_modelRegistry.put(symbolicName, method);
@@ -763,28 +704,26 @@
 	}
 
 	public String getTargetObjectName(Object object) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
 	public String[] getURIs() {
 		String[] uris = new String[validationFileURIs.size()];
-		for(int i = 0; i < validationFileURIs.size(); i++) 
-			uris[i] = (String) validationFileURIs.get(i);
+		validationFileURIs.toArray(uris);
 		return uris;
 	}
 
 	/**
 	 * @return Returns the validationFileURIs.
 	 */
-	public List getValidationFileURIs() {
+	public List<String> getValidationFileURIs() {
 		return validationFileURIs;
 	}
 
 	/**
 	 * @param validationFileURIs The validationFileURIs to set.
 	 */
-	public void setValidationFileURIs(List validationFileURIs) {
+	public void setValidationFileURIs(List<String> validationFileURIs) {
 		this.validationFileURIs = validationFileURIs;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchFileDelta.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchFileDelta.java
index 2871aff..0953e0a 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchFileDelta.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchFileDelta.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -20,8 +20,8 @@
  * with the FileDelta.
  */
 public class WorkbenchFileDelta extends FileDelta {
-	private IResource _resource = null;
-	private Object _changedResource = null;
+	private IResource _resource;
+	private Object _changedResource;
 
 	private static final String FILE_NAME = "FILE NAME:"; //$NON-NLS-1$
 	private static final String DELTA = "  DELTA: "; //$NON-NLS-1$
@@ -75,4 +75,4 @@
 		buffer.append(String.valueOf(getObject()));
 		return buffer.toString();
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchReporter.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchReporter.java
index db6d2aa..f9162f3 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchReporter.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/operations/WorkbenchReporter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -13,18 +13,16 @@
 import java.text.MessageFormat;
 import java.util.Arrays;
 import java.util.List;
-import java.util.logging.Level;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.ResourceConstants;
 import org.eclipse.wst.validation.internal.ResourceHandler;
 import org.eclipse.wst.validation.internal.TaskListUtility;
+import org.eclipse.wst.validation.internal.Tracing;
 import org.eclipse.wst.validation.internal.ValidationRegistryReader;
 import org.eclipse.wst.validation.internal.ValidatorMetaData;
 import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
@@ -35,70 +33,56 @@
 
 /**
  * IValidator instances will interact with an instance of this class, but should never cast that
- * IReporter instance to WorkbenchReporter. The WorkbenchReporter class will be moved in Milestone
- * 4.
- * 
+ * IReporter instance to WorkbenchReporter.
+ * <p>
  * This class handles interaction between the user and the IValidator in the eclipse workbench
  * environment.
- * 
+ * <p>
  * This class must not be called outside of an IWorkspaceRunnable or IRunnableWithProgress. Many
  * resource deltas can be generated by the methods in this class.
- * 
+ * <p>
  * Only the validation framework may instantiate or alter instances of this class.
  */
 
-public final class WorkbenchReporter implements IReporter {
+public class WorkbenchReporter implements IReporter {
 	public static final String DEFAULT_LOCATION = ""; //$NON-NLS-1$
 	public static final int NO_MESSAGE_LIMIT = -1;
 
-	private IProject _project = null;
-	private IProgressMonitor _monitor = null;
+	private IProject _project;
+	private IProgressMonitor _monitor;
 
 	public static void addMessage(IResource resource, Class messageOwner, IMessage message) {
-		addMessage(resource, messageOwner, null, message); // null ClassLoader = use the default
-		// (clazz.getClassLoader());
+		addMessage(resource, messageOwner, null, message);
 	}
 	
 	public static void addMessage(IResource resource, Class messageOwner, ClassLoader cl, IMessage message) {
 		addMessage(resource, messageOwner, cl, message, null, ""); //$NON-NLS-1$
 	}
 	
-	public static void addMessage(IResource resource, Class clazz, IMessage message, String targetObjectName, String location) {
-		addMessage(resource, clazz, null, message, targetObjectName, location); // null = use the
-		// default
-		// ClassLoader
-		// (class.getClassLoader())
+	public static void addMessage(IResource resource, Class clazz, IMessage message, 
+		String targetObjectName, String location) {
+		addMessage(resource, clazz, null, message, targetObjectName, location);
 	}
 	
-	public static void addMessage(IResource resource, Class clazz, IMessage message, String targetObjectName, String location,String markerId) {
-		addMessage(resource, clazz, null, message, targetObjectName, location,markerId); // null = use the
-		// default
-		// ClassLoader
-		// (class.getClassLoader())
+	public static void addMessage(IResource resource, Class clazz, IMessage message, 
+		String targetObjectName, String location,String markerId) {
+		addMessage(resource, clazz, null, message, targetObjectName, location,markerId);
 	}
 	
-	
+	public static void addMessage(IResource resource, Class clazz, ClassLoader cl, IMessage message, 
+		String targetObjectName, String location) {
+		if ((clazz == null) || (message == null) || (resource == null))return;
 
-	public static void addMessage(IResource resource, Class clazz, ClassLoader cl, IMessage message, String targetObjectName, String location) {
-		if ((clazz == null) || (message == null) || (resource == null)) {
-			return;
-		}
-
-		if (cl == null) {
-			cl = clazz.getClassLoader();
-		}
+		if (cl == null)cl = clazz.getClassLoader();
 
 		addMessage(resource, getUniqueId(clazz), cl, message, targetObjectName, location);
 	}
 	
-	public static void addMessage(IResource resource, Class clazz, ClassLoader cl, IMessage message, String targetObjectName, String location, String markerId) {
-		if ((clazz == null) || (message == null) || (resource == null)) {
-			return;
-		}
+	public static void addMessage(IResource resource, Class clazz, ClassLoader cl, IMessage message, 
+		String targetObjectName, String location, String markerId) {
+		if ((clazz == null) || (message == null) || (resource == null))return;
 
-		if (cl == null) {
-			cl = clazz.getClassLoader();
-		}
+		if (cl == null)cl = clazz.getClassLoader();
 
 		addMessage(resource, getUniqueId(clazz), cl, message, targetObjectName, location, markerId);
 	}
@@ -107,44 +91,32 @@
 		addMessage(resource, messageOwnerId, cl, message, null, ""); //$NON-NLS-1$
 	}
 
-	public static void addMessage(IResource resource, String messageOwnerId, ClassLoader cl, IMessage message, String targetObjectName, String location) {
+	public static void addMessage(IResource resource, String messageOwnerId, ClassLoader cl, 
+		IMessage message, String targetObjectName, String location) {
 		int severity = message.getSeverity();
 		try {
-			TaskListUtility.addTask(messageOwnerId, resource, location, message.getId(), message.getText(cl), severity,targetObjectName, message.getGroupName(), message.getOffset(), message.getLength());
-		} catch (CoreException exc) {
-			// Couldn't add the task to the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.addMessage(Class,, IResource, IMessage, String, String"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			TaskListUtility.addTask(messageOwnerId, resource, location, message.getId(), 
+				message.getText(cl), severity,targetObjectName, message.getGroupName(), 
+				message.getOffset(), message.getLength());
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 	
-	public static void addMessage(IResource resource, String messageOwnerId, ClassLoader cl, IMessage message, String targetObjectName, String location, String markerId) {
+	public static void addMessage(IResource resource, String messageOwnerId, ClassLoader cl, 
+		IMessage message, String targetObjectName, String location, String markerId) {
 		int severity = message.getSeverity();
 		try {
-			TaskListUtility.addTask(messageOwnerId, resource, location, message.getId(), message.getText(cl), severity,markerId,targetObjectName, message.getGroupName(), message.getOffset(), message.getLength());
-		} catch (CoreException exc) {
-			// Couldn't add the task to the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.addMessage(Class,, IResource, IMessage, String, String"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			TaskListUtility.addTask(messageOwnerId, resource, location, message.getId(), 
+				message.getText(cl), severity,markerId,targetObjectName, message.getGroupName(), 
+				message.getOffset(), message.getLength());
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 	
-	
-
 	public static void removeAllMessages(IResource resource, IValidator validator) {
-		if (resource == null) {
-			return;
-		}
+		if (resource == null)return;
 
 		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
 		if (vmd == null) {
@@ -155,15 +127,8 @@
 		String[] validatorNames = vmd.getValidatorNames();
 		try {
 			TaskListUtility.removeAllTasks(resource, validatorNames);
-		} catch (CoreException exc) {
-			// Couldn't remove the task from the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.removeAllMessages(String[], IResource, String)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -187,33 +152,18 @@
 			//String targetObjectName = getTargetObjectName(vmd.getHelper(resource.getProject()), object);
 			String targetObjectName = getTargetObjectName( getHelper( resource.getProject(), validator), object);			
 			removeAllMessages(resource, validatorNames, targetObjectName);
-		} catch (InstantiationException exc) {
+		} catch (InstantiationException e) {
 			// Remove the vmd from the reader's list
 			ValidationRegistryReader.getReader().disableValidator(vmd);
-
-			// Log the reason for the disabled validator
-			final Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter::removeAllMessages(IResource, IValidator, Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
 	public static void removeAllMessages(IResource resource, String[] validatorNames, String targetObjectName) {
 		try {
 			TaskListUtility.removeAllTasks(resource, validatorNames, targetObjectName);
-		} catch (CoreException exc) {
-			// Couldn't remove the task from the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.removeAllMessages(String[], IResource, String)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -232,15 +182,8 @@
 	public static void removeMessageSubset(IResource resource, String[] ownerId, String targetObjectName, String groupName) {
 		try {
 			TaskListUtility.removeTaskSubset(resource, ownerId, targetObjectName, groupName);
-		} catch (CoreException exc) {
-			// Couldn't remove the task to the task list for some reason...
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.removeMessageSubset(String[], IResource, String, String)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (CoreException e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 	}
 
@@ -265,15 +208,6 @@
 		return getUniqueId(validator.getClass());
 	}
 
-	public static Logger getMsgLogger(IValidator validator) {
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validator);
-		if (vmd == null) {
-			return ValidationPlugin.getPlugin().getMsgLogger();
-		}
-
-		return vmd.getMsgLogger();
-	}
-
 	public static String getLocation(IWorkbenchContext helper, IMessage message) {
 		if (message == null) {
 			return getLocationText(helper, null);
@@ -289,14 +223,8 @@
 		String location = null;
 		try {
 			location = helper.getLocation(targetObject);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.getLocationText(Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 		if ((location == null) || (location.trim().equals(""))) { //$NON-NLS-1$
 			location = DEFAULT_LOCATION;
@@ -317,14 +245,8 @@
 		String targetObjectName = null;
 		try {
 			targetObjectName = helper.getTargetObjectName(targetObject);
-		} catch (Throwable exc) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.getTargetObjectName(Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+		} catch (Exception e) {
+			ValidationPlugin.getPlugin().handleException(e);
 		}
 		return targetObjectName;
 	}
@@ -415,7 +337,7 @@
 				try {
 					IWorkbenchContext helper = getHelper(validator);
 					resource = helper.getResource(object);
-				} catch (InstantiationException exc) {
+				} catch (InstantiationException e) {
 					try {
 						// Unlikely that an exception will be thrown, because this method is
 						// invoked by the validator, and if the validator is invoked, it's likely
@@ -425,45 +347,20 @@
 						// Remove the vmd from the reader's list
 						ValidationRegistryReader.getReader().disableValidator(vmd);
 
-						// Log the reason for the disabled validator
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("WorkbenchReporter::getMessageResource(IValidator, Object)"); //$NON-NLS-1$
-							entry.setTargetException(exc);
-							logger.write(Level.SEVERE, entry);
-						}
-					} catch (IllegalArgumentException exc2) {
+						ValidationPlugin.getPlugin().handleException(e);
+					} catch (IllegalArgumentException e2) {
 						// Even the IValidator is invalid. Unfortunately, can't disable the
 						// validator because it can't be found by the registry reader.
 						// Log the reason for the disabled validator
-						Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-						if (logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setSourceID("WorkbenchReporter::getMessageResource(IValidator, Object)"); //$NON-NLS-1$
-							entry.setTargetException(exc2);
-							logger.write(Level.SEVERE, entry);
-						}
+						ValidationPlugin.getPlugin().handleException(e2);
 					}
-				} catch (IllegalArgumentException exc) {
+				} catch (IllegalArgumentException e) {
 					// Even the IValidator is invalid. Unfortunately, can't disable the
 					// validator because it can't be found by the registry reader.
 					// Log the reason for the disabled validator
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("WorkbenchReporter::getMessageResource(IValidator, Object)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
-				} catch (Throwable exc) {
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setSourceID("WorkbenchReporter.getMessageResource(IValidator, Object)"); //$NON-NLS-1$
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
+					ValidationPlugin.getPlugin().handleException(e);
+				} catch (Exception e) {
+					ValidationPlugin.getPlugin().handleException(e);
 				}
 			}
 		}
@@ -522,24 +419,15 @@
 		ValidatorMetaData vmd = getVMD(validator);
 		try {
 			helper = getHelper(validator);
-		} catch (InstantiationException exc) {
+		} catch (InstantiationException e) {
 			try {
 				// Unlikely that an exception will be thrown, because this method is
 				// invoked by the validator, and if the validator is invoked, it's likely
 				// that the helper has been loaded too
-				
-				
+								
 				// Remove the vmd from the reader's list
 				ValidationRegistryReader.getReader().disableValidator(vmd);
-
-				// Log the reason for the disabled validator
-				Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setSourceID("WorkbenchReporter::addMessage(IValidator, IMessage)"); //$NON-NLS-1$
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
+				ValidationPlugin.getPlugin().handleException(e);
 				return;
 			} catch (IllegalArgumentException exc2) {
 				logDisabledValidator(exc2);
@@ -551,29 +439,23 @@
 		}
 
 		if (resource == null) {
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.FINE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter.addMessage(IValidator, Message)"); //$NON-NLS-1$
-				entry.setMessageTypeIdentifier(ResourceConstants.VBF_EXC_INVALID_RESOURCE);
-				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(ResourceConstants.VBF_EXC_INVALID_RESOURCE), new String[]{message.getText(), getTargetObjectName(helper, message)});
-				entry.setText(result);				
-				//entry.setTokens(new String[]{message.getText(), getTargetObjectName(helper, message)});
-				logger.write(Level.FINE, entry);
+			if (Tracing.isLogging()) {
+				String result = MessageFormat.format(ResourceHandler.getExternalizedMessage(
+					ResourceConstants.VBF_EXC_INVALID_RESOURCE), 
+					new Object[]{message.getText(), getTargetObjectName(helper, message)});
+				Tracing.log("WorkbenchReporter-01: ", result); //$NON-NLS-1$
 			}
 			return;
 		}
 
-		ValidatorManager mgr = ValidatorManager.getManager();
 		if( validator instanceof IValidatorJob ){
-			cacheMessage( (IValidatorJob)validator, resource, validator.getClass(), message, getTargetObjectName(helper, message), getLocation(helper, message), getMarkerId(vmd, message) );
+			cacheMessage( (IValidatorJob)validator, resource, validator.getClass(), message, 
+				getTargetObjectName(helper, message), getLocation(helper, message), getMarkerId(vmd, message) );
 		}else
-			addMessage(resource, validator.getClass(), message, getTargetObjectName(helper, message), getLocation(helper, message),getMarkerId(vmd,message));
+			addMessage(resource, validator.getClass(), message, getTargetObjectName(helper, message), 
+				getLocation(helper, message),getMarkerId(vmd,message));
 	}
 
-	/**
-	 * @param vmd
-	 */
 	private String getMarkerId(ValidatorMetaData vmd, IMessage message) {
 		if (vmd.getMarkerIds() != null) {
 			if (vmd.getMarkerIds().length == 1)
@@ -582,10 +464,10 @@
 				String messageMarkerId = message.getMarkerId();
 				if (messageMarkerId != null && messageMarkerId.length() > 0) {
 					String firstMarkerId = vmd.getMarkerIds()[0];
-					String pluginQualifier = firstMarkerId.substring(0, firstMarkerId.lastIndexOf("."));
+					String pluginQualifier = firstMarkerId.substring(0, firstMarkerId.lastIndexOf(".")); //$NON-NLS-1$
 					String qualifiedMessageMarkerId = null;
 					if (messageMarkerId.indexOf(pluginQualifier) == -1)
-						qualifiedMessageMarkerId = pluginQualifier + "." + messageMarkerId;
+						qualifiedMessageMarkerId = pluginQualifier + "." + messageMarkerId; //$NON-NLS-1$
 					else
 						qualifiedMessageMarkerId = messageMarkerId;
 					if (Arrays.asList(vmd.getMarkerIds()).contains(qualifiedMessageMarkerId))
@@ -596,20 +478,11 @@
 		return null;
 	}
 
-	/**
-	 * @param exc
-	 */
-	private void logDisabledValidator(IllegalArgumentException exc) {
+	private void logDisabledValidator(IllegalArgumentException e) {
 		// Even the IValidator is invalid. Unfortunately, can't disable the
 		// validator because it can't be found by the registry reader.
 		// Log the reason for the disabled validator
-		Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-		if (logger.isLoggingLevel(Level.SEVERE)) {
-			LogEntry entry = ValidationPlugin.getLogEntry();
-			entry.setSourceID("WorkbenchReporter::addMessage(IValidator, IMessage)"); //$NON-NLS-1$
-			entry.setTargetException(exc);
-			logger.write(Level.SEVERE, entry);
-		}
+		ValidationPlugin.getPlugin().handleException(e);
 		return;
 	}
 
@@ -654,22 +527,14 @@
 		try {
 			//helper = vmd.getHelper(resource.getProject());
 			helper = getHelper(validator);
-		} catch (InstantiationException exc) {
+		} catch (InstantiationException e) {
 			// Unlikely that an exception will be thrown, because this method is
 			// invoked by the validator, and if the validator is invoked, it's likely
 			// that the helper has been loaded too.
 
 			// Remove the vmd from the reader's list
 			ValidationRegistryReader.getReader().disableValidator(vmd);
-
-			// Log the reason for the disabled validator
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter::removeAllMessages(IResource, IValidator, Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			ValidationPlugin.getPlugin().handleException(e);
 
 			return;
 		}
@@ -699,22 +564,14 @@
 			//helper = vmd.getHelper(resource.getProject());
 			helper = getHelper( resource.getProject(), validator );
 		} 
-		catch (InstantiationException exc) {
+		catch (InstantiationException e) {
 			// Unlikely that an exception will be thrown, because this method is
 			// invoked by the validator, and if the validator is invoked, it's likely
 			// that the helper has been loaded too.
 
 			// Remove the vmd from the reader's list
 			ValidationRegistryReader.getReader().disableValidator(vmd);
-
-			// Log the reason for the disabled validator
-			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setSourceID("WorkbenchReporter::removeAllMessages(IResource, IValidator, Object)"); //$NON-NLS-1$
-				entry.setTargetException(exc);
-				logger.write(Level.SEVERE, entry);
-			}
+			ValidationPlugin.getPlugin().handleException(e);
 
 			return;
 		}
@@ -725,24 +582,16 @@
 	}
 	
 	private static void cacheMessage( IValidatorJob validator,
-				IResource resource,
-				Class clazz, IMessage message,
-				String targetObjectName,
-				String location,
-				String markerId ){
+		IResource resource,	Class clazz, IMessage message,
+		String targetObjectName, String location, String markerId ){
 		
-		if ((clazz == null) || (message == null) || (resource == null)) {
-			return;
-		}
-		ClassLoader cl = null;
-		if (cl == null) {
-			cl = clazz.getClassLoader();
-		}
+		if ((clazz == null) || (message == null) || (resource == null))return;
+		
+		ClassLoader cl = clazz.getClassLoader();
 		String text = message.getText(cl);
 		MessageInfo msgInfo = new MessageInfo(getUniqueId(clazz), resource, location,
-					text, targetObjectName, markerId, message );
+				text, targetObjectName, markerId, message );
 
-		ValidatorManager mgr = ValidatorManager.getManager();
-		mgr.cacheMessage( validator, msgInfo );
+		ValidatorManager.getManager().cacheMessage( validator, msgInfo );
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationHelperRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationHelperRegistryReader.java
index eef9e53..887f7cd 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationHelperRegistryReader.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationHelperRegistryReader.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -14,22 +14,26 @@
 import java.util.List;
 
 import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jem.util.RegistryReader;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.wst.validation.internal.IProjectValidationHelper;
 
-public class ValidationHelperRegistryReader extends RegistryReader {
+public class ValidationHelperRegistryReader {
 
+	/** validationHelper - extension point name. */
 	public static final String VALIDATION_HELPER = "validationHelper"; //$NON-NLS-1$
-	static final String ATT_ID = "id"; //$NON-NLS-1$ 
-	static final String ATT_HELPER_CLASS = "helperClass"; //$NON-NLS-1$
-	private static ValidationHelperRegistryReader INSTANCE = null;
-	private List validationHelpers = null;
 	
-	/**
-	 * Default constructor
-	 */
+	static final String ATT_ID = "id"; //$NON-NLS-1$ 
+	
+	/** helperClass - class that implements the extension. */
+	static final String ATT_HELPER_CLASS = "helperClass"; //$NON-NLS-1$
+	
+	private static ValidationHelperRegistryReader INSTANCE = null;
+	private List<IProjectValidationHelper> _validationHelpers;
+	
 	public ValidationHelperRegistryReader() {
-		super(ValidationPlugin.PLUGIN_ID, VALIDATION_HELPER);
 	}
 	
 	public static ValidationHelperRegistryReader getInstance() {
@@ -39,11 +43,42 @@
 		}
 		return INSTANCE;
 	}
+
+	/**
+	 * Read the extension point and parse it.
+	 */
+	public void readRegistry() {
+		IExtensionPoint point = Platform.getExtensionRegistry()
+			.getExtensionPoint(ValidationPlugin.PLUGIN_ID, VALIDATION_HELPER);
+		if (point == null)return;
+		IConfigurationElement[] elements = point.getConfigurationElements();
+		for (int i = 0; i < elements.length; i++) {
+			internalReadElement(elements[i]);
+		}
+	}
 	
-	private List getValidationHelpers() {
-		if (validationHelpers == null)
-			validationHelpers = new ArrayList();
-		return validationHelpers;
+	private void internalReadElement(IConfigurationElement element) {
+		boolean recognized = this.readElement(element);
+		if (!recognized) {
+			logError(element, "Error processing extension: " + element); //$NON-NLS-1$
+		}
+	}
+
+	/*
+	 * Logs the error in the desktop log using the provided text and the information in the configuration element.
+	 */
+	protected void logError(IConfigurationElement element, String text) {
+		IExtension extension = element.getDeclaringExtension();
+		StringBuffer buf = new StringBuffer();
+		buf.append("Plugin " + extension.getContributor().getName() + ", extension " + extension.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
+		buf.append("\n" + text); //$NON-NLS-1$
+		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, buf.toString());
+	}
+
+	private List<IProjectValidationHelper> getValidationHelpers() {
+		if (_validationHelpers == null)
+			_validationHelpers = new ArrayList<IProjectValidationHelper>();
+		return _validationHelpers;
 	}
 
 	public boolean readElement(IConfigurationElement element) {
@@ -61,9 +96,8 @@
 	}
 	
 	public IProjectValidationHelper getValidationHelper() {
-		if (getValidationHelpers().isEmpty())
-			return null;
-		return (IProjectValidationHelper) getValidationHelpers().get(0);
+		if (getValidationHelpers().isEmpty())return null;
+		return getValidationHelpers().get(0);
 	}
 
 }
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationPlugin.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationPlugin.java
index 1bec1c0..2b8b8dd 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationPlugin.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/plugin/ValidationPlugin.java
@@ -1,83 +1,78 @@
-/***************************************************************************************************
- * Copyright (c) 2001, 2004 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
+/*******************************************************************************
+ * Copyright (c) 2001, 2008 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
- **************************************************************************************************/
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wst.validation.internal.plugin;
 
-import java.util.Locale;
-
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ProjectScope;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.internal.DependencyIndex;
 import org.eclipse.wst.validation.internal.EventManager;
-import org.eclipse.wst.validation.internal.TimeEntry;
+import org.eclipse.wst.validation.internal.ProjectUnavailableError;
+import org.eclipse.wst.validation.internal.ResourceUnavailableError;
+import org.eclipse.wst.validation.internal.Tracing;
 import org.eclipse.wst.validation.internal.core.Message;
 import org.eclipse.wst.validation.internal.provisional.core.IMessage;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 
-public class ValidationPlugin extends WTPPlugin {
-	public static final String VALIDATION_PROP_FILE_NAME = "validate_base"; //$NON-NLS-1$
-	public static final String PLUGIN_ID = "org.eclipse.wst.validation"; //$NON-NLS-1$
-	private static ValidationPlugin _plugin = null;
-	private static TimeEntry _tEntry = null;
-	private static LogEntry _entry = null;
-	private static Message _message = null;
+/**
+ * How does this plug-in get activated? There are many other plug-ins that depend on this plug-in, so there are
+ * many paths that will activate it. One common path is the J2EE perspective. If the J2EE plug-in start method, they
+ * reference a class in this plug-in, which activates the plug-in. For that case this plug-in will be active even before
+ * the workbench is up.
+ */
+public class ValidationPlugin extends Plugin {
+	public static final String 	VALIDATION_PROP_FILE_NAME = "validate_base"; //$NON-NLS-1$
+	
+	/** org.eclipse.wst.validation - the plug-in id */
+	public static final String 	PLUGIN_ID = "org.eclipse.wst.validation"; //$NON-NLS-1$
+	private static ValidationPlugin _plugin;
+	private static Message 		_message;
 	public static final String VALIDATION_BUILDER_ID = PLUGIN_ID + ".validationbuilder"; //$NON-NLS-1$// plugin id of the validation builder
 	public static final String VALIDATOR_EXT_PT_ID = "validator"; //$NON-NLS-1$// extension point declaration of the validator 
 
-	/**
-	 * ValidationPlugin constructor comment.
-	 * 
-	 * @param descriptor
-	 *            org.eclipse.core.runtime.IPluginDescriptor
-	 */
 	public ValidationPlugin() {
 		super();
-		if (_plugin == null) {
-			_plugin = this;
-			//Commenting off the following lines the Plugin is not activated and the
-			//getMsgLogger tries to access the Plugin and the plugin is in a active pending state.
-			//getMsgLogger();
-			//logger.log(Level.CONFIG, null);
-
-		}
+		if (_plugin == null)_plugin = this;
 	}
-
+	
+	/**
+	 * Answer the name of the bundle's property file.
+	 * 
+	 * @deprecated Use getBundlePropertyFileName() instead.
+	 */
 	public static String getBundleName() {
+		return getBundlePropertyFileName();
+	}
+
+	/**
+	 * Answer the name of the bundle's property file.
+	 */
+	public static String getBundlePropertyFileName() {
 		return VALIDATION_PROP_FILE_NAME;
 	}
 
-	public static LogEntry getLogEntry() {
-		if (_entry == null) {
-			_entry = new LogEntry(VALIDATION_PROP_FILE_NAME);
-		} else {
-			_entry.reset();
-		}
-		// Always set the log entry's Locale before you use it
-		// because the user can reset it on the fly.
-		_entry.setLocaleOfOrigin(Locale.getDefault().toString());
-		return _entry;
-	}
-
-	public static TimeEntry getTimeEntry() {
-		if (_tEntry == null) {
-			_tEntry = new TimeEntry();
-		}
-		_tEntry.reset();
-		return _tEntry;
-	}
-
 	public static Message getMessage() {
 		if (_message == null) {
 			_message = new Message();
-			_message.setBundleName(getBundleName());
+			_message.setBundleName(getBundlePropertyFileName());
 		}
 		// clear the message for reuse
 		_message.setId(null);
@@ -88,41 +83,10 @@
 		return _message;
 	}
 
-	/**
-	 * Retrieves a hashtable of a logger's preferences initially from the
-	 * com.ibm.etools.logging.util.loggingDefaults extension point if specified in the
-	 * com.ibm.etools.logging.util plugin.xml file. If specified, the
-	 * com.ibm.etools.logging.util.loggingOptions extension point preferences in the parameter
-	 * plugin's plugin.xml file are returned.
-	 * 
-	 * The logger's preferences are stored in the return hashtable using the static instance
-	 * variables in LoggerStateHashKeys as keys.
-	 * 
-	 * @param plugin
-	 *            the Plugin polled for their logger's preferences in the plugin.xml file
-	 * @return hashtable of a logger's preferences
-	 */
-	/*
-	 * public Hashtable getMsgLoggerConfig(Plugin plugin) { return (new
-	 * PluginHelperImpl().getMsgLoggerConfig(plugin));
-	 */
 	public static ValidationPlugin getPlugin() {
 		return _plugin;
 	}
 
-	/**
-	 * Sets the logger's preferences based on values in the parameter hashtable.
-	 * 
-	 * The logger's preferences are stored in the parameter hashtable using the static instance
-	 * variables in LoggerStateHashKeys as keys.
-	 * 
-	 * @param msgLoggerConfig
-	 *            hashtable of the logger's preferences
-	 */
-	/*
-	 * public void setMsgLoggerConfig(Hashtable msgLoggerConfig) {
-	 * getMsgLogger().setMsgLoggerConfig(msgLoggerConfig); }
-	 */
 	public static boolean isActivated() {
 		Bundle bundle = Platform.getBundle(PLUGIN_ID);
 		if (bundle != null)
@@ -130,20 +94,24 @@
 		return false;
 	}
 
-	/**
-	 * @see Plugin#startup()
-	 */
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(EventManager.getManager(), IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.PRE_BUILD | IResourceChangeEvent.POST_CHANGE);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(EventManager.getManager(), 
+			IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE | 
+			IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.PRE_BUILD | IResourceChangeEvent.POST_CHANGE);
+
+		DependencyIndex di = (DependencyIndex)ValidationFramework.getDefault().getDependencyIndex();
+		IWorkspace ws = ResourcesPlugin.getWorkspace();
+		ws.addSaveParticipant(this, di);
+//		ws.addResourceChangeListener(ValOperationManager.getDefault(), 
+//			IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.PRE_BUILD);
+
 	}
 
-	/**
-	 * @see org.eclipse.core.runtime.Plugin#stop(BundleContext context)
-	 */
 	public void stop(BundleContext context) throws Exception {
 		super.stop(context);
 		ResourcesPlugin.getWorkspace().removeResourceChangeListener( EventManager.getManager() );		
+//		ResourcesPlugin.getWorkspace().removeResourceChangeListener( ValOperationManager.getDefault() );		
 		EventManager.getManager().shutdown();
 	}
 
@@ -156,5 +124,58 @@
 		return PLUGIN_ID;
 	}
 	
+	public static IEclipsePreferences getPreferences(IProject project){
+		IScopeContext projectContext = new ProjectScope(project);
+		return projectContext.getNode(PLUGIN_ID);
+	}
 	
-}
\ No newline at end of file
+	/**
+	 * Write this exception to the log.
+	 * <p>
+	 * We are in the transition of moving to a new approach for localized messages. This is the new 
+	 * approach for exceptions.
+	 * 
+	 * @param e the throwable, this can be null in which case it is a nop.
+	 */
+	public void handleException(Throwable e){
+		handleException(e, IStatus.ERROR);
+	}
+	
+	/**
+	 * Write this exception to the log.
+	 * <p>
+	 * We are in the transition of moving to a new approach for localized messages. This is the new 
+	 * approach for exceptions.
+	 * 
+	 * @param e the throwable, this can be null in which case it is a nop.
+	 * @param severity the severity of the message. This must be one of the IStatus severities. 
+	 */
+	public void handleException(Throwable e, int severity){
+		if (e == null)return;
+		Status status = new Status(severity, PLUGIN_ID, e.getLocalizedMessage(), e);
+		getLog().log(status);
+	}
+	
+	public void handleProjectUnavailableError(ProjectUnavailableError e){
+		if (Tracing.isLogging())handleException(e);
+	}
+	
+	public void handleResourceUnavailableError(ResourceUnavailableError e){
+		if (Tracing.isLogging())handleException(e);
+	}
+	
+	/** 
+	 * Write a message into the log. 
+	 * 
+	 * We are in the transition of moving to a new approach for localized messages. This is the new 
+	 * approach for exceptions.
+	 * 
+	 * @param severity message severity, see IStaus
+	 * @param message a localized message
+	 */
+	public void logMessage(int severity, String message){
+		Status status = new Status(severity, PLUGIN_ID, message);
+		getLog().log(status);
+		
+	}	
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/EmptySchedulingRule.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/EmptySchedulingRule.java
index d59249a..dacb599 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/EmptySchedulingRule.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/EmptySchedulingRule.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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.wst.validation.internal.core;
 
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
@@ -12,11 +22,4 @@
     public boolean isConflicting(ISchedulingRule rule) {
          return rule == this;
     }
-    
-    
-//    public static ISchedulingRule getDefaultRule(){
-//    	IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
-//    	EmptySchedulingRule emptyRule = new EmptySchedulingRule();
-//		ISchedulingRule rule = MultiRule.combine(ruleFactory.markerRule(fileResource), emptyRule);    	
-//    }
 }
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/FileDelta.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/FileDelta.java
index a0229a5..04e6ba7 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/FileDelta.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/FileDelta.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -24,8 +24,8 @@
  *   a typical client would need to create one of these.]
  */
 public class FileDelta implements IFileDelta {
-	private int fileDelta = 0;
-	private String fileName = null;
+	private int fileDelta;
+	private String fileName;
 
 	/**
 	 * <p>
@@ -81,4 +81,4 @@
 	public void setFileName(String aFileName) {
 		fileName = aFileName;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IFileDelta.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IFileDelta.java
index 170a74b..b848eed 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IFileDelta.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IFileDelta.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -26,9 +26,15 @@
  *  or something along those lines to better capture its use. ]
  */
 public interface IFileDelta {
-	public static final int ADDED = 1;   // the file has been added
-	public static final int CHANGED = 2; // the file has been changed
-	public static final int DELETED = 3; // the file has been deleted
+	
+	/** 1 - the file has been added */
+	int ADDED = 1;
+	
+	/** 2 - the file has been changed */
+	int CHANGED = 2;
+	
+	/** 3 - the file has been deleted */
+	int DELETED = 3;
 
 	/**
 	 * <p>
@@ -42,7 +48,7 @@
 	 *  to be validated. Can you provide a use case where the type of change is needed for
 	 *  validation? ]
 	 */
-	public int getDeltaType();
+	int getDeltaType();
 
 	/**
 	 * <p>
@@ -55,5 +61,5 @@
 	 * [issue: LM - Following my comments above this method should be renamed to getArtifactName or
 	 *  something that follows along with the interface rename. ]
 	 */
-	public String getFileName();
-}
\ No newline at end of file
+	String getFileName();
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IMessageAccess.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IMessageAccess.java
index 88d6eca..af85f64 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IMessageAccess.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/IMessageAccess.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -31,7 +31,7 @@
 	 *            messages".
 	 * @return List list of messages related to the target object
 	 */
-	public abstract List getMessages(MessageFilter filter);
+	abstract List getMessages(MessageFilter filter);
 
 	/**
 	 * @param filter
@@ -43,5 +43,5 @@
 	 * @return List a list of messages related to the target object, translated into the specified
 	 * locale.
 	 */
-	public abstract List getMessagesAsText(MessageFilter filter, Locale targetLocale);
-}
\ No newline at end of file
+	abstract List getMessagesAsText(MessageFilter filter, Locale targetLocale);
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/Message.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/Message.java
index 99a9f46..8998112 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/Message.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/Message.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -59,17 +59,17 @@
  * ]
  */
 public class Message implements IMessage {
-	private String id = null;
-	private String[] params = null;
+	private String id;
+	private String[] params;
 	private int severity = MessageFilter.ANY_SEVERITY;
-	private Object targetObject = null;
-	private String bundleName = null;
-	private String groupName = null;
+	private Object targetObject;
+	private String bundleName;
+	private String groupName;
 	private int lineNumber = IMessage.LINENO_UNSET;
 	private int length = IMessage.OFFSET_UNSET;
 	private int offset = IMessage.OFFSET_UNSET;
-	private HashMap messageAttributes;
-	private String markerId = null;
+	private HashMap<String, Object> messageAttributes;
+	private String markerId;
 
 	/**
 	 * <p>
@@ -284,7 +284,7 @@
 			message = bundle.getString(getId());
 
 			if (getParams() != null) {
-				message = java.text.MessageFormat.format(message, getParams());
+				message = java.text.MessageFormat.format(message, (Object[])getParams());
 			}
 		} catch (MissingResourceException exc) {
 			System.err.println(exc.getMessage());
@@ -379,12 +379,12 @@
 
 	public void setAttribute(String attributeName, Object value) {
 		if(messageAttributes == null) {
-			messageAttributes = new HashMap();
+			messageAttributes = new HashMap<String, Object>();
 		}
 		messageAttributes.put(attributeName,value);
 	}
 	
-	public HashMap getAttributes() {
+	public HashMap<String,Object> getAttributes() {
 		return messageAttributes;
 	}
 
@@ -395,4 +395,4 @@
 	public void setMarkerId(String markerId) {
 		this.markerId = markerId;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/MessageFilter.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/MessageFilter.java
index a380061..a8e97a3 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/MessageFilter.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/MessageFilter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -126,4 +126,4 @@
 	public void setValidator(IValidator validator) {
 		this.validator = validator;
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidationException.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidationException.java
index e5fb20a..f8970a7 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidationException.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidationException.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -25,9 +25,9 @@
  * </p>
  */
 public class ValidationException extends Exception {
-	private Throwable _lowLevelException = null;
-	private IMessage _message = null;
-	private ClassLoader _loader = null;
+	private Throwable _lowLevelException;
+	private IMessage _message;
+	private ClassLoader _loader;
 	private final static long serialVersionUID = -3387516993124229949L;
 
 
@@ -162,4 +162,4 @@
 		String message = getMessage(locale);
 		return (message != null) ? (s + ": " + message) : s; //$NON-NLS-1$
 	}
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidatorLauncher.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidatorLauncher.java
index 8d90e0c..f053410 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidatorLauncher.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/core/ValidatorLauncher.java
@@ -1,22 +1,19 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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.wst.validation.internal.core;
 
-import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.logging.Level;
+import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jem.util.logger.LogEntry;
-import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.wst.validation.internal.TaskListUtility;
 import org.eclipse.wst.validation.internal.operations.MessageInfo;
 import org.eclipse.wst.validation.internal.operations.ValidatorManager;
@@ -26,23 +23,14 @@
 import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 import org.eclipse.wst.validation.internal.provisional.core.IValidatorJob;
 
-
-
 /**
- * <p>
  * This singleton launches the validation on a single validator. Clients should call this class's
  * <code>start</code> method to begin the validation.
- * </p>
  */
 public class ValidatorLauncher {
-	private static ValidatorLauncher _launcher = null;
+	private static ValidatorLauncher _launcher;
 
-	
-	/**
-	 * Default constructor 
-	 */
 	private ValidatorLauncher() {
-		//Default constructor
 	}
 
 	/**
@@ -60,9 +48,7 @@
 	 * This method is the launch point of the validation. It runs validation on the validator
 	 * accessed by the IValidationContext. When the validation is complete, each validator may perform resource
 	 * cleanup, if necessary.
-	 * 
-	 * <br>
-	 * <br>
+	 * <p>
 	 * If <code>helper</code>,<code>validator</code>, or <code>reporter</code> are null,
 	 * validation is not performed. <code>changedFiles</code> may be null, or empty, if a full
 	 * build should be done.
@@ -73,25 +59,15 @@
 	 * @param validator
 	 * 			validator object to launch validation.
 	 * @param reporter
-	 * 			Is an instance of an IReporter interface, which is used for
-	 * interaction with the user.
-	 * @param changedFiles
-	 * 			Is an array of files which have been added, changed, or deleted
-	 * since the last validation. If <code>changedFiles</code> is null, or if it is an empty
-	 * array, then a full validation should be performed. Otherwise, validation on just the files
-	 * listed in the array should performed if the validator supports incremental validation.
+	 * 			Is an instance of an IReporter interface, which is used for interaction with the user.
 	 */
 	public void start(final IValidationContext helper, final IValidator validator, final IReporter reporter) throws ValidationException {
-		if ((helper == null) || (validator == null) || (reporter == null)) {
-			return;
-		}
+		if ((helper == null) || (validator == null) || (reporter == null))return;
 
 		// Can't force each validator to check if it's cancelled or not,
-		// so check for cancellation here. Hopefully the user won't wait
-		// too long.
-		if (reporter.isCancelled()) {
-			return;
-		}
+		// so check for cancellation here. Hopefully the user won't wait too long.
+		if (reporter.isCancelled())return;
+		
 
 		// If the validator is about to perform a full build, remove all of its previous validation
 		// messages.
@@ -107,7 +83,7 @@
 			//the  validators who have implemented IValidatorJob but are running synchronously
 			//would log messages now ...
 			ValidatorManager mgr = ValidatorManager.getManager();
-			final ArrayList list = mgr.getMessages((IValidatorJob)validator);
+			final List list = mgr.getMessages((IValidatorJob)validator);
 
 	    	Iterator it = list.iterator();
 			while( it.hasNext() ){
@@ -115,16 +91,12 @@
 				try {
 				TaskListUtility.addTask( info.getMessageOwnerId(), info.getResource(),
 							info.getLocation(), info.getMsg().getId(), info.getText(),
-							info.getMsg().getSeverity(), info.getTargetObjectName(),
+							info.getMsg().getSeverity(), info.getMarkerId(), 
+							info.getTargetObjectName(),
 							info.getMsg().getGroupName(), info.getMsg().getOffset(), info.getMsg().getLength());
 				
-				} catch (CoreException exc) {
-					Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setTargetException(exc);
-						logger.write(Level.SEVERE, entry);
-					}
+				} catch (CoreException e) {
+					ValidationPlugin.getPlugin().handleException(e);
 				}										
 			}
 			mgr.clearMessages( (IValidatorJob)validator );
@@ -132,4 +104,4 @@
 
 	}
 	
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMessage.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMessage.java
index 28de1c3..5550942 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMessage.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMessage.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -22,9 +22,16 @@
  * Given these three values as input, this interface can be queried for the final message string.
  * (i.e., the message with the parameters already substituted in.) Either the default Locale can be
  * used, or the caller can specify a Locale.
- * 
- * @plannedfor 1.0
  * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ */
+public interface IMessage {
+	/*
  * 
  * [issue: CS - The 'IMessage' interface would be simpler without the bundle related details.  I'd like to understand
  * why we can 'precompute' the translated message. Is there some benefit to perform 'late computation' of these messages?
@@ -46,57 +53,67 @@
  *   - void setAttribute(String attributeName, Object value)
  *   - Object getAttribute(String attributeName);
  * ]
- */
-public interface IMessage {
-	public static final int OFFSET_UNSET = -1; // see getLength(), getOffset()
-	public static final int LINENO_UNSET = 0;
+	 */
+	int OFFSET_UNSET = -1; // see getLength(), getOffset()
+	int LINENO_UNSET = 0;
+	
 	/**
 	 * Typically used to specify error messages.
 	 */
-	public static final int HIGH_SEVERITY = 0x0001;
+	int HIGH_SEVERITY = 0x0001;
 	/**
 	 * Typically used to specify warning messages.
 	 */
-	public static final int NORMAL_SEVERITY = 0x0002;
+	int NORMAL_SEVERITY = 0x0002;
 	/**
 	 * Typically used to specify information messages.
 	 */
-	public static final int LOW_SEVERITY = 0x0004;
+	int LOW_SEVERITY = 0x0004;
 	/**
 	 * Specify high (error) and normal (warning) messages. Typically used with a MessageFilter, to
 	 * filter out information messages.
 	 */
-	public static final int ERROR_AND_WARNING = HIGH_SEVERITY | NORMAL_SEVERITY;
+	int ERROR_AND_WARNING = HIGH_SEVERITY | NORMAL_SEVERITY;
 	/**
 	 * Specify all types of messages. Typically used with a MessageFilter.
 	 */
-	public static final int ALL_MESSAGES = ERROR_AND_WARNING | LOW_SEVERITY;
+	int ALL_MESSAGES = ERROR_AND_WARNING | LOW_SEVERITY;
+	
+	/** 
+	 * TargetResource - The key to use when associating a resource with a message via an
+	 * attribute. 
+	 * <p>
+	 * Normally, the target is stored using the setTargetObject() method, but
+	 * some of the legacy validators used this field for objects that where not IResources.
+	 * In order to associate the message with the proper IResource the validator can store
+	 * the IResource as an attribute and use this string as the key.
+	 * </p>
+	 */
+	String TargetResource = "TargetResource"; //$NON-NLS-1$
 
 	/**
 	 * @return the name of the bundle which this message is contained in.
 	 */
-	public String getBundleName();
+	String getBundleName();
 
 	/**
-	 * <p>
 	 * To support removal of a subset of validation messages, an IValidator may assign group names
 	 * to IMessages. An IMessage subset will be identified by the name of its group. Default (null)
 	 * means no group.
-	 * </p>
+	 * 
 	 * @return the name of the group to which the message belongs.
 	 */
-	public String getGroupName();
+	String getGroupName();
 
 	/**
-	 * <p>
 	 * Returns the id of the message. Message ids are used as the constants in property bundles
 	 * which localize the description of the message in a locale-independent fashion. The id is the
 	 * key, in the resource bundle, which identifies the string to be loaded. The id may not be null
 	 * or the empty string.
-	 * </p>
+	 * 
 	 * @return the id of the message
 	 */
-	public java.lang.String getId();
+	String getId();
 
 	/**
 	 * @return the length of the problem area, starting from the offset. If unset, value =
@@ -104,41 +121,35 @@
 	 * 
 	 * @see #getOffset()
 	 */
-	public int getLength();
+	int getLength();
 
 	/**
-	 * <p>
 	 * If there is a target object associated with this IMessage, and that target object is a file,
 	 * then an optional line number may be set. The line number identifies the location of the
 	 * problem identified by this message. If no line number has been set, #LINENO_UNSET will be
 	 * returned.
-	 * </p>
-	 * @return line number of the location of the problem.
 	 * 
+	 * @return line number of the location of the problem.
 	 */
-	public int getLineNumber();
+	int getLineNumber();
 
 	/**
-	 * <p>
 	 * Returns the offset of the message. If unset, value = IMessage.OFFSET_UNSET. For example, if
 	 * the java compiler were a validator, and it reported that a variable name was unknown, offset
-	 * would identify the position of the first character of the unknown variable. (The position is
-	 * identified by the number of characters from the start of the file.)
-	 * </p>
+	 * would identify the position of the first character of the unknown variable. The position is
+	 * identified by the number of characters from the start of the file.
 	 * 
 	 * @return offset of the message
 	 */
-	public int getOffset();
+	int getOffset();
 
 	/**
-	 * <p>
 	 * Returns the parameters of the message. Message parameters are the values which are
-	 * substituted into parameter slots in localized message text ddscriptions.
-	 * </p>
+	 * substituted into parameter slots in localized message text descriptions.
 	 * 
 	 * @return parameters of the message
 	 */
-	public java.lang.String[] getParams();
+	String[] getParams();
 
 	/**
 	 * <p>
@@ -151,24 +162,22 @@
 	 * 
 	 * @return the severity level of the message
 	 */
-	public int getSeverity();
+	int getSeverity();
 
 	/**
-	 * <p>
 	 * Return the object that this IMessage is reporting the problem against, if any. null will be
 	 * returned if this is a general message which does not apply to a particular object; for
 	 * example, "internal error".
-	 * </p>
 	 * 
 	 * @return the target object for the message
 	 */
-	public Object getTargetObject();
+	Object getTargetObject();
 
 	/**
 	 * @return a text representation of this message formatted in the default Locale, with the
 	 * bundle loaded by the default ClassLoader.
 	 */
-	public java.lang.String getText();
+	String getText();
 
 	/**
 	 * @param classLoader 
@@ -177,7 +186,7 @@
 	 * @return a text representation of this message formatted in the default locale, with the
 	 * bundle loaded by the specified ClassLoader.
 	 */
-	public java.lang.String getText(ClassLoader classLoader);
+	String getText(ClassLoader classLoader);
 
 	/**
 	 * @param locale
@@ -186,7 +195,7 @@
 	 * @return a text representation of this message formatted in the specified locale, with the
 	 * bundle loaded by the default ClassLoader.
 	 */
-	public java.lang.String getText(Locale locale);
+	String getText(Locale locale);
 
 	/**
 	 * @param locale
@@ -197,21 +206,22 @@
 	 * @return a text representation of this message formatted in the specified locale, with the
 	 * bundle loaded by the specified ClassLoader.
 	 */
-	public java.lang.String getText(Locale locale, ClassLoader classLoader);
+	String getText(Locale locale, ClassLoader classLoader);
 	
 	/**
 	 * Provides a way to store some additional attributes that a message would like to store
-	 * that can used by some other parties that are interested in those attribute values. Basically
-	 * a convienince to pass object values around that can consumed by other Objects it they need it
+	 * that can used by some other parties that are interested in those attribute values.
+	 * 
 	 * @param attributeName
 	 * @return an Object basically the value associated with the object name.
 	 */
 	
-	public Object getAttribute(String attributeName);
+	 Object getAttribute(String attributeName);
 	
 	/**
-	 * Set the attributeName and value as key value pair
-	 * @see getAttribute(String attributeName).
+	 * Set the attributeName and value as key value pair.
+	 * 
+	 * @see #getAttribute(String attributeName)
 	 * @param attributeName
 	 */
 	
@@ -224,85 +234,77 @@
 	 * @param bundleName 
 	 * 			Name of the bundle which contains the message.
 	 */
-	public void setBundleName(String bundleName);
+	void setBundleName(String bundleName);
 
 	/**
-	 * <p>
 	 * To support removal of a subset of validation messages, an IValidator may assign group names
 	 * to IMessages. An IMessage subset will be identified by the name of its group. Default (null)
 	 * means no group.
-	 * </p>
 	 * 
 	 * @param name
 	 * 			Name of the group.
 	 */
-	public void setGroupName(String name);
+	void setGroupName(String name);
 
 	/**
-	 * <p>
 	 * Set the id of the message. Message ids are used as the constants in property bundles which
 	 * localize the description of the message in a locale-independent fashion. The id is the key,
 	 * in the resource bundle, which identifies the string to be loaded. The id may not be null or
 	 * the empty string.
-	 * </p>
 	 * 
 	 * @param newId
 	 *            Id of the message.
 	 */
-	public void setId(java.lang.String newId);
+	void setId(String newId);
 
 	/**
-	 * <p>
 	 * Sets the length of the problem, starting from the offset. If unset, value =
 	 * IMessage.OFFSET_UNSET.
 	 * 
 	 * @see #setOffset(int)
-	 * </p>
 	 * 
 	 * @param length 
-	 *			sets the length 		
+	 *			Sets the length. 		
 	 */
-	public void setLength(int length);
+	void setLength(int length);
 
 	/**
-	 * <p>
 	 * If there is a target object associated with this IMessage, and that target object is a file,
 	 * then an optional line number may be set. The line number identifies the location of the
 	 * problem identified by this message. To indicate no line number, use #LINENO_UNSET.
-	 * </p>
+	 * 
 	 * @param lineNumber 
-	 *			sets the line no. 	
+	 *			Sets the line number.
 	 */
-	public void setLineNo(int lineNumber);
+	void setLineNo(int lineNumber);
 
 	/**
-	 * <p>
 	 * Sets the offset of the message. If unset, value = IMessage.OFFSET_UNSET. For example, if the
 	 * java compiler were a validator, and it reported that a variable name was unknown, offset
-	 * would identify the position of the first character of the unknown variable. (The position is
-	 * identified by the number of characters from the start of the file.)
-	 * </p>
+	 * would identify the position of the first character of the unknown variable. The position is
+	 * identified by the number of characters from the start of the file.
+	 * 
 	 * @param offset 
-	 *			sets the offset of the message.
+	 *			Sets the offset of the message.
 	 */
-	public void setOffset(int offset);
+	void setOffset(int offset);
 
 	/**
-	 * <p>
 	 * Sets the parameters of the message. Message parameters are the values which are substituted
 	 * into parameter slots in localized message text descriptions.
-	 * </p>
 	 * <p>
 	 * For example, if getId() returns "MY_ID", then the ResourceBundle identified by
 	 * getBundleName() is searched for the message named "MY_ID", and if found,
+	 * has it's parameters set.
 	 * </p>
 	 * 
 	 * @see java.text.MessageFormat#format(String, Object[]) is invoked on the message, with
 	 *      <code>newParams</code> passed in as the Object[].
+	 *      
 	 * @param newParams
-	 *            parameters of the message.
+	 *            Parameters of the message.
 	 */
-	public void setParams(java.lang.String[] newParams);
+	void setParams(String[] newParams);
 
 	/**
 	 * Sets the severity level of the message. One of SeverityEnum constants.
@@ -312,36 +314,33 @@
 	 * @see IMessage#LOW_SEVERITY
 	 * 
 	 * @param newSeverity
-	 *            severity level of the message
+	 *            Severity level of the message.
 	 */
-	public void setSeverity(int newSeverity);
+	void setSeverity(int newSeverity);
 
 	/**
-	 * <p>
 	 * Associate this IMessage with the object that has the problem. A null value is permitted. If a
 	 * message is applicable to one object, then this value should be set. Otherwise, the default
 	 * value (null) should be kept. Given this target object, it should be possible to calculate the
 	 * exact location of the problem.
-	 * </p>
 	 * 
 	 * @param obj
 	 *         The object that has the problem.
 	 */
-	public void setTargetObject(Object obj);
+	void setTargetObject(Object obj);
 	
 	/**
-	 * return all the attributes of a Message object
-	 * @return
+	 * Return all the attributes of a Message object.
 	 */
-	public HashMap getAttributes();
+	HashMap getAttributes();
 	
 	/**
-	 * return the marker id if one is set on this object when created
+	 * Return the marker id if one is set on this object when created.
 	 */
-	public String getMarkerId();
+	String getMarkerId();
 	
 	/**
-	 * set the marker id on a Message object
+	 * Set the marker id on a Message object.
 	 */
-	 public void setMarkerId(String markerId);
-}
\ No newline at end of file
+	 void setMarkerId(String markerId);
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java
index 37a9cfe..1ffef39 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IMetaModelContext.java
@@ -10,6 +10,14 @@
  *******************************************************************************/
 package org.eclipse.wst.validation.internal.provisional.core;
 
+/**
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ */
 public interface IMetaModelContext extends IValidationContext {
 	
 	public Object getModel(String URI);
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IProjectValidationContext.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IProjectValidationContext.java
index 95533db..4210353 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IProjectValidationContext.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IProjectValidationContext.java
@@ -17,11 +17,10 @@
  * IProjectValidationContext extends IValidationContext to provide access to a
  * reference to the project on which a validator is being invoked.
  * <p>
- * <b>Note:</b> This class/interface is part of an interim API that is still
- * under development and expected to change significantly before reaching
- * stability. It is being made available at this early stage to solicit feedback
- * from pioneering adopters on the understanding that any code that uses this
- * API will almost certainly be broken (repeatedly) as the API evolves.
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
  * </p>
  */
 public interface IProjectValidationContext extends IValidationContext
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IReporter.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IReporter.java
index a2cd946..3005139 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IReporter.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IReporter.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2008 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
  *******************************************************************************/
@@ -12,9 +12,6 @@
 
 import java.util.List;
 
-
-
-
 /*
  * CCM - Reporter is now passed locale-independent messages.
  *       Messages should only be translated to a locale upon access.
@@ -25,17 +22,24 @@
  * The interface used by IValidator's to report messages. The implementation of the IReporter could
  * simply log the messages to stdout, a file, or retain them in a buffer for later access by a user
  * interface.
- * 
- * Reporter implementations should keep non-localized versions of their messages
- * 
+ * <p>
+ * Reporter implementations should keep non-localized versions of their messages.
+ * </p>
+ * <p>
  * Any messages which need to be displayed to the user are done through this class, and if the user
  * cancels the current function, this class is the one which registers the cancellation.
- * 
+ * </p>
+ * <p>
  * The IReporter instance is created at the time validation begins and ends when validation is complete.
  * There is only one IReporter instance created for all validators that are run on a IResource. The IResource
  * provides a way to get messages put out each validator and add and delete messages for one validator
  * at a time. 
- * ] 
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
  */
 public interface IReporter {
 	/**
@@ -55,110 +59,104 @@
 	 * @param origin
 	 *            The validator which is the source of the message.
 	 * @param message
-	 *            A message to be reported
-	 * @exception MessageLimitException
-	 *                is thrown when the total number of messages reported exceeds the maximum
-	 *                allowed.
-	 * [issue: LM - This exception seems questionable to me. Why do validators need to know how
-	 *  to handle a MessageLimitException? Seems to me that this is a validation framework
-	 *  specific issue and that client validators shouldn't know about this at all. ]
+	 *            A message to be reported.
 	 */
-	public abstract void addMessage(IValidator origin, IMessage message);
+	void addMessage(IValidator origin, IMessage message);
 
 	/**
+	 * Show a text representation of this message, formatted in the default
+	 * Locale, to the user immediately. This message indicates which subtask is
+	 * currently being processed. The message is not stored. The subtask message
+	 * in this context is the subtask in a IProgressMontior
 	 * <p>
-	 * Show a text representation of this message, formatted in the default Locale, to the user
-	 * immediately. This message indicates which subtask is currently being processed. The message
-	 * is not stored. The subtask message in this context is the subtask in a IProgressMontior 
-	 * 
-	 * @see subTask(String name) in IProgressMonitor
-	 * </p>
-	 * <p>
-	 * Both parameters must not be null. 
+	 * Both parameters must not be null.
 	 * </p>
 	 * 
-	 * @param IValidator
-	 *            validator The validator issuing the subtask message.
-	 * @param IMessage
-	 *            message The message to be displayed to the user.
-	 *                       
+	 * @param validator
+	 * 		The validator issuing the subtask message.
+	 * @param message
+	 * 		The message to be displayed to the user.
+	 * 
 	 */
-	public abstract void displaySubtask(IValidator validator, IMessage message);
+	void displaySubtask(IValidator validator, IMessage message);
 
 	/**
 	 * @return the message access interface to this reporter, or null if message access is not
 	 * supported.
 	 *     
 	 */
-	public List getMessages();
+	List getMessages();
 
 	/**
-	 * <p>
-	 * Return true if the user cancelled validation, and false otherwise. This method should be
+	 * Return true if the user canceled validation, and false otherwise. This method should be
 	 * called by IValidators periodically, because no event is fired to notify IValidators that the
-	 * user cancelled validation. If a validator does not check this method, a cancellation request
+	 * user canceled validation. If a validator does not check this method, a cancellation request
 	 * is ignored.
-	 * </p>
 	 * 
-	 * @return true if the user cancelled validation, and false otherwise.
+	 * @return true if the user canceled validation, and false otherwise.
 	 *  
 	 */
-	public abstract boolean isCancelled();
+	boolean isCancelled();
 
 	/**
-	 * <p>
 	 * Remove all validation messages entered by the identified validator. This method is provided
 	 * for incremental validation. 
-	 * </p>
 	 * <p>
 	 * The IValidator parameter must not be null.
 	 * </p>
 	 * @param origin
-	 * 			originator validator of the message.  
+	 * 			Originator validator of the message.  
 	 */
-	public abstract void removeAllMessages(IValidator origin);
+	void removeAllMessages(IValidator origin);
 
 	/**
-	 * Remove all validation messages, entered by the identified validator, pertaining to the Object
-	 * provided. This method is provided for incremental validation. <br>
+	 * Remove all validation messages, entered by the identified validator,
+	 * pertaining to the Object provided. This method is provided for
+	 * incremental validation. <br>
 	 * <br>
-	 * If <code>object</code> is null, then this method should remove all messages owned by the
-	 * validator. (i.e., the same behaviour as the removeAllMessages(IValidator) method.) <br>
+	 * If <code>object</code> is null, then this method should remove all
+	 * messages owned by the validator. (i.e., the same behaviour as the
+	 * removeAllMessages(IValidator) method.) <br>
 	 * <br>
 	 * <p>
 	 * The IValidator parameter must not be null.
 	 * </p>
-	 * @param origin
-	 * 			originator validator of the message.
-	 * @param object
-	 * 			Object to which the message belongs. Object is the target object that was set on the IMessage
-	 * when adding the message as problem marker.
 	 * 
- 	 */
-	public abstract void removeAllMessages(IValidator origin, Object object);
+	 * @param origin
+	 * 		Originator validator of the message.
+	 * @param object
+	 * 		Object to which the message belongs. Object is the target object
+	 * 		that was set on the IMessage when adding the message as problem
+	 * 		marker.
+	 * 
+	 */
+	void removeAllMessages(IValidator origin, Object object);
 
 	/**
-	 * To support removal of a subset of validation messages, an IValidator may assign group names
-	 * to IMessages. An IMessage subset will be identified by the name of its group. This method
-	 * will remove only the IMessage's that are in the group identified by groupName. <br>
-	 * <br>
-	 * <br>
+	 * To support removal of a subset of validation messages, an IValidator may
+	 * assign group names to IMessages. An IMessage subset will be identified by
+	 * the name of its group. This method will remove only the IMessage's that
+	 * are in the group identified by groupName. 
+	 * <p>
+	 * The IValidator parameter must not be null.
+	 * </p>
+	 * <p>
+	 * If <code>object</code> is null, then this method should remove all
+	 * messages owned by the validator. (i.e., the same behaviour as the
+	 * removeAllMessages(IValidator) method.)
+	 * </p>
+	 * <p>
+	 * If groupName is null, that's the same as no group (i.e., the same
+	 * behaviour as the <code>removeAllMessages(IValidator, Object)</code>
+	 * method.)
+	 * </p>
 	 * 
-	 * The IValidator parameter must not be null. <br>
-	 * <br>
-	 * 
-	 * If <code>object</code> is null, then this method should remove all messages owned by the
-	 * validator. (i.e., the same behaviour as the removeAllMessages(IValidator) method.)
-	 * 
-	 * If groupName is null, that's the same as no group (i.e., the same behaviour as the
-	 * <code>removeAllMessages(IValidator, Object)</code> method.) <br>
-	 * 
-	 * @param origin
-	 * 			originator validator of the message.
-	 * @param object
-	 * 			Object to which the message belongs. 
+	 * @param validator
+	 * 		Originator validator of the message.
+	 * @param obj
+	 * 		Object to which the message belongs.
 	 * @param groupName
-	 * 			name of the group to which the message belongs. 
+	 * 		Name of the group to which the message belongs.
 	 */
-	public void removeMessageSubset(IValidator validator, Object obj, String groupName);
-}
\ No newline at end of file
+	void removeMessageSubset(IValidator validator, Object obj, String groupName);
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidationContext.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidationContext.java
index 135a80f..54a8ce5 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidationContext.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidationContext.java
@@ -1,27 +1,23 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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.wst.validation.internal.provisional.core;
 
-
-
 /**
- * <p>
  * This class is used to to separate the IValidator from the model loading. A model 
  * is a group of object(s) that must follow some rules.
- * </p>
  * <p>
  * The model is loaded differently depending on whether the validator is running in 
- * UI or headless context. If the <code>loadModel</code> method was a method on the IValidator, 
- * then there would need to be two versions of validators, one for headless and one for 
- * UI. Because <code>loadModel</code> is separate from the IValidator, we provide 
+ * as-you-type or builder based context. If the <code>loadModel</code> method was a method on the IValidator, 
+ * then there would need to be two versions of validators, one for as-you-type and one for 
+ * builder based. Because <code>loadModel</code> is separate from the IValidator, we provide 
  * two different IHelpers instead, and ship the one specific to the environment.
  * </p>
  * <p>
@@ -32,30 +28,43 @@
  * <code>loadModel</code> method. An IValidationContext can support more than one IValidator; 
  * the helper needs to support every model that each validator needs.
  * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
  */
 public interface IValidationContext {
 	/**
 	 * <p>
-	 * Load the model identified by <code>symbolicName</code>.<code>symbolicName</code> 
+	 * Load the model identified by <code>symbolicName</code>. <code>symbolicName</code> 
 	 * must not be null or the empty string if the validator needs to be run in both 
-	 * Headless and UI.
-	 * 
+	 * as-you-type and builder based validation.
+	 * </p>
+	 * <p>
 	 * The symbolicName is a string name that is registered in the implementation of the
 	 * IValidatorContext. For an example our internal implementation of the loadModel use
 	 * method names for symbolicNames to load the model object to be validated. Users can
 	 * use their own model load mechanism.
-	 * @see <code>WorkbenchContext</code>
-	 * 
 	 * </p>
-	 * @plannedfor 1.0
+	 * 
+	 * @see <code>WorkbenchContext</code>
 	 */
-	public Object loadModel(String symbolicName);
+	Object loadModel(String symbolicName);
 
+	/*
+	 * 
+	 * [issue : CS - It's not at all clear how these parameters would get passed into a helper.  I'd suggest
+	 * providing getProperty() and setProperty() methods on the class to allow contextual information to be 
+	 * supplied and queried in a generic manner.]
+	 */
 	/**
 	 * <p>
 	 * Load the model identified by <code>symbolicName</code> and <code>parms</code>.
 	 * <code>symbolicName</code> must not be null or the empty string if the validator 
-	 * needs to be run in both Headless and UI. If <code>parms</code> is null then this
+	 * needs to be run in both as-you-type and builder based validation. 
+	 * If <code>parms</code> is null then this
 	 * method behaves the same as
 	 * 
 	 * @link #loadModel(String).
@@ -65,20 +74,17 @@
 	 * 		 are available only at runtime. If you need to pass a live object to the IValidationContext, 
 	 * 		 this is the loadModel method to use.
 	 * </p>
-	 * @param symbolicName String identifier for model
-	 * @param parms 	   parms list of parameters that the model takes for invocation
 	 * 
-	 * [issue : CS - It's not at all clear how these parameters would get passed into a helper.  I'd suggest
-	 * providing getProperty() and setProperty() methods on the class to allow contextual information to be 
-	 * supplied and queried in a generic manner.]
+	 * @param symbolicName String identifier for model.
+	 * @param parms 	   List of parameters that the model takes for invocation.
 	 */
-	public Object loadModel(String symbolicName, Object[] parms);
+	Object loadModel(String symbolicName, Object[] parms);
 	
 	/**
 	 * @return a string array with the list of URI's that need to be validated in the
-	 * case of Incremental build
+	 * case of Incremental build.
 	 */
 	
-	public String[] getURIs();
+	String[] getURIs();
 
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidator.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidator.java
index 366df5f..6fbd55e 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidator.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidator.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -15,57 +15,60 @@
 /**
  * This is the base interface for all Validators. A Validator is a class which verifies that objects
  * follow some rules. For example, in a MOF model which represents an EJB jar, the EJB specification
- * determines the rules. <br>
- * <br>
+ * determines the rules. 
+ * <p>
  * A validator can perform full validation or incremental validation. All validators must implement
- * full validation but incremental validation is optional. <br>
- * <br>
- * Each validator must not be tied to any particular workbench implementation. <br>
- * <br>
+ * full validation but incremental validation is optional.
+ * </p>
+ * <p>
+ * Each validator must not be tied to any particular workbench implementation.
+ * </p>
+ * <p>
  * A validator's verification starts when the ValidatorLauncher singleton calls
  * <code>validate</code>.
- * 
- * [issue: LM - This interface will be implemented by clients. This should be considered a candidate for
- *  an abstract class. ]   
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
  */
 public interface IValidator{
-	/**
-	 * <p>
-	 * Perform any resource cleanup once validation is complete. If cleanup will take some time, the
-	 * IValidator should report subtask information to the user through the IReporter parameter. The
-	 * IReporter parameter will not be null.
-	 * </p>
-	 * @param reporter used for the interaction with the user
-	 * @plannedfor WTP 1.0
-	 * 
+	
+	/*
 	 * [issue : CS - Perhaps the IValidator should be required to provide a 'name' that can be used describe 
 	 * the running validation 'Job'.  Then the framework could automatically say something like 'XYZ validator : cleanup'.
 	 * Relying on the IValidator to provide subtask information seems error prone.]
 	 * [issue: LM - Is the cleanup method necessary? Can the framework put a requirement that client validators 'clean up'
 	 *  before returning from the validate method? ] 
 	 */
-	public void cleanup(IReporter reporter);
-
+	
 	/**
-	 * This is the method which performs the validation on the objects. <br>
-	 * <br>
-	 * <code>helper</code> and <code>reporter</code> may not be null. <code>changedFiles</code>
-	 * may be null, if a full build is desired. <br>
-	 * <br>
-	 * @param helper 
-	 * 			loads an object. 
-	 * @param reporter
-	 * 			Is an instance of an IReporter interface, which is used for
-	 * interaction with the user.
-	 * @param changedFiles
-	 * 			Is an array of files which have been added, changed, or deleted
-	 * since the last validation. If <code>changedFiles</code> is null, or if it is an empty
-	 * array, then a full validation should be performed. Otherwise, validation on just the files
-	 * listed in the array should performed if the validator supports incremental validation.
+	 * Perform any resource cleanup once validation is complete. If cleanup will take some time, the
+	 * IValidator should report subtask information to the user through the IReporter parameter. The
+	 * IReporter parameter will not be null.
 	 * 
+	 * @param reporter Used for the interaction with the user.
+	 */
+	void cleanup(IReporter reporter);
+
+	/*
 	 * [issue : CS - I'm curious to understand why the validator is not invoked directly on a file.  It seems it should be the
 	 * domain of another API to manage manage incremental file changes and triggering validations accordingly. 
 	 * Do we have a current use case in WTP where the validator does anything more validate a file from the changedFiles list?]
 	 */
-	public void validate(IValidationContext helper, IReporter reporter) throws ValidationException;
-}
\ No newline at end of file
+	/**
+	 * This is the method which performs the validation on the objects.
+	 * <p>
+	 * <code>helper</code> and <code>reporter</code> may not be null. <code>changedFiles</code>
+	 * may be null, if a full build is desired. <br>
+	 * </p>
+	 * @param helper 
+	 * 			Loads an object. 
+	 * @param reporter
+	 * 			Is an instance of an IReporter interface, which is used for interaction with the user.
+	 * 
+	 */
+	void validate(IValidationContext helper, IReporter reporter) throws ValidationException;
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidatorJob.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidatorJob.java
index 595151b..a25e7bb 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidatorJob.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/IValidatorJob.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 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
  *******************************************************************************/
@@ -18,37 +18,36 @@
 /**
  * This is the Job interface for the validator. Validators implementing this interface are executed as
  * background jobs. 
- * Following is a  sequence of  call  <br/>
- * validator.getSchedulingRule(helper) <br/>
- * validator.validate(reporter)
+ * Following is a sequence of  calls:
+ * <ul>
+ * <li>validator.getSchedulingRule(helper)
+ * <li>validator.validate(reporter)
+ * </ul>
  */
-
 public interface IValidatorJob extends IValidator{
 
-	public static IStatus OK_STATUS = new Status(IStatus.OK, "org.eclipse.wst.validation", 0, "OK", null); //$NON-NLS-1$ //$NON-NLS-2$
+	IStatus OK_STATUS = new Status(IStatus.OK, "org.eclipse.wst.validation", 0, "OK", null); //$NON-NLS-1$ //$NON-NLS-2$
 	
 
 
 	/**
-	 * This is the method which performs the validation on the objects. <br>
-	 * <br>
+	 * This is the method which performs the validation on the objects.
+	 * <p>
 	 * <code>reporter</code> may not be null. <code>changedFiles</code>
 	 * may be null, if a full build is desired. <br>
-	 * <br>
+	 * </p>
      *
 	 * @param reporter
 	 *            Is an instance of an IReporter interface, which is used for interaction with the
 	 *            user.
-	 * @param helper will not be null,
-	 *		loads an object.
+	 * @param helper Will not be null, loads an object.
 	 */
-	public IStatus validateInJob(IValidationContext helper, IReporter reporter) throws ValidationException;
+	IStatus validateInJob(IValidationContext helper, IReporter reporter) throws ValidationException;
 
 	/**
-	 * Get the scheduling rule, which the framework applies to the Validator job, 
-	 * @param helper will not be null,
-	 *		loads an object.
-	 * @return
+	 * Get the scheduling rule, which the framework applies to the Validator job.
+	 * 
+	 * @param helper Will not be null, loads an object.
 	 */
-	public ISchedulingRule getSchedulingRule(IValidationContext helper);
-}
\ No newline at end of file
+	ISchedulingRule getSchedulingRule(IValidationContext helper);
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/MessageLimitException.java b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/MessageLimitException.java
index 4a9c63e..3a86bf4 100644
--- a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/MessageLimitException.java
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/MessageLimitException.java
@@ -1,29 +1,30 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 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.wst.validation.internal.provisional.core;
 
-
-/**
- * This exception is thrown by
- * 
- * @see IReporter#addMessage(IValidator, IMessage) method if no more messages can be reported
- *      because the maximum number of messages has been reported.
+/*
  * [issue: LM - Going along with my comment on the addMessage method in IReporter I 
  *  think this class should be internal to the validation framework.
  *  I don't think there's a need for this class to be exposed to clients. If too many
  *  messages are added the framework should handle this without notifying the client
  *  validator. ]
+ */
+/**
+ * This exception is thrown by
+ * 
+ * @see IReporter#addMessage(IValidator, IMessage) method if no more messages can be reported
+ *      because the maximum number of messages has been reported.
  *  @deprecated This class is not longer used by the framework. The framework is
  *  not going to limit the number of messages displayed by a validator.
  */
 public class MessageLimitException extends RuntimeException {
 	private final static long serialVersionUID = -7034897190745766940L;
-}
\ No newline at end of file
+}
diff --git a/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/package.html b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/package.html
new file mode 100644
index 0000000..70bdb29
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/validate_core/org/eclipse/wst/validation/internal/provisional/core/package.html
@@ -0,0 +1,9 @@
+<html>
+<head>
+<title>Validation Framework (Version 1)</title>
+</head>
+<body>
+<p>An earlier framework for calling validators that are build based.</p>
+<p>This framework is being replaced by the <code>newer org.eclipse.wst.validation</code> framework.</p>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/AbstractValidator.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/AbstractValidator.java
new file mode 100644
index 0000000..83c1d55
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/AbstractValidator.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.Validator.V2;
+
+/**
+ * The class that all Validators that wish to use version two of the validation framework must subclass.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public abstract class AbstractValidator {
+	
+	private V2 _parent;
+	
+	/**
+	 * Validate the resource. The validator is called from a WorkspaceJob, so
+	 * the validator itself does not need to establish it's own IWorkspaceRunnable.
+	 * <p>
+	 * If you override this method then you should not override the other validate method.
+	 * </p>
+	 * 
+	 * @param resource
+	 * 		The resource to be validated.
+	 * 
+	 * @param kind
+	 * 		The way the resource changed. It uses the same values as the kind
+	 * 		parameter in IResourceDelta.
+	 * 
+	 * @param state
+	 * 		A way to pass arbitrary, validator specific, data from one
+	 * 		invocation of a validator to the next, during the validation phase.
+	 * 		At the end of the validation phase, this object will be cleared,
+	 * 		thereby allowing any of this state information to be garbaged
+	 * 		collected.
+	 * 
+	 * @param monitor
+	 * 		A monitor that you can use to report your progress. To be a well
+	 * 		behaved validator you need to check the isCancelled() method at
+	 * 		appropriate times.
+	 * 
+	 * @return the result of the validation. This may be, but usually isn't, null.
+	 */
+	public ValidationResult validate(IResource resource, int kind, ValidationState state, IProgressMonitor monitor){
+		return null;
+	}
+	
+	/**
+	 * Validate the resource. The validator is called from a WorkspaceJob, so
+	 * the validator itself does not need to establish it's own
+	 * IWorkspaceRunnable.
+	 * <p>
+	 * If you override this method then you should not override the other
+	 * validate method.
+	 * </p>
+	 * 
+	 * @param event
+	 *            An object that describes the resource to be validated and why
+	 *            it should be validated.
+	 * 
+	 * @param state
+	 *            A way to pass arbitrary, validator specific, data from one
+	 *            invocation of a validator to the next, during the validation
+	 *            phase. At the end of the validation phase, this object will be
+	 *            cleared, thereby allowing any of this state information to be
+	 *            garbaged collected.
+	 * 
+	 * @param monitor
+	 *            A monitor that you can use to report your progress. To be a
+	 *            well behaved validator you need to check the isCancelled()
+	 *            method at appropriate times.
+	 * 
+	 * @return the result of the validation. Null should never be returned. If
+	 *         null is returned then the other validate method will be called as
+	 *         well.
+	 */
+	public ValidationResult validate(ValidationEvent event, ValidationState state, IProgressMonitor monitor){
+		return null;
+	}
+	
+	
+	/**
+	 * A call back method that lets the validator know that the project is being
+	 * cleaned. This method gives the validator a chance to do any special
+	 * cleanup. The default is to do nothing.
+	 * <p>
+	 * If the entire workspace is being cleaned, then the first call will have a
+	 * null project, and then there will be subsequent calls for each open
+	 * project in the workspace.</p>
+	 * 
+	 * @param project
+	 * 		The project being cleaned. This may be null, which is an indication
+	 * 		that the workspace is being cleaned.
+	 * 
+	 * @param state
+	 * 		A way to pass arbitrary, validator specific, data from one
+	 * 		invocation of a validator to the next, during the validation phase.
+	 * 
+	 * @param monitor
+	 * 		The monitor that should be used for reporting progress if the clean
+	 * 		takes a long time.
+	 */
+	public void clean(IProject project, ValidationState state, IProgressMonitor monitor){		
+	}
+		
+	/**
+	 * This method is called before any validation takes place. It allows
+	 * validators to perform any initialization that they might need.
+	 * 
+	 * @param project
+	 * 		The project that is being validated. For the very first call in the
+	 * 		validation phase, this will be null. A null project is the signal
+	 * 		that a top level validation is starting. Subsequently, the project
+	 * 		will be set, as each of the individual projects are validated.
+	 * 
+	 * @param state
+	 * 		A way to pass arbitrary, validator specific, data from one
+	 * 		invocation of a validator to the next, during the validation phase.
+	 * 
+	 * @param monitor
+	 * 		The monitor that should be used for reporting progress if the initialization
+	 * 		takes a long time.
+	 */
+	public void validationStarting(IProject project, ValidationState state, IProgressMonitor monitor){		
+	}
+	
+	/**
+	 * This method will be called when validation is complete. It allows
+	 * validators to perform any cleanup that they might need to do.
+	 * 
+	 * @param project
+	 * 		The project that was validated. The very last call in the validation
+	 * 		sets this to null so that the validator knows that all the
+	 * 		projects have now been validated.
+	 * 
+	 * @param state
+	 * 		A way to pass arbitrary, validator specific, data from one
+	 * 		invocation of a validator to the next, during the validation phase.
+	 * 
+	 * @param monitor
+	 * 		The monitor that should be used for reporting progress if the cleanup
+	 * 		takes a long time.
+	 */
+	public void validationFinishing(IProject project, ValidationState state, IProgressMonitor monitor){		
+	}
+	
+	/**
+	 * Should the validation framework first clear the markers that this
+	 * validator has placed on this resource? This method can be overridden by
+	 * validator implementors to provide a validator specific behavior.
+	 * 
+	 * @param event
+	 *            The validation event that triggered the validation.
+	 * @return true if the validation framework should first clear all the
+	 *         markers that this validator produced. This is the default
+	 *         behavior. Return false to leave the markers unchanged. It then
+	 *         becomes the responsibility of the validator to manage it's own
+	 *         markers for this resource, for this validation event.
+	 */
+	public boolean shouldClearMarkers(ValidationEvent event){
+		return true;
+	}
+		
+	/**
+	 * Answer the validator that you belong to. The validator controls the
+	 * filters and various other settings.
+	 * 
+	 * @nooverride
+	 */
+	public V2 getParent(){
+		return _parent;
+	}
+	
+	void setParent(V2 parent){
+		_parent = parent;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/DependentResource.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/DependentResource.java
new file mode 100644
index 0000000..3f1c67d
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/DependentResource.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.validation;
+
+import org.eclipse.core.resources.IResource;
+
+/**
+ * A resource that is dependent on another resource.
+ * <p>
+ * This is returned by the IDependencyIndex.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @noextend
+ * @see IDependencyIndex
+ * @author karasiuk
+ *
+ */
+public class DependentResource {
+	private IResource 	_resource;
+	private Validator	_validator;
+	
+	/**
+	 * @noreference
+	 */
+	public DependentResource(IResource resource, Validator validator){
+		_resource = resource;
+		_validator = validator;
+	}
+	
+	/**
+	 * Answer the resource that is depended on.
+	 */
+	public IResource getResource() {
+		return _resource;
+	}
+	
+	/**
+	 * Answer the validator that asserted the dependency.
+	 */
+	public Validator getValidator() {
+		return _validator;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Friend.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Friend.java
new file mode 100644
index 0000000..4146636
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Friend.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation;
+
+import java.util.Map;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.ValType;
+
+/**
+ * This class is only to be called by the validation framework and it's test cases.
+ * This class is NOT part of the API.
+ * <p>
+ * This class provides access to some internal methods.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public class Friend {
+	
+	public static void setMessages(Validator validator, Map<String, MessageSeveritySetting> map) {
+		validator.setMessages(map);
+	}
+	
+	/**
+	 * Has the validator's implementation been loaded yet? This is used by some test cases to ensure that 
+	 * plug-ins are not loaded too early.
+	 */
+	public static boolean isLoaded(Validator validator){
+		return validator.isLoaded();
+	}
+	
+	public static boolean shouldValidate(Validator validator, IResource resource, boolean isManual, boolean isBuild, 
+			ContentTypeWrapper contentTypeWrapper){
+		return validator.shouldValidate(resource, isManual, isBuild, contentTypeWrapper);
+	}
+	
+	public static boolean shouldValidate(Validator validator, IResource resource, ValType valType, 
+		ContentTypeWrapper contentTypeWrapper){
+		
+		return validator.shouldValidate(resource, valType, contentTypeWrapper);		
+	}
+	
+	public static void setMigrated(Validator validator, boolean migrated){
+		validator.setMigrated(migrated);
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IDependencyIndex.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IDependencyIndex.java
new file mode 100644
index 0000000..d9d494b
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IDependencyIndex.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+
+/**
+ * This service is used to specify the resources that a particular resource depends on.
+ * <p>
+ * This is an optional service, validators do not need to use this Interface and can simply supply
+ * their dependency information through the ValidationResult return result.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @noimplement
+ * @see ValidationResult
+ * @author karasiuk
+ *
+ */
+public interface IDependencyIndex {
+	
+	/**
+	 * Assert that one resource depends on another resource as part of it's validity.
+	 * <p>
+	 * For example, if an XML file is dependent on an XSD file to be valid, the
+	 * resource that holds the XML file would be the dependent, and the resource
+	 * that holds the XSD would be the dependsOn.
+	 * </p>
+	 * 
+	 * @param id
+	 * 		The validator id that is asserting that the dependency exists.
+	 * @param dependent
+	 * 		The resource that is dependent on the other resource. For example a XML file.
+	 * @param dependsOn
+	 * 		The resource that this being depended on. For example a XSD file.
+	 */
+	void add(String id, IResource dependent, IResource dependsOn);
+	
+	/**
+	 * Remove all the dependency assertions for this project.
+	 * 
+	 * @param project
+	 * 		The project that will have it's dependency assertions removed.
+	 */
+	void clear(IProject project);
+	
+	/**
+	 * Answer all the resources that depend on this resource. For example, if
+	 * this resource was a XSD, this could answer all the XML files that
+	 * depended on it for their validity.
+	 * 
+	 * @param resource
+	 * 		A resource that other resources may depend on.
+	 * 
+	 * @return the dependent resources.
+	 */
+	List<DependentResource> get(IResource resource);
+	
+	/**
+	 * Answer all the resources that depend on this resource. For example, if
+	 * this resource was a XSD, this could answer all the XML files that
+	 * depended on it for their validity.
+	 * 
+	 * @param id
+	 * 		The validator id that asserted that the dependency exists.
+	 * @param resource
+	 * 		A resource that other resources may depend on.
+	 * 
+	 * @return the dependent resources. This method can return null or an empty array, if
+	 * 	there are no dependent resources.
+	 */
+	IResource[] get(String id, IResource resource);
+	
+	/**
+	 * Answer true if other resources depend on this resource.
+	 * 
+	 * @param resource
+	 * 		The resource being tested.
+	 * 
+	 * @return true if any of the validators asserted a dependency on this resource.
+	 */
+	boolean isDependedOn(IResource resource);
+	
+	/**
+	 * Replace all the resources that the dependent depends on.
+	 * 
+	 * @param id
+	 * 		The validator id that is asserting that the dependency exists.
+	 * @param dependent
+	 * 		The resource that is dependent on the other resource.
+	 * @param dependsOn
+	 * 		All the resources that are depended on. This can be null or a zero
+	 * 		length array. Null or a zero length array removes all the dependencies.
+	 */
+	void set(String id, IResource dependent, IResource[] dependsOn);
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IMutableValidator.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IMutableValidator.java
new file mode 100644
index 0000000..90ebfb1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IMutableValidator.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.wst.validation;
+
+/**
+ * A validator that has fields that can be updated.
+ * <p>
+ * The following procedure is used to change a Validator's settings.
+ * <ol>
+ * <li>An IMutableValidator is retrieved.</li>
+ * <li>The IMutableValidator is changed.</li>
+ * <li>The IMutableValidator is "activated".</li>
+ * </ol>
+ * </p>
+ * <p>The methods {@link ValidationFramework#getProjectSettings(org.eclipse.core.resources.IProject)} and 
+ * {@link ValidationFramework#getWorkspaceSettings()} can be used to retrieve IMutableValidator's.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+
+ * @author karasiuk
+ *
+ */
+public interface IMutableValidator {
+	
+	/**
+	 * Answer the validator's id.
+	 */
+	String getId();
+	
+	/**
+	 * Answer the validator's name.
+	 */
+	String getName();
+	
+	/**
+	 * Answer the validator's class name.
+	 * @return
+	 */
+	String getValidatorClassname();
+	
+	/**
+	 * Answer if the validator is enabled for build based validation.
+	 */
+	boolean isBuildValidation();
+	
+	/**
+	 * Answer if the validator is enabled for manual based validation.
+	 */
+	boolean isManualValidation();
+	
+	/**
+	 * Set whether the validator should be enabled for build based validation.
+	 */
+	void setBuildValidation(boolean build);
+	
+	/**
+	 * Set whether the validator should be enabled for manual based validation.
+	 */	
+	void setManualValidation(boolean manual);
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IPerformanceMonitor.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IPerformanceMonitor.java
new file mode 100644
index 0000000..b951270
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IPerformanceMonitor.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation;
+
+import java.util.List;
+
+/**
+ * A service that collects performance information on validation operations.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @author karasiuk
+ *
+ */
+public interface IPerformanceMonitor {
+	
+	/**
+	 * The level of information to collect.
+	 */
+	public enum CollectionLevel {None, Default}
+	
+	/** 
+	 * Add this performance counter to the monitor. The monitor will decide what to 
+	 * do with the results, it may log them to a file, or it may simply hold on to them.
+	 * 
+	 * @param counters
+	 */
+	public void add(PerformanceCounters counters);
+	
+	/**
+	 * Answer true if the performance monitor is collecting performance events.
+	 */
+	public boolean isCollecting();
+	
+	/** Answer true if only summary information is requested. */
+	public boolean isSummaryOnly();
+	
+	/**
+	 * Set the performance event collection level. This controls which
+	 * performance events are collected, including none of them.
+	 * 
+	 * @param level
+	 * 		The level to collect. The default is to not collect anything.
+	 */
+	public void setCollectionLevel(CollectionLevel level);
+	
+	/**
+	 * Answer the level of performance events that are being collected by the validation framework.
+	 */
+	public CollectionLevel getCollectionLevel();
+	
+	/**
+	 * Answer the performance counters that have been collected so far. Some
+	 * monitors do not save counters, and they will always return an empty list.
+	 * 
+	 * @param asSummary
+	 * 		If this parameter is true, only answer a summary of the counters.
+	 */
+	public List<PerformanceCounters> getPerformanceCounters(boolean asSummary);
+	
+	/**
+	 * Delete the collected performance counters.
+	 */
+	public void resetPerformanceCounters();
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IValidatorGroupListener.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IValidatorGroupListener.java
new file mode 100644
index 0000000..5f4feee
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/IValidatorGroupListener.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * Validators may wish to join validator groups for performance or other
+ * reasons. That way expensive operations like creating and releasing models can
+ * be done in a common location, and be done only once per resource. Group listeners
+ * are declared via the <code>org.eclipse.wst.validation.validatorGroup</code> extension point.
+ * <p>
+ * As validation proceeds, the validation framework, on a resource by resource
+ * bases, determines if any validators that are members of a group are
+ * interested in the resource. If they are, before the first validator in the
+ * group is called, the <code>validationStarting</code> method is called. If this method was
+ * called, then the <code>validationFinishing</code> method will be called once all the
+ * validators have processed the resource.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ */
+public interface IValidatorGroupListener {
+	/**
+	 * This is called before the first validator in the group that is interested
+	 * in the resource is called. If no validators in the group are interested
+	 * in the resource, then this method is not called.
+	 * 
+	 * @param resource
+	 *            The resource that is being validated.
+	 * @param monitor
+	 *            A progress monitor that the method should use.
+	 * @param state
+	 *            The validation state for the current operation.
+	 */
+	void validationStarting(IResource resource, IProgressMonitor monitor, ValidationState state);
+	
+	/**
+	 * If the validationStarting method was called on the resource, then this
+	 * method will be called after the last validator has processed the
+	 * resource.
+	 * 
+	 * @param resource
+	 * 		The resource that is being validated.
+	 * @param monitor
+	 * 		A progress monitor that the method can use.
+	 * @param state
+	 * 		The validation state for the current operation.
+	 */
+	void validationFinishing(IResource resource, IProgressMonitor monitor, ValidationState state);
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MessageSeveritySetting.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MessageSeveritySetting.java
new file mode 100644
index 0000000..4eaa3b7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MessageSeveritySetting.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.wst.validation.internal.ValMessages;
+
+/**
+ * Associate a message severity with a message category.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @noextend
+ * @author karasiuk
+ *
+ */
+public class MessageSeveritySetting {
+	public enum Severity {
+		Error(ValMessages.SevError, IMarker.SEVERITY_ERROR),
+		Warning(ValMessages.SevWarning, IMarker.SEVERITY_WARNING),
+		Ignore(ValMessages.SevIgnore, IMarker.SEVERITY_INFO);
+		
+		private String _severityLabel;
+		private Severity(String label, int markerSeverity){
+			_severityLabel = label;
+			_markerSeverity = markerSeverity;
+		}
+		private int		_markerSeverity;
+		
+		@Override
+		public String toString() {
+			return _severityLabel;
+		}
+
+		/**
+		 * Answer the associated IMarker severity.
+		 */
+		public int getMarkerSeverity() {
+			return _markerSeverity;
+		}
+		
+	}
+	
+	private String		_id;
+	private String 		_label;
+	private Severity 	_default;
+	private Severity 	_current;
+	
+	/**
+	 * Create an association between a label and a message severity.
+	 * 
+	 * @param id
+	 * 		An id that is used to identify this particular setting. This must be
+	 * 		unique within the scope of this particular validator.
+	 * 
+	 * @param label
+	 * 		An end user string, that can describe either an individual message
+	 * 		or a message category.
+	 * 
+	 * @param defaultSeverity
+	 * 		The default severity for this label. If the end user doesn't change
+	 * 		anything this is what the severity will be.
+	 */
+	public MessageSeveritySetting(String id, String label, Severity defaultSeverity){
+		_id = id;
+		_label = label;
+		_default = defaultSeverity;
+	}
+	
+	@Override
+	public int hashCode() {
+		int h = 0;
+		if (_current != null)h += _current.getMarkerSeverity()*1000;
+		if (_id != null)h += _id.hashCode();
+		return h;
+	}
+
+	public String getLabel() {
+		return _label;
+	}
+
+	/** Answer the default severity as defined by the validator owner. */
+	public Severity getDefault() {
+		return _default;
+	}
+
+	/** 
+	 * Answer the current severity for the message. The end user may have changed this through a
+	 * preference dialog.
+	 */
+	public Severity getCurrent() {
+		if (_current != null)return _current;
+		return _default;
+	}
+
+	/**
+	 * The id that the validator owner assigned to the message.
+	 */
+	public String getId() {
+		return _id;
+	}
+
+	/**
+	 * Set the current message severity.
+	 * 
+	 * @param severity
+	 * @return true if the setting changed
+	 */
+	public boolean setCurrent(Severity severity) {
+		if (_current == severity)return false;
+		_current = severity;
+		return true;
+	}
+	
+	@Override
+	public String toString() {
+		return _id + " " + getCurrent().toString(); //$NON-NLS-1$
+	}
+
+	/**
+	 * Answer a copy of this object.
+	 */
+	public MessageSeveritySetting copy() {
+		MessageSeveritySetting ms = new MessageSeveritySetting(_id, _label, _default);
+		ms._current = _current;
+		return ms;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableProjectSettings.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableProjectSettings.java
new file mode 100644
index 0000000..73bf21c
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableProjectSettings.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.wst.validation;
+
+import org.eclipse.core.resources.IProject;
+
+/**
+ * This class holds the overall project validation settings.
+ * <p>
+ * The following procedure is used to change a project's Validation settings.
+ * <ol>
+ * <li>The MutableProjectSettings are retrieved.</li>
+ * <li>The MutableProjectSettings are changed.</li>
+ * <li>The MutableProjectSettings are "applied".</li>
+ * </ol>
+ * </p>
+ * <p>In order for a project's validation setting to be effective, both 
+ * {@link #getOverride()} and {@link MutableWorkspaceSettings#getOverride()}
+ * must be true.
+ * </p>
+ * <p>
+ * These settings can be retrieved with {@link ValidationFramework#getProjectSettings(IProject)}.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+
+ * @author karasiuk
+ *
+ */
+public final class MutableProjectSettings {
+	private final IProject	_project;
+
+	private boolean _override;
+	private boolean	_suspend;
+	private final IMutableValidator[] _validators;
+	
+	public IMutableValidator[] getValidators() {
+		return _validators;
+	}
+
+	public MutableProjectSettings(IProject project, IMutableValidator[] validators){
+		_project = project;
+		_validators = validators;
+	}
+
+	/**
+	 * Can this project override the workspace level validation settings?
+	 */
+	public boolean getOverride() {
+		return _override;
+	}
+
+	/**
+	 * Change whether this project can override workspace level validation settings.
+	 * @param override Set to true if the project is allowed to override workspace level validation settings.
+	 */
+	public void setOverride(boolean override) {
+		_override = override;
+	}
+
+	/**
+	 * Is validation suspended for this project?
+	 */
+	public boolean getSuspend() {
+		return _suspend;
+	}
+
+	/**
+	 * Change whether this project is suspending it's validation.
+	 * @param suspend Set to true, to suspend validation for this project.
+	 */
+	public void setSuspend(boolean suspend) {
+		_suspend = suspend;
+	}
+
+	/**
+	 * Answer the project that these settings are for.
+	 */
+	public IProject getProject() {
+		return _project;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableWorkspaceSettings.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableWorkspaceSettings.java
new file mode 100644
index 0000000..80d18f1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/MutableWorkspaceSettings.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.wst.validation;
+
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+
+
+/**
+ * This class holds the overall workspace validation settings.
+ * <p>
+ * The following procedure is used to change a project's Validation settings.
+ * <ol>
+ * <li>The MutableWorkspaceSettings are retrieved.</li>
+ * <li>The MutableWorkspaceSettings are changed.</li>
+ * <li>The MutableWorkspaceSettings are "applied".</li>
+ * </ol>
+ * </p>
+ * <p>
+ * These settings can be retrieved with {@link ValidationFramework#getWorkspaceSettings()}.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+
+ * @author karasiuk
+ *
+ */
+public final class MutableWorkspaceSettings {
+
+	private final GlobalPreferencesValues _values;
+	
+	private final IMutableValidator[] _validators;
+	
+	public IMutableValidator[] getValidators() {
+		return _validators;
+	}
+
+	public MutableWorkspaceSettings(IMutableValidator[] validators, GlobalPreferencesValues values){
+		_validators = validators;
+		_values = values;
+	}
+	
+	public GlobalPreferencesValues getGlobalPreferencesValues(){
+		return _values;
+	}
+	
+	public boolean getAutoSave() {
+		return _values.saveAutomatically;
+	}
+
+	public void setAutoSave(boolean autoSave) {
+		_values.saveAutomatically = autoSave;
+	}
+
+	/**
+	 * Can this project override the workspace level validation settings?
+	 */
+	public boolean getOverride() {
+		return _values.override;
+	}
+
+	/**
+	 * Change whether this project can override workspace level validation settings.
+	 * @param override Set to true if the project is allowed to override workspace level validation settings.
+	 */
+	public void setOverride(boolean override) {
+		_values.override = override;
+	}
+
+	/**
+	 * Is validation suspended for this project?
+	 */
+	public boolean getSuspend() {
+		return _values.disableAllValidation;
+	}
+
+	/**
+	 * Change whether this project is suspending it's validation.
+	 * @param suspend Set to true, to suspend validation for this project.
+	 */
+	public void setSuspend(boolean suspend) {
+		_values.disableAllValidation = suspend;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/PerformanceCounters.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/PerformanceCounters.java
new file mode 100644
index 0000000..cf57721
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/PerformanceCounters.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.internal.Misc;
+import org.eclipse.wst.validation.internal.ValMessages;
+
+/**
+ * Some performance information for a validation invocation. This object is immutable.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @noextend
+ * @author karasiuk
+ *
+ */
+public class PerformanceCounters {
+	
+	private long	_when;
+	private String 	_validatorId;
+	private String	_validatorName;
+	private String	_resourceName;
+	private int		_numberInvocations;
+	private	long	_elapsedTime;
+	private long	_cpuTime;
+	
+	/**
+	 * @param validatorId
+	 * @param validatorName
+	 * @param resourceName 
+	 * @param numberInvocations number of times the validator was invoked
+	 * @param elapsedTime elapsed time in milliseconds
+	 * @param cpuTime CPU time in nanoseconds
+	 */
+	public PerformanceCounters(String validatorId, String validatorName, String resourceName, 
+		int numberInvocations, long elapsedTime, long cpuTime){
+		
+		_when = System.currentTimeMillis();
+		_validatorId = validatorId;
+		_validatorName = validatorName;
+		_resourceName = resourceName;
+		_numberInvocations = numberInvocations;
+		_elapsedTime = elapsedTime;
+		_cpuTime = cpuTime;
+	}
+	
+	public String getValidatorId() {
+		return _validatorId;
+	}
+	public int getNumberInvocations() {
+		return _numberInvocations;
+	}
+	
+	/**
+	 * Answer the elapsed time in milliseconds. 
+	 */
+	public long getElapsedTime() {
+		return _elapsedTime;
+	}
+	
+	/**
+	 * Answer the amount of CPU time in nanoseconds. If this can not be determined,
+	 * answer -1.
+	 */
+	public long getCpuTime() {
+		return _cpuTime;
+	}
+	
+	@Override
+	public String toString() {
+		return NLS.bind(ValMessages.LogValEndTime,	
+			new Object[]{_validatorName, _validatorId, _resourceName, Misc.getTimeMS(_elapsedTime)});
+	}
+	
+	public String toString(boolean asSummary){
+		if (asSummary){
+			if (_cpuTime != -1)return NLS.bind(ValMessages.LogValSummary2, 
+				new Object[]{_validatorName, _validatorId, _numberInvocations, 
+					Misc.getTimeMS(_elapsedTime), Misc.getTimeNano(_cpuTime)});
+			
+			return NLS.bind(ValMessages.LogValSummary, 
+					new Object[]{_validatorName, _validatorId, _numberInvocations, Misc.getTimeMS(_elapsedTime)});
+		}
+		return toString();
+	}
+
+	public String getValidatorName() {
+		return _validatorName;
+	}
+
+	/** 
+	 * Answer when was the event logged. 
+	 * 
+	 * @see System#currentTimeMillis()
+	 */
+	public long getWhen() {
+		return _when;
+	}
+
+	public String getResourceName() {
+		return _resourceName;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ReporterHelper.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ReporterHelper.java
new file mode 100644
index 0000000..20876bf
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ReporterHelper.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.internal.MarkerManager;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import org.eclipse.wst.validation.internal.provisional.core.IValidator;
+
+
+/**
+ * This is a temporary class to ease the transition from the previous validation framework.
+ * <p>
+ * This is not API. 
+ * @author karasiuk
+ *
+ */
+public class ReporterHelper implements IReporter {
+	private IProgressMonitor 	_monitor;
+	private List<IMessage>		_list = new LinkedList<IMessage>();
+	
+	public ReporterHelper(IProgressMonitor monitor){
+		_monitor = monitor;
+	}
+
+	public void addMessage(IValidator origin, IMessage message) {
+		_list.add(message);
+	}
+
+	public void displaySubtask(IValidator validator, IMessage message) {
+		_monitor.subTask(message.getText(validator.getClass().getClassLoader()));
+	}
+
+	public List<IMessage> getMessages() {
+		return _list;
+	}
+
+	public boolean isCancelled() {
+		return _monitor.isCanceled();
+	}
+
+	public void removeAllMessages(IValidator origin) {
+		_list.clear();
+	}
+
+	public void removeAllMessages(IValidator origin, Object object) {
+		_list.clear();
+	}
+
+	public void removeMessageSubset(IValidator validator, Object obj, String groupName) {
+		_list.clear();
+	}
+	
+	public void makeMarkers(){
+		MarkerManager.getDefault().makeMarkers(_list);
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationEvent.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationEvent.java
new file mode 100644
index 0000000..528e58e
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationEvent.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+
+/**
+ * An object that describes which object should be validated and what triggered its validation.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @author karasiuk
+ *
+ */
+
+public final class ValidationEvent {
+	
+	private IResource 		_resource;
+	private int				_kind;
+	private IResourceDelta 	_dependsOn;
+	
+	/**
+	 * Create an object that describes what should be validated.
+	 * 
+	 * @param resource
+	 *            The resource to be validated.
+	 * @param kind
+	 *            The way the resource changed. It uses the same values as the
+	 *            kind parameter in IResourceDelta.
+	 * @param dependsOn
+	 *            If the resource is being validated because one of it's
+	 *            dependencies has changed, that change is described here. This
+	 *            can be null.
+	 */
+	public ValidationEvent(IResource resource, int kind, IResourceDelta dependsOn){
+		_resource = resource;
+		_kind = kind;
+		_dependsOn = dependsOn;
+	}
+
+	/**
+	 * The resource to be validated.
+	 */
+	public IResource getResource() {
+		return _resource;
+	}
+
+	/**
+	 * The way the resource changed. It uses the same values as the kind
+	 * parameter in IResourceDelta.
+	 */
+	public int getKind() {
+		return _kind;
+	}
+
+	/**
+	 * If the resource is being validated because one of it's dependencies has changed, that change is described here.
+	 * This method will return null when the trigger is not because of a dependency change.
+	 */
+	public IResourceDelta getDependsOn() {
+		return _dependsOn;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationFramework.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationFramework.java
new file mode 100644
index 0000000..17cc455
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationFramework.java
@@ -0,0 +1,683 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.wst.validation;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.wst.validation.Validator.V1;
+import org.eclipse.wst.validation.internal.ConfigurationManager;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.DebugConstants;
+import org.eclipse.wst.validation.internal.DependencyIndex;
+import org.eclipse.wst.validation.internal.DisabledResourceManager;
+import org.eclipse.wst.validation.internal.DisabledValidatorManager;
+import org.eclipse.wst.validation.internal.GlobalConfiguration;
+import org.eclipse.wst.validation.internal.MarkerManager;
+import org.eclipse.wst.validation.internal.Misc;
+import org.eclipse.wst.validation.internal.PerformanceMonitor;
+import org.eclipse.wst.validation.internal.ProjectUnavailableError;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValOperation;
+import org.eclipse.wst.validation.internal.ValPrefManagerGlobal;
+import org.eclipse.wst.validation.internal.ValPrefManagerProject;
+import org.eclipse.wst.validation.internal.ValType;
+import org.eclipse.wst.validation.internal.ValidationRunner;
+import org.eclipse.wst.validation.internal.ValidatorMetaData;
+import org.eclipse.wst.validation.internal.ValidatorMutable;
+import org.eclipse.wst.validation.internal.ValManager.UseProjectPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+import org.eclipse.wst.validation.internal.model.ProjectPreferences;
+import org.eclipse.wst.validation.internal.operations.ValidationBuilder;
+import org.eclipse.wst.validation.internal.operations.ValidatorManager;
+import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+
+
+/**
+ * The central class of the Validation Framework.
+ * <p>
+ * This is a singleton class that is accessed through the getDefault() method. 
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public final class ValidationFramework {
+	
+	private volatile IDependencyIndex 	_dependencyIndex;
+	private IPerformanceMonitor			_performanceMonitor;
+	
+	private Set<IProject> 				_suspendedProjects;
+	private boolean 					_suspendAllValidation;
+
+	/** 
+	 * Answer the singleton, default instance of this class.
+	 */
+	public static ValidationFramework getDefault(){
+		return Singleton.vf;
+	}
+	
+	private ValidationFramework(){}
+	
+	/**
+	 * Add the validation builder to the project, so that the project can support
+	 * build time validation. It is safe to call this method, if the builder was
+	 * previously added to the project. It will not be added more than once.
+	 * 
+	 * @param project The project that the builder is added to.
+	 */
+	public void addValidationBuilder(IProject project){
+		ValidatorManager.addProjectBuildValidationSupport(project);
+	}
+	
+	/**
+	 * Clear any validation markers that may have been set by this validator.
+	 * 
+	 * @param resource
+	 * 		The resource that may have it's markers cleared.
+	 * @param validatorId
+	 * 		The id of validator that created the marker.
+	 */
+	public void clearMessages(IResource resource, String validatorId) throws CoreException {
+		Validator v = getValidator(validatorId, null);
+		if (v != null)MarkerManager.getDefault().clearMarker(resource, v);
+	}
+	
+	/**
+	 * Disable all validation for the given resource. This method instructs
+	 * the framework to not run any validators on the given resource or any of
+	 * it's children. This setting is persistent. Currently this only works with version 2
+	 * validators.
+	 * <p>
+	 * Use the enableValidation method to restore validation.
+	 * </p>
+	 * 
+	 * @param resource
+	 *            The resource that is having validation disabled. It must be an IFolder or an IFile.
+	 * 
+	 * @see #enableValidation(IResource)
+	 */
+	public void disableValidation(IResource resource){
+		assert resource != null;
+		DisabledResourceManager.getDefault().disableValidation(resource);
+	}
+	
+	/**
+	 * Enable validation for the given resource. If the resource was not
+	 * previously disabled this method call has no effect. Currently this only
+	 * works with version 2 validators.
+	 * 
+	 * @param resource
+	 * 		The resource that is having validation re-enabled.
+	 * 
+	 * @see #disableValidation(IResource)
+	 */
+	public void enableValidation(IResource resource){
+		DisabledResourceManager.getDefault().enableValidation(resource);
+	}
+	
+	/**
+	 * Answer the dependency index. Validators can use this to determine which resources depend on which
+	 * other resources.
+	 */
+	public IDependencyIndex getDependencyIndex(){
+		// note how the _dependencyIndex is volatile so that this double checking approach can be used.
+		if (_dependencyIndex == null){
+			synchronized(this){
+				if (_dependencyIndex == null)_dependencyIndex = new DependencyIndex();
+			}
+		}
+		return _dependencyIndex;
+	}
+
+	/**
+	 * Answer a performance monitor for the validators.
+	 */
+	public synchronized IPerformanceMonitor getPerformanceMonitor(){
+		if (_performanceMonitor == null){
+			boolean traceTimes = Misc.debugOptionAsBoolean(DebugConstants.TraceTimes);
+			String traceFile = Platform.getDebugOption(DebugConstants.TraceTimesFile);
+			boolean useDoubles = Misc.debugOptionAsBoolean(DebugConstants.TraceTimesUseDoubles);
+
+			_performanceMonitor = PerformanceMonitor.create(traceTimes, traceFile, useDoubles);
+		}
+		return _performanceMonitor;
+	}
+	
+	/**
+	 * Answer the preference store that holds the persisted global validation settings.
+	 */
+	public IEclipsePreferences getPreferenceStore(){
+		return new InstanceScope().getNode(ValidationPlugin.PLUGIN_ID);
+	}
+	
+	public IReporter getReporter(IProject project, IProgressMonitor monitor){
+		return new WorkbenchReporter(project, monitor);
+	}
+	
+	/**
+	 * Answer all the validators that are applicable for the given resource. A validator is
+	 * still returned even if it has been turned off by the user.
+	 * <p>
+	 * The caller may still need to test if the validator has been turned off by
+	 * the user, by using the isBuildValidation() and isManualValidation()
+	 * methods.
+	 * </p>
+	 * 
+	 * @param resource
+	 * 		The resource that determines which validators are applicable.
+	 * 
+	 * @param isManual
+	 * 		If true then the validator must be turned on for manual validation.
+	 * 		If false then the isManualValidation setting isn't used to filter
+	 * 		out validators.
+	 * 
+	 * @param isBuild
+	 * 		If true then the validator must be turned on for build based
+	 * 		validation. If false then the isBuildValidation setting isn't used
+	 * 		to filter out validators.
+	 * 
+	 * @see Validator#isBuildValidation()
+	 * @see Validator#isManualValidation()
+	 */
+	public Validator[] getValidatorsFor(IResource resource, boolean isManual, boolean isBuild){
+		IProject project = resource.getProject();
+		List<Validator> list = new LinkedList<Validator>();
+		ContentTypeWrapper ctw = new ContentTypeWrapper();
+		for (Validator val : ValManager.getDefault().getValidators(project)){
+			if (val.shouldValidate(resource, isManual, isBuild, ctw))list.add(val);
+		}
+		
+		Validator[] result = new Validator[list.size()];
+		list.toArray(result);
+		return result;
+	}
+	
+	/**
+	 * Answer all the validators that should not validate the resource, either
+	 * because their filters don't support the resource, or the validator has
+	 * been disabled for both build validation and manual validation.
+	 * 
+	 * @param resource
+	 * 		The resource this is being tested.
+	 */
+	public Set<Validator> getDisabledValidatorsFor(IResource resource){
+		return DisabledValidatorManager.getDefault().getDisabledValidatorsFor(resource);
+	}
+	
+	/**
+	 * Answer the global validator with the given id.
+	 * 
+	 * @deprecated Use getValidator(String id, IProject project) with a null project instead.
+	 * 
+	 * @param id
+	 * @return null if the validator is not found
+	 */
+	public Validator getValidator(String id){
+		return ValManager.getDefault().getValidatorWithId(id, null);
+	}
+	
+	/**
+	 * Answer the validator with the given id that is in effect for the given
+	 * project.
+	 * <p>
+	 * Individual projects may override the global validation preference
+	 * settings. If this is allowed and if the project has it's own settings,
+	 * then those validators are returned via this method.
+	 * </p>
+	 * <p>
+	 * The following approach is used. For version 1 validators, the validator
+	 * is only returned if it is defined to operate on this project type. This
+	 * is the way that the previous version of the framework did it. For version
+	 * 2 validators, they are all returned.
+	 * </p>
+	 * 
+	 * @param id
+	 * 		Validator id.
+	 * @param project
+	 * 		This can be null, in which case all the registered validators are
+	 * 		checked.
+	 * @return null if the validator is not found
+	 */
+	public Validator getValidator(String id, IProject project){
+		return ValManager.getDefault().getValidatorWithId(id, project);
+	}
+	
+	/**
+	 * Answer copies of all the registered validators.
+	 * 
+	 * @return Answer an empty array if there are no validators.
+	 */
+	public Validator[] getValidators(){
+		return ValManager.getDefault().getValidatorsCopy();
+	}
+		
+	/**
+	 * Answer the validation settings that have been defined on the
+	 * project. To "activate" any changes to these settings, the
+	 * {@link #applyChanges(MutableProjectSettings, boolean)} method needs to be
+	 * called.
+	 * 
+	 * @param project The project who's settings you wish to examine or change.
+	 * @return Validation settings that apply to the given project.
+	 */
+	public MutableProjectSettings getProjectSettings(IProject project){
+		ProjectPreferences pp = ValManager.getDefault().getProjectPreferences(project);
+		Validator[] vals = pp.getValidators();
+		ValidatorMutable[] vms = new ValidatorMutable[vals.length];
+		for (int i=0; i<vals.length; i++)vms[i] = new ValidatorMutable(vals[i]);
+
+		MutableProjectSettings mps = new MutableProjectSettings(project, vms);
+		mps.setOverride(pp.getOverride());
+		mps.setSuspend(pp.getSuspend());
+		return mps;
+	}
+	
+	/**
+	 * Answer the validation settings that have been defined at the workspace level.
+	 * To "activate" any changes to these settings, the
+	 * {@link #applyChanges(MutableWorkspaceSettings, boolean)} method needs to be
+	 * called.
+	 * 
+	 * @return Validation settings that apply to the entire workspace.
+	 */
+	public MutableWorkspaceSettings getWorkspaceSettings() throws InvocationTargetException{
+		
+		ValManager vm = ValManager.getDefault();
+		GlobalPreferences gp = vm.getGlobalPreferences();
+		
+		Validator[] vals = vm.getValidators();		
+		ValidatorMutable[] vms = new ValidatorMutable[vals.length];
+		for (int i=0; i<vals.length; i++)vms[i] = new ValidatorMutable(vals[i]);
+
+		MutableWorkspaceSettings mws = new MutableWorkspaceSettings(vms, gp.asValues());
+		return mws;
+	}
+		
+	/**
+	 * Apply the changes that have been been to the validation settings.
+	 * 
+	 * @param settings
+	 *            The project settings.
+	 * @param persist
+	 *            If true then the changes are persisted to the property files.
+	 *            If false the changes are applied to the validators, but are
+	 *            not persisted.
+	 */
+	public void applyChanges(MutableProjectSettings settings, boolean persist){
+		ValPrefManagerProject vpm = new ValPrefManagerProject(settings.getProject());
+		vpm.savePreferences(settings, persist);
+	}
+	
+	/**
+	 * Apply the changes that have been been to the validation settings.
+	 * 
+	 * @param settings
+	 *            The workspace settings.
+	 * @param persist
+	 *            If true then the changes are persisted to the property files.
+	 *            If false the changes are applied to the validators, but are
+	 *            not persisted.
+	 */
+	public void applyChanges(MutableWorkspaceSettings settings, boolean persist){
+		
+		ValManager vm = ValManager.getDefault();
+		GlobalPreferencesValues gpv = settings.getGlobalPreferencesValues();
+		vm.replace(gpv);
+		
+		IMutableValidator[] mvs = settings.getValidators();
+		ValidatorMutable[] vals = new ValidatorMutable[mvs.length];
+		for (int i=0; i<mvs.length; i++)vals[i] = (ValidatorMutable)mvs[i];
+		ValPrefManagerGlobal.getDefault().savePreferences(vm.getGlobalPreferences(), vals, persist);
+		ValPrefManagerGlobal.saveV1Preferences(vals, persist);		
+	}
+	
+	/**
+	 * Validators can use project level settings (Project natures and facets) to
+	 * determine if they are applicable to the project or not.
+	 * 
+	 * @param project
+	 *            The project that the configuration is based on.
+	 * @return The copies of the validators that are configured to run on this project based
+	 *         on the project level settings.
+	 * @throws ProjectUnavailableError
+	 */
+	public Validator[] getValidatorsConfiguredForProject(IProject project) throws ProjectUnavailableError {
+		Validator[] orig = ValManager.getDefault().getValidatorsConfiguredForProject(project, UseProjectPreferences.Normal);
+		Validator[] copy = new Validator[orig.length];
+		for (int i=0; i<orig.length; i++)copy[i] = orig[i].copy();
+		return copy;
+	}
+	
+	/**
+	 * Answer all the validators that are applicable for the given resource.
+	 * 
+	 * @param resource the resource that determines which validators are applicable.
+	 */
+	public Validator[] getValidatorsFor(IResource resource){
+		List<Validator> list = new LinkedList<Validator>();
+		for (Validator v : getValidatorsFor(resource, false, false)){
+			if (v.isBuildValidation() || v.isManualValidation())list.add(v);
+		}
+		Validator[] vals = new Validator[list.size()];
+		return list.toArray(vals);
+	}
+	
+	/**
+	 * Answer true if the resource has any enabled validators.
+	 * 
+	 * @param resource
+	 * 		A file, folder or project.
+	 * 
+	 * @param isManual
+	 * 		If true then the validator must be turned on for manual validation.
+	 * 		If false then the isManualValidation setting isn't used to filter
+	 * 		out validators.
+	 * 
+	 * @param isBuild
+	 * 		If true then the validator must be turned on for build based
+	 * 		validation. If false then the isBuildValidation setting isn't used
+	 * 		to filter out validators.
+	 */
+	public boolean hasValidators(IResource resource, boolean isManual, boolean isBuild){
+		return ValManager.getDefault().hasValidators(resource, isManual, isBuild);
+	}
+	
+	/**
+	 * Answer whether or not the validator has been activated, i.e. has the
+	 * bundle that defines the validator been loaded. We do not want to cause
+	 * unnecessary bundle loading, so this check can be performed by third party
+	 * callers, to prevent making other calls that will force the validator to
+	 * be loaded.
+	 * 
+	 * @param validator
+	 *            The validator that is being tested.
+	 * @return true if the validator has already been loaded.
+	 */
+	public boolean isLoaded(Validator validator){
+		return validator.isLoaded();
+	}
+	
+	/**
+	 * Waits until all validation jobs are finished. This method will block the
+	 * calling thread until all such jobs have finished executing, or until this
+	 * thread is interrupted. If there are no validation jobs that are
+	 * currently waiting, running, or sleeping, this method returns immediately.
+	 * Feedback on how the join is progressing is provided to the progress
+	 * monitor.
+	 * <p>
+	 * If this method is called while the job manager is suspended, only jobs
+	 * that are currently running will be joined. Once there are no jobs in the
+	 * family in the {@link Job#RUNNING} state, this method returns.
+	 * </p>
+	 * <p>
+	 * Note that there is a deadlock risk when using join. If the calling thread
+	 * owns a lock or object monitor that the joined thread is waiting for,
+	 * deadlock will occur. This method can also result in starvation of the
+	 * current thread if another thread continues to add jobs of the given
+	 * family, or if a job in the given family reschedules itself in an infinite
+	 * loop.
+	 * </p>
+	 * 
+	 * @param monitor
+	 * 		Progress monitor for reporting progress on how the wait is
+	 * 		progressing, or <code>null</code> if no progress monitoring is
+	 * 		required.
+	 * @exception InterruptedException
+	 * 		if this thread is interrupted while waiting
+	 * @exception OperationCanceledException
+	 * 		if the progress monitor is canceled while waiting
+	 */
+	public void join(IProgressMonitor monitor) throws InterruptedException, OperationCanceledException {
+		Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, monitor);
+		Job.getJobManager().join(ValidationBuilder.FAMILY_VALIDATION_JOB, monitor);
+	}
+	
+	/**
+	 * Suspends, or undoes the suspension of, validation on the current project.
+	 * If <b>suspend</b> is true then validation is suspended and if it's false
+	 * then validation is not suspended on the project. The value of this
+	 * variable is not persisted.
+	 * <p>
+	 * Be <b>very careful</b> when you use this method! Turn validation back on in a
+	 * finally block because if the code which suspended validation crashes, the
+	 * user has no way to reset the suspension. The user will have to shut down
+	 * and restart the workbench to get validation to work again.
+	 * </p>
+	 * 
+	 * @param project
+	 * 		The project that is to be suspended or unsuspended.
+	 * @param suspend
+	 * 		If true, validation on the project will be suspend. If false it will
+	 * 		not be suspended.
+	 */
+	public void suspendValidation(IProject project, boolean suspend) {
+		if (project == null)return;
+		if (suspend)getSuspendedProjects().add(project);
+		else getSuspendedProjects().remove(project);
+	}
+	
+	private synchronized Set<IProject> getSuspendedProjects(){
+		if (_suspendedProjects == null)_suspendedProjects = Collections.synchronizedSet(new HashSet<IProject>(20));
+		return _suspendedProjects;
+	}
+	
+	/**
+	 * Save the validators settings into the persistent store, there by making their settings the active settings.
+	 * <p>
+	 * A common use of this method would be to change whether particular validators are enabled or not. For example
+	 * if you only wanted the JSP validator enabled, you could use code similar to this:
+	 * <pre>
+	 * ValidationFramework vf = ValidationFramework.getDefault();
+	 * Validator[] vals = vf.getValidators();
+	 * for (Validator v : vals){
+	 *   boolean enabled = false;
+	 *   if (v.getValidatorClassname().equals("org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator"))enabled = true;
+	 *     v.setBuildValidation(enabled);
+	 *     v.setManualValidation(enabled);
+	 *  }
+	 * vf.saveValidators(vals);
+	 * </pre>
+	 * </p> 
+	 * 
+	 * @param validators The validators that you are saving.
+	 * 
+	 * @throws InvocationTargetException
+	 */
+	public void saveValidators(Validator[] validators) throws InvocationTargetException{
+		
+		
+		ValPrefManagerGlobal gp = ValPrefManagerGlobal.getDefault();
+		gp.saveAsPrefs(validators);	
+		
+		GlobalConfiguration gc = ConfigurationManager.getManager().getGlobalConfiguration();
+		
+		List<ValidatorMetaData> manual = new LinkedList<ValidatorMetaData>();
+		List<ValidatorMetaData> build = new LinkedList<ValidatorMetaData>();
+		for (Validator v : validators){
+			V1 v1 = v.asV1Validator();
+			if (v1 == null)continue;
+			if (v1.isManualValidation())manual.add(v1.getVmd());
+			if (v1.isBuildValidation())build.add(v1.getVmd());
+		}
+		
+		ValidatorMetaData[] array = new ValidatorMetaData[manual.size()];
+		gc.setEnabledManualValidators(manual.toArray(array));
+		
+		array = new ValidatorMetaData[build.size()];
+		gc.setEnabledBuildValidators(build.toArray(array));
+
+		gc.passivate();
+		gc.store();		
+	}
+
+	/**
+	 * Suspends, or undoes the suspension of, validation on all projects in the
+	 * workbench. If "suspend" is true then validation is suspended and if it's
+	 * "false" then validation is not suspended. The value of this variable is
+	 * not persisted.
+	 * <p>
+	 * Be <b>very careful</b> when you use this method! Turn validation back on in a
+	 * finally block because if the code which suspended validation crashes, the
+	 * user has no way to reset the suspension. The user will have to shut down
+	 * and restart the workbench to get validation to work again.
+	 * </p>
+	 */
+	public void suspendAllValidation(boolean suspend) {
+		_suspendAllValidation = suspend;
+	}
+
+	/**
+	 * Return true if "suspend all" is enabled, false otherwise.
+	 */
+	public boolean isSuspended() {
+		return _suspendAllValidation;
+	}
+
+	/**
+	 * Returns true if validation will not run on the project because it's been suspended. This
+	 * method checks only the suspension status; if validation cannot run for some other reason (for
+	 * example, there are no enabled validators), yet the IProject is not suspended, this method
+	 * will return true even though validation will not run.
+	 */
+	public boolean isSuspended(IProject project) {
+		if (_suspendAllValidation)return true;
+		if (project == null)return false;
+		return getSuspendedProjects().contains(project);
+	}
+
+	/**
+	 * This method should be called by any code that is preparing to suspend validation on a
+	 * project. Rather than calling isSuspended(IProject), which will also return true if all validation
+	 * has been suspended. 
+	 * 
+	 * @param project the project that is being tested
+	 * @return boolean true if the project has been suspended
+	 */
+	public boolean isProjectSuspended(IProject project) {
+		if (project == null)return false;
+		return getSuspendedProjects().contains(project);
+	}
+	
+	/**
+	 * Validate the projects. Exactly one of isManual or isBuild needs to be true.
+	 * 
+	 * @param projects
+	 *            The projects to be validated.
+	 * 
+	 * @param isManual
+	 *            Is this being done as part of a manual validation? i.e. did
+	 *            the user select the Validate menu item?
+	 * 
+	 * @param isBuild
+	 *            Is this being done as part of a build?
+	 * 
+	 * @param monitor
+	 * 
+	 * @return the validation result which is the combined result for all the
+	 *         resources that were validated.
+	 */
+	public ValidationResults validate(IProject[] projects, final boolean isManual, final boolean isBuild,
+		IProgressMonitor monitor) throws CoreException{
+		ValType type = ValType.Build;
+		if (isManual)type = ValType.Manual;
+		ValOperation vo = ValidationRunner.validate(createMap(projects), type, monitor, true);
+		return vo.getResults();
+	}
+
+	/**
+	 * Validate a specific file resource.
+	 * 
+	 * @param file
+	 *            The file to be validated.
+	 * @param monitor
+	 *            Progress monitor.
+	 * @return the result of validating the file.
+	 */
+  public ValidationResults validate(IFile file, IProgressMonitor monitor) throws CoreException{
+      ValOperation vo = ValidationRunner.validate(file, ValType.Manual, monitor, true);
+      return vo.getResults();
+    }
+	  
+	/**
+	 * Answer all the resources in the projects as a map.
+	 * @param projects
+	 */
+	private Map<IProject, Set<IResource>> createMap(IProject[] projects) throws CoreException{
+		final HashMap<IProject, Set<IResource>> map = new HashMap<IProject, Set<IResource>>(1000);
+			
+		for (IProject p : projects){
+			Set<IResource> set = new HashSet<IResource>(1000);
+			ResourceAdder ra = new ResourceAdder(set);
+			p.accept(ra);
+			map.put(p, set);
+		}
+		return map;
+	}
+	
+	public static class ResourceAdder implements IResourceVisitor {
+		
+		private Set<IResource> _set;
+		
+		/**
+		 * A class that knows how to add resources to a set.
+		 * @param set the set where the resources are added.
+		 */
+		public ResourceAdder(Set<IResource> set){
+			_set = set;
+		}
+
+		public boolean visit(IResource resource) throws CoreException {
+			// [225839] the older validators only expect files and folders.
+			int type = resource.getType();
+			if (type == IResource.FILE || type == IResource.FOLDER)_set.add(resource);
+			return true;
+		}
+		
+	}
+	
+	/**
+	 * Store the singleton for the ValidationFramework. This approach is used to avoid having to synchronize the
+	 * ValidationFramework.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private static class Singleton {
+		static ValidationFramework vf = new ValidationFramework();
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResult.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResult.java
new file mode 100644
index 0000000..c1714e1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResult.java
@@ -0,0 +1,385 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.wst.validation;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.internal.core.ValidationException;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+
+/**
+ * The result of running a validate operation. Validators create and return this objects as part of
+ * performing their validation.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public final class ValidationResult {
+	
+	private final List<ValidatorMessage> _messages = new LinkedList<ValidatorMessage>();
+	
+	private final static ValidatorMessage[] _noMessages = new ValidatorMessage[0];
+	
+	private boolean		_canceled;
+	
+	/** 
+	 * The resources that the validated resource depends on. This can be left null.
+	 * For example, an XML file may depend on a XSD in order to know if it is valid or not.
+	 * It would pass back the XSD file. 
+	 */
+	private IResource[]	_dependsOn;
+	
+	/** 
+	 * The objects that you validated as a side effect of validating this object. The framework will not
+	 * call you with any of these objects (in this validation run). This can be left null.
+	 */
+	private IResource[] _validated;
+	
+	private int			_severityError;
+	private int			_severityWarning;
+	private int			_severityInfo;
+	
+	private IProject	_suspendValidation;
+	
+	/** A count of the number of resources that were validated. */
+	private int			_numberOfValidatedResources = 1;
+	
+	private ReporterHelper	_reporter;
+	private ValidationException	_validationException;
+	
+	/**
+	 * This is an optional method, that a validator can use to return error
+	 * messages. The validation framework converts these into IMarkers.
+	 * <p>
+	 * The scenario that motivated this method, is when a validator is used both
+	 * for <b>as you type</b> validation and <b>build</b> validation. When
+	 * called in as you type mode, the validator doesn't want to directly create IMarkers,
+	 * because the resource hasn't been saved yet. It needs to return something
+	 * other than an IMarker. But when called in build mode, it does ultimately
+	 * want IMarkers. By returning ValidatorMessages, it only needs to return
+	 * one type of message, and those messages can be either be directly used by
+	 * the caller, or automatically converted into IMarkers by the validation
+	 * framework.
+	 * </p>
+	 * <p>
+	 * To make matters even more complicated there is a third way to return
+	 * messages. To make it easier for old validators to port to the new
+	 * framework, they can continue to use an IReporter. If a validator calls
+	 * the getReporter() method then it is assumed by the framework that that is
+	 * the approach that they have chosen.
+	 * </p>
+	 * 
+	 * @see #getReporter(IProgressMonitor)
+	 * 
+	 * @param message
+	 * 		A validation message.
+	 */
+	public void add(ValidatorMessage message){
+		_messages.add(message);
+	}
+	
+	/**
+	 * Answer an IReporter for handing error messages.
+	 * <p>
+	 * This is a transition method, to help old validators port to the new validation framework. If this method
+	 * is called it is assumed by the framework, that this IReporter will be used as the only way of passing messages
+	 * back to the framework.
+	 * 
+	 * @see #add(ValidatorMessage)
+	 * @param monitor
+	 */
+	public IReporter getReporter(IProgressMonitor monitor){
+		if (_reporter == null)_reporter = new ReporterHelper(monitor);
+		return _reporter;
+	}
+	
+	ReporterHelper getReporterHelper(){
+		return _reporter;
+	}
+	
+	/**
+	 * Merge the message counts and messages from an individual validator into this result.
+	 * @param result it can be null, in which case it is ignored.
+	 */
+	public void mergeResults(ValidationResult result){
+		if (result == null)return;
+		
+		ValidatorMessage[] msgs = result.getMessages();
+		for (ValidatorMessage m : msgs){
+			add(m);
+			int severity = m.getAttribute(IMarker.SEVERITY, 0);
+			switch (severity){
+			case IMarker.SEVERITY_ERROR:
+				incrementError(1);
+				break;
+			case IMarker.SEVERITY_WARNING:
+				incrementWarning(1);
+				break;
+			case IMarker.SEVERITY_INFO:
+				incrementInfo(1);
+				break;
+					
+			}
+		}
+		
+		incrementError(result.getSeverityError());
+		incrementWarning(result.getSeverityWarning());
+		incrementInfo(result.getSeverityInfo());
+		
+		_numberOfValidatedResources += result.getNumberOfValidatedResources();
+		
+	}
+
+	/**
+	 * Answer the resources that the validated resource depends on.
+	 */
+	public IResource[] getDependsOn() {
+		return _dependsOn;
+	}
+	
+	/**
+	 * Answer any validation messages that were added by the validator. 
+	 * @return an array is returned even if there are no messages.
+	 */
+	public ValidatorMessage[] getMessages(){
+		if (_messages == null)return _noMessages;
+		ValidatorMessage[] msgs = new ValidatorMessage[_messages.size()];
+		_messages.toArray(msgs);
+		return msgs;
+	}
+		
+	/**
+	 * Answer a copy of any validation messages that were added by the validator. The array is a new
+	 * array, and each message is a copy. 
+	 * @return an array is returned even if there are no messages.
+	 */
+	public synchronized ValidatorMessage[] getMessagesAsCopy(){
+		if (_messages == null)return _noMessages;
+		ValidatorMessage[] msgs = new ValidatorMessage[_messages.size()];
+		int i = 0;
+		for (ValidatorMessage msg : _messages)msgs[i++] = msg.asCopy();
+		return msgs;
+	}
+
+	/**
+	 * Update the resources that the validated resource depends on. This can be
+	 * left null. For example, a XML file may depend on a XSD file in order to
+	 * know if it is valid or not. It would pass back that XSD file.
+	 * 
+	 * @param dependsOn
+	 * 		If this is null then the dependency information is not updated. To
+	 * 		remove the dependency information, an empty array needs to be
+	 * 		supplied. A non null parameter, <b>replaces</b> all the dependency
+	 * 		information for this resource, for this validator.
+	 */
+	public void setDependsOn(IResource[] dependsOn) {
+		_dependsOn = dependsOn;
+	}
+	
+	/**
+	 * @return All the resources that were validated as a side-effect of
+	 * 	validating the main resource, or null if none were.
+	 */
+	public IResource[] getValidated() {
+		return _validated;
+	}
+	
+	/**
+	 * Indicate that additional resources have been validated as part of this
+	 * validate operation. Sometimes in the course of performing a validation on
+	 * one resource it is necessary to validate other resources as well. This
+	 * method is used to let the framework know about these additional validated
+	 * resources, to possibly save them being validated redundantly.
+	 * 
+	 * @param validated
+	 * 		Any additional resources that were validated.
+	 */
+	public void setValidated(IResource[] validated) {
+		_validated = validated;
+	}
+
+	/**
+	 * Answer the number of error messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityError() {
+		return _severityError;
+	}
+
+	/**
+	 * Set the number of error messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 */
+	public void setSeverityError(int severityError) {
+		_severityError = severityError;
+	}
+	
+
+	/**
+	 * Increment the number of error messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 * 
+	 * @return the current number of errors.
+	 */
+	public int incrementError(int errors){
+		_severityError += errors;
+		return _severityError;
+	}
+
+	/**
+	 * Answer the number of warning messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityWarning() {
+		return _severityWarning;
+	}
+
+	/**
+	 * Set the number of warning messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 */
+	public void setSeverityWarning(int severityWarning) {
+		_severityWarning = severityWarning;
+	}
+
+	/**
+	 * Increment the number of warning messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 * 
+	 * @return the current number of warnings.
+	 */
+	public int incrementWarning(int warnings){
+		_severityWarning += warnings;
+		return _severityWarning;
+	}
+
+	/**
+	 * Answer the number of informational messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityInfo() {
+		return _severityInfo;
+	}
+
+	/**
+	 * Set the number of informational messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 */
+	public void setSeverityInfo(int severityInfo) {
+		_severityInfo = severityInfo;
+	}
+
+	/**
+	 * Increment the number of informational messages that were generated as part of this validation operation.
+	 * <p>
+	 * Messages added through the add(ValidationMessage) method should not be included here, as this
+	 * information will be determined from the ValidationMessage.
+	 * </p>
+	 * 
+	 * @return the current number of informational message.
+	 */
+	public int incrementInfo(int info){
+		_severityInfo += info;
+		return _severityInfo;
+	}
+
+	/**
+	 * Was the operation canceled before it completed? For example if the validation is being run through the
+	 * user interface, the end user can cancel the operation through the progress monitor.
+	 * 
+	 * @return true if the operation was canceled
+	 */
+	public boolean isCanceled() {
+		return _canceled;
+	}
+
+	/**
+	 * Indicate if the operation was canceled.
+	 * 
+	 * @param canceled
+	 * 		Set to true if it was canceled and false if it was not canceled.
+	 */
+	public void setCanceled(boolean canceled) {
+		_canceled = canceled;
+	}
+
+	/**
+	 * Answer the number of resources that have been validated.
+	 */
+	public int getNumberOfValidatedResources() {
+		if (_validated == null)return _numberOfValidatedResources;
+		return _numberOfValidatedResources + _validated.length;
+	}
+
+	/**
+	 * If the validation ended with an exception, answer it.
+	 * @return null if the validator did not finish with an exception.
+	 */
+	public ValidationException getValidationException() {
+		return _validationException;
+	}
+
+	/**
+	 * If the validation failed with an exception, it can be recorded here.
+	 * <p>
+	 * This method is provided for old validators to ease their transition to the new framework.
+	 * </p>
+	 * @param validationException
+	 */
+	public void setValidationException(ValidationException validationException) {
+		_validationException = validationException;
+	}
+	
+	/**
+	 * Answer the project that the validator would like to have suspended.
+	 * 
+	 * @return the project to suspend or null. The normal result is null, which means that
+	 * the validator wishes to receive normal validation requests. 
+	 */
+	public IProject getSuspendValidation(){
+		return _suspendValidation;
+	}
+
+	/**
+	 * Calling this method will inform the framework, that this validator does not wish to be
+	 * called again for any resources in this project, for the duration of this validation operation.
+	 * <p>
+	 * Some validators may have a rich set of triggers, but once they have been invoked once,
+	 * do not need to be invoked again during the course of the current validation.
+	 * </p>
+	 * @param project The project that this validator no longer wants to be notified on.
+	 */
+	public void setSuspendValidation(IProject project) {
+		_suspendValidation = project;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResults.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResults.java
new file mode 100644
index 0000000..ba947f8
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationResults.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.wst.validation;
+
+
+/**
+ * The combined results of validating multiple resources.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @author karasiuk
+ *
+ */
+public final class ValidationResults {
+	
+	private final ValidatorMessage[] _messages;
+	private final int 	_error;
+	private final int	_warn;
+	private final int	_info;
+	
+	public ValidationResults(ValidationResult result){
+		if (result == null){
+			_messages = new ValidatorMessage[0];
+			_error = 0;
+			_warn = 0;
+			_info = 0;
+		}
+		else {
+			_messages = result.getMessagesAsCopy();
+			_error = result.getSeverityError();
+			_warn = result.getSeverityWarning();
+			_info = result.getSeverityInfo();
+		}
+	}
+	
+	/**
+	 * Answer any validation messages that were added by the validation operation.
+	 * @return an array is returned even if there are no messages.
+	 */
+	public ValidatorMessage[] getMessages(){
+		return _messages;
+	}
+
+	/**
+	 * Answer the number of error messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityError() {
+		return _error;
+	}
+
+	/**
+	 * Answer the number of informational messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityInfo() {
+		return _info;
+	}
+	
+	/**
+	 * Answer the number of warning messages that were generated as part of this validation operation.
+	 */
+	public int getSeverityWarning() {
+		return _warn;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationState.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationState.java
new file mode 100644
index 0000000..8097de4
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidationState.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Keep track of arbitrary validation data, during the course of a validation.
+ * <p>
+ * To enable more efficient caching, the validation framework, allows individual validators to cache
+ * arbitrary data during the validation process. Use of this object is completely optional.
+ * <p>
+ * Since some validators wish to share data with other validators, any validator can see the state data for
+ * any other validator, since the id is simply the validator's extension id.
+ * <p>
+ * This object is freed at the end of the validation process.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @noextend
+ * @author karasiuk
+ *
+ */
+public final class ValidationState {
+	
+	/**
+	 * This is a special id.
+	 * <p>
+	 * If a resource that is depended on by others is changed, then the
+	 * dependent resources are validated. The depended on resource, which is the
+	 * resource that actually changed, is placed into the ValidationState using
+	 * this id.
+	 * </p>
+	 * @deprecated This approach is not thread safe, the longer form of the AbstractValidator validate method should be used instead.
+	 * @see AbstractValidator#validate(ValidationEvent, ValidationState, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public static final String TriggerResource = ValidationPlugin.PLUGIN_ID + ".Trigger"; //$NON-NLS-1$
+
+	// I can't use a ConncurrentHashMap because some of the clients store nulls.
+	private final Map<String, Object> _map = new HashMap<String, Object>(50);
+	
+	public ValidationState(){
+	}
+	
+	/**
+	 * Save some state information.
+	 * 
+	 * @param id
+	 * 		By convention this is the fully qualified validator extension id.
+	 * 		For example: org.eclipse.wst.html.ui.HTMLValidator
+	 * 
+	 * @param value
+	 * 		Any arbitrary data that the validator might find useful. The
+	 * 		validation framework doesn't do anything with this object except
+	 * 		pass it along during the validation process.
+	 */
+	public synchronized void put(String id, Object value){
+		_map.put(id, value);
+	}
+	
+	/**
+	 * Answer the state data for the given validator.
+	 * 
+	 * @param id
+	 * 		By convention this is the fully qualified validator extension point
+	 * 		id. For example org.eclipse.wst.html.ui.HTMLValidator
+	 * 
+	 * @return any arbitrary data that the validator might find useful,
+	 * 	including null.
+	 */
+	public synchronized Object get(String id){
+		return _map.get(id);
+	}
+
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Validator.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Validator.java
new file mode 100644
index 0000000..2adb3bb
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/Validator.java
@@ -0,0 +1,1353 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IContributor;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.internal.ConfigurationConstants;
+import org.eclipse.wst.validation.internal.ConfigurationManager;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.ExtensionConstants;
+import org.eclipse.wst.validation.internal.MarkerManager;
+import org.eclipse.wst.validation.internal.Misc;
+import org.eclipse.wst.validation.internal.NullValidator;
+import org.eclipse.wst.validation.internal.SummaryReporter;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValMessages;
+import org.eclipse.wst.validation.internal.ValOperation;
+import org.eclipse.wst.validation.internal.ValPrefManagerGlobal;
+import org.eclipse.wst.validation.internal.ValPrefManagerProject;
+import org.eclipse.wst.validation.internal.ValType;
+import org.eclipse.wst.validation.internal.ValidationConfiguration;
+import org.eclipse.wst.validation.internal.ValidatorExtensionReader;
+import org.eclipse.wst.validation.internal.ValidatorMetaData;
+import org.eclipse.wst.validation.internal.core.ValidatorLauncher;
+import org.eclipse.wst.validation.internal.delegates.ValidatorDelegateDescriptor;
+import org.eclipse.wst.validation.internal.delegates.ValidatorDelegatesRegistry;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+import org.eclipse.wst.validation.internal.operations.IWorkbenchContext;
+import org.eclipse.wst.validation.internal.operations.WorkbenchContext;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IValidator;
+
+/**
+ * Represents a validator. This gets instantiated through one of the validator extension points.
+ * <p>
+ * <b>This class is not API</b>.
+ * </p>
+ * 
+ * @author karasiuk
+ *
+ */
+public abstract class Validator implements Comparable<Validator> {
+	// Remember if you add a new instance variable, make sure that you update the copy and become methods
+	
+	/**
+	 * The level of configuration for the validator.
+	 * <ul>
+	 * <li>Extension - Defined by an extension point.</li>
+	 * <li>Global - Defined by a global preference.</li>
+	 * <li>Project - Defined by a project property.</li>
+	 * </ul>
+	 */
+	public enum Level {Extension, Global, Project};
+	
+	protected boolean	_buildValidation = true;
+	
+	/** If this is a delegating validator, then this field holds the validator that will be delegated to. */
+	private String 		_delegatingId;
+	
+	/** 
+	 * If this validator is also used to control an ISource validator, the id of the ISource validator is
+	 * registered here.
+	 */
+	private String		_sourceId;
+	
+	protected boolean 	_manualValidation = true;
+	
+	/** An optional customized marker id for this validator. */
+	private String 		_markerId;
+	
+	/** 
+	 * Version of the filter definition. By increasing this number the framework can know that a plug-in has 
+	 * changed it's filters.
+	 */
+	private int			_version = 1;
+	
+	/** Map simple message id's to message settings. */
+	private Map<String, MessageSeveritySetting> _messageSettings;
+	
+	/** The project that you are defined in. This can be null which means that you are a global validator. */
+	protected IProject	_project;
+		
+	/** How many times has a global field in this validator been changed since it was created (or copied)? */
+	protected transient int _changeCountGlobal;
+	
+	/** How many times has a message field in this validator been changed since it was created (or copied)? */
+	protected transient int _changeCountMessages;
+	
+	/** Has the validator been migrated from an earlier version in this session, but not yet saved? */
+	private boolean _migrated;
+	
+	public Validator(IProject project){
+		_project = project;
+	}
+		
+	void setMigrated(boolean migrated){
+		_migrated = migrated;
+	}
+	
+	/**
+	 * Create a new validator based on a abstract validator.
+	 * 
+	 * @param validator
+	 *            The validator that is being wrapped.
+	 * 
+	 * @param project
+	 *            The project that you are defined in. This can be null which
+	 *            means that you are a global validator.
+	 */
+	public static Validator create(IConfigurationElement validator, IProject project) {
+		V2 v2 = new V2(validator, project);
+		return v2;
+	}
+	
+	/**
+	 * Create a new validator based on validator meta data.
+	 * 
+	 * @param project
+	 *            The project that you are defined in. This can be null which
+	 *            means that you are a global validator.
+	 */
+	public static Validator create(ValidatorMetaData vmd, ValidationConfiguration config, IProject project){
+		V1 v1 = new V1(vmd, config, project);
+		return v1;
+	}
+	
+	/**
+	 * If you are a version 1 validator, answer yourself as one, otherwise answer null.
+	 */
+	public V1 asV1Validator(){
+		return null;
+	}
+	
+	/**
+	 * If you are a version 2 validator, answer yourself as one, otherwise answer null.
+	 */
+	public V2 asV2Validator() {
+		return null;
+	}
+	
+	/**
+	 * The project is being cleaned, this method gives the validator a chance to do any special cleanup.
+	 * The default is to do nothing.
+	 * 
+	 * @param project the project being built.
+	 * @param monitor the monitor that should be used for reporting progress if the clean takes a long time.
+	 */
+	public void clean(IProject project, ValOperation operation, IProgressMonitor monitor){
+	}	
+	
+	/**
+	 * Compare yourself based on Validator name.
+	 */
+	public int compareTo(Validator validator) {
+		return getName().compareTo(validator.getName());			
+	}
+	
+	/** Answer a deep copy of yourself. */
+	public Validator copy(){
+		return copy(false);
+	}
+	
+	public abstract Validator copy(boolean includeChangeCounts);
+	
+	/**
+	 * Update your direct, non transient fields from the fields in v.
+	 */
+	protected void copyLocal(Validator v, boolean includeChangeCounts){
+		_buildValidation = v._buildValidation;
+		_delegatingId = v._delegatingId;
+		_manualValidation = v._manualValidation;
+		_markerId = v._markerId;
+		_messageSettings = v._messageSettings;
+		_sourceId = v._sourceId;
+		_version = v._version;
+		_migrated = v._migrated;
+		
+		if (includeChangeCounts){
+			_changeCountGlobal = v._changeCountGlobal;
+			_changeCountMessages = v._changeCountMessages;
+		}
+	}
+	
+	/**
+	 * Should the validation framework first clear the markers that this
+	 * validator has placed on this resource? This method can be overridden by
+	 * validator implementors to provide a validator specific behavior.
+	 * 
+	 * @param event
+	 *            The validation event that triggered the validation.
+	 * @return true if the validation framework should first clear all the
+	 *         markers that this validator produced. This is the default
+	 *         behavior. Return false to leave the markers unchanged. It then
+	 *         becomes the responsibility of the validator to manage it's own
+	 *         markers for this resource, for this validation event.
+	 */
+	public boolean shouldClearMarkers(ValidationEvent event){
+		return true;
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate
+	 * this resource. This method does not check to see if global validation or
+	 * project validation has been suspended or not.
+	 * 
+	 * @param resource
+	 *            The resource to be checked.
+	 * @param isManual
+	 *            If true then this validator must also be enabled for manual
+	 *            validation.
+	 * @param isBuild
+	 *            If true then this validator must also be enabled for builder
+	 *            based validation.
+	 * 
+	 * @return true if the resource should be validated.
+	 */
+	public boolean shouldValidate(IResource resource, boolean isManual, boolean isBuild){
+		return shouldValidate(resource, isManual, isBuild, new ContentTypeWrapper());
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate
+	 * this resource. This method does not check to see if global validation or
+	 * project validation has been suspended or not.
+	 * 
+	 * @param resource
+	 *            The resource to be checked.
+	 * @param isManual
+	 *            If true then this validator must also be enabled for manual
+	 *            validation.
+	 * @param isBuild
+	 *            If true then this validator must also be enabled for builder
+	 *            based validation.
+	 * @param contentTypeWrapper 
+	 *            For repeated calls on the same resource, it is more efficient
+	 *            to remember the content type.
+	 * @return true if the resource should be validated.
+	 * @see Friend#shouldValidate(Validator, IResource, boolean, boolean, ContentTypeWrapper)
+	 */
+	boolean shouldValidate(IResource resource, boolean isManual, boolean isBuild, 
+		ContentTypeWrapper contentTypeWrapper){
+		
+		if (isManual && !_manualValidation)return false;
+		if (isBuild && !_buildValidation)return false;
+		
+		return shouldValidate(resource, contentTypeWrapper);
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate
+	 * this resource. This method does not check to see if global validation or
+	 * project validation has been suspended or not.
+	 * 
+	 * @param resource
+	 *            The resource to be checked.
+	 * @param valType
+	 *            The context to use when performing the check.
+	 * 
+	 * @return true if the resource should be validated.
+	 */
+	public boolean shouldValidate(IResource resource, ValType valType){
+		return shouldValidate(resource, valType, new ContentTypeWrapper());
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate
+	 * this resource. This method does not check to see if global validation or
+	 * project validation has been suspended or not.
+	 * 
+	 * @param resource
+	 *            The resource to be checked.
+	 * @param valType
+	 *            The context to use when performing the check.
+	 * @param contentTypeWrapper
+	 *            For repeated calls on the same resource, it is more efficient
+	 *            to remember the content type.
+	 * 
+	 * @return true if the resource should be validated.
+	 * 
+	 * @see Friend#shouldValidate(Validator, IResource, ValType, ContentTypeWrapper)
+	 */
+	boolean shouldValidate(IResource resource, ValType valType, ContentTypeWrapper contentTypeWrapper){
+		if (Tracing.matchesExtraDetail(getId())){
+			Tracing.log("Validator-01: checking if " + getId() + " should validate " + resource); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (valType == ValType.Manual && !_manualValidation)return false;
+		if (valType == ValType.Build && !_buildValidation)return false;
+		
+		boolean result = shouldValidate(resource, contentTypeWrapper);
+		if (Tracing.matchesExtraDetail(getId())){
+			Tracing.log("Validator-02: result = " + result); //$NON-NLS-1$
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate this project. This method
+	 * does not check to see if global validation or project validation has been suspended or not.
+	 * 
+	 * @param project the project to be checked
+	 * @param type The type of validation request
+	 * 
+	 * @return true if the project should be validated.
+	 */
+	public boolean shouldValidateProject(IProject project, ValType type){
+		return shouldValidateProject(project, type == ValType.Manual, type == ValType.Build);
+	}
+	
+	/**
+	 * Answer true if this validator, based on it's filters, should validate this project. This method
+	 * does not check to see if global validation or project validation has been suspended or not.
+	 * 
+	 * @param project the project to be checked
+	 * @param isManual if true then this validator must also be enabled for manual validation.
+	 * @param isBuild if true then this validator must also be enabled for builder based validation.
+	 * 
+	 * @return true if the project should be validated.
+	 */
+	public boolean shouldValidateProject(IProject project, boolean isManual, boolean isBuild){
+		if (Tracing.matchesExtraDetail(getId())){
+			Tracing.log("Validator-03: checking if " + getId() + " should validate " + project); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (isManual && !_manualValidation)return false;
+		if (isBuild && !_buildValidation)return false;
+		if (project == null || !project.isOpen())return false;
+		boolean result = shouldValidateProject(project);
+		if (Tracing.matchesExtraDetail(getId())){
+			Tracing.log("Validator-04: result " + result); //$NON-NLS-1$
+		}
+		return result;
+	}
+	
+	/**
+	 * Validate the resource.
+	 * 
+	 * @param resource
+	 *            The resource to be validated.
+	 * @param kind
+	 *            The kind of resource change, see IResourceDelta for values.
+	 * @param operation
+	 *            The operation that this validation is running under. This can
+	 *            be null.
+	 * @param monitor
+	 *            A way to report progress. This can be null.
+	 * 
+	 * @return the result of doing the validation, it can be, but usually isn't
+	 *         null.
+	 */
+	public abstract ValidationResult validate(IResource resource, int kind, ValOperation operation, IProgressMonitor monitor);
+	
+	/**
+	 * Validate the resource.
+	 * 
+	 * @param resource
+	 *            The resource to be validated.
+	 * @param kind
+	 *            The kind of resource change, see IResourceDelta for values.
+	 * @param operation
+	 *            The operation that this validation is running under. This can
+	 *            be null.
+	 * @param monitor
+	 *            A way to report progress. This can be null.
+	 * @param event
+	 *            An event that describes in more detail what should be
+	 *            validated and why it should be validated. This can be null.
+	 * 
+	 * @return the result of doing the validation, it can be, but usually isn't
+	 *         null.
+	 */
+	public ValidationResult validate(IResource resource, int kind, ValOperation operation, IProgressMonitor monitor, ValidationEvent event){
+		// The reason that the resource and kind are still specified, is that I didn't want to remove a public method in the service
+		// stream. 
+		return validate(resource, kind, operation, monitor);		
+	}
+
+	/**
+	 * This method will be called before any validation takes place. It allows validators to perform any
+	 * initialization that they might need. 
+	 *  
+	 * @param project the project that is being validated. For the very first call in the validation phase,
+	 * this will be null. That is the signal to the validator that a top level validation is starting.
+	 * Subsequently, the project will be set, as each of the individual projects are validated.
+	 * 
+	 * @param state a way to pass arbitrary, validator specific, data from one invocation of a validator to
+	 * the next, during the validation phase.
+	 * 
+	 * @param monitor the monitor that should be used for reporting progress if the clean takes a long time.
+	 */
+	public void validationStarting(IProject project, ValidationState state, IProgressMonitor monitor){
+		// subclasses need to override this, if they wish to let their validators know about this event
+	}
+	
+	/**
+	 * This method will be called when validation is complete. It allows validators to perform any
+	 * cleanup that they might need to do.  
+	 *  
+	 * @param project the project that was validated. The very last call in the validation will set this to 
+	 * null so that the validator knows that all the projects have now been validated.
+	 * 
+	 * @param state a way to pass arbitrary, validator specific, data from one invocation of a validator to
+	 * the next, during the validation phase.
+	 * 
+	 * @param monitor the monitor that should be used for reporting progress if the clean takes a long time.
+	 */
+	public void validationFinishing(IProject project, ValidationState state, IProgressMonitor monitor){		
+		// subclasses need to override this, if they wish to let their validators know about this event
+	}
+	
+	void add(MessageSeveritySetting message){
+		// I can't use getMessageSettings() here, as that will put us into an infinite loop
+		if (_messageSettings == null){
+			_messageSettings = new HashMap<String, MessageSeveritySetting>(10);
+		}
+		_messageSettings.put(message.getId(), message);
+		bumpChangeCountMessages();
+	}
+	
+	public IValidator asIValidator(){
+		return null;
+	}
+	
+	protected abstract boolean shouldValidate(IResource resource, ContentTypeWrapper contentTypeWrapper);
+	protected abstract boolean shouldValidateProject(IProject project);
+			
+	public abstract String getId();
+	
+	public MessageSeveritySetting getMessage(String id){
+		return getMessageSettings().get(id);
+	}
+	
+	/**
+	 * Answer all the message settings that this validator has defined.
+	 * 
+	 * @return an empty map if the validator did not define any message settings.
+	 */
+	public Map<String, MessageSeveritySetting> getMessageSettings(){
+		Map<String, MessageSeveritySetting> settings = _messageSettings;
+		if (settings == null){
+			settings = new HashMap<String, MessageSeveritySetting>(10);
+			init(settings);
+			if (ValManager.getDefault().mustUseGlobalValidators(getProject())){
+				ValPrefManagerGlobal gp = ValPrefManagerGlobal.getDefault();
+				gp.loadMessages(this, settings);
+			}
+			else {
+				ValPrefManagerProject vp = new ValPrefManagerProject(getProject());
+				vp.loadMessages(this, settings);				
+			}
+			_messageSettings = settings;
+		}
+		return settings;
+	}
+	
+	/**
+	 * Answer a hash code for the configurable fields so that we can quickly determine if two
+	 * validators are the same.
+	 */
+	public int hashCodeForConfig(){
+		int h = 0;
+		if (_buildValidation)h += 101;
+		if (_delegatingId != null)h += _delegatingId.hashCode();
+		if (_manualValidation)h += 201;
+		if (_messageSettings != null){
+			for (MessageSeveritySetting ms : _messageSettings.values())h += ms.hashCode();
+		}
+		if (_sourceId != null)h += _sourceId.hashCode();
+		h += _version;
+		return h;
+	}
+	
+	private void init(Map<String, MessageSeveritySetting> settings) {
+		for (MessageSeveritySetting ms : ValidatorExtensionReader.getDefault().addMessages(this)){
+			settings.put(ms.getId(), ms);
+		}		
+	}
+
+	public abstract String getName();
+	
+	/**
+	 * Answer the project that you were enabled on. 
+	 * 
+	 * @return null if you are a global (i.e. workspace level) validator.
+	 */
+	public IProject getProject(){
+		return _project;
+	}
+		
+	/**
+	 * Answer the name of the class that implements the validator.
+	 */
+	public abstract String getValidatorClassname();
+	
+	/**
+	 * Is this validator currently enabled for validations that are triggered manually? 
+	 */
+	public boolean isManualValidation() {
+		return _manualValidation;
+	}
+
+	/**
+	 * Set whether this validator should be triggered as part of a manual validation.
+	 * 
+	 * @param manualValidation
+	 * @return true if the setting changed.
+	 */
+	public boolean setManualValidation(boolean manualValidation) {
+		return setManualValidation2(manualValidation);
+	}
+	
+	protected final boolean setManualValidation2(boolean manualValidation) {
+		boolean changed = false;
+		if (_manualValidation != manualValidation){
+			bumpChangeCountGlobal();
+			changed = true;
+			_manualValidation = manualValidation;
+		}
+		return changed;
+	}
+
+	/**
+	 * Is this validator currently enabled for validations that are triggered by builds? 
+	 */
+	public boolean isBuildValidation() {
+		return _buildValidation;
+	}
+	
+	/**
+	 * Has the validator changed since it was last created or copied? Or was it migrated from an earlier version. 
+	 */
+	public boolean isChanged(){
+		if (_changeCountGlobal > 0 || _changeCountMessages > 0 || _migrated)return true;
+		return false;
+	}
+	
+	/**
+	 * Has the validator's implementation been loaded yet? This is used by some test cases to ensure that 
+	 * plug-ins are not loaded too early.
+	 */
+	abstract boolean isLoaded();
+	
+
+	/**
+	 * Set whether this validator should be triggered by the build process.
+	 * 
+	 * @param buildValidation
+	 * @return true if the setting changed.
+	 */
+	public boolean setBuildValidation(boolean buildValidation) {
+		return setBuildValidation2(buildValidation);
+	}
+	
+	protected final boolean setBuildValidation2(boolean buildValidation) {
+		boolean changed = false;
+		if (_buildValidation != buildValidation){
+			bumpChangeCountGlobal();
+			changed = true;
+			_buildValidation = buildValidation;
+		}
+		return changed;
+	}
+
+	/**
+	 * Get the id of the "real" validator, that is the validator that will be called when this delegating
+	 * validator is asked to validate something. If this isn't a delegating validator answer null.
+	 */
+	public String getDelegatingId() {
+		return _delegatingId;
+	}
+	
+	/**
+	 * Set the id of the "real" validator, that is the validator that will be called when this delegating
+	 * validator is asked to validate something.
+	 * 
+	 * @param delegating the id of the validator that is actually going to perform the validation.
+	 */
+	public void setDelegatingId(String delegating) {
+		if (!Misc.same(_delegatingId, delegating)){
+			_delegatingId = delegating;
+			bumpChangeCountGlobal();
+		}
+	}
+	
+	public int getVersion() {
+		return _version;
+	}
+	
+	public void setVersion(int version) {
+		if (_version != version){
+			_version = version;
+			bumpChangeCountGlobal();
+		}
+	}
+	
+	@Override
+	public String toString() {
+		return getName();
+	}
+		
+/**
+ * A validator that uses version 1 of the validation framework.
+ * @author karasiuk
+ *
+ */ 
+public static class V1 extends Validator {
+	private ValidatorMetaData _vmd;
+	
+	/**
+	 * Create a new version 1 validator. 
+	 * @param vmd
+	 * @param config this is used to set the global enablement options. In some case this can be null.
+	 */
+	public V1(ValidatorMetaData vmd, ValidationConfiguration config, IProject project){
+		super(project);
+		_vmd = vmd;
+		if (config != null){
+			setBuildValidation(config.isBuildEnabled(vmd));
+			setManualValidation(config.isManualEnabled(vmd));
+		}
+		setDelegatingId(ValidatorDelegatesRegistry.getInstance().getDefaultDelegate(_vmd.getValidatorUniqueName()));
+		if (_vmd.getMarkerIds() != null && _vmd.getMarkerIds().length > 0)setMarkerId(_vmd.getMarkerIds()[0]);
+		resetChangeCounters();
+	}
+	
+	@Override
+	public IValidator asIValidator() {
+		IValidator v = null;
+		try {
+			v = _vmd.getValidator();
+		}
+		catch (InstantiationException e){
+			ValidationPlugin.getPlugin().handleException(e);
+			return null;
+		}
+		return v;
+	}
+	
+	public V1 asV1Validator() {
+		return this;
+	}
+			
+	public Validator copy(boolean includeChangeCounts) {
+		V1 v = new V1Copy(_vmd, null, _project);
+		v.copyLocal(this, includeChangeCounts);
+				
+		return v;
+	}
+	
+	public String getName() {
+		return _vmd.getValidatorDisplayName();
+	}
+	
+	public ValidatorMetaData getVmd(){
+		return _vmd;
+	}
+	
+	public String getValidatorClassname(){
+		String name = ""; //$NON-NLS-1$
+		try {
+			name = _vmd.getValidator().getClass().getName();
+		}
+		catch (Exception e){
+			// eat it
+		}
+		return name;
+	}
+	public String getId() {
+		return _vmd.getValidatorUniqueName();
+	}
+	
+	@Override
+	boolean isLoaded() {
+		return _vmd.isActive();
+	}
+	
+	@Override
+	public boolean setBuildValidation(boolean buildValidation) {
+		boolean changed = super.setBuildValidation(buildValidation);
+		_vmd.setBuildValidation(buildValidation);
+		return changed;
+	}
+	
+	@Override
+	public boolean setManualValidation(boolean manualValidation) {
+		boolean changed = super.setManualValidation(manualValidation);
+		_vmd.setManualValidation(manualValidation);
+		return changed;
+	}
+
+	@Override
+	protected boolean shouldValidate(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+		return _vmd.isApplicableTo(resource);
+	}
+
+	@Override
+	protected boolean shouldValidateProject(IProject project) {
+		// TODO determine if this can be optimized
+		return true;
+	}
+
+	@Override
+	public ValidationResult validate(IResource resource, int kind, ValOperation operation, 
+		IProgressMonitor monitor) {
+		
+		if (monitor == null)monitor = new NullProgressMonitor();
+		
+		ValidationResult vr = new ValidationResult();
+		IValidator v = asIValidator();
+		if (v == null)return null;
+		
+		try {
+			IProject project = resource.getProject();
+			SummaryReporter reporter = new SummaryReporter(project, monitor);
+			IWorkbenchContext helper = _vmd.getHelper(project);
+			if (helper instanceof WorkbenchContext){
+				WorkbenchContext wc = (WorkbenchContext)helper;
+				List<String> files = new LinkedList<String>();
+				// [213631] The JSP validator expects full paths not relative paths, but the XML validator
+				// expects relative paths.
+				files.add(wc.getPortableName(resource));
+				wc.setValidationFileURIs(files);
+			}
+			try {
+				ValidatorLauncher.getLauncher().start(helper, v, reporter);
+			}
+			finally {
+				try {
+					v.cleanup(reporter);
+				}
+				finally {
+					helper.cleanup(reporter);
+				}
+			}
+			
+			vr.incrementError(reporter.getSeverityHigh());
+			vr.incrementWarning(reporter.getSeverityNormal());
+			vr.incrementInfo(reporter.getSeverityLow());
+			
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		return vr;
+	}
+	
+	/*
+	 * GRK - Because I didn't want to try to make a true copy of the V1 validator, (because I didn't
+	 * want to copy the vmd object), I came up with this approach to only copy the fields that
+	 * the preference page was worried about. 
+	 */
+	public final static class V1Copy extends V1 {
+		public V1Copy(ValidatorMetaData vmd, ValidationConfiguration vc, IProject project){
+			super(vmd, vc, project);
+		}
+		
+		@Override
+		public boolean setManualValidation(boolean bool) {
+			return setManualValidation2(bool);
+		}
+		
+		@Override
+		public boolean setBuildValidation(boolean bool) {
+			return setBuildValidation2(bool);
+		}
+				
+	}
+		
+}
+
+/**
+ * A validator that uses version 2 of the validation framework.
+ * @author karasiuk
+ *
+ */
+public final static class V2 extends Validator implements IAdaptable {
+	private AbstractValidator	_validator;
+	
+	private List<FilterGroup>	_groups = new LinkedList<FilterGroup>();
+	private FilterGroup[]		_groupsArray;
+	
+	/** The full id of the extension. */
+	private String			_id;
+	
+	/** Name of the validator. */
+	private String			_name;
+	
+	/** 
+	 * We don't want to create the validator too early, as it may trigger new plug-ins to be loaded.
+	 * We delay that as long as possible, by starting with just the config element.
+	 */
+	private IConfigurationElement _validatorConfigElement;
+	
+	private String	_validatorClassName;
+	
+	/**
+	 * An array containing the validator group IDs for which this validator is a member.
+	 */
+	private String[] _validatorGroupIds;
+		
+	/** 
+	 * If this validator is a delegating validator, then this is the "real" validator (i.e. the one that
+	 * does the work).
+	 */
+	private AbstractValidator	_delegated;
+		
+	/** How many times has a group field in this validator been changed since it was created (or copied)? */
+	protected transient int _changeCountGroups;
+		
+	private Level _level;
+	
+	/**
+	 * Do we still need to invoke the validateStarting method for this validator, for the null project?
+	 * 
+	 * Because we do not want to activate a validator's plug-in too soon, we do not activate the validator
+	 * as a reaction to the global validation starting event. Instead we mark it pending, and wait until
+	 * we are sure that we have something to validate.
+	 * 
+	 * If this flag is true, it means that the validateStarting method still needs to be called for this validator.
+	 */
+	private AtomicBoolean _pendingValidationStarted = new AtomicBoolean();
+	
+	V2(IConfigurationElement configElement, IProject project){
+		super(project);
+		assert configElement != null;
+		_validatorConfigElement = configElement;
+		_validatorClassName = configElement.getAttribute(ExtensionConstants.AttribClass);
+
+		IConfigurationElement[] groupReferenceElements = configElement.getChildren(ExtensionConstants.Group.elementGroup);
+		List<String> validatorGroupIDs = new ArrayList<String>();
+		for (IConfigurationElement groupElement : groupReferenceElements) {
+			String id = groupElement.getAttribute(ExtensionConstants.Group.attId);
+			if (id != null)validatorGroupIDs.add(id);
+		}
+		_validatorGroupIds = validatorGroupIDs.toArray(new String[validatorGroupIDs.size()]);
+			
+		init();
+	}
+	
+	private V2(IProject project, String validatorClassName, AbstractValidator validator){
+		super(project);
+		assert validator != null;
+		
+		_validatorClassName = validatorClassName;
+		_validator = validator;
+		init();
+	}
+	
+	private void init(){
+		try {
+			String id = ConfigurationManager.getManager().getConfiguration(_project).getDelegateForTarget(_validatorClassName);
+			if (id == null) id = ValidatorDelegatesRegistry.getInstance().getDefaultDelegate(_validatorClassName);
+			setDelegatingId(id);
+		}
+		catch (InvocationTargetException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		resetChangeCounters();		
+	}
+
+	public synchronized void add(FilterGroup fg) {
+		assert fg != null;
+		_groupsArray = null;
+		_groups.add(fg);
+		bumpChangeCountGroups();
+	}
+	
+	@Override
+	public IValidator asIValidator() {
+		AbstractValidator av = getDelegatedValidator();
+		if (av instanceof IValidator)return (IValidator)av;
+		return super.asIValidator();
+	}
+	
+	@Override
+	public V2 asV2Validator() {
+		return this;
+	}
+	
+	/**
+	 * Let the validator know that a clean is about to happen.
+	 * 
+	 * @param project the project that is being cleaned. This can be null which means that the workspace
+	 * is being cleaned (in which case a separate call will be made for each open project).
+	 * 
+	 */
+	@Override
+	public void clean(IProject project, ValOperation operation, IProgressMonitor monitor) {
+		getDelegatedValidator().clean(project, operation.getState(), monitor);
+	}
+	
+	@Override
+	public Validator copy(boolean includeChangeCounts) {
+		V2 v = null;
+		if (_validatorConfigElement != null)v = new V2(_validatorConfigElement, _project);
+		else v = new V2(_project, _validatorClassName, _validator);
+		v.copyLocal(this, includeChangeCounts);
+		
+		if (includeChangeCounts)v._changeCountGroups = _changeCountGroups;
+		
+		FilterGroup[] groups = getGroups();
+		v._groupsArray = new FilterGroup[groups.length];
+		for (int i=0; i<groups.length; i++){
+			v._groupsArray[i] = groups[i];
+			v._groups.add(groups[i]);
+		}
+
+		v._id = _id;
+		v._name = _name;
+		v._validatorGroupIds = _validatorGroupIds;
+		v._pendingValidationStarted = _pendingValidationStarted;
+				
+		return v;
+	}
+	
+	public int getChangeCountGroups(){
+		return _changeCountGroups;
+	}
+	
+	public void bumpChangeCountGroups(){
+		_changeCountGroups++;
+	}
+	
+	public Level getLevel() {
+		return _level;
+	}
+
+	public void setLevel(Level level) {
+		assert _level == null;
+		_level = level;
+	}
+	
+	/**
+	 * Answer the actual validator that is going to perform the validation. If this is a normal validator this
+	 * method will simply answer itself. However if this is a delegating validator, then this will answer the
+	 * "real" validator.
+	 */
+	public AbstractValidator getDelegatedValidator(){
+		AbstractValidator delegated = _delegated;
+		if (delegated != null)return delegated;
+		else if (getDelegatingId() == null)return getValidator();
+		try {
+			ValidatorDelegateDescriptor vdd = ValidatorDelegatesRegistry.getInstance()
+				.getDescriptor(getValidatorClassname(), getDelegatingId());
+			if (vdd == null)return getValidator();
+			delegated = vdd.getValidator2();
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+			delegated = new NullValidator();
+		}
+		delegated.setParent(this);
+		_delegated = delegated;
+		return delegated;
+	}
+		
+	@Override
+	public String getId() {
+		return _id;
+	}
+	
+	/**
+	 * Answer the validator's filter groups.
+	 * @return an empty array if the validator does not have any filter groups.
+	 */
+	public synchronized FilterGroup[] getGroups(){
+		FilterGroup[] groups = _groupsArray;
+		if (groups == null){
+			groups = new FilterGroup[_groups.size()];
+			_groups.toArray(groups);
+			_groupsArray = groups;
+		}
+		return groups;
+	}
+	
+	@Override
+	public String getName() {
+		return _name;
+	}
+	
+	public AbstractValidator getValidator() {
+		if (_validator == null){
+			try {
+				_validator = (AbstractValidator)_validatorConfigElement.createExecutableExtension(ExtensionConstants.AttribClass);
+			}
+			catch (Exception e){
+				ValidationPlugin.getPlugin().handleException(e);
+				IContributor contrib = _validatorConfigElement.getContributor();
+				String message = NLS.bind(ValMessages.ErrConfig, contrib.getName());
+				ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
+				_validator = new NullValidator();
+			}
+			_validator.setParent(this);
+			_validatorConfigElement = null;
+
+		}
+		return _validator;
+	}
+	
+	@Override
+	public String getValidatorClassname(){
+		return _validatorClassName;
+	}
+	
+	public String[] getValidatorGroups(){
+		return _validatorGroupIds;
+	}
+	
+	@Override
+	public int hashCodeForConfig() {
+		int h =  super.hashCodeForConfig();
+		if (_id != null)h += _id.hashCode();
+		if (_groups != null){
+			for (FilterGroup fg : _groups)h += fg.hashCodeForConfig();
+		}
+		return h;
+	}
+	
+	@Override
+	public boolean isChanged() {
+		if (_changeCountGroups > 0)return true;
+		return super.isChanged();
+	}
+	
+	@Override
+	boolean isLoaded() {
+		return _validator != null;
+	}
+	
+	@Override
+	public boolean shouldClearMarkers(ValidationEvent event) {
+		return getValidator().shouldClearMarkers(event);
+	}
+		
+	/**
+	 * Answer true if this validator, based on it's filters, should validate this resource.
+	 * 
+	 * @return true if the resource should be validated.
+	 */
+	@Override
+	protected boolean shouldValidate(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+		FilterGroup[] groups = getGroups();
+		IProject project = resource.getProject();
+		for (FilterGroup group : groups){
+			if (!group.shouldValidate(project, resource, contentTypeWrapper))return false;
+		}
+		return true;
+	}
+	
+	
+	@Override
+	public void setDelegatingId(String delegating) {
+		super.setDelegatingId(delegating);
+		_delegated = null;
+	}
+	
+	public synchronized void setGroups(List<FilterGroup> groups){
+		_groups = groups;
+		_groupsArray = null;
+		bumpChangeCountGroups();
+	}
+
+	public void setId(String id) {
+		if (!Misc.same(_id, id)){
+			_id = id;
+			bumpChangeCountGlobal();
+		}
+	}
+	
+	public void setName(String name) {
+		if (!Misc.same(_name, name)){
+			_name = name;
+			bumpChangeCountGlobal();
+		}
+	}
+	
+	@Override
+	public ValidationResult validate(IResource resource, int kind, ValOperation operation, IProgressMonitor monitor){
+		return validate(resource, kind, operation, monitor, null);
+	}
+	
+	@Override
+	public ValidationResult validate(IResource resource, int kind, ValOperation operation, IProgressMonitor monitor, ValidationEvent event) {
+		ValidationResult vr = null;
+		if (operation == null)operation = new ValOperation();
+		if (monitor == null)monitor = new NullProgressMonitor();
+		try {
+			if (event == null)event = new ValidationEvent(resource, kind, null);
+			vr = getDelegatedValidator().validate(event, operation.getState(), monitor);
+			if (vr == null)vr = getDelegatedValidator().validate(resource, kind, operation.getState(), monitor);
+		}
+		catch (Exception e){
+			try {
+				String msg = NLS.bind(ValMessages.LogValEnd, getName(), resource.getLocationURI());
+				ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, msg);
+			}
+			catch (Exception e2 ){
+				// ignore it
+			}
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		
+		if (vr != null){
+			if (vr.getValidationException() != null){
+				ValidationPlugin.getPlugin().handleException(vr.getValidationException());
+			}
+			updateResults(vr);
+			if (vr.getDependsOn() != null){
+				ValidationFramework.getDefault().getDependencyIndex().set(getId(), resource, vr.getDependsOn());
+			}
+			IResource[] validated = vr.getValidated();
+			if (validated != null){
+				for (int i=0; i<validated.length; i++){
+					operation.addValidated(getId(), validated[i]);
+				}
+			}
+			
+			ValidatorMessage[] msgs = vr.getMessages();
+//			if (sanityTest(msgs.length, resource)){
+				MarkerManager mm = MarkerManager.getDefault();
+				for (ValidatorMessage m : msgs){
+					mm.createMarker(m, getId());
+				}
+//			}
+//			else {
+//				setBuildValidation(false);
+//				setManualValidation(false);
+//			}
+		}
+		return vr;		
+	}
+	
+	/**
+	 * Perform a simple sanity test to ensure that the validator is configured correctly.
+	 * @param numberofMessages number of messages that the validator produced.
+	 * @return true if the test passed
+	 */
+//	private boolean sanityTest(int numberofMessages, IResource resource) {
+//		if (numberofMessages < 201)return true;
+//		
+//		String resName = ""; //$NON-NLS-1$
+//		if (resource != null)resName = resource.getName();
+//		String message = NLS.bind(ValMessages.ConfigError, new Object[]{
+//				getName(), getId(), String.valueOf(numberofMessages), resName});
+//		ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
+//		
+//		return false;
+//	}
+
+	/**
+	 * If the validator is using a report helper then update it with any of the messages that were
+	 * added directly to the validation result.
+	 * @param vr
+	 */
+	private void updateResults(ValidationResult vr) {
+		ReporterHelper rh = vr.getReporterHelper();
+		if (rh == null)return;
+		ClassLoader classloader = getDelegatedValidator().getClass().getClassLoader();
+		for (IMessage message : rh.getMessages()){
+			Object target = message.getTargetObject();
+			if (target != null){
+				IResource res = null;
+				if (target instanceof IResource)res = (IResource)target;
+				if (res == null){
+					target = message.getAttribute(IMessage.TargetResource);
+					if (target != null && target instanceof IResource)res = (IResource)target;
+				}
+				if (res != null){
+					
+					ValidatorMessage vm = ValidatorMessage.create(message.getText(classloader), res);
+					if (getMarkerId() != null)vm.setType(getMarkerId());
+					vr.add(vm);
+					int markerSeverity = IMarker.SEVERITY_INFO;
+					int sev = message.getSeverity();
+					if ((sev & IMessage.HIGH_SEVERITY) != 0)markerSeverity = IMarker.SEVERITY_ERROR;
+					else if ((sev & IMessage.NORMAL_SEVERITY) != 0)markerSeverity = IMarker.SEVERITY_WARNING;
+					vm.setAttribute(IMarker.SEVERITY, markerSeverity);
+					vm.setAttribute(IMarker.LINE_NUMBER, message.getLineNumber());
+					int offset = message.getOffset();
+					if (offset != IMessage.OFFSET_UNSET){
+						vm.setAttribute(IMarker.CHAR_START, offset);
+						int len = message.getLength();
+						if (len != IMessage.OFFSET_UNSET){
+							vm.setAttribute(IMarker.CHAR_START, offset);
+							vm.setAttribute(IMarker.CHAR_END, offset+len);
+						}
+					}
+					String groupName = message.getGroupName();
+					if (groupName != null){
+						vm.setAttribute(ConfigurationConstants.VALIDATION_MARKER_GROUP, groupName);
+					}
+					
+					copyAttributes(message, vm);
+				}
+			}
+		}		
+	}
+
+	@SuppressWarnings("unchecked")
+	private void copyAttributes(IMessage message, ValidatorMessage vm) {
+		// I made this a separate method, so that I could localize the suppression of unchecked warnings.
+		Map attributes = message.getAttributes();
+		if (attributes != null){						
+			for (Iterator it = attributes.entrySet().iterator(); it.hasNext();){
+				Map.Entry me = (Map.Entry)it.next();
+				String key = (String)me.getKey();
+				vm.setAttribute(key, me.getValue());
+			}
+		}
+	}
+	
+	@Override
+	public void validationStarting(IProject project, ValidationState state, IProgressMonitor monitor) {
+		if (project == null)_pendingValidationStarted.set(true);
+		else {
+			AbstractValidator val = getDelegatedValidator();
+			if (_pendingValidationStarted.getAndSet(false)){
+				val.validationStarting(null, state, monitor);
+			}
+			val.validationStarting(project, state, monitor);
+		}
+	}
+	
+	@Override
+	public void validationFinishing(IProject project, ValidationState state, IProgressMonitor monitor) {
+		if (project == null){
+			if (!_pendingValidationStarted.getAndSet(false))getDelegatedValidator().validationFinishing(null, state, monitor);
+		}
+		else getDelegatedValidator().validationFinishing(project, state, monitor);
+	}
+
+	@SuppressWarnings("unchecked")
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+
+	public synchronized void remove(FilterGroup group) {
+		_groups.remove(group);
+		_groupsArray = null;	
+		bumpChangeCountGroups();
+	}
+	
+	@Override
+	public void resetChangeCounters() {
+		super.resetChangeCounters();
+		_changeCountGroups = 0;
+	}
+
+	@Override
+	protected boolean shouldValidateProject(IProject project) {
+		FilterGroup[] groups = getGroups();
+		ContentTypeWrapper ctw = new ContentTypeWrapper();
+		for (FilterGroup group : groups){
+			if (!group.shouldValidate(project, null, ctw))return false;
+		}
+		return true;
+	}
+	
+	public synchronized void replaceFilterGroup(FilterGroup existing, FilterGroup merged) {
+		remove(existing);
+		add(merged);
+	}
+
+}
+
+public String getSourceId() {
+	return _sourceId;
+}
+
+public void setSourceId(String sourceId) {
+	if (!Misc.same(_sourceId, sourceId)){
+		_sourceId = sourceId;
+		bumpChangeCountGlobal();
+	}
+}
+
+
+void setMessages(Map<String, MessageSeveritySetting> map) {
+	_messageSettings = map;
+	bumpChangeCountMessages();
+}
+
+public int getChangeCountGlobal() {
+	return _changeCountGlobal;
+}
+
+public boolean hasGlobalChanges(){
+	return _migrated || _changeCountGlobal > 0;
+}
+
+public int getChangeCountMessages() {
+	return _changeCountMessages;
+}
+
+public void bumpChangeCountMessages(){
+	_changeCountMessages++;
+}
+
+public void resetChangeCounters() {
+	_changeCountGlobal = 0;
+	_changeCountMessages = 0;
+}
+
+public void bumpChangeCountGlobal(){
+	_changeCountGlobal++;
+}
+
+/**
+ * Answer true if you have the same configuration settings as validator.
+ * @param validator this can be null.
+ */
+public boolean sameConfig(Validator validator) {
+	if (validator == null)return false;
+	return hashCodeForConfig() == validator.hashCodeForConfig();
+}
+
+public String getMarkerId() {
+	return _markerId;
+}
+
+public void setMarkerId(String markerId) {
+	_markerId = markerId;
+	if (markerId != null)MarkerManager.getDefault().getMarkers().add(markerId);
+}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidatorMessage.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidatorMessage.java
new file mode 100644
index 0000000..b8146dc
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/ValidatorMessage.java
@@ -0,0 +1,295 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValConstants;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * This class provides a way for a validator to return messages, that are easily
+ * converted into IMarkers.
+ * <p>
+ * This class is completely optional for validators. A validator can choose to
+ * directly manage IMarkers. However, some validators want to be used in
+ * multiple contexts, for example as-you-type validation and build based
+ * validation. For these types of validators it is not possible for them to use
+ * only IMarkers, because often the Resource has not been saved yet.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that
+ * is still under development and expected to change significantly before
+ * reaching stability. It is being made available at this early stage to solicit
+ * feedback from pioneering adopters on the understanding that any code that
+ * uses this API will almost certainly be broken (repeatedly) as the API
+ * evolves.
+ * </p>
+ */
+public class ValidatorMessage {
+	
+	public static final String ValidationId = "ValidationId"; //$NON-NLS-1$
+	
+	/** Associate some arbitrary attributes with a message. */
+	private final Map<String, Object>	_map = new HashMap<String, Object>(5);
+	
+	private IResource	_resource;
+	
+	/** The type of marker. */
+	private String		_type;
+	
+	/**
+	 * Create a new validation message.
+	 * 
+	 * @param message
+	 * 		The localized message that will be displayed to the user.
+	 * 
+	 * @param resource
+	 * 		The resource that the message is associated with.
+	 */
+	public static ValidatorMessage create(String message, IResource resource){
+		ValidatorMessage msg = new ValidatorMessage();
+		msg._type = ValConstants.ProblemMarker;
+		msg._resource = resource;
+		msg.setAttribute(IMarker.MESSAGE, ValidationPlugin.getPlugin().isDebugging() ? 
+			Tracing.timestampIt(message): message);
+		return msg;
+	}
+	
+	private ValidatorMessage(){}
+	
+	/**
+	 * Answer a copy of yourself.
+	 */
+	public ValidatorMessage asCopy(){
+		ValidatorMessage msg = new ValidatorMessage();
+		msg._resource = _resource;
+		msg._type = _type;
+		msg._map.putAll(_map);
+		return msg;
+	}
+	
+	/**
+	 * Returns the attribute with the given name. The result is an instance of
+	 * one of the following classes: <code>String</code>, <code>Integer</code>,
+	 * or <code>Boolean</code>. Returns <code>null</code> if the attribute is
+	 * undefined.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @return the value, or <code>null</code> if the attribute is undefined.
+	 */
+	public Object getAttribute(String attributeName){
+		return _map.get(attributeName);
+	}
+
+	/**
+	 * Returns the integer valued attribute with the given name. Returns the
+	 * given default value if the attribute is undefined or the marker does not
+	 * exist or is not an integer value.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param defaultValue
+	 * 		The value to use if no integer value is found.
+	 * @return the value or the default value if no integer value was found.
+	 */
+	public int getAttribute(String attributeName, int defaultValue){
+		Integer value = null;
+		try {
+			value = (Integer)_map.get(attributeName);
+		}
+		catch (Exception e){
+			// eat it
+		}
+		if (value == null)return defaultValue;
+		return value.intValue();
+	}
+
+	/**
+	 * Returns the string valued attribute with the given name. Returns the
+	 * given default value if the attribute is undefined or the marker does not
+	 * exist or is not a string value.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param defaultValue
+	 * 		The value to use if no value is found.
+	 * @return the value or the default value if no value was found.
+	 */
+	public String getAttribute(String attributeName, String defaultValue){
+		String value = null;
+		try {
+			value = (String)_map.get(attributeName);
+		}
+		catch (Exception e){
+			// eat it
+		}
+		if (value == null)return defaultValue;
+		return value;
+		
+	}
+
+	/**
+	 * Returns the boolean valued attribute with the given name. Returns the
+	 * given default value if the attribute is undefined or the marker does not
+	 * exist or is not a boolean value.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param defaultValue
+	 * 		The value to use if no value is found.
+	 * @return the value or the default value if no value was found.
+	 */
+	public boolean getAttribute(String attributeName, boolean defaultValue){
+		Boolean value = null;
+		try {
+			value = (Boolean)_map.get(attributeName);
+		}
+		catch (Exception e){
+			// eat it
+		}
+		if (value == null)return defaultValue;
+		return value.booleanValue();
+		
+	}
+
+	/**
+	 * Returns a map with all the attributes for the marker. If the marker has
+	 * no attributes then <code>null</code> is returned.
+	 * 
+	 * @return a map of attribute keys and values (key type :
+	 * 	<code>String</code> value type : <code>String</code>,
+	 * 	<code>Integer</code>, or <code>Boolean</code>) or <code>null</code>.
+	 */
+	@SuppressWarnings("unchecked")
+	public Map getAttributes() {
+		return _map;
+	}
+		
+	/**
+	 * Returns the resource with which this marker is associated. 
+	 *
+	 * @return the resource with which this marker is associated
+	 */
+	public IResource getResource(){
+		return _resource;		
+	}
+
+	/**
+	 * Returns the type of this marker. The returned marker type will not be 
+	 * <code>null</code>.
+	 *
+	 * @return the type of this marker
+	 */
+	public String getType() {
+		return _type;
+	}
+	
+	/**
+	 * Sets the marker type.
+	 * 
+	 * @param type The marker id to use when creating new markers.
+	 */
+	public void setType(String type){
+		assert type != null;
+		_type = type;
+	}
+		
+	/**
+	 * Sets the integer valued attribute with the given name.
+	 * <p>
+	 * This method changes resources; these changes will be reported in a
+	 * subsequent resource change event, including an indication that this
+	 * marker has been modified.
+	 * </p>
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param value
+	 * 		The value.
+	 */
+	public void setAttribute(String attributeName, int value){
+		_map.put(attributeName, new Integer(value));
+		
+	}
+
+	/**
+	 * Sets the attribute with the given name. The value must be
+	 * <code>null</code> or an instance of one of the following classes:
+	 * <code>String</code>, <code>Integer</code>, or <code>Boolean</code>.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param value
+	 * 		The value, or <code>null</code> if the attribute is to be undefined.
+	 */
+	public void setAttribute(String attributeName, Object value){
+		_map.put(attributeName, value);
+	}
+
+	/**
+	 * Sets the boolean valued attribute with the given name.
+	 * 
+	 * @param attributeName
+	 * 		The name of the attribute.
+	 * @param value
+	 * 		The value.
+	 */
+	public void setAttribute(String attributeName, boolean value){
+		_map.put(attributeName, value ? Boolean.TRUE : Boolean.FALSE);		
+	}
+
+	/**
+	 * Sets the given attribute key-value pairs on this marker. The values must
+	 * be <code>null</code> or an instance of one of the following classes:
+	 * <code>String</code>, <code>Integer</code>, or <code>Boolean</code>. If a
+	 * value is <code>null</code>, the new value of the attribute is considered
+	 * to be undefined.
+	 * 
+	 * @param attributeNames
+	 * 		An array of attribute names.
+	 * @param values
+	 * 		An array of attribute values.
+	 */
+	public void setAttributes(String[] attributeNames, Object[] values){
+		Assert.isTrue(attributeNames.length == values.length);
+		for (int i=0; i<attributeNames.length; i++){
+			setAttribute(attributeNames[i], values[i]);			
+		}
+	}
+
+	/**
+	 * Sets the attributes for this marker to be the ones contained in the given
+	 * table. The values must be an instance of one of the following classes:
+	 * <code>String</code>, <code>Integer</code>, or <code>Boolean</code>.
+	 * Attributes previously set on the marker but not included in the given map
+	 * are considered to be removals. Setting the given map to be
+	 * <code>null</code> is equivalent to removing all marker attributes.
+	 * 
+	 * @param attributes
+	 * 		A map of attribute names to attribute values (key type :
+	 * 		<code>String</code> value type : <code>String</code>,
+	 * 		<code>Integer</code>, or <code>Boolean</code>) or <code>null</code>.
+	 */
+	public void setAttributes(Map<String, Object> attributes) {
+		_map.clear();
+		_map.putAll(attributes);
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ContentTypeWrapper.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ContentTypeWrapper.java
new file mode 100644
index 0000000..2436c84
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ContentTypeWrapper.java
@@ -0,0 +1,43 @@
+package org.eclipse.wst.validation.internal;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.content.IContentDescription;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Since it can be expense to determine a content type, we provide a wrapper so that we only
+ * need to get it once, as we validate a resource.
+ * @author karasiuk
+ *
+ */
+public class ContentTypeWrapper {
+	
+	private IContentType _type;
+	private boolean 	_initialized;
+	
+	public IContentType getContentType(IFile file){
+		if (_initialized)return _type;
+		
+		IContentDescription cd = null;
+		try {
+			cd = file.getContentDescription();
+		}
+		catch (CoreException e){
+			try {
+				file.refreshLocal(IResource.DEPTH_ZERO, null);
+				cd = file.getContentDescription();
+			}
+			catch (CoreException e2){
+				if (Tracing.isLogging())ValidationPlugin.getPlugin().handleException(e2);
+			}
+		}
+		if (cd == null)return null;
+		_type = cd.getContentType();
+		_initialized = true;
+		return _type;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DebugConstants.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DebugConstants.java
new file mode 100644
index 0000000..a466241
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DebugConstants.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.wst.validation.internal;
+
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+public interface DebugConstants {
+	
+	/** matches - trace filter matches. */
+	String TraceMatches = ValidationPlugin.PLUGIN_ID+"/matches"; //$NON-NLS-1$
+	
+	/** timings - trace the times of the validators. */
+	String TraceTimes = ValidationPlugin.PLUGIN_ID+"/timings"; //$NON-NLS-1$
+	
+	/** v1 - trace the v1 validators. */
+	String TraceV1 = ValidationPlugin.PLUGIN_ID+"/v1"; //$NON-NLS-1$
+	
+	/** timings/tracefile - file that stores the trace events */
+	String TraceTimesFile = ValidationPlugin.PLUGIN_ID+"/timings/tracefile"; //$NON-NLS-1$
+	
+	/** 
+	 * timings/useDoubles - By default times that are written to the trace file are
+	 * in milliseconds for elapsed time and nanoseconds for cpu time. 
+	 * If you find these times easier to read as seconds as expressed by a double, 
+	 * the following flag can be turned on.
+	 */
+	String TraceTimesUseDoubles = ValidationPlugin.PLUGIN_ID+"/timings/useDoubles"; //$NON-NLS-1$
+	
+	/** 
+	 * extraValDetail - If extra detail is needed for a particular validator it's id can be specified here. 
+	 * For example, if you wanted more detail on the XML validator you would use org.eclipse.wst.xml.core.xml 
+	 */
+	String ExtraValDetail = ValidationPlugin.PLUGIN_ID+"/extraValDetail"; //$NON-NLS-1$
+	
+	/** 
+	 * filter/allExcept - If supplied, it is as if this is the only validator that gets defined via
+	 * the extension point. All the other validators are ignored.
+	 */
+	String FilterAllExcept = ValidationPlugin.PLUGIN_ID+"/filter/allExcept"; //$NON-NLS-1$
+	
+	/**
+	 * trace/level - The tracing level. If not supplied a default of zero is used. The higher the number the
+	 * more verbose the tracing.
+	 */
+	String TraceLevel = ValidationPlugin.PLUGIN_ID+"/trace/level"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DependencyIndex.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DependencyIndex.java
new file mode 100644
index 0000000..388738c
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DependencyIndex.java
@@ -0,0 +1,370 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ISaveContext;
+import org.eclipse.core.resources.ISaveParticipant;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.DependentResource;
+import org.eclipse.wst.validation.IDependencyIndex;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * A simple implementation of the IDependencyIndex. This will probably be
+ * replaced with a higher performance, more robust index, at some point in the
+ * future.
+ * <p>
+ * The format of the index is:
+ * 
+ * <pre>
+ * Version number
+ * Number of depends on entries
+ *   depends on file name
+ *   number of dependent entries
+ *     dependent file name
+ *     number of validators
+ *       validator id
+ * </pre>
+ * 
+ * @author karasiuk
+ */
+public class DependencyIndex implements IDependencyIndex, ISaveParticipant {
+	
+	/**
+	 * An index so that we can determine which things depend on this resource.
+	 */
+	private Map<IResource,Set<Depends>>		_dependsOn;
+	
+	/**
+	 * An index so that we can determine who the resource depends on.
+	 */
+	private Map<IResource,Set<Depends>>		_dependents;
+	private boolean _dirty;
+	
+	private static IResource[] EmptyResources = new IResource[0];
+	
+	/** Version of the persistent index. */
+	private static final int CurrentVersion = 1;
+
+	public synchronized void add(String id, IResource dependent, IResource dependsOn) {
+		init();
+		if (dependsOn == null || dependent == null)return;
+		Depends d = getOrCreateDepends(dependent, dependsOn);
+		if (d.getValidators().add(id))_dirty = true;
+	}
+	
+	private Depends getOrCreateDepends(IResource dependent, IResource dependsOn) {
+		Set<Depends> set = getSet(_dependents, dependent);
+		for (Depends d : set){
+			if (d.getDependsOn() != null && d.getDependsOn().equals(dependsOn)) return d;
+		}
+		Depends d = new Depends(dependent, dependsOn);
+		_dirty = true;
+		set.add(d);
+		
+		getSet(_dependsOn, dependsOn).add(d);
+		return d;
+	}
+
+	/**
+	 * Answer the set for the resource, creating it if you need to.
+	 */
+	private Set<Depends> getSet(Map<IResource, Set<Depends>> map, IResource resource) {
+		Set<Depends> set = map.get(resource);
+		if (set == null){
+			set = new HashSet<Depends>(5);
+			map.put(resource, set);
+		}
+		return set;
+	}
+
+	/**
+	 * Restore the dependency index. See the class comment for the structure.
+	 */	
+	private void init() {
+		if (_dependsOn != null)return;
+		
+		boolean error = false;
+		File f = getIndexLocation();
+		if (!f.exists()){
+			_dependsOn = new HashMap<IResource,Set<Depends>>(100);
+			_dependents = new HashMap<IResource,Set<Depends>>(100);
+		}
+		else {
+			String errorMessage = "The following dependency could not be restored " + 
+				"because the following resource {0} could no longer be found."; 
+			DataInputStream in = null;
+			try {
+				IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+				in = new DataInputStream(new FileInputStream(f));
+				
+				int version = in.readInt();
+				if (version != CurrentVersion){
+					error = true;
+					String msg = NLS.bind(ValMessages.ErrDependencyVersion, CurrentVersion);
+					throw new IllegalStateException(msg);
+				}
+				int numDependsOn = in.readInt();
+				_dependsOn = new HashMap<IResource,Set<Depends>>(numDependsOn+100);
+				_dependents = new HashMap<IResource,Set<Depends>>(numDependsOn+100);
+				for (int i=0; i<numDependsOn; i++){
+					String v = in.readUTF();
+					IResource dependsOn = root.findMember(v);
+					if (dependsOn == null){
+						Tracing.log(NLS.bind(errorMessage, v));
+					}
+					int numDependents = in.readInt();
+					for (int j=0; j<numDependents; j++){
+						v = in.readUTF();
+						IResource dependent = root.findMember(v);
+						if (dependent == null){
+							Tracing.log(NLS.bind(errorMessage, v));
+						}
+						int numVal = in.readInt();
+						for (int k=0; k<numVal; k++){
+							String id = in.readUTF();
+							if (dependent != null && dependsOn != null)add(id, dependent, dependsOn);
+						}
+					}					
+				}				
+			}
+			catch (IOException e){
+				error = true;
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+			finally {
+				Misc.close(in);
+				if (error){
+					_dependsOn = new HashMap<IResource,Set<Depends>>(100);
+					_dependents = new HashMap<IResource,Set<Depends>>(100);
+					f.delete();
+				}
+			}			
+		}
+	}
+
+	public synchronized void clear(IProject project) {
+		init();
+		for (Map.Entry<IResource,Set<Depends>> me : _dependents.entrySet()){
+			if (me.getKey().getProject() == project){
+				for (Depends d : me.getValue()){
+					if (d.delete())_dirty = true;
+				}
+			}
+		}
+	}
+
+	public synchronized IResource[] get(String validatorId, IResource dependsOn) {
+		init();
+		List<IResource> list = new LinkedList<IResource>();
+		Set<Depends> set = getSet(_dependsOn, dependsOn);
+		for (Depends d : set){
+			for (String id : d.getValidators()){
+				if (validatorId.equals(id))list.add(d.getDependent());
+			}
+		}
+		
+		if (list.size() == 0)return EmptyResources;
+		IResource[] resources = new IResource[list.size()];
+		list.toArray(resources);
+		return resources;
+	}
+
+	
+	public synchronized List<DependentResource> get(IResource dependsOn) {
+		init();
+		List<DependentResource> list = new LinkedList<DependentResource>();
+		Set<Depends> set = getSet(_dependsOn, dependsOn);
+		ValManager vm = ValManager.getDefault();
+		for (Depends d : set){
+			for (String id : d.getValidators()){
+				Validator v = vm.getValidator(id, d.getDependent().getProject());
+				if (v != null)list.add(new DependentResource(d.getDependent(), v));
+			}
+		}
+		return list;
+	}
+
+
+	public synchronized void set(String id, IResource dependent, IResource[] dependsOn) {
+		init();
+		Set<Depends> set = getSet(_dependents, dependent);
+		for (Depends d : set){
+			if (d.delete(id))_dirty = true;
+		}
+		if (dependsOn != null){
+			for (IResource d : dependsOn)add(id, dependent, d);
+		}
+	}
+		
+	public boolean isDependedOn(IResource resource) {
+		init();
+		Set<Depends> set = _dependsOn.get(resource);
+		if (set == null || set.size() == 0)return false;
+		return true;
+	}
+
+	public void doneSaving(ISaveContext context) {	
+	}
+	
+	public void prepareToSave(ISaveContext context) throws CoreException {	
+	}
+	
+	public void rollback(ISaveContext context) {
+	}
+	
+	/**
+	 * Persist the dependency index. See the class comment for the structure.
+	 */
+	public synchronized void saving(ISaveContext context) throws CoreException {
+		if (!_dirty)return;
+		_dirty = false;
+		
+		DataOutputStream out = null;
+		try {
+			File f = getIndexLocation();
+			out = new DataOutputStream(new FileOutputStream(f));
+			out.writeInt(CurrentVersion);
+			Map<String, Set<DependsResolved>> map = compress(_dependsOn);
+			out.writeInt(map.size());
+			for (Map.Entry<String, Set<DependsResolved>> me : map.entrySet()){
+				out.writeUTF(me.getKey());
+				Set<DependsResolved> set = me.getValue();
+				out.writeInt(set.size());
+				for (DependsResolved d : set){
+					out.writeUTF(d.resource);
+					out.writeInt(d.validators.size());
+					for (String id : d.validators){
+						out.writeUTF(id);
+					}
+				}
+			}
+		}
+		catch (IOException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		finally {
+			Misc.close(out);
+		}
+	}
+
+	private Map<String, Set<DependsResolved>> compress(Map<IResource, Set<Depends>> dependsOn) {
+		Map<String, Set<DependsResolved>> map = new HashMap<String, Set<DependsResolved>>(dependsOn.size());
+		for (Map.Entry<IResource, Set<Depends>> me : dependsOn.entrySet()){
+			Set<DependsResolved> set = new HashSet<DependsResolved>(me.getValue().size());
+			for (Depends d : me.getValue()){
+				IPath path = d.getDependent().getFullPath();
+				if (path != null){
+					DependsResolved dr = new DependsResolved();
+					dr.resource = path.toPortableString();
+					if (d.getValidators().size() > 0){
+						dr.validators = d.getValidators();
+						set.add(dr);
+					}
+				}				
+			}
+			if (set.size() > 0){
+				IResource res = me.getKey();
+				if (res != null){
+					IPath path = res.getFullPath();
+					if (path != null)map.put(path.toPortableString(), set);
+				}
+			}
+		}
+		return map;
+	}
+
+	private File getIndexLocation() {
+		IPath path = ValidationPlugin.getPlugin().getStateLocation().append("dep.index"); //$NON-NLS-1$
+		return path.toFile();
+	}
+
+	/**
+	 * Keep track of a relationship between a dependent and the thing that it
+	 * depends on.
+	 * 
+	 * @author karasiuk
+	 * 
+	 */
+	private static class Depends {
+
+		/** The resource that is being depended on, for example a.xsd */
+		private IResource _dependsOn;
+
+		/** The resource that is dependent, for example a.xml */
+		private IResource _dependent;
+
+		/** The id's of the validators that have asserted the dependency. */
+		private Set<String> _validators;
+
+		public Depends(IResource dependent, IResource dependsOn) {
+			_dependent = dependent;
+			_dependsOn = dependsOn;
+			_validators = new HashSet<String>(5);
+		}
+
+		/**
+		 * Answer true if the id was deleted.
+		 */
+		public boolean delete(String id) {
+			return _validators.remove(id);
+		}
+
+		/**
+		 * Delete all the dependency assertions for all of your validators.
+		 * @return false if there was nothing to delete
+		 */
+		public boolean delete() {
+			boolean deleted = _validators.size() > 0;
+			if (deleted)_validators.clear();
+			return deleted;
+		}
+
+		public IResource getDependsOn() {
+			return _dependsOn;
+		}
+
+		public IResource getDependent() {
+			return _dependent;
+		}
+
+		public Set<String> getValidators() {
+			return _validators;
+		}
+}
+
+	private static class DependsResolved {
+		String 		resource;
+		Set<String> validators;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Deserializer.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Deserializer.java
new file mode 100644
index 0000000..b1af963
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Deserializer.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.internal;
+
+/**
+ * A simple deserializer that knows how to retrieve booleans, integers and strings, from a string
+ * that was encoded by the Serializer class.
+ * 
+ *  @see Serializer
+ * @author karasiuk
+ *
+ */
+public class Deserializer {
+	private char[] 	_buffer;
+	private int		_posn;
+	
+	public Deserializer(String value){
+		_buffer = value.toCharArray();
+	}
+	
+	public boolean getBoolean(){
+		boolean result = false;
+		if (_buffer[_posn] == 'T')result = true;
+		else if (_buffer[_posn] == 'F')result = false;
+		else throw new IllegalStateException(ValMessages.DecodeError1);
+		
+		_posn++;
+		return result;
+	}
+	
+	public String getString(){
+		int len = getInt();
+		String result = new String(_buffer, _posn, len);
+		_posn += len;
+		return result;		
+	}
+	
+	public int getInt(){
+		Integer len = new Integer(String.valueOf(_buffer[_posn]));
+		_posn++;
+		
+		String s = String.valueOf(_buffer, _posn, len+1);
+		_posn += len+1;
+		return Integer.parseInt(s);
+	}
+
+	/**
+	 * Are there any more items?
+	 * @return
+	 */
+	public boolean hasNext() {
+		if (_posn >= _buffer.length)return false;
+		return true;
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledResourceManager.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledResourceManager.java
new file mode 100644
index 0000000..120180f
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledResourceManager.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.internal;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * Validators can assert that certain resources (usually folders) are not validated. This class keeps track of those
+ * assertions.
+ * @author karasiuk
+ *
+ */
+public class DisabledResourceManager implements IProjectChangeListener {
+	
+	public static DisabledResourceManager getDefault(){
+		return Singleton.disabledResourceManager;
+	}
+	
+	private Set<IResource> _disabled = new HashSet<IResource>(100);
+	private Set<IProject>	_loadedProjects = new HashSet<IProject>(40);
+	
+	private DisabledResourceManager(){
+		EventManager.getManager().addProjectChangeListener(this);
+	}
+	
+	public void disableValidation(IResource resource){
+		// We check for two reasons, 1) we may save some work, 2) we force the project to be loaded 
+		if (isDisabled(resource))return;
+		
+		Set<IResource> copy = new HashSet<IResource>(_disabled.size()+2);
+		copy.addAll(_disabled);
+		copy.add(resource);
+		save(copy, resource.getProject());
+		_disabled = copy;
+	}
+	
+	public void enableValidation(IResource resource){
+		// We check for two reasons, 1) we may save some work, 2) we force the project to be loaded 
+		if (!isDisabled(resource))return;
+		
+		Set<IResource> copy = new HashSet<IResource>(_disabled.size()+2);
+		copy.addAll(_disabled);
+		copy.remove(resource);
+		save(copy, resource.getProject());
+		_disabled = copy;		
+	}
+		
+	private void save(Set<IResource> disabled, IProject project) {
+		Serializer ser = new Serializer(200);
+		for (IResource resource : disabled){
+			if (project == resource.getProject()){
+				ser.put(resource.getProjectRelativePath().toPortableString());
+			}
+		}
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(project, null);
+		prefs.put(PrefConstants.disabled, ser.toString());
+		try {
+			prefs.flush();
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+	
+	private void load(IProject project){
+		Set<IResource> copy = new HashSet<IResource>(_disabled.size()+10);
+		copy.addAll(_disabled);
+		PreferencesWrapper prefs = PreferencesWrapper.getPreferences(project, null);
+		String disabled = prefs.get(PrefConstants.disabled, ""); //$NON-NLS-1$
+		if (disabled.length() > 0){
+			Deserializer des = new Deserializer(disabled);
+			while(des.hasNext()){
+				String pathString = des.getString();
+				IPath path = Path.fromPortableString(pathString);
+				IResource resource = project.findMember(path);
+				copy.add(resource);
+			}
+		}
+		_disabled = copy;
+	}
+
+	public void dispose(){
+		EventManager.getManager().removeProjectChangeListener(this);
+	}
+	
+	/**
+	 * Answer true if this resource should not be validated.
+	 * 
+	 * @param resource the resource that is being tested.
+	 * @return true if the resource should not be validated.
+	 */
+	public boolean isDisabled(IResource resource){
+		IProject project = resource.getProject();
+		if (_loadedProjects.contains(project))return _disabled.contains(resource);
+		return isDisabled(resource, project); 		
+	}
+	
+	private synchronized boolean isDisabled(IResource resource, IProject project){
+		if (!_loadedProjects.contains(project)){
+			load(project);
+			_loadedProjects.add(project);
+		}
+		return _disabled.contains(resource);
+	}
+	
+	public void addDisabled(IResource resource){
+		_disabled.add(resource);
+	}
+
+	public void projectChanged(IProject project, int type) {
+		switch (type) {
+		case IProjectChangeListener.ProjectDeleted:
+		case IProjectChangeListener.ProjectClosed:
+			projectRemoved(project);
+			break;
+			
+		}
+		
+	}
+	
+	private synchronized void projectRemoved(IProject project) {
+		_loadedProjects.remove(project);
+		Set<IResource> copy = new HashSet<IResource>(100);
+		for (IResource resource : _disabled){
+			if (resource.getProject() != project)copy.add(resource);
+		}
+		_disabled = copy;
+	}
+	
+	/**
+	 * Store the singleton for the DisabledResourceManager. This approach is used to avoid having to synchronize the
+	 * DisabledResourceManager.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private static class Singleton {
+		static DisabledResourceManager disabledResourceManager = new DisabledResourceManager();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledValidatorManager.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledValidatorManager.java
new file mode 100644
index 0000000..7505e88
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/DisabledValidatorManager.java
@@ -0,0 +1,125 @@
+package org.eclipse.wst.validation.internal;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.model.IValidatorVisitor;
+
+/**
+ * Keep track of the disabled validators.
+ * @author karasiuk
+ *
+ */
+public final class DisabledValidatorManager implements IValChangedListener {
+	
+	private static final AtomicInteger _counter = new AtomicInteger();
+	private static final int CacheSize = 5;
+	
+	private final Map<IResource, LRUSet> _map = Collections.synchronizedMap(new HashMap<IResource, LRUSet>(5));
+	
+	public static DisabledValidatorManager getDefault(){
+		return Singleton.disabledValidatorManager;
+	}
+	
+	private DisabledValidatorManager(){
+		ValPrefManagerProject.addListener(this);
+	}
+	
+	/*
+	 * Although this is currently not called, it should be if this ever stops being a singleton.
+	 */
+	public void dispose(){
+		ValPrefManagerProject.removeListener(this);
+	}
+
+	public Set<Validator> getDisabledValidatorsFor(IResource resource) {
+		LRUSet set = _map.get(resource);
+		if (set != null){
+			set.counter = _counter.getAndIncrement();
+			return set.validators;
+		}
+		
+		DisabledValidationFinder dvf = new DisabledValidationFinder();
+		Set<Validator> vset = dvf.findDisabledValidatorsFor(resource);
+		insert(resource, vset);
+		return vset;		
+	}
+	
+	private synchronized void insert(IResource resource, Set<Validator> vset) {
+		if (_map.size() >= CacheSize ){
+			IResource oldest = null;
+			int current = Integer.MAX_VALUE;
+			for (Map.Entry<IResource, LRUSet> me : _map.entrySet()){
+				if (me.getValue().counter < current){
+					oldest = me.getKey();
+					current = me.getValue().counter;
+				}
+			}
+			_map.remove(oldest);
+		}
+		LRUSet set = new LRUSet();
+		set.counter = _counter.getAndIncrement();
+		set.validators = vset;
+		_map.put(resource, set);		
+	}
+
+
+	private final static class LRUSet {
+		int counter;
+		Set<Validator> validators;
+	}
+	
+	private final static class DisabledValidationFinder implements IValidatorVisitor {
+		
+		private Map<String, Validator> _validators;
+
+		public void visit(Validator validator, IProject project, ValType valType, ValOperation operation,
+				IProgressMonitor monitor) {
+			
+			_validators.remove(validator.getId());
+			
+		}
+		
+		public Set<Validator> findDisabledValidatorsFor(IResource resource) {
+			ValManager vm = ValManager.getDefault();
+			Validator[] vals = vm.getValidatorsCopy();
+			_validators = new HashMap<String, Validator>(100);
+			for (Validator v : vals)_validators.put(v.getId(), v);
+						
+			IProject project = resource.getProject();
+			vm.accept(this, project, resource, ValType.Build, new ValOperation(), new NullProgressMonitor());
+			Set<Validator> set = new HashSet<Validator>(_validators.size());
+			set.addAll(_validators.values());
+			return set;
+		}
+		
+		
+	}
+
+	public void validatorsForProjectChanged(IProject project, boolean configSettingChanged) {
+		_map.clear();
+	}
+	
+	
+	/**
+	 * Store the singleton for the DisabledValidatorManager. This approach is used to avoid having to synchronize the
+	 * DisabledValidatorManager.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private final static class Singleton {
+		final static DisabledValidatorManager disabledValidatorManager = new DisabledValidatorManager();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java
new file mode 100644
index 0000000..e702471
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 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.wst.validation.internal;
+
+/**
+ * Constants used in the extension points.
+ * @author karasiuk
+ *
+ */
+public interface ExtensionConstants {
+	
+	/** validatorV2 - extension point for registering validators that use version 2 of the validation framework. */
+	String validator = "validatorV2"; //$NON-NLS-1$
+	
+	/** exclude - extension point for adding extra exclusion filters to a validator. */ 
+	String excludeExtension = "exclude"; //$NON-NLS-1$
+	
+	/** build - is the validator enabled by default for build based validations? true or false */
+	String build = "build"; //$NON-NLS-1$
+	
+	/** class - name of the attribute that holds the validator class. */
+	String AttribClass = "class"; //$NON-NLS-1$
+	
+	/** manual - is the validator enabled by default for manual based validations? true or false */
+	String manual = "manual"; //$NON-NLS-1$
+	
+	/** 
+	 * markerId - the marker id that the framework should use when creating customized markers for this validator.
+	 * This is an optional attribute. If it is not supplied than the standard validation marker type will be used.
+	 */
+	String markerId = "markerId"; //$NON-NLS-1$
+	
+	/** 
+	 * sourceid - If this validator also serves as an as-you-type validator (also know as an ISourceValidator) 
+	 * then it's source id is specified here, so that the two validators can be associated with one 
+	 * another. By source id, we mean the id that is used in the org.eclipse.wst.sse.ui.sourceValidation 
+	 * extension point.
+	 */
+	String sourceId = "sourceid"; //$NON-NLS-1$
+	
+	/** 
+	 * version - the version of this definition. The attribute is a simple integer, and if not specified it
+	 * is assumed to be 1. This allows the filter settings to be changed in the future.
+	 */
+	String version = "version";  //$NON-NLS-1$
+	
+	/** 
+	 * include - a group of inclusion rules. At least one rule in this group needs to match in order for the resource
+	 * to to considered to be validated.
+	 */
+	String include = "include"; //$NON-NLS-1$
+	
+	/** exclude - a group of exclusion rules. If any of these rules match the resource is not validated. */
+	String exclude = "exclude"; //$NON-NLS-1$
+	
+	/** rules - a group of inclusion or exclusion rules. */
+	String rules = "rules"; //$NON-NLS-1$
+	
+	/** rules - extension point to declare a validator group */
+	String group = "validatorGroup"; //$NON-NLS-1$
+	
+	interface Group {
+		/*
+		 * The group sub-element for either the validatorGroup or validator
+		 * extension points.
+		 */
+		String elementGroup = "group"; //$NON-NLS-1$
+		// a validator group identifier
+		String attId = "id"; //$NON-NLS-1$
+		// the listener sub-element
+		String elementListener = "listener"; //$NON-NLS-1$
+		// the group listener class name
+		String attClass = "class"; //$NON-NLS-1$
+	}
+	
+	/** Different types of rules for filtering validation. */
+	interface Rule {
+		
+		/** projectNature - filter by project nature. */
+		String projectNature = "projectNature"; //$NON-NLS-1$
+		
+		/** fileext - filter by file extension. */
+		String fileext = "fileext"; //$NON-NLS-1$
+		
+		/** file - a file name, it can include path information as well. */
+		String file = "file"; //$NON-NLS-1$
+		
+		/** facet - filter by facet id. */
+		String facet = "facet"; //$NON-NLS-1$
+		
+		/** contentType - filter by content type. */
+		String contentType = "contentType"; //$NON-NLS-1$
+		
+		/** pattern - filter paths by regular expression. */
+		String pattern = "pattern"; //$NON-NLS-1$
+	}
+	
+	/** Rule attributes */
+	interface RuleAttrib {
+		
+		/** caseSensitive - true or false. */
+		String caseSensitive = "caseSensitive"; //$NON-NLS-1$
+		
+		/** 
+		 * exactMatch - true or false, default is true. It is used to decide whether content types need to match
+		 * exactly, or whether sub types should also be considered.
+		 */
+		String exactMatch = "exactMatch"; //$NON-NLS-1$
+		
+		/** ext - a file extension, for example "html". */
+		String ext = "ext"; //$NON-NLS-1$
+		
+		/** id - an identifier. */
+		String id = "id"; //$NON-NLS-1$
+		
+		/** name - a file name. */
+		String name = "name"; //$NON-NLS-1$
+		
+		/** regex - a Java regular expression. */
+		String regex = "regex"; //$NON-NLS-1$
+		
+		/** 
+		 * type - the type of file to be matched:
+		 * <ul>
+		 * <li>folder - project relative folder name
+		 * <li>file - simple file name
+		 * <li>full - fully qualified, project relative file name
+		 * </ul>
+		 */
+		String fileType = "type"; //$NON-NLS-1$
+		
+		/** version - facet version expression. See the facet framework for the exact syntax of this expression. */
+		String version = "version"; //$NON-NLS-1$
+	}
+	
+	interface FileType {
+		/** folder - project relative folder name */
+		String folder = "folder"; //$NON-NLS-1$
+		
+		/** file - simple file name */
+		String file = "file"; //$NON-NLS-1$
+		
+		/** full - fully qualified, project relative file name */
+		String full = "full"; //$NON-NLS-1$
+	}
+	
+	interface MessageCategory {
+		/** messageCategory - name of the message category element. */
+		String name = "messageCategory"; //$NON-NLS-1$
+		
+		/** id - simple id of the message. */
+		String id = "id"; //$NON-NLS-1$
+		
+		/** label = human readable label of the message category. */
+		String label = "label"; //$NON-NLS-1$
+		
+		/** severity - message severity, it must be one of error, warning or ignore. */
+		String severity = "severity"; //$NON-NLS-1$
+		
+		String sevError = "error"; //$NON-NLS-1$
+		String sevWarning = "warning"; //$NON-NLS-1$
+		String sevIgnore = "ignore";  //$NON-NLS-1$
+	}
+	
+	interface Exclude {
+		/** id - fully qualified id of the validator that is being extended. */
+		String id = "id"; //$NON-NLS-1$
+	}
+	
+	/** true */
+	String True = "true"; //$NON-NLS-1$
+	
+	/** false */
+	String False = "false"; //$NON-NLS-1$
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionValidators.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionValidators.java
new file mode 100644
index 0000000..090f4af
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionValidators.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.internal;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * The validators that have been defined by the validator extension points.
+ * @author karasiuk
+ *
+ */
+public final class ExtensionValidators {
+	private static ExtensionValidators _me;
+	
+	/** All the registered validators. The key is the validator id and the value is the validator. */
+	private final Map<String, Validator> _map;
+	
+	public synchronized static ExtensionValidators instance(){
+		if (_me == null){
+			_me = new ExtensionValidators();
+		}
+		return _me;
+	}
+
+	private ExtensionValidators(){
+		_map = new HashMap<String, Validator>(100);
+		for (Validator v : ValidatorExtensionReader.getDefault().process()){
+			_map.put(v.getId(), v);
+		}		
+	}
+	
+	/**
+	 * Answer all the v2 validators that have been defined by the extension point. This is the real
+	 * map (not a copy).
+	 * 
+	 * @return The key is the validator id and the value is the validator.
+	 */
+	public Map<String, Validator> getMapV2() {
+		return _map;
+	}
+
+	/**
+	 * Answer all the v2 validators that have been defined by the extension point. This is a copy of
+	 * the map, but not a copy of the validators.
+	 * 
+	 * @return The key is the validator id and the value is the validator.
+	 */
+	public Map<String, Validator> getMapV2Copy() {
+		HashMap<String, Validator> map = new HashMap<String, Validator>(_map.size());
+		map.putAll(_map);
+		return map;
+	}
+	
+	
+	/**
+	 * Answer all the validators that have been defined by extension points. This includes all
+	 * the v2 validators, and all of the v1 validators that have been defined just on this project.
+	 * 
+	 * @return The key is the validator id and the value is the validator.
+	 */
+	public Map<String, Validator> getMap(IProject project) {
+		//TODO I may want to consider caching this, but then again if the v1 validators are going away
+		// it may not be worth it.
+		Map<String, Validator> map = new HashMap<String, Validator>();
+		map.putAll(_map);
+		
+		for (Validator v : getV1Validators(project))map.put(v.getId(), v);
+		
+		return map;
+	}
+	
+	/**
+	 * Answer the v1 validators that have been defined just on this project.
+	 * @param project
+	 * @return
+	 */
+	List<Validator> getV1Validators(IProject project){
+		List<Validator> list = new LinkedList<Validator>();
+		try {
+			ProjectConfiguration pc = new ProjectConfiguration(project);
+			pc.resetToDefault();
+			for (ValidatorMetaData vmd : pc.getValidators()){
+				Validator v = Validator.create(vmd, pc, project);
+				list.add(v);
+			}
+		}
+		catch (InvocationTargetException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+
+		return list;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/FullBuildJob.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/FullBuildJob.java
new file mode 100644
index 0000000..332a2c7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/FullBuildJob.java
@@ -0,0 +1,29 @@
+package org.eclipse.wst.validation.internal;
+
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+public class FullBuildJob extends WorkspaceJob {
+	
+	public FullBuildJob(){
+		super(ValMessages.JobName);
+	}
+
+	@Override
+	public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+		try {
+			ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, monitor);
+		}
+		catch (Exception e){
+			return new Status(IStatus.ERROR,ValidationPlugin.PLUGIN_ID, e.toString(), e);
+		}
+		return Status.OK_STATUS;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IProjectChangeListener.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IProjectChangeListener.java
new file mode 100644
index 0000000..6788534
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IProjectChangeListener.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.internal;
+
+import org.eclipse.core.resources.IProject;
+
+/**
+ * A call back for listeners that are interested when a project changes.
+ * @author karasiuk
+ *
+ */
+public interface IProjectChangeListener {
+	
+	int ProjectOpened = 1;
+	int ProjectClosed = 2;
+	int ProjectDeleted = 4;
+	
+	/** 8 - Something in the project description has changed. For example, a Nature was added. */
+	int ProjectChanged = 8;
+	
+	/** 16 - The project has been added. */
+	int ProjectAdded = 16;
+	
+	/**
+	 * The project has changed in some way.
+	 * 
+	 * @param project The project that has changed.
+	 * @param type The type of change. This will be one of the Project constants;
+	 */
+	void projectChanged(IProject project, int type);
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IValChangedListener.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IValChangedListener.java
new file mode 100644
index 0000000..a2d26d8
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/IValChangedListener.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+/**
+ * A class that wants to be notified when the validator preferences change.
+ * @author karasiuk
+ *
+ */
+public interface IValChangedListener {
+	
+	/**
+	 * The validators for the project have changed.
+	 *  
+	 * @param project the project can be null, which means that the global validation preferences have
+	 * changed.
+	 * 
+	 * @param configSettingChanged If true a setting that could effect what gets validated has changed.
+	 * If false, then only other types of settings (like whether to show a results dialog or not) have
+	 * changed. 
+	 */
+	public void validatorsForProjectChanged(org.eclipse.core.resources.IProject project, boolean configSettingChanged);
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/MarkerManager.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/MarkerManager.java
new file mode 100644
index 0000000..8776525
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/MarkerManager.java
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.ValidatorMessage;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+
+/**
+ * A central place to manage all of the V2 validation markers.
+ * @author karasiuk
+ *
+ */
+public class MarkerManager {
+	
+	private Set<String> _markers = new HashSet<String>(50);
+	
+	public static MarkerManager getDefault(){
+		return Singleton.markerManager;
+	}
+	
+	private MarkerManager(){
+		_markers.add(ValConstants.ProblemMarker);
+		_markers.add(ConfigurationConstants.VALIDATION_MARKER);
+	}
+	
+	/**
+	 * Clear any validation markers that may have been set by this validator.
+	 * 
+	 * @param resource
+	 *            The resource that may have it's markers cleared. It can be
+	 *            null, in which case the operation is a no-op.
+	 * @param validator
+	 *            The validator that created the marker.
+	 */
+	public void clearMarker(IResource resource, Validator validator) throws CoreException {
+		if (resource == null)return;
+		hook(resource);
+		
+		String id = validator.getMarkerId();
+		if (id != null){
+			try {
+				resource.deleteMarkers(id, true, IResource.DEPTH_ZERO);
+			}
+			catch (CoreException e){
+				// Nothing that we can do. This is not worth logging.
+			}
+			return;
+		}
+				
+		IMarker[] markers = resource.findMarkers(ValConstants.ProblemMarker, true, IResource.DEPTH_ZERO);
+		String valId = validator.getId();
+		for (IMarker marker : markers){
+			id = marker.getAttribute(ValidatorMessage.ValidationId, null);
+			if (valId.equals(id))marker.delete();
+		}
+	}
+	
+	@SuppressWarnings("unchecked")
+	public void createMarker(ValidatorMessage m, String id){
+		try {
+			IResource resource = m.getResource();
+			hook(resource);
+			IMarker marker = resource.createMarker(m.getType());
+			Map map = m.getAttributes();
+			if (map.get(ValidatorMessage.ValidationId) == null)
+				map.put(ValidatorMessage.ValidationId, id);
+			marker.setAttributes(map);
+		}
+		catch (CoreException e){
+			if (!m.getResource().exists())throw new ResourceUnavailableError(m.getResource());
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		
+	}
+	
+	/**
+	 * Delete all the markers on this resource that were created before the
+	 * operation start time.
+	 * 
+	 * @param resource
+	 *            The resource that is having it's markers deleted.
+	 * @param operationStartTime
+	 *            The time as returned by System.currentTimeMillis().
+	 * @param depth
+	 *            The depth of the markers to clear. It is one of the
+	 *            IResource.DEPTH_XXX constants.
+	 */
+	public void deleteMarkers(IResource resource, long operationStartTime, int depth){
+		try {
+			hook(resource); 
+			IMarker[] markers = resource.findMarkers(null, true, depth);
+			String markerType;
+			for (IMarker marker : markers){
+				try {
+					markerType = marker.getType();
+				}
+				catch (CoreException e)
+				{
+					//ignore the marker
+					return;
+				}
+				if (_markers.contains(markerType)){
+					long createTime = marker.getCreationTime();
+					if (createTime < operationStartTime){
+						try {
+							marker.delete();
+						}
+						catch (CoreException e){
+							// eat it - there is nothing we can do about this.
+						}
+					}
+				}
+			}
+		}
+		catch (CoreException e){
+			IProject project = resource.getProject();
+			if (!project.exists() || !project.isOpen())throw new ProjectUnavailableError(project);
+			if (!resource.exists())throw new ResourceUnavailableError(resource);
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+	
+	public void makeMarkers(List<IMessage> list){
+		for (IMessage message : list){
+			IResource res = null;
+			Object target = message.getTargetObject();
+			if (target != null && target instanceof IResource)res = (IResource)target;
+			if (res == null){
+				target = message.getAttribute(IMessage.TargetResource);
+				if (target != null && target instanceof IResource)res = (IResource)target;
+			}
+			if (res != null){
+				try {
+					hook(res);
+					String id = message.getMarkerId();
+					if (id == null)id = ConfigurationConstants.VALIDATION_MARKER;
+					IMarker marker = res.createMarker(id);
+					marker.setAttributes(message.getAttributes());
+					marker.setAttribute(IMarker.MESSAGE, message.getText());
+					int markerSeverity = IMarker.SEVERITY_INFO;
+					int sev = message.getSeverity();
+					if ((sev & IMessage.HIGH_SEVERITY) != 0)markerSeverity = IMarker.SEVERITY_ERROR;
+					else if ((sev & IMessage.NORMAL_SEVERITY) != 0)markerSeverity = IMarker.SEVERITY_WARNING;
+					marker.setAttribute(IMarker.SEVERITY, markerSeverity);
+					marker.setAttribute(IMarker.LINE_NUMBER, message.getLineNumber());
+				}
+				catch (CoreException e){
+					ValidationPlugin.getPlugin().handleException(e);
+				}				
+			}
+		}
+	}
+	
+	/**
+	 * A debugging method. A place to put break points, so that you can figure out what sort of marker
+	 * changes are happening.
+	 * 
+	 * @param resource
+	 */
+	public void hook(IResource resource){
+//		String name = "first.test2x";
+//		if (resource.getName().equals(name)){
+//			String markers = Misc.listMarkers(resource);
+//			Tracing.log("MarkerManager has hooked: ", name); //$NON-NLS-1$
+//			RuntimeException rt = new RuntimeException("hooking " + name);
+//			rt.printStackTrace();
+//		}
+	}
+
+	public Set<String> getMarkers() {
+		return _markers;
+	}
+	
+	/**
+	 * Store the singleton for the MarkerManager. This approach is used to avoid having to synchronize the
+	 * MarkerManager.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private static class Singleton {
+		static MarkerManager markerManager = new MarkerManager();
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Misc.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Misc.java
new file mode 100644
index 0000000..ceafc41
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Misc.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.internal;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Some miscellaneous helper methods. 
+ * @author karasiuk
+ *
+ */
+public final class Misc {
+	
+	public static void close(InputStream in){
+		if (in == null)return;
+		try {
+			in.close();
+		}
+		catch (IOException e){
+			// eat it
+		}
+	}
+
+	public static void close(OutputStream out) {
+		if (out == null)return;
+		try {
+			out.close();
+		}
+		catch (IOException e){
+			// eat it
+		}		
+	}
+	
+	public static boolean debugOptionAsBoolean(String option){
+		String opt = Platform.getDebugOption(option);
+		if (opt == null)return false;
+		opt = opt.toLowerCase();
+		if ("true".equals(opt))return true; //$NON-NLS-1$
+		if ("yes".equals(opt))return true; //$NON-NLS-1$
+		return false;
+	}
+	
+	
+	/**
+	 * Answer a units appropriate string for the time.
+	 * @param time time in nano seconds
+	 */
+	public static String getTimeNano(long time){
+		if (time <= 1000)return NLS.bind(ValMessages.TimeNano, time);
+		if (time <= 1000000)return NLS.bind(ValMessages.TimeMicro, time/1000);
+		return getTimeMS(time/1000000);
+	}
+	
+	/**
+	 * Answer the CPU time consumed by this thread in nano seconds.
+	 * @return -1 if the time can not be determined.
+	 */
+	public static long getCPUTime(){
+		long cpuTime = -1;
+		ThreadMXBean tb = ManagementFactory.getThreadMXBean();
+		if (tb.isCurrentThreadCpuTimeSupported()){
+			cpuTime = tb.getCurrentThreadCpuTime();
+		}
+		return cpuTime;
+	}
+	
+	/**
+	 * Answer a units appropriate string for the time.
+	 * @param time time in milliseconds
+	 */
+	public static String getTimeMS(long time) {
+		if (time <= 1000)return ValMessages.TimeUnder;
+		if (time <= 60000)return NLS.bind(ValMessages.TimeSec, time/1000);
+		return NLS.bind(ValMessages.TimeMin, time/60000);
+	}
+
+	/**
+	 * Used in debugging so we can see what types of markers there are.
+	 * @param resource
+	 */
+	public static String listMarkers(IResource resource){
+		StringBuffer b = new StringBuffer(2000);
+		try {
+			IMarker[] markers = resource.findMarkers(null, true, IResource.DEPTH_ZERO);
+			for (IMarker m : markers){
+				Object o = m.getAttribute(IMarker.MESSAGE);
+				if (o != null){
+					b.append(o);
+				}
+				o = m.getAttribute(IMarker.SEVERITY);
+				if (o != null){
+					b.append(", Severity="); //$NON-NLS-1$
+					b.append(o);
+				}
+				b.append("; "); //$NON-NLS-1$
+			}
+		}
+		catch (CoreException e){
+			
+		}
+		return b.toString();
+	}
+	
+	/**
+	 * Answer true if they are the same. If they are both null then they are the same. 
+	 * @param s1 the string to compare. It can be null.
+	 * @param s2 the string to compare. It can be null.
+	 */
+	public static boolean same(String s1, String s2){
+		if (s1 == null && s2 == null)return true;
+		if (s1 == null)return false;
+		return s1.equals(s2);
+	}
+	
+	public static void niy(String msg){
+		if (msg == null)msg = "Sorry, this function is not implemented yet"; //$NON-NLS-1$
+		throw new RuntimeException(msg);
+	}
+	
+	/**
+	 * Answer the type as a human readable string. This is only used for debugging.
+	 * @param type
+	 * @return
+	 */
+	public static String resourceChangeEventType(int type){
+		StringBuffer b = new StringBuffer(200);
+		if ((type & IResourceChangeEvent.POST_BUILD) != 0)b.append("post_build "); //$NON-NLS-1$
+		if ((type & IResourceChangeEvent.POST_CHANGE) != 0)b.append("post_change "); //$NON-NLS-1$
+		if ((type & IResourceChangeEvent.PRE_BUILD) != 0)b.append("pre_build "); //$NON-NLS-1$
+		if ((type & IResourceChangeEvent.PRE_CLOSE) != 0)b.append("pre_close "); //$NON-NLS-1$
+		if ((type & IResourceChangeEvent.PRE_DELETE) != 0)b.append("pre_delete "); //$NON-NLS-1$
+		return b.toString();
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/NullValidator.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/NullValidator.java
new file mode 100644
index 0000000..9f057aa
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/NullValidator.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.internal;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.AbstractValidator;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationState;
+
+/**
+ * A null validator that is used in error cases. It simply no-ops.
+ * @author karasiuk
+ *
+ */
+public class NullValidator extends AbstractValidator {
+
+	@Override
+	public ValidationResult validate(IResource resource, int kind, ValidationState state, IProgressMonitor monitor) {
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PerformanceMonitor.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PerformanceMonitor.java
new file mode 100644
index 0000000..f00e93d
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PerformanceMonitor.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.IPerformanceMonitor;
+import org.eclipse.wst.validation.PerformanceCounters;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+public class PerformanceMonitor implements IPerformanceMonitor {
+	
+	private CollectionLevel _level = CollectionLevel.None;
+	private boolean			_summaryOnly;
+	
+	/**
+	 * Create a performance monitor.
+	 * 
+	 * @param traceTimes
+	 *            Should the monitor be turned on?
+	 * @param file
+	 *            Should the events be logged to a file. If this is null or the
+	 *            empty string the events will be written to stderr. Otherwise
+	 *            the events are appended to a file with this name.
+	 * 
+	 * @param logInSeconds
+	 *            Set this to true if you want the times that are logged in the
+	 *            trace file normalized to seconds. Otherwise the default units are used,
+	 *            milliseconds for elapsed time and nanoseconds for cpu time.
+	 */
+	public static PerformanceMonitor create(boolean traceTimes, String file, boolean logInSeconds){
+		PerformanceMonitor pm = null;
+		if (file == null || file.length() == 0)pm = new PerformanceMonitor();
+		else pm = new ToFile(file, logInSeconds);
+		
+		if (traceTimes)pm.setCollectionLevel(CollectionLevel.Default);
+		
+		return pm;
+	}
+	
+	private PerformanceMonitor(){};
+	
+	public CollectionLevel getCollectionLevel() {
+		return _level;
+	}
+
+	public void setCollectionLevel(CollectionLevel level) {
+		_level = level;
+	}
+
+	public List<PerformanceCounters> getPerformanceCounters(boolean asSummary) {
+		return new LinkedList<PerformanceCounters>();
+	}
+
+
+	public void resetPerformanceCounters() {
+	}
+
+	public boolean isCollecting() {
+		return _level != CollectionLevel.None;
+	}
+	
+	public boolean isSummaryOnly() {
+		return _summaryOnly;
+	}
+	
+	public void add(PerformanceCounters counters){
+		Tracing.write(counters.toString());
+	}
+	
+	public static class Counters{
+		String	name;
+		int 	numberInvocations;
+		
+		/** Elapsed time in milliseconds. */
+		long	elapsedTime;
+		
+		/** CPU time in nanoseconds, or -1 if unknown. */
+		long	cpuTime;		
+	}
+	
+	public static class ToFile extends PerformanceMonitor {
+		
+		private String 		_fileName;
+		private boolean		_logInSeconds;
+		
+		private PrintWriter _pw;
+		private static final String Comma=","; //$NON-NLS-1$
+		private static DateFormat 	_df = new SimpleDateFormat("HH:mm:ss.SSSS"); //$NON-NLS-1$
+		
+		private ToFile(String fileName, boolean logInSeconds){
+			_fileName = fileName;
+			_logInSeconds = logInSeconds;
+		}
+		
+		@Override
+		public synchronized void add(PerformanceCounters pc) {
+			try {
+				PrintWriter pw = getWriter();
+				pw.print(_df.format(pc.getWhen()) + Comma + 
+					pc.getValidatorId() + Comma + pc.getNumberInvocations() + Comma);
+				if (_logInSeconds){
+					double sec = ((double)pc.getElapsedTime()) / 1000.0;
+					pw.print(sec);
+					pw.print(Comma);
+					sec = ((double)pc.getCpuTime()) / 1000000000.0;
+					pw.print(sec);
+				}
+				else {
+					pw.print(pc.getElapsedTime()+Comma+pc.getCpuTime());
+				}
+				pw.println(Comma + pc.getResourceName());
+				pw.flush();
+			}
+			catch (IOException e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+		}
+		
+		private PrintWriter getWriter() throws IOException {
+			if (_pw == null){
+				_pw = new PrintWriter(new FileOutputStream(_fileName, true));
+				DateFormat df = DateFormat.getDateTimeInstance();
+				_pw.println("# " + NLS.bind(ValMessages.LogSession,  //$NON-NLS-1$
+					df.format(new Date(System.currentTimeMillis()))));
+				if (_logInSeconds)
+					_pw.println("# when, id, invocation count, elapsed time (seconds), cpu time (seconds), resource"); //$NON-NLS-1$
+				else 
+					_pw.println("# when, id, invocation count, elapsed time (ms), cpu time (ns), resource"); //$NON-NLS-1$
+			}
+			return _pw;
+			
+		}
+	}
+	
+	public static class Collecting extends PerformanceMonitor {
+		private List<PerformanceCounters>	_counters = new LinkedList<PerformanceCounters>();
+		
+		public void add(PerformanceCounters counters){
+			_counters.add(counters);
+		}
+		
+		public List<PerformanceCounters> getPerformanceCounters(boolean asSummary) {
+			if (asSummary){
+				Map<String, Counters> map = new HashMap<String, Counters>(40);
+				for (PerformanceCounters pc : _counters){
+					Counters c = map.get(pc.getValidatorId());
+					if (c == null){
+						c = new Counters();
+						c.name = pc.getValidatorName();
+						map.put(pc.getValidatorId(), c);
+					}
+					c.numberInvocations += pc.getNumberInvocations();
+					c.elapsedTime += pc.getElapsedTime();
+					if (pc.getCpuTime() != -1)c.cpuTime += pc.getCpuTime();
+					else c.cpuTime = -1;
+				}
+				List<PerformanceCounters> list = new LinkedList<PerformanceCounters>();
+				for (Map.Entry<String, Counters> me : map.entrySet()){
+					Counters c = me.getValue();
+					list.add(new PerformanceCounters(me.getKey(), c.name, null, c.numberInvocations, c.elapsedTime, c.cpuTime));
+				}
+				return list;
+			}
+			return _counters;
+		}
+		
+		public void resetPerformanceCounters() {
+			_counters.clear();
+		}
+
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PrefConstants.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PrefConstants.java
new file mode 100644
index 0000000..3bac075
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PrefConstants.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+/**
+ * The constants that are used in the preference store so save the validator configurations. 
+ * <p>
+ * The entries in the preference hierarchy are organized something like this:
+ * <pre>
+ * /instance/frame-work-id/saveAuto=true|false
+ * /instance/frame-work-id/suspend=true|false
+ * /instance/frame-work-id/vf.version=2
+ * /instance/frame-work-id/filters/val-id/build=true|false
+ * /instance/frame-work-id/filters/val-id/manual=true|false
+ * /instance/frame-work-id/filters/val-id/version=someNumber
+ * /instance/frame-work-id/filters/val-id/groups/0/type=include|exclude
+ * /instance/frame-work-id/filters/val-id/groups/0/rules/0/type=file|fileext|projectNature|...
+ * /instance/frame-work-id/filters/val-id/groups/0/rules/0/pattern=...
+ * /instance/frame-work-id/filters/val-id/groups/0/rules/1/type=file|fileext|projectNature|...
+ * /instance/frame-work-id/filters/val-id/groups/0/rules/1/pattern=...
+ * </pre>
+ * <p>
+ * New approach
+ * <pre>
+ * vals/val-id/global=TF[version][len]delegate-id
+ * vals/val-id/groups=[groups]
+ * </pre>
+ * 
+ * 
+ * @author karasiuk
+ *
+ */
+public interface PrefConstants {
+	
+	/** filters - node where all the filters are saved. */
+	String filters = "filters"; //$NON-NLS-1$
+	
+	/** build - is the validator enabled for builds? */
+	String build = "build"; //$NON-NLS-1$
+	
+	/** delegate - the delegating implementation to use */
+	String delegate = "delegate"; //$NON-NLS-1$
+	
+	/** disabled - the list of disabled resources in the project. */
+	String disabled = "disabled"; //$NON-NLS-1$
+	
+	/** exactMatch - must the content type match exactly? */
+	String exactMatch = "exactMatch"; //$NON-NLS-1$
+	
+	/** manual - is the validator enabled for manual validation? */
+	String manual = "manual"; //$NON-NLS-1$
+	
+	/** msgs - node where all the message severity mappings are stored. */
+	String msgs = "msgs"; //$NON-NLS-1$
+	
+	/** 
+	 * version - version of the filter definition. This is something that a client can use to keep track
+	 * of changes that they might make to their validation extension.
+	 */
+	String version = "version"; //$NON-NLS-1$
+	
+	/** vf.version - version of the validation framework. */
+	String frameworkVersion = "vf.version"; //$NON-NLS-1$
+	
+	/** groups - filter group. */
+	String groups = "groups"; //$NON-NLS-1$
+	
+	/** type - type of group, either include or exclude. */
+	String type = "type"; //$NON-NLS-1$
+	
+	/** type - the type of rule. */
+	String ruleType = "type"; //$NON-NLS-1$
+	
+	/** rules - a filter rule. */
+	String rules = "rules"; //$NON-NLS-1$
+	
+	/** pattern - the pattern part of the rule. */
+	String pattern = "pattern"; //$NON-NLS-1$
+	
+	/** saveAuto - can we save all the resources automatically? true/false */
+	String saveAuto = "saveAuto"; //$NON-NLS-1$
+	
+	/** stateTS - plug-in state time stamp */
+	String stateTS = "stateTS"; //$NON-NLS-1$
+	
+	/** suspend - suspend all validation? true/false */
+	String suspend = "suspend"; //$NON-NLS-1$
+	
+	/** case - is this case sensitive? */
+	String caseSensitive = "case"; //$NON-NLS-1$
+	
+	/** fileType - the type of file, see FilterRule.File */
+	String fileType = "fileType"; //$NON-NLS-1$
+	
+	/** confirmDialog - should we show a confirmation dialog when doing a manual validation? */
+	String confirmDialog = "confirmDialog"; //$NON-NLS-1$
+	
+	/** override - should we show projects to override the global preferences? */
+	String override = "override"; //$NON-NLS-1$
+	
+	/** vals - the validators are grouped under this node. */
+	String vals = "vals"; //$NON-NLS-1$
+	
+	/** global - some global validation settings. */
+	String global = "global"; //$NON-NLS-1$
+	
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PreferencesWrapper.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PreferencesWrapper.java
new file mode 100644
index 0000000..0f3a5e7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/PreferencesWrapper.java
@@ -0,0 +1,431 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.wst.validation.internal;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * The subset of the IEclipsePreferences interface that the framework needs to
+ * be able to persist preferences.
+ * @author karasiuk
+ *
+ */
+public abstract class PreferencesWrapper {
+	
+	private static final WrapperManger _manager = new WrapperManger();
+	
+	/**
+	 * Answer the preferences for the project. If project is null answer the global preferences.
+	 * @param project
+	 * @param persistent if null the default preferences are returned, if True the persisted 
+	 * preferences are return and if False the transient preferences are returned.
+	 * @return
+	 */
+	public static PreferencesWrapper getPreferences(IProject project, Boolean persistent){
+		return _manager.get(project, persistent);
+	}
+		
+	/**
+	 * These are the names of the node entries.
+	 * @return
+	 * @throws BackingStoreException
+	 */
+	public abstract String[] childrenNames() throws BackingStoreException;
+	
+	public void flush() throws BackingStoreException {
+	}
+	
+	public abstract boolean getBoolean(String key, boolean def);
+	
+	public abstract String get(String key, String def);
+	
+	public abstract int getInt(String key, int def);
+	
+	public abstract long getLong(String key, long def);
+
+	public abstract String[] keys() throws BackingStoreException;
+
+	public boolean isPersistent(){
+		return false;
+	}
+
+	public boolean isTransient(){
+		return false;
+	}
+	
+	public abstract void put(String key, String value);
+	
+	public abstract void putBoolean(String key, boolean value);
+	
+	public abstract void putLong(String key, long value);
+	
+	public abstract void putInt(String key, int value);
+	
+	/**
+	 * Unlike the more sophisticated org.osgi.service.prefs.Preferences support, 
+	 * this is currently limited to simple node names.
+	 */
+	public abstract PreferencesWrapper node(String nodeName);
+	
+	public abstract boolean nodeExists();
+	
+	public abstract boolean nodeExists(String pathName)  throws BackingStoreException;
+	
+	public abstract void removeNode()  throws BackingStoreException;
+
+
+public final static class PreferencesWrapperPersistent extends PreferencesWrapper {
+	
+	private final Preferences _preferences;
+	
+	public PreferencesWrapperPersistent(Preferences preferences){
+		_preferences = preferences;
+	}
+	
+	@Override
+	public String[] childrenNames() throws BackingStoreException {
+		return _preferences.childrenNames();
+	}
+	
+	public void flush() throws BackingStoreException {
+		_preferences.flush();
+	}
+	
+	@Override
+	public String get(String key, String def) {
+		return _preferences.get(key, def);
+	}
+	
+	@Override
+	public boolean getBoolean(String key, boolean def) {
+		return _preferences.getBoolean(key, def);
+	}
+	
+	@Override
+	public int getInt(String key, int def) {
+		return _preferences.getInt(key, def);
+	}
+	
+	@Override
+	public long getLong(String key, long def) {
+		return _preferences.getLong(key, def);
+	}
+	
+	@Override
+	public String[] keys() throws BackingStoreException {
+		return _preferences.keys();
+	}
+	
+	@Override
+	public boolean isPersistent() {
+		return true;
+	}
+	
+	@Override
+	public void put(String key, String value) {
+		_preferences.put(key, value);
+	}
+	
+	@Override
+	public PreferencesWrapper node(String path) {
+		Preferences prefs = _preferences.node(path);
+		return new PreferencesWrapperPersistent(prefs);
+	}
+	
+	@Override
+	public boolean nodeExists() {
+		try {
+			return nodeExists(""); //$NON-NLS-1$
+		}
+		catch (BackingStoreException e){
+		
+		}
+		return false;
+	}
+	
+	@Override
+	public boolean nodeExists(String pathName) throws BackingStoreException  {
+		return _preferences.nodeExists(pathName);
+	}
+	
+	public void putBoolean(String key, boolean value) {
+		_preferences.putBoolean(key, value);	
+	}
+	
+	public void putLong(String key, long value){
+		_preferences.putLong(key, value);
+	}
+	
+	@Override
+	public void putInt(String key, int value) {
+		_preferences.putInt(key, value);
+	}
+	
+	@Override
+	public void removeNode() throws BackingStoreException {
+		_preferences.removeNode();
+	}
+}
+
+public final static class PreferencesWrapperTransient extends PreferencesWrapper {
+	
+	private final PreferencesWrapperTransient _parent;
+	private final Map<String, String> _children = Collections.synchronizedMap(new HashMap<String, String>(10));
+	private final Map<String, PreferencesWrapperTransient> _nodes = Collections.synchronizedMap(new HashMap<String, PreferencesWrapperTransient>(10));
+	
+	public PreferencesWrapperTransient(PreferencesWrapperTransient parent){
+		_parent = parent;
+	}
+	
+	public PreferencesWrapperTransient(PreferencesWrapper pw, PreferencesWrapperTransient parent) {
+		_parent = parent;
+		try {
+			for (String key : pw.keys()){
+				put(key, pw.get(key, null));
+			}
+			
+			
+			for (String nodeName : pw.childrenNames()){
+				PreferencesWrapper p = pw.node(nodeName);
+				PreferencesWrapperTransient pwt = new PreferencesWrapperTransient(p, this);
+				_nodes.put(nodeName, pwt);
+			}
+		}
+		catch (BackingStoreException e){
+			
+		}
+	}
+
+	@Override
+	public String[] childrenNames() throws BackingStoreException {
+		Set<String> keys = _nodes.keySet();
+		String names[] = new String[keys.size()];
+		keys.toArray(names);
+		return names;
+	}
+	
+	@Override
+	public String get(String key, String def) {
+		String value = _children.get(key);
+		if (value != null)return value;
+		return def;
+	}
+	
+	@Override
+	public boolean getBoolean(String key, boolean def) {
+		String value = _children.get(key);
+		if (value == null)return def;
+		value = value.toLowerCase();
+		if ("true".equals(value))return true; //$NON-NLS-1$
+		if ("false".equals(value))return false; //$NON-NLS-1$
+		return def;
+	}
+	
+	@Override
+	public int getInt(String key, int def) {
+		String value = _children.get(key);
+		if (value == null)return def;
+		try {
+			return Integer.parseInt(value);
+		}
+		catch (NumberFormatException e){
+		}
+		return def;
+	}
+	
+	@Override
+	public long getLong(String key, long def) {
+		String value = _children.get(key);
+		if (value == null)return def;
+		try {
+			return Long.parseLong(value);
+		}
+		catch (NumberFormatException e){
+		}
+		return def;
+	}
+	
+	@Override
+	public boolean isTransient() {
+		return true;
+	}
+	
+	@Override
+	public synchronized String[] keys() throws BackingStoreException {
+		String[] keys = new String[_children.size()];
+		_children.keySet().toArray(keys);
+		return keys;
+	}
+	
+	@Override
+	public synchronized PreferencesWrapper node(String name) {
+		PreferencesWrapperTransient pw  = _nodes.get(name);
+		if (pw != null)return pw;
+		pw = new PreferencesWrapperTransient(this);
+		_nodes.put(name, pw);
+		return pw;
+	}
+	
+	@Override
+	public boolean nodeExists() {
+		return true;
+	}
+	
+	@Override
+	public boolean nodeExists(String key) throws BackingStoreException {
+		PreferencesWrapperTransient pw = _nodes.get(key);
+		if (pw != null)return true;
+		return false;
+	}
+	
+	@Override
+	public void put(String key, String value) {
+		_children.put(key, value);
+	}
+	
+	@Override
+	public void putBoolean(String key, boolean bool) {
+		String value = bool ? "true" : "false";  //$NON-NLS-1$//$NON-NLS-2$
+		_children.put(key, value);
+	}
+	
+	@Override
+	public void putInt(String key, int value) {
+		_children.put(key, String.valueOf(value));
+	}
+	
+	@Override
+	public void putLong(String key, long value) {
+		_children.put(key, String.valueOf(value));
+	}
+	
+	@Override
+	public void removeNode() throws BackingStoreException {
+		if (_parent == null)return;
+		_parent.removeNode(this);
+	}
+	
+	private synchronized void removeNode(PreferencesWrapperTransient node){
+		String key = null;
+		for (Map.Entry<String, PreferencesWrapperTransient> me : _nodes.entrySet()){
+			if (me.getValue().equals(node)){
+				key = me.getKey();
+				break;
+			}
+		}
+		if (key != null)_nodes.remove(key);
+	}
+}
+
+private final static class WrapperManger implements IProjectChangeListener {
+	
+	private final Map<IProject, PreferencesWrapper> _map = new HashMap<IProject, PreferencesWrapper>(20); 
+	private final AtomicReference<PreferencesWrapper> _global = new AtomicReference<PreferencesWrapper>();
+	
+	private WrapperManger(){
+		EventManager.getManager().addProjectChangeListener(this);
+	}
+	
+	/**
+	 * Currently this object never goes away, but if that was ever to change then we would need to dispose it.
+	 */
+	@Override
+	protected void finalize() throws Throwable {
+		dispose();
+	}
+	
+	public void dispose(){
+		EventManager.getManager().removeProjectChangeListener(this);
+	}
+
+	public PreferencesWrapper get(IProject project, Boolean persistent) {
+		if (project == null)return globalPreferences(persistent);
+		PreferencesWrapper pw = null;
+		synchronized(_map){
+			pw = _map.get(project);
+		}
+		
+		if (pw != null && (persistent == null || persistent == pw.isPersistent()))return pw;
+		
+		if (pw == null)pw = new PreferencesWrapperPersistent(ValidationPlugin.getPreferences(project));
+		if (persistent != null && persistent && pw.isTransient())pw = new PreferencesWrapperPersistent(ValidationPlugin.getPreferences(project));
+		if (persistent != null && !persistent && pw.isPersistent())pw = new PreferencesWrapperTransient(pw, null);
+		
+		synchronized(_map){
+			_map.put(project, pw);
+		}
+		
+		return pw;
+	}
+
+	/**
+		 * Answer the appropriate global preferences.
+		 * 
+		 * @param persistent
+		 *            If null then answer the current saved global preferences,
+		 *            creating a new persistent one if there is none. If True,
+		 *            then ensure that the preferences are persistent. If False,
+		 *            ensure that the preferences are transient.
+		 * @return
+		 */
+	private PreferencesWrapper globalPreferences(Boolean persistent) {
+		PreferencesWrapper pw = _global.get();
+		
+		while(pw == null){
+			PreferencesWrapper newPW = createGlobal(persistent);
+			if (_global.compareAndSet(null, newPW))pw = newPW;
+			else pw = _global.get();
+		}
+		
+		while (persistent != null && !persistent && !pw.isTransient()){
+			PreferencesWrapper newPW = new PreferencesWrapperTransient(pw, null);
+			if (_global.compareAndSet(pw, newPW))pw = newPW;
+			else pw = _global.get();
+		}
+		
+		while (persistent != null && persistent && !pw.isPersistent()){
+			PreferencesWrapper newPW = new PreferencesWrapperPersistent(ValidationFramework.getDefault().getPreferenceStore());
+			if (_global.compareAndSet(pw, newPW))pw = newPW;
+			else pw = _global.get();			
+		}
+		return pw;
+	}
+	
+	private PreferencesWrapper createGlobal(Boolean persistent){
+		PreferencesWrapper pw = new PreferencesWrapperPersistent(ValidationFramework.getDefault().getPreferenceStore());
+		if (persistent == null || persistent)return pw;
+		return new PreferencesWrapperTransient(pw, null);
+	}
+
+	public void projectChanged(IProject project, int type) {
+		int interested = IProjectChangeListener.ProjectClosed | IProjectChangeListener.ProjectDeleted;
+		if ((type & interested) != 0){
+			synchronized (_map) {
+				_map.remove(project);
+			}
+		}
+		
+	}
+	
+}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ProjectUnavailableError.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ProjectUnavailableError.java
new file mode 100644
index 0000000..03e2b65
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ProjectUnavailableError.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 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.wst.validation.internal;
+
+import org.eclipse.core.resources.IProject;
+
+/**
+ * This internal error is used to signal that a project is now unavailable.
+ * <p>
+ * We could be in the middle of validating a large project, and the project could be closed. 
+ * This error is used to "exit" the validation framework.
+ * <p>
+ * This is an error rather than a runtime exception, because some parts of Eclipse like to
+ * trap RuntimeExceptions and log them.
+ * @author karasiuk
+ *
+ */
+public class ProjectUnavailableError extends Error {
+	
+	private IProject _project;
+
+	private static final long serialVersionUID = 200801281118L;
+	
+	public ProjectUnavailableError(IProject project){
+		super();
+		_project = project;
+	}
+
+	public IProject getProject() {
+		return _project;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ResourceUnavailableError.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ResourceUnavailableError.java
new file mode 100644
index 0000000..9543670
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ResourceUnavailableError.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 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.wst.validation.internal;
+
+import org.eclipse.core.resources.IResource;
+
+/**
+ * This internal error is used to signal that a resource is now unavailable.
+ * <p>
+ * This error is used to "exit" the validation framework. 
+ * <p>
+ * This is an error rather than a runtime exception, because some parts of Eclipse like to
+ * trap RuntimeExceptions and log them.
+ * @author karasiuk
+ *
+ */
+public class ResourceUnavailableError extends Error {
+
+	private static final long serialVersionUID = 200801290853L;
+	
+	private IResource _resource;
+	
+	public ResourceUnavailableError(IResource resource){
+		super();
+		_resource = resource;
+	}
+
+	public IResource getResource() {
+		return _resource;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Serializer.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Serializer.java
new file mode 100644
index 0000000..22da768
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Serializer.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.internal;
+
+/**
+ * A simple encoder that knows how to convert booleans, integers and strings, into a single string.
+ * 
+ * @see Deserializer
+ * @author karasiuk
+ *
+ */
+public class Serializer {
+	private StringBuffer _buffer;
+	
+	public Serializer(int size){
+		_buffer = new StringBuffer(size);
+	}
+	
+	public void put(boolean bool){
+		_buffer.append(bool ? 'T' : 'F');
+	}
+	
+	public void put(String string){
+		put(string.length());
+		_buffer.append(string);
+	}
+	
+	public void put(int anInt){
+		String s = String.valueOf(anInt);
+		int len = s.length();
+		_buffer.append(len-1);
+		_buffer.append(s);
+	}
+	
+	@Override
+	public String toString() {
+		return _buffer.toString();
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/SummaryReporter.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/SummaryReporter.java
new file mode 100644
index 0000000..5a19332
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/SummaryReporter.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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.wst.validation.internal;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IValidator;
+
+/**
+ * This class extends the workbench reporter by capturing some summary information about any added
+ * messages.
+ * @author karasiuk
+ *
+ */
+public class SummaryReporter extends WorkbenchReporter {
+	
+	private int _severityHigh;
+	private int _severityNormal;
+	private int	_severityLow;
+
+	public SummaryReporter(IProject project, IProgressMonitor monitor) {
+		super(project, monitor);
+	}
+	
+	@Override
+	public void addMessage(IValidator validator, IMessage message) {
+		super.addMessage(validator, message);
+		switch (message.getSeverity()){
+		case IMessage.HIGH_SEVERITY: 
+			_severityHigh++;
+			break;
+		case IMessage.NORMAL_SEVERITY: 
+			_severityNormal++;
+			break;
+		case IMessage.LOW_SEVERITY:
+			_severityLow++;
+			break;
+		}
+	}
+
+	public int getSeverityHigh() {
+		return _severityHigh;
+	}
+
+	public int getSeverityNormal() {
+		return _severityNormal;
+	}
+
+	public int getSeverityLow() {
+		return _severityLow;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Tracing.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Tracing.java
new file mode 100644
index 0000000..77e49cb
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/Tracing.java
@@ -0,0 +1,208 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 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.wst.validation.internal;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Control the tracing that this plug-in performs. This is used for service.
+ * @author karasiuk
+ *
+ */
+public final class Tracing {
+	
+	private final static DateFormat _df = new SimpleDateFormat("HH:mm:ss.SSSS"); //$NON-NLS-1$
+	private final static boolean	_isLogging = ValidationPlugin.getPlugin().isDebugging();
+	private final static boolean	_traceMatches = Misc.debugOptionAsBoolean(DebugConstants.TraceMatches);
+	private final static boolean	_traceV1 = Misc.debugOptionAsBoolean(DebugConstants.TraceV1);
+	private final static String		_extraValDetail = Platform.getDebugOption(DebugConstants.ExtraValDetail);
+	private final static int 		_tracingLevel;
+	
+	private final static String		_filter = Platform.getDebugOption(DebugConstants.FilterAllExcept);
+	
+	static {
+		String traceLevel = Platform.getDebugOption(DebugConstants.TraceLevel);
+		int level = 0;
+		if (traceLevel != null){
+			try {
+				level = Integer.parseInt(traceLevel);
+			}
+			catch (Exception e){
+			}
+		}
+		_tracingLevel = level;
+	}
+	
+	/**
+	 * Answer true if the filters allow this validator to be enabled. Normally this method will answer true.
+	 * It is only when filters are activated via the debugging options, that this method might return false.
+	 * This is used to aid in debugging by making it look like only one validator has been registered.
+	 * 
+	 * @param validatorId the validator id.
+	 * @return true if the validator should be registered via an extension point.
+	 */
+	public static boolean isEnabled(String validatorId){
+		if (_filter == null || _filter.length() == 0)return true;
+		return (_filter.equals(validatorId));		
+	}
+	
+	/**
+	 * Are we in logging/debugging mode?
+	 */
+	public static boolean isLogging(){
+		return _isLogging;
+	}
+	
+	/**
+	 * Answer true if we are in logging mode, and if the current logging level is greater than or
+	 * equal to level.
+	 * @param level The logging level that we are testing. The higher the level the more verbose
+	 * the tracing.
+	 */
+	public static boolean isLogging(int level){
+		if (_isLogging){
+			return _tracingLevel >= level;
+		}
+		return false;
+	}
+	
+	public static boolean isTraceMatches(){
+		return _traceMatches;
+	}
+	
+	public static boolean isTraceV1(){
+		return _traceV1;
+	}
+	
+	public static boolean matchesExtraDetail(String validatorId){
+		if (_extraValDetail == null)return false;
+		return _extraValDetail.equals(validatorId);
+	}
+
+	/**
+	 * Write a line to the console for debugging, if in debugging mode.
+	 * @param line
+	 */
+	public static void log(String line){
+		if (isLogging())write(line);
+	}
+	
+	public static void log(Object... parts){
+		if (isLogging()){
+			StringBuffer b = new StringBuffer(200);
+			for (Object p : parts)b.append(p);
+			write(b.toString());
+		}
+	}
+
+	/**
+	 * Write a line to the log. Include a time stamp with the line.
+	 * @param line
+	 */
+	public static void write(String line){
+		System.err.println(timestampIt(line));
+	}
+
+	public static String timestampIt(String line){
+		Date date = new Date();
+		String thread = Thread.currentThread().getName();
+		return _df.format(date) + " " + thread + " " + line;  //$NON-NLS-1$//$NON-NLS-2$		
+	}
+
+	/**
+	 * If we are in logging mode, log the item, and then reset the string buffer.
+	 */
+	public static void log(StringBuffer b){
+		log(b.toString());
+		b.setLength(0);
+	}
+
+	/**
+	 * This method doesn't do anything, and will be removed.
+	 * 
+	 * @deprecated
+	 */
+	public static void setForceLogging(boolean forceLogging) {
+	}
+	
+	/**
+	 * Log up to maxNumber deltas to the log.
+	 * @param delta The deltas to log.
+	 * @param maxNumber The maximum number of deltas to log.
+	 */
+	public static void logResourceDeltas(IResourceDelta delta, int maxNumber){
+		if (!isLogging())return;
+		if (delta == null)Tracing.log("  ResourceDelta: null"); //$NON-NLS-1$
+		else {
+			DeltaLogger logger = new DeltaLogger(maxNumber);
+			try {
+				delta.accept(logger);
+				if (logger.getCount() == 0)Tracing.log("  ResourceDelta: no deltas"); //$NON-NLS-1$
+			}
+			catch (CoreException e){
+				// eat it
+			}
+		}
+	}
+	
+	/**
+	 * A debugging class that prints out some resource delta's.
+	 * @author karasiuk
+	 *
+	 */
+	private final static class DeltaLogger implements IResourceDeltaVisitor {
+		
+		private final int 	_max;
+		private int 		_count;
+		public int getCount() {
+			return _count;
+		}
+
+		private StringBuffer _b = new StringBuffer(200);
+		
+		public DeltaLogger(int max){
+			_max = max;
+		}
+
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			if (_count++ > _max)return false;
+			int kind = delta.getKind();
+			String type = "unknown"; //$NON-NLS-1$
+			switch (kind){
+			case IResourceDelta.ADDED:
+				type = "Added"; //$NON-NLS-1$
+				break;
+			case IResourceDelta.CHANGED:
+				type = "Changed"; //$NON-NLS-1$
+				break;
+			case IResourceDelta.REMOVED:
+				type = "Removed"; //$NON-NLS-1$
+				break;				
+			}
+			_b.append("  ResourceDelta "); //$NON-NLS-1$
+			_b.append(type);
+			_b.append(' ');
+			_b.append(delta.getResource());
+			Tracing.log(_b);
+			return true;
+		}
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java
new file mode 100644
index 0000000..5aafeee
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java
@@ -0,0 +1,345 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import java.util.LinkedList;
+import java.util.Queue;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IResourceProxy;
+import org.eclipse.core.resources.IResourceProxyVisitor;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.wst.validation.DependentResource;
+import org.eclipse.wst.validation.Friend;
+import org.eclipse.wst.validation.IDependencyIndex;
+import org.eclipse.wst.validation.ValidationEvent;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.ValidationState;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.model.IValidatorVisitor;
+import org.eclipse.wst.validation.internal.operations.ValidationBuilder;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+
+/**
+ * Run all the v2 validators through this job.
+ * <p>
+ * This is the main class for supporting build based validation. When triggered it looks at all of the
+ * resource changes and determines what needs to be validated. 
+ * </p>
+ * @author karasiuk
+ *
+ */
+public final class ValBuilderJob extends WorkspaceJob {
+	
+	private static ValBuilderJob _job;
+	private static Queue<ValidationRequest> _work = new LinkedList<ValidationRequest>();
+	
+	private final ValOperation _operation = new ValOperation();
+		
+	/** The types of changes we are interested in. */
+	private final static int	InterestedFlags = IResourceDelta.CONTENT | IResourceDelta.ENCODING |
+		IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO;
+	
+	public static synchronized void validateProject(IProject project, IResourceDelta delta, int buildKind){
+		ValidationRequest request = new ValidationRequest(project, delta, buildKind);
+		if (_job == null){
+			_job = new ValBuilderJob();
+			_job.add(request);
+			_job.schedule();
+		}
+		else {
+			_job.add(request);
+		}
+	}
+	
+	private static synchronized ValidationRequest getRequest(){
+		ValidationRequest request = _work.poll();
+		if (request == null){
+			_job = null;
+		}
+		return request;
+	}
+	
+	/**
+	 * Each validation run is done in it's own job.
+	 * 
+	 * @param project the project that is being validated
+	 * @param delta the delta that is being validated. This may be null, in which case we do a 
+	 * full validation of the project.
+	 * 
+	 * @param buildKind the kind of build.
+	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#AUTO_BUILD
+	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#CLEAN_BUILD
+	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#FULL_BUILD
+	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#INCREMENTAL_BUILD
+	 * 
+	 * @param operation some global context for the validation operation
+	 * 
+	 */
+	private ValBuilderJob(){
+		super(ValMessages.JobName);
+	}
+	
+	private void add(ValidationRequest request){
+		_work.add(request);
+	}
+	
+	@Override
+	public boolean belongsTo(Object family) {
+		if (family == ResourcesPlugin.FAMILY_MANUAL_BUILD)return true;
+		if (family == ValidationBuilder.FAMILY_VALIDATION_JOB){
+			return true;
+		}
+			
+		return super.belongsTo(family);
+	}
+
+	@Override
+	public IStatus runInWorkspace(IProgressMonitor monitor) {
+		Tracing.log("ValBuilderJob-01: Starting"); //$NON-NLS-1$
+		
+		try {
+			startingValidation(monitor);
+			
+			ValidationRequest request = getRequest();
+			while(request != null){
+				run(request, monitor);
+				request = getRequest();
+			}
+		}
+		finally {
+			finishingValidation(monitor);
+		}
+		
+		Tracing.log("ValBuilderJob-02: Finished"); //$NON-NLS-1$
+		return Status.OK_STATUS;
+	}
+
+	private void startingValidation(IProgressMonitor monitor) {
+        IValidatorVisitor startingVisitor = new IValidatorVisitor(){
+
+            public void visit(Validator validator, IProject project, ValType valType, 
+                ValOperation operation, IProgressMonitor monitor) {
+                
+                validator.validationStarting(project, operation.getState(), monitor);                   
+            }               
+        };
+
+        ValManager.getDefault().accept(startingVisitor, null, ValType.Build, getOperation(), monitor);
+	}
+	
+	private void finishingValidation(IProgressMonitor monitor) {
+		
+		IValidatorVisitor finishedVisitor = new IValidatorVisitor(){
+
+		    public void visit(Validator validator, IProject project, ValType valType,
+		      ValOperation operation, IProgressMonitor monitor) {
+
+		      validator.validationFinishing(project, operation.getState(), monitor);              
+		    }           
+		  };
+		  ValManager.getDefault().accept(finishedVisitor, null, ValType.Build, getOperation(), monitor);
+	}
+
+	private void run(ValidationRequest request, IProgressMonitor monitor){
+		setName(ValMessages.JobName + " " + request.getProject().getName()); //$NON-NLS-1$
+		try {		
+	        IValidatorVisitor startingVisitor = new IValidatorVisitor(){
+
+	            public void visit(Validator validator, IProject project, ValType valType, 
+	                ValOperation operation, IProgressMonitor monitor) {
+	                
+	                validator.validationStarting(project, operation.getState(), monitor);                   
+	            }               
+	        };
+
+	        ValManager.getDefault().accept(startingVisitor, request.getProject(), ValType.Build, getOperation(), monitor);
+		  
+			if (request.getDelta() == null)fullBuild(request, monitor);
+			else deltaBuild(request, monitor);
+
+			
+		}
+		catch (ProjectUnavailableError e){
+			ValidationPlugin.getPlugin().handleProjectUnavailableError(e);
+		}
+		catch (ResourceUnavailableError e){
+			ValidationPlugin.getPlugin().handleResourceUnavailableError(e);
+		}
+		catch (CoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		finally {
+		  IValidatorVisitor finishedVisitor = new IValidatorVisitor(){
+
+		    public void visit(Validator validator, IProject project, ValType valType,
+		      ValOperation operation, IProgressMonitor monitor) {
+
+		      validator.validationFinishing(project, operation.getState(), monitor);              
+		    }           
+		  };
+          ValManager.getDefault().accept(finishedVisitor, request.getProject(), ValType.Build, getOperation(), monitor);
+		}
+		
+	}
+
+	private void deltaBuild(ValidationRequest request, IProgressMonitor monitor) throws CoreException {
+		ResourceCounter counter = new ResourceCounter();
+		request.getDelta().accept(counter);
+		SubMonitor subMonitor = SubMonitor.convert(monitor, counter.getCount());
+		Visitor vistitor = new Visitor(request, subMonitor, monitor, getOperation());
+		request.getDelta().accept(vistitor);		
+	}
+
+	private void fullBuild(ValidationRequest request, IProgressMonitor monitor) throws CoreException {
+		ResourceCounter counter = new ResourceCounter();
+		request.getProject().accept(counter, 0);
+		SubMonitor subMonitor = SubMonitor.convert(monitor, counter.getCount());
+		Visitor vistitor = new Visitor(request, subMonitor, monitor, getOperation());
+		request.getProject().accept(vistitor);
+		
+	}
+	
+	private ValOperation getOperation(){
+		return _operation;
+	}
+
+	static final class ResourceCounter implements IResourceProxyVisitor, IResourceDeltaVisitor {
+		
+		private int _count;
+
+		public int getCount() {
+			return _count;
+		}
+
+		public boolean visit(IResourceProxy proxy) throws CoreException {
+			_count++;
+			return true;
+		}
+
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			_count++;
+			return true;
+		}		
+	}
+	
+	static final class ValidationRequest {
+		/** The project that is being built. */
+		private final IProject 			_project;
+		
+		/** The resource delta that triggered the build, it will be null for a full build. */
+		private final IResourceDelta	_delta;
+		
+		/** 
+		 * The kind of build.
+		 * 
+		 *  @see org.eclipse.core.resources.IncrementalProjectBuilder
+		 */
+		private final int					_buildKind;
+		
+		public ValidationRequest(IProject project, IResourceDelta delta, int buildKind){
+			_project = project;
+			_delta = delta;
+			_buildKind = buildKind;
+		}
+
+		public IProject getProject() {
+			return _project;
+		}
+
+		public IResourceDelta getDelta() {
+			return _delta;
+		}
+
+		public int getBuildKind() {
+			return _buildKind;
+		}
+	}
+	
+	private final static class Visitor implements IResourceDeltaVisitor, IResourceVisitor{
+		
+		private final ValidationRequest 	_request;
+		private final SubMonitor 			_subMonitor;
+		private final IProgressMonitor 		_monitor;
+		private final ValOperation			_operation;
+		
+		public Visitor(ValidationRequest request, SubMonitor subMonitor, IProgressMonitor monitor, ValOperation operation){
+			_request = request;
+			_subMonitor = subMonitor;
+			_monitor = monitor;
+			_operation = operation;
+		}
+		
+		public boolean visit(IResource resource) throws CoreException {
+			try {
+				if (DisabledResourceManager.getDefault().isDisabled(resource)){
+					MarkerManager.getDefault().deleteMarkers(resource, _operation.getStarted(), IResource.DEPTH_INFINITE);
+					return false;
+				}
+				ValManager.getDefault().validate(_request.getProject(), resource, IResourceDelta.NO_CHANGE, ValType.Build, 
+					_request.getBuildKind(), _operation, _subMonitor.newChild(1));
+			}
+			catch (ResourceUnavailableError e){
+				if (Tracing.isLogging())Tracing.log("ValBuilderJob-02: " + e.toString()); //$NON-NLS-1$
+				return false;
+			}
+			return true;
+		}
+		
+		@SuppressWarnings("deprecation")
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			IResource resource = delta.getResource();
+			if (DisabledResourceManager.getDefault().isDisabled(resource)){
+				MarkerManager.getDefault().deleteMarkers(resource, _operation.getStarted(), IResource.DEPTH_INFINITE);
+				return false;
+			}
+			int kind = delta.getKind();
+			boolean isChanged = (kind & IResourceDelta.CHANGED) != 0;
+			if (isChanged &&  (delta.getFlags() & InterestedFlags) == 0)return true;
+			
+			if ((kind & (IResourceDelta.ADDED | IResourceDelta.CHANGED)) != 0){
+				ValManager.getDefault().validate(_request.getProject(), resource, delta.getKind(), ValType.Build, 
+					_request.getBuildKind(), _operation, _subMonitor.newChild(1));
+			}
+					
+			IDependencyIndex index = ValidationFramework.getDefault().getDependencyIndex();
+			if (index.isDependedOn(resource)){
+				MarkerManager mm = MarkerManager.getDefault();
+				for (DependentResource dr : index.get(resource)){
+					Validator val = dr.getValidator();
+					if (Friend.shouldValidate(val, dr.getResource(), ValType.Build, new ContentTypeWrapper())){
+						_operation.getState().put(ValidationState.TriggerResource, resource);
+						ValidationEvent event = new ValidationEvent(dr.getResource(), IResourceDelta.NO_CHANGE, delta);
+						if (val.shouldClearMarkers(event))mm.clearMarker(dr.getResource(), val); 
+						ValManager.getDefault().validate(val, _operation, dr.getResource(), 
+							IResourceDelta.NO_CHANGE, _monitor, event);
+					}
+				}
+			}
+					
+			return true;
+		}
+
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValConstants.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValConstants.java
new file mode 100644
index 0000000..ab2aebf
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValConstants.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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.wst.validation.internal;
+
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+public interface ValConstants {
+	/** problem marker for version 2 of the validation framework. */
+	String ProblemMarker =  ValidationPlugin.PLUGIN_ID +".problemmarker2"; //$NON-NLS-1$
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValManager.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValManager.java
new file mode 100644
index 0000000..9214a19
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValManager.java
@@ -0,0 +1,1291 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.BitSet;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceStatus;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.osgi.util.NLS;
+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;
+import org.eclipse.wst.validation.Friend;
+import org.eclipse.wst.validation.IPerformanceMonitor;
+import org.eclipse.wst.validation.IValidatorGroupListener;
+import org.eclipse.wst.validation.PerformanceCounters;
+import org.eclipse.wst.validation.ValidationEvent;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationState;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.model.GlobalPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+import org.eclipse.wst.validation.internal.model.IValidatorVisitor;
+import org.eclipse.wst.validation.internal.model.ProjectPreferences;
+import org.eclipse.wst.validation.internal.operations.ManualValidatorsOperation;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * A central place to keep track of all the validators.
+ * @author karasiuk
+ *
+ */
+public final class ValManager implements IValChangedListener, IFacetedProjectListener, IProjectChangeListener {
+	
+	/**
+	 * Projects may be allowed to override the global validation settings. If that is the case then those
+	 * project specific settings are saved here. If the key exists, but the value is null, then that
+	 * means that the project has been checked and it does not have any specific settings.
+	 */
+	private final Map<IProject, ProjectPreferences> _projectPreferences = 
+		Collections.synchronizedMap(new HashMap<IProject, ProjectPreferences>(50));
+	
+	private final AtomicReference<GlobalPreferences> _globalPreferences = new AtomicReference<GlobalPreferences>();
+		
+	/**
+	 * This number increases each time any of the validation configurations change. It is used to determine
+	 * if information that we have cached in the ValProperty is stale or not. This starts off at zero, each time
+	 * the workbench is started.
+	 */
+	private final AtomicInteger _configNumber = new AtomicInteger();
+	
+	private final ValidatorIdManager _idManager = new ValidatorIdManager();
+	private final ValidatorCache 	_cache = new ValidatorCache();
+		
+	private static final QualifiedName StatusBuild = new QualifiedName(ValidationPlugin.PLUGIN_ID, "sb"); //$NON-NLS-1$
+	private static final QualifiedName StatusManual = new QualifiedName(ValidationPlugin.PLUGIN_ID, "sm"); //$NON-NLS-1$
+
+	
+	public static ValManager getDefault(){
+		return Singleton.valManager;
+	}
+	
+	private ValManager(){
+		ValPrefManagerGlobal.getDefault().addListener(this);
+		ValPrefManagerProject.addListener(this);
+		FacetedProjectFramework.addListener(this, IFacetedProjectEvent.Type.PROJECT_MODIFIED);
+		EventManager.getManager().addProjectChangeListener(this);
+	}
+	
+	/**
+	 * This needs to be called if the ValManager is ever deleted.
+	 */
+	public void dispose(){
+		// currently nobody calls this method, because this instance is never removed, but the method is
+		// here for completeness none the less.
+		ValPrefManagerGlobal.getDefault().removeListener(this);
+		ValPrefManagerProject.removeListener(this);
+		FacetedProjectFramework.removeListener(this);
+		EventManager.getManager().removeProjectChangeListener(this);	
+	}
+	
+	/**
+	 * Answer all the registered validators. If you are planning on making changes to the validators,
+	 * and then saving them in a preference store then you probably want the getValidatorsCopy method.
+	 * Because if you make changes to the original validators, and since we only save differences,
+	 * there won't be any differences. 
+	 * 
+	 * @return Answer the validators in name sorted order. Answer an empty array if there are no validators.
+	 * 
+	 * @see #getValidatorsCopy()
+	 */
+	public Validator[] getValidators(){
+		return getValidators(null);
+	}
+	
+	/**
+	 * Answer copies of all the registered validators. If you are going to be making changes to the validators
+	 * and then saving them backing into the preference store, then this is the method to use.
+	 * 
+	 * @return Answer an empty array if there are no validators.
+	 */
+	public Validator[] getValidatorsCopy(){
+		Validator[] orig = getValidators();
+		Validator[] copy = new Validator[orig.length];
+		for (int i=0; i<orig.length; i++)copy[i] = orig[i].copy();
+		return copy;
+	}
+	
+	/**
+	 * Answer all the validators for the given project.
+	 * <p>
+	 * Individual projects may override the global validation preference
+	 * settings. If the project has it's own settings, then those validators are
+	 * returned via this method.
+	 * </p>
+	 * <p>
+	 * The following approach is used. For version 1 validators, the validator
+	 * is only returned if it is defined to operate on this project type. This
+	 * is the way that the previous version of the framework did it. For version
+	 * 2 validators, they are all returned.
+	 * </p>
+	 * 
+	 * @param project
+	 *            this may be null, in which case the global preferences are
+	 *            returned.
+	 * @param respectOverrideSettings
+	 *            if this is true then the validators that get returned are
+	 *            based on the override settings. So for example, if the global
+	 *            preferences do not allow project overrides then none of the
+	 *            project settings are used. Normal validation would set this to true.
+	 *            The properties page would set this to false.
+	 *            
+	 * @deprecated Use {@link #getValidatorsNotCached(IProject)} instead            
+	 */
+	public Validator[] getValidators(IProject project, boolean respectOverrideSettings) throws ProjectUnavailableError {
+		return getValidators(project);
+	}
+	
+	/**
+	 * Answer a cached copy of the the validators for a given project. This is a front end method, 
+	 * for the getValidatorsNotCached() method.
+	 * <p>
+	 * Individual projects may override the global validation preference
+	 * settings. If the project has it's own settings, then those validators are
+	 * returned via this method.
+	 * </p>
+	 * <p>
+	 * The following approach is used. For version 1 validators, the validator
+	 * is only returned if it is defined to operate on this project type. This
+	 * is the way that the previous version of the framework did it. For version
+	 * 2 validators, they are all returned.
+	 * </p>
+	 * 
+	 * @param project
+	 *            This may be null, in which case the global preferences are
+	 *            returned.
+	 * 
+	 * @return The validators in name sorted order.
+	 */
+	public Validator[] getValidators(IProject project) throws ProjectUnavailableError {
+		return _cache.getValidatorsCached(project);
+	}
+	
+	/**
+	 * Answer all the validators for the given project.
+	 * <p>
+	 * Individual projects may override the global validation preference
+	 * settings. If the project has it's own settings, then those validators are
+	 * returned via this method.
+	 * </p>
+	 * <p>
+	 * The following approach is used. For version 1 validators, the validator
+	 * is only returned if it is defined to operate on this project type. This
+	 * is the way that the previous version of the framework did it. For version
+	 * 2 validators, they are all returned.
+	 * </p>
+	 * 
+	 * @param project
+	 *            This may be null, in which case the global preferences are
+	 *            returned.
+	 * 
+	 * @return The validators in name sorted order.
+	 */
+	private Validator[] getValidatorsNotCached(IProject project) throws ProjectUnavailableError {
+		Map<String,Validator> v2Vals = getV2Validators(project, UseProjectPreferences.Normal);
+		TreeSet<Validator> sorted = new TreeSet<Validator>();
+		sorted.addAll(v2Vals.values());
+		
+		try {
+			ValidationConfiguration vc = ConfigurationManager.getManager().getConfiguration(project);
+			if (project == null){
+				// If the project is null we need to use this approach, since you can not use new ManualValidatorsOperation(null)
+				ValidatorMetaData[] vmds = vc.getValidators();
+				for (ValidatorMetaData vmd : vmds){
+					Validator v = Validator.create(vmd, vc, project);
+					sorted.add(v);
+				}
+			}
+			else {
+				ManualValidatorsOperation mvo = new ManualValidatorsOperation(project);
+				Set<ValidatorMetaData> vmds = mvo.getEnabledValidators();
+				for (ValidatorMetaData vmd : vmds){
+					Validator v = Validator.create(vmd, vc, project);
+					sorted.add(v);
+				}
+			}
+		}
+		catch (InvocationTargetException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		
+		Validator[] vals = new Validator[sorted.size()];
+		sorted.toArray(vals);
+		return vals;
+	}
+	/**
+	 * Validators can use project level settings (Project natures and facets) to
+	 * determine if they are applicable to the project or not.
+	 * 
+	 * @param project
+	 *            The project that the configuration is based on.
+	 * @param mustUseProjectSettings
+	 *            Force the project properties to be used. There is a case where the user has toggled the
+	 *            Enable project specific settings checkbox in the dialog, but has not yet committed the
+	 *            changes. This allows that setting to be passed through.
+	 * @return The validators that are configured to run on this project based
+	 *         on the project level settings. These are the "live" validators, they are not copies.
+	 * @throws ProjectUnavailableError
+	 * 
+	 * @deprecated Use getValidatorsConfiguredForProject(IProject project, UseProjectPreferences useProject)
+	 */
+	public Validator[] getValidatorsConfiguredForProject(IProject project, boolean mustUseProjectSettings) throws ProjectUnavailableError {
+		UseProjectPreferences useProject = UseProjectPreferences.Normal;
+		return getValidatorsConfiguredForProject(project, useProject);
+	}
+	
+	/**
+	 * Validators can use project level settings (Project natures and facets) to
+	 * determine if they are applicable to the project or not.
+	 * 
+	 * @param project
+	 *            The project that the configuration is based on.
+	 * @param useProject
+	 *            Specifies how to use the project preferences. This can be used
+	 *            to force the project properties to be used. There is a case
+	 *            where the user has toggled the Enable project specific
+	 *            settings checkbox in the dialog, but has not yet committed the
+	 *            changes. This allows that setting to be passed through.
+	 * @return The validators that are configured to run on this project based
+	 *         on the project level settings. These are the "live" validators,
+	 *         they are not copies.
+	 * @throws ProjectUnavailableError
+	 */
+	public Validator[] getValidatorsConfiguredForProject(IProject project, UseProjectPreferences useProject) throws ProjectUnavailableError {
+		Map<String,Validator> v2Vals = getV2Validators(project, useProject);
+		TreeSet<Validator> sorted = new TreeSet<Validator>();
+		sorted.addAll(v2Vals.values());
+		
+		if (useProject == UseProjectPreferences.MustNotUse){
+			sorted.addAll(ExtensionValidators.instance().getV1Validators(project));
+		}
+		else {
+			try {
+				ValidationConfiguration vc = ConfigurationManager.getManager().getProjectConfiguration(project);
+				ValidatorMetaData[] vmds = vc.getValidators();
+				for (ValidatorMetaData vmd : vmds) {
+					Validator v = Validator.create(vmd, vc, project);
+					sorted.add(v);
+				}
+			}
+			catch (InvocationTargetException e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+		}
+				
+		List<Validator> list = new LinkedList<Validator>();
+		for (Validator v : sorted){
+			if (v.shouldValidateProject(project, false, false))list.add(v);
+		}
+		
+		Validator[]vals = new Validator[list.size()];
+		list.toArray(vals);
+		return vals;
+	}
+	
+	/**
+	 * Answer the V2 validators that are in effect for this project. The
+	 * following approach is used:
+	 * <ol>
+	 * <li>The validators that are defined by the extension point are loaded.</li>
+	 * <li>They are customized by any global preferences.</li>
+	 * <li>If project customizations are allowed, they are customized by the
+	 * project preferences.
+	 * </ol>
+	 * 
+	 * @param project
+	 *            This may be null, in which case only the global preferences
+	 *            are used.
+	 * @param useProject
+	 *            Specifies how to use the project preferences. This can be used
+	 *            to force the project properties to be used. There is a case
+	 *            where the user has toggled the Enable project specific
+	 *            settings checkbox in the dialog, but has not yet committed the
+	 *            changes. This allows that setting to be passed through.
+	 *            
+	 * @return
+	 */
+	private Map<String,Validator> getV2Validators(IProject project, UseProjectPreferences useProject){
+		Map<String,Validator> extVals = ExtensionValidators.instance().getMapV2Copy();
+		try {
+			List<Validator> vals = ValPrefManagerGlobal.getDefault().getValidators();
+			for (Validator v : vals)extVals.put(v.getId(), v);
+			
+			if (useProject != UseProjectPreferences.MustNotUse){
+				if (useProject == UseProjectPreferences.MustUse || !mustUseGlobalValidators(project)){
+					//TODO should probably cache this vpm
+					ValPrefManagerProject vpm = new ValPrefManagerProject(project);
+					vals = vpm.getValidators(extVals);
+					for (Validator v : vals)extVals.put(v.getId(), v);
+					
+					for (Validator v : getProjectPreferences(project).getValidators())extVals.put(v.getId(), v);
+				}	
+			}
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+		return extVals;
+	}
+	
+
+	/**
+	 * Answer true if we must use the global settings for this project. If the global preferences do not
+	 * allow overrides, or if this project does not allow overrides then the global preferences must be used.
+	 *  
+	 * @param project project that is being tested. It can be null, in which case the global preferences must be used.
+	 * @return true if the global preferences must be used.
+	 */
+	public boolean mustUseGlobalValidators(IProject project){
+		if (project == null)return true;
+		if (!getGlobalPreferences().getOverride())return true;
+		ProjectPreferences pp = _projectPreferences.get(project);
+		if (pp != null)return !pp.getOverride();
+		
+		ValPrefManagerProject vpm = new ValPrefManagerProject(project);
+		return !vpm.getOverride();
+	}
+	
+	/**
+	 * Answer the validator with the given id that is in effect for the given project.
+	 * 
+	 * @param id The validator id.
+	 * @param project
+	 * @return null if the validator is not found
+	 */
+	public Validator getValidator(String id, IProject project){
+		Validator[] vals = getValidators(project);
+		for (Validator v : vals){
+			if (v.getId().equals(id))return v;
+		}
+		return null;
+	}
+	
+	/**
+	 * @see ValidationFramework#getValidator(String, IProject)
+	 */
+	public Validator getValidatorWithId(String id, IProject project){
+		Validator[] vals = getValidators(project);
+		for (Validator v : vals){
+			if (v.getId().equals(id))return v;
+		}
+		return null;
+	}
+					
+	/**
+	 * Answer true if the resource has any enabled validators.
+	 * 
+	 * @param resource a file, folder or project.
+	 * 
+	 * @param isManual if true then the validator must be turned on for manual validation. 
+	 * If false then the isManualValidation setting isn't used to filter out validators.
+	 *   
+	 * @param isBuild if true then the validator must be turned on for build based validation.
+	 * If false then the isBuildValidation setting isn't used to filter out validators.  
+	 */
+	public boolean hasValidators(IResource resource, boolean isManual, boolean isBuild){
+		if (resource instanceof IProject){
+			IProject project = (IProject)resource;
+			return ValManager.getDefault().getValidators(project).length > 0;
+		}
+		else if (resource instanceof IFolder){
+			IFolder folder = (IFolder)resource;
+			HasValidatorVisitor v = new HasValidatorVisitor(isManual, isBuild);
+			return v.hasValidator(folder);
+		}
+		else {
+			ContentTypeWrapper ctw = new ContentTypeWrapper();
+			for (Validator val : ValManager.getDefault().getValidators(resource.getProject())){
+				if (Friend.shouldValidate(val, resource, isManual, isBuild, ctw))return true;
+			}			
+		}
+		return false;
+	}
+	
+	/**
+	 * Answer true if the project has disabled all of it's validators, or if project overrides are not
+	 * allowed if global validation has been disabled.
+	 * 
+	 * @param project the project that is being consulted, or null if only the global settings are to be 
+	 * checked.
+	 */
+	public boolean isDisabled(IProject project){
+		GlobalPreferences gp = getGlobalPreferences();
+		if (!gp.getOverride() || project == null)return gp.getDisableAllValidation();
+		
+		ProjectPreferences pp = _projectPreferences.get(project);
+		if (pp == null)return gp.getDisableAllValidation();
+		return pp.getSuspend();		
+	}
+			
+	/**
+	 * Answer all the registered validators as they were defined by the extension points. That is
+	 * answer the validators as if the user has never applied any customizations.
+	 * 
+	 * @return Answer an empty array if there are no validators.
+	 */
+	public static Validator[] getDefaultValidators() throws InvocationTargetException {
+		Map<String,Validator> extVals = ExtensionValidators.instance().getMapV2();
+		TreeSet<Validator> sorted = new TreeSet<Validator>();
+		for (Validator v : extVals.values())sorted.add(v);
+		
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		GlobalConfiguration gc = new GlobalConfiguration(root);
+		gc.resetToDefault();
+		for (ValidatorMetaData vmd : gc.getValidators()){
+			Validator v = Validator.create(vmd, gc, null);
+			v.setBuildValidation(vmd.isBuildValidation());
+			v.setManualValidation(vmd.isManualValidation());
+			sorted.add(v);
+		}
+		
+		Validator[] val = new Validator[sorted.size()];
+		sorted.toArray(val);
+		return val;
+	}
+	
+	public static Validator[] getDefaultValidators(IProject project) throws InvocationTargetException {
+		Map<String,Validator> extVals = ExtensionValidators.instance().getMap(project);
+		Validator[] val = new Validator[extVals.size()];
+		extVals.values().toArray(val);
+		return val;
+	}
+
+	/**
+	 * Answer all the registered validators.
+	 * 
+	 * @param project the project to use for getting the version 1 validator settings. This can
+	 * be null in which case the global preferences are used.
+	 * 
+	 * @return Answer an empty array if there are no validators.
+	 */
+//	Validator[] getValidators2(IProject project) throws ProjectUnavailableError {
+//		// If I use a local variable I don't need to synchronize the method.
+//		
+//		Validator[] validators = _validators;
+//		if (project == null && validators != null)return validators;
+//				
+//		Validator[] val = loadExtensions(false, project);
+//		ValPrefManagerGlobal vpm = ValPrefManagerGlobal.getDefault();
+//		if (!vpm.loadPreferences(val)){
+//			val = restoreDefaults2(project);
+//			saveStateTimestamp();				
+//		}
+//		else {
+//			if (getGlobalPreferences().getStateTimeStamp() != Platform.getStateStamp())
+//				val = migrateSettings(val, project);
+//		}
+//		
+//		TreeSet<Validator> set = new TreeSet<Validator>();
+//		for (Validator v : val)set.add(v);
+//		
+//		List<Validator> list = new LinkedList<Validator>();
+//		try {
+//			ValidationConfiguration vc = ConfigurationManager.getManager().getConfiguration(project);
+//			for (ValidatorMetaData vmd : vc.getValidators()){
+//				list.add(Validator.create(vmd, vc, project));
+//			}							
+//			
+//		}
+//		catch (InvocationTargetException e){
+//			if (project != null && (!project.exists() || !project.isOpen()))
+//				throw new ProjectUnavailableError(project);
+//			ValidationPlugin.getPlugin().handleException(e);
+//		}
+//		
+//		set.addAll(list);
+//		val = new Validator[set.size()];
+//		set.toArray(val);
+//		if (project == null)_validators = val;
+//		return val;
+//	}
+	
+	/**
+	 * This method needs to be called whenever the validation configuration has changed.
+	 */
+	private void configHasChanged(){
+		_configNumber.incrementAndGet();
+		ValidatorProjectManager.reset();
+		_cache.reset();
+	}
+		
+	/**
+	 * Answer the global validation preferences.
+	 */
+	public GlobalPreferences getGlobalPreferences(){
+		GlobalPreferences gp = _globalPreferences.get();
+		if (gp == null){
+			ValPrefManagerGlobal vpm = ValPrefManagerGlobal.getDefault();
+			gp = vpm.loadGlobalPreferences();
+			if (!_globalPreferences.compareAndSet(null, gp))gp = _globalPreferences.get();
+		}
+		return gp;
+	}
+	
+	/**
+	 * Update the global preferences, but only if something has actually changed.
+	 * @param values The global settings.
+	 * @return a bit mask of the changes between the old values and the new values. See the GlobalPreferences
+	 * constants for the bit mask values. If a zero is return there were no changes.
+	 */
+	public int replace(GlobalPreferencesValues values){
+		GlobalPreferences gp = new GlobalPreferences(values);
+		GlobalPreferences old = getGlobalPreferences();
+		int changes = old.compare(gp);
+		if (changes != 0){
+			_globalPreferences.set(gp);
+		}
+		return changes;
+	}
+		
+	/**
+	 * Answer the project preferences for this project.
+	 * @param project The project, this may be null.
+	 */
+	public ProjectPreferences getProjectPreferences(IProject project) {
+		ProjectPreferences pp = _projectPreferences.get(project);
+		if (pp != null)return pp;
+		
+		/* hopefully we rarely get this far */
+		
+		Map<String,Validator> extVals = ExtensionValidators.instance().getMapV2Copy();
+		try {
+			List<Validator> vals = ValPrefManagerGlobal.getDefault().getValidators();
+			for (Validator v : vals)extVals.put(v.getId(), v);
+			
+			pp = getProjectPreferences(project, extVals);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}	
+		return pp;
+	}
+
+	/**
+	 * 
+	 * @param project The project, this may be null.
+	 * @param baseValidators
+	 */
+	private ProjectPreferences getProjectPreferences(IProject project, Map<String, Validator> baseValidators) 
+		throws BackingStoreException {
+		ProjectPreferences pp = _projectPreferences.get(project);
+		if (pp != null)return pp;
+		
+		ValPrefManagerProject vpm = new ValPrefManagerProject(project);
+		pp = vpm.loadProjectPreferences(project, baseValidators);
+		_projectPreferences.put(project, pp);
+		return pp;		
+	}
+		
+	/**
+	 * Restore all the validation defaults, as defined by the individual validators via the
+	 * validation extension point.
+	 */
+//	public synchronized void restoreDefaults() {
+//		getGlobalPreferences().resetToDefault();
+//		_validators = null;
+//		getValidators(true);
+//	}
+	
+
+	/**
+	 * Run all the validators that are applicable to this resource.
+	 * <p>
+	 * If this is a manual validation both the version 1 and version 2 validators are run. If it
+	 * is a build validation, then only the version 2 validators are run, because the old framework handles
+	 * the running of the old validators.
+	 * </p>
+	 * 
+	 * @param project project that is being validated
+	 * 
+	 * @param resource the resource that is being validated
+	 * 
+	 * @param kind the kind of resource delta. It will be one of the IResourceDelta constants, like
+	 * IResourceDelta.CHANGED for example.
+	 * 
+	 * @param valType The type of validation request.
+	 * @param buildKind the kind of build that triggered this validation. See IncrementalProjectBuilder for values.
+	 * @param operation the operation that this validation is running under
+	 * @param monitor the monitor to use to report progress 
+	 */
+	public void validate(IProject project, final IResource resource, final int kind, ValType valType, 
+		int buildKind, ValOperation operation, final IProgressMonitor monitor) {
+		
+		MarkerManager.getDefault().deleteMarkers(resource, operation.getStarted(), IResource.DEPTH_ZERO);
+		
+		IValidatorVisitor visitor = new IValidatorVisitor(){
+
+			public void visit(Validator validator, IProject project, ValType vt,
+				ValOperation operation, IProgressMonitor monitor) {
+								
+				Validator.V1 v1 = validator.asV1Validator();
+				if (vt == ValType.Build && v1 != null)return;
+				
+				SubMonitor subMonitor = SubMonitor.convert(monitor);
+				String task = NLS.bind(ValMessages.LogValStart, validator.getName(), resource.getName());
+				subMonitor.beginTask(task, 1);
+				validate(validator, operation, resource, kind, subMonitor.newChild(1), null);
+			}			
+		};
+		SubMonitor sm = SubMonitor.convert(monitor, getValidators(project).length);
+		accept(visitor, project, resource, valType, operation, sm);
+		
+	}
+	
+	/**
+	 * Validate a single resource with a single validator. This will call the validator whether the validator
+	 * is enabled or not.
+	 * <p>
+	 * Callers of this method should ensure that the shouldValidate was tested before making this call.
+	 * 
+	 * @param validator the validator
+	 * @param operation the operation that the validation is running in.
+	 * @param resource the resource to validate
+	 * @param kind the kind of resource change. See IResourceDelta.
+	 * @param monitor
+	 */
+	public void validate(Validator validator, ValOperation operation, IResource resource, int kind, 
+			IProgressMonitor monitor, ValidationEvent event){
+		if (operation.isValidated(validator.getId(), resource))return;
+		long time = 0;
+		long cpuTime = -1;
+		String msg1 = NLS.bind(ValMessages.LogValStart, validator.getName(), resource.getName());
+		monitor.subTask(msg1);
+		IPerformanceMonitor pm = ValidationFramework.getDefault().getPerformanceMonitor();
+		if (pm.isCollecting()){
+			time = System.currentTimeMillis();
+			cpuTime = Misc.getCPUTime();
+		}
+		
+		if (Tracing.matchesExtraDetail(validator.getId())){
+			Tracing.log("ValManager-03: validating ", resource); //$NON-NLS-1$
+		}
+		ValidationResult vr = validator.validate(resource, kind, operation, monitor, event);
+		if (pm.isCollecting()){
+			if (cpuTime != -1){
+				cpuTime = Misc.getCPUTime() - cpuTime;
+			}
+			int num = 0;
+			if (vr != null)num = vr.getNumberOfValidatedResources();
+			PerformanceCounters pc = new PerformanceCounters(validator.getId(), 
+				validator.getName(), resource.getName(),
+				num, System.currentTimeMillis()-time, cpuTime);
+			pm.add(pc);
+		}
+		if (ValidationPlugin.getPlugin().isDebugging() && !pm.isCollecting()){
+			String msg = time != 0 ? 
+				NLS.bind(ValMessages.LogValEndTime,	new Object[]{validator.getName(), 
+					validator.getId(), resource, Misc.getTimeMS(System.currentTimeMillis()-time)}) :
+				NLS.bind(ValMessages.LogValEnd, validator.getName(), resource);
+			Tracing.log("ValManager-01: " + msg); //$NON-NLS-1$
+		}
+		if (vr != null){
+			operation.mergeResults(vr);
+			if (vr.getSuspendValidation() != null)operation.suspendValidation(vr.getSuspendValidation(), validator);
+		}
+	}
+	
+	/**
+	 * Accept a visitor for all the validators that are enabled for the given project.
+	 * 
+	 * @param visitor
+	 * @param project
+	 * @param valType the type of validation
+	 * @param operation
+	 * @param monitor
+	 */
+	public void accept(IValidatorVisitor visitor, IProject project, ValType valType, 
+		ValOperation operation, IProgressMonitor monitor){
+		
+		if (isDisabled(project))return;
+		
+		for (Validator val : getValidators(project)){
+			if (monitor.isCanceled())return;
+			if (!ValidatorProjectManager.get().shouldValidate(val, project, valType))continue;
+			if (operation.isSuspended(val, project))continue;
+			try {
+				visitor.visit(val, project, valType, operation, monitor);
+			}
+			catch (Exception e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+		}		
+	}
+	
+	/**
+	 * Accept a visitor for all the validators that are enabled for the given project, resource, 
+	 * and validation mode.
+	 * 
+	 * @param valType the type of validation request
+	 */
+	public void accept(IValidatorVisitor visitor, IProject project, IResource resource, 
+			ValType valType, ValOperation operation, IProgressMonitor monitor){
+		
+		if (isDisabled(project))return;
+		
+		Map<String,IValidatorGroupListener[]> groupListeners = new HashMap<String,IValidatorGroupListener[]>();
+		
+		ValProperty vp = getValProperty(resource, valType, _configNumber.get());
+		if (vp != null){
+			BitSet bs = vp.getConfigSet();
+			for (Validator val : getValidators(project)){
+				if (!monitor.isCanceled()) {
+					if (!bs.get(_idManager.getIndex(val.getId())))continue;
+					if (operation.isSuspended(val, project))continue;
+					Validator.V2 v2 = val.asV2Validator();
+					if (v2 != null) {
+						notifyGroupListenersStarting(resource, operation.getState(), monitor, groupListeners, v2);
+					}
+					try {
+						visitor.visit(val, project, valType, operation, monitor);
+					}
+					catch (Exception e){
+						ValidationPlugin.getPlugin().handleException(e);
+					}
+				}
+			}
+			notifyGroupFinishing(resource, operation.getState(), monitor, groupListeners);
+			return;
+		}
+		
+		vp = new ValProperty();
+		vp.setConfigNumber(_configNumber.get());
+		ContentTypeWrapper ctw = new ContentTypeWrapper();
+		for (Validator val : getValidators(project)){
+			if (!monitor.isCanceled()) {
+				if (!ValidatorProjectManager.get().shouldValidate(val, project, valType))continue;
+				if (Friend.shouldValidate(val, resource, valType, ctw)){
+					vp.getConfigSet().set(_idManager.getIndex(val.getId()));
+					// we do the suspend check after figuring out if it needs to be validated, because we save
+					// this information for the session.
+					if (operation.isSuspended(val, project))continue;
+					Validator.V2 v2 = val.asV2Validator();
+					if (v2 != null) {
+						notifyGroupListenersStarting(resource, operation.getState(), monitor, groupListeners, v2);
+					}
+					try {
+						visitor.visit(val, project, valType, operation, monitor);
+					}
+					catch (Exception e){
+						ValidationPlugin.getPlugin().handleException(e);
+					}
+				}
+			}
+		}
+		notifyGroupFinishing(resource, operation.getState(), monitor, groupListeners);
+		putValProperty(vp, resource, valType);
+	}
+
+	/**
+	 * Let the group listeners know that validation might be starting for the group of validators. 
+	 */
+	private void notifyGroupListenersStarting(final IResource resource,	 
+			final ValidationState state, final IProgressMonitor monitor, 
+			Map<String, IValidatorGroupListener[]> groupListeners, Validator.V2 v2) {
+		
+		String[] groups = v2.getValidatorGroups();
+		for (String group : groups) {
+			if (!groupListeners.containsKey(group)) {
+				IValidatorGroupListener[] createdListeners = null;
+				try {
+					createdListeners = ValidatorGroupExtensionReader.getDefault().createListeners(group);
+				}
+				catch (CoreException e){
+					String msg = NLS.bind(ValMessages.ErrConfig, v2.getId());
+					Status status = new Status(IStatus.ERROR, ValidationPlugin.PLUGIN_ID, msg);
+					CoreException core = new CoreException(status);
+					ValidationPlugin.getPlugin().handleException(core);
+					ValidationPlugin.getPlugin().handleException(e);
+					
+					// we create this to ensure that we don't signal the same exception over and over. 
+					createdListeners = new IValidatorGroupListener[0];
+				}
+				
+				// create and notify just this once
+				final IValidatorGroupListener[] listeners = createdListeners;
+					
+				groupListeners.put(group, listeners);
+				for (final IValidatorGroupListener listener : listeners) {
+					SafeRunner.run(new ISafeRunnable() {
+						public void run() throws Exception {
+							listener.validationStarting(resource, monitor, state);
+						}
+
+						public void handleException(Throwable exception) {
+							ValidationPlugin.getPlugin().handleException(exception);
+						}
+					});
+				}
+			}
+		}
+	}
+
+	/**
+	 * Let the group listeners know that validation is finished for the group of validators. 
+	 */
+	private void notifyGroupFinishing(final IResource resource, 
+			final ValidationState state, final IProgressMonitor monitor,
+			Map<String, IValidatorGroupListener[]> groupListeners) {
+		for (final IValidatorGroupListener[] listeners : groupListeners.values()) {
+			for (final IValidatorGroupListener listener : listeners) {
+				SafeRunner.run(new ISafeRunnable() {
+					public void run() throws Exception {
+						listener.validationFinishing(resource, monitor, state);
+					}
+
+					public void handleException(Throwable exception) {
+						ValidationPlugin.getPlugin().handleException(exception);
+					}
+				});
+			}
+		}
+	}
+
+	private ValProperty getValProperty(IResource resource, ValType valType, int configNumber) {
+		ValProperty vp = null;
+		try {
+			if (valType == ValType.Build)vp = (ValProperty)resource.getSessionProperty(StatusBuild);
+			else if (valType == ValType.Manual)vp = (ValProperty)resource.getSessionProperty(StatusManual);
+		}
+		catch (CoreException e){
+			// don't care about this one
+		}
+		if (vp == null)return null;
+		if (vp.getConfigNumber() != _configNumber.get())return null;
+		return vp;
+	}
+	
+	/**
+	 * Let the validation manager know that a project has been changed.
+	 * 
+	 * @param project The project that has been opened, created, or had it's description change.
+	 */
+	public void projectChanged(IProject project){
+		ValidatorProjectManager.reset();
+		_projectPreferences.remove(project);
+		_cache.reset(project);
+	}
+	
+	/**
+	 * Let the validation manager know that a project has been removed.
+	 * 
+	 * @param project The project that has been closed or deleted.
+	 * 
+	 */
+	public void projectRemoved(IProject project){
+		ValidatorProjectManager.reset();
+		_projectPreferences.remove(project);
+		_cache.reset(project);
+	}
+	
+	private void putValProperty(ValProperty vp, IResource resource, ValType valType) {
+		try {
+			if (valType == ValType.Build)resource.setSessionProperty(StatusBuild, vp);
+			else if (valType == ValType.Manual)resource.setSessionProperty(StatusManual, vp);
+		} 
+		catch (CoreException e) {
+	        // If the resource is not found, it is likely just been deleted 
+	        // and there is no need to do anything. 
+	        // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=269022
+	        if (!e.getStatus().equals(IResourceStatus.RESOURCE_NOT_FOUND)) {
+	                ValidationPlugin.getPlugin().handleException(e, IStatus.WARNING);
+	        }
+		}
+	}
+
+	/**
+	 * Let each of the enabled validators know that a clean has been requested.
+	 * 
+	 * @param project the project that is being cleaned, or null if the entire workspace is being cleaned.
+	 * @param monitor
+	 */
+	void clean(final IProject project, final ValOperation operation, final IProgressMonitor monitor) {
+		IValidatorVisitor visitor = new IValidatorVisitor(){
+
+			public void visit(Validator validator, IProject project, ValType valType,
+				ValOperation operation, IProgressMonitor monitor) {
+				validator.clean(project, operation, monitor);					
+			}
+			
+		};
+		accept(visitor, project, ValType.Build, operation, monitor);
+	}
+	
+	/**
+	 * Let each of the enabled validators know that a clean has been requested.
+	 * 
+	 * @param project the project that is being cleaned, or null if the entire workspace is being cleaned.
+	 * @param monitor
+	 */
+	public void clean(IProject project, IProgressMonitor monitor){
+		IValidatorVisitor visitor = new IValidatorVisitor(){
+
+			public void visit(Validator validator, IProject project, ValType valType,
+				ValOperation operation, IProgressMonitor monitor) {
+				validator.clean(project, operation, monitor);					
+			}
+			
+		};
+		ValidationFramework.getDefault().getDependencyIndex().clear(project);
+		ValOperation operation = new ValOperation();
+		accept(visitor, project, ValType.Build, operation, monitor);
+	}
+
+	public void validatorsForProjectChanged(IProject project, boolean validationSettingChanged) {
+		if (validationSettingChanged){
+			if (project != null)_projectPreferences.remove(project);
+			configHasChanged();
+		}
+	}
+	
+	private final class HasValidatorVisitor implements IResourceVisitor {
+		
+		private boolean 			_hasValidator;
+		private final boolean		_isManual;
+		private final boolean		_isBuild;
+		
+		public HasValidatorVisitor(boolean isManual, boolean isBuild){
+			_isManual = isManual;
+			_isBuild = isBuild;			
+		}
+		
+		public boolean hasValidator(IFolder folder){
+			try {
+				folder.accept(this);
+			}
+			catch (CoreException e){
+				ValidationPlugin.getPlugin().handleException(e);
+			}
+			return _hasValidator;
+		}
+
+		public boolean visit(IResource resource) throws CoreException {
+			if (resource instanceof IFolder)return true;
+			if (hasValidators(resource, _isManual, _isBuild)){
+				_hasValidator = true;
+				return false;
+			}
+			return true;
+		}
+	}
+	
+	/**
+	 * Map validator id's to an index number on a bit set, so that we can quickly determine if a
+	 * particular validator needs to validate a particular resource.
+	 * @author karasiuk
+	 *
+	 */
+	private final static class ValidatorIdManager {
+		
+		/**
+		 * Map validator id's to Integers. The integers correspond to bits in the ValProperty instances.
+		 */
+		private final Map<String, Integer> _map = new HashMap<String, Integer>(100);
+		private final Map<Integer, String> _reverseMap = new HashMap<Integer, String>(100);
+		
+		/** Next available bit. */
+		private int _next;
+		
+		/**
+		 * Answer the index number for this validator. If we haven't seen it yet allocate a new index number.
+		 * @param id validator id.
+		 * @return index into the validator bit mask.
+		 */
+		public synchronized int getIndex(String id){
+			Integer i = _map.get(id);
+			if (i != null)return i;
+			
+			i = _next++;
+			_map.put(id, i);
+			_reverseMap.put(i, id);
+			
+			return i;
+		}
+		
+		/**
+		 * Answer the validator id for the index.
+		 * @param index
+		 * @return null if the index number has not been set.
+		 */
+		public synchronized String getId(Integer index){
+			return _reverseMap.get(index);
+		}
+		
+		public synchronized void reset(){
+			_map.clear();
+			_reverseMap.clear();
+			_next = 0;
+		}
+		
+		/**
+		 * Answer the ids for the bit in the bitset. This is used for debugging. 
+		 * @param bs
+		 */
+		public synchronized String[] getIds(BitSet bs){
+			List<String> list = new LinkedList<String>();
+			for(int i=bs.nextSetBit(0); i>=0; i=bs.nextSetBit(i+1)) {
+				String id = getId(i);
+				if (id != null)list.add(id);
+			}
+			String[] s = new String[list.size()];
+			return list.toArray(s);
+		}		
+	}
+	
+	/**
+	 * This is used to keep track of which validators are enabled with which projects. We want to ensure
+	 * that we don't activate a validator (and it's plug-in) if it has nothing to validate in the workspace.
+	 * This is an immutable object.
+	 * @author karasiuk
+	 *
+	 */
+	private final static class ValidatorProjectManager {
+		
+		private final static AtomicReference<ValidatorProjectManager> _me = new AtomicReference<ValidatorProjectManager>();
+		private final static AtomicInteger _counter = new AtomicInteger();
+		
+		private final ValProjectMap _manual = new ValProjectMap(ValType.Manual);
+		private final ValProjectMap _build = new ValProjectMap(ValType.Build);
+		private final int _sequence;
+		
+		/**
+		 * Answer the most current ValidatorProjectManager creating a new one if you have to.
+		 * @return
+		 */
+		public static ValidatorProjectManager get(){
+			ValidatorProjectManager vpm = _me.get();
+			if (vpm != null)return vpm;
+			
+			int next = _counter.incrementAndGet();
+			ValidatorProjectManager newVpm = null;
+			boolean looking = true;
+			while(looking){
+				vpm = _me.get();
+				if (vpm == null || next > vpm.getSequence()){
+					if (newVpm == null)newVpm = new ValidatorProjectManager(next);
+					if (_me.compareAndSet(vpm, newVpm))return newVpm;
+				}
+				else looking = false;
+			}
+			return vpm;
+		}
+		
+		/**
+		 * Reset the ValidatorProjectManager to null, which will force a newer one to be created the next time
+		 * that it is requested.
+		 */
+		public static void reset(){
+			int next = _counter.incrementAndGet();
+			ValidatorProjectManager vpm = _me.get();
+			if ( vpm == null)return;
+			if (next > vpm.getSequence())_me.compareAndSet(vpm, null);
+		}
+		
+		private ValidatorProjectManager(int sequence){
+			_sequence = sequence;
+		}
+		
+		int getSequence(){
+			return _sequence;
+		}
+		
+		/**
+		 * Should this validator attempt to validate any resources in this project?
+		 * 
+		 * @param validator
+		 *            The validator that is being tested.
+		 * @param project
+		 *            The project that is being tested. This can be null, which
+		 *            means that all projects will be tested.
+		 * @param type
+		 *            The type of validation operation.
+		 * @return true if the validator should attempt to validate.
+		 */
+		public boolean shouldValidate(Validator validator, IProject project, ValType type){
+			if (type == ValType.Build)return _build.shouldValidate(validator, project);
+			if (type == ValType.Manual)return _manual.shouldValidate(validator, project);
+				
+			return false;
+		}		
+				
+		/**
+		 * This is used to keep track of which validators are enabled for which projects. We want to ensure
+		 * that we don't activate a validator (and it's plug-in) if it has nothing to validate in the workspace.
+		 * <p>
+		 * There are two reasons why a validator may not be enabled. It's current project level filters may not match
+		 * the project. Or the entire validator may have been turned off for the project. 
+		 * </p>
+		 * @author karasiuk
+		 *
+		 */
+		private final static class ValProjectMap {
+			/**
+			 * Map a validator to the projects that it validates. This is an immutable object.
+			 * <p>
+			 * I've gone back and forth on whether the key should
+			 * be a Validator or the validator id. I'm back to it being the id because I was
+			 * running into cases where because of copying I wasn't getting the matches that I expected and I
+			 * want to ensure that I don't leak validators. If I run into
+			 * false matches, it is probably because reset isn't being called when it should be.
+			 * </p>
+			 */
+			private final Map<String, Set<IProject>> _map;
+			
+			private final ValType _type;
+						
+			public ValProjectMap(ValType type){
+				_type = type;
+				_map = load();
+			}
+			
+			/**
+			 * Should this validator attempt to validate any resources in this project?
+			 * 
+			 * @param validator
+			 *            The validator that is being tested.
+			 * @param project
+			 *            The project that is being tested. This can be null, which
+			 *            means that all projects will be tested, and if any of them return true, 
+			 *            then true is answered for this method.
+			 *            
+			 * @return true if the validator should attempt to validate.
+			 */
+			public boolean shouldValidate(Validator validator, IProject project){
+				String vid = validator.getId();
+				Set<IProject> projects = _map.get(vid);
+				if (projects == null)return false;
+				if (project == null)return projects.size() > 0;
+				return projects.contains(project);
+			}
+			
+			/**
+			 * For each of the projects in the workspace, load which validators are currently prepared to validate things.
+			 */
+			private Map<String, Set<IProject>> load() {
+				Map<String, Set<IProject>> map = new HashMap<String, Set<IProject>>(50);
+				ValManager vm = ValManager.getDefault();
+				IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+				Tracing.log("ValManager-02: loading " + projects.length + " projects");  //$NON-NLS-1$//$NON-NLS-2$
+				for (IProject project : projects){
+					if (!project.isOpen())continue;
+					Validator[] vals = vm.getValidators(project);
+					for (Validator v : vals){
+						String vid = v.getId();
+						Set<IProject> set = map.get(vid);
+						if (set == null){
+							set = new HashSet<IProject>(50);
+							map.put(vid, set);
+						}
+						
+						if (v.shouldValidateProject(project, _type))set.add(project);
+					}					
+				}
+				return map;
+			}
+			
+		}
+		
+	}
+
+	public void handleEvent(IFacetedProjectEvent event) {
+		projectChanged(event.getProject().getProject());
+	}
+
+	public void projectChanged(IProject project, int type) {
+		switch (type){
+		case IProjectChangeListener.ProjectClosed:
+		case IProjectChangeListener.ProjectDeleted:
+			projectRemoved(project);
+			break;
+		case IProjectChangeListener.ProjectOpened:
+		case IProjectChangeListener.ProjectChanged:
+		case IProjectChangeListener.ProjectAdded:
+			projectChanged(project);
+			break;
+		}		
+	}
+	
+	/**
+	 * Store the singleton for the ValManager. This approach is used to avoid having to synchronize the
+	 * ValManager.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private static class Singleton {
+		static ValManager valManager = new ValManager();
+	}
+	
+	private final class ValidatorCache {
+		private final ConcurrentMap<IProject, Validator[]> _cache = new ConcurrentHashMap<IProject, Validator[]>(50);
+		private final AtomicReference<Validator[]> _global = new AtomicReference<Validator[]>();
+		
+		public Validator[] getValidatorsCached(IProject project) throws ProjectUnavailableError {
+			Validator[] vals = null;
+			if (project == null){
+				vals = _global.get();
+				if (vals == null){				
+					vals = getValidatorsNotCached(project);
+					_global.set(vals);
+				}
+			}
+			else {
+				vals = _cache.get(project);
+				if (vals == null){
+					vals = getValidatorsNotCached(project);
+					_cache.put(project, vals);
+				}
+			}
+			return vals;
+		}
+		
+		public void reset(){
+			_cache.clear();
+			_global.set(null);
+		}
+		
+		public void reset(IProject project){
+			if (project != null)_cache.remove(project);
+		}
+
+	}
+	
+	public enum UseProjectPreferences {Normal, MustUse, MustNotUse}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java
new file mode 100644
index 0000000..02aabe1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import org.eclipse.osgi.util.NLS;
+
+public class ValMessages extends NLS {
+	
+	private static final String BUNDLE_NAME = "org.eclipse.wst.validation.internal.messages"; //$NON-NLS-1$
+	   
+	public static String ConfigError;
+	
+	public static String DecodeError1;
+	public static String Error20;
+	
+	public static String ErrConfig;	
+	public static String ErrFilterRule;	  
+	public static String ErrGroupName;
+	public static String ErrDependencyVersion;
+	
+	public static String ErrGroupNoType;
+	public static String ErrGroupInvalidType;
+	
+	public static String ErrPatternAttrib;
+	public static String ErrTypeReq;
+	public static String ErrType;
+	
+	public static String VbfExcSyntaxNoValClass;
+	public static String VbfExcSyntaxNoValRun;
+	public static String VbfExcSyntaxNoValNull;
+	
+	public static String GroupInclude;
+	
+	public static String GroupExclude;
+	
+	public static String JobName;
+	public static String JobNameMonitor;
+	
+	public static String JobIndexSave;
+	
+	public static String LogValStart;
+	public static String LogValEnd;
+	public static String LogValEndTime;
+	public static String LogValSummary;
+	public static String LogValSummary2;
+	public static String LogSession;
+	
+	public static String MigrationJobName;
+	
+	public static String RuleProjectNature;
+	public static String RuleFileExt;
+	public static String RuleFile;
+	public static String RuleFolder;
+	public static String RuleFull;
+	public static String RuleContentType;
+	public static String RuleFacet;
+	
+	public static String ContentTypeExact;
+	public static String ContentTypeNotExact;
+	
+	public static String FileExtWithCase;
+	public static String FileExtWithoutCase;
+
+	public static String SevError;
+	public static String SevWarning;
+	public static String SevIgnore;
+
+	public static String TimeUnder;
+	public static String TimeNano;
+	public static String TimeMicro;
+	public static String TimeSec;
+	public static String TimeMin;
+	
+	public static String TypeInclude;
+	public static String TypeExclude;
+	
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, ValMessages.class);
+	  }
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValOperation.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValOperation.java
new file mode 100644
index 0000000..44c78ec
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValOperation.java
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationResults;
+import org.eclipse.wst.validation.ValidationState;
+import org.eclipse.wst.validation.Validator;
+
+/**
+ * This represents a validation operation, i.e. the running of a set of validators in response to some change. 
+ * It may be a large operation, as would happen on a clean build, or it may be the validation of just a single
+ * resource.
+ * <p>
+ * The operation can, but doesn't need to, span multiple projects.
+ * </p>
+ * <p>
+ * Once the operation has finished, this object goes away.
+ * </p>     
+ * @author karasiuk
+ *
+ */
+public final class ValOperation {
+	
+	private final ValidationState 	_state = new ValidationState();
+	private final ValidationResult	_result = new ValidationResult();
+	
+	/**
+	 * Each project can have a set of validators that are suspended for the duration of the validation operation.
+	 * The set contains the validator's id.
+	 */
+	private final Map<IProject, Set<String>> _suspended = new HashMap<IProject, Set<String>>(40);
+	
+	/** The time that the operation started. */
+	private final long	_started = System.currentTimeMillis();
+	
+	/** 
+	 * Are we in a multi project validation? That is, could we be validating several
+	 * projects at the same time? This can be triggered by either clean all or 
+	 * if auto build is turned off, a build all. 
+	 */
+	private final boolean	_multiProject;
+	
+	/** 
+	 * Holds all the resources that have been validated as a side-effect of running other validations.
+	 * The key is the validator id and the value is a Set of IResources.
+	 */
+	private final Map<String, Set<IResource>> 	_validated = new HashMap<String, Set<IResource>>(20);
+	
+	public ValOperation(){
+		_multiProject = false;
+	}
+	
+	/**
+	 * 
+	 * @param multiProject Set to true if we could be validating several projects at the same time.
+	 */
+	public ValOperation(boolean multiProject){
+		_multiProject = multiProject;
+	}
+	
+	public ValidationState getState() {
+		return _state;
+	}
+	
+	/**
+	 * Answer a summary of the validation results.
+	 * @return
+	 */
+	public ValidationResultSummary getResult() {
+		synchronized(_result){
+			ValidationResultSummary vrs = new ValidationResultSummary(_result.getSeverityError(), 
+				_result.getSeverityWarning(), _result.getSeverityInfo());
+			return vrs;
+		}
+	}
+		
+	/**
+	 * Answer a copy of the ValidationResult.
+	 * @return
+	 */
+	public ValidationResults getResults(){
+		return new ValidationResults(_result);
+	}
+	
+	/**
+	 * Remember that this resource has already been validated as a side-effect.
+	 *  
+	 * @param id id of the validator
+	 * @param resource resource that has been validated.
+	 */
+	public void addValidated(String id, IResource resource){
+		synchronized(_validated){
+			Set<IResource> set = _validated.get(id);
+			if (set == null){
+				set = new HashSet<IResource>(20);
+				_validated.put(id, set);
+			}
+			set.add(resource);
+		}
+	}
+	
+	/**
+	 * Answer if this resource has already been validated as a side-effect of some other validation by the
+	 * given validator.
+	 * 
+	 * @param id
+	 * @param resource
+	 */
+	public boolean isValidated(String id, IResource resource){
+		synchronized(_validated){
+			Set<IResource> set = _validated.get(id);
+			if (set == null)return false;
+			
+			return set.contains(resource);
+		}
+	}
+
+	/**
+	 * Has this validator been suspended for the duration of this operation on this project?
+	 * 
+	 * @param val
+	 *            The validator that is being checked.
+	 * @param project
+	 *            Can be null, in which case we return false.
+	 * 
+	 * @return true if this validator should not run on this project.
+	 */
+	public boolean isSuspended(Validator val, IProject project) {
+		if (project == null)return false;
+		synchronized(_suspended){
+			Set<String> set = getSuspended(project);		
+			return set.contains(val.getId());
+		}
+	}
+	
+	private Set<String> getSuspended(IProject project){
+		Set<String> set = _suspended.get(project);
+		if (set == null){
+			set = new HashSet<String>(5);
+			_suspended.put(project, set);
+		}
+		return set;
+	}
+
+	void suspendValidation(IProject project, Validator validator) {
+		if (project == null)return;
+		if (validator == null)return;
+		getSuspended(project).add(validator.getId());
+	}
+
+	public long getStarted() {
+		return _started;
+	}
+
+	public boolean isMultiProject() {
+		return _multiProject;
+	}
+
+	/**
+	 * Indicate if the operation was canceled.
+	 * 
+	 * @param canceled
+	 * 		Set to true if it was canceled and false if it was not canceled.
+	 */
+	public void setCanceled(boolean canceled) {
+		synchronized (_result) {
+			_result.setCanceled(canceled);
+		}
+		
+	}
+
+	/**
+	 * Was the operation canceled before it completed? For example if the validation is being run through the
+	 * user interface, the end user can cancel the operation through the progress monitor.
+	 * 
+	 * @return true if the operation was canceled
+	 */
+	public boolean isCanceled() {
+		synchronized (_result) {
+			return _result.isCanceled();
+		}
+	}
+
+	public void mergeResults(ValidationResult vr) {
+		synchronized (_result) {
+			_result.mergeResults(vr);
+		}
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerGlobal.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerGlobal.java
new file mode 100644
index 0000000..5fcbaf3
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerGlobal.java
@@ -0,0 +1,653 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.wst.validation.Friend;
+import org.eclipse.wst.validation.MessageSeveritySetting;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.Validator.V2;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+import org.eclipse.wst.validation.internal.model.GlobalPreferences;
+import org.eclipse.wst.validation.internal.model.GlobalPreferencesValues;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * A class that knows how to manage the global persisted validation settings.
+ * @author karasiuk
+ */
+public final class ValPrefManagerGlobal {
+	
+	/** 
+	 * Version of the framework properties.
+	 * <ul>
+	 * <li>Version 2 - used the filter approach
+	 * <li>Version 3 - switched to a difference based approach. (See Bugzilla 224179)
+	 * </ul>
+	 * 
+	 */
+	public final static int frameworkVersion = 3;
+	
+	private final Set<IValChangedListener> _listeners = new CopyOnWriteArraySet<IValChangedListener>();
+	
+	private final AtomicReference<List<Validator>> _validators = new AtomicReference<List<Validator>>();
+	
+	private ValPrefManagerGlobal(){}
+	
+	public static ValPrefManagerGlobal getDefault(){
+		return Singleton.valPrefManagerGlobal;
+	}
+	
+	public void addListener(IValChangedListener listener){
+		_listeners.add(listener);
+	}
+	
+	public void removeListener(IValChangedListener listener){
+		_listeners.remove(listener);
+	}
+	
+	private void updateListeners(boolean validationSettingChanged){
+		for (IValChangedListener cl : _listeners)cl.validatorsForProjectChanged(null, validationSettingChanged); 
+	}
+			
+	/**
+	 * Update the validator filters from the preference store.
+	 *  
+	 * @param val
+	 * 
+	 * @return false if there are no preferences, that means that the user has never changed any
+	 * of the default settings. Also answer false if there was some sort of error, which essentially
+	 * means that the preferences aren't valid for whatever reason.   
+	 * 
+	 * @deprecated
+	 */
+//	public boolean loadPreferences(Validator[] val) {
+//	
+//		try {
+//			IEclipsePreferences pref = ValidationFramework.getDefault().getPreferenceStore();
+//			if (!pref.nodeExists(PrefConstants.filters))return false;
+//		
+//			Preferences filters = pref.node(PrefConstants.filters);
+//			for (Validator v : val){
+//				String id = v.getId();
+//				if (filters.nodeExists(id)){
+//					Preferences vp = filters.node(id);
+//					loadPreferences(v, vp);
+//				}
+//			}			
+//		}
+//		catch (Exception e){
+//			ValidationPlugin.getPlugin().handleException(e);
+//			return false;
+//		}
+//		
+//		return true;
+//	}
+	
+	/**
+	 * Answer the v2 validators that have been overridden by the global preferences.
+	 */
+	public List<Validator> getValidators() throws BackingStoreException {
+		List<Validator> vals = _validators.get();
+		while (vals == null){
+			vals = loadValidators();
+			if (!_validators.compareAndSet(null, vals))vals = _validators.get();
+		}
+		return vals;
+	}
+	
+	/**
+	 * Load the validators from the preference store.
+	 * @return the validators that have been overridden by the global references.
+	 */
+	private List<Validator> loadValidators() throws BackingStoreException {
+		LinkedList<Validator> list = new LinkedList<Validator>();
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, null);
+		if (pref.nodeExists(PrefConstants.vals)){
+			PreferencesWrapper vals = pref.node(PrefConstants.vals);
+			for (String id : vals.childrenNames()){
+				Validator base = ExtensionValidators.instance().getMapV2().get(id);
+				Validator v = loadValidator(id, vals, base);
+				if (v != null){
+					V2 v2 = v.asV2Validator();
+					if (v2 != null)v2.setLevel(Validator.Level.Global);					
+					list.add(v);
+				}
+			}
+		}
+		return list;
+	}
+
+	/**
+	 * Answer a copy of the validator that has been updated with the given preferences.
+	 * 
+	 * @param id
+	 *            Validator id.
+	 * @param valsNode
+	 *            The /vals node in the preference store.
+	 * @param base
+	 *            The base validator that is being customized. This can be null,
+	 *            in which case null will be returned.
+	 * 
+	 * @return A new validator that is a copy of the extension point validator
+	 *         with the updates from the preference store.
+	 */
+	static Validator loadValidator(String id, PreferencesWrapper valsNode, Validator base) {
+		if (base == null)return null;
+		
+		PreferencesWrapper vp = valsNode.node(id);
+		base = base.copy();
+		V2 v2 = base.asV2Validator();
+
+		String global = vp.get(PrefConstants.global, ""); //$NON-NLS-1$
+		if (global.length() > 0){
+		Global g = new Global(global);
+			base.setBuildValidation(g.isBuild());
+			base.setManualValidation(g.isManual());
+			base.setDelegatingId(g.getDelegating());
+		}
+		
+		if (v2 != null){
+			String groups = vp.get(PrefConstants.groups, ""); //$NON-NLS-1$
+			if (groups.length() > 0){
+				List<FilterGroup> list = new LinkedList<FilterGroup>();
+				Deserializer des = new Deserializer(groups);
+				while(des.hasNext())list.add(FilterGroup.create(des));
+				v2.setGroups(list);
+			}
+		}					
+		return base;
+	}
+
+	/**
+	 * The only valid way to get the global preferences is through the ValManager.
+	 * 
+	 * @see ValManager#getGlobalPreferences()
+	 */
+	public GlobalPreferences loadGlobalPreferences() {
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, null);
+		GlobalPreferencesValues gp = new GlobalPreferencesValues();
+		gp.saveAutomatically = pref.getBoolean(PrefConstants.saveAuto, GlobalPreferences.DefaultAutoSave);
+		gp.disableAllValidation = pref.getBoolean(PrefConstants.suspend, GlobalPreferences.DefaultSuspend);
+		gp.confirmDialog = pref.getBoolean(PrefConstants.confirmDialog, GlobalPreferences.DefaultConfirm);
+		gp.override = pref.getBoolean(PrefConstants.override, GlobalPreferences.DefaultOverride);
+		gp.version = pref.getInt(PrefConstants.frameworkVersion, GlobalPreferences.DefaultFrameworkVersion);
+		gp.stateTimeStamp = pref.getLong(PrefConstants.stateTS, 0);
+		
+		if (gp.version != frameworkVersion)migrate(gp.version, pref);
+		return new GlobalPreferences(gp);
+	}
+	
+	/**
+	 * If necessary migrate the preferences.
+	 * @param version The incoming version of the preferences.
+	 * @param pref the root of the preference store
+	 */
+	static void migrate(int version, PreferencesWrapper pref) {
+		try {
+			boolean update = false;
+			if (version == 2){
+				if (pref.nodeExists(PrefConstants.filters)){
+					pref.node(PrefConstants.filters).removeNode();
+					update = true;
+				}
+				if (pref.nodeExists(PrefConstants.msgs)){
+					pref.node(PrefConstants.msgs).removeNode();
+					update = true;
+				}
+			}
+			if (update){
+				pref.putInt(PrefConstants.frameworkVersion, frameworkVersion);
+				pref.flush();
+			}
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+
+	/**
+	 * Load the preferences for a validator.
+	 * 
+	 * @param v the validator that is being built up
+	 * @param p the node in the preference tree for the validator, 
+	 * 	e.g. /instance/validator-framework-id/filters/validator-id
+	 * 
+	 * @deprecated
+	 */
+//	static void loadPreferences(Validator v, Preferences p) throws BackingStoreException {
+//		v.setBuildValidation(p.getBoolean(PrefConstants.build, true));
+//		v.setManualValidation(p.getBoolean(PrefConstants.manual, true));
+//		v.setVersion(p.getInt(PrefConstants.version, 1));
+//		v.setDelegatingId(p.get(PrefConstants.delegate, null));
+//		
+//		Validator.V2 v2 = v.asV2Validator();
+//		if (v2 == null)return;
+//		if (!p.nodeExists(PrefConstants.groups))return;
+//		
+//		Preferences groupNode = p.node(PrefConstants.groups);
+//		for (String groupName : groupNode.childrenNames()){
+//			Preferences group = groupNode.node(groupName);
+//			String type = group.get(PrefConstants.type, null);
+//			if (type == null)throw new IllegalStateException(ValMessages.ErrGroupNoType);
+//			FilterGroup fg = FilterGroup.create(type);
+//			if (fg == null)throw new IllegalStateException(NLS.bind(ValMessages.ErrGroupInvalidType, type));
+//			v2.add(fg);
+//			
+//			if (group.nodeExists(PrefConstants.rules)){
+//				Preferences ruleNode = group.node(PrefConstants.rules);
+//				for (String ruleName : ruleNode.childrenNames()){
+//					Preferences rule = ruleNode.node(ruleName);
+//					FilterRule fr = FilterRule.create(rule.get(PrefConstants.ruleType, null));
+//					if (fr != null){
+//						fr.load(rule);
+//						fg.add(fr);
+//					}
+//				}
+//			}
+//		}		
+//	}
+	
+	/**
+	 * Save the validator into the preference store.
+	 * 
+	 * @param validator
+	 *            The validator being saved.
+	 * 
+	 * @param root
+	 *            The top of the preference tree for validators, i.e.
+	 *            /instance/validator-framework-id/vals for workspace validators
+	 *            and /vals for project validators.
+	 *            
+	 * @param baseValidators
+	 *            A map of the validators that are one level higher in the
+	 *            storage hierarchy. So if we are updating the preference page
+	 *            validators, then this map would be the extension point
+	 *            validators. If we are updating a project's validators, then
+	 *            this map would be the preference page validators.
+	 */
+	static void save(Validator validator, PreferencesWrapper root, Map<String, Validator> baseValidators) throws BackingStoreException {
+		Validator.V2 v2 = validator.asV2Validator();
+		if (v2 == null)return;
+		
+		final String id = validator.getId();
+		boolean hasNode = root.nodeExists(id);
+		
+		if (validator.sameConfig(baseValidators.get(id))){
+			if (hasNode){
+				PreferencesWrapper vp = root.node(id);
+				vp.removeNode();
+			}
+			return;
+		}
+		if (!validator.isChanged())return;
+		PreferencesWrapper vp = root.node(id);
+		if (validator.hasGlobalChanges()){
+			Global g = new Global(validator.isManualValidation(), validator.isBuildValidation(), validator.getVersion(),
+				validator.getDelegatingId());
+			vp.put(PrefConstants.global, g.serialize());
+			Friend.setMigrated(validator, false);
+		}
+		
+		if (validator.getChangeCountMessages() > 0){
+			Collection<MessageSeveritySetting> msgs = validator.getMessageSettings().values();
+			if (msgs.size() > 0){
+				vp.put(PrefConstants.msgs, Msgs.serialize(msgs));
+			}
+		}
+		
+		if (v2.getChangeCountGroups() > 0){
+			FilterGroup[] groups = v2.getGroups();
+			if (groups.length > 0){
+				Serializer ser = new Serializer(500);
+				for (FilterGroup group : groups)group.save(ser);
+				vp.put(PrefConstants.groups, ser.toString());
+			}
+		}
+	}
+	/**
+	 * Save the validator into the preference store.
+	 * 
+	 * @param validator
+	 *            The validator being saved.
+	 * 
+	 * @param root
+	 *            The top of the preference tree for validators, i.e.
+	 *            /instance/validator-framework-id/vals for workspace validators
+	 *            and /vals for project validators.
+	 *            
+	 * @param baseValidators
+	 *            A map of the validators that are one level higher in the
+	 *            storage hierarchy. So if we are updating the preference page
+	 *            validators, then this map would be the extension point
+	 *            validators. If we are updating a project's validators, then
+	 *            this map would be the preference page validators.
+	 */
+	static void save(ValidatorMutable validator, PreferencesWrapper root, Map<String, Validator> baseValidators) throws BackingStoreException {
+		if (!validator.isV2Validator())return;
+		
+		PreferencesWrapper vp = root.node(validator.getId());
+		if (validator.sameConfig(baseValidators.get(validator.getId()))){
+			vp.removeNode();
+			return;
+		}
+		if (!validator.isChanged())return;
+		if (validator.hasGlobalChanges()){
+			Global g = new Global(validator.isManualValidation(), validator.isBuildValidation(), validator.getVersion(),
+				validator.getDelegatingId());
+			vp.put(PrefConstants.global, g.serialize());
+//			Friend.setMigrated(validator, false);
+		}
+				
+		if (validator.getChangeCountGroups() > 0){
+			FilterGroup[] groups = validator.getGroups();
+			if (groups.length > 0){
+				Serializer ser = new Serializer(500);
+				for (FilterGroup group : groups)group.save(ser);
+				vp.put(PrefConstants.groups, ser.toString());
+			}
+		}
+	}
+	
+	public void saveAsPrefs(Validator[] val) {
+		try {
+			PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, null);
+			PreferencesWrapper vals = pref.node(PrefConstants.vals);
+			Map<String, Validator> base = ExtensionValidators.instance().getMapV2();
+			for (Validator v : val)save(v, vals, base);
+			pref.flush();
+			_validators.set(null);
+			updateListeners(true);
+		}
+		catch (BackingStoreException e){
+			throw new RuntimeException(e);
+		}
+	}
+
+	
+	/**
+	 * Save the global preferences and the validators.
+	 */
+	public synchronized void savePreferences(GlobalPreferences gp, Validator[] validators){
+		try {
+			PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+			savePreferences(prefs, gp);
+			PreferencesWrapper vals = prefs.node(PrefConstants.vals);
+
+			Map<String, Validator> base = ExtensionValidators.instance().getMapV2();
+			for (Validator v : validators)save(v, vals, base);
+			prefs.flush();
+			_validators.set(null);
+			updateListeners(true);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+	
+	/**
+	 * Save the global preferences and the validators.
+	 */
+	public synchronized void savePreferences(GlobalPreferences gp, ValidatorMutable[] validators, Boolean persist){
+		try {
+			PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, persist);
+			savePreferences(prefs, gp);
+			PreferencesWrapper vals = prefs.node(PrefConstants.vals);
+			Map<String, Validator> base = ExtensionValidators.instance().getMapV2();
+			for (ValidatorMutable v : validators)save(v, vals, base);
+
+			prefs.flush();
+			_validators.set(null);
+			updateListeners(true);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+		
+	/**
+	 * Save the V1 preferences, so that the old validators continue to work.
+	 */
+	public static void saveV1Preferences(ValidatorMutable[] validators, Boolean persistent){
+		try {
+			GlobalConfiguration gc = ConfigurationManager.getManager().getGlobalConfiguration();
+			gc.setEnabledManualValidators(getEnabledManualValidators(validators));				
+			gc.setEnabledBuildValidators(getEnabledBuildValidators(validators));
+
+			gc.passivate();
+			gc.store(persistent);
+		}
+		catch (InvocationTargetException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}			
+	}
+
+	/**
+	 * Answer all the V1 validators that are manually enabled.
+	 * @return
+	 */
+	private static ValidatorMetaData[] getEnabledManualValidators(ValidatorMutable[] validators) {
+		List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+		for (ValidatorMutable v : validators){
+			if (v.isManualValidation() && v.isV1Validator())list.add(v.getVmd());
+		}
+		ValidatorMetaData[] result = new ValidatorMetaData[list.size()];
+		list.toArray(result);
+		return result;
+	}
+
+	/**
+	 * Answer all the V1 validators that are enabled for build.
+	 * @return
+	 */
+	private static ValidatorMetaData[] getEnabledBuildValidators(ValidatorMutable[] validators) {
+		List<ValidatorMetaData> list = new LinkedList<ValidatorMetaData>();
+		for (ValidatorMutable v : validators){
+			if (v.isBuildValidation() && v.isV1Validator())list.add(v.getVmd());
+		}
+		ValidatorMetaData[] result = new ValidatorMetaData[list.size()];
+		list.toArray(result);
+		return result;
+	}
+
+	
+	/**
+	 * Save the global preferences and the validators.
+	 */
+	public synchronized void savePreferences(){
+		try {
+			GlobalPreferences gp = ValManager.getDefault().getGlobalPreferences();
+			PreferencesWrapper prefs = PreferencesWrapper.getPreferences(null, null);
+			savePreferences(prefs, gp);
+			prefs.flush();
+			updateListeners(true);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+	
+	/**
+	 * Save the global preferences and the validators.
+	 */
+	private void savePreferences(PreferencesWrapper prefs, GlobalPreferences gp){
+		prefs.putBoolean(PrefConstants.saveAuto, gp.getSaveAutomatically());
+		prefs.putBoolean(PrefConstants.suspend, gp.getDisableAllValidation());
+		prefs.putLong(PrefConstants.stateTS, gp.getStateTimeStamp());
+		prefs.putBoolean(PrefConstants.confirmDialog, gp.getConfirmDialog());
+		prefs.putBoolean(PrefConstants.override, gp.getOverride());
+		prefs.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+	}
+
+	/**
+	 * Update any message preferences in the map.
+	 * @param validator
+	 * @param settings
+	 */
+	public void loadMessages(Validator validator, Map<String, MessageSeveritySetting> settings) {
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(null, null);
+		try {
+			loadMessageSettings(validator, settings, pref);
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+		
+	/**
+	 * Load the message preferences for the validator into the map.
+	 * 
+	 * @param val
+	 * @param settings
+	 * @param root the root of the preference store
+	 */
+	static void loadMessageSettings(Validator val, Map<String, MessageSeveritySetting> settings, PreferencesWrapper root) 
+		throws BackingStoreException {
+		if (!root.nodeExists(PrefConstants.vals))return;
+		
+		PreferencesWrapper vals = root.node(PrefConstants.vals); 
+		if (!vals.nodeExists(val.getId()))return;
+		
+		PreferencesWrapper valPrefs = vals.node(val.getId());
+		String msgs = valPrefs.get(PrefConstants.msgs, ""); //$NON-NLS-1$
+		if (msgs.length() == 0)return;
+		
+		Map<String, MessageSeveritySetting.Severity> map = Msgs.deserialize(msgs);
+		
+		for (Map.Entry<String, MessageSeveritySetting.Severity> me : map.entrySet()){
+			MessageSeveritySetting ms = settings.get(me.getKey());
+			if (ms != null)ms.setCurrent(me.getValue());
+		}		
+	}
+
+	/**
+	 * Save whether the validator is enabled or not. 
+	 * @param validator
+	 * @param prefs up to the filter part of the preference tree
+	 */
+//	private void saveShallowPreference(Validator validator, Preferences prefs) {
+//		if (validator.asV2Validator() == null)return;
+//		Preferences val = prefs.node(validator.getId());
+//		val.putBoolean(PrefConstants.build, validator.isBuildValidation());
+//		val.putBoolean(PrefConstants.manual, validator.isManualValidation());
+//		val.putInt(PrefConstants.version, validator.getVersion());
+//	}
+	
+//	/**
+//	 * Load the customized message settings from the preference store.
+//	 * @param messageSettings
+//	 */
+//	public void loadMessageSettings(Validator val, MessageCategory[] messageSettings) {
+//		try {
+//			loadMessageSettings(val, messageSettings, ValidationFramework.getDefault().getPreferenceStore());
+//		}
+//		catch (Exception e){
+//			ValidationPlugin.getPlugin().handleException(e);
+//		}
+//	}
+	
+	private final static class Global {
+		private final boolean 	_manual;
+		private final boolean 	_build;
+		private final int		_version;
+		private final String	_delegating;
+		
+		public Global(String value){
+			Deserializer d = new Deserializer(value);
+			_manual = d.getBoolean();
+			_build = d.getBoolean();
+			_version = d.getInt();
+			_delegating = d.hasNext() ? d.getString() : null;
+		}
+		
+		public Global(boolean manual, boolean build, int version, String delegating){
+			_manual = manual;
+			_build = build;
+			_version = version;
+			_delegating = delegating;
+		}
+		
+		public String serialize(){
+			Serializer s = new Serializer(50);
+			s.put(_manual);
+			s.put(_build);
+			s.put(_version);
+			if (_delegating != null)s.put(_delegating);
+			return s.toString();
+		}
+
+		public boolean isManual() {
+			return _manual;
+		}
+
+		public boolean isBuild() {
+			return _build;
+		}
+
+		public int getVersion() {
+			return _version;
+		}
+
+		public String getDelegating() {
+			return _delegating;
+		}
+	}
+	
+	private final static class Msgs {
+		public static String serialize(Collection<MessageSeveritySetting> messages){
+			Serializer s = new Serializer(100);
+			for (MessageSeveritySetting ms : messages){
+				s.put(ms.getId());
+				s.put(ms.getCurrent().ordinal());
+			}
+			return s.toString();	
+		}
+		
+		/**
+		 * Answer a map for all the messages.
+		 * The key is the message id and the value is the current setting for that message
+		 * @param v
+		 * @return
+		 */
+		public static Map<String, MessageSeveritySetting.Severity> deserialize(String v){
+			Map<String, MessageSeveritySetting.Severity> map = new HashMap<String, MessageSeveritySetting.Severity>(10);
+			Deserializer d = new Deserializer(v);
+			while(d.hasNext()){
+				String id = d.getString();
+				int sev = d.getInt();
+				map.put(id, MessageSeveritySetting.Severity.values()[sev]);
+			}
+			return map;
+		}
+	}
+	
+	/**
+	 * Store the singleton for the ValPrefManagerGlobal. This approach is used to avoid having to synchronize the
+	 * ValPrefManagerGlobal.getDefault() method.
+	 * 
+	 * @author karasiuk
+	 *
+	 */
+	private final static class Singleton {
+		final static ValPrefManagerGlobal valPrefManagerGlobal = new ValPrefManagerGlobal();
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerProject.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerProject.java
new file mode 100644
index 0000000..c28b031
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValPrefManagerProject.java
@@ -0,0 +1,388 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.validation.Friend;
+import org.eclipse.wst.validation.IMutableValidator;
+import org.eclipse.wst.validation.MessageSeveritySetting;
+import org.eclipse.wst.validation.MutableProjectSettings;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.Validator.V2;
+import org.eclipse.wst.validation.internal.model.ProjectPreferences;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * A class that knows how to manage the project level persisted validation settings.
+ * @author karasiuk
+ *
+ */
+public final class ValPrefManagerProject {
+	
+	private final IProject	_project;
+	private final static List<IValChangedListener> _listeners = new LinkedList<IValChangedListener>();
+	
+	/**
+	 * The validators that are in the project preference file, but have
+	 * only been configured to the global preference level. That is they have not had
+	 * any project level customizations applied yet.
+	 */
+	private List<Validator> _validators;
+	
+	public ValPrefManagerProject(IProject project){
+		assert project != null;
+		_project = project;
+	}
+	
+	public static void addListener(IValChangedListener listener){
+		if (_listeners.contains(listener))return;
+		_listeners.add(listener);
+	}
+	
+	public static void removeListener(IValChangedListener listener){
+		_listeners.remove(listener);
+	}
+	
+	private static void updateListeners(IProject project){
+		for (IValChangedListener cl : _listeners)cl.validatorsForProjectChanged(project, true); 
+	}
+
+	
+	/**
+	 * Answer whether or not this project has validation settings.
+	 *   
+	 * @return true if it has settings. This does not mean that the settings are enabled, only that it
+	 * has settings.
+	 * 
+	 * @deprecated
+	 */
+	public boolean hasProjectSpecificSettings(){
+		PreferencesWrapper pref = getPreferences(null);
+		
+		if (pref == null)return false;
+		return true;
+	}
+	
+	/**
+	 * Answer the v2 validators that have been overridden by the project
+	 * preferences. The validators will not have the preference store's
+	 * customizations applied yet. The purpose of this method, is to identify the subset of validators 
+	 * that may later be configured.
+	 * 
+	 * @param baseValidators
+	 *            V2 validators from the extension points, and customized by any
+	 *            global preferences.
+	 */
+	public List<Validator> getValidators(Map<String, Validator> baseValidators) throws BackingStoreException {
+		List<Validator> vals = _validators;
+		if (vals == null){
+			vals = loadValidators(baseValidators);
+			_validators = vals;
+		}
+		return vals;
+	}
+	
+	/**
+	 * Load the validators from the preference store. The validators will not have the preference store's
+	 * customizations applied yet. The purpose of this method, is to identify the subset of validators 
+	 * that may later be configured.
+	 * 
+	 * @param baseValidators
+	 *            V2 validators from the extension points, and customized by any
+	 *            global preferences.
+	 * @return the validators that are in the project preference file, but have
+	 *         only been configured to the global preference level. That is they have not had
+	 *         any project level customizations applied yet.
+	 */
+	private List<Validator> loadValidators(Map<String, Validator> baseValidators) throws BackingStoreException {
+		List<Validator> list = new LinkedList<Validator>();
+		PreferencesWrapper pref = getPreferences(null);
+		if (pref.nodeExists(PrefConstants.vals)){
+			PreferencesWrapper vals = pref.node(PrefConstants.vals);
+			for (String id : vals.childrenNames()){
+				Validator base = baseValidators.get(id);
+				Validator v = ValPrefManagerGlobal.loadValidator(id, vals, base);
+				if (v != null){
+					V2 v2 = v.asV2Validator();
+					if (v2 != null)v2.setLevel(Validator.Level.Project);					
+					list.add(v);
+				}
+			}
+		}
+		return list;
+	}
+		
+	/**
+	 * Answer the setting of the getOverride field.
+	 */
+	public boolean getOverride(){
+		PreferencesWrapper pref = getPreferences(null);
+		
+		if (!pref.nodeExists())return ProjectPreferences.DefaultOverride;
+		
+		int version = pref.getInt(PrefConstants.frameworkVersion, 0);
+		if (version == 0){
+			try {
+				ProjectConfiguration pc = ConfigurationManager.getManager().getProjectConfiguration(_project);
+				return pc.getDoesProjectOverride();
+			}
+			catch (InvocationTargetException e){
+				// eat it, if it fails we just go with the defaults
+			}
+		}
+		return pref.getBoolean(PrefConstants.override, ProjectPreferences.DefaultOverride);
+	}
+
+	private ProjectPreferences migrateFromBeforeWTP30(IProject project, Map<String, Validator> baseValidators) {
+		try {
+			ProjectConfiguration pc = ConfigurationManager.getManager().getProjectConfiguration(project);
+			
+			List<Validator> list = migrateFromBeforeWTP30(baseValidators, pc);
+			Validator[] vals = new Validator[list.size()];
+			list.toArray(vals);
+			return new ProjectPreferences(project, pc.getDoesProjectOverride(), pc.isDisableAllValidation(), vals);
+		}
+		catch (InvocationTargetException e){
+			// eat it, if it fails we just go with the defaults
+		}
+		return new ProjectPreferences(project);
+	}
+
+	private List<Validator> migrateFromBeforeWTP30(Map<String, Validator> baseValidators, ProjectConfiguration pc)
+			throws InvocationTargetException {
+				
+		Set<String> build = pc.getEnabledBuildlValidators();
+		Set<String> manual = pc.getEnabledManualValidators();
+		
+		List<Validator> list = new LinkedList<Validator>();
+		for (Validator v : baseValidators.values()){
+			V2 v2 = v.asV2Validator();
+			if (v2 != null){
+				boolean isBuild = build == null || build.contains(v2.getValidatorClassname());
+				boolean isManual = manual == null || manual.contains(v2.getValidatorClassname());
+				if ((v.isBuildValidation() != isBuild) || (v.isManualValidation() != isManual)){
+					V2 copy = v2.copy().asV2Validator();
+					copy.setBuildValidation(isBuild);
+					copy.setManualValidation(isManual);
+					copy.setLevel(Validator.Level.Project);
+					Friend.setMigrated(copy, true);
+					list.add(copy);
+				}
+			}
+		}
+		return list;
+	}
+	
+	
+	/**
+	 * Answer the project preferences from the preference store.
+	 * @return null if the project does not have any specific preferences.
+	 */
+	public ProjectPreferences loadProjectPreferences(IProject project, Map<String, Validator> baseValidators) 
+		throws BackingStoreException {
+		
+		PreferencesWrapper pref = getPreferences(null);
+
+		if (pref == null)return null;
+		int version = pref.getInt(PrefConstants.frameworkVersion, 0);
+		if (version == 0){
+			// This means that we have a project that is before WTP 3.0
+			return migrateFromBeforeWTP30(project, baseValidators);
+		}
+		
+		if (version != ValPrefManagerGlobal.frameworkVersion)ValPrefManagerGlobal.migrate(version, pref);
+
+		if (!pref.nodeExists(PrefConstants.vals)){
+			return new ProjectPreferences(project, pref.getBoolean(PrefConstants.override, ProjectPreferences.DefaultOverride),
+				pref.getBoolean(PrefConstants.suspend, ProjectPreferences.DefaultSuspend), new Validator[0]);
+		}
+		
+		PreferencesWrapper vp = pref.node(PrefConstants.vals);
+		List<Validator> list = new LinkedList<Validator>();
+		for (String id : vp.childrenNames()){
+			Validator base = baseValidators.get(id);
+			Validator v = ValPrefManagerGlobal.loadValidator(id, vp, base);
+			if (v != null){
+				V2 v2 = v.asV2Validator();
+				if (v2 != null)v2.setLevel(Validator.Level.Project);
+				list.add(v);
+			}
+		}
+		Validator[] vals = new Validator[list.size()];
+		list.toArray(vals);
+		return new ProjectPreferences(project, pref.getBoolean(PrefConstants.override, ProjectPreferences.DefaultOverride),
+			pref.getBoolean(PrefConstants.suspend, ProjectPreferences.DefaultSuspend), vals);
+	}
+
+	private PreferencesWrapper getPreferences(Boolean persist) {
+		return PreferencesWrapper.getPreferences(_project, persist);
+	}
+
+	public void savePreferences(ProjectPreferences projectPreferences) {
+		Validator[] validators = projectPreferences.getValidators();
+		PreferencesWrapper pref = getPreferences(null);
+		pref.putBoolean(PrefConstants.suspend, projectPreferences.getSuspend());
+		pref.putBoolean(PrefConstants.override, projectPreferences.getOverride());
+		pref.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+		PreferencesWrapper vals = pref.node(PrefConstants.vals);
+		try {
+			Validator[] workspaceVals = ValManager.getDefault().getValidators();
+			Map<String, Validator> base = new HashMap<String, Validator>(workspaceVals.length);
+			for (Validator v : workspaceVals)base.put(v.getId(), v);
+			for (Validator v : validators)ValPrefManagerGlobal.save(v, vals, base);
+			pref.flush();
+			ProjectConfiguration pc = ConfigurationManager.getManager()
+				.getProjectConfiguration(projectPreferences.getProject());
+			pc.setEnabledBuildValidators(getEnabledBuildValidators(validators));
+			pc.setEnabledManualValidators(getEnabledManualValidators(validators));
+			pc.passivate();
+			pc.store();
+			updateListeners(_project);
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+
+	public void savePreferences(ProjectPreferences projectPreferences, ValidatorMutable[] validators) {
+		PreferencesWrapper pref = getPreferences(null);
+		pref.putBoolean(PrefConstants.suspend, projectPreferences.getSuspend());
+		pref.putBoolean(PrefConstants.override, projectPreferences.getOverride());
+		pref.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+		try {
+			savePreferences(validators, false, null);
+			pref.flush();
+			updateListeners(_project);
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+	
+	public void savePreferences(MutableProjectSettings settings, Boolean persist){
+		IProject project = settings.getProject();
+		PreferencesWrapper pref = PreferencesWrapper.getPreferences(project, persist);
+		pref.putBoolean(PrefConstants.suspend, settings.getSuspend());
+		pref.putBoolean(PrefConstants.override, settings.getOverride());
+		pref.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+		
+		IMutableValidator[] vms = settings.getValidators();
+		ValidatorMutable[] validators = new ValidatorMutable[vms.length];
+		for (int i=0; i<vms.length;i++)validators[i] = (ValidatorMutable)vms[i];
+		
+		try {
+			savePreferences(validators, false, persist);
+			pref.flush();
+			updateListeners(project);
+		}
+		catch (Exception e){
+			if (project.isAccessible())ValidationPlugin.getPlugin().handleException(e);
+		}
+	}
+	
+	public void savePreferences(ValidatorMutable[] validators, boolean flush, Boolean persist){
+		PreferencesWrapper pref = getPreferences(persist);
+		pref.putInt(PrefConstants.frameworkVersion, ValPrefManagerGlobal.frameworkVersion);
+		PreferencesWrapper vals = pref.node(PrefConstants.vals);
+		try {
+			Validator[] workspaceVals = ValManager.getDefault().getValidators();
+			Map<String, Validator> base = new HashMap<String, Validator>(workspaceVals.length);
+			for (Validator v : workspaceVals)base.put(v.getId(), v);
+			for (ValidatorMutable v : validators)ValPrefManagerGlobal.save(v, vals, base);
+			ProjectConfiguration pc = ConfigurationManager.getManager().getProjectConfiguration(_project);
+			pc.setEnabledBuildValidators(getEnabledBuildValidators(validators));
+			pc.setEnabledManualValidators(getEnabledManualValidators(validators));
+			pc.passivate();
+			pc.store();
+			if (flush){
+				pref.flush();
+				updateListeners(_project);
+			}
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+		
+	}
+	
+	/**
+	 * Answer all the V1 validators that are enabled for build.
+	 * @return
+	 */
+	private Set<ValidatorMetaData> getEnabledBuildValidators(Validator[] validators) {
+		Set<ValidatorMetaData> set = new HashSet<ValidatorMetaData>(50);
+		for (Validator v : validators){
+			if (v.isBuildValidation()){
+				Validator.V1 v1 = v.asV1Validator();
+				if (v1 != null)set.add(v1.getVmd());
+			}
+		}
+		return set;
+	}
+	
+	/**
+	 * Answer all the V1 validators that are enabled for build.
+	 * @return
+	 */
+	private Set<ValidatorMetaData> getEnabledBuildValidators(ValidatorMutable[] validators) {
+		Set<ValidatorMetaData> set = new HashSet<ValidatorMetaData>(50);
+		for (ValidatorMutable v : validators){
+			if (v.isBuildValidation() && v.isV1Validator())set.add(v.getVmd());
+		}
+		return set;
+	}
+	
+	/**
+	 * Answer all the V1 validators that are enabled for manual validation.
+	 * @return
+	 */
+	private Set<ValidatorMetaData> getEnabledManualValidators(Validator[] validators) {
+		Set<ValidatorMetaData> set = new HashSet<ValidatorMetaData>(50);
+		for (Validator v : validators){
+			if (v.isManualValidation()){
+				Validator.V1 v1 = v.asV1Validator();
+				if (v1 != null)set.add(v1.getVmd());
+			}
+		}
+		return set;
+	}
+	
+	/**
+	 * Answer all the V1 validators that are enabled for manual validation.
+	 * @return
+	 */
+	private Set<ValidatorMetaData> getEnabledManualValidators(ValidatorMutable[] validators) {
+		Set<ValidatorMetaData> set = new HashSet<ValidatorMetaData>(50);
+		for (ValidatorMutable v : validators){
+			if (v.isManualValidation() && v.isV1Validator())set.add(v.getVmd());
+		}
+		return set;
+	}
+	
+	public void loadMessages(Validator validator, Map<String, MessageSeveritySetting> settings) {
+		try {
+			ValPrefManagerGlobal.loadMessageSettings(validator, settings, getPreferences(null));
+		}
+		catch (BackingStoreException e){
+			ValidationPlugin.getPlugin().handleException(e);
+		}		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValProperty.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValProperty.java
new file mode 100644
index 0000000..fd001dc
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValProperty.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal;
+
+import java.util.BitSet;
+
+/**
+ * A resource session property, that is used to improve the performance of the validation framework. This is placed
+ * on each resource and it enables the framework to quickly determine if the resource needs to be processed.
+ * @author karasiuk
+ *
+ */
+public class ValProperty {
+/*
+ * I did some performance measurements on the IResource#setSessionProperty() and IResource#getSessionProperty()
+ * methods, and they were very fast. I used a very large workspace (over 17,000) resources, and you could set (or get)
+ * a property on all the resources in under 100ms. 
+ */
+	
+	private int 	_configNumber;
+	private BitSet	_configSet = new BitSet(100);
+	
+	private int		_validationNumber;
+	private BitSet	_validationSet = new BitSet(100);
+	
+	public int getConfigNumber() {
+		return _configNumber;
+	}
+	public void setConfigNumber(int configNumber) {
+		_configNumber = configNumber;
+	}
+	public BitSet getConfigSet() {
+		return _configSet;
+	}
+	public int getValidationNumber() {
+		return _validationNumber;
+	}
+	public void setValidationNumber(int validationNumber) {
+		_validationNumber = validationNumber;
+	}
+	public BitSet getValidationSet() {
+		return _validationSet;
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValType.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValType.java
new file mode 100644
index 0000000..8a97136
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValType.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.internal;
+
+/**
+ * Type of validation. Build or Manual?
+ * @author karasiuk
+ *
+ */
+public enum ValType {
+	/** The validation is triggered via a resource change and the build process. */
+	Build, 
+	
+	/** The user manually requested the validation. */
+	Manual,
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationResultSummary.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationResultSummary.java
new file mode 100644
index 0000000..9e91217
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationResultSummary.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.wst.validation.internal;
+
+/**
+ * An immutable object that holds a summary of the validation.
+ * @author karasiuk
+ *
+ */
+public final class ValidationResultSummary {
+	
+	private final int 	_error;
+	private final int 	_warning;
+	private final int	_info;
+	
+	public ValidationResultSummary(int error, int warning, int info){
+		_error = error;
+		_warning = warning;
+		_info = info;
+	}
+
+	public int getSeverityError() {
+		return _error;
+	}
+
+	public int getSeverityWarning() {
+		return _warning;
+	}
+
+	public int getSeverityInfo() {
+		return _info;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationRunner.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationRunner.java
new file mode 100644
index 0000000..01bf297
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidationRunner.java
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.wst.validation.internal;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.model.IValidatorVisitor;
+
+/**
+ * Run the validators on a selected set of resources.
+ * <p>
+ * This is used to run manual validations (i.e. the user selects the Validate menu item), 
+ * or it is invoked programmatically by a third party through the ValidationFramework API.
+ * It is not used for the build based invocation.
+ * </p> 
+ * @author karasiuk
+ *
+ */
+public final class ValidationRunner implements IWorkspaceRunnable {
+	
+	private Map<IProject, Set<IResource>>		_projects;
+	private	ValType			_valType;
+	private ValOperation	_valOperation;
+	
+	/**
+	 * Validate the selected projects and/or resources.
+	 * 
+	 * @param projects
+	 *            The selected projects. The key is an IProject and the value is
+	 *            the Set of IResources that were selected. Often this will be
+	 *            every resource in the project.
+	 * 
+	 * @param valType
+	 *            The type of validation that has been requested.
+	 * 
+	 * @param monitor
+	 *            Progress monitor.
+	 * 
+	 * @param atomic
+	 *            Run as an atomic workspace operation?
+	 */
+	public static ValOperation validate(Map<IProject, Set<IResource>> projects, ValType valType, 
+		IProgressMonitor monitor, boolean atomic) throws CoreException{
+		ValidationRunner me = new ValidationRunner(projects, valType);
+		if (atomic)ResourcesPlugin.getWorkspace().run(me, null, IWorkspace.AVOID_UPDATE, monitor);
+		else me.execute(monitor);
+		return me._valOperation;
+	}
+	
+	/**
+	 * Validate the selected file. This is a convenience method, it simply calls the more flexible 
+	 * validate with Map method. 
+	 * 
+	 * @param file
+	 *            The file to be validated.
+	 * 
+	 * @param valType
+	 *            The type of validation that has been requested.
+	 * 
+	 * @param monitor
+	 *            Progress monitor.
+	 * 
+	 * @param atomic
+	 *            Run as an atomic workspace operation?
+	 */
+	public static ValOperation validate(IFile file, ValType valType, IProgressMonitor monitor, boolean atomic) throws CoreException{
+	    final Map<IProject, Set<IResource>> map = new HashMap<IProject, Set<IResource>>(1);
+	      
+	    Set<IResource> set = new HashSet<IResource>(1);
+	    set.add(file);
+	    map.put(file.getProject(), set);
+	    return validate(map, valType, monitor, atomic);		
+	}
+	
+	private ValidationRunner(Map<IProject, Set<IResource>> projects, ValType valType){
+		_projects = projects;
+		_valType = valType;
+		
+	}
+	
+	private ValOperation execute(IProgressMonitor monitor){
+		_valOperation = new ValOperation();
+		ValManager manager = ValManager.getDefault();
+		
+		IValidatorVisitor startingVisitor = new IValidatorVisitor(){
+			public void visit(Validator validator, IProject project, ValType valType,
+				ValOperation operation, IProgressMonitor monitor) {
+				validator.validationStarting(project, operation.getState(), monitor);
+			}			
+		};
+		
+		IValidatorVisitor finishedVisitor = new IValidatorVisitor(){
+
+			public void visit(Validator validator, IProject project, ValType valType,
+				ValOperation operation, IProgressMonitor monitor) {
+
+				validator.validationFinishing(project, operation.getState(), monitor);				
+			}			
+		};
+		
+		manager.accept(startingVisitor, null, _valType, _valOperation, monitor);
+				
+		for (Map.Entry<IProject, Set<IResource>> me : _projects.entrySet()){
+			if (monitor.isCanceled()){
+				_valOperation.setCanceled(true);
+				return _valOperation;
+			}
+			IProject project = me.getKey();
+			manager.accept(startingVisitor, project, _valType, _valOperation, monitor);
+			for (IResource resource : me.getValue()){
+				try {
+					manager.validate(project, resource, IResourceDelta.NO_CHANGE, _valType, 
+							IncrementalProjectBuilder.AUTO_BUILD, _valOperation, monitor);
+				}
+				catch (ResourceUnavailableError error){
+					// if the resource is no longer available, we can't validate it, so we should just move on. 
+				}
+			}
+			manager.accept(finishedVisitor, project, _valType, _valOperation, monitor);
+		}
+		manager.accept(finishedVisitor, null, _valType, _valOperation, monitor);
+		return _valOperation;
+	}
+
+	public void run(IProgressMonitor monitor) throws CoreException {
+		execute(monitor);		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorExtensionReader.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorExtensionReader.java
new file mode 100644
index 0000000..c897cfc
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorExtensionReader.java
@@ -0,0 +1,374 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.wst.validation.internal;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IContributor;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.MessageSeveritySetting;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.Validator.V2;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+import org.eclipse.wst.validation.internal.model.FilterRule;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Process the validator (version 2) extension point.
+ * 
+ * @author karasiuk
+ *
+ */
+public class ValidatorExtensionReader {
+	
+	private static ValidatorExtensionReader _me = new ValidatorExtensionReader();
+	
+	public  static ValidatorExtensionReader getDefault(){
+		return _me;
+	}
+	
+	private ValidatorExtensionReader(){}
+	
+	/**
+	 * Process the v2 extensions, returning all the v2 validators.
+	 */
+	Collection<Validator> process() {
+		Map<String,Validator> map = new HashMap<String, Validator>(100);
+		IExtensionPoint extensionPoint = getExtensionPoint();
+		if (extensionPoint == null)return map.values();
+				
+		for (IExtension ext : extensionPoint.getExtensions()){
+			for (IConfigurationElement validator : ext.getConfigurationElements()){
+				String id = ext.getUniqueIdentifier();
+				if (Tracing.isEnabled(id)){
+					Validator v = processValidator(validator, id, ext.getLabel(), null);
+					if (v != null)map.put(v.getId(),v);
+				}
+			}
+		}
+		
+		extensionPoint = getExtensionPointExclude();
+		if (extensionPoint != null){
+			for (IExtension ext : extensionPoint.getExtensions()){
+				for (IConfigurationElement validator : ext.getConfigurationElements()){
+					String id = validator.getAttribute(ExtensionConstants.Exclude.id);
+					Validator v = map.get(id);
+					V2 v2 = null;
+					if (v != null)v2 = v.asV2Validator();
+
+					if (v2 == null){
+						String msg = NLS.bind("Plug-in configuration error, extension {0} references validator id {1} but this id does not exist.",  //$NON-NLS-1$
+							extensionPoint.getUniqueIdentifier(), id);
+						CoreException ex = new CoreException(new Status(IStatus.ERROR, ValidationPlugin.PLUGIN_ID, msg));
+						ValidationPlugin.getPlugin().handleException(ex);
+					}
+					else {
+						for (IConfigurationElement exclude : validator.getChildren()){
+							FilterGroup fg = null;
+							try {
+								fg = createFilterGroup(exclude);
+							}
+							catch (Exception e){
+								ValidationPlugin.getPlugin().handleException(e);
+								IContributor contrib = validator.getContributor();
+								String message = NLS.bind(ValMessages.ErrConfig, contrib.getName());
+								ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);								
+							}
+							if (fg != null && fg.isExclude()){
+								mergeExcludeGroup(v2, fg);
+							}
+						}
+					}					
+				}
+			}
+			
+		}
+		return map.values();
+		
+	}
+	
+	/**
+	 * Merge the rules from the filter group into the current exclude group, creating a current exclude
+	 * group if need be.
+	 * @param v2
+	 * @param fg
+	 */
+	private void mergeExcludeGroup(V2 v2, FilterGroup fg){
+		FilterGroup existing = null;
+		for (FilterGroup group : v2.getGroups()){
+			if (group.isExclude()){
+				existing = group;
+				break;
+			}
+		}
+		if (existing == null)v2.add(fg);
+		else {
+			List<FilterRule> rules = new LinkedList<FilterRule>();
+			for (FilterRule rule : existing.getRules())rules.add(rule);
+			
+			for (FilterRule rule : fg.getRules())rules.add(rule);
+			
+			FilterRule[] filterRules = new FilterRule[rules.size()];
+			rules.toArray(filterRules);
+			FilterGroup merged = FilterGroup.create(existing.isExclude(), filterRules);
+			
+			v2.replaceFilterGroup(existing, merged);
+		}
+	}
+	
+	/**
+	 * Process the validator element in a validator extension.
+	 * 
+	 * @param validator
+	 *            The validator element.
+	 * 
+	 * @param deep
+	 *            If true load all the configuration elements for each
+	 *            validator, if false do a shallow load, where only the
+	 *            validator class, id and name's are loaded.
+	 * 
+	 * @param project
+	 *            The project that you are defined in. This can be null which
+	 *            means that you are a global validator.
+	 * 
+	 * @return a configured validator or null if there was an error.
+	 */
+	private Validator processValidator(IConfigurationElement validator, String id, String label, IProject project) {
+		Validator.V2 v = null;
+		try {
+			v = Validator.create(validator, project).asV2Validator();
+			v.setLevel(Validator.Level.Extension);
+			v.setId(id);
+			v.setName(label);
+			v.setBuildValidation(getAttribute(validator, ExtensionConstants.build, true));
+			v.setManualValidation(getAttribute(validator, ExtensionConstants.manual, true));
+			v.setMarkerId(validator.getAttribute(ExtensionConstants.markerId));
+			v.setVersion(getAttribute(validator, ExtensionConstants.version, 1));
+			v.setSourceId(validator.getAttribute(ExtensionConstants.sourceId));
+			IConfigurationElement[] children = validator.getChildren();
+			for (IConfigurationElement child : children)processIncludeAndExcludeElement(v, child);
+		}
+		catch (Exception e){
+			ValidationPlugin.getPlugin().handleException(e);
+			IContributor contrib = validator.getContributor();
+			String message = NLS.bind(ValMessages.ErrConfig, contrib.getName());
+			ValidationPlugin.getPlugin().logMessage(IStatus.ERROR, message);
+		}
+		return v;
+	}
+	
+	/**
+	 * Answer all the messages that this validator has defined.
+	 * @param v
+	 * @return an empty list if the validator did not define any messages.
+	 */
+	public List<MessageSeveritySetting> addMessages(Validator v){
+		List<MessageSeveritySetting> list = new LinkedList<MessageSeveritySetting>();
+		IExtensionPoint extensionPoint = getExtensionPoint();
+		if (extensionPoint == null)return list;
+		IExtension ext = extensionPoint.getExtension(v.getId());
+		if (ext == null)return list;
+		
+		for (IConfigurationElement elem : ext.getConfigurationElements()){
+			for (IConfigurationElement ce : elem.getChildren(ExtensionConstants.MessageCategory.name)){
+				list.add(processMessage(ce));
+			}
+		}
+
+		return list;
+	}
+
+	/**
+	 * Answer the extension point for the v2 validators.
+	 * 
+	 * @return null if there is a problem or no extensions.
+	 */
+	private IExtensionPoint getExtensionPoint() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		return registry.getExtensionPoint(ValidationPlugin.PLUGIN_ID, ExtensionConstants.validator);
+	}
+
+	/**
+	 * Answer the extension point for adding exclusion filters. This is where another validator can
+	 * further restrict an existing validator.
+	 * 
+	 * @return null if there is a problem or no extensions.
+	 */
+	private IExtensionPoint getExtensionPointExclude() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		return registry.getExtensionPoint(ValidationPlugin.PLUGIN_ID, ExtensionConstants.excludeExtension);
+	}
+	
+	/**
+	 * Process a message element for the validator, by creating a MessageCategory for it.
+	 * 
+	 * @param ce a MessageCategory element.
+	 */
+	private MessageSeveritySetting processMessage(IConfigurationElement ce) {
+		String s = ce.getAttribute(ExtensionConstants.MessageCategory.severity);
+		MessageSeveritySetting.Severity sev = null;
+		if (ExtensionConstants.MessageCategory.sevError.equals(s))sev = MessageSeveritySetting.Severity.Error;
+		else if (ExtensionConstants.MessageCategory.sevWarning.equals(s))sev = MessageSeveritySetting.Severity.Warning;
+		else if (ExtensionConstants.MessageCategory.sevIgnore.equals(s))sev = MessageSeveritySetting.Severity.Ignore;
+		
+		return new MessageSeveritySetting(ce.getAttribute(ExtensionConstants.MessageCategory.id), 
+			ce.getAttribute(ExtensionConstants.MessageCategory.label), sev);		
+	}
+
+	/** 
+	 * Process the include and exclude elements.
+	 * 
+	 *  @param v The validator that we are building up.
+	 *  @param group The children of the validator tag. This may included include and exclude elements.
+	 *  Other elements are ignored. 
+	 */
+	private void processIncludeAndExcludeElement(Validator.V2 v, IConfigurationElement group) {
+		FilterGroup fg = createFilterGroup(group);
+		if (fg != null)v.add(fg);
+	}
+	
+	/**
+	 * Process an include or exclude element, returning a filter group for it.
+	 * 
+	 * @param group
+	 *            An include, exclude or some other element. Only include and
+	 *            exclude elements are processed, other types are ignored.
+	 *            
+	 * @return a filter group that corresponds to the include or exclude
+	 *         element, or null if the element was not an include or exclude
+	 *         element.
+	 */
+	private FilterGroup createFilterGroup(IConfigurationElement group){
+		String name = group.getName();
+		if (!FilterGroup.isKnownName(name))return null; 
+		
+		
+		IConfigurationElement[] rules = group.getChildren(ExtensionConstants.rules);
+		// there should only be one
+		List<FilterRule> list = new LinkedList<FilterRule>();
+		for (int i=0; i<rules.length; i++){
+			IConfigurationElement[] r = rules[i].getChildren();
+			for(int j=0; j<r.length; j++){
+				list.add(processRule(r[j]));
+			}
+		}
+		FilterRule[] filterRules = new FilterRule[list.size()];
+		list.toArray(filterRules);
+		return FilterGroup.create(name, filterRules);
+	}
+
+	/**
+	 * Process a rule in one of the rule groups.
+	 * 
+	 * @param rule a rule in the group, like fileext.
+	 */
+	private FilterRule processRule(IConfigurationElement rule) {
+		FilterRule fr = FilterRule.create(rule);
+		if (fr == null){
+			String contributor = ""; //$NON-NLS-1$
+			String name = ""; //$NON-NLS-1$
+			try {
+				contributor = rule.getDeclaringExtension().getContributor().getName();
+				name = rule.getName();
+			}
+			catch (Exception e){
+				// eat it
+			}
+			throw new IllegalStateException(ValMessages.ErrFilterRule + " : " + //$NON-NLS-1$
+					contributor	 + " : " + name); //$NON-NLS-1$
+		}
+		return fr;
+	}
+	
+	/**
+	 * Determine if any of the validators need to be migrated, and if so answer a new
+	 * Validator array.
+	 * 
+	 * @param validators the existing validators (from the preferences).
+	 *  
+	 * @return null if no validators needed to be migrated.
+	 */
+	Validator[] migrate(Validator[] validators, IProject project) {
+		int count = 0;
+		Map<String, Validator> map = new HashMap<String, Validator>(validators.length);
+		for (Validator v : validators)map.put(v.getId(), v);
+		
+		IExtensionPoint extensionPoint = getExtensionPoint();
+		if (extensionPoint == null)return null;
+				
+		for (IExtension ext : extensionPoint.getExtensions()){
+			for (IConfigurationElement validator : ext.getConfigurationElements()){
+				Validator v = processValidator(validator, ext.getUniqueIdentifier(), ext.getLabel(), project);
+				if (v == null)continue;
+				Validator old = map.get(v.getId());
+				if (old == null || old.getVersion() < v.getVersion()){
+					//TODO we may be replacing user preferences, at some point we may want to do a real migration.
+					map.put(v.getId(), v);
+					count++;
+				}
+			}
+		}
+		
+		if (count > 0){
+			Validator[] vals = new Validator[map.size()];
+			map.values().toArray(vals);
+			return vals;
+		}
+		return null;
+	}
+	
+	private boolean getAttribute(IConfigurationElement element, String name, boolean dft){
+		String v = element.getAttribute(name);
+		if (v == null)return dft;
+		if ("true".equalsIgnoreCase(v))return true; //$NON-NLS-1$
+		if ("false".equalsIgnoreCase(v))return false; //$NON-NLS-1$
+		return dft;
+	}
+	
+	private int getAttribute(IConfigurationElement element, String name, int dft){
+		String v = element.getAttribute(name);
+		if (v == null)return dft;
+		try {
+			return Integer.parseInt(v);
+		}
+		catch (Exception e){
+			// eat it.
+		}
+		return dft;
+	}
+	
+//	/**
+//	 * This method is only used for debugging.
+//	 * @param elem
+//	 */
+//	private static void dump(IConfigurationElement elem){
+//		String name = elem.getName();
+//		String[] attribs = elem.getAttributeNames();
+//		String[] vals = new String[attribs.length];
+//		for (int i=0; i<vals.length; i++)vals[i] = elem.getAttribute(attribs[i]);
+//		String v = elem.getValue();
+//		IConfigurationElement[] children = elem.getChildren();
+//		for (int i=0; i<children.length; i++)dump(children[i]);
+//	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorGroupExtensionReader.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorGroupExtensionReader.java
new file mode 100644
index 0000000..62543f7
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorGroupExtensionReader.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.wst.validation.internal;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+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.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.validation.IValidatorGroupListener;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * Process the validator group (for use with validator version 2 only) extension point.
+ * 
+ * @author nitin
+ * 
+ */
+public class ValidatorGroupExtensionReader {
+
+	private static final String DOT = "."; //$NON-NLS-1$
+	private static ValidatorGroupExtensionReader _instance;
+
+	public static ValidatorGroupExtensionReader getDefault() {
+		if (_instance == null)_instance = new ValidatorGroupExtensionReader();
+		return _instance;
+	}
+
+	/**
+	 * Map of group IDs to configuration elements
+	 */
+	private Map<String, List<IConfigurationElement>> _map;
+	
+	/**
+	 * Map of group ID's to resolved configuration elements.
+	 */
+	private Map<String, IValidatorGroupListener[]> _resolved;
+
+	private ValidatorGroupExtensionReader() {
+		init();
+	}
+
+	/**
+	 * Answer the listeners with this group id.
+	 * @param groupID
+	 * @return an empty array there are no listeners for this group id.
+	 */
+	IValidatorGroupListener[] createListeners(String groupID) throws CoreException {
+		IValidatorGroupListener[] result = _resolved.get(groupID);
+		if (result != null)return result;
+				
+		List<IConfigurationElement> elements = _map.get(groupID);
+		if (elements == null){
+			_resolved.put(groupID, new IValidatorGroupListener[0]);
+			String msg = NLS.bind("Configuration error, there is no validation listener group with id: {0}", groupID); //$NON-NLS-1$
+			Status status = new Status(IStatus.ERROR, ValidationPlugin.PLUGIN_ID, msg);
+			throw new CoreException(status);
+		}
+		
+		List<IValidatorGroupListener> listeners = new ArrayList<IValidatorGroupListener>(elements.size());
+		for (IConfigurationElement element : elements) {
+			IValidatorGroupListener listener;
+			try {
+				listener = (IValidatorGroupListener) element.createExecutableExtension(ExtensionConstants.Group.attClass);
+				listeners.add(listener);
+			}
+			catch (Exception e) {
+				ValidationPlugin.getPlugin().handleException(e);
+				listeners = new ArrayList<IValidatorGroupListener>();
+			}
+		}
+
+		result = listeners.toArray(new IValidatorGroupListener[listeners.size()]);
+		_resolved.put(groupID, result);
+		return result;
+	}
+
+	/**
+	 * Answer the extension point for the validatorGroups.
+	 * 
+	 * @return null if there is a problem or no extensions.
+	 */
+	private IExtensionPoint getExtensionPoint() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		return registry.getExtensionPoint(ValidationPlugin.PLUGIN_ID, ExtensionConstants.group);
+	}
+
+	private void init() {
+		_map = new HashMap<String, List<IConfigurationElement>>(4);
+		_resolved = new HashMap<String, IValidatorGroupListener[]>(4);
+
+		IExtensionPoint extensionPoint = getExtensionPoint();
+		if (extensionPoint != null) {
+			for (IExtension ext : extensionPoint.getExtensions()) {
+				for (IConfigurationElement group : ext.getConfigurationElements()) {
+					processGroupElement(group);
+				}
+			}
+		}
+	}
+
+	private void processGroupElement(IConfigurationElement element) {
+		if (!ExtensionConstants.Group.elementGroup.equals(element.getName()))return;
+		
+		String id = element.getAttribute(ExtensionConstants.Group.attId);
+		if (id == null)throw new IllegalStateException("Configuration error, the " +  //$NON-NLS-1$
+			ExtensionConstants.Group.attId + " is required"); //$NON-NLS-1$
+		// force the use of a qualified ID
+		if (id.indexOf(DOT) < 0) {
+			id = element.getContributor().getName() + DOT + id;
+		}
+		IConfigurationElement[] newElements = element.getChildren(ExtensionConstants.Group.elementListener);
+		if (newElements.length > 0) {
+			List<IConfigurationElement> elements = _map.get(id);
+			if (elements == null) {
+				elements = new ArrayList<IConfigurationElement>();
+				_map.put(id, elements);
+			}
+			elements.addAll(Arrays.asList(newElements));
+		}
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorMutable.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorMutable.java
new file mode 100644
index 0000000..d18b0c5
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValidatorMutable.java
@@ -0,0 +1,258 @@
+package org.eclipse.wst.validation.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.validation.IMutableValidator;
+import org.eclipse.wst.validation.MessageSeveritySetting;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.Validator.V1;
+import org.eclipse.wst.validation.Validator.V2;
+import org.eclipse.wst.validation.internal.model.FilterGroup;
+
+/**
+ * The mutable fields that a user can change through the preference or property page.
+ * @author karasiuk
+ *
+ */
+public final class ValidatorMutable implements IAdaptable, IMutableValidator {
+	
+	private boolean _build;
+	private boolean	_manual;
+	private String _delegatingId;
+	
+	private int _changeCountGroups;
+	private int _changeCountMessages;
+	
+	private final String	_name;
+	private final String 	_sourceId;
+	private final boolean _isV1;
+	private final boolean _isV2;
+	private final ValidatorMetaData _vmd;
+	private final String _id;
+	private final int	_version;
+
+	private FilterGroup[] _groups;
+	private final Map<String, MessageSeveritySetting> _messageSettings;
+	private final String _validatorClassname;
+	
+	private final boolean 	_origBuild;
+	private final boolean 	_origManual;
+	private final String	_origDelegating;
+
+	public ValidatorMutable(Validator validator) {
+		_name = validator.getName();
+		_sourceId = validator.getSourceId();
+		_manual = validator.isManualValidation();
+		_build = validator.isBuildValidation();
+		V2 v2 = validator.asV2Validator();
+		_isV2 = v2 != null;
+		_delegatingId = validator.getDelegatingId();
+		
+		V1 v1 = validator.asV1Validator();
+		_isV1 = v1 != null;
+		_vmd = _isV1 ? v1.getVmd() : null;
+		_id = validator.getId();
+		
+		_origBuild = _build;
+		_origDelegating = _delegatingId;
+		_origManual = _manual;
+		_version = validator.getVersion();
+		_validatorClassname = validator.getValidatorClassname();
+		_messageSettings = new HashMap<String, MessageSeveritySetting>(10); 
+		for (Map.Entry<String, MessageSeveritySetting> me : validator.getMessageSettings().entrySet()){
+			_messageSettings.put(me.getKey(), me.getValue().copy());
+		}
+		
+		if (v2 != null){
+			FilterGroup[] groups = v2.getGroups();
+			_groups = new FilterGroup[groups.length];
+			System.arraycopy(groups, 0, _groups, 0, groups.length);
+		}
+	}
+
+	public ValidatorMutable(ValidatorMutable val) {
+		_build = val._build;
+		_delegatingId = val._delegatingId;
+		FilterGroup[] groups = val.getGroups();
+		_groups = new FilterGroup[groups.length];
+		System.arraycopy(groups, 0, _groups, 0, groups.length);
+		
+		_id = val._id;
+		_isV1 = val._isV1;
+		_isV2 = val._isV2;
+		_manual = val._manual;
+		_messageSettings = new HashMap<String, MessageSeveritySetting>(10); 
+		for (Map.Entry<String, MessageSeveritySetting> me : val.getMessageSettings().entrySet()){
+			_messageSettings.put(me.getKey(), me.getValue().copy());
+		}
+
+		_name = val._name;
+		_origBuild = val._origBuild;
+		_origDelegating = val._origDelegating;
+		_origManual = val._origManual;
+		_sourceId = val._sourceId;
+		_validatorClassname = val._validatorClassname;
+		_version = val._version;
+		_vmd = val._vmd;
+	}
+
+	public void setBuildValidation(boolean build) {
+		_build = build;		
+	}
+
+	public void setManualValidation(boolean manual) {
+		_manual = manual;
+	}
+
+	public String getName() {
+		return _name;
+	}
+
+	public boolean isManualValidation() {
+		return _manual;
+	}
+
+	public boolean isBuildValidation() {
+		return _build;
+	}
+
+	public boolean isV2Validator() {
+		return _isV2;
+	}
+
+	public String getDelegatingId() {
+		return _delegatingId;
+	}
+
+	/**
+	 * The caller of this method must not change the ValidatorMetaData.
+	 */
+	public ValidatorMetaData getVmd() {
+		return _vmd;
+	}
+
+	public boolean isV1Validator() {
+		return _isV1;
+	}
+
+	public String getId() {
+		return _id;
+	}
+
+	/**
+	 * Answer true if any of your settings have changed.
+	 */
+	public boolean isChanged() {
+		if (hasGlobalChanges())return true;
+		if (_changeCountGroups > 0 || _changeCountMessages > 0)return true;
+		return false;
+	}
+
+	public boolean hasGlobalChanges() {
+		if (_origBuild != _build)return true;
+		if (_origManual != _manual)return true;
+		if (!Misc.same(_origDelegating, _delegatingId))return true;
+		return false;
+	}
+
+	public int getVersion() {
+		return _version;
+	}
+
+	public void replaceFilterGroup(FilterGroup existing, FilterGroup merged) {
+		int i = find(existing);
+		if (i == -1)add(merged);  // this should never happen
+		else {
+			_groups[i] = merged;
+			bumpChangeCountGroups();
+		}
+	}
+	
+	public void remove(FilterGroup group) {
+		int i = find(group);
+		if (i == -1)return;
+		
+		FilterGroup[] groups = new FilterGroup[_groups.length-1];
+		if (i > 0)System.arraycopy(_groups, 0, groups, 0, i);
+		if (i < groups.length)System.arraycopy(_groups, i+1, groups, i, groups.length-i);
+		_groups = groups;
+		bumpChangeCountGroups();
+	}
+	
+	private int find(FilterGroup group) {
+		for (int i=0; i<_groups.length; i++)if (group == _groups[i])return i;
+		return -1;
+	}
+
+	public void add(FilterGroup fg) {
+		assert fg != null;
+		FilterGroup[] groups = new FilterGroup[_groups.length+1];
+		System.arraycopy(_groups, 0, groups, 0, _groups.length);
+		groups[_groups.length] = fg;
+		_groups = groups;
+		bumpChangeCountGroups();
+	}
+	
+	private void bumpChangeCountGroups(){
+		_changeCountGroups++;
+	}
+
+	public int getChangeCountGroups() {
+		return _changeCountGroups;
+	}
+	
+	public FilterGroup[] getGroups(){
+		return _groups;
+	}
+
+	public void setDelegatingId(String id) {
+		_delegatingId = id;	
+	}
+
+	public Map<String, MessageSeveritySetting> getMessageSettings() {
+		return _messageSettings;
+	}
+	
+	public void bumpChangeCountMessages(){
+		_changeCountMessages++;
+	}
+
+	public String getValidatorClassname() {
+		return _validatorClassname;
+	}
+
+	@SuppressWarnings("unchecked")
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+
+	public boolean sameConfig(Validator validator) {
+		if (validator == null)return false;
+		return hashCodeForConfig() == validator.hashCodeForConfig();
+	}
+
+	private int hashCodeForConfig() {
+		int h = 0;
+		if (_build)h += 101;
+		if (_delegatingId != null)h += _delegatingId.hashCode();
+		if (_manual)h += 201;
+		if (_messageSettings != null){
+			for (MessageSeveritySetting ms : _messageSettings.values())h += ms.hashCode();
+		}
+		if (_sourceId != null)h += _sourceId.hashCode();
+		h += _version;
+		if (_id != null)h += _id.hashCode();
+		for (FilterGroup fg : _groups)h += fg.hashCodeForConfig();
+		return h;
+	}
+
+	@Override
+	public String toString() {
+		return _name;
+	}
+
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterGroup.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterGroup.java
new file mode 100644
index 0000000..6d20dd5
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterGroup.java
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 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.wst.validation.internal.model;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.Deserializer;
+import org.eclipse.wst.validation.internal.ExtensionConstants;
+import org.eclipse.wst.validation.internal.Serializer;
+import org.eclipse.wst.validation.internal.ValMessages;
+
+/**
+ * An immutable group of filter rules.
+ * @author karasiuk
+ *
+ */
+public abstract class FilterGroup implements IAdaptable {
+	
+	private final FilterRule[] _rules;
+	
+	/** The version number of the serialization (in case we ever need to change this) */
+	private static final int SerializationVersion = 1;
+
+	/**
+	 * Answer a filter group based on the type of the group.
+	 * 
+	 * @param name either "include" or "exclude"
+	 * 
+	 * @return null if the name parameter isn't correct.
+	 */
+	public static FilterGroup create(String name, FilterRule[] rules) {
+		if (ExtensionConstants.include.equals(name))return new FilterIncludeGroup(rules);
+		if (ExtensionConstants.exclude.equals(name))return new FilterExcludeGroup(rules);
+		return null;
+	}
+	
+	/**
+	 * Answer a filter group from a deserializer.
+	 * @param des
+	 * 
+	 * @see FilterGroup#save(Serializer)
+	 */
+	public static FilterGroup create(Deserializer des){
+		des.getInt(); // get the version
+		String type = des.getString();
+		
+		int numberRules = des.getInt();
+		List<FilterRule> list = new LinkedList<FilterRule>();
+		for (int i=0; i<numberRules; i++)list.add(FilterRule.create(des));
+		FilterRule[] rules = new FilterRule[list.size()];
+		list.toArray(rules);
+
+		return create(type, rules);
+	}
+
+	/**
+	 * Answer a new filter group.
+	 * 
+	 * @param exclude if true an exclusion group is returned, otherwise an inclusion group is returned.
+	 */
+	public static FilterGroup create(boolean exclude, FilterRule[] rules){
+		if (exclude) return new FilterExcludeGroup(rules);
+		return new FilterIncludeGroup(rules);
+	}
+
+	/**
+	 * Answer true if this is a supported type of group.
+	 * @param name Type of group that is being tested.
+	 * @return
+	 */
+	public static boolean isKnownName(String name) {
+		if (ExtensionConstants.include.equals(name))return true;
+		if (ExtensionConstants.exclude.equals(name))return true;
+		return false;
+	}
+
+	
+	private FilterGroup(FilterRule[] rules){
+		_rules = rules;
+	}
+		
+	/**
+	 * The rules in the group.
+	 */
+	public final FilterRule[] getRules(){
+		FilterRule[] rules = new FilterRule[_rules.length];
+		System.arraycopy(_rules, 0, rules, 0, _rules.length);
+		return rules;
+	}
+		
+	/**
+	 * Answer the internal type of group, e.g. "include" or "exclude".
+	 */
+	public abstract String getType();
+	
+	/** Answer the type as a type that can be displayed to a user, that is it has been localized. */
+	public abstract String getDisplayableType();
+	
+	@SuppressWarnings("unchecked")
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+	
+	public static final class FilterIncludeGroup extends FilterGroup {
+		
+		private FilterIncludeGroup(FilterRule[] rules){
+			super(rules);
+		}
+
+		public String getType() {
+			return ExtensionConstants.include;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.GroupInclude;
+		}
+		
+		public boolean isInclude() {
+			return true;
+		}
+		
+	}
+	
+	
+	public static final class FilterExcludeGroup extends FilterGroup {
+		
+		private FilterExcludeGroup(FilterRule[] rules){
+			super(rules);
+		}
+		public String getType() {
+			return ExtensionConstants.exclude;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.GroupExclude;
+		}
+		
+		public boolean isExclude() {
+			return true;
+		}		
+	}
+		
+	/**
+	 * Save your settings into the serializer.
+	 * @param ser
+	 */
+	public void save(Serializer ser){
+		ser.put(SerializationVersion);
+		ser.put(getType());
+		ser.put(_rules.length);
+		for (FilterRule rule : _rules)rule.save(ser);		
+	}
+
+	/**
+	 * Answer whether or not we should validate the resource based on the filters in this group.
+	 * 
+	 * @param project the project that is being validated.
+	 * @param resource the resource that is being validated. This can be null, in which case
+	 * only the project level checks are performed.
+	 */
+	public boolean shouldValidate(IProject project, IResource resource, ContentTypeWrapper contentTypeWrapper) {
+		boolean exclude = isExclude();
+		boolean include = isInclude();
+		int count = 0;
+		for (FilterRule rule : _rules){
+			if (resource != null){
+				Boolean match = rule.matchesResource(resource, contentTypeWrapper);
+				if (match != null)count++;
+				if (exclude && match != null && match)return false;
+				if (include && match != null && match)return true;
+			}
+			
+			Boolean match = rule.matchesProject(project);
+			if (match != null)count++;
+			if (exclude && match != null && match)return false;
+			if (include && match != null && match)return true;
+		}
+		if (exclude)return true;
+		if (count == 0)return true;
+		return false;
+	}
+
+	/** 
+	 * Answer true if this is an inclusion filter, that is at least one of the rules must
+	 * match in order to validate the resource.
+	 */
+	public boolean isInclude() {
+		return false;
+	}
+
+	/**
+	 * Answer true if this is an exclusion filter, that is if any of the rules match the 
+	 * resource is not validated.
+	 */
+	public boolean isExclude() {
+		return false;
+	}
+	
+	public int hashCodeForConfig() {
+		int h = 0;
+		if (isExclude())h += 13;
+		for (FilterRule fr : _rules)h += fr.hashCodeForConfig();
+		return h;
+	}
+
+	/**
+	 * Create a new group by adding a rule to an existing group.
+	 * @param baseGroup The group that holds the existing rules.
+	 * @param rule The new rule that is being added
+	 * @return
+	 */
+	public static FilterGroup addRule(FilterGroup baseGroup, FilterRule rule) {
+		List<FilterRule> list = new LinkedList<FilterRule>();
+		for (FilterRule r : baseGroup._rules)list.add(r);
+		list.add(rule);
+		
+		FilterRule[] rules = new FilterRule[list.size()];
+		list.toArray(rules);
+		return FilterGroup.create(baseGroup.isExclude(), rules);
+	}
+
+	/**
+	 * Create a new group by removing a rule from an existing group.
+	 * @param baseGroup The group that holds the existing rules.
+	 * @param rule The rule that is being removed
+	 * @return
+	 */
+	public static FilterGroup removeRule(FilterGroup baseGroup,	FilterRule rule) {
+		List<FilterRule> list = new LinkedList<FilterRule>();
+		for (FilterRule r : baseGroup._rules){
+			if (!r.equals(rule))list.add(r);
+		}
+		
+		FilterRule[] rules = new FilterRule[list.size()];
+		list.toArray(rules);
+		return FilterGroup.create(baseGroup.isExclude(), rules);
+	}	
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java
new file mode 100644
index 0000000..04cf0c2
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java
@@ -0,0 +1,536 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.wst.validation.internal.model;
+
+import java.util.regex.Pattern;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.validation.internal.ContentTypeWrapper;
+import org.eclipse.wst.validation.internal.Deserializer;
+import org.eclipse.wst.validation.internal.ExtensionConstants;
+import org.eclipse.wst.validation.internal.Serializer;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValMessages;
+import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+
+/**
+ * A rule that is used to filter out (or in) validation on a resource.
+ * The concrete classes are all immutable.
+ * @author karasiuk
+ *
+ */
+public abstract class FilterRule implements IAdaptable {
+	
+	protected final String _pattern;
+	
+	protected static final String PortableFileDelim = "/"; //$NON-NLS-1$
+	
+	/**
+	 * Create a rule based on a configuration element.
+	 * 
+	 * @param rule
+	 *            The configuration element, see the extension point for details.
+	 * @return null if there is a problem.
+	 */
+	public static FilterRule create(IConfigurationElement rule){
+		String name = rule.getName();
+		if (ExtensionConstants.Rule.fileext.equals(name))return new FileExt(rule);
+		if (ExtensionConstants.Rule.projectNature.equals(name))return new ProjectNature(rule);
+		if (ExtensionConstants.Rule.file.equals(name))return File.createFile(rule);
+		if (ExtensionConstants.Rule.contentType.equals(name))return ContentType.createContentType(rule);
+		if (ExtensionConstants.Rule.facet.equals(name))return new Facet(rule);
+		if (ExtensionConstants.Rule.pattern.equals(name))return FilePattern.createFilePattern(rule);
+		return null;
+	}
+	
+	static FilterRule create(Deserializer des) {
+		String type = des.getString();
+		if (ExtensionConstants.Rule.fileext.equals(type)){
+			String pattern = des.getString();
+			boolean caseSensitive = des.getBoolean();
+			return new FileExt(pattern, caseSensitive);
+		}
+		
+		if (ExtensionConstants.Rule.projectNature.equals(type)){
+			String pattern = des.getString();
+			return new ProjectNature(pattern);
+		}
+		
+		if (ExtensionConstants.Rule.file.equals(type)){
+			String pattern = des.getString();
+			boolean caseSensitive = des.getBoolean();
+			int fileType = des.getInt();
+			return new File(pattern, caseSensitive, fileType);
+		}
+		
+		if (ExtensionConstants.Rule.contentType.equals(type)){
+			String pattern = des.getString();
+			boolean exactMatch = des.getBoolean();
+			return new ContentType(pattern, exactMatch);
+		}
+		
+		if (ExtensionConstants.Rule.facet.equals(type)){
+			String pattern = des.getString();
+			return new Facet(pattern, null);
+		}
+		
+		if (ExtensionConstants.Rule.pattern.equals(type)){
+			String pattern = des.getString();
+			boolean caseSensitive = des.getBoolean();
+			return new FilePattern(pattern, caseSensitive);
+		}
+		return null;
+	}
+
+	
+	public static FilterRule createFile(String pattern, boolean caseSensitive, int type){
+		return new File(pattern, caseSensitive, type);
+	}
+	
+	public static FilterRule createFileExt(String pattern, boolean caseSensitive){
+		FileExt ext = new FileExt(pattern, caseSensitive);
+		return ext;
+	}
+	
+	public static FilterRule createFacet(String facetId){
+		return new Facet(facetId, null);
+	}
+	
+	public static FilterRule createProject(String projectNature){
+		return new ProjectNature(projectNature);
+	}
+	
+	public static FilterRule createContentType(String contentType, boolean exactMatch){
+		return new ContentType(contentType, exactMatch);
+	}
+		
+	protected FilterRule(String pattern){
+		_pattern = pattern;
+	}
+
+	/** 
+	 * Answer true if the rule matches the resource, false if it doesn't, and
+	 * null if the rule does not apply to resources.
+	 * 
+	 * 	@param resource the resource that is being validated.
+	 */
+	public Boolean matchesResource(IResource resource, ContentTypeWrapper contentTypeWrapper){
+		return null;
+	}
+
+	/** 
+	 * Answer true if the rule matches the project, false if it doesn't, and null if the
+	 * rule does not apply.
+	 * 
+	 * 	@param project the project that is being validated.
+	 */
+	public Boolean matchesProject(IProject project){
+		return null;
+	}
+		
+	public String toString() {
+		return getDisplayableType() + ": " + _pattern; //$NON-NLS-1$
+	}
+	
+	/** Answer a name of the rule, that can be displayed to a user. */
+	public String getName(){
+		return toString();
+	}
+	
+	public String getPattern(){
+		return _pattern;
+	}
+	
+	/** Answer the type of rule. */
+	public abstract String getType();
+	
+	/** Answer a type that can be displayed to an end user. */
+	public abstract String getDisplayableType();
+	
+	public static boolean asBoolean(String value, boolean aDefault){
+		if (value == null)return aDefault;
+		if (value.equals(ExtensionConstants.True))return true;
+		if (value.equals(ExtensionConstants.False))return false;
+		return aDefault;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public Object getAdapter(Class adapter) {
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+	
+	public static abstract class FilterRuleCaseSensitive extends FilterRule {
+				
+		public FilterRuleCaseSensitive(String pattern, boolean caseSensitive) {
+			super(pattern);
+			_caseSensitive = caseSensitive;
+		}
+		
+		private final boolean _caseSensitive;
+				
+		@Override
+		public int hashCodeForConfig() {
+			int h =  super.hashCodeForConfig();
+			if (_caseSensitive)h += 401;
+			return h;
+		}
+				
+		@Override
+		public void save(Serializer ser) {
+			super.save(ser);
+			ser.put(_caseSensitive);
+		}
+						
+		public boolean isCaseSensitive() {
+			return _caseSensitive;
+		}
+				
+	}
+	
+	public static final class ProjectNature extends FilterRule {
+		
+		private ProjectNature(IConfigurationElement rule) {
+			super(rule.getAttribute(ExtensionConstants.RuleAttrib.id));
+			
+		}
+		
+		public ProjectNature(String projectNature) {
+			super(projectNature);
+		}
+
+		public String getDisplayableType() {
+			return ValMessages.RuleProjectNature;
+		}
+		
+		public String getType() {
+			return ExtensionConstants.Rule.projectNature;
+		}
+		
+		public Boolean matchesProject(IProject project) {
+			try {
+				return project.hasNature(_pattern);
+			}
+			catch (CoreException e){
+			}
+			return Boolean.FALSE;
+		}
+		
+	}
+	
+	public static final class FileExt extends FilterRuleCaseSensitive {
+		
+		private FileExt(IConfigurationElement rule){
+			super(rule.getAttribute(ExtensionConstants.RuleAttrib.ext), 
+				asBoolean(rule.getAttribute(ExtensionConstants.RuleAttrib.caseSensitive), false));
+		}
+				
+		private FileExt(String pattern, boolean caseSensitive) {
+			super(pattern, caseSensitive);
+		}
+
+		public String getType() {
+			return ExtensionConstants.Rule.fileext;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.RuleFileExt;
+		}
+		
+		public String getName() {
+			return toString();
+		}
+		
+		public String toString() {
+			if (isCaseSensitive())return NLS.bind(ValMessages.FileExtWithCase, getDisplayableType(), _pattern);
+			return NLS.bind(ValMessages.FileExtWithoutCase, getDisplayableType(), _pattern);
+		}
+
+		public Boolean matchesResource(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+			String ext = resource.getFileExtension();
+			if (isCaseSensitive())return _pattern.equals(ext);
+			return _pattern.equalsIgnoreCase(ext);
+		}
+	}
+	
+	/**
+	 * A rule that is used to filter based on file or folder names.
+	 * @author karasiuk
+	 *
+	 */
+	public static final class File extends FilterRuleCaseSensitive {
+		
+		private final String	_patternAsLowercase;
+		
+		/** One of the FileTypeXX constants. */
+		private final int		_type;
+		
+		public static final int FileTypeFile = 1;
+		public static final int FileTypeFolder = 2;
+		public static final int FileTypeFull = 3;
+		
+		private static File createFile(IConfigurationElement rule){
+			String pattern = rule.getAttribute(ExtensionConstants.RuleAttrib.name);
+			if (pattern == null)throw new IllegalStateException(ValMessages.ErrPatternAttrib);
+			String type = rule.getAttribute(ExtensionConstants.RuleAttrib.fileType);
+			if (type == null)throw new IllegalStateException(ValMessages.ErrTypeReq);
+			
+			int myType = -1;
+			if (ExtensionConstants.FileType.file.equals(type))myType = FileTypeFile;
+			else if (ExtensionConstants.FileType.folder.equals(type)){
+				myType = FileTypeFolder;
+				if (!pattern.endsWith(PortableFileDelim))pattern += PortableFileDelim;
+			}
+			else if (ExtensionConstants.FileType.full.equals(type))myType = FileTypeFull;
+			else {
+				Object[] parms = {type, ExtensionConstants.FileType.file, ExtensionConstants.FileType.folder, 
+					ExtensionConstants.FileType.full};
+				throw new IllegalStateException(NLS.bind(ValMessages.ErrType, parms));
+			}
+			boolean caseSensitive = asBoolean(rule.getAttribute(ExtensionConstants.RuleAttrib.caseSensitive), false);
+			return new File(pattern, caseSensitive, myType);
+		}
+		
+		private  File(String pattern, boolean caseSensitive, int type){			
+			super(pattern, caseSensitive);
+			_type = type;
+			_patternAsLowercase = pattern == null ? null : pattern.toLowerCase();
+		}
+				
+		public String getType() {
+			return ExtensionConstants.Rule.file;
+		}
+		
+		public String getDisplayableType() {
+			if (_type == FileTypeFolder)return ValMessages.RuleFolder;
+			if (_type == FileTypeFull)return ValMessages.RuleFull;
+			return ValMessages.RuleFile;
+		}
+		
+		public void setData(IConfigurationElement rule) {
+		}
+		
+		public String toString() {
+			if (isCaseSensitive())return NLS.bind(ValMessages.FileExtWithCase, getDisplayableType(), _pattern);
+			return NLS.bind(ValMessages.FileExtWithoutCase, getDisplayableType(), _pattern);
+		}
+		
+		public Boolean matchesResource(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+			String name = null;
+			switch (_type){
+			case FileTypeFile:
+				name = resource.getName();
+				break;
+				
+			case FileTypeFolder:
+				name = resource.getProjectRelativePath().removeLastSegments(1).toString() + PortableFileDelim;
+				break;
+				
+			case FileTypeFull:
+				name = resource.getProjectRelativePath().toPortableString();
+				break;
+			}
+			
+			if (name == null)return Boolean.FALSE;
+			if (isCaseSensitive())return name.startsWith(_pattern);
+			return name.toLowerCase().startsWith(_patternAsLowercase);
+		}
+								
+		@Override
+		public void save(Serializer ser) {
+			super.save(ser);
+			ser.put(_type);
+		}
+		
+	}
+	
+	public static final class Facet extends FilterRule {
+		
+		private final String _versionExpression;
+		
+		private Facet(IConfigurationElement rule){
+			super(rule.getAttribute(ExtensionConstants.RuleAttrib.id));
+			_versionExpression = rule.getAttribute(ExtensionConstants.RuleAttrib.version);
+			
+		}
+				
+		public Facet(String facetId, String versionExpression) {
+			super(facetId);
+			_versionExpression = versionExpression;
+		}
+
+		public String getType() {
+			return ExtensionConstants.Rule.facet;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.RuleFacet;
+		}
+		
+		@Override
+		public Boolean matchesProject(IProject project) {
+			try {
+				if (_versionExpression == null)return FacetedProjectFramework.hasProjectFacet(project, _pattern);
+				return FacetedProjectFramework.hasProjectFacet(project, _pattern, _versionExpression);
+			}
+			catch (CoreException e){
+				if (Tracing.isLogging())ValidationPlugin.getPlugin().handleException(e);
+			}
+			return Boolean.FALSE;
+		}
+		
+		@Override
+		public String toString() {
+			StringBuffer b = new StringBuffer(200);
+			b.append(getDisplayableType());
+			b.append(": "); //$NON-NLS-1$
+			b.append(_pattern);
+			
+			if (_versionExpression !=  null){
+				b.append(" ("); //$NON-NLS-1$
+				b.append(_versionExpression);
+				b.append(")"); //$NON-NLS-1$
+			}
+			return b.toString();
+		}
+		
+	}
+	
+	public static final class ContentType extends FilterRule {
+		
+		private final IContentType 	_type;
+		private final boolean		_exactMatch;
+		
+		private ContentType(String pattern, boolean exactMatch){
+			super(pattern);
+			_type = Platform.getContentTypeManager().getContentType(pattern);
+			_exactMatch = exactMatch;
+		}
+		
+		private static ContentType createContentType(IConfigurationElement rule){
+			String pattern = rule.getAttribute(ExtensionConstants.RuleAttrib.id);
+			boolean exactMatch = true;
+			String exact = rule.getAttribute(ExtensionConstants.RuleAttrib.exactMatch);
+			if (ExtensionConstants.False.equals(exact)) exactMatch = false;
+			
+			return new ContentType(pattern, exactMatch);
+		}
+				
+		public String getType() {
+			return ExtensionConstants.Rule.contentType;
+		}
+		
+		@Override
+		public int hashCodeForConfig() {
+			int h =  super.hashCodeForConfig();
+			if (_exactMatch)h += 301;
+			return h;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.RuleContentType;
+		}
+								
+		@Override
+		public void save(Serializer ser) {
+			super.save(ser);
+			ser.put(_exactMatch);
+		}
+
+		public void setData(IConfigurationElement rule) {
+		}
+				
+		public Boolean matchesResource(IResource resource, ContentTypeWrapper contentTypeWrapper) {
+			if (_type == null)return Boolean.FALSE;
+			if (resource instanceof IFile) {
+				IFile file = (IFile) resource;
+				IContentType ct = contentTypeWrapper.getContentType(file);
+				if (ct == null)return Boolean.FALSE;
+				boolean match = false;
+				if (_exactMatch)match = ct.getId().equals(_type.getId());
+				else match = ct.isKindOf(_type);
+				
+				if (match && Tracing.isTraceMatches())
+					Tracing.log("FilterRule-01: ", toString() + " has matched " + resource); //$NON-NLS-1$ //$NON-NLS-2$
+				return match;
+			}
+			return Boolean.FALSE;
+		}
+		
+		@Override
+		public String toString() {
+			if (_exactMatch)return NLS.bind(ValMessages.ContentTypeExact, getDisplayableType(), _pattern);
+			return NLS.bind(ValMessages.ContentTypeNotExact, getDisplayableType(), _pattern);
+		}
+		
+	}
+	
+	public static final class FilePattern extends FilterRuleCaseSensitive {
+		
+		private final Pattern _compiledPattern;
+		
+		private static FilePattern createFilePattern(IConfigurationElement rule){
+			String pattern = rule.getAttribute(ExtensionConstants.RuleAttrib.regex);
+			boolean caseSensitive = asBoolean(rule.getAttribute(ExtensionConstants.RuleAttrib.caseSensitive), false);
+			return new FilePattern(pattern, caseSensitive);
+		}
+		
+		private FilePattern(String pattern, boolean caseSensitive){
+			super(pattern, caseSensitive);
+			int flags = 0;
+			if (caseSensitive)flags = Pattern.CASE_INSENSITIVE;
+			Pattern compiledPattern = Pattern.compile(pattern, flags);				
+			_compiledPattern = compiledPattern;
+		}
+
+		@Override
+		public String getDisplayableType() {
+			// FIXME this should be replaced as soon as we are allowed to change the UI.
+			return ValMessages.RuleFile;
+		}
+
+		@Override
+		public String getType() {
+			return ExtensionConstants.Rule.pattern;
+		}
+		
+		@Override
+		public Boolean matchesResource(IResource resource, ContentTypeWrapper wrapper) {
+			String name = PortableFileDelim + resource.getProjectRelativePath().toPortableString();
+			if (name == null)return Boolean.FALSE;
+			return _compiledPattern.matcher(name).matches();
+		}		
+	}
+	
+	/**
+	 * Save your settings into the serializer.
+	 * @param ser
+	 */
+	public void save(Serializer ser) {
+		ser.put(getType());
+		ser.put(getPattern());		
+	}
+
+	public int hashCodeForConfig() {
+		int h = getType().hashCode();
+		if (_pattern != null)h += _pattern.hashCode();
+		return h;
+	}
+	
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferences.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferences.java
new file mode 100644
index 0000000..2989c2c
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferences.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.wst.validation.internal.model;
+
+/**
+ * This class represents the global Preferences as set on the Validation Preferences page. It doesn't
+ * hold any of the individual validator settings, just the global check boxes. It is an immutable object.
+ */
+public final class GlobalPreferences {
+	
+	/** false - Default setting for the should all the validation be suspended setting. */ 
+	public static final boolean DefaultSuspend = false;
+	
+	/** false - Default setting for the auto save setting. */ 
+	public static final boolean DefaultAutoSave = false;
+	
+	/** false - Default setting for the confirm dialog setting. */ 
+	public static final boolean DefaultConfirm = true;
+	
+	/** false - Default setting for letting projects override the global settings. */
+	public static final boolean DefaultOverride = true;
+	
+	/** 2 - The version of the framework meta data, if an explicit version isn't found. */
+	public static final int DefaultFrameworkVersion = 2;
+	
+	/** Bit masks for what has changed. */
+	public final static int ConfirmDialogMask = 1;
+	public final static int DisableAllValidationMask = 2;
+	public final static int OverrideMask = 4;
+	public final static int SaveAutomaticallyMask = 8;
+	public final static int StateTimeStampMask = 16;
+	public final static int VersionMask = 32;
+	
+	/**
+	 * The changes that could affect what gets validated.
+	 */
+	public final static int BuildChangeMask = DisableAllValidationMask | OverrideMask;
+	
+
+	private final boolean _confirmDialog;
+	private final boolean _disableAllValidation;
+	private final boolean _override;
+	private final boolean _saveAutomatically;
+	
+	/** The plug-in state time stamp. */
+	private final long	_stateTimeStamp;
+	
+	/** The incoming version of the framework. This is used to determine if a migration is needed.*/
+	private final int		_version;
+			
+	/**
+	 * The only valid way to get the global preferences is through the ValManager.
+	 * 
+	 * @see org.eclipse.wst.validation.internal.ValManager#getGlobalPreferences()
+	 */
+	public GlobalPreferences(GlobalPreferencesValues gp) {
+		_confirmDialog = gp.confirmDialog;
+		_disableAllValidation = gp.disableAllValidation;
+		_override = gp.override;
+		_saveAutomatically = gp.saveAutomatically;
+		_stateTimeStamp = gp.stateTimeStamp;
+		_version = gp.version;
+	}
+	
+	/**
+	 * Answer a copy of the values.
+	 * @return
+	 */
+	public GlobalPreferencesValues asValues(){
+		GlobalPreferencesValues gp = new GlobalPreferencesValues();
+		gp.confirmDialog = _confirmDialog;
+		gp.disableAllValidation = _disableAllValidation;
+		gp.override = _override;
+		gp.saveAutomatically = _saveAutomatically;
+		gp.stateTimeStamp = _stateTimeStamp;
+		gp.version = _version;
+		return gp;
+	}
+
+	public boolean getSaveAutomatically() {
+		return _saveAutomatically;
+	}
+
+
+	/**
+	 * Answer if all validation has been disabled.
+	 */
+	public boolean getDisableAllValidation() {
+		return _disableAllValidation;
+	}
+
+	public boolean getConfirmDialog() {
+		return _confirmDialog;
+	}
+
+	public long getStateTimeStamp() {
+		return _stateTimeStamp;
+	}
+
+	/** Answer whether or not projects are allowed to override the global preferences. */
+	public boolean getOverride() {
+		return _override;
+	}
+
+	public int getVersion() {
+		return _version;
+	}
+
+	/**
+	 * Compare yourself to the other global preferences and answer a bitmask with the differences.
+	 * @param gp
+	 * @return bit mask of the changes. See the xxxMask constants for the values of the bits. A zero means that they are the same.
+	 */
+	public int compare(GlobalPreferences gp) {
+		int changes = 0;
+		if (_confirmDialog != gp.getConfirmDialog())changes |= ConfirmDialogMask;
+		if (_disableAllValidation != gp.getDisableAllValidation())changes |= DisableAllValidationMask;
+		if (_override != gp.getOverride())changes |= OverrideMask;
+		if (_saveAutomatically != gp.getSaveAutomatically())changes |= SaveAutomaticallyMask;
+		if (_stateTimeStamp != gp.getStateTimeStamp())changes |= StateTimeStampMask;
+		if (_version != gp.getVersion())changes |= VersionMask;
+		return changes;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferencesValues.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferencesValues.java
new file mode 100644
index 0000000..cdf8345
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/GlobalPreferencesValues.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.wst.validation.internal.model;
+
+/**
+ * A mutable object that is used to initialize a GlobalPreference.
+ * @author karasiuk
+ *
+ */
+public class GlobalPreferencesValues {
+	public boolean disableAllValidation = GlobalPreferences.DefaultSuspend;
+	public boolean saveAutomatically = GlobalPreferences.DefaultAutoSave;
+	public boolean confirmDialog = GlobalPreferences.DefaultConfirm;
+	public boolean override = GlobalPreferences.DefaultOverride;
+	
+	/** The plug-in state time stamp. */
+	public long	stateTimeStamp;
+	
+	/** The incoming version of the framework. This is used to determine if a migration is needed.*/
+	public int		version;
+	
+	public GlobalPreferencesValues(){
+		
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/IValidatorVisitor.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/IValidatorVisitor.java
new file mode 100644
index 0000000..8c74736
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/IValidatorVisitor.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the 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.wst.validation.internal.model;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.ValOperation;
+import org.eclipse.wst.validation.internal.ValType;
+
+/**
+ * This interface is implemented by objects that visit enabled validators.
+ * <p> 
+ * Usage:
+ * <pre>
+ * class Visitor implements IValidatorVisitor {
+ *    public void visit(Validator validator, IProgressMonitor monitor) {
+ *       // your code here
+ *    }
+ * }
+ * ValidatorManager vm = ValidatorManager.getDefault();
+ * vm.accept(new Visitor(), ...);
+ * </pre>
+ * </p> 
+ * <p>
+ * Clients may implement this interface.
+ * </p>
+ */
+public interface IValidatorVisitor {
+	
+	/**
+	 * Visits the given validator.
+	 * @param validator
+	 */
+	void visit(Validator validator, IProject project, ValType valType, 
+		ValOperation operation, IProgressMonitor monitor);
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ProjectPreferences.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ProjectPreferences.java
new file mode 100644
index 0000000..dd26add
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ProjectPreferences.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.wst.validation.internal.model;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.validation.Validator;
+
+/**
+ * Validation preferences for a particular project.
+ * @author karasiuk
+ *
+ */
+public final class ProjectPreferences {
+	/*
+	 * Before this object can be considered immutable, the mutable validators need to be addressed.
+	 */
+	/** false - Default setting for the "should all the validation be suspended" setting. */ 
+	public static final boolean DefaultSuspend = false;
+	
+	/** false - Default setting for letting projects override the global settings. */
+	public static final boolean DefaultOverride = false;
+	
+	private final IProject	_project;
+
+	private final boolean 	_override;
+	private final boolean	_suspend;
+	
+	private final Validator[]	_validators;
+	
+	public ProjectPreferences(IProject project){
+		_project = project;
+		_override = DefaultOverride;
+		_suspend  = DefaultSuspend;
+		_validators = new Validator[0];
+	}
+	
+	public ProjectPreferences(IProject project, boolean override, boolean suspend, Validator[] validators){
+		_project = project;
+		_override = override;
+		_suspend = suspend;
+		_validators = validators;
+	}
+	
+	public boolean getOverride() {
+		return _override;
+	}
+	public boolean getSuspend() {
+		return _suspend;
+	}
+	
+	/**
+	 * Answer the validators that have been registered for this project.
+	 * @return an empty array if there are no validators.
+	 */
+	public Validator[] getValidators() {
+		return _validators;
+	}
+	
+	public IProject getProject() {
+		return _project;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java
new file mode 100644
index 0000000..288f226
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 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.wst.validation.internal.model;
+
+import org.eclipse.wst.validation.internal.ValidatorMutable;
+
+/**
+ * Implement some common validator methods, that don't need to be part of the API.
+ * 
+ * @author karasiuk
+ *
+ */
+public final class ValidatorHelper {
+	
+	/**
+	 * Answer true if this validator already has an exclude filter.
+	 */
+	public static boolean hasExcludeGroup(ValidatorMutable v){
+		for (FilterGroup group : v.getGroups())if (group.isExclude())return true;
+		return false;		
+	}
+}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/package.html b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/package.html
new file mode 100644
index 0000000..4b88f6b
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/package.html
@@ -0,0 +1,10 @@
+<html>
+<body>
+<h1>Validation Framework</h1>
+<h3>Build Based Validation</h3>
+The main class for build based validation is the 
+<a href="ValBuilderJob.html">ValBuilderJob</a>. This gets triggered as part of the
+build mechanism. It reacts to resource change events, and from that determines what needs to be 
+validated.
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/package.html b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/package.html
new file mode 100644
index 0000000..caa9b25
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/package.html
@@ -0,0 +1,51 @@
+<html>
+<head>
+<title>Validation Framework</title>
+</head>
+<body>
+<p>A framework for calling validators that are build based.</p>
+<p>
+There are two main types of validation, <b>build based</b> and 
+<b>as you type</b>. This framework supports build based
+validation. If auto build is turned on then the validators are called
+when the user saves their file. If auto build is not turned on then
+the validators are called when the user starts a build.</p>
+<p>This framework was added to WTP in version 3.0.</p>
+<h3>Dependency Support</h3>
+<p>Sometimes resources depend on other resources, to determine whether they are 
+valid or not. An example would be that an XML resource could depend on a DTD. If at some 
+point in the future the DTD changes, then the dependent XML resource should be 
+revalidated to ensure that it still meets the requirements of the changed DTD 
+file. In order to do this efficiently, there needs to be an association between 
+the DTD and all the resources that depend on it.<p>To be as efficient as possible, the validation framework allows 
+this dependency information to be returned as part of a
+<a href="AbstractValidator.html#validate(org.eclipse.core.resources.IResource, int, ValidationState, org.eclipse.core.runtime.IProgressMonitor)">
+validate operation</a>. Since the validator needed to figure this out anyways, 
+why not pass this information back to the framework, so that it can be saved. 
+This saves the cost of having to parse the file at some later point in time 
+(when the file is probably sitting cold on disk). The fewer times that we need 
+to open, read and/or parse the same file, will improve the performance of the 
+product.
+<p>In particular when the validate method returns, a
+<a href="ValidationResult.html">ValidationResult</a> must be returned, inside of 
+this result, all your dependencies need to be specified with the
+<a href="ValidationResult.html#setDependsOn(org.eclipse.core.resources.IResource[])">
+setDependsOn</a> method.<p>In addition to keeping the dependency information 
+up-to-date through the normal course of validation, direct access is also 
+provided to the dependency support through the
+<a href="ValidationFramework.html#getDependencyIndex()">getDependencyIndex</a> 
+method. The <a href="IDependencyIndex.html">IDependencyIndex</a> allows you to 
+directly manipulate the dependency information for a validator.
+<h3>Entry Points into the Validation Framework</h3>
+<p>Here are some of the points where the platform calls into the framework:</p>
+<ul>
+<li><b>Builder</b> - ValidationBuilder</li>
+<li><b>IFacetedProjectListener</b> - ValManager</li>
+<li><b>IJobChangeListener</b> - ValidationOperation, ValidationOperation.ValidationLauncherJob</li>
+<li><b>IProjectChangeListener</b> - ValManager</li>
+<li><b>IPropertyChangeListener</b> - ValidationConfiguration, DisabledResourceManager</li>
+<li><b>IResourceChangeListener</b> - EventManger</li>
+<li><b>IValChangedListener</b> - ValManager, DisabledValidatorManager</li>
+</ul>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.validation/xsds/exclude.exsd b/plugins/org.eclipse.wst.validation/xsds/exclude.exsd
new file mode 100644
index 0000000..92d7647
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/xsds/exclude.exsd
@@ -0,0 +1,281 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.validation" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.wst.validation" id="exclude" name="Validator Exclusion"/>
+      </appinfo>
+      <documentation>
+         A way to add additional exclusion filters to a V2 validator.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="validator" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A short id that is unique within the plug-in, so that this set of extra exclusion filters can be identified.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The short user friendly name for the exclusion.
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="validator">
+      <annotation>
+         <documentation>
+            Identifies the validator that is being extended.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="exclude"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualifed validator id that is being extended.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="identifier"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="exclude">
+      <annotation>
+         <documentation>
+            This contains a set of exclusion rules, used in filtering which resources get validated. If any of these rules are matched, then the validator is not called on this resource.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="rules"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="fileext">
+      <annotation>
+         <documentation>
+            A file extension, for example html.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="ext" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The file extension, for example html.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file extension is case sensitive, then this needs to be set to true.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="projectNature">
+      <annotation>
+         <documentation>
+            Used to filter on project natures.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified project nature id, for example &quot;org.eclipse.jdt.core.javanature&quot;.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="file">
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The file or folder name. The file name can be fully qualified, that is it starts with a leading slash (&quot;/&quot;), or it can be a relative name. Folder names are separated with the forward slash (&quot;/&quot;) character.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file name is not case senstitive, then this needs to be set to false.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="type" use="required">
+            <annotation>
+               <documentation>
+                  Type of name, there are three choices. &lt;ul&gt;&lt;li&gt;folder - specifies a project relative folder name.&lt;/li&gt;&lt;li&gt;file - a simple file name (i.e. no path information).&lt;/li&gt;&lt;li&gt;full - a fully qualified (project relative) file name.&lt;/li&gt;&lt;/ul&gt;
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="folder">
+                  </enumeration>
+                  <enumeration value="file">
+                  </enumeration>
+                  <enumeration value="full">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="rules">
+      <annotation>
+         <documentation>
+            A set of rules for determining if a resource is passed to this validator or not. The rules are OR&apos;ed together.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="fileext" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="file" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="projectNature" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="facet" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="contentType" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="pattern" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="facet">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The facet id.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="contentType">
+      <annotation>
+         <documentation>
+            Used to filter based on content types.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The content type id.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="exactMatch" type="boolean">
+            <annotation>
+               <documentation>
+                  Set to true if the content type needs to match exactly. Set to false if sub types are considered matches as well.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+   <element name="pattern">
+      <annotation>
+         <documentation>
+            Holds a regualr expression, that matches the resource&apos;s project relative name.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="regex" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Holds a Java regular expression. See the class java.util.regex.Pattern for more details. This regular expression is matched against a resource&apos;s project relative path, after that path has been converted into a portable path.
+&lt;p&gt;The path will always start with a forward slash (/) so that folder names can be more easily matched.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file name is not case senstitive, then this needs to be set to false.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         WebTools 3.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         &lt;!-- A plug-in is turning off the T1A validator for projects that have the ModuleCoreNature --&gt;
+ &lt;extension
+       id=&quot;exclude1&quot;
+       point=&quot;org.eclipse.wst.validation.exclude&quot;&gt;
+    &lt;validator
+          id=&quot;org.eclipse.wst.common.tests.validation.T1A&quot;&gt;
+       &lt;exclude&gt;
+          &lt;rules&gt;
+             &lt;projectNature
+                   id=&quot;org.eclipse.jst.j2ee.ModuleCoreNature&quot;&gt;
+             &lt;/projectNature&gt;
+          &lt;/rules&gt;
+       &lt;/exclude&gt;
+    &lt;/validator&gt;
+ &lt;/extension&gt;
+
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         Provisional API.
+      </documentation>
+   </annotation>
+
+
+
+
+</schema>
diff --git a/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd b/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd
index a30b719..fcfe873 100644
--- a/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/referencialFileExtSchema.exsd
@@ -59,7 +59,7 @@
          <attribute name="class" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  This class must implement org.eclipse.wst.validation.internal.operations.ReferencialFileValidator. 
                </documentation>
             </annotation>
          </attribute>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd b/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd
index d6aece6..fd854dc 100644
--- a/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/validationHelper.exsd
@@ -47,7 +47,7 @@
          <attribute name="helperClass" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  The class must implement org.eclipse.wst.validation.internal.IProjectValidationHelper.
                </documentation>
             </annotation>
          </attribute>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd b/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd
index 9e20f4a..acffbfa 100644
--- a/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/validationSelectionHandler.exsd
@@ -51,7 +51,7 @@
          <attribute name="handlerClass" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  The class must implement the IValidationSelectionHandler interface.
                </documentation>
             </annotation>
          </attribute>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validator.exsd b/plugins/org.eclipse.wst.validation/xsds/validator.exsd
new file mode 100644
index 0000000..fcb4818
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/xsds/validator.exsd
@@ -0,0 +1,420 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.validation" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.wst.validation" id="validator-v2" name="Validator V2"/>
+      </appinfo>
+      <documentation>
+         This is used to register a validator to the validation framework (version 2). In addition to specifying the validator to invoke, it registers a set of default filter rules, to control which resources are passsed to the validator.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="validator"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A short id that is unique within the plug-in, so that this validator can be identified.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The short user friendly name of the validator.
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="validator">
+      <annotation>
+         <documentation>
+            Defines a validator to the validation framework.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="include" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="exclude" minOccurs="0" maxOccurs="1"/>
+            <element ref="messageCategory" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="group" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The class that implements the validator.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.wst.validation.AbstractValidator"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="build" type="boolean">
+            <annotation>
+               <documentation>
+                  Is this validator enabled by default for build based validations? The default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="manual" type="boolean">
+            <annotation>
+               <documentation>
+                  Is this validator enabled by default for manual based validations? The default is true.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string">
+            <annotation>
+               <documentation>
+                  The version of the definition. It is a simple integer. If not specified the version is assumed to be 1.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="sourceid" type="string">
+            <annotation>
+               <documentation>
+                  If this validator also serves as an as-you-type validator (also know as an ISourceValidator) then it&apos;s source id is specified here, so that the two validators can be associated with one another.
+By source id, we mean the id that is used in the org.eclipse.wst.sse.ui.sourceValidation extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="markerId" type="string">
+            <annotation>
+               <documentation>
+                  If your validator wishes to use it&apos;s own marker, it can do so by supplying that marker id here.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="include">
+      <annotation>
+         <documentation>
+            This contains a set of inclusion rules, which are used in filtering which resources get validated. At least one of these rules must be satisfied in order for the validator to be called on the particular resource.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="rules"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="exclude">
+      <annotation>
+         <documentation>
+            This contains a set of exclusion rules, used in filtering which resources get validated. If any of these rules are matched, then the validator is not called on this resource.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="rules"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="fileext">
+      <annotation>
+         <documentation>
+            A file extension, for example html.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="ext" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The file extension, for example html.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file extension is case sensitive, then this needs to be set to true.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="projectNature">
+      <annotation>
+         <documentation>
+            Used to filter on project natures.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified project nature id, for example &quot;org.eclipse.jdt.core.javanature&quot;.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="file">
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The file or folder name. The file name can be fully qualified, that is it starts with a leading slash (&quot;/&quot;), or it can be a relative name. Folder names are separated with the forward slash (&quot;/&quot;) character.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file name is not case senstitive, then this needs to be set to false.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="type" use="required">
+            <annotation>
+               <documentation>
+                  Type of name, there are three choices. &lt;ul&gt;&lt;li&gt;folder - specifies a project relative folder name.&lt;/li&gt;&lt;li&gt;file - a simple file name (i.e. no path information).&lt;/li&gt;&lt;li&gt;full - a fully qualified (project relative) file name.&lt;/li&gt;&lt;/ul&gt;
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="folder">
+                  </enumeration>
+                  <enumeration value="file">
+                  </enumeration>
+                  <enumeration value="full">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="rules">
+      <annotation>
+         <documentation>
+            A set of rules for determining if a resource is passed to this validator or not. The rules are OR&apos;ed together.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="fileext" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="file" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="projectNature" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="facet" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="contentType" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="pattern" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="facet">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The facet id.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string">
+            <annotation>
+               <documentation>
+                  A version expression that can be used to futher qualify the match. If not specifed, then versions are not used as a criteria for selecting the facet. The syntax of this expression, is the same syntax that is used by the facet framework.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="group">
+      <annotation>
+         <documentation>
+            Declares that this validator belongs to this validation group.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully qualified ID of the validation group to which this validator belongs.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="identifier"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="contentType">
+      <annotation>
+         <documentation>
+            Used to filter based on content types.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The content type id.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="exactMatch" type="boolean">
+            <annotation>
+               <documentation>
+                  Set to true if the content type needs to match exactly. Set to false if sub types are considered matches as well.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="messageCategory">
+      <annotation>
+         <documentation>
+            Used to group together a set of messages, where the user can change the message severity of all the messages in the group. This is similar to the support in the JDT, where for example a user can specify whether used methods should be errors, warnings or ignored.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A simple id that is unique within the scope of this validator.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="label" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A short, one line label that is displayed to the end user, that describes the message category.
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="severity">
+            <annotation>
+               <documentation>
+                  The default severity for this category.
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="error">
+                  </enumeration>
+                  <enumeration value="warning">
+                  </enumeration>
+                  <enumeration value="ignore">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="pattern">
+      <annotation>
+         <documentation>
+            Holds a regualr expression, that matches the resource&apos;s project relative name.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="regex" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Holds a Java regular expression. See the class java.util.regex.Pattern for more details. This regular expression is matched against a resource&apos;s project relative path, after that path has been converted into a portable path.
+&lt;p&gt;The path will always start with a forward slash (/) so that folder names can be more easily matched.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="caseSensitive" type="boolean">
+            <annotation>
+               <documentation>
+                  If the file name is not case senstitive, then this needs to be set to false.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         Provisional API.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         WebTools 3.0.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         An example of a validator that will be called on resources that have html or htm file extensions.
+&lt;pre&gt;
+   &lt;extension
+         point=&quot;org.eclipse.wst.validation.validator&quot;
+         id=&quot;Test&quot; name=&quot;%Validator.Name&quot;&gt;
+      &lt;validator class=&quot;org.eclipse.wst.validation.test.TestValidator&quot;&gt;
+         &lt;include&gt;
+            &lt;rules&gt;
+               &lt;fileext ext=&quot;html&quot;/&gt;
+               &lt;fileext ext=&quot;htm&quot;/&gt;
+            &lt;/rules&gt;
+         &lt;/include&gt;
+      &lt;/validator&gt;
+   &lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2007,2008 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which accompanies 
+this distribution, and is available at &lt;a
+href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validatorExtSchema.exsd b/plugins/org.eclipse.wst.validation/xsds/validatorExtSchema.exsd
index d97b916..25d2602 100644
--- a/plugins/org.eclipse.wst.validation/xsds/validatorExtSchema.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/validatorExtSchema.exsd
@@ -20,22 +20,25 @@
          <attribute name="point" type="string" use="required">

             <annotation>

                <documentation>

-                  a fully qualified identifier of the target extension point

+                  A fully qualified identifier of the target extension point

                </documentation>

             </annotation>

          </attribute>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

-                  an optional identifier of the extension instance

+                  An optional identifier of the extension instance

                </documentation>

             </annotation>

          </attribute>

          <attribute name="name" type="string" use="required">

             <annotation>

                <documentation>

-                  an optional name of the extension instance

+                  An optional name of the extension instance

                </documentation>

+               <appInfo>

+                  <meta.attribute translatable="true"/>

+               </appInfo>

             </annotation>

          </attribute>

       </complexType>

@@ -44,15 +47,15 @@
    <element name="validator">

       <complexType>

          <sequence>

-            <element ref="projectNature" minOccurs="1" maxOccurs="unbounded"/>

-            <element ref="filter" minOccurs="1" maxOccurs="unbounded"/>

-            <element ref="enablement"/>

+            <element ref="projectNature" minOccurs="0" maxOccurs="unbounded"/>

+            <element ref="filter" minOccurs="0" maxOccurs="unbounded"/>

+            <element ref="enablement" minOccurs="0" maxOccurs="unbounded"/>/>

             <element ref="helper"/>

             <element ref="dependentValidator" minOccurs="0" maxOccurs="1"/>

             <element ref="run"/>

             <element ref="markerId" minOccurs="0" maxOccurs="1"/>

             <element ref="facet" minOccurs="0" maxOccurs="unbounded"/>

-            

+            <element ref="contentTypeBinding" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="to" type="string">

             <annotation>

@@ -91,6 +94,30 @@
          </attribute>

       </complexType>

    </element>

+   

+   

+   <element name="contentTypeBinding">

+      <annotation>

+         <appInfo>

+            <meta.element labelAttribute="contentTypeId"/>

+         </appInfo>

+         <documentation>

+                        Associates a particular content type with the current validator, and enables the validator to be run on resources of the specified content type.

+         </documentation>

+      </annotation>

+      <complexType>

+         <attribute name="contentTypeId" type="string" use="required">

+            <annotation>

+               <documentation>

+                  The content type identifier. This is an ID defined by the &apos;org.eclipse.core.runtime.contentTypes&apos; extension point.

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+   

+   

+   

 

    <element name="filter">

       <complexType>

diff --git a/plugins/org.eclipse.wst.validation/xsds/validatorgroup.exsd b/plugins/org.eclipse.wst.validation/xsds/validatorgroup.exsd
new file mode 100644
index 0000000..df05cb1
--- /dev/null
+++ b/plugins/org.eclipse.wst.validation/xsds/validatorgroup.exsd
@@ -0,0 +1,161 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.validation" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.wst.validation" id="validatorGroup" name="Validator Group"/>
+      </appinfo>
+      <documentation>
+         Defines a grouping for validators with listeners notified of group members&apos; activites.  Useful for pre-caching common information used by multiple validators and disposing of that information when they&apos;re all done.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="group" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="identifier">
+            <annotation>
+               <documentation>
+                  A unique identifier for this extension
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  A name for this extension
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="listener">
+      <annotation>
+         <documentation>
+            A listener for activities in this group.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The listener&apos;s class.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.wst.validation.IValidatorGroupListener"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="group">
+      <annotation>
+         <documentation>
+            Declares a validator group.  A group may have multiple listeners.
+         </documentation>
+      </annotation>
+      <complexType>
+         <choice>
+            <element ref="listener" minOccurs="1" maxOccurs="unbounded"/>
+         </choice>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="identifier"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         WebTools 3.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         Define a listener that simply prints that it has been called.
+&lt;pre&gt;
+&lt;extension point=&quot;org.eclipse.wst.validation.validatorGroup&quot;&gt;
+   &lt;group id=&quot;validatorGroup&quot;&gt;
+     &lt;listener class=&quot;org.eclipse.wst.validation.example.ValidatorGroupListener&quot;/&gt;
+   &lt;/group&gt;
+&lt;/extension&gt;
+
+public class org.eclipse.wst.validation.example.ValidatorGroupListener implements IValidatorGroupListener {
+
+  public ValidatorGroupListener() {
+  }
+
+  public void validationFinishing(IResource resource, IProgressMonitor monitor, ValType valType, ValOperation operation) {
+   System.out.println(&quot;Finishing:&quot; + resource.getFullPath());
+  }
+
+  public void validationStarting(IResource resource, IProgressMonitor monitor, ValType valType, ValOperation operation) {
+   System.out.println(&quot;Starting:&quot; + resource.getFullPath());
+  }
+}
+ 
+&lt;extension id=&quot;id&quot; name=&quot;name&quot; point=&quot;org.eclipse.wst.validation.validatorV2&quot;&gt;
+  &lt;validator class=&quot;org.eclipse.wst.validation.example.Validator&quot;&gt;
+    &lt;group id=&quot;org.eclipse.wst.validation.example.validatorGroup&quot;/&gt;
+  &lt;/validator&gt;
+&lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         Provisional API.
+      </documentation>
+   </annotation>
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2008 IBM Corporation and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which accompanies 
+this distribution, and is available at &lt;a
+href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>