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
014package org.hornetq.api.core;
015
016import java.nio.ByteBuffer;
017
018import org.hornetq.core.buffers.impl.ChannelBufferWrapper;
019import org.jboss.netty.buffer.ChannelBuffer;
020import 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 */
027public 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}