PolicyNodeImpl.java [plain text]
package gnu.java.security.x509;
import java.security.cert.PolicyNode;
import java.security.cert.PolicyQualifierInfo;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public final class PolicyNodeImpl implements PolicyNode
{
private String policy;
private final Set expectedPolicies;
private final Set qualifiers;
private final Set children;
private PolicyNodeImpl parent;
private int depth;
private boolean critical;
private boolean readOnly;
public PolicyNodeImpl()
{
expectedPolicies = new HashSet();
qualifiers = new HashSet();
children = new HashSet();
readOnly = false;
critical = false;
}
public void addChild(PolicyNodeImpl node)
{
if (readOnly)
throw new IllegalStateException("read only");
if (node.getParent() != null)
throw new IllegalStateException("already a child node");
node.parent = this;
node.setDepth(depth + 1);
children.add(node);
}
public Iterator getChildren()
{
return Collections.unmodifiableSet(children).iterator();
}
public int getDepth()
{
return depth;
}
public void setDepth(int depth)
{
if (readOnly)
throw new IllegalStateException("read only");
this.depth = depth;
}
public void addAllExpectedPolicies(Set policies)
{
if (readOnly)
throw new IllegalStateException("read only");
expectedPolicies.addAll(policies);
}
public void addExpectedPolicy(String policy)
{
if (readOnly)
throw new IllegalStateException("read only");
expectedPolicies.add(policy);
}
public Set getExpectedPolicies()
{
return Collections.unmodifiableSet(expectedPolicies);
}
public PolicyNode getParent()
{
return parent;
}
public void addAllPolicyQualifiers (Collection qualifiers)
{
for (Iterator it = qualifiers.iterator(); it.hasNext(); )
{
if (!(it.next() instanceof PolicyQualifierInfo))
throw new IllegalArgumentException ("can only add PolicyQualifierInfos");
}
qualifiers.addAll (qualifiers);
}
public void addPolicyQualifier (PolicyQualifierInfo qualifier)
{
if (readOnly)
throw new IllegalStateException("read only");
qualifiers.add(qualifier);
}
public Set getPolicyQualifiers()
{
return Collections.unmodifiableSet(qualifiers);
}
public String getValidPolicy()
{
return policy;
}
public void setValidPolicy(String policy)
{
if (readOnly)
throw new IllegalStateException("read only");
this.policy = policy;
}
public boolean isCritical()
{
return critical;
}
public void setCritical(boolean critical)
{
if (readOnly)
throw new IllegalStateException("read only");
this.critical = critical;
}
public void setReadOnly()
{
if (readOnly)
return;
readOnly = true;
for (Iterator it = getChildren(); it.hasNext(); )
((PolicyNodeImpl) it.next()).setReadOnly();
}
public String toString()
{
StringBuffer buf = new StringBuffer();
for (int i = 0; i < depth; i++)
buf.append(" ");
buf.append("(");
buf.append(PolicyNodeImpl.class.getName());
buf.append(" (oid ");
buf.append(policy);
buf.append(") (depth ");
buf.append(depth);
buf.append(") (qualifiers ");
buf.append(qualifiers);
buf.append(") (critical ");
buf.append(critical);
buf.append(") (expectedPolicies ");
buf.append(expectedPolicies);
buf.append(") (children (");
final String nl = System.getProperty("line.separator");
for (Iterator it = getChildren(); it.hasNext(); )
{
buf.append(nl);
buf.append(it.next().toString());
}
buf.append(")))");
return buf.toString();
}
}