001    /*
002     * Copyright 2009 Red Hat, Inc.
003     * Red Hat licenses this file to you under the Apache License, version
004     * 2.0 (the "License"); you may not use this file except in compliance
005     * with the License.  You may obtain a copy of the License at
006     *    http://www.apache.org/licenses/LICENSE-2.0
007     * Unless required by applicable law or agreed to in writing, software
008     * distributed under the License is distributed on an "AS IS" BASIS,
009     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
010     * implied.  See the License for the specific language governing
011     * permissions and limitations under the License.
012     */
013    
014    package org.hornetq.api.core;
015    
016    import java.nio.ByteBuffer;
017    
018    import org.hornetq.core.buffers.impl.ChannelBufferWrapper;
019    import org.jboss.netty.buffer.ChannelBuffer;
020    import org.jboss.netty.buffer.ChannelBuffers;
021    
022    /**
023     * Factory class to create HornetQBuffers
024     *
025     * @author <a href="mailto:tim.fox@jboss.com">Tim Fox</a>
026     */
027    public class HornetQBuffers
028    {   
029       /**
030        * Creates a <em>self-expanding</em> HornetQBuffer with the given initial size
031        * 
032        * @param size the initial size of the created HornetQBuffer
033        * @return a self-expanding HornetQBuffer starting with the given size
034        */
035       public static HornetQBuffer dynamicBuffer(final int size)
036       {
037          return new ChannelBufferWrapper(ChannelBuffers.dynamicBuffer(size));
038       }
039    
040       /**
041        * Creates a <em>self-expanding</em> HornetQBuffer filled with the given byte array
042        * 
043        * @param bytes the created buffer will be initially filled with this byte array
044        * @return a self-expanding HornetQBuffer filled with the given byte array
045        */
046       public static HornetQBuffer dynamicBuffer(final byte[] bytes)
047       {
048          ChannelBuffer buff = ChannelBuffers.dynamicBuffer(bytes.length);
049    
050          buff.writeBytes(bytes);
051    
052          return new ChannelBufferWrapper(buff);
053       }
054    
055       /**
056        * Creates a HornetQBuffer wrapping an underlying NIO ByteBuffer
057        * 
058        * The position on this buffer won't affect the position on the inner buffer
059        * 
060        * @param underlying the underlying NIO ByteBuffer
061        * @return a HornetQBuffer wrapping the underlying NIO ByteBuffer
062        */
063       public static HornetQBuffer wrappedBuffer(final ByteBuffer underlying)
064       {
065          HornetQBuffer buff = new ChannelBufferWrapper(ChannelBuffers.wrappedBuffer(underlying));
066    
067          buff.clear();
068    
069          return buff;
070       }
071    
072       /**
073        * Creates a HornetQBuffer wrapping an underlying byte array
074        *
075        * @param underlying the underlying byte array
076        * @return a HornetQBuffer wrapping the underlying byte array
077        */
078       public static HornetQBuffer wrappedBuffer(final byte[] underlying)
079       {
080          return new ChannelBufferWrapper(ChannelBuffers.wrappedBuffer(underlying));
081       }
082    
083       /**
084        * Creates a <em>fixed</em> HornetQBuffer of the given size
085        * 
086        * @param size the size of the created HornetQBuffer
087        * @return a fixed HornetQBuffer with the given size
088        */
089       public static HornetQBuffer fixedBuffer(final int size)
090       {
091          return new ChannelBufferWrapper(ChannelBuffers.buffer(size));
092       }
093       
094       private HornetQBuffers()
095       {
096       }
097    }