1 /*
2  * @(#) $Id: Name.java,v 1.3 2003/07/08 08:13:53 pankaj Exp $
3  *
4  * Copyright (c) 2002-03 by Pankaj Kumar (http://www.pankaj-k.net). 
5  * All rights reserved.
6  *
7  * The license governing the use of this file can be found in the 
8  * root directory of the containing software.
9  */
10package org.jstk.pki;
11
12import java.io.IOException;
13import java.util.Vector;
14import org.jstk.asn1.*;
15
16public class Name extends ASN1Seq {
17    public static class OVPair extends ASN1Seq {
18        ASN1Oid oid = new ASN1Oid();
19        ASN1Any val = new ASN1Any();
20        OVPair(){
21            super();
22            add(oid);
23            add(val);
24        }
25    }
26
27    public Name(){
28        super();
29    }
30
31    public void reinitialize(Name name){
32        elems = name.elems; // Shallow copy. beware !!
33    }
34
35    public void decode(ASN1PullParser parser) throws ASN1PullParserException, IOException {
36        int event;
37        if (parser.next() != ASN1PullParser.START_SEQ)
38            throw new ASN1PullParserException("unexpected type");
39        while ((event = parser.next()) != ASN1PullParser.END_SEQ){
40            if (event != ASN1PullParser.START_SET)
41                throw new ASN1PullParserException("unexpected type");
42            ASN1Set rdn = new ASN1Set();
43            while ((event = parser.next()) != ASN1PullParser.END_SET){
44                parser.prev();
45                OVPair ovp = new OVPair();
46                ovp.decode(parser);
47                rdn.add(ovp);
48            }
49            add(rdn);
50        }
51    }
52
53    public void add(String oid, String value){
54        ASN1PrintableString ps = new ASN1PrintableString();
55        ps.setString(value);
56
57        OVPair ovp = new OVPair();
58        ovp.oid.setOid(oid);
59        ovp.val.setInstance(ps);
60        ASN1Set rdn = new ASN1Set();
61        rdn.add(ovp);
62        add(rdn);
63    }
64
65    public String getOid(int index){
66        ASN1Set rdn = (ASN1Set)elementAt(index);
67        OVPair ovp = (OVPair)rdn.elementAt(0);
68        return ovp.oid.toString();
69    }
70
71    public String getValue(int index){
72        ASN1Set rdn = (ASN1Set)elementAt(index);
73        OVPair ovp = (OVPair)rdn.elementAt(0);
74        return ovp.val.toString();
75    }
76
77    public String toString(){
78        StringBuffer sb = new StringBuffer();
79        for (int i = 0; i < size(); i++){
80            ASN1Set rdn = (ASN1Set)elementAt(i);
81            for (int j = 0; j < rdn.size(); j++){
82                if (j > 0)
83                    sb.append("; ");
84                OVPair ovp = (OVPair)rdn.elementAt(j);
85                sb.append(ovp.oid.toString() + "=" + ovp.val.toString());
86            }
87            if (i > 0)
88                sb.append("; ");
89        }
90        return sb.toString();
91    }
92}
93
94