001 /**
002 *
003 * Copyright 2004 Protique Ltd
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 *
017 **/
018 package org.activemq.service;
019
020 import java.io.Serializable;
021
022 /**
023 * Represents a message identity, either by using a unique
024 * message number, which is ordered and must not be zero or
025 * by specifying the String messageID.
026 * <p/>
027 * Typically a client accessing the MessageStore may have
028 * one or the other. Depending on which one is specified the
029 * other value may be filled in by operations on the MessageStore
030 *
031 * @version $Revision: 1.1.1.1 $
032 */
033 public class MessageIdentity implements Comparable, Serializable {
034 private static final long serialVersionUID = -5754338187296859149L;
035
036 private String messageID;
037 private Object sequenceNumber;
038
039 public MessageIdentity() {
040 }
041
042 public MessageIdentity(String messageID) {
043 this.messageID = messageID;
044 }
045
046 public MessageIdentity(String messageID, Object sequenceNumber) {
047 this.messageID = messageID;
048 this.sequenceNumber = sequenceNumber;
049 }
050
051 public int hashCode() {
052 return messageID != null ? messageID.hashCode() ^ 0xcafebabe : -1;
053 }
054
055 public boolean equals(Object that) {
056 return that instanceof MessageIdentity && equals((MessageIdentity) that);
057 }
058
059 public boolean equals(MessageIdentity that) {
060 return messageID.equals(that.messageID);
061 }
062
063 public int compareTo(Object object) {
064 if (this == object) {
065 return 0;
066 }
067 else {
068 if (object instanceof MessageIdentity) {
069 MessageIdentity that = (MessageIdentity) object;
070 return messageID.compareTo(that.messageID);
071 }
072 else {
073 return -1;
074 }
075 }
076 }
077
078 public String toString() {
079 return super.toString() + "[id=" + messageID + "; sequenceNo=" + sequenceNumber + "]";
080 }
081
082 public String getMessageID() {
083 return messageID;
084 }
085
086 public void setMessageID(String messageID) {
087 this.messageID = messageID;
088 }
089
090 /**
091 * @return the sequence number which may be a number or some database specific type
092 */
093 public Object getSequenceNumber() {
094 return sequenceNumber;
095 }
096
097 public void setSequenceNumber(Object sequenceNumber) {
098 this.sequenceNumber = sequenceNumber;
099 }
100
101 }