using AddInPlugin;
using AddInPlugin.Entity;
using CommunityToolkit.Mvvm.ComponentModel;
using OpenTap;
using OpenTap.Addin.Util;
using OpenTapEditor.Provider;
using OpenTapEditor.Util;
using System.IO;
using System.Text;
using System.Windows;
using UtilLib;
namespace OpenTapEditor
{
///
/// AdapterSetting.xaml 的交互逻辑
///
[ObservableObject]
public partial class AdapterSetting : Window
{
[ObservableProperty]
private string stepName;
[ObservableProperty]
private string stepGroup;
[ObservableProperty]
private List groupSource = new List();
private ITestStep step;
private IList datasource;
public AdapterSetting()
{
DataContext = this;
GroupSource = StepTypeLoader.CustomSteps.Where(a=>!string.IsNullOrEmpty(a.Group))
.Select(a => a.Group).ToList();
InitializeComponent();
}
public bool? Open(ITypeData type, IList datasource)
{
try
{
this.datasource = datasource;
var newStep = (ITestStep)type.CreateInstance();
this.step = newStep;
UpdateSource(this.step);
}
catch (Exception ex)
{
}
return this.ShowDialog();
}
public bool? Open(ITestStep step, IList datasource)
{
try
{
this.datasource = datasource;
this.step = step;
UpdateSource(this.step);
}
catch (Exception ex)
{
}
return this.ShowDialog();
}
private void UpdateSource(object obj)
{
//var annotations = AnnotationCollection.Annotate(obj);
view.Children.Clear();
//view.Children.Add(DutControlProvider.GetControl(annotations));
view.Children.Add(GridControlProvider.GetControl(obj));
}
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
if (datasource.FirstOrDefault(e => e.Name == this.StepName) != null)
{
MessageBox.Show("名称不能重复");
return;
}
TapSerializer serializer = new TapSerializer();
using (var str = new MemoryStream())
{
serializer.Serialize(str, this.step);
var xmlCache = Encoding.UTF8.GetString(str.ToArray());
//XmlDocument doc = new XmlDocument();
//doc.LoadXml(xmlCache);
//XmlNode myNode = doc.DocumentElement;
var adapterData = new AdapterData();
adapterData.Name = this.StepName;
adapterData.Group = this.StepGroup;
adapterData.Xml = xmlCache;
adapterData.DataValue = new SerializableDictionary();
if (this.step is VariableTestStep vts && vts.MethodVariables != null)
{
foreach (var mv in vts.MethodVariables)
{
adapterData.DataValue[mv.Name] = mv.ValueStr;
}
}
datasource.Add(adapterData);
//var step = serializer.DeserializeFromString(xmlCache, TypeData.FromType(typeof(ITestStep)));
XmlHelper.SerializeToXml(PathHelper.AdapterDataPath, datasource);
}
}
catch (Exception ex)
{
}
}
}
}