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.ASN1Set;
025    import org.apache.geronimo.util.asn1.DERObject;
026    import org.apache.geronimo.util.asn1.DERObjectIdentifier;
027    import org.apache.geronimo.util.asn1.DERSequence;
028    
029    public class Attribute
030        extends ASN1Encodable
031    {
032        private DERObjectIdentifier attrType;
033        private ASN1Set             attrValues;
034    
035        /**
036         * return an Attribute object from the given object.
037         *
038         * @param o the object we want converted.
039         * @exception IllegalArgumentException if the object cannot be converted.
040         */
041        public static Attribute getInstance(
042            Object o)
043        {
044            if (o == null || o instanceof Attribute)
045            {
046                return (Attribute)o;
047            }
048    
049            if (o instanceof ASN1Sequence)
050            {
051                return new Attribute((ASN1Sequence)o);
052            }
053    
054            throw new IllegalArgumentException("unknown object in factory");
055        }
056    
057        public Attribute(
058            ASN1Sequence seq)
059        {
060            attrType = (DERObjectIdentifier)seq.getObjectAt(0);
061            attrValues = (ASN1Set)seq.getObjectAt(1);
062        }
063    
064        public Attribute(
065            DERObjectIdentifier attrType,
066            ASN1Set             attrValues)
067        {
068            this.attrType = attrType;
069            this.attrValues = attrValues;
070        }
071    
072        public DERObjectIdentifier getAttrType()
073        {
074            return attrType;
075        }
076    
077        public ASN1Set getAttrValues()
078        {
079            return attrValues;
080        }
081    
082        /**
083         * Produce an object suitable for an ASN1OutputStream.
084         * <pre>
085         * Attribute ::= SEQUENCE {
086         *     attrType OBJECT IDENTIFIER,
087         *     attrValues SET OF AttributeValue
088         * }
089         * </pre>
090         */
091        public DERObject toASN1Object()
092        {
093            ASN1EncodableVector v = new ASN1EncodableVector();
094    
095            v.add(attrType);
096            v.add(attrValues);
097    
098            return new DERSequence(v);
099        }
100    }