blob: e8f793f1dbaf59b3c65f13cf577bea86e9c0f520 [file] [log] [blame]
/*
* 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.qpid.jms.meta;
import org.apache.qpid.jms.JmsDestination;
import org.apache.qpid.jms.policy.JmsDefaultDeserializationPolicy;
import org.apache.qpid.jms.policy.JmsDefaultRedeliveryPolicy;
import org.apache.qpid.jms.policy.JmsDeserializationPolicy;
import org.apache.qpid.jms.policy.JmsRedeliveryPolicy;
public final class JmsConsumerInfo implements JmsResource, Comparable<JmsConsumerInfo> {
private final JmsConsumerId consumerId;
private JmsDestination destination;
private int prefetchSize;
private boolean browser;
private String selector;
private boolean explicitClientID;
private String subscriptionName;
private boolean durable;
private boolean shared;
private boolean noLocal;
private int acknowledgementMode;
private boolean localMessageExpiry;
private boolean presettle;
private volatile boolean listener;
private JmsRedeliveryPolicy redeliveryPolicy;
private JmsDeserializationPolicy deserializationPolicy;
// Can be used to track the last consumed message.
private transient long lastDeliveredSequenceId;
public JmsConsumerInfo(JmsConsumerId consumerId) {
if (consumerId == null) {
throw new IllegalArgumentException("Consumer ID cannot be null");
}
this.consumerId = consumerId;
}
public JmsConsumerInfo(JmsSessionInfo sessionInfo, long consumerId) {
if (sessionInfo == null) {
throw new IllegalArgumentException("Session info object cannot be null");
}
this.consumerId = new JmsConsumerId(sessionInfo.getId(), consumerId);
}
public JmsConsumerInfo copy() {
JmsConsumerInfo info = new JmsConsumerInfo(consumerId);
copy(info);
return info;
}
private void copy(JmsConsumerInfo info) {
info.destination = destination;
info.prefetchSize = prefetchSize;
info.browser = browser;
info.selector = selector;
info.explicitClientID = explicitClientID;
info.durable = durable;
info.subscriptionName = subscriptionName;
info.noLocal = noLocal;
info.shared = shared;
info.acknowledgementMode = acknowledgementMode;
info.lastDeliveredSequenceId = lastDeliveredSequenceId;
info.redeliveryPolicy = getRedeliveryPolicy().copy();
info.deserializationPolicy = getDeserializationPolicy().copy();
info.listener = listener;
}
@Override
public JmsConsumerId getId() {
return consumerId;
}
public boolean isBrowser() {
return browser;
}
public void setBrowser(boolean browser) {
this.browser = browser;
}
public boolean isListener() {
return listener;
}
public void setListener(boolean listener) {
this.listener = listener;
}
public JmsDestination getDestination() {
return destination;
}
public void setDestination(JmsDestination destination) {
this.destination = destination;
}
public int getPrefetchSize() {
return prefetchSize;
}
public void setPrefetchSize(int prefetchSize) {
this.prefetchSize = prefetchSize;
}
public String getSelector() {
return selector;
}
public void setSelector(String selector) {
this.selector = selector;
}
public boolean isExplicitClientID() {
return explicitClientID;
}
public void setExplicitClientID(boolean explicitClientID) {
this.explicitClientID = explicitClientID;
}
public boolean isDurable() {
return durable;
}
public void setDurable(boolean durable) {
this.durable = durable;
}
public String getSubscriptionName() {
return subscriptionName;
}
public void setSubscriptionName(String durableSubscriptionId) {
this.subscriptionName = durableSubscriptionId;
}
public boolean isShared() {
return shared;
}
public void setShared(boolean shared) {
this.shared = shared;
}
public boolean isNoLocal() {
return noLocal;
}
public void setNoLocal(boolean noLocal) {
this.noLocal = noLocal;
}
public void setLastDeliveredSequenceId(long lastDeliveredSequenceId) {
this.lastDeliveredSequenceId = lastDeliveredSequenceId;
}
public long getLastDeliveredSequenceId() {
return lastDeliveredSequenceId;
}
public JmsSessionId getParentId() {
return this.consumerId.getParentId();
}
public int getAcknowledgementMode() {
return acknowledgementMode;
}
public void setAcknowledgementMode(int acknowledgementMode) {
this.acknowledgementMode = acknowledgementMode;
}
public boolean isLocalMessageExpiry() {
return localMessageExpiry;
}
public void setLocalMessageExpiry(boolean localMessageExpiry) {
this.localMessageExpiry = localMessageExpiry;
}
public JmsRedeliveryPolicy getRedeliveryPolicy() {
if (redeliveryPolicy == null) {
redeliveryPolicy = new JmsDefaultRedeliveryPolicy();
}
return redeliveryPolicy;
}
public void setRedeliveryPolicy(JmsRedeliveryPolicy redeliveryPolicy) {
this.redeliveryPolicy = redeliveryPolicy;
}
public JmsDeserializationPolicy getDeserializationPolicy() {
if (deserializationPolicy == null) {
deserializationPolicy = new JmsDefaultDeserializationPolicy();
}
return deserializationPolicy;
}
public void setDeserializationPolicy(JmsDeserializationPolicy deserializationPolicy) {
this.deserializationPolicy = deserializationPolicy;
}
public boolean isPresettle() {
return presettle;
}
public void setPresettle(boolean presettle) {
this.presettle = presettle;
}
@Override
public String toString() {
return "JmsConsumerInfo: { " + getId() + ", destination = " + getDestination() + " }";
}
@Override
public int hashCode() {
return consumerId.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
JmsConsumerInfo other = (JmsConsumerInfo) obj;
return consumerId.equals(other.consumerId);
}
@Override
public int compareTo(JmsConsumerInfo other) {
return consumerId.compareTo(other.consumerId);
}
@Override
public void visit(JmsResourceVistor vistor) throws Exception {
vistor.processConsumerInfo(this);
}
}