diff --git a/api/src/main/java/org/openmrs/util/PersonByNameComparator.java b/api/src/main/java/org/openmrs/util/PersonByNameComparator.java index 96878c3a24aa..0debf886550f 100644 --- a/api/src/main/java/org/openmrs/util/PersonByNameComparator.java +++ b/api/src/main/java/org/openmrs/util/PersonByNameComparator.java @@ -13,11 +13,11 @@ */ package org.openmrs.util; -import java.util.Comparator; - import org.openmrs.Person; import org.openmrs.PersonName; +import java.util.Comparator; + /** * A simple person comparator for sorting persons by name. Sorts names based on the following * precedence: FamilyName, FamilyName2, GivenName, MiddleName, FamilyNamePrefix, FamilyNameSuffix @@ -40,6 +40,7 @@ public int compare(Person person1, Person person2) { * @should return negative if personName for person1 comes before that of person2 * @should return positive if personName for person1 comes after that of person2 * @should return zero if the givenName middleName and familyName match + * @should be case insensitive * @since 1.8 */ public static int comparePersonsByName(Person person1, Person person2) { @@ -55,26 +56,34 @@ public static int comparePersonsByName(Person person1, Person person2) { PersonName name1 = person1.getPersonName(); PersonName name2 = person2.getPersonName(); - int ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getFamilyName(), name2.getFamilyName()); + int ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getFamilyName() != null ? name1.getFamilyName().toLowerCase() + : null, name2.getFamilyName() != null ? name2.getFamilyName().toLowerCase() : null); if (ret == 0) { - ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getFamilyName2(), name2.getFamilyName2()); + ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getFamilyName2() != null ? name1.getFamilyName().toLowerCase() + : null, name2.getFamilyName2() != null ? name2.getFamilyName2().toLowerCase() : null); } if (ret == 0) { - ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getGivenName(), name2.getGivenName()); + ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getGivenName() != null ? name1.getGivenName().toLowerCase() + : null, name2.getGivenName() != null ? name2.getGivenName().toLowerCase() : null); } if (ret == 0) { - ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getMiddleName(), name2.getMiddleName()); + ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getMiddleName() != null ? name1.getMiddleName().toLowerCase() + : null, name2.getMiddleName() != null ? name2.getMiddleName().toLowerCase() : null); } if (ret == 0) { - ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getFamilyNamePrefix(), name2.getFamilyNamePrefix()); + ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getFamilyNamePrefix() != null ? name1.getFamilyNamePrefix() + .toLowerCase() : null, name2.getFamilyNamePrefix() != null ? name2.getFamilyNamePrefix().toLowerCase() + : null); } if (ret == 0) { - ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getFamilyNameSuffix(), name2.getFamilyNameSuffix()); + ret = OpenmrsUtil.compareWithNullAsGreatest(name1.getFamilyNameSuffix() != null ? name1.getFamilyNameSuffix() + .toLowerCase() : null, name2.getFamilyNameSuffix() != null ? name2.getFamilyNameSuffix().toLowerCase() + : null); } return ret; diff --git a/api/src/test/java/org/openmrs/util/PersonByNameComparatorTest.java b/api/src/test/java/org/openmrs/util/PersonByNameComparatorTest.java index 042ebd44d036..41e063a62734 100755 --- a/api/src/test/java/org/openmrs/util/PersonByNameComparatorTest.java +++ b/api/src/test/java/org/openmrs/util/PersonByNameComparatorTest.java @@ -65,4 +65,15 @@ public void comparePersonsByName_shouldReturnZeroIfTheGivenNameMiddleNameAndFami int actualValue = PersonByNameComparator.comparePersonsByName(person1, person2); Assert.assertTrue("Expected zero but it was: " + actualValue, actualValue == 0); } + + @Test + @Verifies(value = "should not be case-sensitive", method = "comparePersonsByName(Person,Person)") + public void comparePersonsByName_shouldNotBeCaseSensitive() throws Exception { + Person person1 = new Person(); + person1.addName(new PersonName("GIVENNAME", "MIDDLENAME", "FAMILYNAME")); + Person person2 = new Person(); + person2.addName(new PersonName("givenName", "middleName", "familyName")); + int actualValue = PersonByNameComparator.comparePersonsByName(person1, person2); + Assert.assertTrue("Expected zero but it was: " + actualValue, actualValue == 0); + } }