001 /**
002 * GRANITE DATA SERVICES
003 * Copyright (C) 2006-2013 GRANITE DATA SERVICES S.A.S.
004 *
005 * This file is part of the Granite Data Services Platform.
006 *
007 * Granite Data Services is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * Granite Data Services is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
015 * General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
020 * USA, or see <http://www.gnu.org/licenses/>.
021 */
022 package flex.messaging.messages;
023
024 import java.util.Collection;
025 import java.util.HashMap;
026 import java.util.Map;
027
028 import org.granite.util.StringUtil;
029 import org.granite.util.UUIDUtil;
030
031
032 /**
033 * @author Franck WOLFF
034 */
035 public abstract class AbstractMessage implements Message {
036
037 private static final long serialVersionUID = 1L;
038
039 private Object body = null;
040 private Object clientId = null;
041 private String destination = null;
042 private Map<String, Object> headers = null;
043 private String messageId = null;
044 private long timestamp = 0L;
045 private long timeToLive = 0L;
046
047 public AbstractMessage() {
048 super();
049 }
050
051 public AbstractMessage(Message request) {
052 this(request, false);
053 }
054
055 public AbstractMessage(Message request, boolean keepClientId) {
056 super();
057 this.messageId = UUIDUtil.randomUUID();
058 this.timestamp = System.currentTimeMillis();
059 this.clientId = (keepClientId && request.getClientId() != null ? request.getClientId() : UUIDUtil.randomUUID());
060 }
061
062 public Object getBody() {
063 return body;
064 }
065
066 public void setBody(Object body) {
067 this.body = body;
068 }
069
070 public Object getClientId() {
071 return clientId;
072 }
073
074 public void setClientId(Object clientId) {
075 this.clientId = clientId;
076 }
077
078 public String getDestination() {
079 return destination;
080 }
081
082 public void setDestination(String destination) {
083 this.destination = destination;
084 }
085
086 public Map<String, Object> getHeaders() {
087 return headers;
088 }
089
090 public void setHeaders(Map<String, Object> headers) {
091 this.headers = headers;
092 }
093
094 public Object getHeader(String name) {
095 return (headers != null ? headers.get(name) : null);
096 }
097
098 public boolean headerExists(String name) {
099 return (headers != null ? headers.containsKey(name) : false);
100 }
101
102 public void setHeader(String name, Object value) {
103 if (headers == null)
104 headers = new HashMap<String, Object>();
105 headers.put(name, value);
106 }
107
108 public String getMessageId() {
109 return messageId;
110 }
111
112 public void setMessageId(String messageId) {
113 this.messageId = messageId;
114 }
115
116 public long getTimestamp() {
117 return timestamp;
118 }
119
120 public void setTimestamp(long timestamp) {
121 this.timestamp = timestamp;
122 }
123
124 public long getTimeToLive() {
125 return timeToLive;
126 }
127
128 public void setTimeToLive(long timeToLive) {
129 this.timeToLive = timeToLive;
130 }
131
132 protected void toString(StringBuilder sb, String indent, String bodyAlternative) {
133 sb.append('\n').append(indent).append(" destination = ").append(destination);
134
135 if (headers != null && headers.containsKey(REMOTE_CREDENTIALS_HEADER)) {
136 Map<String, Object> headersCopy = new HashMap<String, Object>(headers);
137 headersCopy.put(REMOTE_CREDENTIALS_HEADER, HIDDEN_CREDENTIALS);
138 sb.append('\n').append(indent).append(" headers = ").append(headersCopy);
139 }
140 else
141 sb.append('\n').append(indent).append(" headers = ").append(headers);
142
143 sb.append('\n').append(indent).append(" messageId = ").append(messageId);
144 sb.append('\n').append(indent).append(" timestamp = ").append(timestamp);
145 sb.append('\n').append(indent).append(" clientId = ").append(clientId);
146 sb.append('\n').append(indent).append(" timeToLive = ").append(timeToLive);
147 sb.append('\n').append(indent).append(" body = ").append(printBody(body, bodyAlternative));
148 }
149
150 private static String printBody(Object body, String bodyAlternative) {
151
152 body = (bodyAlternative != null ? bodyAlternative : body);
153 if (body == null)
154 return null;
155
156 if (body.getClass().isArray() || body instanceof Collection<?> || body instanceof Map<?, ?>)
157 return StringUtil.toString(body, 100); // limit to first 100 elements.
158
159 return body.toString();
160 }
161 }