Merge "Bug 460031 - GroupDescriptorMatcher: NullPointerException with GroupByObject which contains null value "
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/data/PersonService.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/data/PersonService.java
index 309ad53..2d5002b 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/data/PersonService.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/data/PersonService.java
@@ -106,6 +106,38 @@
return result;
}
+ /**
+ * Creates a fixed list of {@link Person}s with a few null values.
+ */
+ public static List<Person> getFixedPersonsWithNull() {
+ List<Person> result = new ArrayList<Person>();
+
+ // create 5 Simpsons
+ // 2 Homer
+ result.add(new Person(1, maleNames[1], lastNames[0], Gender.MALE, true,
+ new Date(), 100d));
+ result.add(new Person(3, maleNames[1], lastNames[0], Gender.MALE, true,
+ new Date(), 100d));
+ // 2 Marge
+ result.add(new Person(7, femaleNames[0], lastNames[0], Gender.FEMALE,
+ true, new Date(), 100d));
+ result.add(new Person(8, femaleNames[0], lastNames[0], Gender.FEMALE,
+ true, new Date(), 100d));
+ // 1 Bart without money
+ result.add(new Person(7, femaleNames[0], lastNames[0], Gender.FEMALE,
+ true, new Date(), null));
+
+ // create 2 Flanders without last name
+ // 1 Ned
+ result.add(new Person(11, maleNames[5], null, Gender.MALE,
+ true, new Date(), 100d));
+ // 1 Maude
+ result.add(new Person(13, femaleNames[6], null, Gender.FEMALE,
+ true, new Date(), 100d));
+
+ return result;
+ }
+
public static List<Person> getFixedMixedPersons() {
List<Person> result = new ArrayList<Person>();
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupby/GroupByDataLayerTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupby/GroupByDataLayerTest.java
index 07c8393..871967d 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupby/GroupByDataLayerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupby/GroupByDataLayerTest.java
@@ -14,7 +14,9 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
import java.util.Comparator;
+import java.util.List;
import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry;
import org.eclipse.nebula.widgets.nattable.config.DefaultComparator;
@@ -158,6 +160,34 @@
}
@Test
+ public void testGetElementsInGroupWithNullValue() {
+ // Test with another list with null values
+ this.sortedList.clear();
+ this.sortedList.addAll(PersonService.getFixedPersonsWithNull());
+
+ // groupBy lastname
+ this.groupByModel.addGroupByColumnIndex(1);
+
+ // collect GroupBy Objects
+ List<GroupByObject> groupByObjects = new ArrayList<GroupByObject>();
+ for (Object o : this.dataLayer.getTreeList()) {
+ if (o instanceof GroupByObject) {
+ groupByObjects.add((GroupByObject) o);
+ }
+ }
+
+ // test with getElementsInGroup() class GroupDescriptorMatcher.
+ // testing like this, cause setup would be complex
+ for (GroupByObject o : groupByObjects) {
+ this.dataLayer.getElementsInGroup(o);
+ }
+
+ // if we get here, there is no NullPointerException in
+ // GroupDescriptorMatcher.
+
+ }
+
+ @Test
public void testTwoLevelGrouping() {
assertEquals(18, this.dataLayer.getRowCount());
@@ -826,7 +856,7 @@
// groupBy lastname
this.groupByModel.addGroupByColumnIndex(1);
- // if we get here, there is no class cast exception as reported in
+ // if we get here, there is no class cast exception as reported in
// Bug 459422
}
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupBy/GroupByDataLayer.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupBy/GroupByDataLayer.java
index a70c978..d20d718 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupBy/GroupByDataLayer.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupBy/GroupByDataLayer.java
@@ -11,6 +11,7 @@
* Dirk Fauth <dirk.fauth@googlemail.com> - Bug 448115, 449361, 453874
* Dirk Fauth <dirk.fauth@googlemail.com> - Bug 444839, 444855, 453885
* Dirk Fauth <dirk.fauth@googlemail.com> - Bug 459246
+ * Daniel Fritsch <danielw.fritsch@web.de> - Bug 460031
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy;
@@ -625,12 +626,19 @@
for (Entry<Integer, Object> desc : this.group.getDescriptor().entrySet()) {
int columnIndex = desc.getKey();
Object groupName = desc.getValue();
- if (!groupName.equals(this.columnAccessor.getDataValue(element, columnIndex))) {
+ if (!equals(groupName, this.columnAccessor.getDataValue(element, columnIndex))) {
return false;
}
}
return true;
}
+
+ /**
+ * java 1.7 style Objects.equals() logic
+ */
+ private boolean equals(Object a, Object b) {
+ return (a == b) || (a != null && a.equals(b));
+ }
}
/**