diff options
author | yyang | 2015-10-07 15:31:58 +0000 |
---|---|---|
committer | yyang | 2015-10-07 15:31:58 +0000 |
commit | 313edc9d43b3906102709fe5a4f8325aedb10b53 (patch) | |
tree | c0fd7e720485307a38afe1a1994c2f7867c48dc3 | |
parent | ce8d0a95f7a770815399c01bacd38c360504f828 (diff) | |
download | org.eclipse.xwt-313edc9d43b3906102709fe5a4f8325aedb10b53.tar.gz org.eclipse.xwt-313edc9d43b3906102709fe5a4f8325aedb10b53.tar.xz org.eclipse.xwt-313edc9d43b3906102709fe5a4f8325aedb10b53.zip |
Bug 474963 - The EMF Editor is not dirty when we change the model
5 files changed, 76 insertions, 3 deletions
diff --git a/org.eclipse.xwt.emf/META-INF/MANIFEST.MF b/org.eclipse.xwt.emf/META-INF/MANIFEST.MF index eae6d41..1ea4bd7 100644 --- a/org.eclipse.xwt.emf/META-INF/MANIFEST.MF +++ b/org.eclipse.xwt.emf/META-INF/MANIFEST.MF @@ -9,6 +9,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.xwt;bundle-version="0.9.0";visibility:=reexport,
org.eclipse.emf.databinding;bundle-version="1.1.0",
org.eclipse.swt;bundle-version="3.4.0",
- org.eclipse.core.databinding.property;bundle-version="1.1.0"
+ org.eclipse.core.databinding.property;bundle-version="1.1.0",
+ org.eclipse.emf.edit;bundle-version="2.9.0"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Export-Package: org.eclipse.xwt.emf
diff --git a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFBinding.java b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFBinding.java index 9567972..fc990e0 100644 --- a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFBinding.java +++ b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFBinding.java @@ -13,9 +13,11 @@ import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.xwt.XWT;
import org.eclipse.xwt.emf.converters.StringToURI;
-
+import org.eclipse.swt.widgets.Button;
/**
* @author jliu jin.liu@soyatec.com
*/
@@ -30,6 +32,7 @@ public class EMFBinding { if (eObj == null) {
return null;
}
+ EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(eObj);
if (featureName != null) {
int index = featureName.indexOf(".");
while (eObj != null && index != -1) {
@@ -48,6 +51,7 @@ public class EMFBinding { EObject newEObj = EcoreUtil.create(((EReference) sf)
.getEReferenceType());
eObj.eSet(sf, newEObj);
+ // use EditingDomain
eObj = newEObj;
} else if (newValue instanceof EObject) {
eObj = (EObject) newValue;
diff --git a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataProvider.java b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataProvider.java index afdb224..5128286 100644 --- a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataProvider.java +++ b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataProvider.java @@ -84,7 +84,7 @@ public class EMFDataProvider extends AbstractDataProvider { throw new XWTException(propertyName + " feature is not found in " + EMFHelper.getQualifiedName(type)); } - return EMFObservables.observeValue(XWT.getRealm(), (EObject) bean, + return XWTEMFObservables.observeValue(XWT.getRealm(), (EObject) bean, feature); } diff --git a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/XWTEMFObservables.java b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/XWTEMFObservables.java new file mode 100644 index 0000000..daad780 --- /dev/null +++ b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/XWTEMFObservables.java @@ -0,0 +1,35 @@ +package org.eclipse.xwt.emf; + +import org.eclipse.core.databinding.observable.Realm; +import org.eclipse.core.databinding.observable.value.IObservableValue; +import org.eclipse.emf.databinding.EMFObservables; +import org.eclipse.emf.databinding.EObjectObservableValue; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; + +public class XWTEMFObservables{ + + /** + * Returns an observable value for the given feature of the object. + * @param eObject the object to observe. + * @param eStructuralFeature the feature of the object to observe. + * @return an observable value for the given feature of the object. + */ + public static IObservableValue observeValue(EObject eObject, EStructuralFeature eStructuralFeature) + { + return new XWTEObjectObservableValue(eObject, eStructuralFeature); + } + + /** + * Returns an observable value for the given feature of the object. + * @param realm the realm in which to observe. + * @param eObject the object to observe. + * @param eStructuralFeature the feature of the object to observe. + * @return an observable value for the given feature of the object. + */ + public static IObservableValue observeValue(Realm realm, EObject eObject, EStructuralFeature eStructuralFeature) + { + return new XWTEObjectObservableValue(realm, eObject, eStructuralFeature); + } + +} diff --git a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/XWTEObjectObservableValue.java b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/XWTEObjectObservableValue.java new file mode 100644 index 0000000..9677d71 --- /dev/null +++ b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/XWTEObjectObservableValue.java @@ -0,0 +1,33 @@ +package org.eclipse.xwt.emf; + +import org.eclipse.core.databinding.observable.Realm; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.databinding.EObjectObservableValue; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.command.SetCommand; +import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; +import org.eclipse.emf.edit.domain.EditingDomain; + +public class XWTEObjectObservableValue extends EObjectObservableValue { + + public XWTEObjectObservableValue(Realm realm, EObject eObject, + EStructuralFeature eStructuralFeature) { + super(realm, eObject, eStructuralFeature); + } + + public XWTEObjectObservableValue(EObject eObject, + EStructuralFeature eStructuralFeature) { + super(eObject, eStructuralFeature); + } + + @Override + protected void doSetValue(Object value) { + + EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(eObject); + Command command = new SetCommand(editingDomain, eObject, eStructuralFeature, value); + editingDomain.getCommandStack().execute(command); + //eObject.eSet(eStructuralFeature, value); + } + +}
\ No newline at end of file |