History

GSF.PhasorProtocols.UI: Updated InputWizardDevices with improved phase guess operation (like that found in web device wizard).

J. Ritchie Carroll committed 6 years ago

Commit da5c72a1 parent a2890161 file · +24 −9Browse files

Unified · Split

Source/Libraries/GSF.PhasorProtocols/UI/WPF/ViewModels/InputWizardDevices.cs+24−9
@@ -998,33 +998,48 @@ namespace GSF.PhasorProtocols.UI.ViewModels · 997 unmodified lines
998 998
999 if (existingDevice?.ID > 0)999 if (existingDevice?.ID > 0)
1000 existingPhasors = Phasor.Load(null, Phasor.LoadKeys(null, existingDevice.ID)).ToDictionary(phasor => phasor.SourceIndex - 1, phasor => phasor);1000 existingPhasors = Phasor.Load(null, Phasor.LoadKeys(null, existingDevice.ID)).ToDictionary(phasor => phasor.SourceIndex - 1, phasor => phasor);
1001
1002 bool phaseMatch(string phaseLabel, string[] phaseMatches)
1003 {
1004 foreach (string match in phaseMatches)
1005 {
1006 string[] variations = { $" {match}", $"{match} ", $"_{match}", $"{match}_", $"_{match}_", $".{match}", $"{match}.", $".{match}." };
1007
1008 if (variations.Any(matchVariation => phaseLabel.IndexOf(matchVariation, StringComparison.Ordinal) > -1))
1009 return true;
1010 }
1011
1012 return false;
1013 }
1001 1014
1002 string guessPhase(string phase, string phasorLabel)1015 string guessPhase(string phase, string phasorLabel)
1003 {1016 {
1004 if (!string.IsNullOrWhiteSpace(phase) && phase != "+")1017 if (!string.IsNullOrWhiteSpace(phase) && phase != "+")
1005 return phase;1018 return phase;
1006 1019
1007 if (phasorLabel.IndexOf("_VA", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_IA", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" A ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" APV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" API", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VA ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IA ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VAPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IAPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".AV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".AI", StringComparison.Ordinal) > -1)1020 if (phaseMatch(phasorLabel, new[] { "VA", " IA", "APV", "API", "VAPM", "IAPM", "AV", "AI" }))
1008 return "A";1021 return "A";
1009 1022
1010 if (phasorLabel.IndexOf("_VB", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_IB", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" B ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" BPV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" BPI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VB ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IB ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VBPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IBPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".BV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".BI", StringComparison.Ordinal) > -1)1023 if (phaseMatch(phasorLabel, new[] { "VB", "IB", "BPV", "BPI", "VBPM", "IBPM", "BV", "BI" }))
1011 return "B";1024 return "B";
1012 1025
1013 if (phasorLabel.IndexOf("_VC", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_IC", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" C ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" CPV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" CPI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VC ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IC ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VCPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("ICPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".CV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".CI", StringComparison.Ordinal) > -1)1026 if (phaseMatch(phasorLabel, new[] { "VC", "IC", "CPV", "CPI", "VCPM", "ICPM", "CV", "CI" }))
1014 return "C";1027 return "C";
1015 1028
1016 if (phasorLabel.IndexOf("_VN", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_IN", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" NEUT ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" NPV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" NPI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VN ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IN ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VNPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("INPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".NV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".NI", StringComparison.Ordinal) > -1)1029 if (phaseMatch(phasorLabel, new[] { "VN", "IN", "NEUT", "NPV", "NPI", "VNPM", "INPM", "NV", "NI" }))
1017 return "N";1030 return "N";
1018 1031
1019 if (phasorLabel.IndexOf("_V0", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_I0", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" ZERO ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" ZPV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" ZPI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VZ ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IZ ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VSPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("VZPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("IZPM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".ZV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".ZI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_ZS", StringComparison.Ordinal) > -1)1032 if (phaseMatch(phasorLabel, new[] { "V0", "I0", "ZERO", "ZPV", "ZPI", "VSPM", "VZPM", "IZPM", "ZS", "ZSV", "ZSI", "0SV", "0SI" }))
1020 return "0";1033 return "0";
1021 1034
1022 if (phasorLabel.IndexOf("_V2", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_I2", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" NEG ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" -SV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" -SI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("V2 ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("I2 ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("V2PM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("I2PM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".-V", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".-I", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_NS", StringComparison.Ordinal) > -1)1035 if (phaseMatch(phasorLabel, new[] { "V1", "I1", "POS", "V1PM", "I1PM", "PS", "PSV", "PSI", "+SV", "+SI", "+V", "+I" }))
1036 return "+";
1037
1038 // -V and -I may match too often, so check these last
1039 if (phaseMatch(phasorLabel, new[] { "V2", "I2", "NEG", "-SV", "-SI", "V2PM", "I2PM", "NS", "NSV", "NSI", "-V", "-I" }))
1023 return "-";1040 return "-";
1024 1041
1025 return phasorLabel.IndexOf("_V1", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_I1", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" POS ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" +SV", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" +SI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(" SI", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("V1 ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("I1 ", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("V1PM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("I1PM", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".+V", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf(".+I", StringComparison.Ordinal) > -1 || phasorLabel.IndexOf("_PS", StringComparison.Ordinal) > -11042 return string.IsNullOrWhiteSpace(phase) ? "?" : phase;
1026 ? "+"
1027 : string.IsNullOrWhiteSpace(phase) ? "?" : phase;
1028 }1043 }
1029 1044
1030 string guessBaseKV(string baseKV, string phasorLabel, string deviceLabel)1045 string guessBaseKV(string baseKV, string phasorLabel, string deviceLabel)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t