/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.artemis.jms.tests.message;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* Foreign message implementation. Used for testing only.
*/
public class SimpleJMSMessage implements Message {
private boolean ignoreSetDestination;
// Constructors --------------------------------------------------
public SimpleJMSMessage() {
properties.put("JMSXDeliveryCount", new Integer(0));
}
/*
* This constructor is used to simulate an activemq message in which the set of the destination is ignored after receipt.
*/
public SimpleJMSMessage(final Destination dest) {
this();
ignoreSetDestination = true;
destination = dest;
}
// Message implementation ----------------------------------------
private String messageID;
@Override
public String getJMSMessageID() throws JMSException {
return messageID;
}
@Override
public void setJMSMessageID(final String id) throws JMSException {
messageID = id;
}
private long timestamp;
@Override
public long getJMSTimestamp() throws JMSException {
return timestamp;
}
@Override
public void setJMSTimestamp(final long timestamp) throws JMSException {
this.timestamp = timestamp;
}
//
// TODO Is this really the spec?
//
private byte[] correlationIDBytes;
private String correlationIDString;
private boolean isCorrelationIDBytes;
@Override
public byte[] getJMSCorrelationIDAsBytes() throws JMSException {
if (!isCorrelationIDBytes) {
throw new JMSException("CorrelationID is a String for this message");
}
return correlationIDBytes;
}
@Override
public void setJMSCorrelationIDAsBytes(final byte[] correlationID) throws JMSException {
if (correlationID == null || correlationID.length == 0) {
throw new JMSException("Please specify a non-zero length byte[]");
}
correlationIDBytes = correlationID;
isCorrelationIDBytes = true;
}
@Override
public void setJMSCorrelationID(final String correlationID) throws JMSException {
correlationIDString = correlationID;
isCorrelationIDBytes = false;
}
@Override
public String getJMSCorrelationID() throws JMSException {
return correlationIDString;
}
private Destination replyTo;
@Override
public Destination getJMSReplyTo() throws JMSException {
return replyTo;
}
@Override
public void setJMSReplyTo(final Destination replyTo) throws JMSException {
this.replyTo = replyTo;
}
private Destination destination;
@Override
public Destination getJMSDestination() throws JMSException {
return destination;
}
@Override
public void setJMSDestination(final Destination destination) throws JMSException {
if (!ignoreSetDestination) {
this.destination = destination;
}
}
private int deliveryMode = DeliveryMode.PERSISTENT;
@Override
public int getJMSDeliveryMode() throws JMSException {
return deliveryMode;
}
@Override
public void setJMSDeliveryMode(final int deliveryMode) throws JMSException {
this.deliveryMode = deliveryMode;
}
private boolean redelivered;
@Override
public boolean getJMSRedelivered() throws JMSException {
return redelivered;
}
@Override
public void setJMSRedelivered(final boolean redelivered) throws JMSException {
this.redelivered = redelivered;
}
private String type;
@Override
public String getJMSType() throws JMSException {
return type;
}
@Override
public void setJMSType(final String type) throws JMSException {
this.type = type;
}
private long expiration;
@Override
public long getJMSExpiration() throws JMSException {
return expiration;
}
@Override
public void setJMSExpiration(final long expiration) throws JMSException {
this.expiration = expiration;
}
private int priority;
@Override
public int getJMSPriority() throws JMSException {
return priority;
}
@Override
public void setJMSPriority(final int priority) throws JMSException {
this.priority = priority;
}
private final Map<String, Object> properties = new HashMap<>();
@Override
public void clearProperties() throws JMSException {
properties.clear();
}
@Override
public boolean propertyExists(final String name) throws JMSException {
return properties.containsKey(name);
}
@Override
public boolean getBooleanProperty(final String name) throws JMSException {
Object prop = properties.get(name);
if (!(prop instanceof Boolean)) {
throw new JMSException("Not boolean");
}
return ((Boolean) properties.get(name)).booleanValue();
}
@Override
public byte getByteProperty(final String name) throws JMSException {
Object prop = properties.get(name);
if (!(prop instanceof Byte)) {
throw new JMSException("Not byte");
}
return ((Byte) properties.get(name)).byteValue();
}
@Override
public short getShortProperty(final String name) throws JMSException {
Object prop = properties.get(name);
if (!(prop instanceof Short)) {
throw new JMSException("Not short");
}
return ((Short) properties.get(name)).shortValue();
}
@Override
public int getIntProperty(final String name) throws JMSException {
Object prop = properties.get(name);
if (!(prop instanceof Integer)) {
throw new JMSException("Not int");
}
return ((Integer) properties.get(name)).intValue();
}
@Override
public long getLongProperty(final String name) throws JMSException {
Object prop = properties.get(name);
if (!(prop instanceof Long)) {
throw new JMSException("Not long");
}
return ((Long) properties.get(name)).longValue();
}
@Override
public float getFloatProperty(final String name) throws JMSException {
Object prop = properties.get(name);
if (!(prop instanceof Float)) {
throw new JMSException("Not float");
}
return ((Float) properties.get(name)).floatValue();
}
@Override
public double getDoubleProperty(final String name) throws JMSException {
Object prop = properties.get(name);
if (!(prop instanceof Double)) {
throw new JMSException("Not double");
}
return ((Double) properties.get(name)).doubleValue();
}
@Override
public String getStringProperty(final String name) throws JMSException {
Object prop = properties.get(name);
if (!(prop instanceof String)) {
throw new JMSException("Not string");
}
return (String) properties.get(name);
}
@Override
public Object getObjectProperty(final String name) throws JMSException {
return properties.get(name);
}
@Override
public Enumeration getPropertyNames() throws JMSException {
return Collections.enumeration(properties.keySet());
}
@Override
public void setBooleanProperty(final String name, final boolean value) throws JMSException {
properties.put(name, new Boolean(value));
}
@Override
public void setByteProperty(final String name, final byte value) throws JMSException {
properties.put(name, new Byte(value));
}
@Override
public void setShortProperty(final String name, final short value) throws JMSException {
properties.put(name, new Short(value));
}
@Override
public void setIntProperty(final String name, final int value) throws JMSException {
properties.put(name, new Integer(value));
}
@Override
public void setLongProperty(final String name, final long value) throws JMSException {
properties.put(name, new Long(value));
}
@Override
public void setFloatProperty(final String name, final float value) throws JMSException {
properties.put(name, new Float(value));
}
@Override
public void setDoubleProperty(final String name, final double value) throws JMSException {
properties.put(name, new Double(value));
}
@Override
public void setStringProperty(final String name, final String value) throws JMSException {
properties.put(name, value);
}
@Override
public void setObjectProperty(final String name, final Object value) throws JMSException {
properties.put(name, value);
}
@Override
public void acknowledge() throws JMSException {
}
@Override
public void clearBody() throws JMSException {
}
@Override
public long getJMSDeliveryTime() throws JMSException {
throw new UnsupportedOperationException("JMS 2.0 / not implemented");
}
@Override
public void setJMSDeliveryTime(long deliveryTime) throws JMSException {
throw new UnsupportedOperationException("JMS 2.0 / not implemented");
}
@Override
public <T> T getBody(Class<T> c) throws JMSException {
throw new UnsupportedOperationException("JMS 2.0 / not implemented");
}
@Override
public boolean isBodyAssignableTo(Class c) throws JMSException {
throw new UnsupportedOperationException("JMS 2.0 / not implemented");
}
// Public --------------------------------------------------------
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
// Private -------------------------------------------------------
// Inner classes -------------------------------------------------
}