[125738] added validate edit to structure edit and artifact edit
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 f83ee85..74d212d 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
@@ -31,6 +31,7 @@
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.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.emf.common.command.CommandStackListener;
@@ -641,6 +642,8 @@
* @see ResourceStateValidator#validateState(ResourceStateValidatorPresenter)
*/
public IStatus validateState(ResourceStateValidatorPresenter presenter) throws CoreException {
+ if (presenter==null)
+ return Status.OK_STATUS;
return getStateValidator().validateState(presenter);
}
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 a0700e3..fa33635 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
@@ -16,18 +16,21 @@
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.core.runtime.Platform;
import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jem.internal.util.emf.workbench.nls.EMFWorkbenchResourceHandler;
+import org.eclipse.jem.util.UIContextDetermination;
import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
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;
/**
* Provides a Facade pattern for accessing Module Content Metamodels for Web Tools Platform flexible
@@ -314,7 +317,8 @@
public void save(IProgressMonitor aMonitor) {
if (isReadOnly())
throwAttemptedReadOnlyModification();
- artifactEditModel.save(aMonitor, this);
+ else if (validateEdit().isOK())
+ artifactEditModel.save(aMonitor, this);
}
/**
@@ -330,7 +334,16 @@
public void saveIfNecessary(IProgressMonitor aMonitor) {
if (isReadOnly())
throwAttemptedReadOnlyModification();
- artifactEditModel.saveIfNecessary(aMonitor, this);
+ else if (validateEdit().isOK())
+ artifactEditModel.saveIfNecessary(aMonitor, this);
+ }
+
+ /**
+ * Validate edit for resource state
+ */
+ protected IStatus validateEdit() {
+ IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
+ return validator.validateState(getArtifactEditModel());
}
/**
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 2d7a6a1..66e99a9 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
@@ -24,9 +24,11 @@
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.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.jem.util.UIContextDetermination;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.IEditModelHandler;
@@ -40,6 +42,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.validateedit.IValidateEditContext;
/**
* <p>
@@ -350,9 +353,11 @@
public void save(IProgressMonitor aMonitor) {
if (isReadOnly)
throwAttemptedReadOnlyModification();
- synchronized (structuralModel) {
- if (!structuralModel.isDisposed())
- structuralModel.save(aMonitor, this);
+ else if (validateEdit().isOK()) {
+ synchronized (structuralModel) {
+ if (!structuralModel.isDisposed())
+ structuralModel.save(aMonitor, this);
+ }
}
}
@@ -370,9 +375,11 @@
public void saveIfNecessary(IProgressMonitor aMonitor) {
if (isReadOnly)
throwAttemptedReadOnlyModification();
- synchronized (structuralModel) {
- if (!structuralModel.isDisposed())
- structuralModel.saveIfNecessary(aMonitor, this);
+ else if (validateEdit().isOK()) {
+ synchronized (structuralModel) {
+ if (!structuralModel.isDisposed())
+ structuralModel.saveIfNecessary(aMonitor, this);
+ }
}
}
@@ -923,4 +930,12 @@
public ModuleStructuralModel getModuleStructuralModel() {
return structuralModel;
}
+
+ /**
+ * Validate edit for resource state
+ */
+ protected IStatus validateEdit() {
+ IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
+ return validator.validateState(getModuleStructuralModel());
+ }
}
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 77a320b..ea7575c 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
@@ -16,16 +16,21 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jem.util.UIContextDetermination;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
import org.eclipse.wst.common.componentcore.ArtifactEdit;
import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
import org.eclipse.wst.common.componentcore.internal.util.ArtifactEditRegistryReader;
import org.eclipse.wst.common.componentcore.internal.util.IArtifactEditFactory;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
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.IValidateEditContext;
public abstract class ArtifactEditProviderOperation extends AbstractDataModelOperation {
@@ -91,7 +96,9 @@
public final IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
try {
initialize(monitor);
- return doExecute(monitor, info);
+ if (validateEdit().isOK())
+ return doExecute(monitor, info);
+ return Status.CANCEL_STATUS;
} finally {
dispose();
}
@@ -103,4 +110,13 @@
return artifactEdit;
}
+ /**
+ * 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/CreateReferenceComponentsOp.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/CreateReferenceComponentsOp.java
index 5e802c7..64b32b2 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
@@ -21,13 +21,21 @@
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 {
@@ -37,10 +45,41 @@
}
public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ if (!validateEdit().isOK())
+ return Status.CANCEL_STATUS;
addReferencedComponents(monitor);
addProjectReferences();
return OK_STATUS;
}
+
+ /**
+ * Validate edit for resource state
+ */
+ protected IStatus validateEdit() {
+ IStatus status = OK_STATUS;
+ 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 {
+ sEdit = StructureEdit.getStructureEditForWrite(project);
+ status = validator.validateState(sEdit.getModuleStructuralModel());
+ } finally {
+ if (sEdit !=null)
+ sEdit.dispose();
+ }
+ }
+ return status;
+ }
protected void addProjectReferences() {