Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryyang2015-10-07 15:31:58 +0000
committeryyang2015-10-07 15:31:58 +0000
commit313edc9d43b3906102709fe5a4f8325aedb10b53 (patch)
treec0fd7e720485307a38afe1a1994c2f7867c48dc3
parentce8d0a95f7a770815399c01bacd38c360504f828 (diff)
downloadorg.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
-rw-r--r--org.eclipse.xwt.emf/META-INF/MANIFEST.MF3
-rw-r--r--org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFBinding.java6
-rw-r--r--org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataProvider.java2
-rw-r--r--org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/XWTEMFObservables.java35
-rw-r--r--org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/XWTEObjectObservableValue.java33
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

Back to the top