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.10 $
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 * @param message
63 * @return an ActiveMQMessage
64 * @throws JMSException if an error occurs
65 */
66 public static final ActiveMQMessage transformMessage(Message message) throws JMSException {
67 if (message instanceof ActiveMQMessage) {
68 return (ActiveMQMessage) message;
69 }
70 else {
71 ActiveMQMessage activeMessage = null;
72 if (message instanceof ObjectMessage) {
73 javax.jms.ObjectMessage objMsg = (javax.jms.ObjectMessage) message;
74 ActiveMQObjectMessage msg = new ActiveMQObjectMessage();
75 msg.setObject(objMsg.getObject());
76 activeMessage = msg;
77 }
78 else if (message instanceof TextMessage) {
79 javax.jms.TextMessage textMsg = (javax.jms.TextMessage) message;
80 ActiveMQTextMessage msg = new ActiveMQTextMessage();
81 msg.setText(textMsg.getText());
82 activeMessage = msg;
83 }
84 else if (message instanceof MapMessage) {
85 javax.jms.MapMessage mapMsg = (javax.jms.MapMessage) message;
86 ActiveMQMapMessage msg = new ActiveMQMapMessage();
87 for (Enumeration iter = mapMsg.getMapNames(); iter.hasMoreElements();) {
88 String name = iter.nextElement().toString();
89 msg.setObject(name, mapMsg.getObject(name));
90 }
91 activeMessage = msg;
92 }
93 else if (message instanceof BytesMessage) {
94 javax.jms.BytesMessage bytesMsg = (javax.jms.BytesMessage) message;
95 bytesMsg.reset();
96 ActiveMQBytesMessage msg = new ActiveMQBytesMessage();
97 try {
98 for (; ;) {
99 msg.writeByte(bytesMsg.readByte());
100 }
101 }
102 catch (JMSException e) {
103 }
104 activeMessage = msg;
105 }
106 else if (message instanceof StreamMessage) {
107 javax.jms.StreamMessage streamMessage = (javax.jms.StreamMessage) message;
108 streamMessage.reset();
109 ActiveMQStreamMessage msg = new ActiveMQStreamMessage();
110 Object obj = null;
111 try {
112 while ((obj = streamMessage.readObject()) != null) {
113 msg.writeObject(obj);
114 }
115 }
116 catch (JMSException e) {
117 }
118 activeMessage = msg;
119 }
120 else {
121 activeMessage = new ActiveMQMessage();
122 }
123 activeMessage.setJMSMessageID(message.getJMSMessageID());
124 activeMessage.setJMSCorrelationID(message.getJMSCorrelationID());
125 activeMessage.setJMSReplyTo(transformDestination(message.getJMSReplyTo()));
126 activeMessage.setJMSDestination(transformDestination(message.getJMSDestination()));
127 activeMessage.setJMSDeliveryMode(message.getJMSDeliveryMode());
128 activeMessage.setJMSRedelivered(message.getJMSRedelivered());
129 activeMessage.setJMSType(message.getJMSType());
130 activeMessage.setJMSExpiration(message.getJMSExpiration());
131 activeMessage.setJMSPriority(message.getJMSPriority());
132 activeMessage.setJMSTimestamp(message.getJMSTimestamp());
133 for (Enumeration propertyNames = message.getPropertyNames(); propertyNames.hasMoreElements();) {
134 String name = propertyNames.nextElement().toString();
135 Object obj = message.getObjectProperty(name);
136 activeMessage.setObjectProperty(name, obj);
137 }
138 return activeMessage;
139 }
140 }
141 }