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
|
{
|
/// <summary>
|
/// AdapterSetting.xaml 的交互逻辑
|
/// </summary>
|
[ObservableObject]
|
public partial class AdapterSetting : Window
|
{
|
[ObservableProperty]
|
private string stepName;
|
|
[ObservableProperty]
|
private string stepGroup;
|
|
[ObservableProperty]
|
private string typeName;
|
|
[ObservableProperty]
|
private List<string> groupSource = new List<string>();
|
|
private ITestStep step;
|
|
private AdapterData data;
|
|
private bool isEdit;
|
|
private IList<AdapterData> datasource;
|
|
public AdapterSetting()
|
{
|
DataContext = this;
|
InitializeComponent();
|
GroupSource = StepTypeLoader.CustomSteps.Select(s => s.GroupBy)
|
.Distinct().ToList();
|
}
|
|
public bool? Open(ITestStep step, IList<AdapterData> 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<AdapterData> 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<string, string>();
|
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;
|
}
|
}
|
}
|