content: /*
   * CDDL HEADER START
   *
   * The contents of this file are subject to the terms of the Common Development
   * and Distribution License (the "License").
   * You may not use this file except in compliance with the License.
   *
   * You can obtain a copy of the license at
   * src/com/vodafone360/people/VODAFONE.LICENSE.txt or
   * http://github.com/360/360-Engine-for-Android
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   * When distributing Covered Code, include this CDDL HEADER in each file and
   * include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt.
   * If applicable, add the following below this CDDL HEADER, with the fields
   * enclosed by brackets "[]" replaced with your own identifying information:
   * Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   *
   * Copyright 2010 Vodafone Sales & Services Ltd.  All rights reserved.
   * Use is subject to license terms.
   */
  
  package com.vodafone360.people.service.io.rpg;
  
  /**
   * Representation of an RPG message (RPG header + message body if one exists).
   */
  public class RpgMessage {
  
      private RpgHeader mHeader;
  
      private byte[] mBody = null;
  
      private static final int RPG_HEADER_LENGTH = 16;
  
      /**
       * Constructor creating RPG message with suppled RpgHeader.
       * 
       * @param header RPG header for this message.
       */
      RpgMessage(RpgHeader header) {
          mHeader = header;
      }
  
      /**
       * Constructor creating RPG message with suppled RpgHeader and message body.
       * 
       * @param header RPG header for this message.
       * @param body byte array containing message body.
       */
      RpgMessage(RpgHeader header, byte[] body) {
          mHeader = header;
          mBody = body;
      }
  
      /**
       * Return the RPG header for this message.
       * 
       * @return Message's RPG header
       */
      public RpgHeader header() {
          return mHeader;
      }
  
      /**
       * Return message body as byte array
       * 
       * @return byte[] containing message body.
       */
      public byte[] body() {
          return mBody;
      }
  
      /**
       * Create RPG message from supplied data
       * 
       * @param payload Message body - Hessian encoded.
       * @param type RPG message type.
       * @param requestId Request ID.
       * @return byte array containing RPG message.
       */
      public static byte[] createRpgMessage(byte[] payload, int type, int requestId) {
          RpgHeader rpgHdr = new RpgHeader();
  
          rpgHdr.setReqType(type);
          rpgHdr.setReqId(requestId);
          rpgHdr.setPayloadLength(payload.length);
          rpgHdr.setCompression(false);
  
          int rpgMsgLen = RPG_HEADER_LENGTH + payload.length;
          byte[] rpgMsg = new byte[rpgMsgLen];
  
          System.arraycopy(rpgHdr.createHeader(), 0, rpgMsg, 0, RPG_HEADER_LENGTH);
          System.arraycopy(payload, 0, rpgMsg, RPG_HEADER_LENGTH, payload.length);
  
          return rpgMsg;
      }
  }
  