Files
Common-VS2019/SacsStandardBase/Base/Core/PropertySet.cs
T
2021-05-05 15:36:28 +01:00

134 lines
3.9 KiB
C#

using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.IO;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Sarand.Net.Standard.Base.Core
{
//=======================================================================
public class Property
{
//-------------------------------------------------------------------
// Data members.
private String section = "", name = "", value = "";
//-------------------------------------------------------------------
// Construction.
public Property (String section, String name, String value)
{
this.section = section;
this.name = name;
this.value = value;
}
//-------------------------------------------------------------------
// Comparison.
public bool Matches (String section, String name)
{
return (StringUtil.EqualsCI(this.section, section) && StringUtil.EqualsCI(this.name, name));
}
//-------------------------------------------------------------------
// Attributes.
public String GetSection ()
{
return section;
}
public String GetName ()
{
return name;
}
public String GetValue ()
{
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
public class PropertySet
{
//-------------------------------------------------------------------
// Data members.
private List<Property> properties = new List<Property>();
//-------------------------------------------------------------------
// Construction.
public PropertySet ()
{
}
//-------------------------------------------------------------------
/// <summary>
/// Add property to set.
/// </summary>
public void AddProperty (String section, String name, String value)
{
properties.Add(new Property(section, name, value));
}
//-------------------------------------------------------------------
/// <summary>
/// Retrieve value from property set.
/// </summary>
public String GetPropertyValue (String section, String name)
{
foreach (var property in properties)
{
if (property.Matches(section, name))
return property.GetValue();
}
return "";
}
//-------------------------------------------------------------------
// Retrieve peoperties from file.
public static PropertySet GetPropertiesFromFile (String filepath)
{
if (StringUtil.IsEmpty(filepath))
{
SaLogger.Warn("PropertySet.GetPropertiesFromFile Blank file path specified");
return null;
}
if (!FileUtil.IsFile(filepath))
{
SaLogger.Warn("PropertySet.GetPropertiesFromFile Invalid file specified: '" + filepath + "'");
return null;
}
PropertySet propertySet = new PropertySet();
String section = "";
foreach (var row in FileUtil.ReadAllFileLines(filepath))
{
String data = row.Trim();
// Blank lines:
if (String.IsNullOrEmpty(data))
continue;
// Check for comment:
else if (data.Left(1) == ";" || data.Left(2) == "//")
continue;
// Check for [Section]:
else if (data[0] == '[')
{
section = data.Substring(1).Split(']')[0];
}
else
{
// Otherwise it is a named value:
propertySet.AddProperty(section, data.Split('=')[0], string.Join("=", data.Split('=').Skip(1).ToArray()));
}
}
return propertySet;
}
//-------------------------------------------------------------------
// Utilities.
public void Dump ()
{
System.Diagnostics.Debug.WriteLine("PropertySet dump:");
foreach (var property in properties)
{
string info = property.GetSection();
if (!String.IsNullOrEmpty(info)) info += ".";
info += property.GetName() + "=" + property.GetValue();
System.Diagnostics.Debug.WriteLine("\t" + info);
}
}
//-------------------------------------------------------------------
}
//=======================================================================
}