public void Reserve(UserCredential credential, RequestedVMDictionary requestedVMs, VMQuantityDictionary requiredVMQuantity)
        {
            var virtualMachines = VMInventoryManager.RequestVMs(_sessionId, credential, requestedVMs, requiredVMQuantity);

            try
            {
                foreach (VirtualMachine machine in virtualMachines)
                {
                    TraceFactory.Logger.Debug("{0} : {1}".FormatWith(machine.Name, machine.MachineType));

                    var machineType     = EnumUtil.GetByDescription <ManagedMachineType>(machine.MachineType);
                    var machineInstance = new ManagedMachine(machine.Name, machineType);
                    GetMachineQueueForPlatform(machine.PlatformUsage).Enqueue(machineInstance);
                }
            }
            catch (Exception ex)
            {
                TraceFactory.Logger.Error(ex);

                // Something bad happened.  Release everything.
                foreach (var machine in virtualMachines)
                {
                    using (var machineInstance = new ManagedMachine(machine.Name, EnumUtil.GetByDescription <ManagedMachineType>(machine.MachineType)))
                    {
                        machineInstance.ReleaseReservation();
                    }
                }

                Dispose();
                throw;
            }
        }
        private void AddHolds(GridViewSelectedRowsCollection selectedRows)
        {
            string holdId = InputDialog.Show("Enter Hold Id:", "Add Machine Hold");

            if (string.IsNullOrWhiteSpace(holdId))
            {
                // User cancelled
                return;
            }

            var hostNames = selectedRows.Select(n => n.Cells[GridColumns.NAME_GRID_COLUMN].Value.ToString());

            try
            {
                this.Cursor = Cursors.WaitCursor;
                VMInventoryManager.AddHold(hostNames, holdId);

                foreach (var row in selectedRows)
                {
                    row.Cells[GridColumns.HOLDID_GRID_COLUMN].Value = holdId;
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
        public override void Replace()
        {
            TraceFactory.Logger.Info("Replacing {0}.".FormatWith(_machine.Name));
            var replacement = VMInventoryManager.GetReplacement(_machine.Name);

            VMInventoryManager.SetInUseClearSession(_machine.Name);
            _machine = new ManagedMachine(replacement.Name, ManagedMachineType.WindowsVirtual);
            TraceFactory.Logger.Info("New replacement machine {0} selected.".FormatWith(_machine.Name));
        }
 private void synchronizeToolStripButton_Click(object sender, EventArgs e)
 {
     try
     {
         this.Cursor = Cursors.WaitCursor;
         // Execute this operation on a separate thread so that the Lock Service callback doesn't create a deadlock with the UI thread.
         Task syncTask = Task.Factory.StartNew(() => VMInventoryManager.SyncInventory(UserManager.CurrentUser));
         syncTask.Wait();
         RefreshGrid();
     }
     finally
     {
         this.Cursor = Cursors.Default;
     }
 }
        private void SetUsage(GridViewSelectedRowsCollection selectedRows, VMUsageState state)
        {
            try
            {
                this.Cursor = Cursors.WaitCursor;
                var hostNames = selectedRows.Select(n => n.Cells[GridColumns.NAME_GRID_COLUMN].Value.ToString());
                VMInventoryManager.SetUsageState(hostNames, state);

                RefreshGrid();
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
        private void RemoveHolds(GridViewSelectedRowsCollection selectedRows)
        {
            var hostNames = selectedRows.Select(n => n.Cells[GridColumns.NAME_GRID_COLUMN].Value.ToString());

            try
            {
                this.Cursor = Cursors.WaitCursor;
                VMInventoryManager.RemoveHold(hostNames);

                foreach (var row in selectedRows)
                {
                    row.Cells[GridColumns.HOLDID_GRID_COLUMN].Value = null;
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
        private void PowerOn(SimReserved simulator)
        {
            Thread.CurrentThread.SetName(simulator.AssetId);

            UpdateItemStatus(simulator, "Checking power status...");
            if (VMController.IsPoweredOn(simulator.VirtualMachine))
            {
                UpdateItemStatus(simulator, "Already powered on.");
            }
            else
            {
                UpdateItemStatus(simulator, "Powering On VM...");
                VMController.PowerOnMachine(simulator.VirtualMachine);
                VMInventoryManager.SetInUse(simulator.VirtualMachine);
                CancellationTokenSource task = new CancellationTokenSource();
                VMController.WaitOnMachineAvailable(simulator.VirtualMachine, task.Token);
                UpdateItemStatus(simulator, "Power On complete.");
            }
        }