You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2012/03/10 10:48:56 UTC

svn commit: r1299173 [1/10] - in /qpid/proton/proton-j: ./ codec/ codec/src/ codec/src/org/ codec/src/org/apache/ codec/src/org/apache/qpid/ codec/src/org/apache/qpid/proton/ codec/src/org/apache/qpid/proton/codec/ codec/src/org/apache/qpid/proton/fram...

Author: rgodfrey
Date: Sat Mar 10 09:48:50 2012
New Revision: 1299173

URL: http://svn.apache.org/viewvc?rev=1299173&view=rev
Log:
Initial commit of proton-j code

Added:
    qpid/proton/proton-j/
    qpid/proton/proton-j/build.xml
    qpid/proton/proton-j/codec/
    qpid/proton/proton-j/codec/build.xml
    qpid/proton/proton-j/codec/src/
    qpid/proton/proton-j/codec/src/org/
    qpid/proton/proton-j/codec/src/org/apache/
    qpid/proton/proton-j/codec/src/org/apache/qpid/
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AMQPType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveTypeEncoding.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ArrayType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BinaryType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BooleanType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferDecoder.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferEncoder.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/CharacterType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/Decimal128Type.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/Decimal32Type.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/Decimal64Type.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/DecodeException.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/Decoder.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/DecoderImpl.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/DescribedTypeConstructor.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/DoubleType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/DynamicDescribedType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/DynamicTypeConstructor.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/EncodeException.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/Encoder.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/EncoderImpl.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/EncodingCodes.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/FixedSizePrimitiveTypeEncoding.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/FloatType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/FloatingSizePrimitiveTypeEncoding.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/IntegerType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/LargeFloatingSizePrimitiveTypeEncoding.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ListType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/LongType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/MapType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/NullType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/PrimitiveType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/PrimitiveTypeEncoding.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ShortType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/SmallFloatingSizePrimitiveTypeEncoding.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/StringType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/SymbolType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/TimestampType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/TypeConstructor.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/TypeEncoding.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/UUIDType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/UnsignedByteType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/UnsignedIntegerType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/UnsignedLongType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/UnsignedShortType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/framing/
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/framing/TransportFrame.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/AMQPDefinedTypes.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/Binary.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/Decimal128.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/Decimal32.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/Decimal64.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/DescribedType.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/Symbol.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/UnsignedByte.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/UnsignedInteger.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/UnsignedLong.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/UnsignedShort.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Accepted.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/AmqpSequence.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/AmqpValue.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/ApplicationProperties.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Data.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/DeleteOnClose.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/DeleteOnNoLinks.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/DeleteOnNoLinksOrMessages.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/DeleteOnNoMessages.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/DeliveryAnnotations.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Footer.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Header.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/LifetimePolicy.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/MessageAnnotations.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Modified.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Outcome.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Properties.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Received.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Rejected.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Released.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Section.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Source.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/StdDistMode.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/Target.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/TerminusDurability.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/messaging/TerminusExpiryPolicy.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/package-info.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/security/
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/security/SaslChallenge.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/security/SaslCode.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/security/SaslFrameBody.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/security/SaslInit.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/security/SaslMechanisms.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/security/SaslOutcome.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/security/SaslResponse.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transaction/
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transaction/Coordinator.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transaction/Declare.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transaction/Declared.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transaction/Discharge.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transaction/GlobalTxId.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transaction/TransactionErrors.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transaction/TransactionalState.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transaction/TxnCapability.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/AmqpError.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Attach.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Begin.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Close.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/ConnectionError.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/DeliveryState.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Detach.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Disposition.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/End.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Error.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Flow.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/FrameBody.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/LinkError.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Open.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/ReceiverSettleMode.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Role.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/SenderSettleMode.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/SessionError.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Source.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Target.java
    qpid/proton/proton-j/codec/src/org/apache/qpid/proton/type/transport/Transfer.java
    qpid/proton/proton-j/common.xml
    qpid/proton/proton-j/driver/
    qpid/proton/proton-j/driver/build.xml
    qpid/proton/proton-j/driver/src/
    qpid/proton/proton-j/driver/src/org/
    qpid/proton/proton-j/driver/src/org/apache/
    qpid/proton/proton-j/driver/src/org/apache/qpid/
    qpid/proton/proton-j/driver/src/org/apache/qpid/proton/
    qpid/proton/proton-j/driver/src/org/apache/qpid/proton/driver/
    qpid/proton/proton-j/driver/src/org/apache/qpid/proton/driver/Application.java
    qpid/proton/proton-j/driver/src/org/apache/qpid/proton/driver/ApplicationFactory.java
    qpid/proton/proton-j/driver/src/org/apache/qpid/proton/driver/BytesTransport.java
    qpid/proton/proton-j/driver/src/org/apache/qpid/proton/driver/ConnectionTransport.java
    qpid/proton/proton-j/driver/src/org/apache/qpid/proton/driver/DelegatingTransport.java
    qpid/proton/proton-j/driver/src/org/apache/qpid/proton/driver/NIOAcceptingDriver.java
    qpid/proton/proton-j/driver/src/org/apache/qpid/proton/driver/NoddyBrokerApplication.java
    qpid/proton/proton-j/engine/
    qpid/proton/proton-j/engine/build.xml
    qpid/proton/proton-j/engine/src/
    qpid/proton/proton-j/engine/src/org/
    qpid/proton/proton-j/engine/src/org/apache/
    qpid/proton/proton-j/engine/src/org/apache/qpid/
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Accepted.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Connection.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Delivery.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/DeliveryBuffer.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/DeliveryState.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Endpoint.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/EndpointError.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/EndpointState.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Link.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Modified.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Outcome.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Received.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Receiver.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Rejected.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Released.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Sender.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Sequence.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Session.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/Transport.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/AmqpErrorException.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/ArraySequence.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/ConcatenatedSequence.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/DeliveryImpl.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/EndpointImpl.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/EndpointSelectionSequence.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/FrameParser.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/IteratorSequence.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/LinkImpl.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/ReceiverImpl.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/SelectiveSequence.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/SenderImpl.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/SessionImpl.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/TransportDelivery.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/TransportFactory.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/TransportFactoryImpl.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/TransportImpl.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/TransportLink.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/TransportReceiver.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/TransportSender.java
    qpid/proton/proton-j/engine/src/org/apache/qpid/proton/engine/impl/TransportSession.java
    qpid/proton/proton-j/module.xml
    qpid/proton/proton-j/resources/
    qpid/proton/proton-j/tasks/
    qpid/proton/proton-j/tasks/src/
    qpid/proton/proton-j/tasks/src/org/
    qpid/proton/proton-j/tasks/src/org/apache/
    qpid/proton/proton-j/tasks/src/org/apache/qpid/
    qpid/proton/proton-j/tasks/src/org/apache/qpid/tasks/
    qpid/proton/proton-j/tasks/src/org/apache/qpid/tasks/BaseTask.java
    qpid/proton/proton-j/tasks/src/org/apache/qpid/tasks/Foreach.java
    qpid/proton/proton-j/tasks/src/org/apache/qpid/tasks/Map.java
    qpid/proton/proton-j/tasks/src/org/apache/qpid/tasks/PropertyMapper.java
    qpid/proton/proton-j/tasks/src/org/apache/qpid/tasks/Require.java

