You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by do...@apache.org on 2002/11/16 14:48:40 UTC
cvs commit: jakarta-avalon/src/java/org/apache/avalon/framework/configuration ConfigurationUtil.java
donaldp 2002/11/16 05:48:40
Modified: src/java/org/apache/avalon/framework/configuration Tag:
FORREST-branch ConfigurationUtil.java
Log:
Migrate equals into framework
Revision Changes Path
No revision
No revision
1.5.2.1 +120 -1 jakarta-avalon/src/java/org/apache/avalon/framework/configuration/ConfigurationUtil.java
Index: ConfigurationUtil.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/src/java/org/apache/avalon/framework/configuration/ConfigurationUtil.java,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -r1.5 -r1.5.2.1
--- ConfigurationUtil.java 7 Nov 2002 08:35:27 -0000 1.5
+++ ConfigurationUtil.java 16 Nov 2002 13:48:40 -0000 1.5.2.1
@@ -13,12 +13,16 @@
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
/**
* This class has a bunch of utility methods to work
* with configuration objects.
*
* @author <a href="mailto:peter at apache.org">Peter Donald</a>
+ * @author <a href="mailto:proyal@apache.org">Peter Royal</a>
* @version $Revision$ $Date$
*/
public class ConfigurationUtil
@@ -50,6 +54,121 @@
{
throw new IllegalStateException( pce.toString() );
}
+ }
+
+ /**
+ * Test to see if two Configuration's can be considered the same. Name, value, attributes
+ * and children are test. The <b>order</b> of children is not taken into consideration
+ * for equality.
+ *
+ * @param c1 Configuration to test
+ * @param c2 Configuration to test
+ * @return true if the configurations can be considered equals
+ */
+ public static boolean equals( final Configuration c1, final Configuration c2 )
+ {
+ return c1.getName().equals( c2.getName() )
+ && areValuesEqual( c1, c2 )
+ && areAttributesEqual( c1, c2 )
+ && areChildrenEqual( c1, c2 );
+ }
+
+ /**
+ * Return true if the children of both configurations are equal.
+ *
+ * @param c1 configuration1
+ * @param c2 configuration2
+ * @return true if the children of both configurations are equal.
+ */
+ private static boolean areChildrenEqual( final Configuration c1,
+ final Configuration c2 )
+ {
+ final Configuration[] kids1 = c1.getChildren();
+ final ArrayList kids2 = new ArrayList( Arrays.asList( c2.getChildren() ) );
+ if( kids1.length != kids2.size() )
+ {
+ return false;
+ }
+
+ for( int i = 0; i < kids1.length; i++ )
+ {
+ if( !findMatchingChild( kids1[ i ], kids2 ) )
+ {
+ return false;
+ }
+ }
+
+ return kids2.isEmpty() ? true : false;
+ }
+
+ /**
+ * Return true if find a matching child and remove child from list.
+ *
+ * @param c the configuration
+ * @param matchAgainst the list of items to match against
+ * @return true if the found.
+ */
+ private static boolean findMatchingChild( final Configuration c,
+ final ArrayList matchAgainst )
+ {
+ final Iterator i = matchAgainst.iterator();
+ while( i.hasNext() )
+ {
+ if( equals( c, (Configuration)i.next() ) )
+ {
+ i.remove();
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Return true if the attributes of both configurations are equal.
+ *
+ * @param c1 configuration1
+ * @param c2 configuration2
+ * @return true if the attributes of both configurations are equal.
+ */
+ private static boolean areAttributesEqual( final Configuration c1,
+ final Configuration c2 )
+ {
+ final String[] names1 = c1.getAttributeNames();
+ final String[] names2 = c2.getAttributeNames();
+ if( names1.length != names2.length )
+ {
+ return false;
+ }
+
+ for( int i = 0; i < names1.length; i++ )
+ {
+ final String name = names1[ i ];
+ final String value1 = c1.getAttribute( name, null );
+ final String value2 = c2.getAttribute( name, null );
+ if( !value1.equals( value2 ) )
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Return true if the values of two configurations are equal.
+ *
+ * @param c1 configuration1
+ * @param c2 configuration2
+ * @return true if the values of two configurations are equal.
+ */
+ private static boolean areValuesEqual( final Configuration c1,
+ final Configuration c2 )
+ {
+ final String value1 = c1.getValue( null );
+ final String value2 = c2.getValue( null );
+ return ( value1 == null && value2 == null ) ||
+ ( value1 != null && value1.equals( value2 ) );
}
/**
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>