public SelectQueueDialog(IServiceBusDiscovery discovery, ServerConfig3 serverCfg, string[] queueNames) {
      InitializeComponent();

      _disc = discovery;
      _serverSettings = serverCfg.ConnectionSettings;

      Topmost = SbmqSystem.UIState.AlwaysOnTop;

      var qItems = queueNames.Select(n => new QueueListItem() { Name = n, Access = QueueAccess.Unknown }).ToList();
      lbQueues.ItemsSource = qItems;

      BackgroundWorker bw = new BackgroundWorker();
      bw.DoWork += (s, e) => {

        foreach( var q in qItems ) {
          if( _disc.CanAccessQueue(_serverSettings, q.Name) )
            q.Access = QueueAccess.RW;
          else {
            q.Access = QueueAccess.None;
          }
        }
      };
      bw.RunWorkerCompleted += (s, e) => {
        lbQueues.Items.Refresh();
      };

      bw.RunWorkerAsync();

    }
      public void CopyTo(ServerConfig3 obj) {
        obj.Name = Name;
        obj.ServiceBus = ServiceBus;
        obj.ServiceBusVersion = ServiceBusVersion;
        obj.ServiceBusQueueType = ServiceBusQueueType;
        obj.MonitorInterval = MonitorInterval;
        obj.MonitorQueues = MonitorQueues;
        obj.ConnectionSettings = new Dictionary<string, object>(ConnectionSettings);

        obj.CommandsAssemblyPaths = CommandsAssemblyPaths;
        obj.CommandDefinition = CommandDefinition;
        obj.CommandContentType = CommandContentType;
      }
        public void CopyTo(ServerConfig3 obj)
        {
            obj.Name                = Name;
            obj.ServiceBus          = ServiceBus;
            obj.ServiceBusVersion   = ServiceBusVersion;
            obj.ServiceBusQueueType = ServiceBusQueueType;
            obj.MonitorInterval     = MonitorInterval;
            obj.MonitorQueues       = MonitorQueues;
            obj.ConnectionSettings  = new Dictionary <string, object>(ConnectionSettings);

            obj.CommandsAssemblyPaths = CommandsAssemblyPaths;
            obj.CommandDefinition     = CommandDefinition;
            obj.CommandContentType    = CommandContentType;
        }
    private void LoadSubscriptionTypes(ServerConfig3 server = null, Action onCompleted = null) {
      if( server == null )
        server = ( cbServer.SelectedItem as ServerConfig3 );

      var currSrv = _sys.Config.CurrentServer;

      if( server.ServiceBus == currSrv.ServiceBus && server.ServiceBusVersion != currSrv.ServiceBusVersion ) {

        _allItems.Clear();
        _items.Clear();
        SetInfoText("Can't load subscriptions as Service Bus has a different version from the Currently Active");
        return;
      }


      var serverName = server.ConnectionSettings["server"];

      imgServerLoading.Visibility = System.Windows.Visibility.Visible;
      btnRefresh.Visibility = System.Windows.Visibility.Hidden;
      cbServer.IsEnabled = false;

      BackgroundWorker w = new BackgroundWorker();
      w.DoWork += (s, e) => { e.Result = _sys.GetMessageSubscriptions(server); };
      w.RunWorkerCompleted += (s, e) => {
        MessageSubscription[] subs = e.Result as MessageSubscription[];

        _allItems.Clear();
        _items.Clear();
        foreach( var ms in subs ) {

            var key = ms.FullName.ToLower() + ": " + ms.Publisher.ToLower() + " => " + ms.Subscriber.ToLower();
            if(!_allItems.ContainsKey(key))
                _allItems.Add(key, ms);
            else SetInfoText("Found a duplicate Pub/Sub, for message " + key);

          _items.Add(ms);
        }

        imgServerLoading.Visibility = System.Windows.Visibility.Hidden;
        btnRefresh.Visibility = System.Windows.Visibility.Visible;
        cbServer.IsEnabled = true;

        Filter();

        if( onCompleted != null )
          onCompleted();
      };
      w.RunWorkerAsync();

    }
        public ManageServerDialog(SbmqSystem system, ServerConfig3 server, bool copy = false)
        {
            InitializeComponent();

              Topmost = SbmqSystem.UIState.AlwaysOnTop;

              _sys = system;
              _config = system.Config;
              _server = server;

              _managerTypes = ServiceBusFactory.AvailableServiceBusManagers();

              Result = new ConfigWindow.AddServerResult();

              Result.Server = new ServerConfig3();
              if( server != null ) {
            server.CopyTo(Result.Server);

            if( copy ) {
              Result.Server.Name = string.Empty;
              Result.Server.ConnectionSettings = new Dictionary<string, object>();
            }
              }
              DialogActionType = server == null ? ActionType.Add : ( copy ? ActionType.Copy : ActionType.Edit );

              string verb = ( DialogActionType == ActionType.Edit ) ? "Edit" : "Add";
              lbTitle.Content = Title = "{0} Server".With(verb);
              lbInfo.Content = string.Empty;

              cbServiceBus.ItemsSource = _managerTypes.GroupBy(g => g.DisplayName).Select(x => x.Key).ToArray();
              //cbServiceBus.DisplayMemberPath = "DisplayName";
              //cbServiceBus.SelectedValuePath = "Name";

              tbName.Init(Result.Server.Name, typeof(string), false);

              //var s = cbServiceBus.SelectedValue as string;
              //cbTransport.ItemsSource = _managerTypes.GroupBy(g => g.Name).Single(x => x.Key == s).Select(x => x.QueueType);

              //tbInterval.Init(750, typeof(int), false);

              if( DialogActionType == ActionType.Edit ) {
            _nameEdited = GetDefaultServerName(_server.ConnectionSettings.First().Value as string, _server.ServiceBus, _server.ServiceBusVersion, _server.ServiceBusQueueType) != _server.Name;
              }

              BindServerInfo();
        }
        public MessageSubscription[] GetMessageSubscriptions(ServerConfig3 server)
        {
            IViewSubscriptions sc = null;

              if( server.ServiceBus == _mgr.ServiceBusName &&
              server.ServiceBusVersion == _mgr.ServiceBusVersion &&
              server.ServiceBusQueueType == _mgr.MessageQueueType ) {
            sc = _mgr as IViewSubscriptions;
              } else {
            var mgr = ServiceBusFactory.CreateManager(server.ServiceBus, server.ServiceBusVersion, server.ServiceBusQueueType);
            sc = mgr as IViewSubscriptions;
              }

              if( sc != null )
            return sc.GetMessageSubscriptions(server.ConnectionSettings, server.MonitorQueues.Select(q => q.Name));
              else return new MessageSubscription[0];
        }
 private void UpdateQueueLists(ServerConfig3 s) {
   queueCommands.BindItems(s.MonitorQueues.Where(q => q.Type == QueueType.Command).Select(
                                   q => new QueueListControl.QueueListItem(q.Name, q.Color)));
   queueEvents.BindItems(s.MonitorQueues.Where(q => q.Type == QueueType.Event).Select(
                                   q => new QueueListControl.QueueListItem(q.Name, q.Color)));
   queueMessages.BindItems(s.MonitorQueues.Where(q => q.Type == QueueType.Message).Select(
                                   q => new QueueListControl.QueueListItem(q.Name, q.Color)));
   queueErrors.BindItems(s.MonitorQueues.Where(q => q.Type == QueueType.Error).Select(
                                   q => new QueueListControl.QueueListItem(q.Name, q.Color)));
 }
    private void ValidateQueues(ServerConfig3 s) {
      if( _allQueueNames != null && _allQueueNames.ContainsKey(s.Name) ) {
        var allQueues = _allQueueNames[s.Name];

        var removedQueues = s.MonitorQueues.Where(q => !allQueues.Any(x => q.Name == x)).ToArray();
        if( removedQueues.Any() ) {
          MessageDialog.Show(MessageType.Info, "Removed Queues", "These queues could not be found at the server and therefore removed from monitoring:\n" + removedQueues.AsString(",\n"));

          s.MonitorQueues = s.MonitorQueues.Where(q => allQueues.Any(x => q.Name == x)).ToArray();
          _config.Save();

          UpdateQueueLists(s);
        }
      }
    }
    private void GetAllAvailableQueueNamesForServer(ServerConfig3 server) {

      if( !_allQueueNames.ContainsKey(server.Name) ) {

        _SetAccessingServer(true);

        BackgroundWorker w = new BackgroundWorker();
        w.DoWork += (s, arg) => {
          try { 
            var queues = GetDiscoveryService(server).GetAllAvailableQueueNames(server.ConnectionSettings);
            _allQueueNames.Add(server.Name, queues);
          } catch(Exception e) { 
            ShowErrorMessage(e);
          }
        };
        w.RunWorkerCompleted += (s, arg) => {
          ValidateQueues(server);
          _SetAccessingServer(false);
        };

        w.RunWorkerAsync();

      }
    }
 private IServiceBusDiscovery GetDiscoveryService(ServerConfig3 s) {
   return GetDiscoveryService(s.ServiceBus, s.ServiceBusVersion, s.ServiceBusQueueType);
 }
    private void BindSendCommandView(ServerConfig3 server) {
      asmPaths.BindItems(server.CommandsAssemblyPaths);

      tbNamespace.Init(server.CommandDefinition.NamespaceContains, typeof(string), true);

      tbCmdInherits.Text = server.CommandDefinition.InheritsType;
    }
        private void GetAllAvailableQueueNamesForServer(ServerConfig3 server)
        {
            if( !_allQueueNames.ContainsKey(server.Name) ) {

            _SetAccessingServer(true);

            BackgroundWorker w = new BackgroundWorker();
            w.DoWork += (s, arg) => {
              _allQueueNames.Add(server.Name, GetDiscoveryService(server).GetAllAvailableQueueNames(server.ConnectionSettings));
            };
            w.RunWorkerCompleted += (s, arg) => {
              ValidateQueues(server);
              _SetAccessingServer(false);
            };

            w.RunWorkerAsync();

              }
        }