Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThanh Liem PHAN2017-05-12 09:21:12 +0000
committervincent lorenzo2017-05-27 14:41:24 +0000
commitee1a6a1f3fc9477ca12fec27f8ea5880a586ac6a (patch)
tree5a72b5972a1bce103560e95655e9687310fe0470 /plugins/infra
parent613b441e2c5a1c5ed580fa5919821fd9ee2be181 (diff)
downloadorg.eclipse.papyrus-ee1a6a1f3fc9477ca12fec27f8ea5880a586ac6a.tar.gz
org.eclipse.papyrus-ee1a6a1f3fc9477ca12fec27f8ea5880a586ac6a.tar.xz
org.eclipse.papyrus-ee1a6a1f3fc9477ca12fec27f8ea5880a586ac6a.zip
Bug 515491: [Property View][DataType] Loss of information while editing
fields of a datatype https://bugs.eclipse.org/bugs/show_bug.cgi?id=515491 - Just set a new value if it is different from the old one. - Change condition is checked for boolean, enumeration and other kinds of value. Change-Id: I9ca41b4c3912e7461cbbc5dc1667a9421651a7ef Signed-off-by: Thanh Liem PHAN <thanhliem.phan@all4tec.net>
Diffstat (limited to 'plugins/infra')
-rw-r--r--plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/emf/databinding/EObjectObservableValueEditingSupport.java61
1 files changed, 33 insertions, 28 deletions
diff --git a/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/emf/databinding/EObjectObservableValueEditingSupport.java b/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/emf/databinding/EObjectObservableValueEditingSupport.java
index 30ec07f3561..47652e5920c 100644
--- a/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/emf/databinding/EObjectObservableValueEditingSupport.java
+++ b/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/emf/databinding/EObjectObservableValueEditingSupport.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2016 CEA LIST and others.
+ * Copyright (c) 2016, 2017 CEA LIST and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,7 +8,7 @@
*
* Contributors:
* Fanch BONNABESSE (ALL4TEC) fanch.bonnabesse@all4tec.net - Initial API and implementation
- *
+ * Thanh Liem PHAN (ALL4TEC) thanhliem.phan@all4tec.net - Bug 515491
*****************************************************************************/
package org.eclipse.papyrus.infra.ui.emf.databinding;
@@ -108,12 +108,12 @@ public class EObjectObservableValueEditingSupport extends EditingSupport {
/**
* Create a cell editor which opened a dialog to select multiple value.
- *
- * @return The CellEditor.
+ *
+ * @return The CellEditor
*/
private CellEditor createMultipleCellEditor(EStructuralFeature feature, EObjectObservableValue element) {
EClassifier eType = feature.getEType();
- MultipleCellEditor multiEditor = new MultipleCellEditor(((TreeViewer) getViewer()).getTree(), ((EObjectObservableValue) element).getObserved(), feature);
+ MultipleCellEditor multiEditor = new MultipleCellEditor(((TreeViewer) getViewer()).getTree(), element.getObserved(), feature);
if (eType instanceof EEnum) {
ReferenceSelector referenceSelector = new ReferenceSelector(true);
referenceSelector.setContentProvider(new AbstractStaticContentProvider() {
@@ -150,14 +150,16 @@ public class EObjectObservableValueEditingSupport extends EditingSupport {
*/
@Override
protected Object getValue(final Object element) {
+
if (element instanceof EObjectObservableValue) {
- EStructuralFeature feature = (EStructuralFeature) ((EObjectObservableValue) element).getValueType();
+ EObjectObservableValue observableValue = (EObjectObservableValue) element;
+ EStructuralFeature feature = (EStructuralFeature) observableValue.getValueType();
if (feature instanceof EReference) {
return null;
- // return getReferenceValue((EReference) feature);
}
EClassifier eType = feature.getEType();
- Object object = ((EObjectObservableValue) element).getValue();
+ Object object = observableValue.getValue();
+
if (feature.isMany()) {
return object;
} else {
@@ -215,19 +217,22 @@ public class EObjectObservableValueEditingSupport extends EditingSupport {
@Override
protected void setValue(final Object element, final Object value) {
if (element instanceof EObjectObservableValue) {
- EStructuralFeature feature = (EStructuralFeature) ((EObjectObservableValue) element).getValueType();
+ EObjectObservableValue observableValue = (EObjectObservableValue) element;
+
+ EStructuralFeature feature = (EStructuralFeature) observableValue.getValueType();
if (feature instanceof EReference) {
// setReferenceValue(element, value);
} else {
EClassifier eType = feature.getEType();
if (eType instanceof EEnum) {
- setEnumerationValue((EObjectObservableValue) element, value);
+ setEnumerationValue(observableValue, value);
} else {
String eTypeName = eType.getName();
if (eTypeName.equals("Boolean")) { //$NON-NLS-1$
- setBooleanValue((EObjectObservableValue) element, value);
- } else {
- ((EObjectObservableValue) element).setValue(value);
+ setBooleanValue(observableValue, value);
+ } else if (!observableValue.getValue().equals(value)) {
+ // Just set the new value if it is different from the current one
+ observableValue.setValue(value);
}
}
}
@@ -238,7 +243,7 @@ public class EObjectObservableValueEditingSupport extends EditingSupport {
/**
* This allows to set the enumeration value.
- *
+ *
* @param element
* The element to manage.
* @param value
@@ -250,12 +255,6 @@ public class EObjectObservableValueEditingSupport extends EditingSupport {
EEnum eType = (EEnum) feature.getEType();
List<EEnumLiteral> literals = eType.getELiterals();
- List<String> proposals = new ArrayList<>();
- for (int i = 0; i < literals.size(); i++) {
- // i+1 because there is already the "" string
- proposals.add(i, literals.get(i).getLiteral());
- }
-
if (null == value) {
element.setValue(null);
} else {
@@ -276,13 +275,14 @@ public class EObjectObservableValueEditingSupport extends EditingSupport {
element.setValue(literalsToSet);
} else {
- // retrieve the index of the current value in the list
+ // Retrieve the index of the current value in the list
int index = (Integer) value;
- if (index >= 0 && index < literals.size()) {
+
+ // Just set the new value if it is different from the old one
+ if (index >= 0 && index < literals.size() && !element.getValue().toString().equals(literals.get(index).getLiteral())) {
element.setValue(literals.get(index));
}
}
-
}
}
@@ -300,14 +300,19 @@ public class EObjectObservableValueEditingSupport extends EditingSupport {
element.setValue(value);
} else {
if (null == value) {
- // Do Nothing
- // propertiesToUpdate.remove(featureName);
+ // Do nothing
} else if (value.equals(0)) {
- element.setValue(Boolean.valueOf(booleanProposals[0]));
+ // Just set the new value if it is differ from the old one
+ if (!element.getValue().toString().equals(this.booleanProposals[0])) {
+ element.setValue(Boolean.valueOf(this.booleanProposals[0]));
+ }
} else if (value.equals(1)) {
- element.setValue(Boolean.valueOf(booleanProposals[1]));
+ // Just set the new value if it is differ from the old one
+ if (!element.getValue().toString().equals(this.booleanProposals[1])) {
+ element.setValue(Boolean.valueOf(this.booleanProposals[1]));
+ }
} else {
- Activator.log.error("impossible to set boolean value " + value, null); //$NON-NLS-1$
+ Activator.log.error("Impossible to set boolean value " + value, null); //$NON-NLS-1$
}
}
}

Back to the top