You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2016/05/13 20:47:27 UTC

svn commit: r1743754 - /directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/entry/Value.java

Author: elecharny
Date: Fri May 13 20:47:27 2016
New Revision: 1743754

URL: http://svn.apache.org/viewvc?rev=1743754&view=rev
Log:
Handle String parameter in the compareTo() method

Modified:
    directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/entry/Value.java

Modified: directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/entry/Value.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/entry/Value.java?rev=1743754&r1=1743753&r2=1743754&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/entry/Value.java (original)
+++ directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/entry/Value.java Fri May 13 20:47:27 2016
@@ -1164,6 +1164,73 @@ public class Value implements Cloneable,
             return true;
         }
 
+        if ( obj instanceof String )
+        {
+            String other = ( String ) obj;
+            
+            if ( !isHR )
+            {
+                return false;
+            }
+            
+            if ( attributeType == null )
+            {
+                if ( upValue != null )
+                {
+                    return upValue.equals( other );
+                }
+                else
+                {
+                    return obj == null;
+                }
+            }
+            else
+            {
+                // Use the comparator
+                // We have an AttributeType, we use the associated comparator
+                try
+                {
+                    LdapComparator<String> comparator = ( LdapComparator<String> ) getLdapComparator();
+                    
+                    Normalizer normalizer = null;
+                    
+                    if ( attributeType.getEquality() != null )
+                    {
+                        normalizer = attributeType.getEquality().getNormalizer();
+                    }
+
+                    if ( normalizer == null )
+                    {
+                        if ( comparator == null )
+                        {
+                            return normValue.equals( other );
+                        }
+                        else
+                        {
+                            return comparator.compare( normValue, other ) == 0;
+                        }
+                    }
+                    
+                    String thisNormValue = normalizer.normalize( normValue );
+                    String otherNormValue = normalizer.normalize( other );
+                        
+                    // Compare normalized values
+                    if ( comparator == null )
+                    {
+                        return thisNormValue.equals( otherNormValue );
+                    }
+                    else
+                    {
+                        return comparator.compare( thisNormValue, otherNormValue ) == 0;
+                    }
+                }
+                catch ( LdapException ne )
+                {
+                    return false;
+                }
+            }
+        }
+        
         if ( !( obj instanceof Value ) )
         {
             return false;
@@ -1209,7 +1276,7 @@ public class Value implements Cloneable,
         // Ok, now, let's see if we have an AttributeType at all. If both have one,
         // and if they aren't equal, then we get out. If one of them has an AttributeType and
         // not the other, we will assume that this is the AttributeType to use.
-        MatchingRule equalityMR = null;
+        MatchingRule equalityMR;
         
         if ( attributeType == null )
         {
@@ -1304,20 +1371,13 @@ public class Value implements Cloneable,
             }
             
             // No attributeType
-            if ( isHR )
+            if ( normValue == null )
             {
-                if ( normValue == null )
-                {
-                    return other.normValue == null;
-                }
-                else
-                {
-                    return normValue.equals( other.normValue );
-                }
+                return other.normValue == null;
             }
             else
             {
-                return Arrays.equals( bytes, other.bytes );
+                return normValue.equals( other.normValue );
             }
         }
     }