Author: sanka Date: Sun Dec 11 08:59:40 2005 New Revision: 355977 URL: http://svn.apache.org/viewcvs?rev=355977&view=rev Log: Modified: To compare core components of two policy objects.
Modified: webservices/commons/trunk/policy/test/org/apache/ws/policy/util/PolicyComparator.java Modified: webservices/commons/trunk/policy/test/org/apache/ws/policy/util/PolicyComparator.java URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/test/org/apache/ws/policy/util/PolicyComparator.java?rev=355977&r1=355976&r2=355977&view=diff ============================================================================== --- webservices/commons/trunk/policy/test/org/apache/ws/policy/util/PolicyComparator.java (original) +++ webservices/commons/trunk/policy/test/org/apache/ws/policy/util/PolicyComparator.java Sun Dec 11 08:59:40 2005 @@ -16,30 +16,160 @@ package org.apache.ws.policy.util; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; + +import javax.xml.namespace.QName; + +import org.apache.ws.policy.model.AndCompositeAssertion; import org.apache.ws.policy.model.Assertion; +import org.apache.ws.policy.model.Policy; +import org.apache.ws.policy.model.PolicyReference; import org.apache.ws.policy.model.PrimitiveAssertion; +import org.apache.ws.policy.model.XorCompositeAssertion; /** * @author Sanka Samaranayake ([EMAIL PROTECTED]) */ public class PolicyComparator { - public static boolean compare(Assertion arg1, Assertion arg2) { - - - return true; - } - - public static boolean compare(PrimitiveAssertion prim1, PrimitiveAssertion prim2) { - if (!(prim1.getName().equals(prim2.getName()))) { - return false; - } - - String value1 = prim1.getStrValue(); - String value2 = prim2.getStrValue(); - - //if (value1 == null value2 != null ) - return true; - - } - -} + public static boolean compare(Policy arg1, Policy arg2) { + if (arg1.getId() == null && arg2.getId() != null + || arg1.getId() != null && arg1.getId() == null) { + return false; + } + + if (arg1.getId() != null) { + if (!arg1.getId().equals(arg2.getId())) { + return false; + } + } + + if (arg1.getBase() == null && arg2.getBase() != null + || arg1.getBase() != null && arg1.getBase() == null) { + return false; + } + + if (arg1.getBase() != null) { + if (!arg1.getBase().equals(arg2.getBase())) { + return false; + } + } + + return compare(arg1.getTerms(), arg2.getTerms()); + } + + public static boolean compare(Assertion arg1, Assertion arg2) { + if (! arg1.getClass().equals(arg2.getClass())) { + return false; + } + + if (arg1 instanceof Policy) { + return compare((Policy) arg1, (Policy) arg2); + + } else if (arg1 instanceof PolicyReference) { + + return compare((PolicyReference) arg1, (PolicyReference) arg2); + + } else if (arg1 instanceof AndCompositeAssertion) { + + return compare((AndCompositeAssertion) arg1, + (AndCompositeAssertion) arg2); + + } else if (arg1 instanceof XorCompositeAssertion) { + return compare((XorCompositeAssertion) arg1, + (XorCompositeAssertion) arg2); + + } else if (arg1 instanceof PrimitiveAssertion) { + return compare((PrimitiveAssertion) arg1, (PrimitiveAssertion) arg2); + + } else { + // TODO should I throw an exception .. + } + + return false; + } + + + + public static boolean compare(PolicyReference arg1, PolicyReference arg2) { + return arg1.getPolicyURIString().equals(arg2.getPolicyURIString()); + } + + public static boolean compare(AndCompositeAssertion arg1, + AndCompositeAssertion arg2) { + return compare(arg1.getTerms(), arg2.getTerms()); + } + + public static boolean compare(XorCompositeAssertion arg1, + XorCompositeAssertion arg2) { + return compare(arg1.getTerms(), arg2.getTerms()); + } + + public static boolean compare(PrimitiveAssertion arg1, + PrimitiveAssertion arg2) { + if (!(arg1.getName().equals(arg2.getName()))) { + return false; + } + if (arg1.getStrValue() != null) { + String arg1Str = arg1.getStrValue().trim(); + if (arg2.getStrValue() == null) { + return false; + } else { + String arg2Str = arg2.getStrValue().trim(); + if (! arg1Str.equals(arg2Str)) { + return false;} + } + } +// if ((arg1.getStrValue() == null || arg1.getStrValue().trim() == "") && (arg2.getStrValue() != null && arg2.getStrValue().trim() != "") +// || (arg1.getStrValue() != null && arg1.getStrValue().trim() == "") && (arg1.getStrValue() == null || arg1.getStrValue().trim() == "")) { +// return false; +// } + return compare(arg1.getTerms(), arg2.getTerms()); + } + + private static boolean compare(List arg1, List arg2) { + if (arg1.size() != arg2.size()) { + return false; + } + + Iterator iterator = arg1.iterator(); + Assertion assertion1; + + while (iterator.hasNext()) { + assertion1 = (Assertion) iterator.next(); + + Iterator iterator2 = arg2.iterator(); + boolean match = false; + Assertion assertion2; + + while (iterator2.hasNext()) { + assertion2 = (Assertion) iterator2.next(); + if (compare(assertion1, assertion2)) { + match = true; + break; + } + } + + if (!match) { + return false; + } + } + return true; + } + + private static boolean compare(Hashtable arg1, Hashtable arg2) { + if (arg1.size() != arg2.size()) { + return false; + } + Iterator iterator1 = arg1.keySet().iterator(); + while (iterator1.hasNext()) { + QName qname = (QName) iterator1.next(); + if (arg2.get(qname) == null + || !arg1.get(qname).equals(arg2.get(qname))) { + return false; + } + } + return true; + } +} \ No newline at end of file