using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Text;
using static Saxonite.Net.Standard.Base.Bus.SaxUserConfig;
using System.Xml.Linq;
namespace Saxonite.Net.Standard.Base.Data
{
//==========================================================================
public class SaxConfigData
{
//-------------------------------------------------------------------
// Definitions.
private static readonly String ElementName_Config = "Config";
private static readonly String ElementName_Profile = "Profile";
private static readonly String ElementName_Eligibility = "Eligibility";
private static readonly String ElementName_HideInfo = "HideInfo";
//-------------------------------------------------------------------
/// Profile settings.
public class ProfileData
{
//---------------------------------------------------------------
/// Eligibility settings.
public class EligibilityData
{
/// Hide the eligbiility information tip.
public bool HideInfo { get; set; }
}
public EligibilityData Eligibility { get; set; } = new EligibilityData();
//---------------------------------------------------------------
/// Serialise to XML.
public static String ToXml(ProfileData profile)
{
String fn = typeof(ProfileData).FullName + ".GetConfigData";
try
{
XDocument doc = new XDocument();
XElement configElement = doc.AppendElement(ElementName_Config);
// Profile.
XElement profileElement = configElement.AppendElement(ElementName_Profile);
// Profile - Eligibility.
XElement eligibilityElement = profileElement.AppendElement(ElementName_Eligibility);
if (profile.Eligibility.HideInfo)
eligibilityElement.AppendElement(ElementName_HideInfo, "1");
return doc.GetXml();
}
catch (Exception exc)
{
SaLogger.Warn(fn + " " + ExceptionUtil.GetLogMessage(exc));
}
return "";
}
//---------------------------------------------------------------
/// Deserialise from XML.
public static ProfileData FromXml(String configData)
{
String fn = typeof(ProfileData).FullName + ".ExtractConfig";
ProfileData profile = new ProfileData();
if (StringUtil.IsEmpty(configData)) return profile;
try
{
// Load XML data.
// NB Serialised data has 'Config' as root element
XDocument doc = XDocument.Parse(configData);
XElement rootElement = doc.Root;
foreach (XElement rootChildElement in rootElement.GetChildElements())
{
String rootChildElementName = rootChildElement.GetLocalName();
if (rootChildElementName.EqualsCI(ElementName_Profile))
{
// Profile.
XElement profileElement = rootChildElement;
foreach (XElement profileChildElement in profileElement.GetChildElements())
{
String profileChildElementName = profileChildElement.GetLocalName();
if (profileChildElementName.EqualsCI(ElementName_Eligibility))
{
// Profile - Eligibility.
XElement eligibilityElement = profileChildElement;
String hideInfo = eligibilityElement.GetChildText(ElementName_HideInfo);
profile.Eligibility.HideInfo = StringUtil.ToBool(hideInfo);
}
else SaLogger.Warn(fn + " Unexpected 'Profile' child element: " + profileChildElementName);
}
}
else SaLogger.Warn(fn + " Unexpected 'Root' child element: " + rootChildElementName);
}
}
catch (Exception exc)
{
SaLogger.Warn(fn + " " + ExceptionUtil.GetLogMessage(exc));
}
return profile;
}
//---------------------------------------------------------------
}
//-------------------------------------------------------------------
}
//==========================================================================
}