From ef489ab48eeb39bd243145eab2f0aeab48b2a554 Mon Sep 17 00:00:00 2001 From: Heath Volmer Date: Tue, 28 May 2019 16:48:57 -0600 Subject: [PATCH 1/3] Added AppendToPathPrefix to JSON array modules, to facilitate array lookup modules chained together; corresponds to 2.4.1 modules --- .../JsonToSimpl/EventArgs and Constants.cs | 1 + .../JsonToSimplArrayLookupChild.cs | 63 ++++++++++++++++++- .../JsonToSimpl/JsonToSimplMaster.cs | 8 +-- .../Properties/AssemblyInfo.cs | 2 +- 4 files changed, 67 insertions(+), 7 deletions(-) diff --git a/Pepperdash Core/Pepperdash Core/JsonToSimpl/EventArgs and Constants.cs b/Pepperdash Core/Pepperdash Core/JsonToSimpl/EventArgs and Constants.cs index e6e13a5..b8259b9 100644 --- a/Pepperdash Core/Pepperdash Core/JsonToSimpl/EventArgs and Constants.cs +++ b/Pepperdash Core/Pepperdash Core/JsonToSimpl/EventArgs and Constants.cs @@ -13,6 +13,7 @@ namespace PepperDash.Core.JsonToSimpl public const ushort BoolValueChange = 1; public const ushort UshortValueChange = 101; public const ushort StringValueChange = 201; + public const ushort FullPathToArrayChange = 202; } //**************************************************************************************************// diff --git a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs index 753dbc3..c3295f3 100644 --- a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs +++ b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs @@ -12,9 +12,19 @@ namespace PepperDash.Core.JsonToSimpl { public string SearchPropertyName { get; set; } public string SearchPropertyValue { get; set; } + public string AppendToPathPrefix { get; set; } int ArrayIndex; + /// + /// For <2.4.1 array lookups + /// + /// + /// + /// + /// + /// + /// public void Initialize(string file, string key, string pathPrefix, string pathSuffix, string searchPropertyName, string searchPropertyValue) { @@ -24,6 +34,27 @@ namespace PepperDash.Core.JsonToSimpl } + /// + /// For newer >=2.4.1 array lookups. + /// + /// + /// + /// + /// + /// + /// + /// + public void Initialize(string file, string key, string pathPrefix, string pathAppend, string pathSuffix, + string searchPropertyName, string searchPropertyValue) + { + base.Initialize(file, key, pathPrefix, pathSuffix); + SearchPropertyName = searchPropertyName; + SearchPropertyValue = searchPropertyValue; + AppendToPathPrefix = pathAppend; + } + + + //PathPrefix+ArrayName+[x]+path+PathSuffix /// /// @@ -32,9 +63,11 @@ namespace PepperDash.Core.JsonToSimpl /// protected override string GetFullPath(string path) { - return string.Format("{0}[{1}].{2}{3}", + return string.Format("{0}[{1}]{2}.{3}{4}", PathPrefix == null ? "" : PathPrefix, - ArrayIndex, path, + ArrayIndex, + GetPathAppend(), + path, PathSuffix == null ? "" : PathSuffix); } @@ -44,6 +77,31 @@ namespace PepperDash.Core.JsonToSimpl base.ProcessAll(); } + /// + /// Provides the path append for GetFullPath + /// + /// + string GetPathAppend() + { + var a = AppendToPathPrefix; + if (string.IsNullOrEmpty(a)) + { + return ""; + } + if (a.StartsWith(".")) + { + return a; + } + else + { + return "." + a; + } + } + + /// + /// + /// + /// bool FindInArray() { if (Master == null) @@ -75,6 +133,7 @@ namespace PepperDash.Core.JsonToSimpl this.LinkedToObject = true; ArrayIndex = array.IndexOf(item); + OnStringChange(GetFullPath(""), 0, JsonToSimplConstants.FullPathToArrayChange); Debug.Console(1, "JSON Child[{0}] Found array match at index {1}", Key, ArrayIndex); return true; } diff --git a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplMaster.cs b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplMaster.cs index 4818711..bd48fa9 100644 --- a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplMaster.cs +++ b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplMaster.cs @@ -106,10 +106,10 @@ namespace PepperDash.Core.JsonToSimpl /// public void AddChild(JsonToSimplChildObjectBase child) { - if (Children.Contains(child)) { - Children.Remove(child); - } - Children.Add(child); + if (!Children.Contains(child)) + { + Children.Add(child); + } } /// diff --git a/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs b/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs index f1b567a..63fe3d0 100644 --- a/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs +++ b/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs @@ -4,4 +4,4 @@ [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Pepperdash_Core")] [assembly: AssemblyCopyright("Copyright © PepperDash 2019")] -[assembly: AssemblyVersion("1.0.20.*")] +[assembly: AssemblyVersion("1.0.21.*")] From 40b8ae6219c2586da067f0f20d539298763c7226 Mon Sep 17 00:00:00 2001 From: Heath Volmer Date: Wed, 29 May 2019 08:15:31 -0600 Subject: [PATCH 2/3] Changed Array module Initialize to InitializeWithAppend --- .../JsonToSimpl/JsonToSimplArrayLookupChild.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs index c3295f3..c63ab4d 100644 --- a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs +++ b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs @@ -44,8 +44,8 @@ namespace PepperDash.Core.JsonToSimpl /// /// /// - public void Initialize(string file, string key, string pathPrefix, string pathAppend, string pathSuffix, - string searchPropertyName, string searchPropertyValue) + public void InitializeWithAppend(string file, string key, string pathPrefix, string pathAppend, + string pathSuffix, string searchPropertyName, string searchPropertyValue) { base.Initialize(file, key, pathPrefix, pathSuffix); SearchPropertyName = searchPropertyName; From 2b79071bd8c9c0b0f1b3fbe3bb073302bb11c40d Mon Sep 17 00:00:00 2001 From: Jason DeVito Date: Mon, 3 Jun 2019 13:30:13 -0500 Subject: [PATCH 3/3] Updates to json2.4.1 to resolve issues with reading nested array objects --- .../JsonToSimplArrayLookupChild.cs | 97 ++++++++++--------- .../JsonToSimpl/JsonToSimplChildObjectBase.cs | 4 +- 2 files changed, 51 insertions(+), 50 deletions(-) diff --git a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs index c63ab4d..56ef04a 100644 --- a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs +++ b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs @@ -11,8 +11,7 @@ namespace PepperDash.Core.JsonToSimpl public class JsonToSimplArrayLookupChild : JsonToSimplChildObjectBase { public string SearchPropertyName { get; set; } - public string SearchPropertyValue { get; set; } - public string AppendToPathPrefix { get; set; } + public string SearchPropertyValue { get; set; } int ArrayIndex; @@ -46,11 +45,12 @@ namespace PepperDash.Core.JsonToSimpl /// public void InitializeWithAppend(string file, string key, string pathPrefix, string pathAppend, string pathSuffix, string searchPropertyName, string searchPropertyValue) - { - base.Initialize(file, key, pathPrefix, pathSuffix); + { + string pathPrefixWithAppend = (pathPrefix != null ? pathPrefix : "") + GetPathAppend(pathAppend); + base.Initialize(file, key, pathPrefixWithAppend, pathSuffix); + SearchPropertyName = searchPropertyName; - SearchPropertyValue = searchPropertyValue; - AppendToPathPrefix = pathAppend; + SearchPropertyValue = searchPropertyValue; } @@ -63,11 +63,10 @@ namespace PepperDash.Core.JsonToSimpl /// protected override string GetFullPath(string path) { - return string.Format("{0}[{1}]{2}.{3}{4}", - PathPrefix == null ? "" : PathPrefix, - ArrayIndex, - GetPathAppend(), - path, + return string.Format("{0}[{1}].{2}{3}", + PathPrefix == null ? "" : PathPrefix, + ArrayIndex, + path, PathSuffix == null ? "" : PathSuffix); } @@ -81,9 +80,8 @@ namespace PepperDash.Core.JsonToSimpl /// Provides the path append for GetFullPath /// /// - string GetPathAppend() + string GetPathAppend(string a) { - var a = AppendToPathPrefix; if (string.IsNullOrEmpty(a)) { return ""; @@ -109,42 +107,45 @@ namespace PepperDash.Core.JsonToSimpl if (Master.JsonObject == null) throw new InvalidOperationException("Cannot do operations before master JSON has read"); if (PathPrefix == null) - throw new InvalidOperationException("Cannot do operations before PathPrefix is set"); - - var token = Master.JsonObject.SelectToken(PathPrefix); - if (token is JArray) - { - var array = token as JArray; - try - { - var item = array.FirstOrDefault(o => - { - var prop = o[SearchPropertyName]; - return prop != null && prop.Value() - .Equals(SearchPropertyValue, StringComparison.OrdinalIgnoreCase); - }); - if (item == null) - { - Debug.Console(1, "JSON Child[{0}] Array '{1}' '{2}={3}' not found: ", Key, - PathPrefix, SearchPropertyName, SearchPropertyValue); - this.LinkedToObject = false; - return false; - } - - this.LinkedToObject = true; - ArrayIndex = array.IndexOf(item); - OnStringChange(GetFullPath(""), 0, JsonToSimplConstants.FullPathToArrayChange); - Debug.Console(1, "JSON Child[{0}] Found array match at index {1}", Key, ArrayIndex); - return true; - } - catch (Exception e) - { - Debug.Console(1, "JSON Child[{0}] Array '{1}' lookup error: '{2}={3}'\r{4}", Key, - PathPrefix, SearchPropertyName, SearchPropertyValue, e); - } + throw new InvalidOperationException("Cannot do operations before PathPrefix is set"); + + + var token = Master.JsonObject.SelectToken(PathPrefix); + if (token is JArray) + { + var array = token as JArray; + try + { + var item = array.FirstOrDefault(o => + { + var prop = o[SearchPropertyName]; + return prop != null && prop.Value() + .Equals(SearchPropertyValue, StringComparison.OrdinalIgnoreCase); + }); + if (item == null) + { + Debug.Console(1, "JSON Child[{0}] Array '{1}' '{2}={3}' not found: ", Key, + PathPrefix, SearchPropertyName, SearchPropertyValue); + this.LinkedToObject = false; + return false; + } + + this.LinkedToObject = true; + ArrayIndex = array.IndexOf(item); + OnStringChange(string.Format("{0}[{1}]", PathPrefix, ArrayIndex), 0, JsonToSimplConstants.FullPathToArrayChange); + Debug.Console(1, "JSON Child[{0}] Found array match at index {1}", Key, ArrayIndex); + return true; + } + catch (Exception e) + { + Debug.Console(1, "JSON Child[{0}] Array '{1}' lookup error: '{2}={3}'\r{4}", Key, + PathPrefix, SearchPropertyName, SearchPropertyValue, e); + } + } + else + { + Debug.Console(1, "JSON Child[{0}] Path '{1}' is not an array", Key, PathPrefix); } - else - Debug.Console(1, "JSON Child[{0}] Path '{1}' is not an array", Key, PathPrefix); return false; } diff --git a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplChildObjectBase.cs b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplChildObjectBase.cs index cbed005..ec855f9 100644 --- a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplChildObjectBase.cs +++ b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplChildObjectBase.cs @@ -28,7 +28,7 @@ namespace PepperDash.Core.JsonToSimpl /// This will be prepended to all paths to allow path swapping or for more organized /// sub-paths /// - public string PathPrefix { get; protected set; } + public string PathPrefix { get; protected set; } /// /// This is added to the end of all paths @@ -285,7 +285,7 @@ namespace PepperDash.Core.JsonToSimpl protected virtual string GetFullPath(string path) { return (PathPrefix != null ? PathPrefix : "") + - path + (PathSuffix != null ? PathSuffix : ""); + path + (PathSuffix != null ? PathSuffix : ""); } // Helpers for events