void CheckPreselectedItems(Guid environmentID)
 {
     if (Preselected != null && Preselected.Any())
     {
         var envId = Preselected.First().Server.EnvironmentID;
         if (envId != environmentID)
         {
             ConnectControlViewModel.SelectedConnection = ConnectControlViewModel.Servers.FirstOrDefault(a => a.EnvironmentID == envId);
             if (ConnectControlViewModel.SelectedConnection != null)
             {
                 var server = ConnectControlViewModel.SelectedConnection;
                 if (server.Permissions == null)
                 {
                     server.Permissions = new List <IWindowsGroupPermission>();
                 }
                 ConnectControlViewModel.Connect(ConnectControlViewModel.SelectedConnection);
             }
         }
         else
         {
             SelectItemsForDeploy(Preselected);
             Preselected = null;
         }
     }
 }
        public ExplorerViewModel(IShellViewModel shellViewModel, Microsoft.Practices.Prism.PubSubEvents.IEventAggregator aggregator, bool shouldUpdateActiveEnvironment, Action <IExplorerItemViewModel> selectAction = null, bool loadLocalHost = true)
        {
            if (shellViewModel == null)
            {
                throw new ArgumentNullException(nameof(shellViewModel));
            }
            var localhostEnvironment = CreateEnvironmentFromServer(shellViewModel.LocalhostServer, shellViewModel);

            _shellViewModel = shellViewModel;
            _selectAction   = selectAction;
            localhostEnvironment.SelectAction = selectAction ?? (a => { });
            localhostEnvironment.IsSelected   = true;
            // ReSharper disable VirtualMemberCallInContructor
            Environments = new ObservableCollection <IEnvironmentViewModel> {
                localhostEnvironment
            };
            if (loadLocalHost)
#pragma warning disable 4014
            {
                LoadEnvironment(localhostEnvironment);
            }
#pragma warning restore 4014

            ConnectControlViewModel = new ConnectControlViewModel(shellViewModel.LocalhostServer, aggregator);
            ConnectControlViewModel.ShouldUpdateActiveEnvironment = shouldUpdateActiveEnvironment;
            ShowConnectControl = true;
            ConnectControlViewModel.ServerConnected            += ServerConnected;
            ConnectControlViewModel.ServerDisconnected         += ServerDisconnected;
            ConnectControlViewModel.ServerHasDisconnected      += ServerDisconnectDetected;
            ConnectControlViewModel.ServerReConnected          += ServerReConnected;
            ConnectControlViewModel.SelectedEnvironmentChanged += ConnectControlViewModelOnSelectedEnvironmentChanged;
        }
 public DeployDestinationViewModel(IShellViewModel shellViewModel, IEventAggregator aggregator)
     : base(shellViewModel, aggregator, false)
 {
     ConnectControlViewModel = new ConnectControlViewModel(shellViewModel.LocalhostServer, aggregator, shellViewModel.ExplorerViewModel.ConnectControlViewModel.Servers);
     ConnectControlViewModel.ServerConnected    += async(sender, server) => { await ServerConnected(sender, server); };
     ConnectControlViewModel.ServerDisconnected += ServerDisconnected;
     SelectedEnvironment = _environments.FirstOrDefault();
     RefreshCommand      = new Microsoft.Practices.Prism.Commands.DelegateCommand(() => RefreshEnvironment(SelectedEnvironment.ResourceId));
 }
        public DeploySourceExplorerViewModel(IShellViewModel shellViewModel, Microsoft.Practices.Prism.PubSubEvents.IEventAggregator aggregator, IDeployStatsViewerViewModel statsArea, IEnvironmentViewModel selectedEnvironment)
        {
            if (shellViewModel == null)
            {
                throw new ArgumentNullException(nameof(shellViewModel));
            }
            var localhostEnvironment = CreateEnvironmentFromServer(shellViewModel.LocalhostServer, shellViewModel);

            _shellViewModel = shellViewModel;
            _selectAction   = SelectAction;
            _selectedEnv    = selectedEnvironment;

            Environments = new ObservableCollection <IEnvironmentViewModel> {
                localhostEnvironment
            };
            LoadLocalHostEnvironment(localhostEnvironment);
            ConnectControlViewModel = new ConnectControlViewModel(_shellViewModel.LocalhostServer, aggregator, _shellViewModel.ExplorerViewModel.ConnectControlViewModel.Servers);

            ShowConnectControl = true;
            ConnectControlViewModel.ServerDisconnected += ServerDisconnected;
            _statsArea = statsArea;
            foreach (var environmentViewModel in _environments)
            {
                environmentViewModel.SelectAction = SelectAction;
            }

            if (ConnectControlViewModel.SelectedConnection != null && !ConnectControlViewModel.SelectedConnection.IsLocalHost)
            {
                UpdateItemForDeploy(ConnectControlViewModel.SelectedConnection.EnvironmentID);
            }
            IsRefreshing       = false;
            ShowConnectControl = false;
            RefreshCommand     = new Microsoft.Practices.Prism.Commands.DelegateCommand(() => RefreshEnvironment(SelectedEnvironment.ResourceId));
            ConnectControlViewModel.SelectedEnvironmentChanged += ConnectControlSelectedExplorerEnvironmentChanged;
            ConnectControlViewModel.ServerConnected            += (sender, server) =>
            {
                IsDeployLoading = true;
                ServerConnectedAsync(server).ContinueWith(t =>
                {
                    IsDeployLoading = false;
                }, TaskContinuationOptions.ExecuteSynchronously);
            };
            IsDeploy = true;
        }
        public MergeServiceViewModel(IShellViewModel shellViewModel, Microsoft.Practices.Prism.PubSubEvents.IEventAggregator aggregator, IExplorerItemViewModel selectedResource, IMergeView mergeView, IServer selectedServer)
        {
            if (shellViewModel == null)
            {
                throw new ArgumentNullException(nameof(shellViewModel));
            }
            var localhostEnvironment = CreateEnvironmentFromServer(shellViewModel.LocalhostServer, shellViewModel);

            localhostEnvironment.Children = shellViewModel.ExplorerViewModel?.Environments[0].Children;
            _shellViewModel   = shellViewModel;
            _selectedResource = selectedResource;

            ResourceToMerge = _selectedResource.IsVersion ? _selectedResource.Parent.ResourceName : _selectedResource.ResourceName;

            _view = mergeView;

            Environments = new ObservableCollection <IEnvironmentViewModel> {
                localhostEnvironment
            };

            MergeConnectControlViewModel = new ConnectControlViewModel(_shellViewModel.LocalhostServer, aggregator, _shellViewModel.ExplorerViewModel.ConnectControlViewModel.Servers)
            {
                SelectedConnection = selectedServer
            };

            LoadVersions(selectedResource.Server);
            ShowConnectControl = true;
            MergeConnectControlViewModel.CanEditServer       = false;
            MergeConnectControlViewModel.CanCreateServer     = false;
            MergeConnectControlViewModel.ServerConnected    += async(sender, server) => { await ServerConnectedAsync(server).ConfigureAwait(false); };
            MergeConnectControlViewModel.ServerDisconnected += ServerDisconnected;

            ShowConnectControl = false;
            IsRefreshing       = false;
            RefreshCommand     = new DelegateCommand(() => RefreshEnvironment(SelectedEnvironment.ResourceId).ConfigureAwait(false));
            CancelCommand      = new DelegateCommand(Cancel);
            MergeCommand       = new DelegateCommand(Merge, CanMerge);

            MergeConnectControlViewModel.SelectedEnvironmentChanged += async(sender, id) =>
            {
                await MergeExplorerViewModelSelectedEnvironmentChangedAsync(sender).ConfigureAwait(false);
            };
        }
        public DeploySourceExplorerViewModel(IShellViewModel shellViewModel, Microsoft.Practices.Prism.PubSubEvents.IEventAggregator aggregator, IDeployStatsViewerViewModel statsArea)
        {
            if (shellViewModel == null)
            {
                throw new ArgumentNullException(nameof(shellViewModel));
            }
            var localhostEnvironment = CreateEnvironmentFromServer(shellViewModel.LocalhostServer, shellViewModel);

            _shellViewModel = shellViewModel;
            _selectAction   = SelectAction;
            // ReSharper disable once VirtualMemberCallInContructor
            Environments = new ObservableCollection <IEnvironmentViewModel> {
                localhostEnvironment
            };
            // ReSharper disable once VirtualMemberCallInContructor
            LoadEnvironment(localhostEnvironment);

            ConnectControlViewModel = new ConnectControlViewModel(_shellViewModel.LocalhostServer, aggregator, _shellViewModel.ExplorerViewModel.ConnectControlViewModel.Servers);

            ShowConnectControl = true;
            ConnectControlViewModel.ServerConnected    += async(sender, server) => { await ServerConnected(sender, server); };
            ConnectControlViewModel.ServerDisconnected += ServerDisconnected;
            _statsArea = statsArea;
            foreach (var environmentViewModel in _environments)
            {
                environmentViewModel.SelectAction = SelectAction;
            }

            if (ConnectControlViewModel.SelectedConnection != null)
            {
                UpdateItemForDeploy(ConnectControlViewModel.SelectedConnection.EnvironmentID);
            }
            IsRefreshing       = false;
            ShowConnectControl = false;
            RefreshCommand     = new Microsoft.Practices.Prism.Commands.DelegateCommand(() => RefreshEnvironment(SelectedEnvironment.ResourceId));
            ConnectControlViewModel.SelectedEnvironmentChanged += async(sender, id) =>
            {
                await DeploySourceExplorerViewModelSelectedEnvironmentChanged(sender, id);
            };
            IsDeploy = true;
        }