1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.jce.provider;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.security.cert.PolicyNode;
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.ArrayList;
5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.HashSet;
6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.Iterator;
7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.List;
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.Set;
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class PKIXPolicyNode
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    implements PolicyNode
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected List       children;
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected int        depth;
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected Set        expectedPolicies;
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected PolicyNode parent;
17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected Set        policyQualifiers;
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected String     validPolicy;
19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected boolean    critical;
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /*
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *  CONSTRUCTORS
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public PKIXPolicyNode(
28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        List       _children,
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        int        _depth,
30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Set        _expectedPolicies,
31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        PolicyNode _parent,
32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Set        _policyQualifiers,
33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        String     _validPolicy,
34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        boolean    _critical)
35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        children         = _children;
37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        depth            = _depth;
38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        expectedPolicies = _expectedPolicies;
39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        parent           = _parent;
40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        policyQualifiers = _policyQualifiers;
41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        validPolicy      = _validPolicy;
42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        critical         = _critical;
43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public void addChild(
46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        PKIXPolicyNode _child)
47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        children.add(_child);
49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        _child.setParent(this);
50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Iterator getChildren()
53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return children.iterator();
55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public int getDepth()
58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return depth;
60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Set getExpectedPolicies()
63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return expectedPolicies;
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public PolicyNode getParent()
68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return parent;
70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Set getPolicyQualifiers()
73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return policyQualifiers;
75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public String getValidPolicy()
78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return validPolicy;
80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public boolean hasChildren()
83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return !children.isEmpty();
85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public boolean isCritical()
88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return critical;
90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public void removeChild(PKIXPolicyNode _child)
93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        children.remove(_child);
95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public void setCritical(boolean _critical)
98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        critical = _critical;
100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public void setParent(PKIXPolicyNode _parent)
103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        parent = _parent;
105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public String toString()
108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return toString("");
110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public String toString(String _indent)
113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        StringBuffer _buf = new StringBuffer();
115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        _buf.append(_indent);
116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        _buf.append(validPolicy);
117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        _buf.append(" {\n");
118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        for(int i = 0; i < children.size(); i++)
120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            _buf.append(((PKIXPolicyNode)children.get(i)).toString(_indent + "    "));
122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        _buf.append(_indent);
125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        _buf.append("}\n");
126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return _buf.toString();
127b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Object clone()
130b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return copy();
132b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
133b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
134b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public PKIXPolicyNode copy()
135b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
136b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Set     _expectedPolicies = new HashSet();
137b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Iterator _iter = expectedPolicies.iterator();
138b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        while (_iter.hasNext())
139b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
140b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            _expectedPolicies.add(new String((String)_iter.next()));
141b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
142b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
143b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Set     _policyQualifiers = new HashSet();
144b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        _iter = policyQualifiers.iterator();
145b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        while (_iter.hasNext())
146b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
147b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            _policyQualifiers.add(new String((String)_iter.next()));
148b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
149b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
150b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        PKIXPolicyNode _node = new PKIXPolicyNode(new ArrayList(),
151b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                                                  depth,
152b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                                                  _expectedPolicies,
153b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                                                  null,
154b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                                                  _policyQualifiers,
155b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                                                  new String(validPolicy),
156b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                                                  critical);
157b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
158b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        _iter = children.iterator();
159b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        while (_iter.hasNext())
160b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
161b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            PKIXPolicyNode _child = ((PKIXPolicyNode)_iter.next()).copy();
162b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            _child.setParent(_node);
163b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            _node.addChild(_child);
164b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
165b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
166b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return _node;
167b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
168028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro
169028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro    public void setExpectedPolicies(Set expectedPolicies)
170028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro    {
171028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro        this.expectedPolicies = expectedPolicies;
172028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro    }
173b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
174