Bug 549489 - TextCellEditor must convert empty string to null
Change-Id: I3d914fafe837a1f2e7f1a3ada27fdd6dd735f477
Signed-off-by: Eugen Neufeld <eneufeld@eclipsesource.com>
diff --git a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor.java b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor.java
index 06e3839..5372a11 100644
--- a/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor.java
+++ b/bundles/org.eclipse.emf.ecp.edit.swt/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor.java
@@ -18,6 +18,7 @@
import org.eclipse.core.databinding.property.value.IValueProperty;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
+import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.databinding.viewers.CellEditorProperties;
import org.eclipse.swt.SWT;
@@ -61,33 +62,16 @@
super(parent, style);
}
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getValueProperty()
- */
@Override
public IValueProperty getValueProperty() {
return CellEditorProperties.control().value(WidgetProperties.text(SWT.FocusOut));
}
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#instantiate(org.eclipse.emf.ecore.EStructuralFeature,
- * org.eclipse.emf.ecp.view.spi.context.ViewModelContext)
- */
@Override
public void instantiate(EStructuralFeature feature, ViewModelContext viewModelContext) {
eStructuralFeature = feature;
}
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getFormatedString(java.lang.Object)
- */
@Override
public String getFormatedString(Object value) {
if (value == null) {
@@ -96,47 +80,34 @@
return String.valueOf(value);
}
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getColumnWidthWeight()
- */
@Override
public int getColumnWidthWeight() {
return 100;
}
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getTargetToModelStrategy(org.eclipse.core.databinding.DataBindingContext)
- * @since 1.6
- */
@Override
public UpdateValueStrategy getTargetToModelStrategy(DataBindingContext databindingContext) {
- return withPreSetValidation(eStructuralFeature, new UpdateValueStrategy());
+ return withPreSetValidation(eStructuralFeature, new UpdateValueStrategy() {
+
+ @Override
+ public Object convert(Object value) {
+ if ("".equals(value)) { //$NON-NLS-1$
+ value = null;
+ }
+ if (value == null && eStructuralFeature.isUnsettable()) {
+ return SetCommand.UNSET_VALUE;
+ }
+ return super.convert(value);
+ }
+
+ });
}
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getModelToTargetStrategy(org.eclipse.core.databinding.DataBindingContext)
- * @since 1.6
- */
@Override
public UpdateValueStrategy getModelToTargetStrategy(DataBindingContext databindingContext) {
return null;
}
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#setEditable(boolean)
- */
@Override
public void setEditable(boolean editable) {
if (text != null) {
@@ -144,22 +115,11 @@
}
}
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getImage(java.lang.Object)
- */
@Override
public Image getImage(Object value) {
return null;
}
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getMinWidth()
- * @since 1.6
- */
@Override
public int getMinWidth() {
return 0;
diff --git a/tests/org.eclipse.emf.ecp.edit.swt.test/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor_PTest.java b/tests/org.eclipse.emf.ecp.edit.swt.test/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor_PTest.java
index 67f6c5f..aac8944 100644
--- a/tests/org.eclipse.emf.ecp.edit.swt.test/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor_PTest.java
+++ b/tests/org.eclipse.emf.ecp.edit.swt.test/src/org/eclipse/emf/ecp/edit/spi/swt/table/StringCellEditor_PTest.java
@@ -40,19 +40,24 @@
@Parameters(name = "Feature:{0} Expected Value:{2} isValid:{3}")
public static Object[] parameters() {
return new Object[][] {
- { TestDataPackage.eINSTANCE.getTestData_String(), TestDataFactory.eINSTANCE.createTestData(), "foo", true //$NON-NLS-1$
+ { TestDataPackage.eINSTANCE.getTestData_String(), TestDataFactory.eINSTANCE.createTestData(), "foo", "foo", //$NON-NLS-1$ //$NON-NLS-2$
+ true
+ },
+ { TestDataPackage.eINSTANCE.getTestData_String(), TestDataFactory.eINSTANCE.createTestData(), "", null, true //$NON-NLS-1$
},
{ TestDataPackage.eINSTANCE.getTestData_Boolean(), TestDataFactory.eINSTANCE.createTestData(),
- Boolean.TRUE,
+ Boolean.TRUE, Boolean.TRUE,
true },
- { TestDataPackage.eINSTANCE.getTestData_Integer(), TestDataFactory.eINSTANCE.createTestData(), 2, true },
- { TestDataPackage.eINSTANCE.getTestData_Long(), TestDataFactory.eINSTANCE.createTestData(), 2L, true },
- { TestDataPackage.eINSTANCE.getTestData_Double(), TestDataFactory.eINSTANCE.createTestData(), 85.5d, true
+ { TestDataPackage.eINSTANCE.getTestData_Integer(), TestDataFactory.eINSTANCE.createTestData(), 2, 2, true },
+ { TestDataPackage.eINSTANCE.getTestData_Long(), TestDataFactory.eINSTANCE.createTestData(), 2L, 2L, true },
+ { TestDataPackage.eINSTANCE.getTestData_Double(), TestDataFactory.eINSTANCE.createTestData(), 85.5d, 85.5d,
+ true
},
- { TestDataPackage.eINSTANCE.getTestData_Float(), TestDataFactory.eINSTANCE.createTestData(), 85.5f, true
+ { TestDataPackage.eINSTANCE.getTestData_Float(), TestDataFactory.eINSTANCE.createTestData(), 85.5f, 85.5f,
+ true
},
{ TestDataPackage.eINSTANCE.getTestData_StringMax8(), TestDataFactory.eINSTANCE.createTestData(),
- "extra long invalid string", false }, //$NON-NLS-1$
+ "extra long invalid string", "extra long invalid string", false }, //$NON-NLS-1$ //$NON-NLS-2$
};
}
@@ -64,11 +69,14 @@
private final Object newValue;
private final EObject eObject;
private final boolean valid;
+ private final Object expectedValue;
- public StringCellEditor_PTest(EStructuralFeature feature, EObject eObject, Object newValue, boolean valid) {
+ public StringCellEditor_PTest(EStructuralFeature feature, EObject eObject, Object newValue, Object expectedValue,
+ boolean valid) {
this.feature = feature;
this.eObject = eObject;
this.newValue = newValue;
+ this.expectedValue = expectedValue;
this.valid = valid;
}
@@ -98,8 +106,8 @@
target.setValue(newValue.toString());
assertEquals(newValue.toString(), ((Text) editor.getControl()).getText());
if (valid) {
- assertEquals(newValue, model.getValue());
- assertEquals(target.getValue(), model.getValue().toString());
+ assertEquals(expectedValue, model.getValue());
+ assertEquals(target.getValue(), expectedValue == null ? "" : model.getValue().toString()); //$NON-NLS-1$
} else {
assertNull(model.getValue());
}