OSDN Git Service

libjava/ChangeLog:
[pf3gnuchains/gcc-fork.git] / libjava / classpath / gnu / java / security / x509 / PolicyNodeImpl.java
1 /* PolicyNodeImpl.java -- An implementation of a policy tree node.
2    Copyright (C) 2004  Free Software Foundation, Inc.
3
4 This file is part of GNU Classpath.
5
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING.  If not, write to the
18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301 USA.
20
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library.  Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
25
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module.  An independent module is a module which is not derived from
33 or based on this library.  If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so.  If you do not wish to do so, delete this
36 exception statement from your version. */
37
38
39 package gnu.java.security.x509;
40
41 import gnu.java.lang.CPStringBuilder;
42
43 import java.security.cert.PolicyNode;
44 import java.security.cert.PolicyQualifierInfo;
45
46 import java.util.Collection;
47 import java.util.Collections;
48 import java.util.HashSet;
49 import java.util.Iterator;
50 import java.util.Set;
51
52 public final class PolicyNodeImpl implements PolicyNode
53 {
54
55   // Fields.
56   // -------------------------------------------------------------------------
57
58   private String policy;
59   private final Set expectedPolicies;
60   private final Set qualifiers;
61   private final Set children;
62   private PolicyNodeImpl parent;
63   private int depth;
64   private boolean critical;
65   private boolean readOnly;
66
67   // Constructors.
68   // -------------------------------------------------------------------------
69
70   public PolicyNodeImpl()
71   {
72     expectedPolicies = new HashSet();
73     qualifiers = new HashSet();
74     children = new HashSet();
75     readOnly = false;
76     critical = false;
77   }
78
79   // Instance methods.
80   // -------------------------------------------------------------------------
81
82   public void addChild(PolicyNodeImpl node)
83   {
84     if (readOnly)
85       throw new IllegalStateException("read only");
86     if (node.getParent() != null)
87       throw new IllegalStateException("already a child node");
88     node.parent = this;
89     node.setDepth(depth + 1);
90     children.add(node);
91   }
92
93   public Iterator getChildren()
94   {
95     return Collections.unmodifiableSet(children).iterator();
96   }
97
98   public int getDepth()
99   {
100     return depth;
101   }
102
103   public void setDepth(int depth)
104   {
105     if (readOnly)
106       throw new IllegalStateException("read only");
107     this.depth = depth;
108   }
109
110   public void addAllExpectedPolicies(Set policies)
111   {
112     if (readOnly)
113       throw new IllegalStateException("read only");
114     expectedPolicies.addAll(policies);
115   }
116
117   public void addExpectedPolicy(String policy)
118   {
119     if (readOnly)
120       throw new IllegalStateException("read only");
121     expectedPolicies.add(policy);
122   }
123
124   public Set getExpectedPolicies()
125   {
126     return Collections.unmodifiableSet(expectedPolicies);
127   }
128
129   public PolicyNode getParent()
130   {
131     return parent;
132   }
133
134   public void addAllPolicyQualifiers (Collection qualifiers)
135   {
136     for (Iterator it = qualifiers.iterator(); it.hasNext(); )
137       {
138         if (!(it.next() instanceof PolicyQualifierInfo))
139           throw new IllegalArgumentException ("can only add PolicyQualifierInfos");
140       }
141     qualifiers.addAll (qualifiers);
142   }
143
144   public void addPolicyQualifier (PolicyQualifierInfo qualifier)
145   {
146     if (readOnly)
147       throw new IllegalStateException("read only");
148     qualifiers.add(qualifier);
149   }
150
151   public Set getPolicyQualifiers()
152   {
153     return Collections.unmodifiableSet(qualifiers);
154   }
155
156   public String getValidPolicy()
157   {
158     return policy;
159   }
160
161   public void setValidPolicy(String policy)
162   {
163     if (readOnly)
164       throw new IllegalStateException("read only");
165     this.policy = policy;
166   }
167
168   public boolean isCritical()
169   {
170     return critical;
171   }
172
173   public void setCritical(boolean critical)
174   {
175     if (readOnly)
176       throw new IllegalStateException("read only");
177     this.critical = critical;
178   }
179
180   public void setReadOnly()
181   {
182     if (readOnly)
183       return;
184     readOnly = true;
185     for (Iterator it = getChildren(); it.hasNext(); )
186       ((PolicyNodeImpl) it.next()).setReadOnly();
187   }
188
189   public String toString()
190   {
191     CPStringBuilder buf = new CPStringBuilder();
192     for (int i = 0; i < depth; i++)
193       buf.append("  ");
194     buf.append("(");
195     buf.append(PolicyNodeImpl.class.getName());
196     buf.append(" (oid ");
197     buf.append(policy);
198     buf.append(") (depth ");
199     buf.append(depth);
200     buf.append(") (qualifiers ");
201     buf.append(qualifiers);
202     buf.append(") (critical ");
203     buf.append(critical);
204     buf.append(") (expectedPolicies ");
205     buf.append(expectedPolicies);
206     buf.append(") (children (");
207     final String nl = System.getProperty("line.separator");
208     for (Iterator it = getChildren(); it.hasNext(); )
209       {
210         buf.append(nl);
211         buf.append(it.next().toString());
212       }
213     buf.append(")))");
214     return buf.toString();
215   }
216 }