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..56ef04a 100644 --- a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs +++ b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs @@ -11,10 +11,19 @@ namespace PepperDash.Core.JsonToSimpl public class JsonToSimplArrayLookupChild : JsonToSimplChildObjectBase { public string SearchPropertyName { get; set; } - public string SearchPropertyValue { get; set; } + public string SearchPropertyValue { 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 +33,28 @@ namespace PepperDash.Core.JsonToSimpl } + /// + /// For newer >=2.4.1 array lookups. + /// + /// + /// + /// + /// + /// + /// + /// + public void InitializeWithAppend(string file, string key, string pathPrefix, string pathAppend, + string pathSuffix, string searchPropertyName, string searchPropertyValue) + { + string pathPrefixWithAppend = (pathPrefix != null ? pathPrefix : "") + GetPathAppend(pathAppend); + base.Initialize(file, key, pathPrefixWithAppend, pathSuffix); + + SearchPropertyName = searchPropertyName; + SearchPropertyValue = searchPropertyValue; + } + + + //PathPrefix+ArrayName+[x]+path+PathSuffix /// /// @@ -32,9 +63,10 @@ namespace PepperDash.Core.JsonToSimpl /// protected override string GetFullPath(string path) { - return string.Format("{0}[{1}].{2}{3}", - PathPrefix == null ? "" : PathPrefix, - ArrayIndex, path, + return string.Format("{0}[{1}].{2}{3}", + PathPrefix == null ? "" : PathPrefix, + ArrayIndex, + path, PathSuffix == null ? "" : PathSuffix); } @@ -44,6 +76,30 @@ namespace PepperDash.Core.JsonToSimpl base.ProcessAll(); } + /// + /// Provides the path append for GetFullPath + /// + /// + string GetPathAppend(string a) + { + if (string.IsNullOrEmpty(a)) + { + return ""; + } + if (a.StartsWith(".")) + { + return a; + } + else + { + return "." + a; + } + } + + /// + /// + /// + /// bool FindInArray() { if (Master == null) @@ -51,41 +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); - 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 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.*")]