/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.harmony.security.tests.support.cert; import java.security.cert.PolicyNode; import java.util.*; public class PolicyNodeImpl implements PolicyNode { private static final String ANY_POLICY = "2.5.29.32.0"; private PolicyNodeImpl mParent; private HashSet mChildren; private String mValidPolicy; private HashSet mQualifierSet; private boolean mCriticalityIndicator; private HashSet mExpectedPolicySet; private boolean mOriginalExpectedPolicySet; private int mDepth; private boolean isImmutable; public PolicyNodeImpl(PolicyNodeImpl policynodeimpl, String s, Set set, boolean flag, Set set1, boolean flag1) { isImmutable = false; mParent = policynodeimpl; mChildren = new HashSet(); if(s != null) { mValidPolicy = s; } else { mValidPolicy = ""; } if(set != null) { mQualifierSet = new HashSet(set); } else { mQualifierSet = new HashSet(); } mCriticalityIndicator = flag; if(set1 != null) { mExpectedPolicySet = new HashSet(set1); } else { mExpectedPolicySet = new HashSet(); } mOriginalExpectedPolicySet = !flag1; if(mParent != null) { mDepth = mParent.getDepth() + 1; mParent.addChild(this); } else { mDepth = 0; } } PolicyNodeImpl(PolicyNodeImpl policynodeimpl, PolicyNodeImpl policynodeimpl1) { this(policynodeimpl, policynodeimpl1.mValidPolicy, ((Set) (policynodeimpl1.mQualifierSet)), policynodeimpl1.mCriticalityIndicator, ((Set) (policynodeimpl1.mExpectedPolicySet)), false); } public PolicyNode getParent() { return mParent; } public Iterator getChildren() { return Collections.unmodifiableSet(mChildren).iterator(); } public int getDepth() { return mDepth; } public String getValidPolicy() { return mValidPolicy; } public Set getPolicyQualifiers() { return Collections.unmodifiableSet(mQualifierSet); } public Set getExpectedPolicies() { return Collections.unmodifiableSet(mExpectedPolicySet); } public boolean isCritical() { return mCriticalityIndicator; } public String toString() { StringBuffer stringbuffer = new StringBuffer(asString()); for(Iterator iterator = getChildren(); iterator.hasNext(); stringbuffer.append((PolicyNodeImpl)iterator.next())); return stringbuffer.toString(); } boolean isImmutable() { return isImmutable; } void setImmutable() { if(isImmutable) return; PolicyNodeImpl policynodeimpl; for(Iterator iterator = mChildren.iterator(); iterator.hasNext(); policynodeimpl.setImmutable()) policynodeimpl = (PolicyNodeImpl)iterator.next(); isImmutable = true; } private void addChild(PolicyNodeImpl policynodeimpl) { if(isImmutable) { throw new IllegalStateException("PolicyNode is immutable"); } else { mChildren.add(policynodeimpl); return; } } void addExpectedPolicy(String s) { if(isImmutable) throw new IllegalStateException("PolicyNode is immutable"); if(mOriginalExpectedPolicySet) { mExpectedPolicySet.clear(); mOriginalExpectedPolicySet = false; } mExpectedPolicySet.add(s); } void prune(int i) { if(isImmutable) throw new IllegalStateException("PolicyNode is immutable"); if(mChildren.size() == 0) return; Iterator iterator = mChildren.iterator(); do { if(!iterator.hasNext()) break; PolicyNodeImpl policynodeimpl = (PolicyNodeImpl)iterator.next(); policynodeimpl.prune(i); if(policynodeimpl.mChildren.size() == 0 && i > mDepth + 1) iterator.remove(); } while(true); } void deleteChild(PolicyNode policynode) { if(isImmutable) { throw new IllegalStateException("PolicyNode is immutable"); } else { mChildren.remove(policynode); return; } } PolicyNodeImpl copyTree() { return copyTree(null); } private PolicyNodeImpl copyTree(PolicyNodeImpl policynodeimpl) { PolicyNodeImpl policynodeimpl1 = new PolicyNodeImpl(policynodeimpl, this); PolicyNodeImpl policynodeimpl2; for(Iterator iterator = mChildren.iterator(); iterator.hasNext(); policynodeimpl2.copyTree(policynodeimpl1)) policynodeimpl2 = (PolicyNodeImpl)iterator.next(); return policynodeimpl1; } Set getPolicyNodes(int i) { HashSet hashset = new HashSet(); getPolicyNodes(i, ((Set) (hashset))); return hashset; } private void getPolicyNodes(int i, Set set) { if(mDepth == i) { set.add(this); } else { PolicyNodeImpl policynodeimpl; for(Iterator iterator = mChildren.iterator(); iterator.hasNext(); policynodeimpl.getPolicyNodes(i, set)) policynodeimpl = (PolicyNodeImpl)iterator.next(); } } Set getPolicyNodesExpected(int i, String s, boolean flag) { if(s.equals("2.5.29.32.0")) return getPolicyNodes(i); else return getPolicyNodesExpectedHelper(i, s, flag); } private Set getPolicyNodesExpectedHelper(int i, String s, boolean flag) { HashSet hashset = new HashSet(); if(mDepth < i) { PolicyNodeImpl policynodeimpl; for(Iterator iterator = mChildren.iterator(); iterator.hasNext(); hashset.addAll(policynodeimpl.getPolicyNodesExpectedHelper(i, s, flag))) policynodeimpl = (PolicyNodeImpl)iterator.next(); } else if(flag) { if(mExpectedPolicySet.contains("2.5.29.32.0")) hashset.add(this); } else if(mExpectedPolicySet.contains(s)) { hashset.add(this); } return hashset; } Set getPolicyNodesValid(int i, String s) { HashSet hashset = new HashSet(); if(mDepth < i) { PolicyNodeImpl policynodeimpl; for(Iterator iterator = mChildren.iterator(); iterator.hasNext(); hashset.addAll(policynodeimpl.getPolicyNodesValid(i, s))) policynodeimpl = (PolicyNodeImpl)iterator.next(); } else if(mValidPolicy.equals(s)) { hashset.add(this); } return hashset; } private static String policyToString(String s) { if(s.equals("2.5.29.32.0")) { return "anyPolicy"; } else { return s; } } String asString() { if(mParent == null) return "anyPolicy ROOT\n"; StringBuffer stringbuffer = new StringBuffer(); int i = 0; for(int j = getDepth(); i < j; i++) stringbuffer.append(" "); stringbuffer.append(policyToString(getValidPolicy())); stringbuffer.append(" CRIT: "); stringbuffer.append(isCritical()); stringbuffer.append(" EP: "); for(Iterator iterator = getExpectedPolicies().iterator(); iterator.hasNext(); stringbuffer.append(" ")) { String s = (String)iterator.next(); stringbuffer.append(policyToString(s)); } stringbuffer.append(" ("); stringbuffer.append(getDepth()); stringbuffer.append(")\n"); return stringbuffer.toString(); } }