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();
+ }
}