001    /**
002     *  Licensed to the Apache Software Foundation (ASF) under one or more
003     *  contributor license agreements.  See the NOTICE file distributed with
004     *  this work for additional information regarding copyright ownership.
005     *  The ASF licenses this file to You under the Apache License, Version 2.0
006     *  (the "License"); you may not use this file except in compliance with
007     *  the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    
018    package org.apache.geronimo.crypto.asn1.x509;
019    
020    import org.apache.geronimo.crypto.asn1.ASN1Encodable;
021    import org.apache.geronimo.crypto.asn1.ASN1EncodableVector;
022    import org.apache.geronimo.crypto.asn1.ASN1Sequence;
023    import org.apache.geronimo.crypto.asn1.DERObject;
024    import org.apache.geronimo.crypto.asn1.DERSequence;
025    
026    /**
027     * <code>UserNotice</code> class, used in
028     * <code>CertificatePolicies</code> X509 extensions (in policy
029     * qualifiers).
030     * <pre>
031     * UserNotice ::= SEQUENCE {
032     *      noticeRef        NoticeReference OPTIONAL,
033     *      explicitText     DisplayText OPTIONAL}
034     *
035     * </pre>
036     *
037     * @see PolicyQualifierId
038     * @see PolicyInformation
039     */
040    public class UserNotice
041        extends ASN1Encodable
042    {
043        NoticeReference noticeRef;
044        DisplayText     explicitText;
045    
046        /**
047         * Creates a new <code>UserNotice</code> instance.
048         *
049         * @param noticeRef a <code>NoticeReference</code> value
050         * @param explicitText a <code>DisplayText</code> value
051         */
052        public UserNotice(
053            NoticeReference noticeRef,
054            DisplayText explicitText)
055        {
056            this.noticeRef = noticeRef;
057            this.explicitText = explicitText;
058        }
059    
060        /**
061         * Creates a new <code>UserNotice</code> instance.
062         *
063         * @param noticeRef a <code>NoticeReference</code> value
064         * @param str the explicitText field as a String.
065         */
066        public UserNotice(
067            NoticeReference noticeRef,
068            String str)
069        {
070            this.noticeRef = noticeRef;
071            this.explicitText = new DisplayText(str);
072        }
073    
074       /**
075        * Creates a new <code>UserNotice</code> instance.
076        * <p>Useful from reconstructing a <code>UserNotice</code> instance
077        * from its encodable/encoded form.
078        *
079        * @param as an <code>ASN1Sequence</code> value obtained from either
080        * calling @{link toASN1Object()} for a <code>UserNotice</code>
081        * instance or from parsing it from a DER-encoded stream.
082        */
083       public UserNotice(
084           ASN1Sequence as)
085       {
086           if (as.size() == 2)
087           {
088               noticeRef = NoticeReference.getInstance(as.getObjectAt(0));
089               explicitText = DisplayText.getInstance(as.getObjectAt(1));
090           }
091           else if (as.size() == 1)
092           {
093               if (as.getObjectAt(0).getDERObject() instanceof ASN1Sequence)
094               {
095                   noticeRef = NoticeReference.getInstance(as.getObjectAt(0));
096               }
097               else
098               {
099                   explicitText = DisplayText.getInstance(as.getObjectAt(0));
100               }
101           }
102        }
103    
104        public DERObject toASN1Object()
105        {
106            ASN1EncodableVector av = new ASN1EncodableVector();
107    
108            if (noticeRef != null)
109            {
110                av.add(noticeRef);
111            }
112    
113            if (explicitText != null)
114            {
115                av.add(explicitText);
116            }
117    
118            return new DERSequence(av);
119        }
120    }