001 /**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more
004 * contributor license agreements. See the NOTICE file distributed with
005 * this work for additional information regarding copyright ownership.
006 * The ASF licenses this file to You under the Apache License, Version 2.0
007 * (the "License"); you may not use this file except in compliance with
008 * the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package org.apache.geronimo.util.asn1.x509;
020
021 import org.apache.geronimo.util.asn1.ASN1Encodable;
022 import org.apache.geronimo.util.asn1.ASN1EncodableVector;
023 import org.apache.geronimo.util.asn1.ASN1Sequence;
024 import org.apache.geronimo.util.asn1.ASN1TaggedObject;
025 import org.apache.geronimo.util.asn1.DERBitString;
026 import org.apache.geronimo.util.asn1.DERObject;
027 import org.apache.geronimo.util.asn1.DERSequence;
028 import org.apache.geronimo.util.asn1.DERTaggedObject;
029
030 /**
031 * The DistributionPoint object.
032 * <pre>
033 * DistributionPoint ::= SEQUENCE {
034 * distributionPoint [0] DistributionPointName OPTIONAL,
035 * reasons [1] ReasonFlags OPTIONAL,
036 * cRLIssuer [2] GeneralNames OPTIONAL
037 * }
038 * </pre>
039 */
040 public class DistributionPoint
041 extends ASN1Encodable
042 {
043 DistributionPointName distributionPoint;
044 ReasonFlags reasons;
045 GeneralNames cRLIssuer;
046
047 public static DistributionPoint getInstance(
048 ASN1TaggedObject obj,
049 boolean explicit)
050 {
051 return getInstance(ASN1Sequence.getInstance(obj, explicit));
052 }
053
054 public static DistributionPoint getInstance(
055 Object obj)
056 {
057 if(obj == null || obj instanceof DistributionPoint)
058 {
059 return (DistributionPoint)obj;
060 }
061
062 if(obj instanceof ASN1Sequence)
063 {
064 return new DistributionPoint((ASN1Sequence)obj);
065 }
066
067 throw new IllegalArgumentException("Invalid DistributionPoint: " + obj.getClass().getName());
068 }
069
070 public DistributionPoint(
071 ASN1Sequence seq)
072 {
073 for (int i = 0; i != seq.size(); i++)
074 {
075 ASN1TaggedObject t = (ASN1TaggedObject)seq.getObjectAt(i);
076 switch (t.getTagNo())
077 {
078 case 0:
079 distributionPoint = DistributionPointName.getInstance(t, true);
080 break;
081 case 1:
082 reasons = new ReasonFlags(DERBitString.getInstance(t, false));
083 break;
084 case 2:
085 cRLIssuer = GeneralNames.getInstance(t, false);
086 }
087 }
088 }
089
090 public DistributionPoint(
091 DistributionPointName distributionPoint,
092 ReasonFlags reasons,
093 GeneralNames cRLIssuer)
094 {
095 this.distributionPoint = distributionPoint;
096 this.reasons = reasons;
097 this.cRLIssuer = cRLIssuer;
098 }
099
100 public DistributionPointName getDistributionPoint()
101 {
102 return distributionPoint;
103 }
104
105 public ReasonFlags getReasons()
106 {
107 return reasons;
108 }
109
110 public GeneralNames getCRLIssuer()
111 {
112 return cRLIssuer;
113 }
114
115 public DERObject toASN1Object()
116 {
117 ASN1EncodableVector v = new ASN1EncodableVector();
118
119 if (distributionPoint != null)
120 {
121 //
122 // as this is a CHOICE it must be explicitly tagged
123 //
124 v.add(new DERTaggedObject(0, distributionPoint));
125 }
126
127 if (reasons != null)
128 {
129 v.add(new DERTaggedObject(false, 1, reasons));
130 }
131
132 if (cRLIssuer != null)
133 {
134 v.add(new DERTaggedObject(false, 2, cRLIssuer));
135 }
136
137 return new DERSequence(v);
138 }
139 }