/// <summary>
        /// Adds a node to the treeview for the newly created entity.
        /// </summary>
        /// <param name="args">The ServiceBusHelperEventArgs object containing the reference to the newly created entity.</param>
        // ReSharper disable once FunctionComplexityOverflow
        void serviceBusHelper_OnCreate(ServiceBusHelperEventArgs args)
        {
            try
            {
                serviceBusTreeView.SuspendDrawing();
                serviceBusTreeView.SuspendLayout();
                // QueueDescription Entity
                if (args.EntityType == EntityType.Queue)
                {
                    var queue = args.EntityInstance as QueueDescription;
                    if (queue != null)
                    {
                        var queueListNode = FindNode(QueueEntities, rootNode);
                        var node = CreateNode(queue.Path, queue, queueListNode, false);
                        if (node == null)
                        {
                            return;
                        }
                        serviceBusTreeView.Sort();
                        panelMain.HeaderText = string.Format(ViewQueueFormat, queue.Path);
                        if (!importing)
                        {
                            serviceBusTreeView.SelectedNode = node;
                            node.EnsureVisible();
                            HandleNodeMouseClick(serviceBusTreeView.SelectedNode);
                        }
                        else
                        {
                            queueListNode.Expand();
                        }
                    }
                    return;
                }
                // TopicDescription Entity
                if (args.EntityType == EntityType.Topic)
                {
                    var topic = args.EntityInstance as TopicDescription;
                    if (topic != null)
                    {
                        var topicListNode = FindNode(TopicEntities, rootNode);
                        var node = CreateNode(topic.Path, topic, topicListNode, false);
                        if (node == null)
                        {
                            return;
                        }
                        serviceBusTreeView.Sort();
                        panelMain.HeaderText = string.Format(ViewTopicFormat, topic.Path);
                        if (!importing)
                        {
                            serviceBusTreeView.SelectedNode = node;
                            node.EnsureVisible();
                            HandleNodeMouseClick(serviceBusTreeView.SelectedNode);
                        }
                        else
                        {
                            topicListNode.Expand();
                        }
                    }
                    return;
                }
                // RelayDescription Entity
                if (args.EntityType == EntityType.Relay)
                {
                    var relay = args.EntityInstance as RelayDescription;
                    if (relay != null)
                    {
                        var relayListNode = FindNode(RelayEntities, rootNode);
                        var node = CreateNode(relay.Path, relay, relayListNode, false);
                        if (node == null)
                        {
                            return;
                        }
                        serviceBusTreeView.Sort();
                        panelMain.HeaderText = string.Format(ViewRelayFormat, relay.Path);
                        if (!importing)
                        {
                            serviceBusTreeView.SelectedNode = node;
                            node.EnsureVisible();
                            HandleNodeMouseClick(serviceBusTreeView.SelectedNode);
                        }
                        else
                        {
                            relayListNode.Expand();
                        }
                    }
                    return;
                }
                // EventHubDescription Entity
                if (args.EntityType == EntityType.EventHub)
                {
                    var eventHub = args.EntityInstance as EventHubDescription;
                    if (eventHub != null)
                    {
                        var eventHubListNode = FindNode(EventHubEntities, rootNode);
                        var node = CreateNode(eventHub.Path, eventHub, eventHubListNode, false);
                        if (node == null)
                        {
                            return;
                        }
                        serviceBusTreeView.Sort();
                        panelMain.HeaderText = string.Format(ViewEventHubFormat, eventHub.Path);
                        if (!importing)
                        {
                            serviceBusTreeView.SelectedNode = node;
                            node.EnsureVisible();
                            HandleNodeMouseClick(serviceBusTreeView.SelectedNode);
                        }
                        else
                        {
                            eventHubListNode.Expand();
                        }
                    }
                    return;
                }
                // NotificationHubDescription Entity
                if (args.EntityType == EntityType.NotificationHub)
                {
                    var notificationHub = args.EntityInstance as NotificationHubDescription;
                    if (notificationHub != null)
                    {
                        var notificationHubListNode = FindNode(NotificationHubEntities, rootNode);
                        var node = CreateNode(notificationHub.Path, notificationHub, notificationHubListNode, false);
                        if (node == null)
                        {
                            return;
                        }
                        serviceBusTreeView.Sort();
                        panelMain.HeaderText = string.Format(ViewNotificationHubFormat, notificationHub.Path);
                        if (!importing)
                        {
                            serviceBusTreeView.SelectedNode = node;
                            node.EnsureVisible();
                            HandleNodeMouseClick(serviceBusTreeView.SelectedNode);
                        }
                        else
                        {
                            notificationHubListNode.Expand();
                        }
                    }
                    return;
                }
                // SubscriptionDescription Entity
                if (args.EntityType == EntityType.Subscription)
                {
                    var wrapper = args.EntityInstance as SubscriptionWrapper;
                    if (wrapper == null ||
                        wrapper.TopicDescription == null ||
                        wrapper.SubscriptionDescription == null)
                    {
                        return;
                    }
                    var topicListNode = FindNode(TopicEntities, rootNode);
                    var topicNode = FindNode(wrapper.TopicDescription.Path, topicListNode);
                    if (topicNode != null)
                    {
                        TreeNode subscriptionsNode;

                        if (topicNode.Nodes.ContainsKey(SubscriptionEntities))
                        {
                            subscriptionsNode = topicNode.Nodes[SubscriptionEntities];
                        }
                        else
                        {
                            subscriptionsNode = topicNode.Nodes.Add(SubscriptionEntities,
                                                                    SubscriptionEntities,
                                                                    wrapper.SubscriptionDescription.Status == EntityStatus.Active ? SubscriptionListIconIndex : GreySubscriptionIconIndex,
                                                                    wrapper.SubscriptionDescription.Status == EntityStatus.Active ? SubscriptionListIconIndex : GreySubscriptionIconIndex);
                            subscriptionsNode.ContextMenuStrip = subscriptionsContextMenuStrip;
                            subscriptionsNode.Tag = new SubscriptionWrapper(null, wrapper.TopicDescription, FilterExpressionHelper.SubscriptionFilterExpression);
                        }
                        var subscriptionNode = subscriptionsNode.Nodes.Add(wrapper.SubscriptionDescription.Name,
                                                                           showMessageCount ?
                                                                           string.Format(NameMessageCountFormat,
                                                                                         wrapper.SubscriptionDescription.Name,
                                                                                         wrapper.SubscriptionDescription.MessageCountDetails.ActiveMessageCount,
                                                                                         wrapper.SubscriptionDescription.MessageCountDetails.DeadLetterMessageCount) :
                                                                           wrapper.SubscriptionDescription.Name,
                                                                           wrapper.SubscriptionDescription.Status == EntityStatus.Active ? SubscriptionIconIndex : GreySubscriptionIconIndex,
                                                                           wrapper.SubscriptionDescription.Status == EntityStatus.Active ? SubscriptionIconIndex : GreySubscriptionIconIndex);
                        subscriptionNode.ContextMenuStrip = subscriptionContextMenuStrip;
                        subscriptionNode.Tag = new SubscriptionWrapper(wrapper.SubscriptionDescription, wrapper.TopicDescription);
                        subscriptionsNode.Expand();
                        panelMain.HeaderText = string.Format(ViewSubscriptionFormat, wrapper.SubscriptionDescription.Name);
                        if (!importing)
                        {
                            serviceBusTreeView.SelectedNode = subscriptionsNode.Nodes[wrapper.SubscriptionDescription.Name];
                            serviceBusTreeView.SelectedNode.EnsureVisible();
                            HandleNodeMouseClick(serviceBusTreeView.SelectedNode);
                        }
                        var rules = serviceBusHelper.GetRules(wrapper.SubscriptionDescription);
                        var ruleDescriptions = rules as RuleDescription[] ?? rules.ToArray();
                        if (rules != null &&
                            ruleDescriptions.Any())
                        {
                            subscriptionNode.Nodes.Clear();
                            var rulesNode = subscriptionNode.Nodes.Add(RuleEntities, RuleEntities, RuleListIconIndex, RuleListIconIndex);
                            rulesNode.ContextMenuStrip = rulesContextMenuStrip;
                            rulesNode.Tag = new RuleWrapper(null, wrapper.SubscriptionDescription);
                            foreach (var rule in ruleDescriptions)
                            {
                                var ruleNode = rulesNode.Nodes.Add(rule.Name, rule.Name, RuleIconIndex, RuleIconIndex);
                                ruleNode.ContextMenuStrip = ruleContextMenuStrip;
                                ruleNode.Tag = new RuleWrapper(rule, wrapper.SubscriptionDescription);
                            }
                        }
                    }
                    return;
                }
                // RuleDescription Entity
                if (args.EntityType == EntityType.Rule)
                {
                    var wrapper = args.EntityInstance as RuleWrapper;
                    if (wrapper == null ||
                        wrapper.SubscriptionDescription == null ||
                        wrapper.RuleDescription == null)
                    {
                        return;
                    }
                    var topicListNode = FindNode(TopicEntities, rootNode);
                    var topicNode = FindNode(wrapper.SubscriptionDescription.TopicPath, topicListNode);
                    if (topicNode != null)
                    {
                        if (topicNode.Nodes.ContainsKey(SubscriptionEntities))
                        {
                            var subscriptionsNode = topicNode.Nodes[SubscriptionEntities];
                            if (subscriptionsNode.Nodes.ContainsKey(wrapper.SubscriptionDescription.Name))
                            {
                                var subscriptionNode = subscriptionsNode.Nodes[wrapper.SubscriptionDescription.Name];
                                TreeNode rulesNode;
                                if (subscriptionNode.Nodes.ContainsKey(RuleEntities))
                                {
                                    rulesNode = subscriptionNode.Nodes[RuleEntities];
                                }
                                else
                                {
                                    rulesNode = subscriptionNode.Nodes.Add(RuleEntities, RuleEntities, RuleListIconIndex, RuleListIconIndex);
                                    rulesNode.ContextMenuStrip = rulesContextMenuStrip;
                                    rulesNode.Tag = new RuleWrapper(null, wrapper.SubscriptionDescription);
                                }
                                var ruleNode = rulesNode.Nodes.Add(wrapper.RuleDescription.Name, wrapper.RuleDescription.Name, RuleIconIndex, RuleIconIndex);
                                ruleNode.ContextMenuStrip = ruleContextMenuStrip;
                                ruleNode.Tag = wrapper;
                                rulesNode.Expand();
                                panelMain.HeaderText = string.Format(ViewRuleFormat, wrapper.RuleDescription.Name);
                                if (!importing)
                                {
                                    serviceBusTreeView.SelectedNode = rulesNode.Nodes[wrapper.RuleDescription.Name];
                                    serviceBusTreeView.SelectedNode.EnsureVisible();
                                }
                            }
                        }
                    }
                }
                // ConsumerGroupDescription Entity
                if (args.EntityType == EntityType.ConsumerGroup)
                {
                    var consumerGroupDescription = args.EntityInstance as ConsumerGroupDescription;
                    if (consumerGroupDescription == null)
                    {
                        return;
                    }
                    var eventHubListNode = FindNode(EventHubEntities, rootNode);
                    var eventHubNode = FindNode(consumerGroupDescription.EventHubPath, eventHubListNode);
                    if (eventHubNode != null)
                    {
                        TreeNode consumerGroupsNode;

                        if (eventHubNode.Nodes.ContainsKey(ConsumerGroupEntities))
                        {
                            consumerGroupsNode = eventHubNode.Nodes[ConsumerGroupEntities];
                        }
                        else
                        {
                            consumerGroupsNode = eventHubNode.Nodes.Add(ConsumerGroupEntities, ConsumerGroupEntities, ConsumerGroupListIconIndex, ConsumerGroupListIconIndex);
                            consumerGroupsNode.ContextMenuStrip = consumerGroupsContextMenuStrip;
                            consumerGroupsNode.Tag = eventHubNode.Tag;
                        }
                        var eventHubDescription = eventHubNode.Tag as EventHubDescription;
                        if (eventHubDescription == null)
                        {
                            return;
                        }

                        var partitions = GetPartitionsFromDefaultConsumerGroup(eventHubNode) ??
                                         GetPartitionsFromPartitionIds(eventHubDescription);
                        var partitionDescriptions = partitions as IList<PartitionDescription> ?? partitions.ToList();
                        var consumerGroupNode = CreateEventHubConsumerGroupNode(eventHubDescription, consumerGroupDescription, partitionDescriptions, consumerGroupsNode);
                        if (consumerGroupNode == null)
                        {
                            return;
                        }
                        consumerGroupNode.ContextMenuStrip = consumerGroupContextMenuStrip;
                        consumerGroupNode.Tag = consumerGroupDescription;
                        consumerGroupsNode.Expand();
                        panelMain.HeaderText = string.Format(ViewConsumerGroupFormat, consumerGroupDescription.Name);
                        if (!importing)
                        {
                            serviceBusTreeView.SelectedNode = consumerGroupsNode.Nodes[consumerGroupDescription.Name];
                            serviceBusTreeView.SelectedNode.EnsureVisible();
                            HandleNodeMouseClick(serviceBusTreeView.SelectedNode);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
            finally
            {
                serviceBusTreeView.ResumeDrawing();
                serviceBusTreeView.ResumeLayout();
            }
        }
 /// <summary>
 /// Individuates and remove the node corresponding to the deleted entity.
 /// </summary>
 /// <param name="args">The ServiceBusHelperEventArgs object containing the reference to the deleted entity.</param>
 void serviceBusHelper_OnDelete(ServiceBusHelperEventArgs args)
 {
     try
     {
         serviceBusTreeView.SuspendDrawing();
         serviceBusTreeView.SuspendLayout();
         foreach (var userControl in panelMain.Controls.OfType<UserControl>())
         {
             userControl.Dispose();
         }
         panelMain.Controls.Clear();
         panelMain.BackColor = SystemColors.Window;
         panelMain.HeaderText = Entity;
         serviceBusTreeView.SelectedNode = rootNode;
         rootNode.EnsureVisible();
         // QueueDescription Entity
         if (args.EntityType == EntityType.Queue)
         {
             string queueName = null;
             if (args.EntityInstance is string)
             {
                 queueName = args.EntityInstance as string;
             }
             else
             {
                 var queueDescription = args.EntityInstance as QueueDescription;
                 if (queueDescription != null)
                 {
                     queueName = queueDescription.Path;
                 }
             }
             var queueListNode = FindNode(QueueEntities, rootNode);
             if (!string.IsNullOrWhiteSpace(queueName))
             {
                 DeleteNode(queueName, queueListNode);
             }
             else
             {
                 GetEntities(EntityType.Queue);
             }
             serviceBusTreeView.SelectedNode = queueListNode;
             queueListNode.EnsureVisible();
             HandleNodeMouseClick(queueListNode);
             return;
         }
         // TopicDescription Entity
         if (args.EntityType == EntityType.Topic)
         {
             string topicName = null;
             if (args.EntityInstance is string)
             {
                 topicName = args.EntityInstance as string;
             }
             else
             {
                 var topicDescription = args.EntityInstance as TopicDescription;
                 if (topicDescription != null)
                 {
                     topicName = topicDescription.Path;
                 }
             }
             var topicListNode = FindNode(TopicEntities, rootNode);
             if (!string.IsNullOrWhiteSpace(topicName))
             {
                 DeleteNode(topicName, topicListNode);
             }
             else
             {
                 GetEntities(EntityType.Topic);
             }
             serviceBusTreeView.SelectedNode = topicListNode;
             topicListNode.EnsureVisible();
             HandleNodeMouseClick(topicListNode);
             return;
         }
         // RelayDescription Entity
         if (args.EntityType == EntityType.Relay)
         {
             string relayName = null;
             if (args.EntityInstance is string)
             {
                 relayName = args.EntityInstance as string;
             }
             else
             {
                 var relayDescription = args.EntityInstance as RelayDescription;
                 if (relayDescription != null)
                 {
                     relayName = relayDescription.Path;
                 }
             }
             var relayListNode = FindNode(RelayEntities, rootNode);
             if (!string.IsNullOrWhiteSpace(relayName))
             {
                 DeleteNode(relayName, relayListNode);
             }
             else
             {
                 GetEntities(EntityType.Relay);
             }
             serviceBusTreeView.SelectedNode = relayListNode;
             relayListNode.EnsureVisible();
             HandleNodeMouseClick(relayListNode);
             return;
         }
         // EventHubDescription Entity
         if (args.EntityType == EntityType.EventHub)
         {
             string eventHubName = null;
             if (args.EntityInstance is string)
             {
                 eventHubName = args.EntityInstance as string;
             }
             else
             {
                 var eventHubDescription = args.EntityInstance as EventHubDescription;
                 if (eventHubDescription != null)
                 {
                     eventHubName = eventHubDescription.Path;
                 }
             }
             var eventHubListNode = FindNode(EventHubEntities, rootNode);
             if (!string.IsNullOrWhiteSpace(eventHubName))
             {
                 DeleteNode(eventHubName, eventHubListNode);
             }
             else
             {
                 GetEntities(EntityType.EventHub);
             }
             serviceBusTreeView.SelectedNode = eventHubListNode;
             eventHubListNode.EnsureVisible();
             HandleNodeMouseClick(eventHubListNode);
             return;
         }
         // NotificationHubDescription Entity
         if (args.EntityType == EntityType.NotificationHub)
         {
             string notificationHubName = null;
             if (args.EntityInstance is string)
             {
                 notificationHubName = args.EntityInstance as string;
             }
             else
             {
                 var notificationHubDescription = args.EntityInstance as NotificationHubDescription;
                 if (notificationHubDescription != null)
                 {
                     notificationHubName = notificationHubDescription.Path;
                 }
             }
             var notificationHubListNode = FindNode(NotificationHubEntities, rootNode);
             if (!string.IsNullOrWhiteSpace(notificationHubName))
             {
                 DeleteNode(notificationHubName, notificationHubListNode);
             }
             else
             {
                 GetEntities(EntityType.NotificationHub);
             }
             serviceBusTreeView.SelectedNode = notificationHubListNode;
             notificationHubListNode.EnsureVisible();
             HandleNodeMouseClick(notificationHubListNode);
             return;
         }
         // SubscriptionDescription Entity
         if (args.EntityType == EntityType.Subscription)
         {
             var topicListNode = FindNode(TopicEntities, rootNode);
             var subscription = args.EntityInstance as SubscriptionDescription;
             if (subscription != null &&
                 !string.IsNullOrWhiteSpace(subscription.TopicPath))
             {
                 var topicNode = FindNode(subscription.TopicPath, topicListNode);
                 if (topicNode == null)
                 {
                     GetEntities(EntityType.Topic);
                     return;
                 }
                 if (topicNode.Nodes.ContainsKey(SubscriptionEntities))
                 {
                     var subscriptionsNode = topicNode.Nodes[SubscriptionEntities];
                     if (subscriptionsNode.Nodes.ContainsKey(subscription.Name))
                     {
                         subscriptionsNode.Nodes.RemoveByKey(subscription.Name);
                         if (subscriptionsNode.Nodes.Count == 0)
                         {
                             topicNode.Nodes.Clear();
                             serviceBusTreeView.SelectedNode = topicNode;
                             topicNode.EnsureVisible();
                             HandleNodeMouseClick(topicNode);
                         }
                         else
                         {
                             subscriptionsNode.Expand();
                             serviceBusTreeView.SelectedNode = subscriptionsNode;
                             subscriptionsNode.EnsureVisible();
                             HandleNodeMouseClick(subscriptionsNode);
                         }
                     }
                     else
                     {
                         GetEntities(EntityType.Topic);
                         return;
                     }
                 }
                 else
                 {
                     GetEntities(EntityType.Topic);
                     return;
                 }
             }
             else
             {
                 GetEntities(EntityType.Topic);
                 return;
             }
             serviceBusTreeView.SelectedNode = null;
             return;
         }
         // RuleDescription Entity
         if (args.EntityType == EntityType.Rule)
         {
             var topicListNode = FindNode(TopicEntities, rootNode);
             var wrapper = args.EntityInstance as RuleWrapper;
             if (wrapper != null &&
                 wrapper.RuleDescription != null &&
                 wrapper.SubscriptionDescription != null &&
                 !string.IsNullOrWhiteSpace(wrapper.RuleDescription.Name) &&
                 !string.IsNullOrWhiteSpace(wrapper.SubscriptionDescription.TopicPath))
             {
                 var topicNode = FindNode(wrapper.SubscriptionDescription.TopicPath, topicListNode);
                 if (topicNode == null)
                 {
                     GetEntities(EntityType.Topic);
                     return;
                 }
                 if (topicNode.Nodes.ContainsKey(SubscriptionEntities))
                 {
                     var subscriptionsNode = topicNode.Nodes[SubscriptionEntities];
                     if (subscriptionsNode.Nodes.ContainsKey(wrapper.SubscriptionDescription.Name))
                     {
                         var subscriptionNode = subscriptionsNode.Nodes[wrapper.SubscriptionDescription.Name];
                         if (subscriptionNode.Nodes.ContainsKey(RuleEntities))
                         {
                             var rulesNode = subscriptionNode.Nodes[RuleEntities];
                             if (rulesNode.Nodes.ContainsKey(wrapper.RuleDescription.Name))
                             {
                                 rulesNode.Nodes.RemoveByKey(wrapper.RuleDescription.Name);
                                 if (rulesNode.Nodes.Count == 0)
                                 {
                                     subscriptionNode.Nodes.Clear();
                                     serviceBusTreeView.SelectedNode = subscriptionNode;
                                     subscriptionNode.EnsureVisible();
                                     HandleNodeMouseClick(subscriptionsNode);
                                 }
                                 else
                                 {
                                     rulesNode.Expand();
                                     serviceBusTreeView.SelectedNode = rulesNode;
                                     rulesNode.EnsureVisible();
                                     HandleNodeMouseClick(rulesNode);
                                 }
                             }
                         }
                         else
                         {
                             GetEntities(EntityType.Topic);
                             return;
                         }
                     }
                     else
                     {
                         GetEntities(EntityType.Topic);
                         return;
                     }
                 }
                 else
                 {
                     GetEntities(EntityType.Topic);
                     return;
                 }
             }
             else
             {
                 GetEntities(EntityType.Topic);
                 return;
             }
             serviceBusTreeView.SelectedNode = null;
         }
         // ConsumerGroupDescription Entity
         if (args.EntityType == EntityType.ConsumerGroup)
         {
             var eventHubListNode = FindNode(EventHubEntities, rootNode);
             var notificationHub = args.EntityInstance as ConsumerGroupDescription;
             if (notificationHub != null &&
                 !string.IsNullOrWhiteSpace(notificationHub.EventHubPath))
             {
                 var eventHubNode = FindNode(notificationHub.EventHubPath, eventHubListNode);
                 if (eventHubNode == null)
                 {
                     GetEntities(EntityType.EventHub);
                     return;
                 }
                 if (eventHubNode.Nodes.ContainsKey(ConsumerGroupEntities))
                 {
                     var notificationHubsNode = eventHubNode.Nodes[ConsumerGroupEntities];
                     if (notificationHubsNode.Nodes.ContainsKey(notificationHub.Name))
                     {
                         notificationHubsNode.Nodes.RemoveByKey(notificationHub.Name);
                         if (notificationHubsNode.Nodes.Count == 0)
                         {
                             eventHubNode.Nodes.Clear();
                             serviceBusTreeView.SelectedNode = eventHubNode;
                             eventHubNode.EnsureVisible();
                             HandleNodeMouseClick(eventHubNode);
                         }
                         else
                         {
                             notificationHubsNode.Expand();
                             serviceBusTreeView.SelectedNode = notificationHubsNode;
                             notificationHubsNode.EnsureVisible();
                             HandleNodeMouseClick(notificationHubsNode);
                         }
                     }
                     else
                     {
                         GetEntities(EntityType.EventHub);
                         return;
                     }
                 }
                 else
                 {
                     GetEntities(EntityType.EventHub);
                     return;
                 }
             }
             else
             {
                 GetEntities(EntityType.EventHub);
                 return;
             }
             serviceBusTreeView.SelectedNode = null;
         }
     }
     catch (Exception ex)
     {
         HandleException(ex);
     }
     finally
     {
         serviceBusTreeView.ResumeDrawing();
         serviceBusTreeView.ResumeLayout();
     }
 }