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 System.Windows.Controls;
using System.Windows.Controls.Primitives;
namespace OpenTapEditor
{
///
/// AdapterSetting.xaml 的交互逻辑
///
[ObservableObject]
public partial class AdapterSetting : Window
{
[ObservableProperty]
private string stepName;
[ObservableProperty]
private string stepGroup;
[ObservableProperty]
private string typeName;
[ObservableProperty]
private List groupSource = new List();
private ITestStep step;
private AdapterData data;
private bool isEdit;
private IList datasource;
public AdapterSetting()
{
DataContext = this;
InitializeComponent();
GroupSource = StepTypeLoader.CustomSteps.Select(s => s.GroupBy)
.Distinct().ToList();
}
public bool? Open(ITestStep step, IList datasource)
{
try
{
this.datasource = datasource;
TypeName = step.GetType().Name;
this.step = step;
data = new AdapterData();
isEdit = false;
UpdateSource(this.step);
}
catch (Exception ex)
{
}
return this.ShowDialog();
}
public bool? Open(AdapterData data, IList datasource, bool isEdit)
{
this.isEdit = isEdit;
StepGroup = data.Group;
if (isEdit)
{
StepName = data.Name;
this.data = data;
}
else
{
this.data = new AdapterData();
}
this.datasource = datasource;
TapSerializer serializer = new TapSerializer();
ITestStep step = (ITestStep)serializer.DeserializeFromString(data.Xml, TypeData.FromType(typeof(ITestStep)));
this.step = step;
UpdateSource(this.step);
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(FormGroupProvider.GetControl(obj, null));
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var btn = (Button)sender;
if (btn.IsCancel)
{
this.Close();
return;
}
try
{
if (string.IsNullOrEmpty(StepName))
{
FgName.ValidateResult = Panuon.WPF.UI.ValidateResult.Error;
FgName.Message = "请输入名称";
return;
}
var temp = datasource.FirstOrDefault(e => e.Name == this.StepName);
if (temp != null && temp != data)
{
FgName.ValidateResult = Panuon.WPF.UI.ValidateResult.Error;
FgName.Message = "名称不能重复";
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;
data.Name = this.StepName;
data.Group = this.StepGroup;
data.Xml = xmlCache;
data.DataValue = new SerializableDictionary();
if (this.step is VariableTestStep vts && vts.MethodVariables != null)
{
foreach (var mv in vts.MethodVariables)
{
data.DataValue[mv.Name] = mv.ValueStr;
}
}
if (!isEdit)
{
datasource.Add(data);
}
StepTypeLoader.SaveAdapterStep();
this.Close();
}
}
catch (Exception ex)
{
}
}
private void ComboBox_GotFocus(object sender, RoutedEventArgs e)
{
var comboBox = (ComboBox)sender;
comboBox.IsDropDownOpen = true;
}
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
var comboBox = (ComboBox)sender;
comboBox.AddHandler(TextBoxBase.TextChangedEvent, new TextChangedEventHandler(ComboBox_GotFocus));
comboBox.Loaded -= ComboBox_Loaded;
}
}
}