diff --git a/Pepperdash Core/Pepperdash Core/JsonToSimpl/EventArgs and Constants.cs b/Pepperdash Core/Pepperdash Core/JsonToSimpl/EventArgs and Constants.cs
index bbbf7e2..4fa4dee 100644
--- a/Pepperdash Core/Pepperdash Core/JsonToSimpl/EventArgs and Constants.cs
+++ b/Pepperdash Core/Pepperdash Core/JsonToSimpl/EventArgs and Constants.cs
@@ -1,125 +1,129 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-
-namespace PepperDash.Core.JsonToSimpl
-{
- ///
- /// Constants for Simpl modules
- ///
- public class JsonToSimplConstants
- {
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+
+namespace PepperDash.Core.JsonToSimpl
+{
+ ///
+ /// Constants for Simpl modules
+ ///
+ public class JsonToSimplConstants
+ {
public const ushort JsonIsValidBoolChange = 2;
-
-
- public const ushort BoolValueChange = 1;
- public const ushort UshortValueChange = 101;
- public const ushort StringValueChange = 201;
+
+
+ public const ushort BoolValueChange = 1;
+ public const ushort UshortValueChange = 101;
+ public const ushort StringValueChange = 201;
public const ushort FullPathToArrayChange = 202;
- public const ushort ActualFilePathChange = 203;
- }
-
- //**************************************************************************************************//
- public delegate void SPlusValuesDelegate();
-
- public class SPlusValueWrapper
- {
- public SPlusType ValueType { get; private set; }
- public ushort Index { get; private set; }
- public ushort BoolUShortValue { get; set; }
- public string StringValue { get; set; }
-
- public SPlusValueWrapper() { }
-
- public SPlusValueWrapper(SPlusType type, ushort index)
- {
- ValueType = type;
- Index = index;
- }
- }
-
- public enum SPlusType
- {
- Digital, Analog, String
- }
-
-
- //**************************************************************************************************//
- public class BoolChangeEventArgs : EventArgs
- {
- public bool State { get; set; }
- public ushort IntValue { get { return (ushort)(State ? 1 : 0); } }
- public ushort Type { get; set; }
- public ushort Index { get; set; }
-
- public BoolChangeEventArgs()
- {
- }
-
- public BoolChangeEventArgs(bool state, ushort type)
- {
- State = state;
- Type = type;
- }
-
- public BoolChangeEventArgs(bool state, ushort type, ushort index)
- {
- State = state;
- Type = type;
- Index = index;
- }
- }
-
- //**************************************************************************************************//
- public class UshrtChangeEventArgs : EventArgs
- {
- public ushort IntValue { get; set; }
- public ushort Type { get; set; }
- public ushort Index { get; set; }
-
- public UshrtChangeEventArgs()
- {
- }
-
- public UshrtChangeEventArgs(ushort intValue, ushort type)
- {
- IntValue = intValue;
- Type = type;
- }
-
- public UshrtChangeEventArgs(ushort intValue, ushort type, ushort index)
- {
- IntValue = intValue;
- Type = type;
- Index = index;
- }
- }
-
- //**************************************************************************************************//
- public class StringChangeEventArgs : EventArgs
- {
- public string StringValue { get; set; }
- public ushort Type { get; set; }
- public ushort Index { get; set; }
-
- public StringChangeEventArgs()
- {
- }
-
- public StringChangeEventArgs(string stringValue, ushort type)
- {
- StringValue = stringValue;
- Type = type;
- }
-
- public StringChangeEventArgs(string stringValue, ushort type, ushort index)
- {
- StringValue = stringValue;
- Type = type;
- Index = index;
- }
-
- }
+ public const ushort ActualFilePathChange = 203;
+
+ // TODO: pdc-20: Added below constants for passing file path and filename back to S+
+ public const ushort FilenameResolvedChange = 204;
+ public const ushort FilePathResolvedChange = 205;
+ }
+
+ //**************************************************************************************************//
+ public delegate void SPlusValuesDelegate();
+
+ public class SPlusValueWrapper
+ {
+ public SPlusType ValueType { get; private set; }
+ public ushort Index { get; private set; }
+ public ushort BoolUShortValue { get; set; }
+ public string StringValue { get; set; }
+
+ public SPlusValueWrapper() { }
+
+ public SPlusValueWrapper(SPlusType type, ushort index)
+ {
+ ValueType = type;
+ Index = index;
+ }
+ }
+
+ public enum SPlusType
+ {
+ Digital, Analog, String
+ }
+
+
+ //**************************************************************************************************//
+ public class BoolChangeEventArgs : EventArgs
+ {
+ public bool State { get; set; }
+ public ushort IntValue { get { return (ushort)(State ? 1 : 0); } }
+ public ushort Type { get; set; }
+ public ushort Index { get; set; }
+
+ public BoolChangeEventArgs()
+ {
+ }
+
+ public BoolChangeEventArgs(bool state, ushort type)
+ {
+ State = state;
+ Type = type;
+ }
+
+ public BoolChangeEventArgs(bool state, ushort type, ushort index)
+ {
+ State = state;
+ Type = type;
+ Index = index;
+ }
+ }
+
+ //**************************************************************************************************//
+ public class UshrtChangeEventArgs : EventArgs
+ {
+ public ushort IntValue { get; set; }
+ public ushort Type { get; set; }
+ public ushort Index { get; set; }
+
+ public UshrtChangeEventArgs()
+ {
+ }
+
+ public UshrtChangeEventArgs(ushort intValue, ushort type)
+ {
+ IntValue = intValue;
+ Type = type;
+ }
+
+ public UshrtChangeEventArgs(ushort intValue, ushort type, ushort index)
+ {
+ IntValue = intValue;
+ Type = type;
+ Index = index;
+ }
+ }
+
+ //**************************************************************************************************//
+ public class StringChangeEventArgs : EventArgs
+ {
+ public string StringValue { get; set; }
+ public ushort Type { get; set; }
+ public ushort Index { get; set; }
+
+ public StringChangeEventArgs()
+ {
+ }
+
+ public StringChangeEventArgs(string stringValue, ushort type)
+ {
+ StringValue = stringValue;
+ Type = type;
+ }
+
+ public StringChangeEventArgs(string stringValue, ushort type, ushort index)
+ {
+ StringValue = stringValue;
+ Type = type;
+ Index = index;
+ }
+
+ }
}
\ No newline at end of file
diff --git a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplFileMaster.cs b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplFileMaster.cs
index bd97267..0047c6c 100644
--- a/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplFileMaster.cs
+++ b/Pepperdash Core/Pepperdash Core/JsonToSimpl/JsonToSimplFileMaster.cs
@@ -1,178 +1,195 @@
-using System;
-//using System.IO;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-using Crestron.SimplSharp.CrestronIO;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-
-namespace PepperDash.Core.JsonToSimpl
-{
- public class JsonToSimplFileMaster : JsonToSimplMaster
- {
- ///
- /// Sets the filepath as well as registers this with the Global.Masters list
- ///
- public string Filepath { get; private set; }
-
- public string ActualFilePath { get; private set; }
-
- /*****************************************************************************************/
- /** Privates **/
-
-
- // The JSON file in JObject form
- // For gathering the incoming data
- object StringBuilderLock = new object();
- // To prevent multiple same-file access
- static object FileLock = new object();
-
- /*****************************************************************************************/
-
- ///
- /// SIMPL+ default constructor.
- ///
- public JsonToSimplFileMaster()
- {
- }
-
- ///
- /// Read, evaluate and udpate status
- ///
- public void EvaluateFile(string filepath)
- {
- Filepath = filepath;
-
- OnBoolChange(false, 0, JsonToSimplConstants.JsonIsValidBoolChange);
- if (string.IsNullOrEmpty(Filepath))
- {
- CrestronConsole.PrintLine("Cannot evaluate file. JSON file path not set");
- return;
- }
-
- // Resolve wildcard
- var dir = Path.GetDirectoryName(Filepath);
- Debug.Console(1, "Checking directory {0}", dir);
- var fileName = Path.GetFileName(Filepath);
- var directory = new DirectoryInfo(dir);
-
- var actualFile = directory.GetFiles(fileName).FirstOrDefault();
- if(actualFile == null)
- {
- var msg = string.Format("JSON file not found: {0}", Filepath);
- CrestronConsole.PrintLine(msg);
- ErrorLog.Error(msg);
- return;
- }
- //var actualFileName = actualFile.FullName;
+using System;
+//using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+using Crestron.SimplSharp.CrestronIO;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace PepperDash.Core.JsonToSimpl
+{
+ public class JsonToSimplFileMaster : JsonToSimplMaster
+ {
+ ///
+ /// Sets the filepath as well as registers this with the Global.Masters list
+ ///
+ public string Filepath { get; private set; }
+
+ public string ActualFilePath { get; private set; }
+
+ // TODO: pdc-20: added to return filename back to SIMPL
+ public string Filename { get; private set; }
+ public string FilePathName { get; private set; }
+
+ /*****************************************************************************************/
+ /** Privates **/
+
+
+ // The JSON file in JObject form
+ // For gathering the incoming data
+ object StringBuilderLock = new object();
+ // To prevent multiple same-file access
+ static object FileLock = new object();
+
+ /*****************************************************************************************/
+
+ ///
+ /// SIMPL+ default constructor.
+ ///
+ public JsonToSimplFileMaster()
+ {
+ }
+
+ ///
+ /// Read, evaluate and udpate status
+ ///
+ public void EvaluateFile(string filepath)
+ {
+ Filepath = filepath;
+
+ OnBoolChange(false, 0, JsonToSimplConstants.JsonIsValidBoolChange);
+ if (string.IsNullOrEmpty(Filepath))
+ {
+ CrestronConsole.PrintLine("Cannot evaluate file. JSON file path not set");
+ return;
+ }
+
+ // Resolve wildcard
+ var dir = Path.GetDirectoryName(Filepath);
+ Debug.Console(1, "Checking directory {0}", dir);
+ var fileName = Path.GetFileName(Filepath);
+ var directory = new DirectoryInfo(dir);
+
+ var actualFile = directory.GetFiles(fileName).FirstOrDefault();
+ if (actualFile == null)
+ {
+ var msg = string.Format("JSON file not found: {0}", Filepath);
+ CrestronConsole.PrintLine(msg);
+ ErrorLog.Error(msg);
+ return;
+ }
+
+ // \xSE\xR\PDT000-Template_Main_Config-Combined_DSP_v00.02.json
+ // \USER\PDT000-Template_Main_Config-Combined_DSP_v00.02.json
ActualFilePath = actualFile.FullName;
- OnStringChange(ActualFilePath, 0, JsonToSimplConstants.ActualFilePathChange);
- Debug.Console(1, "Actual JSON file is {0}", ActualFilePath);
-
- string json = File.ReadToEnd(ActualFilePath, System.Text.Encoding.ASCII);
-
- try
- {
- JsonObject = JObject.Parse(json);
- foreach (var child in Children)
- child.ProcessAll();
- OnBoolChange(true, 0, JsonToSimplConstants.JsonIsValidBoolChange);
- }
- catch (Exception e)
- {
- var msg = string.Format("JSON parsing failed:\r{0}", e);
- CrestronConsole.PrintLine(msg);
- ErrorLog.Error(msg);
- return;
- }
- }
- public void setDebugLevel(int level) {
- Debug.SetDebugLevel(level);
- }
- public override void Save()
- {
- // this code is duplicated in the other masters!!!!!!!!!!!!!
- UnsavedValues = new Dictionary();
- // Make each child update their values into master object
- foreach (var child in Children)
- {
- Debug.Console(1, "Master [{0}] checking child [{1}] for updates to save", UniqueID, child.Key);
- child.UpdateInputsForMaster();
- }
-
- if (UnsavedValues == null || UnsavedValues.Count == 0)
- {
- Debug.Console(1, "Master [{0}] No updated values to save. Skipping", UniqueID);
- return;
- }
- lock (FileLock)
- {
- Debug.Console(1, "Saving");
- foreach (var path in UnsavedValues.Keys)
- {
- var tokenToReplace = JsonObject.SelectToken(path);
- if (tokenToReplace != null)
- {// It's found
- tokenToReplace.Replace(UnsavedValues[path]);
- Debug.Console(1, "JSON Master[{0}] Updating '{1}'", UniqueID, path);
- }
- else // No token. Let's make one
- {
- //http://stackoverflow.com/questions/17455052/how-to-set-the-value-of-a-json-path-using-json-net
- Debug.Console(1, "JSON Master[{0}] Cannot write value onto missing property: '{1}'", UniqueID, path);
-
-// JContainer jpart = JsonObject;
-// // walk down the path and find where it goes
-//#warning Does not handle arrays.
-// foreach (var part in path.Split('.'))
-// {
-
-// var openPos = part.IndexOf('[');
-// if (openPos > -1)
-// {
-// openPos++; // move to number
-// var closePos = part.IndexOf(']');
-// var arrayName = part.Substring(0, openPos - 1); // get the name
-// var index = Convert.ToInt32(part.Substring(openPos, closePos - openPos));
-
-// // Check if the array itself exists and add the item if so
-// if (jpart[arrayName] != null)
-// {
-// var arrayObj = jpart[arrayName] as JArray;
-// var item = arrayObj[index];
-// if (item == null)
-// arrayObj.Add(new JObject());
-// }
-
-// Debug.Console(0, "IGNORING MISSING ARRAY VALUE FOR NOW");
-// continue;
-// }
-// // Build the
-// if (jpart[part] == null)
-// jpart.Add(new JProperty(part, new JObject()));
-// jpart = jpart[part] as JContainer;
-// }
-// jpart.Replace(UnsavedValues[path]);
- }
- }
- using (StreamWriter sw = new StreamWriter(ActualFilePath))
- {
- try
- {
- sw.Write(JsonObject.ToString());
- sw.Flush();
- }
- catch (Exception e)
- {
- string err = string.Format("Error writing JSON file:\r{0}", e);
- Debug.Console(0, err);
- ErrorLog.Warn(err);
- return;
- }
- }
- }
- }
- }
-}
+ OnStringChange(ActualFilePath, 0, JsonToSimplConstants.ActualFilePathChange);
+ Debug.Console(1, "Actual JSON file is {0}", ActualFilePath);
+
+ // TODO: pdc-20: added to retrun filename to SIMPL
+ Filename = actualFile.Name;
+ OnStringChange(Filename, 0, JsonToSimplConstants.FilenameResolvedChange);
+ Debug.Console(1, "JSON Filename is {0}", Filename);
+
+ // TODO: pdc-20: added to return the file path to SIMPL
+ FilePathName = string.Format(@"{0}\", actualFile.DirectoryName);
+ OnStringChange(FilePathName, 0, JsonToSimplConstants.FilePathResolvedChange);
+ Debug.Console(1, "JSON File Path is {0}", FilePathName);
+
+ string json = File.ReadToEnd(ActualFilePath, System.Text.Encoding.ASCII);
+
+ try
+ {
+ JsonObject = JObject.Parse(json);
+ foreach (var child in Children)
+ child.ProcessAll();
+ OnBoolChange(true, 0, JsonToSimplConstants.JsonIsValidBoolChange);
+ }
+ catch (Exception e)
+ {
+ var msg = string.Format("JSON parsing failed:\r{0}", e);
+ CrestronConsole.PrintLine(msg);
+ ErrorLog.Error(msg);
+ return;
+ }
+ }
+ public void setDebugLevel(int level)
+ {
+ Debug.SetDebugLevel(level);
+ }
+ public override void Save()
+ {
+ // this code is duplicated in the other masters!!!!!!!!!!!!!
+ UnsavedValues = new Dictionary();
+ // Make each child update their values into master object
+ foreach (var child in Children)
+ {
+ Debug.Console(1, "Master [{0}] checking child [{1}] for updates to save", UniqueID, child.Key);
+ child.UpdateInputsForMaster();
+ }
+
+ if (UnsavedValues == null || UnsavedValues.Count == 0)
+ {
+ Debug.Console(1, "Master [{0}] No updated values to save. Skipping", UniqueID);
+ return;
+ }
+ lock (FileLock)
+ {
+ Debug.Console(1, "Saving");
+ foreach (var path in UnsavedValues.Keys)
+ {
+ var tokenToReplace = JsonObject.SelectToken(path);
+ if (tokenToReplace != null)
+ {// It's found
+ tokenToReplace.Replace(UnsavedValues[path]);
+ Debug.Console(1, "JSON Master[{0}] Updating '{1}'", UniqueID, path);
+ }
+ else // No token. Let's make one
+ {
+ //http://stackoverflow.com/questions/17455052/how-to-set-the-value-of-a-json-path-using-json-net
+ Debug.Console(1, "JSON Master[{0}] Cannot write value onto missing property: '{1}'", UniqueID, path);
+
+ // JContainer jpart = JsonObject;
+ // // walk down the path and find where it goes
+ //#warning Does not handle arrays.
+ // foreach (var part in path.Split('.'))
+ // {
+
+ // var openPos = part.IndexOf('[');
+ // if (openPos > -1)
+ // {
+ // openPos++; // move to number
+ // var closePos = part.IndexOf(']');
+ // var arrayName = part.Substring(0, openPos - 1); // get the name
+ // var index = Convert.ToInt32(part.Substring(openPos, closePos - openPos));
+
+ // // Check if the array itself exists and add the item if so
+ // if (jpart[arrayName] != null)
+ // {
+ // var arrayObj = jpart[arrayName] as JArray;
+ // var item = arrayObj[index];
+ // if (item == null)
+ // arrayObj.Add(new JObject());
+ // }
+
+ // Debug.Console(0, "IGNORING MISSING ARRAY VALUE FOR NOW");
+ // continue;
+ // }
+ // // Build the
+ // if (jpart[part] == null)
+ // jpart.Add(new JProperty(part, new JObject()));
+ // jpart = jpart[part] as JContainer;
+ // }
+ // jpart.Replace(UnsavedValues[path]);
+ }
+ }
+ using (StreamWriter sw = new StreamWriter(ActualFilePath))
+ {
+ try
+ {
+ sw.Write(JsonObject.ToString());
+ sw.Flush();
+ }
+ catch (Exception e)
+ {
+ string err = string.Format("Error writing JSON file:\r{0}", e);
+ Debug.Console(0, err);
+ ErrorLog.Warn(err);
+ return;
+ }
+ }
+ }
+ }
+ }
+}