Exemple #1
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            Host hostAncestor = selection.HostAncestorFromConnection;
            Pool poolAncestor = selection.PooAncestorFromConnection;

            if ((poolAncestor != null || hostAncestor != null) && //CA-61207: this check ensures there's no cross-pool selection
                (selection.FirstIs <Pool>() || selection.FirstIs <Host>() || selection.FirstIsRealVM || selection.FirstIs <VM_appliance>()))
            {
                if (selection.AllItemsAre <VM>())
                {
                    return(selection.AtLeastOneXenObjectCan <VM>(CanExportVm));
                }

                if (selection.AllItemsAre <VM_appliance>())
                {
                    if (selection.Count != 1)
                    {
                        return(false);
                    }

                    var appliance = ((VM_appliance)selection.FirstAsXenObject);
                    return(appliance.VMs.TrueForAll(vmRef =>
                    {
                        var vm = appliance.Connection.Resolve(vmRef);
                        return vm != null &&
                        CanExportVm(vm);
                    }));
                }

                if ((hostAncestor != null && hostAncestor.enabled && hostAncestor.IsLive && selection[0].Connection.IsConnected) ||
                    (poolAncestor != null && Helpers.PoolHasEnabledHosts(poolAncestor)))
                {
                    var vms = selection.FirstAsXenObject.Connection.Cache.VMs.Where(vm => vm.is_a_real_vm && CanExportVm(vm) && vm.Show(Properties.Settings.Default.ShowHiddenVMs)).ToList();
                    if (vms.Count > 0)
                    {
                        return(vms.Any(CanExportVm));
                    }
                }
            }

            return(false);
        }