You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2009/06/19 17:21:14 UTC
svn commit: r786542 -
/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ldap/Parser.java
Author: rickhall
Date: Fri Jun 19 15:21:13 2009
New Revision: 786542
URL: http://svn.apache.org/viewvc?rev=786542&view=rev
Log:
Modified LDAP evaluation so approximate comparisons of Strings ignore
case and whitespace and characters ignore case. (FELIX-1259)
Modified:
felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ldap/Parser.java
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ldap/Parser.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ldap/Parser.java?rev=786542&r1=786541&r2=786542&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ldap/Parser.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ldap/Parser.java Fri Jun 19 15:21:13 2009
@@ -1663,9 +1663,10 @@
}
else if (obj1 instanceof Character)
{
- char value1 = ((Character)obj1).charValue();
- char value2 = ((Character)obj2).charValue();
- return (value2 >= (value1-((Math.abs(value1)*(char)APPROX_CRITERIA)/(char)100))
+ // We should ignore case.
+ char value1 = Character.toLowerCase(((Character) obj1).charValue());
+ char value2 = Character.toLowerCase(((Character) obj2).charValue());
+ return (value2 >= (value1-((Math.abs(value1)*(char)APPROX_CRITERIA)/(char)100))
&& value2 <= (value1+((Math.abs(value1)*(char)APPROX_CRITERIA)/(char)100)));
}
else if (obj1 instanceof Double)
@@ -1705,10 +1706,12 @@
}
else if (obj1 instanceof String)
{
+ // Spec says to ignore case and whitespace, to let's convert
+ // to lower case and remove whitespace.
int distance = getDistance(
- obj1.toString().toLowerCase(), obj2.toString().toLowerCase());
- int size = ((String)obj1).length();
- return (distance <= ((size*APPROX_CRITERIA)/100));
+ removeWhitespace(obj1.toString()), removeWhitespace(obj2.toString()));
+ int size = ((String)obj1).length();
+ return (distance <= ((size*APPROX_CRITERIA)/100));
}
else if (obj1 instanceof BigInteger)
{
@@ -1737,6 +1740,19 @@
+ obj1.getClass().getName());
}
+ private static String removeWhitespace(String s)
+ {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < s.length(); i++)
+ {
+ if (!Character.isWhitespace(s.charAt(i)))
+ {
+ sb.append(Character.toLowerCase(s.charAt(i)));
+ }
+ }
+ return sb.toString();
+ }
+
/**
* Calculate the Levenshtein distance (LD) between two strings.
* The Levenshteing distance is a measure of the similarity between