1 /* 2 * $HeadURL: /cvsroot/insight/Insight/remote-protocol/src/com/mindtree/insight/remoteprotocol/PacketDataSizeOverLimitsException.java,v $ 3 * $Date: 2005/08/09 18:39:17 $ 4 * $Revision: 1.1 $ 5 * $Author: m1001025 $ 6 * 7 * Copyright (c) 2005 MindTree Consulting Ltd. 8 * 9 * This file is part of Insight Remote Protocol Library. 10 * 11 * Insight Remote Protocol Library is free software: you can redistribute it 12 * and/or modify it under the terms of the GNU General Public License as 13 * published by the Free Software Foundation, either version 3 of the License, 14 * or (at your option) any later version. 15 * 16 * Insight Remote Protocol Library is distributed in the hope that it will be 17 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 19 * Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License along with 22 * Insight Remote Protocol Library. If not, see <http://www.gnu.org/licenses/>. 23 */ 24 25 package com.mindtree.techworks.insight.remoteprotocol.spi; 26 27 import java.nio.charset.CharacterCodingException; 28 29 import com.mindtree.techworks.insight.remoteprotocol.PacketDataSizeOverLimitsException; 30 import com.mindtree.techworks.insight.remoteprotocol.RemoteProtocolException; 31 import com.mindtree.techworks.insight.remoteprotocol.util.ByteUtils; 32 33 /** 34 * This the data content of a data packet containig log data. The class provides 35 * methods to retrieve the data as a <code>String</code> and also set the data 36 * as string. It takes care of setting the byte array representing the data. 37 * 38 * @see com.mindtree.techworks.insight.remoteprotocol.spi.PacketDataContent 39 * @author <a href="mailto:bindul_bhowmik@mindtree.com">Bindul Bhowmik</a> 40 * @version $Revision: 1.2 $ $Date: 2005/08/09 18:39:16 $ 41 */ 42 public class LogMessageDataContent extends PacketDataContent { 43 44 // ------------------------------------------------------------------------- 45 // Class variables 46 // ------------------------------------------------------------------------- 47 48 /** 49 * The serial version UID for the serialized form 50 */ 51 private static final long serialVersionUID = 1213532797396843257L; 52 53 // ------------------------------------------------------------------------- 54 // Constructors 55 // ------------------------------------------------------------------------- 56 57 /** 58 * Creates an instance of LogMessageDataContent object. 59 * 60 * @see PacketDataContent#PacketDataContent() 61 */ 62 public LogMessageDataContent() { 63 64 super(); 65 this.messageType = MessageType.LOG_DATA_MESSAGE; 66 67 } 68 69 /** 70 * Creates an instance of LogMessageDataContent object 71 * 72 * @see PacketDataContent#PacketDataContent(byte[], PacketHeader) 73 * @param completePacketData 74 * The data for the complete packet. 75 * @param packetHeader 76 * The header for the packet 77 * @throws RemoteProtocolException 78 * If the message type in the PacketHeader is not 79 * <code>MessageType#LOG_DATA_MESSAGE</code> 80 */ 81 public LogMessageDataContent(byte[] completePacketData, 82 PacketHeader packetHeader) throws RemoteProtocolException { 83 84 super(completePacketData, packetHeader); 85 if (!MessageType.LOG_DATA_MESSAGE.equals(this.messageType)) { 86 throw new RemoteProtocolException("Incompatible message type"); 87 } 88 } 89 90 // ------------------------------------------------------------------------- 91 // Accessors 92 // ------------------------------------------------------------------------- 93 94 /** 95 * Returns the log message as a string. 96 * 97 * @return The log message as a string 98 * @throws RemoteProtocolException 99 * If the log message cannot be decoded. 100 */ 101 public String getLogMessage() throws RemoteProtocolException { 102 103 int dataSize = getLength(); 104 105 try { 106 return ByteUtils.readStringFromByteArray(packetData, 0, 107 dataSize - 2); 108 } catch (CharacterCodingException e) { 109 throw new RemoteProtocolException("Unable to decode log message", e); 110 } 111 } 112 113 /** 114 * Sets the log message in the packet data. 115 * 116 * @param logMessage 117 * The log message to set. 118 * @throws PacketDataSizeOverLimitsException 119 * If the log data exceeds the max limit. 120 * @throws RemoteProtocolException 121 * If the character stream cannot be encoded 122 */ 123 public void setLogMessage(String logMessage) 124 throws PacketDataSizeOverLimitsException, RemoteProtocolException { 125 126 byte[] logData; 127 try { 128 logData = ByteUtils.getByteArrayForString(logMessage); 129 } catch (CharacterCodingException e) { 130 throw new RemoteProtocolException("Unable to encode log message", e); 131 } 132 checkPacketDataSize(logData); 133 this.packetData = logData; 134 } 135 136 }