You are on page 1of 7

Case3:10-cv-03561-WHA Document36-10 Filed10/27/10 Page1 of 7

Exhibit J
Case3:10-cv-03561-WHA Document36-10 Filed10/27/10 Page2 of 7
Comparison of Java (J2SE 1.5) and Android versions of PolicyNodeImpl.java

PolicyNodeImpl.java (Java version) PolicyNodeImpl.java (Android version)


[comments removed and spacing adjusted for comparison] [spacing adjusted for comparison]
final class PolicyNodeImpl implements PolicyNode { public class PolicyNodeImpl implements PolicyNode {

private static final String ANY_POLICY = "2.5.29.32.0"; private static final String ANY_POLICY = "2.5.29.32.0";
private PolicyNodeImpl mParent; private PolicyNodeImpl mParent;
private HashSet mChildren; private HashSet mChildren;
private String mValidPolicy; private String mValidPolicy;
private HashSet mQualifierSet; private HashSet mQualifierSet;
private boolean mCriticalityIndicator; private boolean mCriticalityIndicator;
private HashSet mExpectedPolicySet; private HashSet mExpectedPolicySet;
private boolean mOriginalExpectedPolicySet; private boolean mOriginalExpectedPolicySet;
private int mDepth; private int mDepth;
private boolean isImmutable = false; private boolean isImmutable;

PolicyNodeImpl(PolicyNodeImpl parent, String validPolicy, public PolicyNodeImpl(PolicyNodeImpl policynodeimpl, String s,


Set qualifierSet,boolean criticalityIndicator, Set set, boolean flag,
Set expectedPolicySet,boolean generatedByPolicyMapping) { Set set1, boolean flag1) {
isImmutable = false;
mParent = parent; mParent = policynodeimpl;
mChildren = new HashSet(); mChildren = new HashSet();
if (validPolicy != null) if(s != null) {
mValidPolicy = validPolicy; mValidPolicy = s;
else } else {
mValidPolicy = ""; mValidPolicy = "";
}
if (qualifierSet != null) if(set != null) {
mQualifierSet = new HashSet(qualifierSet); mQualifierSet = new HashSet(set);
else } else {
mQualifierSet = new HashSet(); mQualifierSet = new HashSet();
}
mCriticalityIndicator = criticalityIndicator; mCriticalityIndicator = flag;
if (expectedPolicySet != null) if(set1 != null) {
mExpectedPolicySet = new HashSet(expectedPolicySet); mExpectedPolicySet = new HashSet(set1);
else } else {
mExpectedPolicySet = new HashSet(); mExpectedPolicySet = new HashSet();
}
mOriginalExpectedPolicySet = !generatedByPolicyMapping; mOriginalExpectedPolicySet = !flag1;
if (mParent != null) { if(mParent != null) {
mDepth = mParent.getDepth() + 1; mDepth = mParent.getDepth() + 1;
mParent.addChild(this); mParent.addChild(this);
} else { } else {
mDepth = 0; mDepth = 0;
} }
} }

pa-1425347
Case3:10-cv-03561-WHA Document36-10 Filed10/27/10 Page3 of 7
Comparison of Java (J2SE 1.5) and Android versions of PolicyNodeImpl.java

PolicyNodeImpl.java (Java version) PolicyNodeImpl.java (Android version)


[comments removed and spacing adjusted for comparison] [spacing adjusted for comparison]
PolicyNodeImpl(PolicyNodeImpl parent, PolicyNodeImpl(PolicyNodeImpl policynodeimpl,
PolicyNodeImpl node) { PolicyNodeImpl policynodeimpl1) {
this(parent, node.mValidPolicy, node.mQualifierSet, this(policynodeimpl, policynodeimpl1.mValidPolicy, ((Set)
node.mCriticalityIndicator, node.mExpectedPolicySet, false); (policynodeimpl1.mQualifierSet)), policynodeimpl1.mCriticalityIndicator,
} ((Set) (policynodeimpl1.mExpectedPolicySet)), false);
}

public PolicyNode getParent() { public PolicyNode getParent() {


return mParent; return mParent;
} }
public Iterator<PolicyNodeImpl> getChildren() { public Iterator getChildren() {
return Collections.unmodifiableSet(mChildren).iterator(); return Collections.unmodifiableSet(mChildren).iterator();
} }

public int getDepth() { public int getDepth() {


return mDepth; return mDepth;
} }

public String getValidPolicy() { public String getValidPolicy() {


return mValidPolicy; return mValidPolicy;
} }
public Set<PolicyQualifierInfo> getPolicyQualifiers() { public Set getPolicyQualifiers() {
return Collections.unmodifiableSet(mQualifierSet); return Collections.unmodifiableSet(mQualifierSet);
} }

public Set<String> getExpectedPolicies() { public Set getExpectedPolicies() {


return Collections.unmodifiableSet(mExpectedPolicySet); return Collections.unmodifiableSet(mExpectedPolicySet);
} }

public boolean isCritical() { public boolean isCritical() {


return mCriticalityIndicator; return mCriticalityIndicator;
} }

public String toString() { public String toString() {


StringBuffer buffer = new StringBuffer(this.asString()); StringBuffer stringbuffer = new StringBuffer(asString());
Iterator it = getChildren(); for(Iterator iterator = getChildren(); iterator.hasNext();
while (it.hasNext()) { stringbuffer.append((PolicyNodeImpl)iterator.next()));
buffer.append((PolicyNodeImpl)it.next());
} return stringbuffer.toString();
return buffer.toString(); }
}

pa-1425347
Case3:10-cv-03561-WHA Document36-10 Filed10/27/10 Page4 of 7
Comparison of Java (J2SE 1.5) and Android versions of PolicyNodeImpl.java

PolicyNodeImpl.java (Java version) PolicyNodeImpl.java (Android version)


[comments removed and spacing adjusted for comparison] [spacing adjusted for comparison]
boolean isImmutable() { boolean isImmutable() {
return isImmutable; return isImmutable;
} }

void setImmutable() { void setImmutable() {


if (isImmutable) if(isImmutable) return;
return; PolicyNodeImpl policynodeimpl;
Iterator it = mChildren.iterator(); for(Iterator iterator = mChildren.iterator(); iterator.hasNext();
while (it.hasNext()) { policynodeimpl.setImmutable())
PolicyNodeImpl node = (PolicyNodeImpl) it.next(); policynodeimpl = (PolicyNodeImpl)iterator.next();
node.setImmutable();
} isImmutable = true;
isImmutable = true; }
}

private void addChild(PolicyNodeImpl child) { private void addChild(PolicyNodeImpl policynodeimpl) {


if (isImmutable) { if(isImmutable) {
throw new IllegalStateException("PolicyNode is immutable"); throw new IllegalStateException("PolicyNode is immutable");
} } else {
mChildren.add(child); mChildren.add(policynodeimpl);
} return;
}
}

void addExpectedPolicy(String expectedPolicy) { void addExpectedPolicy(String s) {


if (isImmutable) { if(isImmutable)
throw new IllegalStateException("PolicyNode is immutable"); throw new IllegalStateException("PolicyNode is immutable");
}
if (mOriginalExpectedPolicySet) { if(mOriginalExpectedPolicySet) {
mExpectedPolicySet.clear(); mExpectedPolicySet.clear();
mOriginalExpectedPolicySet = false; mOriginalExpectedPolicySet = false;
} }
mExpectedPolicySet.add(expectedPolicy); mExpectedPolicySet.add(s);
} }

void prune(int depth) { void prune(int i) {


if (isImmutable) if(isImmutable)
throw new IllegalStateException("PolicyNode is immutable"); throw new IllegalStateException("PolicyNode is immutable");
if (mChildren.size() == 0) if(mChildren.size() == 0)
return; return;
Iterator it = mChildren.iterator(); Iterator iterator = mChildren.iterator();
while (it.hasNext()) { do {
PolicyNodeImpl node = (PolicyNodeImpl) it.next(); if(!iterator.hasNext()) break;
node.prune(depth); PolicyNodeImpl policynodeimpl = (PolicyNodeImpl)iterator.next();
if ((node.mChildren.size() == 0) && (depth > mDepth + 1)) policynodeimpl.prune(i);
it.remove(); if(policynodeimpl.mChildren.size() == 0 && i > mDepth + 1)
} iterator.remove();
} } while(true);
}

pa-1425347
Case3:10-cv-03561-WHA Document36-10 Filed10/27/10 Page5 of 7
Comparison of Java (J2SE 1.5) and Android versions of PolicyNodeImpl.java

PolicyNodeImpl.java (Java version) PolicyNodeImpl.java (Android version)


[comments removed and spacing adjusted for comparison] [spacing adjusted for comparison]
void deleteChild(PolicyNode childNode) { void deleteChild(PolicyNode policynode) {
if (isImmutable) { if(isImmutable) {
throw new IllegalStateException("PolicyNode is immutable"); throw new IllegalStateException("PolicyNode is immutable");
} } else {
mChildren.remove(childNode); mChildren.remove(policynode);
} return;
}
}

PolicyNodeImpl copyTree() { PolicyNodeImpl copyTree() {


return copyTree(null); return copyTree(null);
} }

private PolicyNodeImpl copyTree(PolicyNodeImpl parent) { private PolicyNodeImpl copyTree(PolicyNodeImpl policynodeimpl) {


PolicyNodeImpl newNode = new PolicyNodeImpl(parent, this); PolicyNodeImpl policynodeimpl1 = new PolicyNodeImpl(policynodeimpl,
this);
Iterator it = mChildren.iterator(); PolicyNodeImpl policynodeimpl2;
while (it.hasNext()) { for(Iterator iterator = mChildren.iterator(); iterator.hasNext();
PolicyNodeImpl node = (PolicyNodeImpl) it.next(); policynodeimpl2.copyTree(policynodeimpl1))
node.copyTree(newNode); policynodeimpl2 = (PolicyNodeImpl)iterator.next();
}
return policynodeimpl1;
return newNode; }
}

Set getPolicyNodes(int depth) { Set getPolicyNodes(int i) {


Set set = new HashSet(); HashSet hashset = new HashSet();
getPolicyNodes(depth, set); getPolicyNodes(i, ((Set) (hashset)));
return set; return hashset;
} }

private void getPolicyNodes(int depth, Set set) { private void getPolicyNodes(int i, Set set) {
if (mDepth == depth) { if(mDepth == i) {
set.add(this); set.add(this);
} else { } else {
Iterator it = mChildren.iterator(); PolicyNodeImpl policynodeimpl;
while (it.hasNext()) { for(Iterator iterator = mChildren.iterator();
PolicyNodeImpl node = (PolicyNodeImpl) it.next(); iterator.hasNext(); policynodeimpl.getPolicyNodes(i, set))
node.getPolicyNodes(depth, set); policynodeimpl = (PolicyNodeImpl)iterator.next();
} }
} }
}

pa-1425347
Case3:10-cv-03561-WHA Document36-10 Filed10/27/10 Page6 of 7
Comparison of Java (J2SE 1.5) and Android versions of PolicyNodeImpl.java

PolicyNodeImpl.java (Java version) PolicyNodeImpl.java (Android version)


[comments removed and spacing adjusted for comparison] [spacing adjusted for comparison]
Set getPolicyNodesExpected(int depth, String expectedOID, boolean Set getPolicyNodesExpected(int i, String s, boolean flag) {
matchAny)
{
if (expectedOID.equals(ANY_POLICY)) { if(s.equals("2.5.29.32.0"))
return getPolicyNodes(depth); return getPolicyNodes(i);
} else { else
return getPolicyNodesExpectedHelper(depth, expectedOID, return getPolicyNodesExpectedHelper(i, s, flag);
matchAny); }
}
}
private Set getPolicyNodesExpectedHelper(int depth, String expectedOID, private Set getPolicyNodesExpectedHelper(int i, String s, boolean flag)
boolean matchAny)
{ {
HashSet set = new HashSet(); HashSet hashset = new HashSet();

if (mDepth < depth) { if(mDepth < i) {


Iterator it = mChildren.iterator(); PolicyNodeImpl policynodeimpl;
while (it.hasNext()) { for(Iterator iterator = mChildren.iterator();
PolicyNodeImpl node = (PolicyNodeImpl) it.next(); iterator.hasNext();
set.addAll(node.getPolicyNodesExpectedHelper(depth, hashset.addAll(policynodeimpl.getPolicyNodesExpectedHelper(i, s, flag)))
expectedOID, policynodeimpl = (PolicyNodeImpl)iterator.next();
matchAny));
}
} else { } else if(flag) {
if (matchAny) {
if (mExpectedPolicySet.contains(ANY_POLICY)) if(mExpectedPolicySet.contains("2.5.29.32.0"))
set.add(this); hashset.add(this);
} else { } else if(mExpectedPolicySet.contains(s)) {
if (mExpectedPolicySet.contains(expectedOID))
set.add(this); hashset.add(this);
} }
}

return set; return hashset;


} }

Set getPolicyNodesValid(int depth, String validOID) { Set getPolicyNodesValid(int i, String s) {


HashSet set = new HashSet(); HashSet hashset = new HashSet();
if (mDepth < depth) { if(mDepth < i) {
Iterator it = mChildren.iterator(); PolicyNodeImpl policynodeimpl;
while (it.hasNext()) { for(Iterator iterator = mChildren.iterator();
PolicyNodeImpl node = (PolicyNodeImpl) it.next(); iterator.hasNext(); hashset.addAll(policynodeimpl.getPolicyNodesValid(i,
set.addAll(node.getPolicyNodesValid(depth, validOID)); s)))
} policynodeimpl = (PolicyNodeImpl)iterator.next();
} else {
if (mValidPolicy.equals(validOID)) } else if(mValidPolicy.equals(s)) {
set.add(this); hashset.add(this);
} }
return set; return hashset;
} }

pa-1425347
Case3:10-cv-03561-WHA Document36-10 Filed10/27/10 Page7 of 7
Comparison of Java (J2SE 1.5) and Android versions of PolicyNodeImpl.java

PolicyNodeImpl.java (Java version) PolicyNodeImpl.java (Android version)


[comments removed and spacing adjusted for comparison] [spacing adjusted for comparison]
private static String policyToString(String oid) { private static String policyToString(String s) {
if (oid.equals(ANY_POLICY)) { if(s.equals("2.5.29.32.0")) {
return "anyPolicy"; return "anyPolicy";
} else { } else {
return oid; return s;
} }
} }

String asString() { String asString() {


if (mParent == null) { if(mParent == null)
return "anyPolicy ROOT\n"; return "anyPolicy ROOT\n";
} else {
StringBuffer sb = new StringBuffer(); StringBuffer stringbuffer = new StringBuffer();
for (int i = 0, n = getDepth(); i < n; i++) { int i = 0;
sb.append(" "); for(int j = getDepth(); i < j; i++)
} stringbuffer.append(" ");
sb.append(policyToString(getValidPolicy())); stringbuffer.append(policyToString(getValidPolicy()));
sb.append(" CRIT: "); stringbuffer.append(" CRIT: ");
sb.append(isCritical()); stringbuffer.append(isCritical());
sb.append(" EP: "); stringbuffer.append(" EP: ");
for (Iterator t = getExpectedPolicies().iterator(); t.hasNext(); for(Iterator iterator = getExpectedPolicies().iterator();
) { iterator.hasNext(); stringbuffer.append(" ")) {
String policy = (String)t.next();
sb.append(policyToString(policy)); String s = (String)iterator.next();
sb.append(" "); stringbuffer.append(policyToString(s));
} }
sb.append(" ("); stringbuffer.append(" (");
sb.append(getDepth()); stringbuffer.append(getDepth());
sb.append(")\n"); stringbuffer.append(")\n");
return sb.toString(); return stringbuffer.toString();
} }
} }
}

pa-1425347