Bug 582397 - [FilterRowComboBoxCellEditor] incorrect canonical values equals check Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com> Change-Id: Id220fef3fd83d9735856ec185d410de86c473686
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/FilterRowComboBoxCellEditor.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/FilterRowComboBoxCellEditor.java index f539fd8..f01358a 100644 --- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/FilterRowComboBoxCellEditor.java +++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/FilterRowComboBoxCellEditor.java
@@ -24,6 +24,7 @@ import org.eclipse.nebula.widgets.nattable.edit.editor.ComboBoxCellEditor; import org.eclipse.nebula.widgets.nattable.edit.editor.IComboBoxDataProvider; import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.MoveDirectionEnum; +import org.eclipse.nebula.widgets.nattable.util.ObjectUtils; import org.eclipse.nebula.widgets.nattable.widget.EditModeEnum; import org.eclipse.nebula.widgets.nattable.widget.NatCombo; import org.eclipse.swt.SWT; @@ -253,11 +254,7 @@ public boolean commit(MoveDirectionEnum direction, boolean closeAfterCommit) { if (!isClosed()) { try { Object canonicalValue = getCanonicalValue(); - if ((canonicalValue != null && this.currentCanonicalValue == null) - || (canonicalValue == null && this.currentCanonicalValue != null) - || (canonicalValue != null - && this.currentCanonicalValue != null - && !canonicalValue.equals(this.currentCanonicalValue))) { + if (!canonicalValuesEquals(canonicalValue)) { if (super.commit(direction, closeAfterCommit)) { this.currentCanonicalValue = canonicalValue; @@ -292,6 +289,39 @@ public boolean commit(MoveDirectionEnum direction, boolean closeAfterCommit) { return false; } + @SuppressWarnings("rawtypes") + private boolean canonicalValuesEquals(Object canonicalValue) { + if (canonicalValue != null && this.currentCanonicalValue == null) { + return false; + } + + if (canonicalValue == null && this.currentCanonicalValue != null) { + return false; + } + + if (canonicalValue != null && this.currentCanonicalValue != null) { + if (canonicalValue instanceof Collection && !(this.currentCanonicalValue instanceof Collection)) { + return false; + } + + if (!(canonicalValue instanceof Collection) && this.currentCanonicalValue instanceof Collection) { + return false; + } + + if (canonicalValue instanceof Collection && this.currentCanonicalValue instanceof Collection) { + return ObjectUtils.collectionsEqual( + (Collection) canonicalValue, + (Collection) this.currentCanonicalValue); + } else { + return canonicalValue.equals(this.currentCanonicalValue); + } + } + + // should only happen if canonicalValue and currentCanonicalValue are + // null + return true; + } + /** * This method will activate the usage of the dropdown filter via setting * {@link #setShowDropdownFilter(boolean)} to <code>true</code>.