/*
* Copyright 2003,2004 Colin Crist
*
* Licensed 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 hermes.providers.messages;
import hermes.HermesException;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import org.apache.commons.collections.iterators.IteratorEnumeration;
/**
* @author colincrist@hermesjms.com
* @version $Id: MessageImpl.java,v 1.6 2005/06/28 15:36:01 colincrist Exp $
*/
public class MessageImpl implements Message
{
private String correlationId;
private int deliveryMode;
private Destination destination;
private long expiration;
private int priority;
private boolean redilivered;
private Destination replyTo;
private long timestamp = new Date().getTime() ;
private String type;
private String messageId = UUID.randomUUID().toString() ;
private MessageSessionReference session;
private Map header = new HashMap();
/**
*
*/
public MessageImpl()
{
super();
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#acknowledge()
*/
public void acknowledge() throws JMSException
{
session.acknowledge(this);
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#clearBody()
*/
public void clearBody() throws JMSException
{
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#clearProperties()
*/
public void clearProperties() throws JMSException
{
header.clear();
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getBooleanProperty(java.lang.String)
*/
public boolean getBooleanProperty(String arg0) throws JMSException
{
if (header.containsKey(arg0) && header.get(arg0) instanceof Boolean)
{
return ((Boolean) header.get(arg0)).booleanValue();
}
else
{
throw new HermesException("No such property " + arg0);
}
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getByteProperty(java.lang.String)
*/
public byte getByteProperty(String arg0) throws JMSException
{
if (header.containsKey(arg0) && header.get(arg0) instanceof Byte)
{
return ((Byte) header.get(arg0)).byteValue();
}
else
{
throw new HermesException("No such property " + arg0);
}
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getDoubleProperty(java.lang.String)
*/
public double getDoubleProperty(String arg0) throws JMSException
{
if (header.containsKey(arg0) && header.get(arg0) instanceof Double)
{
return ((Double) header.get(arg0)).doubleValue();
}
else
{
throw new HermesException("No such property " + arg0);
}
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getFloatProperty(java.lang.String)
*/
public float getFloatProperty(String arg0) throws JMSException
{
if (header.containsKey(arg0) && header.get(arg0) instanceof String)
{
return ((Float) header.get(arg0)).floatValue();
}
else
{
throw new HermesException("No such property " + arg0);
}
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getIntProperty(java.lang.String)
*/
public int getIntProperty(String arg0) throws JMSException
{
if (header.containsKey(arg0) && header.get(arg0) instanceof Integer)
{
return ((Integer) header.get(arg0)).intValue();
}
else
{
throw new HermesException("No such property " + arg0);
}
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSCorrelationID()
*/
public String getJMSCorrelationID() throws JMSException
{
return correlationId;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSCorrelationIDAsBytes()
*/
public byte[] getJMSCorrelationIDAsBytes() throws JMSException
{
return correlationId.getBytes();
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSDeliveryMode()
*/
public int getJMSDeliveryMode() throws JMSException
{
return deliveryMode;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSDestination()
*/
public Destination getJMSDestination() throws JMSException
{
return destination;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSExpiration()
*/
public long getJMSExpiration() throws JMSException
{
return expiration;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSMessageID()
*/
public String getJMSMessageID() throws JMSException
{
return messageId;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSPriority()
*/
public int getJMSPriority() throws JMSException
{
return priority;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSRedelivered()
*/
public boolean getJMSRedelivered() throws JMSException
{
return redilivered;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSReplyTo()
*/
public Destination getJMSReplyTo() throws JMSException
{
return replyTo;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSTimestamp()
*/
public long getJMSTimestamp() throws JMSException
{
return timestamp;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getJMSType()
*/
public String getJMSType() throws JMSException
{
return type;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getLongProperty(java.lang.String)
*/
public long getLongProperty(String arg0) throws JMSException
{
if (header.containsKey(arg0) && header.get(arg0) instanceof Long)
{
return ((Long) header.get(arg0)).longValue();
}
else
{
throw new HermesException("No such property " + arg0);
}
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getObjectProperty(java.lang.String)
*/
public Object getObjectProperty(String arg0) throws JMSException
{
if (header.containsKey(arg0))
{
return header.get(arg0);
}
else
{
throw new HermesException("No such property " + arg0);
}
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getPropertyNames()
*/
public Enumeration getPropertyNames() throws JMSException
{
return new IteratorEnumeration(header.keySet().iterator());
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getShortProperty(java.lang.String)
*/
public short getShortProperty(String arg0) throws JMSException
{
if (header.containsKey(arg0) && header.get(arg0) instanceof Short)
{
return ((Short) header.get(arg0)).shortValue();
}
else
{
throw new HermesException("No such property " + arg0);
}
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#getStringProperty(java.lang.String)
*/
public String getStringProperty(String arg0) throws JMSException
{
if (header.containsKey(arg0) && header.get(arg0) instanceof String)
{
return (String) header.get(arg0);
}
else
{
throw new HermesException("No such property " + arg0);
}
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#propertyExists(java.lang.String)
*/
public boolean propertyExists(String arg0) throws JMSException
{
return header.containsKey(arg0);
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setBooleanProperty(java.lang.String, boolean)
*/
public void setBooleanProperty(String arg0, boolean arg1) throws JMSException
{
header.put(arg0, new Boolean(arg1));
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setByteProperty(java.lang.String, byte)
*/
public void setByteProperty(String arg0, byte arg1) throws JMSException
{
header.put(arg0, new Byte(arg1));
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setDoubleProperty(java.lang.String, double)
*/
public void setDoubleProperty(String arg0, double arg1) throws JMSException
{
header.put(arg0, new Double(arg1));
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setFloatProperty(java.lang.String, float)
*/
public void setFloatProperty(String arg0, float arg1) throws JMSException
{
header.put(arg0, new Float(arg1));
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setIntProperty(java.lang.String, int)
*/
public void setIntProperty(String arg0, int arg1) throws JMSException
{
header.put(arg0, new Integer(arg1));
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSCorrelationID(java.lang.String)
*/
public void setJMSCorrelationID(String arg0) throws JMSException
{
correlationId = arg0;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSCorrelationIDAsBytes(byte[])
*/
public void setJMSCorrelationIDAsBytes(byte[] arg0) throws JMSException
{
// @@ TODO
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSDeliveryMode(int)
*/
public void setJMSDeliveryMode(int arg0) throws JMSException
{
this.deliveryMode = arg0;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSDestination(javax.jms.Destination)
*/
public void setJMSDestination(Destination arg0) throws JMSException
{
if (arg0 == null)
{
throw new HermesException("destination is null") ;
}
this.destination = arg0;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSExpiration(long)
*/
public void setJMSExpiration(long arg0) throws JMSException
{
this.expiration = arg0;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSMessageID(java.lang.String)
*/
public void setJMSMessageID(String messageId) throws JMSException
{
this.messageId = messageId;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSPriority(int)
*/
public void setJMSPriority(int arg0) throws JMSException
{
this.priority = arg0;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSRedelivered(boolean)
*/
public void setJMSRedelivered(boolean arg0) throws JMSException
{
this.redilivered = arg0;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSReplyTo(javax.jms.Destination)
*/
public void setJMSReplyTo(Destination arg0) throws JMSException
{
this.replyTo = arg0;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSTimestamp(long)
*/
public void setJMSTimestamp(long arg0) throws JMSException
{
this.timestamp = arg0;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setJMSType(java.lang.String)
*/
public void setJMSType(String arg0) throws JMSException
{
this.type = arg0;
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setLongProperty(java.lang.String, long)
*/
public void setLongProperty(String arg0, long arg1) throws JMSException
{
header.put(arg0, new Long(arg1));
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setObjectProperty(java.lang.String,
* java.lang.Object)
*/
public void setObjectProperty(String arg0, Object arg1) throws JMSException
{
header.put(arg0, arg1);
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setShortProperty(java.lang.String, short)
*/
public void setShortProperty(String arg0, short arg1) throws JMSException
{
header.put(arg0, new Short(arg1));
}
/*
* (non-Javadoc)
*
* @see javax.jms.Message#setStringProperty(java.lang.String,
* java.lang.String)
*/
public void setStringProperty(String arg0, String arg1) throws JMSException
{
header.put(arg0, arg1);
}
/**
* @return Returns the session.
*/
public MessageSessionReference getSession()
{
return session;
}
/**
* @param session
* The session to set.
*/
public void setSession(MessageSessionReference session)
{
this.session = session;
}
}