Author: bayard
Date: Tue Nov 14 20:14:42 2006
New Revision: 475113

URL: http://svn.apache.org/viewvc?view=rev&rev=475113
Log:
Applying max/min for Comparables as supplied by David Karlsen in LANG-291

Modified:
    
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/ObjectUtils.java
    
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/ObjectUtilsTest.java

Modified: 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/ObjectUtils.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/ObjectUtils.java?view=diff&rev=475113&r1=475112&r2=475113
==============================================================================
--- 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/ObjectUtils.java
 (original)
+++ 
jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/ObjectUtils.java
 Tue Nov 14 20:14:42 2006
@@ -31,6 +31,7 @@
  * @author Stephen Colebourne
  * @author Gary Gregory
  * @author Mario Winterer
+ * @author <a href="mailto:[EMAIL PROTECTED]">David J. M. Karlsen</a>
  * @since 1.0
  * @version $Id$
  */
@@ -276,5 +277,52 @@
             return ObjectUtils.NULL;
         }
     }
+    
+    
+    /**
+     * Null safe comparison of Comparables.
+     * 
+     * @param c1
+     * @param c2
+     * @return
+     *  <ul>
+     *   <li>If both objects are non-null and unequal, the lesser object.
+     *   <li>If both objects are non-null and equal, c1.
+     *   <li>If one of the comparables is null, the non-null object.
+     *   <li>If both the comparables are null, null is returned.
+     *  </ul>
+     */
+    public static Object min( Comparable c1, Comparable c2 ) {
+        if ( c1 != null && c2 != null ) {
+            return c1.compareTo( c2 ) < 1 ? c1 : c2;
+        }
+        else {
+            return c1 != null ? c1 : c2;
+        }                              
+    }
+    
+    /**
+     * Null safe comparison of Comparables.
+     * 
+     * @param c1
+     * @param c2
+     * @return
+     *  <ul>
+     *   <li>If both objects are non-null and unequal, the greater object.
+     *   <li>If both objects are non-null and equal, c1.
+     *   <li>If one of the comparables is null, the non-null object.
+     *   <li>If both the comparables are null, null is returned.
+     *  </ul>
+     */
+    public static Object max( Comparable c1, Comparable c2 ) {
+        if ( c1 != null && c2 != null ) {
+            return c1.compareTo( c2 ) >= 0 ? c1 : c2;
+        }
+        else {
+            return c1 != null ? c1 : c2;
+        }                              
+    }
+    
+    
     
 }

Modified: 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/ObjectUtilsTest.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/ObjectUtilsTest.java?view=diff&rev=475113&r1=475112&r2=475113
==============================================================================
--- 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/ObjectUtilsTest.java
 (original)
+++ 
jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/ObjectUtilsTest.java
 Tue Nov 14 20:14:42 2006
@@ -18,6 +18,8 @@
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Modifier;
+import java.util.Calendar;
+import java.util.Date;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -175,5 +177,40 @@
         assertTrue(ObjectUtils.NULL instanceof ObjectUtils.Null);
         assertSame(ObjectUtils.NULL, 
SerializationUtils.clone(ObjectUtils.NULL));
     }
-
+    
+    
+    
+    public void testMax() {
+        Calendar calendar = Calendar.getInstance();
+        Comparable nonNullComparable1 = calendar.getTime();
+        Comparable nonNullComparable2 = calendar.getTime();
+        
+        calendar.set( Calendar.YEAR, calendar.get( Calendar.YEAR ) -1 );
+        Comparable minComparable = calendar.getTime();
+        
+        assertNotSame( nonNullComparable1, nonNullComparable2 );
+        
+        assertSame( nonNullComparable1, ObjectUtils.max( null, 
nonNullComparable1 ) );
+        assertSame( nonNullComparable1, ObjectUtils.max( nonNullComparable1, 
null ) );
+        assertSame( nonNullComparable1, ObjectUtils.max( nonNullComparable1, 
nonNullComparable2 ) );
+        assertSame( nonNullComparable1, ObjectUtils.max( nonNullComparable1, 
minComparable ) );
+        assertSame( nonNullComparable1, ObjectUtils.max( minComparable, 
nonNullComparable1 ) );
+    }
+    
+    public void testMin() {
+        Calendar calendar = Calendar.getInstance();
+        Comparable nonNullComparable1 = calendar.getTime();
+        Comparable nonNullComparable2 = calendar.getTime();
+        
+        calendar.set( Calendar.YEAR, calendar.get( Calendar.YEAR ) -1 );
+        Comparable minComparable = calendar.getTime();
+        
+        assertNotSame( nonNullComparable1, nonNullComparable2 );
+        
+        assertSame( nonNullComparable1, ObjectUtils.min( null, 
nonNullComparable1 ) );
+        assertSame( nonNullComparable1, ObjectUtils.min( nonNullComparable1, 
null ) );
+        assertSame( nonNullComparable1, ObjectUtils.min( nonNullComparable1, 
nonNullComparable2 ) );
+        assertSame( minComparable, ObjectUtils.min( nonNullComparable1, 
minComparable ) );
+        assertSame( minComparable, ObjectUtils.min( minComparable, 
nonNullComparable1 ) );
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to