using Builder.Model; using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; namespace Builder.Utility { public sealed class BuilderHelper { private static readonly Lazy lazy = new Lazy(() => new BuilderHelper()); public string _logFileName = string.Empty; public static BuilderHelper Instance { get { return lazy.Value; } } private static Logger _logger = new Logger("Initial.log"); private BuilderSettings _builderSettings = null; public BuilderSettings builderSettings { get { if (_builderSettings == null) { string builderSettingsjson = GetBuilderSettingsJson(); _builderSettings = ObjectConverter.Instance.GetBuilderSettingsFromJson(builderSettingsjson); } return _builderSettings; } set { builderSettings = value; } } public Logger logger { get { return _logger; } set { _logger = value; } } static BuilderHelper() { } private BuilderHelper() { } private string GetBuilderSettingsJson() { var baselocation = AppDomain.CurrentDomain.BaseDirectory; var FileLocation = baselocation + "builderSettings.json"; return File.ReadAllText(FileLocation); } public List GetNugettoInclude(string directoryPath) { List includeNugets = new List(); string includeNugetsFilePath = Path.Combine(directoryPath, this.builderSettings.NugetSpecsFile); if (File.Exists(includeNugetsFilePath)) { Regex _pkgName = new Regex(this.builderSettings.NugetPackageRegEx, RegexOptions.Compiled); string filetext = File.ReadAllText(includeNugetsFilePath); var _pkgMatchCollection = _pkgName.Matches(filetext); foreach (Match match in _pkgMatchCollection) { if(!string.IsNullOrWhiteSpace(match.Value)) { string package = match.Groups["package"]?.Value?.Trim(); string version = match.Groups["version"]?.Value?.Trim(); this.logger.Log($"adding {package} | {version} to includeNugets collection"); includeNugets.Add( new IncludeNuget() { packageName = package, version = version } ); } } } return includeNugets; } public List GetDllstoExclude(string directoryPath) { List excludeDlls = new List(); string excludeDllsFilePath = Path.Combine(directoryPath, this.builderSettings.DllExcludeFile); if (File.Exists(excludeDllsFilePath)) { //xyzPackage:abc.dll Regex _exclude = new Regex(this.builderSettings.ExcludeDllRegEx, RegexOptions.Compiled); string filetext = File.ReadAllText(excludeDllsFilePath); var _excludeMatchCollection = _exclude.Matches(filetext); foreach (Match match in _excludeMatchCollection) { if (!string.IsNullOrWhiteSpace(match.Value)) { string _package = match.Groups["package"]?.Value?.Trim(); string _dllName = match.Groups["dll"]?.Value?.Trim(); this.logger.Log($"adding {_package} | {_dllName} to excludeDlls collection"); excludeDlls.Add( new ExcludeDll() { packageName = _package, dllName = _dllName } ); } } } return excludeDlls; } public string DeepException(Exception ex) { string responce = string.Empty; responce = " Exception : LEVEL 1: " + Environment.NewLine + ex.Message; if (ex.InnerException != null) { responce = responce + Environment.NewLine + "LEVEL 2:" + Environment.NewLine + ex.InnerException.Message; if (ex.InnerException.InnerException != null) { responce =responce + Environment.NewLine + "LEVEL 3:" + Environment.NewLine + ex.InnerException.InnerException.Message; if (ex.InnerException.InnerException.InnerException != null) { responce = responce + Environment.NewLine + "LEVEL 4:" + Environment.NewLine + ex.InnerException.InnerException.InnerException.Message; if (ex.InnerException.InnerException.InnerException.InnerException != null) { responce = responce + Environment.NewLine + "LEVEL 5:" + Environment.NewLine + ex.InnerException.InnerException.InnerException.InnerException.Message; } } } } if(ex.StackTrace!=null) { responce = responce + "|| STACK :"+ ex.StackTrace; } return responce; } public void WriteTofile(string filenameWithPath , string content) { using (StreamWriter sw = new StreamWriter(filenameWithPath, false)) { sw.AutoFlush = true; sw.Write(content); } } } }