OSDN Git Service

modifications for Java1.5
authorjwat <jwat@users.sourceforge.jp>
Fri, 11 Nov 2011 05:53:09 +0000 (14:53 +0900)
committerjwat <jwat@users.sourceforge.jp>
Fri, 11 Nov 2011 05:53:09 +0000 (14:53 +0900)
Change behavior of SelectiveType(ASN1Type) constructor.
Add hashCode method for BIT_STRING, OCTET_STRING and NULL.

19 files changed:
jp/bitmeister/asn1/codec/ber/BerDecoder.java
jp/bitmeister/asn1/codec/ber/BerEncoder.java
jp/bitmeister/asn1/codec/ber/DerEncoder.java
jp/bitmeister/asn1/codec/xer/XerDecoder.java
jp/bitmeister/asn1/codec/xer/XerEncoder.java
jp/bitmeister/asn1/processor/ASN1StringBuilder.java
jp/bitmeister/asn1/processor/ASN1VisitorAdaptor.java
jp/bitmeister/asn1/type/CollectionType.java
jp/bitmeister/asn1/type/NamedTypeSpecification.java
jp/bitmeister/asn1/type/SelectiveType.java
jp/bitmeister/asn1/type/StringType.java
jp/bitmeister/asn1/type/builtin/ANY.java
jp/bitmeister/asn1/type/builtin/BIT_STRING.java
jp/bitmeister/asn1/type/builtin/CHOICE.java
jp/bitmeister/asn1/type/builtin/INTEGER.java
jp/bitmeister/asn1/type/builtin/OCTET_STRING.java
jp/bitmeister/asn1/type/builtin/REAL.java
jp/bitmeister/asn1/value/BinString.java
jp/bitmeister/asn1/value/HexString.java

index f90e362..04ae61f 100644 (file)
@@ -19,7 +19,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigInteger;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import jp.bitmeister.asn1.codec.ASN1Decoder;
@@ -114,7 +113,6 @@ public class BerDecoder implements ASN1Decoder,
         * 
         * @see jp.bitmeister.asn1.codec.ASN1Decoder#decode()
         */
-       @Override
        public ASN1Type decode() throws ASN1DecodingException {
                return decodeImpl(null);
        }
@@ -124,7 +122,6 @@ public class BerDecoder implements ASN1Decoder,
         * 
         * @see jp.bitmeister.asn1.codec.ASN1Decoder#decode(java.lang.Class)
         */
-       @Override
        public <T extends ASN1Type> T decode(Class<T> type)
                        throws ASN1DecodingException {
                T data = ASN1Type.instantiate(type);
@@ -200,7 +197,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.builtintype
         * .BOOLEAN)
         */
-       @Override
        public Void visit(BOOLEAN data) throws ASN1DecodingException {
                data.set(readStream(readLength())[0] != 0x00);
                return null;
@@ -213,7 +209,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .IntegerType)
         */
-       @Override
        public Void visit(INTEGER data) throws ASN1DecodingException {
                data.set(new BigInteger(readStream(readLength())));
                return null;
@@ -226,7 +221,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .EnumeratedType)
         */
-       @Override
        public Void visit(ENUMERATED data) throws ASN1DecodingException {
                visit((INTEGER) data);
                return null;
@@ -239,7 +233,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .RealType)
         */
-       @Override
        public Void visit(REAL data) throws ASN1DecodingException {
                byte[] octets = readStream(readLength());
                if (octets.length == 0) {
@@ -274,8 +267,9 @@ public class BerDecoder implements ASN1Decoder,
                                exponent |= octets[2] & 0xff;
                                index++;
                        }
-                       long mantissa = new BigInteger(Arrays.copyOfRange(octets, index,
-                                       octets.length)).longValue();
+                       byte[] tmp = new byte[octets.length - index];
+                       System.arraycopy(octets, index, tmp, 0, octets.length - index);
+                       long mantissa = new BigInteger(tmp).longValue();
                        data.set(mantissa * Math.pow(2, scaling) * Math.pow(base, exponent)
                                        * sign);
                } else if ((octets[0] & 0x40) == 0) {
@@ -308,7 +302,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .BitStringType)
         */
