245433 IValidateEditListener should be used when changing target runtime
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.project.facet.ui/META-INF/MANIFEST.MF
index 98e0466..4eef4e6 100644
--- a/plugins/org.eclipse.wst.common.project.facet.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.project.facet.ui/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Vendor: %providerName
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.project.facet.ui; singleton:=true
-Bundle-Version: 1.1.2.qualifier
+Bundle-Version: 1.1.3.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.wst.common.project.facet.ui.internal.FacetUiPlugin
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/RuntimesPropertyPage.java b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/RuntimesPropertyPage.java
index 89c8831..cea622a 100644
--- a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/RuntimesPropertyPage.java
+++ b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/RuntimesPropertyPage.java
@@ -14,12 +14,14 @@
 import java.util.Iterator;
 import java.util.Set;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 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.jface.dialogs.ErrorDialog;
@@ -43,6 +45,7 @@
 import org.eclipse.wst.common.project.facet.core.IFacetedProjectListener;
 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.internal.CopyOnWriteSet;
 import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
 import org.eclipse.wst.common.project.facet.ui.AddRemoveFacetsWizard;
 
@@ -57,6 +60,9 @@
     private ChangeTargetedRuntimesDataModel model;
     private RuntimesPanel panel;
     
+    private IFile[] validateEditFiles;
+   
+    
     protected Control createContents( final Composite parent ) 
     {
         final IAdaptable element = getElement();
@@ -174,7 +180,8 @@
     
     public boolean performOk() 
     {
-        final Set targeted = this.model.getTargetedRuntimes();
+        final Set targeted = new CopyOnWriteSet();
+        targeted.addAll(this.model.getTargetedRuntimes());
         final IRuntime primary = this.model.getPrimaryRuntime();
         
         if( ! this.project.getTargetedRuntimes().equals( primary ) ||
@@ -207,7 +214,10 @@
                     
                     try
                     {
-                        ws.run( wr, ws.getRoot(), IWorkspace.AVOID_UPDATE, null );
+                    	
+                    	if(validateEdit()) {
+                    		ws.run( wr, ws.getRoot(), IWorkspace.AVOID_UPDATE, null );
+                    	}
                     }
                     catch( CoreException e )
                     {
@@ -300,5 +310,21 @@
                                 Resources.class );
         }
     }
+    
+	private boolean validateEdit() {
+		if(this.validateEditFiles == null || this.validateEditFiles.length == 0) {
+			this.validateEditFiles = new IFile[3];
+			this.validateEditFiles[0] = this.project.getProject().getFile(".classpath"); //$NON-NLS-1$
+			this.validateEditFiles[1] = this.project.getProject().getFile(".settings" + IPath.SEPARATOR + "org.eclipse.wst.common.project.facet.core.xml"); //$NON-NLS-1$ //$NON-NLS-2$
+			this.validateEditFiles[2] = this.project.getProject().getFile(".settings" + IPath.SEPARATOR + "org.eclipse.jst.common.project.facet.core.prefs"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		IStatus status = ResourcesPlugin.getWorkspace().validateEdit(this.validateEditFiles, getShell());
+		
+		if(!status.isOK()) {
+			ErrorDialog.openError( getShell(), Resources.errDlgTitle, status.getMessage(), status );
+		}
+		
+		return status.isOK();
+	}
 
 }