1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Tango.BL.Entities;
using Tango.Integration.Operation;
using Tango.Integration.ExternalBridge;
namespace Tango.PPC.Common.Application
{
/// <summary>
/// Represents the application manager.
/// </summary>
public interface IPPCApplicationManager
{
/// <summary>
/// Occurs when the application has started.
/// </summary>
eventpre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */using KellermanSoftware.CompareNetObjects;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations.Schema;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Tango.BL;
using Tango.BL.Entities;
using Tango.BL.Enumerations;
using Tango.BL.Serialization;
using Tango.Core.Commands;
using Tango.SharedUI;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Tango.HardwareVersionComparison
{
public class MainWindowVM : ViewModel
{
#region Property
private String _jsonText1;
public String JsonText1
{
get { return _jsonText1; }
set
{
_jsonText1 = value;
RaisePropertyChangedAuto();
InvalidateRelayCommands();
}
}
private String _jsonText2;
public String JsonText2
{
get { return _jsonText2; }
set
{
_jsonText2 = value;
RaisePropertyChangedAuto();
InvalidateRelayCommands();
}
}
private ObservableCollection<String> _valuesVersion1;
public ObservableCollection<String> ValuesForVersion1
{
get { return _valuesVersion1; }
set { _valuesVersion1 = value; RaisePropertyChangedAuto(); }
}
private ObservableCollection<String> _valuesVersion2;
public ObservableCollection<String> ValuesForVersion2
{
get { return _valuesVersion2; }
set { _valuesVersion2 = value; RaisePropertyChangedAuto(); }
}
private bool _isShowDifference;
public bool IsShowDifference
{
get { return _isShowDifference; }
set
{
_isShowDifference = value;
RaisePropertyChangedAuto();
}
}
private HardwareCompareResult _result;
public HardwareCompareResult Result
{
get
{
return _result;
}
set
{
_result = value;
RaisePropertyChangedAuto();
InvalidateRelayCommands();
}
}
#endregion
#region Command
public RelayCommand CompareCommand { get; set; }
#endregion
public MainWindowVM()
{
ValuesForVersion1 = new ObservableCollection<string>();
ValuesForVersion2 = new ObservableCollection<string>();
_isShowDifference = false;
CompareCommand = new RelayCommand(CompareVersions, () => !String.IsNullOrEmpty(JsonText1) && !String.IsNullOrEmpty(JsonText2));
}
#region Compare
private void CompareVersions()
{
PMR.Hardware.HardwareConfiguration h1 = CreateHardwareVersionFromJson(JsonText1);
PMR.Hardware.HardwareConfiguration h2 = CreateHardwareVersionFromJson(JsonText2);
Result = CompareHardwareVersions(h1, h2);
}
private HardwareCompareResult CompareHardwareVersions(PMR.Hardware.HardwareConfiguration h1, PMR.Hardware.HardwareConfiguration h2)
{
_result = new HardwareCompareResult();
_result.Collections.Add(CompareMotorsCollection(h1, h2));
_result.Collections.Add(CompareDancerCollection(h1, h2));
_result.Collections.Add(ComparePidControlsCollection(h1, h2));
_result.Collections.Add(CompareWindersCollection(h1, h2));
_result.Collections.Add(CompareSpeedSensorsCollection(h1, h2));
_result.Collections.Add(CompareBlowersCollection(h1, h2));
_result.Collections.Add(CompareBreakSensorCollection(h1, h2));
return _result;
}
private HardwareComponentCollectionCompareResult CompareMotorsCollection(PMR.Hardware.HardwareConfiguration h1, PMR.Hardware.HardwareConfiguration h2)
{
HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult()
{
CollectionName = "MOTORS"
};
foreach (var motorTypeCode in Enum.GetValues(typeof(PMR.Hardware.HardwareMotorType)).Cast<PMR.Hardware.HardwareMotorType>())
{
var motor1 = h1.Motors.SingleOrDefault(x => x.HardwareMotorType.ToInt32() == motorTypeCode.ToInt32());
var motor2 = h2.Motors.SingleOrDefault(x => x.HardwareMotorType.ToInt32() == motorTypeCode.ToInt32());
var componentResult = CompareComponents(
motorTypeCode.ToDescription(),
GetComponentProperties(typeof(PMR.Hardware.HardwareMotor)),
motor1,
motor2);
collection.Components.Add(componentResult);
}
return collection;
}
private HardwareComponentCollectionCompareResult CompareDancerCollection(PMR.Hardware.HardwareConfiguration h1, PMR.Hardware.HardwareConfiguration h2)
{
HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult()
{
CollectionName = "DANCERS"
};
foreach (var dancerTypeCode in Enum.GetValues(typeof(PMR.Hardware.HardwareDancerType)).Cast<PMR.Hardware.HardwareDancerType>())
{
var motor1 = h1.Dancers.SingleOrDefault(x => x.HardwareDancerType.ToInt32() == dancerTypeCode.ToInt32());
var motor2 = h2.Dancers.SingleOrDefault(x => x.HardwareDancerType.ToInt32() == dancerTypeCode.ToInt32());
var componentResult = CompareComponents(
dancerTypeCode.ToDescription(),
GetComponentProperties(typeof(Tango.PMR.Hardware.HardwareDancer)),
motor1,
motor2);
collection.Components.Add(componentResult);
}
return collection;
}
private HardwareComponentCollectionCompareResult ComparePidControlsCollection(PMR.Hardware.HardwareConfiguration h1, PMR.Hardware.HardwareConfiguration h2)
{
HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult()
{
CollectionName = "PID CONTROLS"
};
foreach (var pidControlsTypeCode in Enum.GetValues(typeof(PMR.Hardware.HardwarePidControlType)).Cast<PMR.Hardware.HardwarePidControlType>())
{
///(PMR.Hardware.HardwarePidControlType)pid.HardwarePidControlType.Code
var motor1 = h1.PidControls.SingleOrDefault(x => x.HardwarePidControlType.ToInt32() == pidControlsTypeCode.ToInt32());
var motor2 = h2.PidControls.SingleOrDefault(x => x.HardwarePidControlType.ToInt32() == pidControlsTypeCode.ToInt32());
var componentResult = CompareComponents(
pidControlsTypeCode.ToDescription(),
GetComponentProperties(typeof(Tango.PMR.Hardware.HardwarePidControl)),
motor1,
motor2);
collection.Components.Add(componentResult);
}
return collection;
}
private HardwareComponentCollectionCompareResult CompareWindersCollection(PMR.Hardware.HardwareConfiguration h1, PMR.Hardware.HardwareConfiguration h2)
{
HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult()
{
CollectionName = "WINDERS"
};
foreach (var WinderTypeCode in Enum.GetValues(typeof(PMR.Hardware.HardwareWinderType)).Cast<PMR.Hardware.HardwareWinderType>())
{
var motor1 = h1.Winders.SingleOrDefault(x => x.HardwareWinderType.ToInt32() == WinderTypeCode.ToInt32());
var motor2 = h2.Winders.SingleOrDefault(x => x.HardwareWinderType.ToInt32() == WinderTypeCode.ToInt32());
var componentResult = CompareComponents(
WinderTypeCode.ToDescription(),
GetComponentProperties(typeof(PMR.Hardware.HardwareWinder)),
motor1,
motor2);
collection.Components.Add(componentResult);
}
return collection;
}
private HardwareComponentCollectionCompareResult CompareSpeedSensorsCollection(PMR.Hardware.HardwareConfiguration h1, PMR.Hardware.HardwareConfiguration h2)
{
HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult()
{
CollectionName = "SPEED SENSORS"
};
foreach (var speedSewnsorsTypeCode in Enum.GetValues(typeof(PMR.Hardware.HardwareSpeedSensorType)).Cast<PMR.Hardware.HardwareSpeedSensorType>())
{
var motor1 = h1.SpeedSensors.SingleOrDefault(x => x.HardwareSpeedSensorType.ToInt32() == speedSewnsorsTypeCode.ToInt32());
var motor2 = h2.SpeedSensors.SingleOrDefault(x => x.HardwareSpeedSensorType.ToInt32() == speedSewnsorsTypeCode.ToInt32());
var componentResult = CompareComponents(
speedSewnsorsTypeCode.ToDescription(),
GetComponentProperties(typeof(PMR.Hardware.HardwareSpeedSensor)),
motor1,
motor2);
collection.Components.Add(componentResult);
}
return collection;
}
private HardwareComponentCollectionCompareResult CompareBlowersCollection(PMR.Hardware.HardwareConfiguration h1, PMR.Hardware.HardwareConfiguration h2)
{
HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult()
{
CollectionName = "BLOWERS"
};
foreach (var blowersTypeCode in Enum.GetValues(typeof(PMR.Hardware.HardwareBlowerType)).Cast<PMR.Hardware.HardwareBlowerType>())
{
var motor1 = h1.Blowers.SingleOrDefault(x => x.HardwareBlowerType.ToInt32() == blowersTypeCode.ToInt32());
var motor2 = h2.Blowers.SingleOrDefault(x => x.HardwareBlowerType.ToInt32() == blowersTypeCode.ToInt32());
var componentResult = CompareComponents(
blowersTypeCode.ToDescription(),
GetComponentProperties(typeof(PMR.Hardware.HardwareBlower)),
motor1,
motor2);
collection.Components.Add(componentResult);
}
return collection;
}
private HardwareComponentCollectionCompareResult CompareBreakSensorCollection(PMR.Hardware.HardwareConfiguration h1, PMR.Hardware.HardwareConfiguration h2)
{
HardwareComponentCollectionCompareResult collection = new HardwareComponentCollectionCompareResult()
{
CollectionName = "BREAK SENSOR"
};
foreach (var breakSewnsorsTypeCode in Enum.GetValues(typeof(PMR.Hardware.HardwareBreakSensorType)).Cast<PMR.Hardware.HardwareBreakSensorType>())
{
var motor1 = h1.BreakSensors.SingleOrDefault(x => x.HardwareBreakSensorType.ToInt32() == breakSewnsorsTypeCode.ToInt32());
var motor2 = h2.BreakSensors.SingleOrDefault(x => x.HardwareBreakSensorType.ToInt32() == breakSewnsorsTypeCode.ToInt32());
var componentResult = CompareComponents(
breakSewnsorsTypeCode.ToDescription(),
GetComponentProperties(typeof(PMR.Hardware.HardwareBreakSensor)),
motor1,
motor2);
collection.Components.Add(componentResult);
}
return collection;
}
private HardwareComponentCompareResult CompareComponents(String name, List<PropertyInfo> properties, Object component1, Object component2)
{
HardwareComponentCompareResult result = new HardwareComponentCompareResult();
result.ComponentName = name;
result.HasComponent1 = component1 != null;
result.HasComponent2 = component2 != null;
foreach (var prop in properties)
{
var hProp = new HardwareComponentPropertyResult();
hProp.PropertyName = prop.Name;
hProp.Value1 = component1 != null ? (prop.GetValue(component1) == null ? "" : prop.GetValue(component1).ToString()) : null;
hProp.Value2 = component2 != null ? (prop.GetValue(component2) == null ? "" : prop.GetValue(component2).ToString()) : null;
result.Properties.Add(hProp);
}
return result;
}
private List<PropertyInfo> GetComponentProperties(Type componentType)
{
List<String> exclude = new List<string>()
{
"Guid",
"ID",
"LastUpdated",
"Parameters",
};
return componentType.GetProperties(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public).Where(x => !x.PropertyType.IsClass && !exclude.Contains(x.Name)).ToList();
}
public PMR.Hardware.HardwareConfiguration CreateHardwareVersionFromJson(string json)
{
try
{
var tmpObj = JContainer.Parse(json);
}
catch (FormatException fex)
{
Console.WriteLine(fex);
}
catch (Exception ex) //some other exception
{
Console.WriteLine(ex.ToString());
}
var jsonSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore
};
PMR.Hardware.HardwareConfiguration hversion = JsonConvert.DeserializeObject<PMR.Hardware.HardwareConfiguration>(json, jsonSettings);
return hversion;
}
#endregion Compare
}
}
|