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.DERObject;
025    import org.apache.geronimo.util.asn1.DERSequence;
026    
027    /**
028     * <code>UserNotice</code> class, used in
029     * <code>CertificatePolicies</code> X509 extensions (in policy
030     * qualifiers).
031     * <pre>
032     * UserNotice ::= SEQUENCE {
033     *      noticeRef        NoticeReference OPTIONAL,
034     *      explicitText     DisplayText OPTIONAL}
035     *
036     * </pre>
037     *
038     * @see PolicyQualifierId
039     * @see PolicyInformation
040     */
041    public class UserNotice
042        extends ASN1Encodable
043    {
044        NoticeReference noticeRef;
045        DisplayText     explicitText;
046    
047        /**
048         * Creates a new <code>UserNotice</code> instance.
049         *
050         * @param noticeRef a <code>NoticeReference</code> value
051         * @param explicitText a <code>DisplayText</code> value
052         */
053        public UserNotice(
054            NoticeReference noticeRef,
055            DisplayText explicitText)
056        {
057            this.noticeRef = noticeRef;
058            this.explicitText = explicitText;
059        }
060    
061        /**
062         * Creates a new <code>UserNotice</code> instance.
063         *
064         * @param noticeRef a <code>NoticeReference</code> value
065         * @param str the explicitText field as a String.
066         */
067        public UserNotice(
068            NoticeReference noticeRef,
069            String str)
070        {
071            this.noticeRef = noticeRef;
072            this.explicitText = new DisplayText(str);
073        }
074    
075       /**
076        * Creates a new <code>UserNotice</code> instance.
077        * <p>Useful from reconstructing a <code>UserNotice</code> instance
078        * from its encodable/encoded form.
079        *
080        * @param as an <code>ASN1Sequence</code> value obtained from either
081        * calling @{link toASN1Object()} for a <code>UserNotice</code>
082        * instance or from parsing it from a DER-encoded stream.
083        */
084       public UserNotice(
085           ASN1Sequence as)
086       {
087           if (as.size() == 2)
088           {
089               noticeRef = NoticeReference.getInstance(as.getObjectAt(0));
090               explicitText = DisplayText.getInstance(as.getObjectAt(1));
091           }
092           else if (as.size() == 1)
093           {
094               if (as.getObjectAt(0).getDERObject() instanceof ASN1Sequence)
095               {
096                   noticeRef = NoticeReference.getInstance(as.getObjectAt(0));
097               }
098               else
099               {
100                   explicitText = DisplayText.getInstance(as.getObjectAt(0));
101               }
102           }
103        }
104    
105        public DERObject toASN1Object()
106        {
107            ASN1EncodableVector av = new ASN1EncodableVector();
108    
109            if (noticeRef != null)
110            {
111                av.add(noticeRef);
112            }
113    
114            if (explicitText != null)
115            {
116                av.add(explicitText);
117            }
118    
119            return new DERSequence(av);
120        }
121    }