using System.Collections.Generic;
using System.IO;
using System.Linq;
using CTA.FeatureDetection.Common.Models.Configuration;
using CTA.Rules.Config;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace CTA.FeatureDetection.Common.Models.Parsers
{
///
/// Deserializes Features' assembly metadata from json format
///
public class FeatureConfigParser
{
private static ILogger Logger => Log.Logger;
private static readonly Dictionary _configCache = new Dictionary();
///
/// Deserializes one or more feature config files
///
/// Feature config file paths
/// Deserialized FeatureGroup objects
public static IEnumerable Parse(IEnumerable configFiles)
{
Logger.LogDebug($"Parsing {configFiles.Count()} feature assembly metadata file(s)...");
var featureConfigs = configFiles.Select(Parse).Where(c => c != null);
return featureConfigs;
}
///
/// Deserializes a feature config file
///
/// Config file path
/// Deserialized FeatureGroup objects
public static FeatureConfig Parse(string configFile)
{
if (_configCache.TryGetValue(configFile, out var featureConfig))
{
return featureConfig;
}
if (!File.Exists(configFile))
{
Logger.LogError($"Metadata file does not exist: {configFile}");
return null;
}
Logger.LogDebug($"Parsing metadata file: {configFile}...");
var configContent = File.ReadAllText(configFile);
Utils.ValidateJsonObject(configContent, typeof(FeatureConfig));
featureConfig = JsonConvert.DeserializeObject(configContent);
_configCache[configFile] = featureConfig;
return featureConfig;
}
}
}