1 /***
2 *
3 * Copyright 2004 Protique Ltd
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 **/
18 package org.codehaus.activemq;
19
20 import org.codehaus.activemq.message.*;
21
22 import javax.jms.*;
23 import java.util.Enumeration;
24
25
26 /***
27 * Transforms foreign Destinations and Messages to ActiveMQ formats
28 *
29 * @version $Revision: 1.12 $
30 */
31 class ActiveMQMessageTransformation {
32 /***
33 * @param destination
34 * @return an ActiveMQDestination
35 * @throws JMSException if an error occurs
36 */
37 static ActiveMQDestination transformDestination(Destination destination) throws JMSException {
38 ActiveMQDestination result = null;
39 if (destination != null) {
40 if (destination instanceof ActiveMQDestination) {
41 result = (ActiveMQDestination) destination;
42 }
43 else {
44 if (destination instanceof TemporaryQueue) {
45 result = new ActiveMQTemporaryQueue(((Queue) destination).getQueueName());
46 }
47 else if (destination instanceof TemporaryTopic) {
48 result = new ActiveMQTemporaryTopic(((Topic) destination).getTopicName());
49 }
50 else if (destination instanceof Queue) {
51 result = new ActiveMQQueue(((Queue) destination).getQueueName());
52 }
53 else if (destination instanceof Topic) {
54 result = new ActiveMQTopic(((Topic) destination).getTopicName());
55 }
56 }
57 }
58 return result;
59 }
60
61 /***
62 * Creates a fast shallow copy of the current ActiveMQMessage or creates a whole new
63 * message instance from an available JMS message from another provider.
64 *
65 * @param message
66 * @return an ActiveMQMessage
67 * @throws JMSException if an error occurs
68 */
69 public static final ActiveMQMessage transformMessage(Message message) throws JMSException {
70 if (message instanceof ActiveMQMessage) {
71 ActiveMQMessage answer = ((ActiveMQMessage) message).shallowCopy();
72
73 answer.setJMSMessageIdentity(null);
74 return answer;
75 }
76 else {
77 ActiveMQMessage activeMessage = null;
78 if (message instanceof ObjectMessage) {
79 ObjectMessage objMsg = (ObjectMessage) message;
80 ActiveMQObjectMessage msg = new ActiveMQObjectMessage();
81 msg.setObject(objMsg.getObject());
82 activeMessage = msg;
83 }
84 else if (message instanceof TextMessage) {
85 TextMessage textMsg = (TextMessage) message;
86 ActiveMQTextMessage msg = new ActiveMQTextMessage();
87 msg.setText(textMsg.getText());
88 activeMessage = msg;
89 }
90 else if (message instanceof MapMessage) {
91 MapMessage mapMsg = (MapMessage) message;
92 ActiveMQMapMessage msg = new ActiveMQMapMessage();
93 for (Enumeration iter = mapMsg.getMapNames(); iter.hasMoreElements();) {
94 String name = iter.nextElement().toString();
95 msg.setObject(name, mapMsg.getObject(name));
96 }
97 activeMessage = msg;
98 }
99 else if (message instanceof BytesMessage) {
100 BytesMessage bytesMsg = (BytesMessage) message;
101 bytesMsg.reset();
102 ActiveMQBytesMessage msg = new ActiveMQBytesMessage();
103 try {
104 for (; ;) {
105 msg.writeByte(bytesMsg.readByte());
106 }
107 }
108 catch (JMSException e) {
109 }
110 activeMessage = msg;
111 }
112 else if (message instanceof StreamMessage) {
113 StreamMessage streamMessage = (StreamMessage) message;
114 streamMessage.reset();
115 ActiveMQStreamMessage msg = new ActiveMQStreamMessage();
116 Object obj = null;
117 try {
118 while ((obj = streamMessage.readObject()) != null) {
119 msg.writeObject(obj);
120 }
121 }
122 catch (JMSException e) {
123 }
124 activeMessage = msg;
125 }
126 else {
127 activeMessage = new ActiveMQMessage();
128 }
129 activeMessage.setJMSMessageID(message.getJMSMessageID());
130 activeMessage.setJMSCorrelationID(message.getJMSCorrelationID());
131 activeMessage.setJMSReplyTo(transformDestination(message.getJMSReplyTo()));
132 activeMessage.setJMSDestination(transformDestination(message.getJMSDestination()));
133 activeMessage.setJMSDeliveryMode(message.getJMSDeliveryMode());
134 activeMessage.setJMSRedelivered(message.getJMSRedelivered());
135 activeMessage.setJMSType(message.getJMSType());
136 activeMessage.setJMSExpiration(message.getJMSExpiration());
137 activeMessage.setJMSPriority(message.getJMSPriority());
138 activeMessage.setJMSTimestamp(message.getJMSTimestamp());
139 for (Enumeration propertyNames = message.getPropertyNames(); propertyNames.hasMoreElements();) {
140 String name = propertyNames.nextElement().toString();
141 Object obj = message.getObjectProperty(name);
142 activeMessage.setObjectProperty(name, obj);
143 }
144 return activeMessage;
145 }
146 }
147 }