blob: 81f49b697db7726df660317ffa9469d85819ebd7 [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.
*/
using System;
using Apache.NMS.ActiveMQ.Commands;
namespace Apache.NMS.ActiveMQ
{
public class AdvisorySupport
{
public static readonly String ADVISORY_TOPIC_PREFIX = "ActiveMQ.Advisory.";
public static readonly ActiveMQTopic CONNECTION_ADVISORY_TOPIC = new ActiveMQTopic(ADVISORY_TOPIC_PREFIX + "Connection");
public static readonly ActiveMQTopic QUEUE_ADVISORY_TOPIC = new ActiveMQTopic(ADVISORY_TOPIC_PREFIX + "Queue");
public static readonly ActiveMQTopic TOPIC_ADVISORY_TOPIC = new ActiveMQTopic(ADVISORY_TOPIC_PREFIX + "Topic");
public static readonly ActiveMQTopic TEMP_QUEUE_ADVISORY_TOPIC = new ActiveMQTopic(ADVISORY_TOPIC_PREFIX + "TempQueue");
public static readonly ActiveMQTopic TEMP_TOPIC_ADVISORY_TOPIC = new ActiveMQTopic(ADVISORY_TOPIC_PREFIX + "TempTopic");
public static readonly String PRODUCER_ADVISORY_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "Producer.";
public static readonly String QUEUE_PRODUCER_ADVISORY_TOPIC_PREFIX = PRODUCER_ADVISORY_TOPIC_PREFIX + "Queue.";
public static readonly String TOPIC_PRODUCER_ADVISORY_TOPIC_PREFIX = PRODUCER_ADVISORY_TOPIC_PREFIX + "Topic.";
public static readonly String CONSUMER_ADVISORY_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "Consumer.";
public static readonly String QUEUE_CONSUMER_ADVISORY_TOPIC_PREFIX = CONSUMER_ADVISORY_TOPIC_PREFIX + "Queue.";
public static readonly String TOPIC_CONSUMER_ADVISORY_TOPIC_PREFIX = CONSUMER_ADVISORY_TOPIC_PREFIX + "Topic.";
public static readonly String EXPIRED_TOPIC_MESSAGES_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "Expired.Topic.";
public static readonly String EXPIRED_QUEUE_MESSAGES_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "Expired.Queue.";
public static readonly String NO_TOPIC_CONSUMERS_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "NoConsumer.Topic.";
public static readonly String NO_QUEUE_CONSUMERS_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "NoConsumer.Queue.";
public static readonly String SLOW_CONSUMER_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "SlowConsumer.";
public static readonly String FAST_PRODUCER_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "FastProducer.";
public static readonly String MESSAGE_DISCAREDED_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MessageDiscarded.";
public static readonly String FULL_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "FULL.";
public static readonly String MESSAGE_DELIVERED_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MessageDelivered.";
public static readonly String MESSAGE_CONSUMED_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MessageConsumed.";
public static readonly String MESSAGE_DLQ_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MessageDLQd.";
public static readonly String MASTER_BROKER_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MasterBroker";
public static readonly String NETWORK_BRIDGE_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "NetworkBridge";
public static readonly String AGENT_TOPIC = "ActiveMQ.Agent";
public static readonly String ADIVSORY_MESSAGE_TYPE = "Advisory";
public static readonly String MSG_PROPERTY_ORIGIN_BROKER_ID = "originBrokerId";
public static readonly String MSG_PROPERTY_ORIGIN_BROKER_NAME = "originBrokerName";
public static readonly String MSG_PROPERTY_ORIGIN_BROKER_URL = "originBrokerURL";
public static readonly String MSG_PROPERTY_USAGE_NAME = "usageName";
public static readonly String MSG_PROPERTY_CONSUMER_ID = "consumerId";
public static readonly String MSG_PROPERTY_PRODUCER_ID = "producerId";
public static readonly String MSG_PROPERTY_MESSAGE_ID = "orignalMessageId";
public static readonly String MSG_PROPERTY_CONSUMER_COUNT = "consumerCount";
public static readonly String MSG_PROPERTY_DISCARDED_COUNT = "discardedCount";
public static readonly ActiveMQTopic TEMP_DESTINATION_COMPOSITE_ADVISORY_TOPIC = new ActiveMQTopic(
TEMP_QUEUE_ADVISORY_TOPIC.PhysicalName + "," + TEMP_TOPIC_ADVISORY_TOPIC.PhysicalName);
private AdvisorySupport()
{
}
public static ActiveMQTopic GetConnectionAdvisoryTopic()
{
return CONNECTION_ADVISORY_TOPIC;
}
public static ActiveMQTopic GetConsumerAdvisoryTopic(IDestination destination)
{
return GetConsumerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetConsumerAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsQueue)
{
return new ActiveMQTopic(QUEUE_CONSUMER_ADVISORY_TOPIC_PREFIX + destination.PhysicalName);
}
else
{
return new ActiveMQTopic(TOPIC_CONSUMER_ADVISORY_TOPIC_PREFIX + destination.PhysicalName);
}
}
public static ActiveMQTopic GetProducerAdvisoryTopic(IDestination destination)
{
return GetProducerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetProducerAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsQueue)
{
return new ActiveMQTopic(QUEUE_PRODUCER_ADVISORY_TOPIC_PREFIX + destination.PhysicalName);
}
else
{
return new ActiveMQTopic(TOPIC_PRODUCER_ADVISORY_TOPIC_PREFIX + destination.PhysicalName);
}
}
public static ActiveMQTopic GetExpiredMessageTopic(IDestination destination)
{
return GetExpiredMessageTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetExpiredMessageTopic(ActiveMQDestination destination)
{
if (destination.IsQueue)
{
return GetExpiredQueueMessageAdvisoryTopic(destination);
}
return GetExpiredTopicMessageAdvisoryTopic(destination);
}
public static ActiveMQTopic GetExpiredTopicMessageAdvisoryTopic(ActiveMQDestination destination)
{
String name = EXPIRED_TOPIC_MESSAGES_TOPIC_PREFIX + destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetExpiredQueueMessageAdvisoryTopic(IDestination destination)
{
return GetExpiredQueueMessageAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetExpiredQueueMessageAdvisoryTopic(ActiveMQDestination destination)
{
String name = EXPIRED_QUEUE_MESSAGES_TOPIC_PREFIX + destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetNoTopicConsumersAdvisoryTopic(IDestination destination)
{
return GetNoTopicConsumersAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetNoTopicConsumersAdvisoryTopic(ActiveMQDestination destination)
{
String name = NO_TOPIC_CONSUMERS_TOPIC_PREFIX + destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetNoQueueConsumersAdvisoryTopic(IDestination destination)
{
return GetNoQueueConsumersAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetNoQueueConsumersAdvisoryTopic(ActiveMQDestination destination)
{
String name = NO_QUEUE_CONSUMERS_TOPIC_PREFIX + destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetSlowConsumerAdvisoryTopic(IDestination destination)
{
return GetSlowConsumerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetSlowConsumerAdvisoryTopic(ActiveMQDestination destination)
{
String name = SLOW_CONSUMER_TOPIC_PREFIX + destination.GetDestinationTypeAsString() + "."
+ destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetFastProducerAdvisoryTopic(IDestination destination)
{
return GetFastProducerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetFastProducerAdvisoryTopic(ActiveMQDestination destination)
{
String name = FAST_PRODUCER_TOPIC_PREFIX + destination.GetDestinationTypeAsString() + "."
+ destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetMessageDiscardedAdvisoryTopic(IDestination destination)
{
return GetMessageDiscardedAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetMessageDiscardedAdvisoryTopic(ActiveMQDestination destination)
{
String name = MESSAGE_DISCAREDED_TOPIC_PREFIX + destination.GetDestinationTypeAsString() + "."
+ destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetMessageDeliveredAdvisoryTopic(IDestination destination)
{
return GetMessageDeliveredAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetMessageDeliveredAdvisoryTopic(ActiveMQDestination destination)
{
String name = MESSAGE_DELIVERED_TOPIC_PREFIX + destination.GetDestinationTypeAsString() + "."
+ destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetMessageConsumedAdvisoryTopic(IDestination destination)
{
return GetMessageConsumedAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetMessageConsumedAdvisoryTopic(ActiveMQDestination destination)
{
String name = MESSAGE_CONSUMED_TOPIC_PREFIX + destination.GetDestinationTypeAsString() + "."
+ destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetMessageDLQdAdvisoryTopic(ActiveMQDestination destination)
{
String name = MESSAGE_DLQ_TOPIC_PREFIX + destination.GetDestinationTypeAsString() + "."
+ destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetMasterBrokerAdvisoryTopic(IDestination destination)
{
return GetMasterBrokerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetMasterBrokerAdvisoryTopic()
{
return new ActiveMQTopic(MASTER_BROKER_TOPIC_PREFIX);
}
public static ActiveMQTopic GetNetworkBridgeAdvisoryTopic()
{
return new ActiveMQTopic(NETWORK_BRIDGE_TOPIC_PREFIX);
}
public static ActiveMQTopic GetFullAdvisoryTopic(IDestination destination)
{
return GetFullAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetFullAdvisoryTopic(ActiveMQDestination destination)
{
String name = FULL_TOPIC_PREFIX + destination.GetDestinationTypeAsString() + "."
+ destination.PhysicalName;
return new ActiveMQTopic(name);
}
public static ActiveMQTopic GetDestinationAdvisoryTopic(IDestination destination)
{
return GetDestinationAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static ActiveMQTopic GetDestinationAdvisoryTopic(ActiveMQDestination destination)
{
switch (destination.GetDestinationType())
{
case ActiveMQDestination.ACTIVEMQ_QUEUE:
return QUEUE_ADVISORY_TOPIC;
case ActiveMQDestination.ACTIVEMQ_TOPIC:
return TOPIC_ADVISORY_TOPIC;
case ActiveMQDestination.ACTIVEMQ_TEMPORARY_QUEUE:
return TEMP_QUEUE_ADVISORY_TOPIC;
case ActiveMQDestination.ACTIVEMQ_TEMPORARY_TOPIC:
return TEMP_TOPIC_ADVISORY_TOPIC;
default:
throw new NMSException("Unknown destination type: " + destination.DestinationType);
}
}
public static bool IsDestinationAdvisoryTopic(IDestination destination)
{
return IsDestinationAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsTempDestinationAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
bool containsNonTempDests = false;
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (!IsTempDestinationAdvisoryTopic(compositeDestinations[i]))
{
containsNonTempDests = true;
}
}
return !containsNonTempDests;
}
else
{
return destination.Equals(TEMP_QUEUE_ADVISORY_TOPIC) ||
destination.Equals(TEMP_TOPIC_ADVISORY_TOPIC);
}
}
public static bool IsDestinationAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsDestinationAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.Equals(TEMP_QUEUE_ADVISORY_TOPIC) ||
destination.Equals(TEMP_TOPIC_ADVISORY_TOPIC) ||
destination.Equals(QUEUE_ADVISORY_TOPIC) ||
destination.Equals(TOPIC_ADVISORY_TOPIC);
}
}
public static bool IsAdvisoryTopic(IDestination destination)
{
return IsAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(ADVISORY_TOPIC_PREFIX);
}
}
public static bool IsConnectionAdvisoryTopic(IDestination destination)
{
return IsConnectionAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsConnectionAdvisoryTopic(ActiveMQDestination destination) {
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsConnectionAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.Equals(CONNECTION_ADVISORY_TOPIC);
}
}
public static bool IsProducerAdvisoryTopic(IDestination destination)
{
return IsProducerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsProducerAdvisoryTopic(ActiveMQDestination destination) {
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsProducerAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(PRODUCER_ADVISORY_TOPIC_PREFIX);
}
}
public static bool IsConsumerAdvisoryTopic(IDestination destination)
{
return IsConsumerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsConsumerAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsConsumerAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(CONSUMER_ADVISORY_TOPIC_PREFIX);
}
}
public static bool IsSlowConsumerAdvisoryTopic(IDestination destination)
{
return IsSlowConsumerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsSlowConsumerAdvisoryTopic(ActiveMQDestination destination) {
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsSlowConsumerAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(SLOW_CONSUMER_TOPIC_PREFIX);
}
}
public static bool IsFastProducerAdvisoryTopic(IDestination destination)
{
return IsFastProducerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsFastProducerAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsFastProducerAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(FAST_PRODUCER_TOPIC_PREFIX);
}
}
public static bool IsMessageConsumedAdvisoryTopic(IDestination destination)
{
return IsMessageConsumedAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsMessageConsumedAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsMessageConsumedAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(MESSAGE_CONSUMED_TOPIC_PREFIX);
}
}
public static bool IsMasterBrokerAdvisoryTopic(IDestination destination)
{
return IsMasterBrokerAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsMasterBrokerAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsMasterBrokerAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(MASTER_BROKER_TOPIC_PREFIX);
}
}
public static bool IsMessageDeliveredAdvisoryTopic(IDestination destination)
{
return IsMessageDeliveredAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsMessageDeliveredAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsMessageDeliveredAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(MESSAGE_DELIVERED_TOPIC_PREFIX);
}
}
public static bool IsMessageDiscardedAdvisoryTopic(IDestination destination)
{
return IsMessageDiscardedAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsMessageDiscardedAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsMessageDiscardedAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(MESSAGE_DISCAREDED_TOPIC_PREFIX);
}
}
public static bool IsFullAdvisoryTopic(IDestination destination)
{
return IsFullAdvisoryTopic(ActiveMQDestination.Transform(destination));
}
public static bool IsFullAdvisoryTopic(ActiveMQDestination destination)
{
if (destination.IsComposite)
{
ActiveMQDestination[] compositeDestinations = destination.GetCompositeDestinations();
for (int i = 0; i < compositeDestinations.Length; i++)
{
if (IsFullAdvisoryTopic(compositeDestinations[i]))
{
return true;
}
}
return false;
}
else
{
return destination.IsTopic && destination.PhysicalName.StartsWith(FULL_TOPIC_PREFIX);
}
}
}
}