Added: qpid/proton/proton-j/build.xml
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/build.xml?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/build.xml (added)
+++ qpid/proton/proton-j/build.xml Sat Mar 10 09:48:50 2012
@@ -0,0 +1,168 @@
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements.  See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership.  The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License.  You may obtain a copy of the License at
+ - 
+ -   http://www.apache.org/licenses/LICENSE-2.0
+ - 
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied.  See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+ -->
+<project name="Qpid AMQP 1.0" default="build">
+
+  <import file="common.xml"/>
+
+  <property name="modules.core"       value="codec engine driver"/>
+  <property name="modules.opt"        value=""/>
+  <property name="modules"            value="${modules.core} ${modules.opt}"/>
+
+  <property name="resources"     value="${project.root}/resources"/>
+
+  <map property="release.excludes" value="${modules}">
+    <globmapper from="*" to="*/\*\*"/>
+  </map>
+
+
+  <macrodef name="iterate">
+    <attribute name="target"/>
+    <attribute name="modules" default="${modules}"/>
+    <element name="elements" implicit="true" optional="true"/>
+    <sequential>
+      <subant target="@{target}" antfile="build.xml">
+        <filelist dir="." files="@{modules}"/>
+        <elements/>
+      </subant>
+    </sequential>
+  </macrodef>
+
+  <target name="compile" description="compile sources">
+    <iterate target="compile"/>
+  </target>
+
+  <target name="compile-tests" description="compile unit tests">
+    <iterate target="compile-tests"/>
+  </target>
+
+  <target name="test" description="execute tests" depends="compile">
+
+    <delete file="${build.failed}"/>
+
+    <iterate target="test">
+      <property name="test.failures.ignore" value="true"/>
+    </iterate>
+
+    <condition property="failed">
+      <available file="${build.failed}"/>
+    </condition>
+
+    <fail if="failed" message="TEST SUITE FAILED"/>
+
+  </target>
+  
+  <target name="report-module" description="generate junitreport for modules">
+    <iterate target="report-module"/>
+  </target>
+
+  <target name="jar" description="create module jars">
+    <iterate target="jar"/>
+  </target>
+
+  <target name="jar-tests" description="create unit test jars">
+    <iterate target="jar-tests"/>
+  </target>
+
+  <target name="libs" description="copy dependencies into build tree">
+    <iterate target="libs"/>
+  </target>
+
+  <target name="doc" description="generate api-doc">
+    <iterate target="doc"/>
+  </target>
+
+  <target name="test-doc" description="generate api-doc">
+    <iterate target="test-doc"/>
+  </target>
+
+  <target name="bundle" description="create OSGi bundles">
+    <iterate target="bundle"/>
+  </target>
+  
+  <target name="release-bin" description="build a binary release artifact" depends="build,bundle">
+      <iterate  target="release-bin"/>
+  </target>
+
+
+  <target name="build" description="build the project">
+    <iterate target="build"/>
+  </target>
+
+  <target name="clean" description="remove build and release artifacts">
+    <iterate target="clean"/>
+    <delete dir="${build}"/>
+  </target>
+
+  <target name="coverage-report" description="generate coverage report" depends="cobertura-init">
+    <cobertura-merge datafile="${build.coveragereport}/cobertura.ser">
+      <!-- merge all module coverage reports -->
+      <fileset dir="${build}">
+        <include name="**/*.ser"/>
+      </fileset>
+    </cobertura-merge>
+    <cobertura-report format="xml"
+                      destdir="${build.coveragereport}"
+		      datafile="${build.coveragereport}/cobertura.ser"
+		      >
+      <fileset dir="${project.root}/engine/src" includes="**/*.java" />
+      <fileset dir="${project.root}/codec/src" includes="**/*.java" />
+    </cobertura-report>
+	<cobertura-report format="html"
+                      destdir="${build.coveragereport}"
+		      datafile="${build.coveragereport}/cobertura.ser"
+		      >
+      <fileset dir="${project.root}/engine/src" includes="**/*.java" />
+      <fileset dir="${project.root}/codec/src" includes="**/*.java" />
+    </cobertura-report>
+  </target>
+
+  <target name="instrument" description="instrument for artifacts">
+    <iterate target="instrument"/>
+  </target>
+  
+  <target name="cover-test" description="run tests and generate coverage information" depends="build">
+    <iterate target="cover-test" modules="engine codec"/>
+  </target>
+
+  <target name="findbugs" depends="findbugs-init,build">
+
+    <mkdir dir="${build.findbugs}"/>
+
+    <findbugs home="${findbugs.dir}"
+              output="html"
+              outputFile="${build.findbugs}/report.html" 
+              stylesheet="fancy-hist.xsl"
+              jvmargs="-Xmx512m"
+              projectName="Qpid">
+      <auxAnalyzePath>
+        <fileset dir="${build.lib}" includes="qpid*.jar" excludes="*test*.jar *junit*.jar *example*.jar qpid-all.jar"/>
+      </auxAnalyzePath>
+      <auxClassPath>
+        <fileset dir="${build.lib}" includes="**/*.jar" />
+        <fileset dir="${basedir}/lib" includes="org.eclipse*.jar com.ibm.*.jar"/>
+      </auxClassPath>
+      <sourcePath>
+        <fileset dir="${basedir}" includes="**/src/**/org/.." />
+      </sourcePath>
+    </findbugs>
+  </target>
+
+</project>

Added: qpid/proton/proton-j/codec/build.xml
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/build.xml?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/build.xml (added)
+++ qpid/proton/proton-j/codec/build.xml Sat Mar 10 09:48:50 2012
@@ -0,0 +1,27 @@
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements.  See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership.  The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License.  You may obtain a copy of the License at
+ - 
+ -   http://www.apache.org/licenses/LICENSE-2.0
+ - 
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied.  See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+ -->
+<project name="AMQP 1.0 Codec" default="build">
+
+  <property name="module.genpom" value="true"/>
+
+  <import file="../module.xml"/>
+
+</project>

Added: qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AMQPType.java
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AMQPType.java?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AMQPType.java (added)
+++ qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AMQPType.java Sat Mar 10 09:48:50 2012
@@ -0,0 +1,36 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.proton.codec;
+
+import java.util.Collection;
+
+public interface AMQPType<V>
+{
+    Class<V> getTypeClass();
+
+    TypeEncoding<V> getEncoding(V val);
+
+    TypeEncoding<V> getCanonicalEncoding();
+
+    Collection<? extends TypeEncoding<V>> getAllEncodings();
+
+    void write(V val);
+}

Added: qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveType.java
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveType.java?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveType.java (added)
+++ qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveType.java Sat Mar 10 09:48:50 2012
@@ -0,0 +1,32 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.proton.codec;
+
+abstract class AbstractPrimitiveType<T> implements PrimitiveType<T>
+{
+    public final void write(T val)
+    {
+        final TypeEncoding<T> encoding = getEncoding(val);
+        encoding.writeConstructor();
+        encoding.writeValue(val);
+    }
+
+}

