content: /**
   * 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.command;
  
  import org.apache.activemq.util.IntrospectionSupport;
  
  /**
   * Used to represent a durable subscription.
   *
   * @openwire:marshaller code="55"
   *
   */
  public class SubscriptionInfo implements DataStructure {
  
      public static final byte DATA_STRUCTURE_TYPE = CommandTypes.DURABLE_SUBSCRIPTION_INFO;
  
      protected ActiveMQDestination subscribedDestination;
      protected ActiveMQDestination destination;
      protected String clientId;
      protected String subscriptionName;
      protected String selector;
      protected boolean noLocal;
  
      public SubscriptionInfo() {}
  
      public SubscriptionInfo(String clientId, String subscriptionName) {
          this.clientId = clientId;
          this.subscriptionName = subscriptionName;
      }
  
      @Override
      public byte getDataStructureType() {
          return DATA_STRUCTURE_TYPE;
      }
  
      /**
       * @openwire:property version=1
       */
      public String getClientId() {
          return clientId;
      }
  
      public void setClientId(String clientId) {
          this.clientId = clientId;
      }
  
      /**
       * This is the a resolved destination that the subscription is receiving
       * messages from. This will never be a pattern or a composite destination.
       *
       * @openwire:property version=1 cache=true
       */
      public ActiveMQDestination getDestination() {
          return destination;
      }
  
      public void setDestination(ActiveMQDestination destination) {
          this.destination = destination;
      }
  
      /**
       * @openwire:property version=1
       */
      public String getSelector() {
          return selector;
      }
  
      public void setSelector(String selector) {
          this.selector = selector;
      }
  
      /**
       * @openwire:property version=1
       */
      public String getSubcriptionName() {
          return subscriptionName;
      }
  
      /**
       * @param subscriptionName *
       */
      public void setSubcriptionName(String subscriptionName) {
          this.subscriptionName = subscriptionName;
      }
  
      public String getSubscriptionName() {
          return subscriptionName;
      }
  
      public void setSubscriptionName(String subscriptionName) {
          this.subscriptionName = subscriptionName;
      }
  
      @Override
      public boolean isMarshallAware() {
          return false;
      }
  
      @Override
      public String toString() {
          return IntrospectionSupport.toString(this);
      }
  
      @Override
      public int hashCode() {
          int h1 = clientId != null ? clientId.hashCode() : -1;
          int h2 = subscriptionName != null ? subscriptionName.hashCode() : -1;
          return h1 ^ h2;
      }
  
      @Override
      public boolean equals(Object obj) {
          boolean result = false;
          if (obj instanceof SubscriptionInfo) {
              SubscriptionInfo other = (SubscriptionInfo)obj;
              result = (clientId == null && other.clientId == null || clientId != null
                                                                      && other.clientId != null
                                                                      && clientId.equals(other.clientId))
                       && (subscriptionName == null && other.subscriptionName == null || subscriptionName != null
                                                                                         && other.subscriptionName != null
                                                                                         && subscriptionName
                                                                                             .equals(other.subscriptionName));
          }
          return result;
      }
  
      /**
       * The destination the client originally subscribed to.. This may not match
       * the {@see getDestination} method if the subscribed destination uses
       * patterns or composites.
       *
       * If the subscribed destinationis not set, this just ruturns the
       * desitination.
       *
       * @openwire:property version=3
       */
      public ActiveMQDestination getSubscribedDestination() {
          if (subscribedDestination == null) {
              return getDestination();
          }
          return subscribedDestination;
      }
  
      public void setSubscribedDestination(ActiveMQDestination subscribedDestination) {
          this.subscribedDestination = subscribedDestination;
      }
  
      /**
       * @openwire:property version=11
       */
      public boolean isNoLocal() {
          return noLocal;
      }
  
      public void setNoLocal(boolean noLocal) {
          this.noLocal = noLocal;
      }
  }
  