1package org.bouncycastle.asn1;
2
3import java.io.IOException;
4
5/**
6 * A parser for indefinite-length application specific objects.
7 */
8public class BERApplicationSpecificParser
9    implements ASN1ApplicationSpecificParser
10{
11    private final int tag;
12    private final ASN1StreamParser parser;
13
14    BERApplicationSpecificParser(int tag, ASN1StreamParser parser)
15    {
16        this.tag = tag;
17        this.parser = parser;
18    }
19
20    /**
21     * Return the object contained in this application specific object,
22     * @return the contained object.
23     * @throws IOException if the underlying stream cannot be read, or does not contain an ASN.1 encoding.
24     */
25    public ASN1Encodable readObject()
26        throws IOException
27    {
28        return parser.readObject();
29    }
30
31    /**
32     * Return an in-memory, encodable, representation of the application specific object.
33     *
34     * @return a BERApplicationSpecific.
35     * @throws IOException if there is an issue loading the data.
36     */
37    public ASN1Primitive getLoadedObject()
38        throws IOException
39    {
40         return new BERApplicationSpecific(tag, parser.readVector());
41    }
42
43    /**
44     * Return a BERApplicationSpecific representing this parser and its contents.
45     *
46     * @return a BERApplicationSpecific
47     */
48    public ASN1Primitive toASN1Primitive()
49    {
50        try
51        {
52            return getLoadedObject();
53        }
54        catch (IOException e)
55        {
56            throw new ASN1ParsingException(e.getMessage(), e);
57        }
58    }
59}
60