Added: qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveTypeEncoding.java
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveTypeEncoding.java?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveTypeEncoding.java (added)
+++ qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/AbstractPrimitiveTypeEncoding.java Sat Mar 10 09:48:50 2012
@@ -0,0 +1,67 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.proton.codec;
+
+abstract class AbstractPrimitiveTypeEncoding<T> implements PrimitiveTypeEncoding<T>
+{
+    private final EncoderImpl _encoder;
+    private final DecoderImpl _decoder;
+
+    AbstractPrimitiveTypeEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+    {
+        _encoder = encoder;
+        _decoder = decoder;
+    }
+
+    public final void writeConstructor()
+    {
+        _encoder.writeRaw(getEncodingCode());
+    }
+
+    public int getConstructorSize()
+    {
+        return 1;
+    }
+
+    public abstract byte getEncodingCode();
+
+    protected EncoderImpl getEncoder()
+    {
+        return _encoder;
+    }
+
+    public Class<T> getTypeClass()
+    {
+        return getType().getTypeClass();
+    }
+
+    protected DecoderImpl getDecoder()
+    {
+        return _decoder;
+    }
+
+
+    public boolean encodesJavaPrimitive()
+    {
+        return false;
+    }
+
+}

Added: qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ArrayType.java
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ArrayType.java?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ArrayType.java (added)
+++ qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ArrayType.java Sat Mar 10 09:48:50 2012
@@ -0,0 +1,1139 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.proton.codec;
+
+import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.Collection;
+
+public class ArrayType implements PrimitiveType<Object[]>
+{
+    private final EncoderImpl _encoder;
+    private final BooleanType _booleanType;
+    private final ByteType _byteType;
+    private final ShortType _shortType;
+    private final IntegerType _integerType;
+    private final LongType _longType;
+    private final FloatType _floatType;
+    private final DoubleType _doubleType;
+    private final CharacterType _characterType;
+
+    public static interface ArrayEncoding extends PrimitiveTypeEncoding<Object[]>
+    {
+        void writeValue(boolean[] a);
+        void writeValue(byte[] a);
+        void writeValue(short[] a);
+        void writeValue(int[] a);
+        void writeValue(long[] a);
+        void writeValue(float[] a);
+        void writeValue(double[] a);
+        void writeValue(char[] a);
+
+        void setValue(Object[] val, TypeEncoding encoder, int size);
+
+        int getSizeBytes();
+
+        Object readValueArray();
+    }
+
+    private final ArrayEncoding _shortArrayEncoding;
+    private final ArrayEncoding _arrayEncoding;
+
+    public ArrayType(EncoderImpl encoder,
+                     final DecoderImpl decoder, BooleanType boolType,
+                     ByteType byteType,
+                     ShortType shortType,
+                     IntegerType intType,
+                     LongType longType,
+                     FloatType floatType,
+                     DoubleType doubleType,
+                     CharacterType characterType)
+    {
+        _encoder = encoder;
+        _booleanType = boolType;
+        _byteType = byteType;
+        _shortType = shortType;
+        _integerType = intType;
+        _longType = longType;
+        _floatType = floatType;
+        _doubleType = doubleType;
+        _characterType = characterType;
+
+        _arrayEncoding = new AllArrayEncoding(encoder, decoder);
+        _shortArrayEncoding = new ShortArrayEncoding(encoder, decoder);
+
+        encoder.register(Object[].class, this);
+        decoder.register(this);
+    }
+
+    public Class<Object[]> getTypeClass()
+    {
+        return Object[].class;
+    }
+
+    public ArrayEncoding getEncoding(final Object[] val)
+    {
+        TypeEncoding encoder = calculateEncoder(val,_encoder);
+        int size = calculateSize(val, encoder);
+        ArrayEncoding arrayEncoding = (val.length > 255 || size > 254)
+                                      ? _arrayEncoding
+                                      : _shortArrayEncoding;
+        arrayEncoding.setValue(val, encoder, size);
+        return arrayEncoding;
+    }
+
+    private static TypeEncoding calculateEncoder(final Object[] val, final EncoderImpl encoder)
+    {
+
+        if(val.length == 0)
+        {
+            AMQPType underlyingType = encoder.getTypeFromClass(val.getClass().getComponentType());
+            return underlyingType.getCanonicalEncoding();
+        }
+        else
+        {
+            AMQPType underlyingType = encoder.getTypeFromClass(val.getClass().getComponentType());
+            boolean checkTypes = false;
+
+            if(val[0].getClass().isArray() && val[0].getClass().getComponentType().isPrimitive())
+            {
+                Class componentType = val[0].getClass().getComponentType();
+                if(componentType == Boolean.TYPE)
+                {
+                    return ((ArrayType)underlyingType).getEncoding((boolean[])val[0]);
+                }
+                else if(componentType == Byte.TYPE)
+                {
+                    return ((ArrayType)underlyingType).getEncoding((byte[])val[0]);
+                }
+                else if(componentType == Short.TYPE)
+                {
+                    return ((ArrayType)underlyingType).getEncoding((short[])val[0]);
+                }
+                else if(componentType == Integer.TYPE)
+                {
+                    return ((ArrayType)underlyingType).getEncoding((int[])val[0]);
+                }
+                else if(componentType == Long.TYPE)
+                {
+                    return ((ArrayType)underlyingType).getEncoding((long[])val[0]);
+                }
+                else if(componentType == Float.TYPE)
+                {
+                    return ((ArrayType)underlyingType).getEncoding((float[])val[0]);
+                }
+                else if(componentType == Double.TYPE)
+                {
+                    return ((ArrayType)underlyingType).getEncoding((double[])val[0]);
+                }
+                else if(componentType == Character.TYPE)
+                {
+                    return ((ArrayType)underlyingType).getEncoding((char[])val[0]);
+                }
+                else
+                {
+                    throw new IllegalArgumentException("Cannot encode arrays of type " + componentType.getName());
+                }
+            }
+            else
+            {
+
+                if(underlyingType == null)
+                {
+                    checkTypes = true;
+                    underlyingType = encoder.getType(val[0]);
+                }
+                TypeEncoding underlyingEncoding = underlyingType.getEncoding(val[0]);
+                TypeEncoding canonicalEncoding = underlyingType.getCanonicalEncoding();
+
+                for(int i = 0; i < val.length && (checkTypes || underlyingEncoding != canonicalEncoding); i++)
+                {
+                    if(checkTypes && encoder.getType(val[i]) != underlyingType)
+                    {
+                        throw new IllegalArgumentException("Non matching types " + underlyingType + " and " + encoder
+                                .getType(val[i]) + " in array");
+                    }
+
+
+                    TypeEncoding elementEncoding = underlyingType.getEncoding(val[i]);
+                    if(elementEncoding != underlyingEncoding && !underlyingEncoding.encodesSuperset(elementEncoding))
+                    {
+                        if(elementEncoding.encodesSuperset(underlyingEncoding))
+                        {
+                            underlyingEncoding = elementEncoding;
+                        }
+                        else
+                        {
+                            underlyingEncoding = canonicalEncoding;
+                        }
+                    }
+
+                }
+
+                return underlyingEncoding;
+            }
+        }
+    }
+
+    private static int calculateSize(final Object[] val, final TypeEncoding encoder)
+    {
+        int size = encoder.getConstructorSize();
+        if(encoder.isFixedSizeVal())
+        {
+            size += val.length * encoder.getValueSize(null);
+        }
+        else
+        {
+            for(Object o : val)
+            {
+                if(o.getClass().isArray() && o.getClass().getComponentType().isPrimitive())
+                {
+                    ArrayEncoding arrayEncoding = (ArrayEncoding) encoder;
+                    ArrayType arrayType = (ArrayType) arrayEncoding.getType();
+
+                    Class componentType = o.getClass().getComponentType();
+
+                    size += 2 * arrayEncoding.getSizeBytes();
+
+                    TypeEncoding componentEncoding;
+                    int componentCount;
+
+                    if(componentType == Boolean.TYPE)
+                    {
+                        boolean[] componentArray = (boolean[]) o;
+                        componentEncoding = arrayType.getUnderlyingEncoding(componentArray);
+                        componentCount = componentArray.length;
+                    }
+                    else if(componentType == Byte.TYPE)
+                    {
+                        byte[] componentArray = (byte[]) o;
+                        componentEncoding = arrayType.getUnderlyingEncoding(componentArray);
+                        componentCount = componentArray.length;
+                    }
+                    else if(componentType == Short.TYPE)
+                    {
+                        short[] componentArray = (short[]) o;
+                        componentEncoding = arrayType.getUnderlyingEncoding(componentArray);
+                        componentCount = componentArray.length;
+                    }
+                    else if(componentType == Integer.TYPE)
+                    {
+                        int[] componentArray = (int[]) o;
+                        componentEncoding = arrayType.getUnderlyingEncoding(componentArray);
+                        componentCount = componentArray.length;
+                    }
+                    else if(componentType == Long.TYPE)
+                    {
+                        long[] componentArray = (long[]) o;
+                        componentEncoding = arrayType.getUnderlyingEncoding(componentArray);
+                        componentCount = componentArray.length;
+                    }
+                    else if(componentType == Float.TYPE)
+                    {
+                        float[] componentArray = (float[]) o;
+                        componentEncoding = arrayType.getUnderlyingEncoding(componentArray);
+                        componentCount = componentArray.length;
+                    }
+                    else if(componentType == Double.TYPE)
+                    {
+                        double[] componentArray = (double[]) o;
+                        componentEncoding = arrayType.getUnderlyingEncoding(componentArray);
+                        componentCount = componentArray.length;
+                    }
+                    else if(componentType == Character.TYPE)
+                    {
+                        char[] componentArray = (char[]) o;
+                        componentEncoding = arrayType.getUnderlyingEncoding(componentArray);
+                        componentCount = componentArray.length;
+                    }
+                    else
+                    {
+                        throw new IllegalArgumentException("Cannot encode arrays of type " + componentType.getName());
+                    }
+
+                    size +=  componentEncoding.getConstructorSize()
+                                + componentEncoding.getValueSize(null) * componentCount;
+
+                }
+                else
+                {
+                    size += encoder.getValueSize(o);
+                }
+            }
+        }
+
+        return size;
+    }
+
+    public ArrayEncoding getCanonicalEncoding()
+    {
+        return _arrayEncoding;
+    }
+
+    public Collection<ArrayEncoding> getAllEncodings()
+    {
+        return Arrays.asList(_shortArrayEncoding, _arrayEncoding);
+    }
+
+    public void write(final Object[] val)
+    {
+        ArrayEncoding encoding = getEncoding(val);
+        encoding.writeConstructor();
+        encoding.writeValue(val);
+    }
+
+    public void write(boolean[] a)
+    {
+        ArrayEncoding encoding = getEncoding(a);
+        encoding.writeConstructor();
+        encoding.writeValue(a);
+    }
+
+    private ArrayEncoding getEncoding(final boolean[] a)
+    {
+        return a.length < 254 || a.length <= 255 && allSameValue(a) ? _shortArrayEncoding : _arrayEncoding;
+    }
+
+    private boolean allSameValue(final boolean[] a)
+    {
+        boolean val = a[0];
+        for(int i = 1; i < a.length; i++)
+        {
+            if(val != a[i])
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public void write(byte[] a)
+    {
+        ArrayEncoding encoding = getEncoding(a);
+        encoding.writeConstructor();
+        encoding.writeValue(a);
+    }
+
+    private ArrayEncoding getEncoding(final byte[] a)
+    {
+        return a.length < 254 ? _shortArrayEncoding : _arrayEncoding;
+    }
+
+    public void write(short[] a)
+    {
+        ArrayEncoding encoding = getEncoding(a);
+        encoding.writeConstructor();
+        encoding.writeValue(a);
+    }
+
+    private ArrayEncoding getEncoding(final short[] a)
+    {
+        return a.length < 127 ? _shortArrayEncoding : _arrayEncoding;
+    }
+
+    public void write(int[] a)
+    {
+        ArrayEncoding encoding = getEncoding(a);
+        encoding.writeConstructor();
+        encoding.writeValue(a);
+    }
+
+    private ArrayEncoding getEncoding(final int[] a)
+    {
+        return a.length < 63 || (a.length < 254 && allSmallInts(a)) ? _shortArrayEncoding : _arrayEncoding;
+    }
+
+    private boolean allSmallInts(final int[] a)
+    {
+        for(int i = 0; i < a.length; i++)
+        {
+            if(a[i] < -128 || a[i] > 127)
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public void write(long[] a)
+    {
+        ArrayEncoding encoding = getEncoding(a);
+        encoding.writeConstructor();
+        encoding.writeValue(a);
+    }
+
+    private ArrayEncoding getEncoding(final long[] a)
+    {
+        return a.length < 31 || (a.length < 254 && allSmallLongs(a)) ? _shortArrayEncoding : _arrayEncoding;
+    }
+
+    private boolean allSmallLongs(final long[] a)
+    {
+        for(int i = 0; i < a.length; i++)
+        {
+            if(a[i] < -128L || a[i] > 127L)
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public void write(float[] a)
+    {
+        ArrayEncoding encoding = getEncoding(a);
+        encoding.writeConstructor();
+        encoding.writeValue(a);
+    }
+
+    private ArrayEncoding getEncoding(final float[] a)
+    {
+        return a.length < 63 ? _shortArrayEncoding : _arrayEncoding;
+    }
+
+    public void write(double[] a)
+    {
+        ArrayEncoding encoding = getEncoding(a);
+        encoding.writeConstructor();
+        encoding.writeValue(a);
+    }
+
+    private ArrayEncoding getEncoding(final double[] a)
+    {
+        return a.length < 31 ? _shortArrayEncoding : _arrayEncoding;
+    }
+
+    public void write(char[] a)
+    {
+        ArrayEncoding encoding = getEncoding(a);
+        encoding.writeConstructor();
+        encoding.writeValue(a);
+    }
+
+    private ArrayEncoding getEncoding(final char[] a)
+    {
+        return a.length < 63 ? _shortArrayEncoding : _arrayEncoding;
+    }
+
+    private class AllArrayEncoding
+            extends LargeFloatingSizePrimitiveTypeEncoding<Object[]>
+            implements ArrayEncoding
+    {
+
+        private Object[] _val;
+        private TypeEncoding _underlyingEncoder;
+        private int _size;
+
+        AllArrayEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+        {
+            super(encoder, decoder);
+        }
+
+        public void writeValue(final boolean[] a)
+        {
+            BooleanType.BooleanEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw(4 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null));
+            getEncoder().writeRaw(a.length);
+            underlyingEncoder.writeConstructor();
+            for(boolean b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+
+        }
+
+        public void writeValue(final byte[] a)
+        {
+            ByteType.ByteEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw(4 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null));
+            getEncoder().writeRaw(a.length);
+            underlyingEncoder.writeConstructor();
+            for(byte b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final short[] a)
+        {
+            ShortType.ShortEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw(4 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null));
+            getEncoder().writeRaw(a.length);
+            underlyingEncoder.writeConstructor();
+            for(short b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final int[] a)
+        {
+
+            IntegerType.IntegerEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw(4 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null));
+            getEncoder().writeRaw(a.length);
+            underlyingEncoder.writeConstructor();
+            for(int b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final long[] a)
+        {
+
+            LongType.LongEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw(4 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null));
+            getEncoder().writeRaw(a.length);
+            underlyingEncoder.writeConstructor();
+            for(long b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final float[] a)
+        {
+
+            FloatType.FloatEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw(4 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null));
+            getEncoder().writeRaw(a.length);
+            underlyingEncoder.writeConstructor();
+            for(float b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final double[] a)
+        {
+
+            DoubleType.DoubleEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw(4 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null));
+            getEncoder().writeRaw(a.length);
+            underlyingEncoder.writeConstructor();
+            for(double b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final char[] a)
+        {
+
+            CharacterType.CharacterEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw(4 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null));
+            getEncoder().writeRaw(a.length);
+            underlyingEncoder.writeConstructor();
+            for(char b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void setValue(final Object[] val, final TypeEncoding encoder, final int size)
+        {
+            _val = val;
+            _underlyingEncoder = encoder;
+            _size = size;
+        }
+
+        @Override
+        protected void writeEncodedValue(final Object[] val)
+        {
+            TypeEncoding underlyingEncoder;
+
+            if(_val != val)
+            {
+                _val = val;
+                _underlyingEncoder = underlyingEncoder = calculateEncoder(val, getEncoder());
+                _size =  calculateSize(val, underlyingEncoder);
+            }
+            else
+            {
+                underlyingEncoder = _underlyingEncoder;
+            }
+            getEncoder().writeRaw(val.length);
+            underlyingEncoder.writeConstructor();
+            for(Object o : val)
+            {
+                underlyingEncoder.writeValue(o);
+            }
+        }
+
+        @Override
+        protected int getEncodedValueSize(final Object[] val)
+        {
+            if(_val != val)
+            {
+                _val = val;
+                _underlyingEncoder = calculateEncoder(val, getEncoder());
+                _size = calculateSize(val, _underlyingEncoder);
+            }
+            return 4 + _size;
+        }
+
+        @Override
+        public byte getEncodingCode()
+        {
+            return EncodingCodes.ARRAY32;
+        }
+
+        public ArrayType getType()
+        {
+            return ArrayType.this;
+        }
+
+        public boolean encodesSuperset(final TypeEncoding<Object[]> encoding)
+        {
+            return getType() == encoding.getType();
+        }
+
+        public Object[] readValue()
+        {
+            DecoderImpl decoder = getDecoder();
+            int size = decoder.readRawInt();
+            int count = decoder.readRawInt();
+            return decodeArray(decoder, count);
+        }
+
+        public Object readValueArray()
+        {
+            DecoderImpl decoder = getDecoder();
+            int size = decoder.readRawInt();
+            int count = decoder.readRawInt();
+            return decodeArrayAsObject(decoder, count);
+        }
+
+
+
+    }
+
+
+
+    private class ShortArrayEncoding
+            extends SmallFloatingSizePrimitiveTypeEncoding<Object[]>
+            implements ArrayEncoding
+    {
+
+        private Object[] _val;
+        private TypeEncoding _underlyingEncoder;
+        private int _size;
+
+        ShortArrayEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+        {
+            super(encoder, decoder);
+        }
+
+        public void writeValue(final boolean[] a)
+        {
+            BooleanType.BooleanEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw((byte)(1 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null)));
+            getEncoder().writeRaw((byte)a.length);
+            underlyingEncoder.writeConstructor();
+            for(boolean b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+
+        }
+
+        public void writeValue(final byte[] a)
+        {
+            ByteType.ByteEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw((byte)(1 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null)));
+            getEncoder().writeRaw((byte)a.length);
+            underlyingEncoder.writeConstructor();
+            for(byte b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final short[] a)
+        {
+            ShortType.ShortEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw((byte)(1 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null)));
+            getEncoder().writeRaw((byte)a.length);
+            underlyingEncoder.writeConstructor();
+            for(short b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final int[] a)
+        {
+
+            IntegerType.IntegerEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw((byte)(1 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null)));
+            getEncoder().writeRaw((byte)a.length);
+            underlyingEncoder.writeConstructor();
+            for(int b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final long[] a)
+        {
+
+            LongType.LongEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw((byte)(1 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null)));
+            getEncoder().writeRaw((byte)a.length);
+            underlyingEncoder.writeConstructor();
+            for(long b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final float[] a)
+        {
+
+            FloatType.FloatEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw((byte)(1 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null)));
+            getEncoder().writeRaw((byte)a.length);
+            underlyingEncoder.writeConstructor();
+            for(float b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final double[] a)
+        {
+
+            DoubleType.DoubleEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw((byte)(1 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null)));
+            getEncoder().writeRaw((byte)a.length);
+            underlyingEncoder.writeConstructor();
+            for(double b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void writeValue(final char[] a)
+        {
+
+            CharacterType.CharacterEncoding underlyingEncoder = getUnderlyingEncoding(a);
+            getEncoder().writeRaw((byte)(1 + underlyingEncoder.getConstructorSize()
+                                  + a.length*underlyingEncoder.getValueSize(null)));
+            getEncoder().writeRaw((byte)a.length);
+            underlyingEncoder.writeConstructor();
+            for(char b : a)
+            {
+                underlyingEncoder.writeValue(b);
+            }
+        }
+
+        public void setValue(final Object[] val, final TypeEncoding encoder, final int size)
+        {
+            _val = val;
+            _underlyingEncoder = encoder;
+            _size = size;
+        }
+
+        @Override
+        protected void writeEncodedValue(final Object[] val)
+        {
+            TypeEncoding underlyingEncoder;
+
+            if(_val != val)
+            {
+                _val = val;
+                _underlyingEncoder = underlyingEncoder = calculateEncoder(val, getEncoder());
+                _size =  calculateSize(val, underlyingEncoder);
+            }
+            else
+            {
+                underlyingEncoder = _underlyingEncoder;
+            }
+            getEncoder().writeRaw((byte)val.length);
+            underlyingEncoder.writeConstructor();
+            for(Object o : val)
+            {
+                if(o.getClass().isArray() && o.getClass().getComponentType().isPrimitive())
+                {
+                    ArrayEncoding arrayEncoding = (ArrayEncoding) underlyingEncoder;
+                    ArrayType arrayType = (ArrayType) arrayEncoding.getType();
+
+                    Class componentType = o.getClass().getComponentType();
+
+                    if(componentType == Boolean.TYPE)
+                    {
+                        boolean[] componentArray = (boolean[]) o;
+                        arrayEncoding.writeValue(componentArray);
+                    }
+                    else if(componentType == Byte.TYPE)
+                    {
+                        byte[] componentArray = (byte[]) o;
+                        arrayEncoding.writeValue(componentArray);
+                    }
+                    else if(componentType == Short.TYPE)
+                    {
+                        short[] componentArray = (short[]) o;
+                        arrayEncoding.writeValue(componentArray);
+                    }
+                    else if(componentType == Integer.TYPE)
+                    {
+                        int[] componentArray = (int[]) o;
+                        arrayEncoding.writeValue(componentArray);
+                    }
+                    else if(componentType == Long.TYPE)
+                    {
+                        long[] componentArray = (long[]) o;
+                        arrayEncoding.writeValue(componentArray);
+                    }
+                    else if(componentType == Float.TYPE)
+                    {
+                        float[] componentArray = (float[]) o;
+                        arrayEncoding.writeValue(componentArray);
+                    }
+                    else if(componentType == Double.TYPE)
+                    {
+                        double[] componentArray = (double[]) o;
+                        arrayEncoding.writeValue(componentArray);
+                    }
+                    else if(componentType == Character.TYPE)
+                    {
+                        char[] componentArray = (char[]) o;
+                        arrayEncoding.writeValue(componentArray);
+                    }
+                    else
+                    {
+                        throw new IllegalArgumentException("Cannot encode arrays of type " + componentType.getName());
+                    }
+
+                }
+                else
+                {
+                    underlyingEncoder.writeValue(o);
+                }
+            }
+        }
+
+        @Override
+        protected int getEncodedValueSize(final Object[] val)
+        {
+            if(_val != val)
+            {
+                _val = val;
+                _underlyingEncoder = calculateEncoder(val, getEncoder());
+                _size = calculateSize(val, _underlyingEncoder);
+            }
+            return 1 + _size;
+        }
+
+        @Override
+        public byte getEncodingCode()
+        {
+            return EncodingCodes.ARRAY8;
+        }
+
+        public ArrayType getType()
+        {
+            return ArrayType.this;
+        }
+
+        public boolean encodesSuperset(final TypeEncoding<Object[]> encoding)
+        {
+            return getType() == encoding.getType();
+        }
+
+        public Object[] readValue()
+        {
+            DecoderImpl decoder = getDecoder();
+            int size = ((int)decoder.readRawByte()) & 0xFF;
+            int count = ((int)decoder.readRawByte()) & 0xFF;
+            return decodeArray(decoder, count);
+        }
+
+        public Object readValueArray()
+        {
+            DecoderImpl decoder = getDecoder();
+            int size = ((int)decoder.readRawByte()) & 0xFF;
+            int count = ((int)decoder.readRawByte()) & 0xFF;
+            return decodeArrayAsObject(decoder, count);
+        }
+
+    }
+
+    private BooleanType.BooleanEncoding getUnderlyingEncoding(final boolean[] a)
+    {
+        if(a.length == 0)
+        {
+            return _booleanType.getCanonicalEncoding();
+        }
+        else
+        {
+            boolean val = a[0];
+            for(int i = 1; i < a.length; i++)
+            {
+                if(val != a[i])
+                {
+                    return _booleanType.getCanonicalEncoding();
+                }
+            }
+            return _booleanType.getEncoding(val);
+        }
+    }
+
+
+    private ByteType.ByteEncoding getUnderlyingEncoding(final byte[] a)
+    {
+        return _byteType.getCanonicalEncoding();
+    }
+
+
+    private ShortType.ShortEncoding getUnderlyingEncoding(final short[] a)
+    {
+        return _shortType.getCanonicalEncoding();
+    }
+
+    private IntegerType.IntegerEncoding getUnderlyingEncoding(final int[] a)
+    {
+        if(a.length == 0 || !allSmallInts(a))
+        {
+            return _integerType.getCanonicalEncoding();
+        }
+        else
+        {
+            return _integerType.getEncoding(a[0]);
+        }
+    }
+
+    private LongType.LongEncoding getUnderlyingEncoding(final long[] a)
+    {
+        if(a.length == 0 || !allSmallLongs(a))
+        {
+            return _longType.getCanonicalEncoding();
+        }
+        else
+        {
+            return _longType.getEncoding(a[0]);
+        }
+    }
+
+
+    private FloatType.FloatEncoding getUnderlyingEncoding(final float[] a)
+    {
+        return _floatType.getCanonicalEncoding();
+    }
+
+
+    private DoubleType.DoubleEncoding getUnderlyingEncoding(final double[] a)
+    {
+        return _doubleType.getCanonicalEncoding();
+    }
+
+
+    private CharacterType.CharacterEncoding getUnderlyingEncoding(final char[] a)
+    {
+        return _characterType.getCanonicalEncoding();
+    }
+
+    private static Object[] decodeArray(final DecoderImpl decoder, final int count)
+    {
+        TypeConstructor constructor = decoder.readConstructor();
+        return decodeNonPrimitive(constructor, count);
+    }
+
+    private static Object[] decodeNonPrimitive(final TypeConstructor constructor,
+                                               final int count)
+    {
+        if(constructor instanceof ArrayEncoding)
+        {
+            ArrayEncoding arrayEncoding = (ArrayEncoding) constructor;
+
+            Object[] array = new Object[count];
+            for(int i = 0; i < count; i++)
+            {
+                array[i] = arrayEncoding.readValueArray();
+            }
+
+            return array;
+        }
+        else
+        {
+            Object[] array = (Object[]) Array.newInstance(constructor.getTypeClass(), count);
+
+            for(int i = 0; i < count; i++)
+            {
+                array[i] = constructor.readValue();
+            }
+
+            return array;
+        }
+    }
+
+    private static Object decodeArrayAsObject(final DecoderImpl decoder, final int count)
+    {
+        TypeConstructor constructor = decoder.readConstructor();
+        if(constructor.encodesJavaPrimitive())
+        {
+            if(constructor instanceof BooleanType.BooleanEncoding)
+            {
+                return decodeBooleanArray((BooleanType.BooleanEncoding) constructor, count);
+            }
+            else if(constructor instanceof ByteType.ByteEncoding)
+            {
+                return decodeByteArray((ByteType.ByteEncoding)constructor, count);
+            }
+            else if(constructor instanceof ShortType.ShortEncoding)
+            {
+                return decodeShortArray((ShortType.ShortEncoding)constructor, count);
+            }
+            else if(constructor instanceof IntegerType.IntegerEncoding)
+            {
+                return decodeIntArray((IntegerType.IntegerEncoding)constructor, count);
+            }
+            else if(constructor instanceof LongType.LongEncoding)
+            {
+                return decodeLongArray((LongType.LongEncoding) constructor, count);
+            }
+            else if(constructor instanceof FloatType.FloatEncoding)
+            {
+                return decodeFloatArray((FloatType.FloatEncoding) constructor, count);
+            }
+            else if(constructor instanceof DoubleType.DoubleEncoding)
+            {
+                return decodeDoubleArray((DoubleType.DoubleEncoding)constructor, count);
+            }
+            else
+            {
+                throw new ClassCastException("Unexpected class " + constructor.getClass().getName());
+            }
+
+        }
+        else
+        {
+            return decodeNonPrimitive(constructor, count);
+        }
+
+    }
+
+    private static boolean[] decodeBooleanArray(BooleanType.BooleanEncoding constructor, final int count)
+    {
+        boolean[] array = new boolean[count];
+
+        for(int i = 0; i < count; i++)
+        {
+            array[i] = constructor.readPrimitiveValue();
+        }
+
+        return array;
+    }
+
+    private static byte[] decodeByteArray(ByteType.ByteEncoding constructor , final int count)
+    {
+        byte[] array = new byte[count];
+
+        for(int i = 0; i < count; i++)
+        {
+            array[i] = constructor.readPrimitiveValue();
+        }
+
+        return array;
+    }
+
+    private static short[] decodeShortArray(ShortType.ShortEncoding constructor, final int count)
+    {
+        short[] array = new short[count];
+
+        for(int i = 0; i < count; i++)
+        {
+            array[i] = constructor.readPrimitiveValue();
+        }
+
+        return array;
+    }
+
+    private static int[] decodeIntArray(IntegerType.IntegerEncoding constructor, final int count)
+    {
+        int[] array = new int[count];
+
+        for(int i = 0; i < count; i++)
+        {
+            array[i] = constructor.readPrimitiveValue();
+        }
+
+        return array;
+    }
+
+
+    private static long[] decodeLongArray(LongType.LongEncoding constructor, final int count)
+    {
+        long[] array = new long[count];
+
+        for(int i = 0; i < count; i++)
+        {
+            array[i] = constructor.readPrimitiveValue();
+        }
+
+        return array;
+    }
+
+    private static float[] decodeFloatArray(FloatType.FloatEncoding constructor, final int count)
+    {
+        float[] array = new float[count];
+
+        for(int i = 0; i < count; i++)
+        {
+            array[i] = constructor.readPrimitiveValue();
+        }
+
+        return array;
+    }
+
+    private static double[] decodeDoubleArray(DoubleType.DoubleEncoding constructor, final int count)
+    {
+        double[] array = new double[count];
+
+        for(int i = 0; i < count; i++)
+        {
+            array[i] = constructor.readPrimitiveValue();
+        }
+
+        return array;
+    }
+
+
+
+
+}
+

Added: qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BinaryType.java
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BinaryType.java?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BinaryType.java (added)
+++ qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BinaryType.java Sat Mar 10 09:48:50 2012
@@ -0,0 +1,162 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.proton.codec;
+
+import org.apache.qpid.proton.type.Binary;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+public class BinaryType extends AbstractPrimitiveType<Binary>
+{
+    private final BinaryEncoding _binaryEncoding;
+    private final BinaryEncoding _shortBinaryEncoding;
+
+    private static interface BinaryEncoding extends PrimitiveTypeEncoding<Binary>
+    {
+
+    }
+
+    BinaryType(final EncoderImpl encoder, final DecoderImpl decoder)
+    {
+        _binaryEncoding = new LongBinaryEncoding(encoder, decoder);
+        _shortBinaryEncoding = new ShortBinaryEncoding(encoder, decoder);
+        encoder.register(Binary.class, this);
+        decoder.register(this);
+    }
+
+    public Class<Binary> getTypeClass()
+    {
+        return Binary.class;
+    }
+
+    public BinaryEncoding getEncoding(final Binary val)
+    {
+        return val.getLength() <= 255 ? _shortBinaryEncoding : _binaryEncoding;
+    }
+
+
+    public BinaryEncoding getCanonicalEncoding()
+    {
+        return _binaryEncoding;
+    }
+
+    public Collection<BinaryEncoding> getAllEncodings()
+    {
+        return Arrays.asList(_shortBinaryEncoding, _binaryEncoding);
+    }
+
+    private class LongBinaryEncoding
+            extends LargeFloatingSizePrimitiveTypeEncoding<Binary>
+            implements BinaryEncoding
+    {
+
+        public LongBinaryEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+        {
+            super(encoder, decoder);
+        }
+
+        @Override
+        protected void writeEncodedValue(final Binary val)
+        {
+            getEncoder().writeRaw(val.getArray(), val.getArrayOffset(), val.getLength());
+        }
+
+        @Override
+        protected int getEncodedValueSize(final Binary val)
+        {
+            return val.getLength();
+        }
+
+
+        @Override
+        public byte getEncodingCode()
+        {
+            return EncodingCodes.VBIN32;
+        }
+
+        public BinaryType getType()
+        {
+            return BinaryType.this;
+        }
+
+        public boolean encodesSuperset(final TypeEncoding<Binary> encoding)
+        {
+            return (getType() == encoding.getType());
+        }
+
+        public Binary readValue()
+        {
+            int size = getDecoder().readRawInt();
+            byte[] data = new byte[size];
+            getDecoder().readRaw(data, 0, size);
+            return new Binary(data);
+        }
+    }
+
+    private class ShortBinaryEncoding
+            extends SmallFloatingSizePrimitiveTypeEncoding<Binary>
+            implements BinaryEncoding
+    {
+
+        public ShortBinaryEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+        {
+            super(encoder, decoder);
+        }
+
+        @Override
+        protected void writeEncodedValue(final Binary val)
+        {
+            getEncoder().writeRaw(val.getArray(), val.getArrayOffset(), val.getLength());
+        }
+
+        @Override
+        protected int getEncodedValueSize(final Binary val)
+        {
+            return val.getLength();
+        }
+
+
+        @Override
+        public byte getEncodingCode()
+        {
+            return EncodingCodes.VBIN8;
+        }
+
+        public BinaryType getType()
+        {
+            return BinaryType.this;
+        }
+
+        public boolean encodesSuperset(final TypeEncoding<Binary> encoder)
+        {
+            return encoder == this;
+        }
+
+        public Binary readValue()
+        {
+            int size = ((int)getDecoder().readRawByte()) & 0xff;
+            byte[] data = new byte[size];
+            getDecoder().readRaw(data, 0, size);
+            return new Binary(data);
+        }
+    }
+}

Added: qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BooleanType.java
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BooleanType.java?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BooleanType.java (added)
+++ qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/BooleanType.java Sat Mar 10 09:48:50 2012
@@ -0,0 +1,273 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.proton.codec;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+public final class BooleanType extends AbstractPrimitiveType<Boolean>
+{
+
+    private static final byte BYTE_0 = (byte) 0;
+    private static final byte BYTE_1 = (byte) 1;
+
+    private org.apache.qpid.proton.codec.BooleanType.BooleanEncoding _trueEncoder;
+    private org.apache.qpid.proton.codec.BooleanType.BooleanEncoding _falseEncoder;
+    private org.apache.qpid.proton.codec.BooleanType.BooleanEncoding _booleanEncoder;
+
+    public static interface BooleanEncoding extends PrimitiveTypeEncoding<Boolean>
+    {
+        void write(boolean b);
+        void writeValue(boolean b);
+
+        boolean readPrimitiveValue();
+    }
+
+    BooleanType(final EncoderImpl encoder, final DecoderImpl decoder)
+    {
+        _trueEncoder    = new TrueEncoding(encoder, decoder);
+        _falseEncoder   = new FalseEncoding(encoder, decoder);
+        _booleanEncoder = new AllBooleanEncoding(encoder, decoder);
+
+        encoder.register(Boolean.class, this);
+        decoder.register(this);
+    }
+
+    public Class<Boolean> getTypeClass()
+    {
+        return Boolean.class;
+    }
+
+    public BooleanEncoding getEncoding(final Boolean val)
+    {
+        return val ? _trueEncoder : _falseEncoder;
+    }
+
+    public BooleanEncoding getEncoding(final boolean val)
+    {
+        return val ? _trueEncoder : _falseEncoder;
+    }
+
+    public void writeValue(final boolean val)
+    {
+        getEncoding(val).write(val);
+    }
+
+
+
+
+    public BooleanEncoding getCanonicalEncoding()
+    {
+        return _booleanEncoder;
+    }
+
+    public Collection<BooleanEncoding> getAllEncodings()
+    {
+        return Arrays.asList(_trueEncoder, _falseEncoder, _booleanEncoder);
+    }
+
+    private class TrueEncoding extends FixedSizePrimitiveTypeEncoding<Boolean> implements BooleanEncoding
+    {
+
+        public TrueEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+        {
+            super(encoder, decoder);
+        }
+
+        @Override
+        protected int getFixedSize()
+        {
+            return 0;
+        }
+
+        @Override
+        public byte getEncodingCode()
+        {
+            return EncodingCodes.BOOLEAN_TRUE;
+        }
+
+        public BooleanType getType()
+        {
+            return BooleanType.this;
+        }
+
+        public void writeValue(final Boolean val)
+        {
+        }
+
+        public void write(final boolean b)
+        {
+            writeConstructor();
+        }
+
+        public void writeValue(final boolean b)
+        {
+        }
+
+        public boolean encodesSuperset(final TypeEncoding<Boolean> encoding)
+        {
+            return encoding == this;
+        }
+
+        public Boolean readValue()
+        {
+            return Boolean.TRUE;
+        }
+
+        public boolean readPrimitiveValue()
+        {
+            return true;
+        }
+
+        @Override
+        public boolean encodesJavaPrimitive()
+        {
+            return true;
+        }
+    }
+
+
+    private class FalseEncoding extends FixedSizePrimitiveTypeEncoding<Boolean> implements org.apache.qpid.proton.codec.BooleanType.BooleanEncoding
+    {
+
+        public FalseEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+        {
+            super(encoder, decoder);
+        }
+
+        @Override
+        protected int getFixedSize()
+        {
+            return 0;
+        }
+
+        @Override
+        public byte getEncodingCode()
+        {
+            return EncodingCodes.BOOLEAN_FALSE;
+        }
+
+        public BooleanType getType()
+        {
+            return BooleanType.this;
+        }
+
+        public void writeValue(final Boolean val)
+        {
+        }
+
+        public void write(final boolean b)
+        {
+            writeConstructor();
+        }
+
+        public void writeValue(final boolean b)
+        {
+        }
+
+        public boolean readPrimitiveValue()
+        {
+            return false;
+        }
+
+        public boolean encodesSuperset(final TypeEncoding<Boolean> encoding)
+        {
+            return encoding == this;
+        }
+
+        public Boolean readValue()
+        {
+            return Boolean.FALSE;
+        }
+
+
+        @Override
+        public boolean encodesJavaPrimitive()
+        {
+            return true;
+        }
+    }
+
+    private class AllBooleanEncoding extends FixedSizePrimitiveTypeEncoding<Boolean> implements BooleanEncoding
+    {
+
+        public AllBooleanEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+        {
+            super(encoder, decoder);
+        }
+
+        public BooleanType getType()
+        {
+            return BooleanType.this;
+        }
+
+        @Override
+        protected int getFixedSize()
+        {
+            return 1;
+        }
+
+        @Override
+        public byte getEncodingCode()
+        {
+            return EncodingCodes.BOOLEAN;
+        }
+
+        public void writeValue(final Boolean val)
+        {
+            getEncoder().writeRaw(val ? BYTE_1 : BYTE_0);
+        }
+
+        public void write(final boolean val)
+        {
+            writeConstructor();
+            getEncoder().writeRaw(val ? BYTE_1 : BYTE_0);
+        }
+
+        public void writeValue(final boolean b)
+        {
+            getEncoder().writeRaw(b ? BYTE_1 : BYTE_0);
+        }
+
+        public boolean readPrimitiveValue()
+        {
+
+            return getDecoder().readRawByte() != BYTE_0;
+        }
+
+        public boolean encodesSuperset(final TypeEncoding<Boolean> encoding)
+        {
+            return (getType() == encoding.getType());
+        }
+
+        public Boolean readValue()
+        {
+            return readPrimitiveValue() ? Boolean.TRUE : Boolean.FALSE;
+        }
+
+
+        @Override
+        public boolean encodesJavaPrimitive()
+        {
+            return true;
+        }
+    }
+}

Added: qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferDecoder.java
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferDecoder.java?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferDecoder.java (added)
+++ qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferDecoder.java Sat Mar 10 09:48:50 2012
@@ -0,0 +1,28 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.proton.codec;
+
+import java.nio.ByteBuffer;
+
+public interface ByteBufferDecoder extends Decoder
+{
+    public void setByteBuffer(ByteBuffer buffer);
+}

Added: qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferEncoder.java
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferEncoder.java?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferEncoder.java (added)
+++ qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteBufferEncoder.java Sat Mar 10 09:48:50 2012
@@ -0,0 +1,28 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.proton.codec;
+
+import java.nio.ByteBuffer;
+
+public interface ByteBufferEncoder extends Encoder
+{
+    public void setByteBuffer(ByteBuffer buf);
+}

Added: qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteType.java
URL: http://svn.apache.org/viewvc/qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteType.java?rev=1299173&view=auto
==============================================================================
--- qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteType.java (added)
+++ qpid/proton/proton-j/codec/src/org/apache/qpid/proton/codec/ByteType.java Sat Mar 10 09:48:50 2012
@@ -0,0 +1,129 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.proton.codec;
+
+import java.util.Collection;
+import java.util.Collections;
+
+public class ByteType extends AbstractPrimitiveType<Byte>
+{
+    private ByteEncoding _byteEncoding;
+
+    ByteType(final EncoderImpl encoder, final DecoderImpl decoder)
+    {
+        _byteEncoding = new ByteEncoding(encoder, decoder);
+        encoder.register(Byte.class, this);
+        decoder.register(this);
+    }
+
+    public Class<Byte> getTypeClass()
+    {
+        return Byte.class;
+    }
+
+    public ByteEncoding getEncoding(final Byte val)
+    {
+        return _byteEncoding;
+    }
+
+
+    public ByteEncoding getCanonicalEncoding()
+    {
+        return _byteEncoding;
+    }
+
+    public Collection<ByteEncoding> getAllEncodings()
+    {
+        return Collections.singleton(_byteEncoding);
+    }
+
+    public void writeType(byte b)
+    {
+        _byteEncoding.write(b);
+    }
+
+
+    public class ByteEncoding extends FixedSizePrimitiveTypeEncoding<Byte>
+    {
+
+        public ByteEncoding(final EncoderImpl encoder, final DecoderImpl decoder)
+        {
+            super(encoder, decoder);
+        }
+
+        @Override
+        protected int getFixedSize()
+        {
+            return 1;
+        }
+
+        @Override
+        public byte getEncodingCode()
+        {
+            return EncodingCodes.BYTE;
+        }
+
+        public ByteType getType()
+        {
+            return ByteType.this;
+        }
+
+        public void writeValue(final Byte val)
+        {
+            getEncoder().writeRaw(val);
+        }
+
+
+        public void write(final byte val)
+        {
+            writeConstructor();
+            getEncoder().writeRaw(val);
+        }
+
+        public void writeValue(final byte val)
+        {
+            getEncoder().writeRaw(val);
+        }
+
+        public boolean encodesSuperset(final TypeEncoding<Byte> encoding)
+        {
+            return (getType() == encoding.getType());
+        }
+
+        public Byte readValue()
+        {
+            return readPrimitiveValue();
+        }
+
+        public byte readPrimitiveValue()
+        {
+            return getDecoder().readRawByte();
+        }
+
+
+        @Override
+        public boolean encodesJavaPrimitive()
+        {
+            return true;
+        }
+
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org