-       @Override
        public Void visit(BIT_STRING data) throws ASN1DecodingException {
                if (isConstructed) {
                        processConcatenatable(data);
@@ -348,7 +341,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .OctetStringType)
         */
-       @Override
        public Void visit(OCTET_STRING data) throws ASN1DecodingException {
                if (isConstructed) {
                        processConcatenatable(data);
@@ -365,7 +357,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .NullType)
         */
-       @Override
        public Void visit(NULL data) throws ASN1DecodingException {
                if (readLength() != 0) {
                        ASN1DecodingException ex = new ASN1DecodingException();
@@ -383,14 +374,12 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .SequenceType)
         */
-       @Override
        public Void visit(final SEQUENCE data) throws ASN1DecodingException {
                final ElementSpecification[] elements = data.getElementTypeList();
                processMultipleOctets(readLength(), new ElementProcessor() {
 
                        private int index = 0;
 
-                       @Override
                        public void process() throws ASN1DecodingException {
                                readTag();
                                for (; index < elements.length; index++) {
@@ -414,7 +403,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .SequenceOfType)
         */
-       @Override
        public Void visit(final SEQUENCE_OF<? extends ASN1Type> data)
                        throws ASN1DecodingException {
                processCollection(data);
@@ -428,11 +416,9 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .SetType)
         */
-       @Override
        public Void visit(final SET data) throws ASN1DecodingException {
                processMultipleOctets(readLength(), new ElementProcessor() {
 
-                       @Override
                        public void process() throws ASN1DecodingException {
                                readTag();
                                for (ElementSpecification e : data.getElementTypeList()) {
@@ -455,7 +441,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .SetOfType)
         */
-       @Override
        public Void visit(SET_OF<? extends ASN1Type> data)
                        throws ASN1DecodingException {
                processCollection(data);
@@ -469,7 +454,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .ChoiceType)
         */
-       @Override
        public Void visit(CHOICE data) throws ASN1DecodingException {
                processComponent(data, data.alternative(tagClass, tagNumber));
                return null;
@@ -482,7 +466,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .ObjectIdentifierType)
         */
-       @Override
        public Void visit(OBJECT_IDENTIFIER data) throws ASN1DecodingException {
                int length = readLength();
                final List<Integer> oids = new ArrayList<Integer>();
@@ -497,7 +480,6 @@ public class BerDecoder implements ASN1Decoder,
        /* (non-Javadoc)
         * @see jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type.builtin.RELATIVE_OID)
         */
-       @Override
        public Void visit(RELATIVE_OID data) throws ASN1DecodingException {
                List<Integer> oids = new ArrayList<Integer>();
                decodeOids(oids, readLength());
@@ -520,7 +502,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .base.StringType)
         */
-       @Override
        public Void visit(StringType data) throws ASN1DecodingException {
                visit((OCTET_STRING) data);
                return null;
@@ -533,7 +514,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .TimeType)
         */
-       @Override
        public Void visit(TimeType data) throws ASN1DecodingException {
                data.set(new String(readStream(readLength())));
                return null;
@@ -546,7 +526,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.builtintype
         * .ANY)
         */
-       @Override
        public Void visit(ANY data) throws ASN1DecodingException {
                if (data.value() == null) {
                        data.set(ASN1ModuleManager.instantiate(module, tagClass, tagNumber));
@@ -562,7 +541,6 @@ public class BerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .UnknownType)
         */
-       @Override
        public Void visit(UnknownType data) throws ASN1DecodingException {
                data.set(readStream(readLength()));
                return null;
index 7e9d2d8..2c5202c 100644 (file)
@@ -92,7 +92,6 @@ public class BerEncoder implements ASN1Encoder,
         * @throws ASN1EncodingException
         *             When an error occurred while the encoding process.
         */
-       @Override
        public int encode(ASN1Type data) throws ASN1EncodingException {
                try {
                        data.validate();
@@ -152,7 +151,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BOOLEAN)
         */
-       @Override
        public EncodedOctets visit(BOOLEAN data) {
                return newPrimitiveOctets(data.value() ? (byte) 0xff : (byte) 0x00);
        }
@@ -164,7 +162,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.INTEGER)
         */
-       @Override
        public EncodedOctets visit(INTEGER data) {
                return newPrimitiveOctets(data.value().toByteArray());
        }
@@ -176,7 +173,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ENUMERATED)
         */
-       @Override
        public EncodedOctets visit(ENUMERATED data) {
                return visit((INTEGER) data);
        }
@@ -188,7 +184,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.REAL)
         */
-       @Override
        public EncodedOctets visit(REAL data) {
                byte[] encoded;
                if (data.value() == 0) { // zero.
@@ -216,7 +211,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BIT_STRING)
         */
-       @Override
        public EncodedOctets visit(BIT_STRING data) {
                if (data.value().length == 0) {
                        return newPrimitiveOctets((byte) 0x00);
@@ -247,7 +241,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OCTET_STRING)
         */
-       @Override
        public EncodedOctets visit(OCTET_STRING data) throws ASN1EncodingException {
                return newPrimitiveOctets(data.value());
        }
@@ -259,7 +252,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.NULL)
         */
-       @Override
        public EncodedOctets visit(NULL data) throws ASN1EncodingException {
                return newPrimitiveOctets();
        }
@@ -271,7 +263,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE)
         */
-       @Override
        public EncodedOctets visit(SEQUENCE data) throws ASN1EncodingException {
                return processConstructive(data);
        }
@@ -283,7 +274,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE_OF)
         */
-       @Override
        public EncodedOctets visit(SEQUENCE_OF<? extends ASN1Type> data)
                        throws ASN1EncodingException {
                return processCollection(data);
@@ -296,7 +286,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET)
         */
-       @Override
        public ConstructedOctets visit(SET data) throws ASN1EncodingException {
                return processConstructive(data);
        }
@@ -308,7 +297,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET_OF)
         */
-       @Override
        public ConstructedOctets visit(SET_OF<? extends ASN1Type> data)
                        throws ASN1EncodingException {
                return processCollection(data);
@@ -321,7 +309,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.CHOICE)
         */
-       @Override
        public EncodedOctets visit(CHOICE data) throws ASN1EncodingException {
                return encode(data.selectedValue(), data.selectedTag(), null);
        }
@@ -333,7 +320,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OBJECT_IDENTIFIER)
         */
-       @Override
        public EncodedOctets visit(OBJECT_IDENTIFIER data)
                        throws ASN1EncodingException {
                if (data.value().size() < 2 || data.value().get(0) < 0
@@ -353,7 +339,6 @@ public class BerEncoder implements ASN1Encoder,
        /* (non-Javadoc)
         * @see jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type.builtin.RELATIVE_OID)
         */
-       @Override
        public EncodedOctets visit(RELATIVE_OID data) throws ASN1EncodingException {
                byte[] encoded = new byte[calculateEncodedOidSize(data, 0)];
                encodeOid(data, encoded, 0, 0);
@@ -388,7 +373,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .StringType)
         */
-       @Override
        public EncodedOctets visit(StringType data) throws ASN1EncodingException {
                return newPrimitiveOctets(data.value());
        }
@@ -400,7 +384,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .TimeType)
         */
-       @Override
        public EncodedOctets visit(TimeType data) throws ASN1EncodingException {
                return newPrimitiveOctets(data.value());
        }
@@ -412,7 +395,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ANY)
         */
-       @Override
        public EncodedOctets visit(ANY data) throws ASN1EncodingException {
                return encode(data.value(), null, null);
        }
@@ -424,7 +406,6 @@ public class BerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .UnknownType)
         */
-       @Override
        public EncodedOctets visit(UnknownType data) throws ASN1EncodingException {
                EncodedOctets octets = newPrimitiveOctets(data.value());
                octets.fix(data.tagClass(), data.tagNumber());
@@ -680,7 +661,6 @@ public class BerEncoder implements ASN1Encoder,
                 * 
                 * @see jp.bitmeister.asn1.codec.ber.BerOctets#isConstructed()
                 */
-               @Override
                public boolean isConstructed() {
                        return false;
                }
@@ -691,7 +671,6 @@ public class BerEncoder implements ASN1Encoder,
                 * @see
                 * jp.bitmeister.asn1.codec.ber.BerEncoder2.BerOctets#contentsLength()
                 */
-               @Override
                public int contentsLength() {
                        return contents.length;
                }
@@ -703,7 +682,6 @@ public class BerEncoder implements ASN1Encoder,
                 * jp.bitmeister.asn1.codec.ber.BerEncoder2.BerOctets#writeContents(
                 * java.io.OutputStream)
                 */
-               @Override
                void writeContents(OutputStream out) throws IOException {
                        out.write(contents);
                }
@@ -742,8 +720,7 @@ public class BerEncoder implements ASN1Encoder,
                 * 
                 * @see jp.bitmeister.asn1.codec.ber.BerOctets#isConstructed()
                 */
-               public @Override
-               boolean isConstructed() {
+               public boolean isConstructed() {
                        return true;
                }
 
@@ -752,7 +729,6 @@ public class BerEncoder implements ASN1Encoder,
                 * 
                 * @see jp.bitmeister.asn1.codec.ber.BerOctets#octetsLength()
                 */
-               @Override
                public int contentsLength() {
                        return length;
                }
@@ -764,7 +740,6 @@ public class BerEncoder implements ASN1Encoder,
                 * jp.bitmeister.asn1.codec.ber.BerEncoder.BerOctets#writeContents(java
                 * .io.OutputStream)
                 */
-               @Override
                void writeContents(OutputStream out) throws IOException {
                        for (EncodedOctets e : elements) {
                                e.write(out);
index 968d86d..cfe0fc4 100644 (file)
@@ -139,7 +139,7 @@ public class DerEncoder extends BerEncoder {
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BIT_STRING)
         */
-       @Override
+       @Override       
        public EncodedOctets visit(BIT_STRING data) {
                if (data.hasNamedBits()) {
                        data.contract();
@@ -184,7 +184,7 @@ public class DerEncoder extends BerEncoder {
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET)
         */
-       @Override
+       @Override       
        public ConstructedOctets visit(SET data) throws ASN1EncodingException {
                return ((DerConstructedOctets)super.visit(data)).sortByTag();
        }
@@ -196,7 +196,7 @@ public class DerEncoder extends BerEncoder {
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET_OF)
         */
-       @Override
+       @Override       
        public ConstructedOctets visit(SET_OF<? extends ASN1Type> data)
                        throws ASN1EncodingException {
                return ((DerConstructedOctets)super.visit(data)).sortByContents();
@@ -334,7 +334,6 @@ public class DerEncoder extends BerEncoder {
                         * @see java.util.Comparator#compare(java.lang.Object,
                         * java.lang.Object)
                         */
-                       @Override
                        public int compare(DerOctets o1, DerOctets o2) {
                                if (o1.tagClass != o2.tagClass) {
                                        return o1.tagClass.ordinal() - o2.tagClass.ordinal();
@@ -358,7 +357,6 @@ public class DerEncoder extends BerEncoder {
                         * @see java.util.Comparator#compare(java.lang.Object,
                         * java.lang.Object)
                         */
-                       @Override
                        public int compare(DerOctets o1, DerOctets o2) {
                                if (o1.encodedOctets.length != o2.encodedOctets.length) {
                                        return o1.encodedOctets.length - o2.encodedOctets.length;
@@ -403,7 +401,6 @@ public class DerEncoder extends BerEncoder {
                 * 
                 * @see jp.bitmeister.asn1.codec.ber.BerOctets#isConstructed()
                 */
-               @Override
                public boolean isConstructed() {
                        return false;
                }
@@ -414,7 +411,6 @@ public class DerEncoder extends BerEncoder {
                 * @see
                 * jp.bitmeister.asn1.codec.ber.BerEncoder2.BerOctets#contentsLength()
                 */
-               @Override
                public int contentsLength() {
                        return contents.length;
                }
@@ -422,7 +418,6 @@ public class DerEncoder extends BerEncoder {
                /* (non-Javadoc)
                 * @see jp.bitmeister.asn1.codec.ber.DerEncoder.DerOctets#getContents()
                 */
-               @Override
                byte[][] getContents() {
                        return new byte[][] {contents};
                }
@@ -430,7 +425,6 @@ public class DerEncoder extends BerEncoder {
                /* (non-Javadoc)
                 * @see jp.bitmeister.asn1.codec.ber.DerEncoder.DerOctets#clearContents()
                 */
-               @Override
                void clearContents() {
                        contents = null;
                }
@@ -469,8 +463,7 @@ public class DerEncoder extends BerEncoder {
                 * 
                 * @see jp.bitmeister.asn1.codec.ber.BerOctets#isConstructed()
                 */
-               public @Override
-               boolean isConstructed() {
+               public boolean isConstructed() {
                        return true;
                }
 
@@ -479,7 +472,6 @@ public class DerEncoder extends BerEncoder {
                 * 
                 * @see jp.bitmeister.asn1.codec.ber.BerOctets#octetsLength()
                 */
-               @Override
                public int contentsLength() {
                        return length;
                }
@@ -487,7 +479,6 @@ public class DerEncoder extends BerEncoder {
                /* (non-Javadoc)
                 * @see jp.bitmeister.asn1.codec.ber.DerEncoder.DerOctets#getContents()
                 */
-               @Override
                byte[][] getContents() {
                        byte[][] contents = new byte[elements.size()][];
                        for (int i = 0; i < elements.size(); i++) {
@@ -499,7 +490,6 @@ public class DerEncoder extends BerEncoder {
                /* (non-Javadoc)
                 * @see jp.bitmeister.asn1.codec.ber.DerEncoder.DerOctets#clearContents()
                 */
-               @Override
                void clearContents() {
                        // nothing to do.
                }
index 7068a1a..14260bc 100644 (file)
@@ -23,7 +23,6 @@ import static jp.bitmeister.asn1.codec.xer.XerConstants.REAL_PLUS_INFINITY;
 import java.io.InputStream;
 import java.math.BigInteger;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import jp.bitmeister.asn1.codec.ASN1Decoder;
@@ -240,7 +239,6 @@ public class XerDecoder implements ASN1Decoder,
                 * jp.bitmeister.asn1.codec.xer.XerDecoder.ElementDecoder#startElement
                 * (java.lang.String)
                 */
-               @Override
                public void startElement(String qName) throws SAXException {
                        if (qName.equals(tagName)) {
                                decoder.startElement(qName);
@@ -256,7 +254,6 @@ public class XerDecoder implements ASN1Decoder,
                 * jp.bitmeister.asn1.codec.xer.XerDecoder.ElementDecoder#endElement
                 * (java.lang.String)
                 */
-               @Override
                public boolean endElement(String qName) {
                        if (qName.equals(tagName)) {
                                decoder.endElement();
@@ -295,7 +292,6 @@ public class XerDecoder implements ASN1Decoder,
                 * jp.bitmeister.asn1.codec.xer.XerDecoder.ElementDecoder#startElement
                 * (java.lang.String)
                 */
-               @Override
                public void startElement(String qName) throws SAXException {
                        decoder.startElement(qName);
                        decoder.startChildElement(qName);
@@ -308,7 +304,6 @@ public class XerDecoder implements ASN1Decoder,
                 * jp.bitmeister.asn1.codec.xer.XerDecoder.ElementDecoder#endElement
                 * (java.lang.String)
                 */
-               @Override
                public boolean endElement(String qName) {
                        decoder.endChildElement(qName);
                        decoder.endElement();
@@ -365,8 +360,9 @@ public class XerDecoder implements ASN1Decoder,
                 */
                @Override
                public void characters(char[] ch, int start, int length) {
-                       decoder.characters(String.valueOf(Arrays.copyOfRange(ch, start,
-                                       start + length)));
+                       char[] tmp = new char[length];
+                       System.arraycopy(ch, start, tmp, 0, length);
+                       decoder.characters(String.valueOf(tmp));
                }
 
                /*
@@ -414,7 +410,6 @@ public class XerDecoder implements ASN1Decoder,
         * 
         * @see jp.bitmeister.asn1.codec.ASN1Decoder#decode(java.lang.Class)
         */
-       @Override
        public <T extends ASN1Type> T decode(final Class<T> type)
                        throws ASN1DecodingException {
                XerHandler<T> handler = new XerHandler<T>() {
@@ -426,7 +421,6 @@ public class XerDecoder implements ASN1Decoder,
                         * jp.bitmeister.asn1.codec.xer.XerDecoder.XerHandler#initializeData
                         * (java.lang.String)
                         */
-                       @Override
                        void initializeData(String qName) throws SAXException {
                                data = ASN1Type.instantiate(type);
                                if (module == null) {
@@ -450,7 +444,6 @@ public class XerDecoder implements ASN1Decoder,
         * 
         * @see jp.bitmeister.asn1.codec.ASN1Decoder#decode()
         */
-       @Override
        public ASN1Type decode() throws ASN1DecodingException {
                XerHandler<ASN1Type> handler = new XerHandler<ASN1Type>() {
 
@@ -461,7 +454,6 @@ public class XerDecoder implements ASN1Decoder,
                         * jp.bitmeister.asn1.codec.xer.XerDecoder.XerHandler#initializeData
                         * (java.lang.String)
                         */
-                       @Override
                        void initializeData(String qName) {
                                data = ASN1ModuleManager.instantiate(module, qName);
                        }
@@ -498,7 +490,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BOOLEAN)
         */
-       @Override
        public DataDecoder visit(final BOOLEAN data) {
                return new DataDecoder() {
 
@@ -528,7 +519,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.INTEGER)
         */
-       @Override
        public DataDecoder visit(final INTEGER data) {
                return new DataDecoder() {
 
@@ -566,7 +556,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BIT_STRING)
         */
-       @Override
        public DataDecoder visit(final BIT_STRING data) {
                return new DataDecoder() {
 
@@ -604,7 +593,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OCTET_STRING)
         */
-       @Override
        public DataDecoder visit(final OCTET_STRING data) {
                return new DataDecoder() {
 
@@ -630,7 +618,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.NULL)
         */
-       @Override
        public DataDecoder visit(NULL data) {
                return new DataDecoder() {
                };
@@ -643,7 +630,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OBJECT_IDENTIFIER)
         */
-       @Override
        public DataDecoder visit(final OBJECT_IDENTIFIER data) {
                return new DataDecoder() {
 
@@ -681,7 +667,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.REAL)
         */
-       @Override
        public DataDecoder visit(final REAL data) {
                return new DataDecoder() {
 
@@ -723,7 +708,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ENUMERATED)
         */
-       @Override
        public DataDecoder visit(ENUMERATED data) {
                return visit((INTEGER) data);
        }
@@ -735,7 +719,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.RELATIVE_OID)
         */
-       @Override
        public DataDecoder visit(RELATIVE_OID data) {
                return visit((OBJECT_IDENTIFIER) data);
        }
@@ -747,7 +730,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ANY)
         */
-       @Override
        public DataDecoder visit(final ANY data) {
                return new DataDecoder() {
 
@@ -790,7 +772,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.CHOICE)
         */
-       @Override
        public DataDecoder visit(CHOICE data) {
                return decoderForStructuredType(data);
        }
@@ -802,7 +783,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE_OF)
         */
-       @Override
        public DataDecoder visit(SEQUENCE_OF<? extends ASN1Type> data) {
                return decoderForCollectionType(data);
        }
@@ -814,7 +794,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE)
         */
-       @Override
        public DataDecoder visit(SEQUENCE data) {
                return decoderForStructuredType(data);
        }
@@ -826,7 +805,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET_OF)
         */
-       @Override
        public DataDecoder visit(SET_OF<? extends ASN1Type> data) {
                return decoderForCollectionType(data);
        }
@@ -838,7 +816,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET)
         */
-       @Override
        public DataDecoder visit(SET data) {
                return decoderForStructuredType(data);
        }
@@ -850,7 +827,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .StringType)
         */
-       @Override
        public DataDecoder visit(final StringType data) {
                return new DataDecoder() {
 
@@ -903,7 +879,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .TimeType)
         */
-       @Override
        public DataDecoder visit(TimeType data) {
                return visit((StringType) data);
        }
@@ -915,7 +890,6 @@ public class XerDecoder implements ASN1Decoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .UnknownType)
         */
-       @Override
        public DataDecoder visit(UnknownType data) throws SAXException {
                throw new SAXException("UnkownType is not supported by XerDecoder.");
        }
index 30a0ce0..98f2420 100644 (file)
@@ -148,8 +148,7 @@ public class XerEncoder implements ASN1Encoder,
         * @return The size of encoded octets.
         * @throws ASN1EncodingException
         *             When an error occurred while the encoding process.
-        */
-       @Override
+        */     
        public int encode(ASN1Type data) throws ASN1EncodingException {
                if (module == null) {
                        module = data.specification().module();
@@ -203,7 +202,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BOOLEAN)
         */
-       @Override
        public String visit(BOOLEAN data) {
                return TAG_START + (data.value() ? BOOLEAN_TRUE : BOOLEAN_FALSE)
                                + SINGLE_TAG_END;
@@ -216,7 +214,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.INTEGER)
         */
-       @Override
        public String visit(INTEGER data) {
                String numberId = data.identifier();
                if (numberId != null) {
@@ -233,7 +230,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BIT_STRING)
         */
-       @Override
        public String visit(BIT_STRING data) {
                if (data.hasNamedBits()) {
                        StringBuilder builder = new StringBuilder();
@@ -259,7 +255,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OCTET_STRING)
         */
-       @Override
        public String visit(OCTET_STRING data) {
                return new HexString(data.value()).string();
        }
@@ -271,7 +266,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.NULL)
         */
-       @Override
        public String visit(NULL data) {
                return "";
        }
@@ -283,7 +277,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OBJECT_IDENTIFIER)
         */
-       @Override
        public String visit(OBJECT_IDENTIFIER data) {
                StringBuilder builder = new StringBuilder();
                if (data.value().size() > 0) {
@@ -302,7 +295,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.RELATIVE_OID)
         */
-       @Override
        public String visit(RELATIVE_OID data) {
                return visit((OBJECT_IDENTIFIER) data);
        }
@@ -314,7 +306,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.REAL)
         */
-       @Override
        public String visit(REAL data) {
                if (data.value().isInfinite()) {
                        return TAG_START
@@ -335,7 +326,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ENUMERATED)
         */
-       @Override
        public String visit(ENUMERATED data) {
                return visit((INTEGER) data);
        }
@@ -347,7 +337,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ANY)
         */
-       @Override
        public String visit(ANY data) throws ASN1EncodingException {
                encodeImpl(data.value(),
                                data.value().specification().xmlTypeName(module));
@@ -361,7 +350,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.CHOICE)
         */
-       @Override
        public String visit(CHOICE data) throws ASN1EncodingException {
                StringBuilder enclosure = builder;
                builder = new StringBuilder();
@@ -378,7 +366,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE_OF)
         */
-       @Override
        public String visit(SEQUENCE_OF<? extends ASN1Type> data)
                        throws ASN1EncodingException {
                return processCollection(data);
@@ -391,7 +378,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE)
         */
-       @Override
        public String visit(SEQUENCE data) throws ASN1EncodingException {
                return processConstructive(data);
        }
@@ -403,7 +389,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET_OF)
         */
-       @Override
        public String visit(SET_OF<? extends ASN1Type> data)
                        throws ASN1EncodingException {
                return processCollection(data);
@@ -416,7 +401,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET)
         */
-       @Override
        public String visit(SET data) throws ASN1EncodingException {
                return processConstructive(data);
        }
@@ -428,7 +412,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .StringType)
         */
-       @Override
        public String visit(StringType data) throws ASN1EncodingException {
                try {
                        return new String(XerStringEscapeUtil.escape(data.stringValue())
@@ -445,7 +428,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .TimeType)
         */
-       @Override
        public String visit(TimeType data) throws ASN1EncodingException {
                return data.stringValue();
        }
@@ -457,7 +439,6 @@ public class XerEncoder implements ASN1Encoder,
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .UnknownType)
         */
-       @Override
        public String visit(UnknownType data) throws ASN1EncodingException {
                ASN1EncodingException ex = new ASN1EncodingException();
                ex.setMessage("Can't encode unknown type.", null, data.getClass(),
index a98ceba..03ab4e7 100644 (file)
@@ -117,7 +117,6 @@ public class ASN1StringBuilder implements
         *            The ASN.1 data.
         * @return A string representation of the ASN.1 data.
         */
-       @Override
        public String process(ASN1Type data) {
                indent = 0;
                builder = new StringBuilder();
@@ -180,7 +179,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BOOLEAN)
         */
-       @Override
        public Void visit(BOOLEAN data) {
                builder.append(data.value() ? "TRUE" : "FALSE");
                return null;
@@ -193,7 +191,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.INTEGER)
         */
-       @Override
        public Void visit(INTEGER data) {
                String numberId = data.identifier();
                if (numberId != null) {
@@ -210,7 +207,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ENUMERATED)
         */
-       @Override
        public Void visit(ENUMERATED data) {
                visit((INTEGER) data);
                return null;
@@ -223,7 +219,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.REAL)
         */
-       @Override
        public Void visit(REAL data) {
                builder.append(NUMBER_OPEN).append(data.value()).append(NUMBER_CLOSE);
                return null;
@@ -236,7 +231,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BIT_STRING)
         */
-       @Override
        public Void visit(BIT_STRING data) {
                if (data.hasNamedBits()) {
                        builder.append(NAMED_BITS_OPEN);
@@ -268,7 +262,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OCTET_STRING)
         */
-       @Override
        public Void visit(OCTET_STRING data) {
                builder.append(new HexString(data.value()).toString());
                return null;
@@ -281,7 +274,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.NULL)
         */
-       @Override
        public Void visit(NULL data) {
                builder.append(NULL);
                return null;
@@ -294,7 +286,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE)
         */
-       @Override
        public Void visit(SEQUENCE data) {
                writeConstructive(data);
                return null;
@@ -307,7 +298,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE_OF)
         */
-       @Override
        public Void visit(SEQUENCE_OF<? extends ASN1Type> data) {
                writeCollection(data);
                return null;
@@ -320,7 +310,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET)
         */
-       @Override
        public Void visit(SET data) {
                writeConstructive(data);
                return null;
@@ -333,7 +322,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET_OF)
         */
-       @Override
        public Void visit(SET_OF<? extends ASN1Type> data) {
                writeCollection(data);
                return null;
@@ -346,7 +334,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.CHOICE)
         */
-       @Override
        public Void visit(CHOICE data) {
                indent();
                if (!data.hasValue()) {
@@ -370,7 +357,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OBJECT_IDENTIFIER)
         */
-       @Override
        public Void visit(OBJECT_IDENTIFIER data) {
                builder.append(OID_OPEN);
                if (data.value().size() > 0) {
@@ -387,7 +373,6 @@ public class ASN1StringBuilder implements
        /* (non-Javadoc)
         * @see jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type.builtin.RELATIVE_OID)
         */
-       @Override
        public Void visit(RELATIVE_OID data) {
                return visit((OBJECT_IDENTIFIER)data);
        }
@@ -399,7 +384,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .StringType)
         */
-       @Override
        public Void visit(StringType data) {
                try {
                        String value = data.stringValue();
@@ -417,7 +401,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .TimeType)
         */
-       @Override
        public Void visit(TimeType data) {
                visit((StringType)data);
                builder.append(SPACE).append(DATE_FORMAT.get().format(data.date()));
@@ -431,7 +414,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ANY)
         */
-       @Override
        public Void visit(ANY data) {
                write(data.value());
                return null;
@@ -444,7 +426,6 @@ public class ASN1StringBuilder implements
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .UnknownType)
         */
-       @Override
        public Void visit(UnknownType data) {
                for (int i = 0; i < data.value().length; i++) {
                        if (i % 16 == 0) {
index f099cf6..e105b3a 100644 (file)
@@ -57,7 +57,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BOOLEAN)
         */
-       @Override
        public R visit(BOOLEAN data) throws E {
                return null;
        }
@@ -69,7 +68,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.INTEGER)
         */
-       @Override
        public R visit(INTEGER data) throws E {
                return null;
        }
@@ -81,7 +79,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.BIT_STRING)
         */
-       @Override
        public R visit(BIT_STRING data) throws E {
                return null;
        }
@@ -93,7 +90,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OCTET_STRING)
         */
-       @Override
        public R visit(OCTET_STRING data) throws E {
                return null;
        }
@@ -105,7 +101,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.NULL)
         */
-       @Override
        public R visit(NULL data) throws E {
                return null;
        }
@@ -117,7 +112,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.OBJECT_IDENTIFIER)
         */
-       @Override
        public R visit(OBJECT_IDENTIFIER data) throws E {
                return null;
        }
@@ -129,7 +123,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.REAL)
         */
-       @Override
        public R visit(REAL data) throws E {
                return null;
        }
@@ -141,7 +134,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ENUMERATED)
         */
-       @Override
        public R visit(ENUMERATED data) throws E {
                return null;
        }
@@ -149,7 +141,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
        /* (non-Javadoc)
         * @see jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type.builtin.RELATIVE_OID)
         */
-       @Override
        public R visit(RELATIVE_OID data) throws E {
                return null;
        }
@@ -161,7 +152,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.ANY)
         */
-       @Override
        public R visit(ANY data) throws E {
                return null;
        }
@@ -173,7 +163,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.CHOICE)
         */
-       @Override
        public R visit(CHOICE data) throws E {
                return null;
        }
@@ -185,7 +174,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE_OF)
         */
-       @Override
        public R visit(SEQUENCE_OF<? extends ASN1Type> data) throws E {
                return null;
        }
@@ -197,7 +185,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SEQUENCE)
         */
-       @Override
        public R visit(SEQUENCE data) throws E {
                return null;
        }
@@ -209,7 +196,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET_OF)
         */
-       @Override
        public R visit(SET_OF<? extends ASN1Type> data) throws E {
                return null;
        }
@@ -221,7 +207,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .builtin.SET)
         */
-       @Override
        public R visit(SET data) throws E {
                return null;
        }
@@ -233,7 +218,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .StringType)
         */
-       @Override
        public R visit(StringType data) throws E {
                return null;
        }
@@ -245,7 +229,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .TimeType)
         */
-       @Override
        public R visit(TimeType data) throws E {
                return null;
        }
@@ -257,7 +240,6 @@ public class ASN1VisitorAdaptor<R, E extends Throwable> implements ASN1Visitor<R
         * jp.bitmeister.asn1.processor.ASN1Visitor#visit(jp.bitmeister.asn1.type
         * .UnknownType)
         */
-       @Override
        public R visit(UnknownType data) throws E {
                return null;
        }
index 8924498..81d36dd 100644 (file)
@@ -109,7 +109,6 @@ public abstract class CollectionType<T extends ASN1Type> extends ASN1Type
         * 
         * @see jp.bitmeister.asn1.type.SizeCountable#size()
         */
-       @Override
        public int size() {
                return collection.size();
        }
index af93086..7011a2c 100644 (file)
@@ -260,7 +260,6 @@ public class NamedTypeSpecification implements
         * 
         * @see java.lang.Comparable#compareTo(T)
         */
-       @Override
        public int compareTo(NamedTypeSpecification compared) {
                return order - compared.order;
        }
index 0393f7f..5715d3f 100644 (file)
@@ -106,32 +106,34 @@ public abstract class SelectiveType extends StructuredType {
        }
 
        /**
-        * Instantiates a {@code SelectiveType} and initialize it with the
-        * parameter. The ASN.1 tag that assigned to the type of the data is used
-        * for select a field.
+     * Instantiates a {@code SelectiveType} and initialize it with the
+     * parameter. The type of the data is used for select alternative. If this
+     * {@code SelectiveType} has two or more alternatives that are defined as
+     * same type, the result of this constructor is undefined.
         * 
         * @param data
         *            The ASN.1 data assigned to this instance.
         */
        public SelectiveType(ASN1Type data) {
-               if (!data.specification().tagged()) {
-                       ASN1IllegalArgument ex = new ASN1IllegalArgument();
-                       ex.setMessage(
-                                       "The type of the data has no ASN.1 tag for specifying alternative.",
-                                       null, getClass(), null, data);
-                       throw ex;
+               for (NamedTypeSpecification e : getAlternativeTypeList(getClass())) {
+                       if (e.type() == data.getClass()) {
+                               set(e, data);
+                               return;
+                       }
                }
-               ASN1TagValue tag = data.specification().tag();
-               set(alternative(tag.tagClass(), tag.tagNumber()), data);
+               ASN1IllegalArgument ex = new ASN1IllegalArgument();
+               ex.setMessage("Can't select alternative by the type of the data.",
+                               null, getClass(), null, data);
+               throw ex;
        }
 
        /**
         * Instantiates a {@code SelectiveType} and initialize it with parameters.
         * 
         * @param tagClass
-        *            The tag class used for select a field.
+        *            The tag class used for select an alternative.
         * @param tagNumber
-        *            The tag number used for select a field.
+        *            The tag number used for select an alternative.
         * @param data
         *            The data to be assigned.
         */
@@ -140,6 +142,18 @@ public abstract class SelectiveType extends StructuredType {
        }
 
        /**
+        * Instantiates a {@code SelectiveType} and initialize it with parameters.
+        * 
+        * @param elementName
+        *            The element name used for select an alternative.
+        * @param data
+        *            The data to be assigned.
+        */
+       public SelectiveType(String elementName, ASN1Type data) {
+               set(elementName, data);
+       }
+
+       /**
         * Returns the element specified by the ASN.1 tag class and number.
         * 
         * @param tagClass
@@ -211,8 +225,10 @@ public abstract class SelectiveType extends StructuredType {
        public ASN1Type get(String elementName) {
                return getElement(elementName).retrieve(this);
        }
-       
-       /* (non-Javadoc)
+
+       /*
+        * (non-Javadoc)
+        * 
         * @see jp.bitmeister.asn1.type.StructuredType#getElement(java.lang.String)
         */
        @Override
@@ -223,7 +239,8 @@ public abstract class SelectiveType extends StructuredType {
                        }
                }
                ASN1IllegalArgument ex = new ASN1IllegalArgument();
-               ex.setMessage("No such alternative '" + elementName + "' in this type.",
+               ex.setMessage(
+                               "No such alternative '" + elementName + "' in this type.",
                                null, getClass(), null, null);
                throw ex;
        }
index 21bd5c6..3992440 100644 (file)
  */
 package jp.bitmeister.asn1.type;
 
+import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
 import java.util.regex.Pattern;
 
 import jp.bitmeister.asn1.exception.ASN1IllegalArgument;
+import jp.bitmeister.asn1.exception.ASN1RuntimeException;
 import jp.bitmeister.asn1.processor.ASN1Visitor;
 import jp.bitmeister.asn1.type.builtin.OCTET_STRING;
 
@@ -44,7 +46,13 @@ public abstract class StringType extends OCTET_STRING {
         */
        public void set(String value) {
                checkCharacters(value);
-               set(value.getBytes(charset()));
+               try {
+                       set(value.getBytes(charset().displayName()));
+               } catch (UnsupportedEncodingException e) {
+                       ASN1RuntimeException ex = new ASN1RuntimeException();
+                       ex.setMessage("Character set unsupported.", e, getClass(), null, this);
+                       throw ex;
+               }
        }
 
        /**
@@ -54,7 +62,13 @@ public abstract class StringType extends OCTET_STRING {
         * @return The string value assigned to this instance.
         */
        public String stringValue() {
-               return new String(value(), charset());
+               try {
+                       return new String(value(), charset().displayName());
+               } catch (UnsupportedEncodingException e) {
+                       ASN1RuntimeException ex = new ASN1RuntimeException();
+                       ex.setMessage("Character set unsupported.", e, getClass(), null, this);
+                       throw ex;
+               }
        }
 
        /**
index 17af2af..600815f 100644 (file)
@@ -86,6 +86,16 @@ public class ANY extends PrimitiveType<ASN1Type> {
                return true;
        }
 
+       /* 
+        * (non-Javadoc)
+        * 
+        * @see jp.bitmeister.asn1.type.PrimitiveType#hashCode()
+        */
+       @Override
+       public int hashCode() {
+               return 0;
+       }
+
        /*
         * (non-Javadoc)
         * 
index 773a6b0..64b2782 100644 (file)
@@ -330,7 +330,6 @@ public class BIT_STRING extends PrimitiveType<boolean[]> implements
         * 
         * @see jp.bitmeister.asn1.type.Concatenatable#concatenate(null)
         */
-       @Override
        public void concatenate(BIT_STRING data) {
                if (data == null) {
                        return;
@@ -363,7 +362,6 @@ public class BIT_STRING extends PrimitiveType<boolean[]> implements
         * 
         * @see jp.bitmeister.asn1.type.SizeCountable#size()
         */
-       @Override
        public int size() {
                if (value() == null) {
                        return 0;
@@ -401,6 +399,16 @@ public class BIT_STRING extends PrimitiveType<boolean[]> implements
                return false;
        }
 
+       /* 
+        * (non-Javadoc)
+        * 
+        * @see jp.bitmeister.asn1.type.PrimitiveType#hashCode()
+        */
+       @Override
+       public int hashCode() {
+               return Arrays.hashCode(value());
+       }
+
        /*
         * (non-Javadoc)
         * 
index eef38c3..81e8c2a 100644 (file)
@@ -49,8 +49,8 @@ public abstract class CHOICE extends SelectiveType {
 
        /**
         * Instantiates a {@code CHOICE} and initialize it with the parameter. The
-        * ASN.1 tag that assigned to the type of the data is used for select a
-        * field.
+        * ASN.1 tag that assigned to the type of the data is used for select an
+        * alternative.
         * 
         * @param data
         *            The data to be assigned.
@@ -63,9 +63,9 @@ public abstract class CHOICE extends SelectiveType {
         * Instantiates a {@code CHOICE} and initialize it with parameters.
         * 
         * @param tagClass
-        *            The tag class used for select a field.
+        *            The tag class used for select an alternative.
         * @param tagNumber
-        *            The tag number used for select a field.
+        *            The tag number used for select an alternative.
         * @param data
         *            The data to be assigned.
         */
@@ -73,6 +73,18 @@ public abstract class CHOICE extends SelectiveType {
                super(tagClass, tagNumber, data);
        }
 
+       /**
+        * Instantiates a {@code CHOICE} and initialize it with parameters.
+        * 
+        * @param elementName
+        *            The element name used for select an alternative.
+        * @param data
+        *            The data to be assigned.
+        */
+       public CHOICE(String elementName, ASN1Type data) {
+               super(elementName, data);
+       }
+
        /*
         * (non-Javadoc)
         * 
@@ -81,8 +93,9 @@ public abstract class CHOICE extends SelectiveType {
         * ASN1Visitor)
         */
        @Override
-       public <R, E extends Throwable> R accept(ASN1Visitor<R, E> visitor) throws E {
+       public <R, E extends Throwable> R accept(ASN1Visitor<R, E> visitor)
+                       throws E {
                return visitor.visit(this);
        }
-       
+
 }
index 50d1f0a..8edb00e 100644 (file)
@@ -291,7 +291,6 @@ public class INTEGER extends PrimitiveType<BigInteger> implements
         * jp.bitmeister.asn1.type.ValueComparable#compareTo(jp.bitmeister.asn1.
         * type.ASN1Type)
         */
-       @Override
        public int compareTo(ASN1Type other) {
                return value().compareTo(((INTEGER) other).value());
        }
index 5dc740f..02d450e 100644 (file)
@@ -90,7 +90,6 @@ public class OCTET_STRING extends PrimitiveType<byte[]> implements
         * 
         * @see jp.bitmeister.asn1.type.Concatenatable#concatenate(null)
         */
-       @Override
        public void concatenate(OCTET_STRING data) {
                if (data == null) {
                        return;
@@ -122,7 +121,6 @@ public class OCTET_STRING extends PrimitiveType<byte[]> implements
         * 
         * @see jp.bitmeister.asn1.type.SizeCountable#size()
         */
-       @Override
        public int size() {
                return value().length;
        }
@@ -154,6 +152,16 @@ public class OCTET_STRING extends PrimitiveType<byte[]> implements
                return false;
        }
 
+       /* 
+        * (non-Javadoc)
+        * 
+        * @see jp.bitmeister.asn1.type.PrimitiveType#hashCode()
+        */
+       @Override
+       public int hashCode() {
+               return Arrays.hashCode(value());
+       }
+
        /*
         * (non-Javadoc)
         * 
index 22a5f72..43d05fd 100644 (file)
@@ -165,7 +165,6 @@ public class REAL extends PrimitiveType<Double> implements ValueComparable {
         * jp.bitmeister.asn1.type.ValueComparable#compareTo(jp.bitmeister.asn1.
         * type.ASN1Type)
         */
-       @Override
        public int compareTo(ASN1Type other) {
                return value().compareTo(((REAL) other).value());
        }
index 1fa820e..ea5fe07 100644 (file)
@@ -76,7 +76,6 @@ public class BinString implements StringItem {
         * 
         * @return An array of {@code boolean}.
         */
-       @Override
        public boolean[] toBinArray() {
                boolean[] array = new boolean[string.length()];
                for (int i = 0; i < array.length; i++) {
@@ -90,7 +89,6 @@ public class BinString implements StringItem {
         * 
         * @return An array of {@code byte}.
         */
-       @Override
        public byte[] toByteArray() {
                byte[] array = new byte[string.length() / 8 + 1];
                int index = 0, shift = 7;
index 1cbd259..17e3351 100644 (file)
@@ -80,7 +80,6 @@ public class HexString implements StringItem {
         * 
         * @return An array of {@code boolean}.
         */
-       @Override
        public boolean[] toBinArray() {
                boolean[] array = new boolean[string.length() * 4];
                int index = 0, mask = 0;
@@ -101,7 +100,6 @@ public class HexString implements StringItem {
         * 
         * @return An array of {@code byte}.
         */
-       @Override
        public byte[] toByteArray() {
                byte[] array = new byte[string.length() / 2 + string.length() % 2];
                byte octet = 0;