using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL;
using Tango.BL.Entities;
using Tango.Core.DI;
using Tango.FSE.BL;
using Tango.FSE.Common;
using Tango.FSE.Common.AutoComplete;
using Tango.Integration.ExternalBridge;
namespace Tango.FSE.UI.Dialogs
{
///
/// Represents a machine USB connection view model.
///
///
public class MachineConnectionUsbViewVM : MachineConnectionBaseViewVM
{
[TangoInject]
protected FSEServicesContainer Services { get; set; }
public IExternalBridgeClient Machine { get; set; }
///
/// Gets or sets the machines completion source.
///
public AutoCompleteSource Machines { get; set; }
private Machine _selectedMachine;
///
/// Gets or sets the selected virtualized machine.
///
public Machine SelectedMachine
{
get { return _selectedMachine; }
set { _selectedMachine = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
}
///
/// Initializes a new instance of the class.
///
public MachineConnectionUsbViewVM() : base()
{
TangoIOC.Default.Inject(this);
Machines = new AutoCompleteSource(AutoCompleteMachines);
}
///
/// Gets the machine serial number.
///
///
public override string GetMachineSerialNumber()
{
return SelectedMachine?.SerialNumber;
}
///
/// Determines whether this instance can invoke the OK command.
///
///
protected override bool CanOK()
{
return SelectedMachine != null;
}
///
/// Called when the dialog has been shown.
///
public async override void OnShow()
{
base.OnShow();
try
{
if (Settings.LastVirtualizedMachineSerialNumber != null)
{
var machine = await Services.MachinesService.GetMachine(Settings.LastVirtualizedMachineSerialNumber);
if (SelectedMachine == null)
{
SelectedMachine = machine;
}
}
}
catch (Exception ex)
{
LogManager.Log(ex, "Error retrieving last virtualized machine.");
}
if (SelectedMachine == null)
{
this.SetFocus(() => SelectedMachine);
}
}
///
/// Invokes the event.
///
protected override void Accept()
{
Settings.LastVirtualizedMachineSerialNumber = SelectedMachine.SerialNumber;
Settings.Save();
base.Accept();
}
private List AutoCompleteMachines(string key)
{
key = key ?? String.Empty;
try
{
return Services.MachinesService.GetAllMachines().Result.Where(x => x.SerialNumber.ToLower().StartsWith(key)).Take(4).ToList();
}
catch (Exception ex)
{
LogManager.Log(ex, "Error on auto complete virtualized machine filter.");
return new List();
}
}
}
}