RESOLVED - bug 293012: [modeling] Live validation and cross resource containment
https://bugs.eclipse.org/bugs/show_bug.cgi?id=293012
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/META-INF/MANIFEST.MF b/modeling/plugins/org.eclipse.pde.emfforms/META-INF/MANIFEST.MF
index 88de96e..4a10c29 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/META-INF/MANIFEST.MF
+++ b/modeling/plugins/org.eclipse.pde.emfforms/META-INF/MANIFEST.MF
@@ -18,7 +18,8 @@
org.eclipse.wst.xml.ui;bundle-version="1.0.400";resolution:=optional,
org.eclipse.wst.xsd.core;bundle-version="1.1.300";resolution:=optional,
org.eclipse.jface.text;bundle-version="3.4.0",
- org.eclipse.ui.editors;bundle-version="3.4.0"
+ org.eclipse.ui.editors;bundle-version="3.4.0",
+ org.eclipse.emf.transaction;bundle-version="[1.2.0,2.0.0)"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-Localization: plugin
Bundle-ActivationPolicy: lazy
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/RichTooltipHyperlinkAdapter.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/RichTooltipHyperlinkAdapter.java
index 508f29b..0196eac 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/RichTooltipHyperlinkAdapter.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/RichTooltipHyperlinkAdapter.java
@@ -8,7 +8,7 @@
* Contributors:
* Anyware Technologies - initial API and implementation
*
- * $Id: RichTooltipHyperlinkAdapter.java,v 1.1 2009/09/13 20:32:58 bcabe Exp $
+ * $Id: RichTooltipHyperlinkAdapter.java,v 1.2 2009/09/13 21:28:29 bcabe Exp $
*/
package org.eclipse.pde.emfforms.internal.validation;
@@ -143,8 +143,10 @@
pw.print("\"> <a href=\"");
pw.print(message.hashCode() + "");
pw.print("\">");
+ //FIXME prefix should be HTML escaped
if (message.getPrefix() != null)
pw.print(message.getPrefix());
+ //FIXME message should be HTML escaped
pw.print(message.getMessage());
pw.println("</a></li>");
}
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/ValidatingEContentAdapter.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/ValidatingEContentAdapter.java
index a7635df..960a584 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/ValidatingEContentAdapter.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/ValidatingEContentAdapter.java
@@ -8,18 +8,21 @@
* Contributors:
* Anyware Technologies - initial API and implementation
*
- * $Id: ValidatingEContentAdapter.java,v 1.10 2009/09/07 13:16:30 bcabe Exp $
+ * $Id: ValidatingEContentAdapter.java,v 1.11 2009/09/22 14:54:31 bcabe Exp $
*/
package org.eclipse.pde.emfforms.internal.validation;
-import java.util.Properties;
+import java.util.*;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.ecore.util.EContentAdapter;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.transaction.NotificationFilter;
import org.eclipse.pde.emfforms.editor.EmfFormEditor;
import org.eclipse.pde.emfforms.editor.ValidatingService;
import org.eclipse.pde.emfforms.internal.Activator;
@@ -55,8 +58,27 @@
return super.getObjectLabel(eObject);
}
- };
+ protected boolean doValidateContents(EObject eObject, DiagnosticChain diagnostics, Map<Object, Object> context) {
+
+ Resource eContainerResource = eObject.eResource();
+ List<EObject> eContents = eObject.eContents();
+ if (!eContents.isEmpty()) {
+ boolean result = true;
+ for (Iterator<EObject> i = eContents.iterator(); i.hasNext() && (result || diagnostics != null);) {
+ EObject child = i.next();
+ // in case of cross resource containment,
+ // avoid to validate a child which are not in the container resource
+ Resource eChildResource = child.eResource();
+ if (eContainerResource != null && eChildResource == eContainerResource) {
+ result &= validate(child, diagnostics, context);
+ }
+ }
+ return result;
+ }
+ return true;
+ }
+ };
}
private void forceValidatingService34Registration() {
@@ -71,7 +93,7 @@
@Override
public void notifyChanged(Notification notification) {
super.notifyChanged(notification);
- if (notification.getEventType() != Notification.REMOVING_ADAPTER) {
+ if (!NotificationFilter.READ.matches(notification)) {
validate();
}
}
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/ValidatingService34.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/ValidatingService34.java
index 9a7f158..252398e 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/ValidatingService34.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/validation/ValidatingService34.java
@@ -43,11 +43,7 @@
if (diagnosticData.get(1) == emfObservable.getValueType()) {
if (swtObservable.getWidget() instanceof Control) {
Control control = (Control) swtObservable.getWidget();
-
- if (true || control.isVisible())
- messageManager.addMessage(swtObservable, diagnostic.getMessage(), null, keyMap.getMessageProviderKey(diagnostic.getSeverity()), control);
- else
- messageManager.addMessage(swtObservable, diagnostic.getMessage(), null, keyMap.getMessageProviderKey(diagnostic.getSeverity()));
+ messageManager.addMessage(swtObservable, diagnostic.getMessage(), null, keyMap.getMessageProviderKey(diagnostic.getSeverity()), control);
return true;
}