/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.kernel.messaging;
import com.liferay.portal.kernel.io.Deserializer;
import com.liferay.portal.kernel.io.Serializer;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.MapUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.TransientValue;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
/**
* @author Brian Wing Shun Chan
* @author Michael C. Han
*/
public class Message implements Cloneable, Serializable {
public static Message fromByteArray(byte[] bytes)
throws ClassNotFoundException {
Deserializer deserializer = new Deserializer(ByteBuffer.wrap(bytes));
return deserializer.readObject();
}
@Override
public Message clone() {
Message message = new Message();
message._destinationName = _destinationName;
message._payload = _payload;
message._response = _response;
message._responseDestinationName = _responseDestinationName;
message._responseId = _responseId;
if (_values != null) {
message._values = new HashMap<>(_values);
}
return message;
}
public boolean contains(String key) {
if (_values == null) {
return false;
}
else {
return _values.containsKey(key);
}
}
public void copyFrom(Message message) {
_destinationName = message._destinationName;
_payload = message._payload;
_response = message._response;
_responseDestinationName = message._responseDestinationName;
_responseId = message._responseId;
if (message._values != null) {
_values = new HashMap<>(message._values);
}
}
public void copyTo(Message message) {
message._destinationName = _destinationName;
message._payload = _payload;
message._response = _response;
message._responseDestinationName = _responseDestinationName;
message._responseId = _responseId;
if (_values != null) {
message._values = new HashMap<>(_values);
}
}
public Object get(String key) {
if (_values == null) {
return null;
}
Object value = _values.get(key);
if (value instanceof TransientValue) {
TransientValue<Object> transientValue =
(TransientValue<Object>)value;
value = transientValue.getValue();
}
return value;
}
public boolean getBoolean(String key) {
boolean value = false;
Object object = get(key);
if (object instanceof Boolean) {
value = ((Boolean)object).booleanValue();
}
else {
value = GetterUtil.getBoolean((String)object);
}
return value;
}
public String getDestinationName() {
return _destinationName;
}
public double getDouble(String key) {
double value = 0;
Object object = get(key);
if (object instanceof Number) {
value = ((Number)object).doubleValue();
}
else {
value = GetterUtil.getDouble((String)object);
}
return value;
}
public int getInteger(String key) {
int value = 0;
Object object = get(key);
if (object instanceof Number) {
value = ((Number)object).intValue();
}
else {
value = GetterUtil.getInteger((String)object);
}
return value;
}
public long getLong(String key) {
long value = 0;
Object object = get(key);
if (object instanceof Number) {
value = ((Number)object).longValue();
}
else {
value = GetterUtil.getLong((String)object);
}
return value;
}
public Object getPayload() {
return _payload;
}
public Object getResponse() {
return _response;
}
public String getResponseDestinationName() {
return _responseDestinationName;
}
public String getResponseId() {
return _responseId;
}
public String getString(String key) {
return GetterUtil.getString(String.valueOf(get(key)));
}
public Map<String, Object> getValues() {
return _values;
}
public void put(String key, Object value) {
if (value == null) {
if (_values != null) {
_values.remove(key);
}
return;
}
if (_values == null) {
_values = new HashMap<>();
}
if (!(value instanceof Serializable)) {
value = new TransientValue<>(value);
}
_values.put(key, value);
}
public void remove(String key) {
if (_values != null) {
_values.remove(key);
}
}
public void setDestinationName(String destinationName) {
_destinationName = destinationName;
}
public void setPayload(Object payload) {
_payload = payload;
}
public void setResponse(Object response) {
_response = response;
}
public void setResponseDestinationName(String responseDestinationName) {
_responseDestinationName = responseDestinationName;
}
public void setResponseId(String responseId) {
_responseId = responseId;
}
public void setValues(Map<String, Object> values) {
_values = values;
}
public byte[] toByteArray() {
Serializer serializer = new Serializer();
serializer.writeObject(this);
ByteBuffer byteBuffer = serializer.toByteBuffer();
return byteBuffer.array();
}
@Override
public String toString() {
StringBundler sb = new StringBundler(13);
sb.append("{destinationName=");
sb.append(_destinationName);
sb.append(", response=");
sb.append(_response);
sb.append(", responseDestinationName=");
sb.append(_responseDestinationName);
sb.append(", responseId=");
sb.append(_responseId);
sb.append(", payload=");
sb.append(_payload);
sb.append(", values=");
sb.append(MapUtil.toString(_values, null, ".*[pP]assword.*"));
sb.append("}");
return sb.toString();
}
private String _destinationName;
private Object _payload;
private Object _response;
private String _responseDestinationName;
private String _responseId;
private Map<String, Object> _values;
}