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.message; 019 020 import java.io.Serializable; 021 022 /** 023 * Describes a Message consumer 024 * 025 * @version $Revision: 1.1.1.1 $ 026 */ 027 public class ConsumerInfo extends AbstractPacket implements Serializable{ 028 static final long serialVersionUID = 3489666609L; 029 private ActiveMQDestination destination; 030 private String clientId; 031 private short sessionId; 032 private String consumerName; 033 private String selector; 034 private long startTime; 035 private boolean started; 036 private int consumerNo; 037 private boolean noLocal; 038 private boolean browser; 039 private int prefetchNumber = 100; 040 private transient String consumerKey; 041 private String consumerId; 042 043 044 045 /** 046 * @return Returns the sessionId. 047 */ 048 public short getSessionId() { 049 return sessionId; 050 } 051 052 /** 053 * @param sessionId The sessionId to set. 054 */ 055 public void setSessionId(short sessionId) { 056 this.sessionId = sessionId; 057 } 058 059 /** 060 * Return the type of Packet 061 * 062 * @return integer representation of the type of Packet 063 */ 064 public int getPacketType() { 065 return CONSUMER_INFO; 066 } 067 068 /** 069 * Test for equality 070 * 071 * @param obj object to test 072 * @return true if equivalent 073 */ 074 public boolean equals(Object obj) { 075 boolean result = false; 076 if (obj != null && obj instanceof ConsumerInfo) { 077 ConsumerInfo that = (ConsumerInfo) obj; 078 result = this.getConsumerId().equals(that.getConsumerId()); 079 } 080 return result; 081 } 082 083 /** 084 * @return hash code for instance 085 */ 086 public int hashCode() { 087 return getConsumerId().hashCode(); 088 } 089 090 /** 091 * @return Returns the clientId. 092 */ 093 public String getClientId() { 094 return this.clientId; 095 } 096 097 /** 098 * @param newClientId The clientId to set. 099 */ 100 public void setClientId(String newClientId) { 101 this.clientId = newClientId; 102 } 103 104 /** 105 * @return Returns the destination. 106 */ 107 public ActiveMQDestination getDestination() { 108 return this.destination; 109 } 110 111 /** 112 * @param newDestination The destination to set. 113 */ 114 public void setDestination(ActiveMQDestination newDestination) { 115 this.destination = newDestination; 116 } 117 118 /** 119 * @return Returns the selector. 120 */ 121 public String getSelector() { 122 return this.selector; 123 } 124 125 /** 126 * @param newSelector The selector to set. 127 */ 128 public void setSelector(String newSelector) { 129 this.selector = newSelector; 130 } 131 132 /** 133 * @return Returns the started. 134 */ 135 public boolean isStarted() { 136 return this.started; 137 } 138 139 /** 140 * @param flag to indicate if started 141 */ 142 public void setStarted(boolean flag) { 143 this.started = flag; 144 } 145 146 /** 147 * @return Returns the startTime. 148 */ 149 public long getStartTime() { 150 return this.startTime; 151 } 152 153 /** 154 * @param newStartTime The startTime to set. 155 */ 156 public void setStartTime(long newStartTime) { 157 this.startTime = newStartTime; 158 } 159 160 /** 161 * @return Returns the consumerNo. 162 */ 163 public int getConsumerNo() { 164 return this.consumerNo; 165 } 166 167 /** 168 * @param newConsumerNo The consumerNo to set. 169 */ 170 public void setConsumerNo(int newConsumerNo) { 171 this.consumerNo = newConsumerNo; 172 } 173 174 /** 175 * @return Returns the consumer name. 176 */ 177 public String getConsumerName() { 178 return this.consumerName; 179 } 180 181 /** 182 * @param newconsumerName The consumerName to set. 183 */ 184 public void setConsumerName(String newconsumerName) { 185 this.consumerName = newconsumerName; 186 } 187 188 /** 189 * @return Returns true if the Consumer is a durable Topic subscriber 190 */ 191 public boolean isDurableTopic() { 192 return this.destination.isTopic() && !this.destination.isTemporary() && this.consumerName != null 193 && this.consumerName.length() > 0; 194 } 195 196 /** 197 * @return Returns the noLocal. 198 */ 199 public boolean isNoLocal() { 200 return noLocal; 201 } 202 203 /** 204 * @param noLocal The noLocal to set. 205 */ 206 public void setNoLocal(boolean noLocal) { 207 this.noLocal = noLocal; 208 } 209 210 /** 211 * @return Returns the browser. 212 */ 213 public boolean isBrowser() { 214 return browser; 215 } 216 217 /** 218 * @param browser The browser to set. 219 */ 220 public void setBrowser(boolean browser) { 221 this.browser = browser; 222 } 223 224 /** 225 * @return Returns the prefetchNumber. 226 */ 227 public int getPrefetchNumber() { 228 return prefetchNumber; 229 } 230 231 /** 232 * @param prefetchNumber The prefetchNumber to set. 233 */ 234 public void setPrefetchNumber(int prefetchNumber) { 235 this.prefetchNumber = prefetchNumber; 236 } 237 238 239 /** 240 * Creates a primary key for the consumer info which uniquely 241 * describes the consumer using a combination of clientID and 242 * consumerName 243 * 244 * @return the consumerKey 245 */ 246 public String getConsumerKey() { 247 if (consumerKey == null){ 248 consumerKey = generateConsumerKey(clientId,consumerName); 249 } 250 return consumerKey; 251 } 252 253 /** 254 * @return Returns the consumerIdentifier. 255 */ 256 public String getConsumerId() { 257 if (consumerId == null){ 258 consumerId = clientId + "." + sessionId + "." + consumerNo; 259 } 260 return consumerId; 261 } 262 /** 263 * @param consumerIdentifier The consumerIdentifier to set. 264 */ 265 public void setConsumerId(String consumerIdentifier) { 266 this.consumerId = consumerIdentifier; 267 } 268 269 270 /** 271 * Generate a primary key for a consumer from the clientId and consumerName 272 * @param clientId 273 * @param consumerName 274 * @return 275 */ 276 public static String generateConsumerKey(String clientId, String consumerName){ 277 return "[" + clientId + ":" + consumerName + "]"; 278 } 279 280 /** 281 * @return true if the consumer is interested in advisory messages 282 */ 283 public boolean isAdvisory(){ 284 return destination != null && destination.isAdvisory(); 285 } 286 287 /** 288 * @return a pretty print 289 */ 290 public String toString() { 291 return super.toString() + " ConsumerInfo{ " + 292 "browser = " + browser + 293 ", destination = " + destination + 294 ", consumerIdentifier = '" + getConsumerId() + "' " + 295 ", clientId = '" + clientId + "' " + 296 ", sessionId = '" + sessionId + "' " + 297 ", consumerName = '" + consumerName + "' " + 298 ", selector = '" + selector + "' " + 299 ", startTime = " + startTime + 300 ", started = " + started + 301 ", consumerNo = " + consumerNo + 302 ", noLocal = " + noLocal + 303 ", prefetchNumber = " + prefetchNumber + 304 ", consumerKey = '" + getConsumerKey() + "' " + 305 " }"; 306 } 307 }