/// /// Copyright (c) 2013-2019 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.IO; using Common; namespace Config.Entities { public class Component : IHasName, IHasItemNr { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } public virtual string Name { get; set; } public virtual string ClassName { get; set; } public virtual string ParentName { get; set; } public virtual DebugMode Mode { get; set; } public virtual LogLevel Logging { get; set; } public virtual string Parameters { get; set; } public virtual IList Corrections { get; set; } public virtual IList Uncertainties { get; set; } /// ------------- Additional stuff not mapped into the database ------------- public Component() { Name = string.Empty; ClassName = string.Empty; Corrections = new List(); Uncertainties = new List(); } public static Component CreateFromCfg(string name, string className, string parentName, int itemNr, DebugMode debugLevel, LogLevel logLevel, string parameters) { Component result = new Component(); result.ItemNr = itemNr; result.Name = name; result.ClassName = className; result.ParentName = parentName; result.Mode = debugLevel; result.Logging = logLevel; result.Parameters = parameters; return result; } // Makes a new copy of this object (not just a reference) public virtual Component Clone() { Component result = new Component(); result.ItemNr = ItemNr; result.Name = Name; result.ClassName = ClassName; result.ParentName = ParentName; result.Mode = Mode; result.Logging = Logging; result.Parameters = Parameters; return result; } public virtual void Export(StreamWriter output) { output.WriteLine(Name); output.WriteLine(ClassName); output.WriteLine(ParentName); output.WriteLine(Mode.ToString()); output.WriteLine(Logging.ToString()); output.Write(Parameters); output.Close(); } public static Component Import(StreamReader input) { Component result = new Component(); result.Name = input.ReadLine(); result.ClassName = input.ReadLine(); result.ParentName = input.ReadLine(); string line = input.ReadLine(); if (line.Equals(DebugMode.DetectedOff.ToString())) result.Mode = DebugMode.DetectedOff; else if (line.Equals(DebugMode.DetectedOn.ToString())) result.Mode = DebugMode.DetectedOn; else if (line.Equals(DebugMode.Normal.ToString())) result.Mode = DebugMode.Normal; else if (line.Equals(DebugMode.AutoDetect.ToString())) result.Mode = DebugMode.AutoDetect; else if (line.Equals(DebugMode.FailureDuringOperation.ToString())) result.Mode = DebugMode.FailureDuringOperation; else if (line.Equals(DebugMode.Off.ToString())) result.Mode = DebugMode.Off; else if (line.Equals(DebugMode.Record.ToString())) result.Mode = DebugMode.Record; else if (line.Equals(DebugMode.Replay.ToString())) result.Mode = DebugMode.Replay; else if (line.Equals(DebugMode.Simulate.ToString())) result.Mode = DebugMode.Simulate; else if (line.Equals(DebugMode.Inherit.ToString())) result.Mode = DebugMode.Inherit; line = input.ReadLine(); if (line.Equals(LogLevel.Off.ToString())) result.Logging = LogLevel.Off; else if (line.Equals(LogLevel.Fatal.ToString())) result.Logging = LogLevel.Fatal; else if (line.Equals(LogLevel.Error.ToString())) result.Logging = LogLevel.Error; else if (line.Equals(LogLevel.Warn.ToString())) result.Logging = LogLevel.Warn; else if (line.Equals(LogLevel.Info.ToString())) result.Logging = LogLevel.Info; else if (line.Equals(LogLevel.Debug.ToString())) result.Logging = LogLevel.Debug; else if (line.Equals(LogLevel.All.ToString())) result.Logging = LogLevel.All; result.Parameters = string.Empty; line = input.ReadLine(); while (line != null) { result.Parameters += line; result.Parameters += Environment.NewLine; line = input.ReadLine(); } return result; } public virtual string ToString(string indent) { string result = string.Empty; result += indent + "ItemNr = " + (ItemNr + 1).ToString() + Environment.NewLine; result += indent + "Name = " + Name + Environment.NewLine; result += indent + "ClassName = " + ClassName + Environment.NewLine; if (ParentName != null) { result += indent + "ParentName = " + ParentName + Environment.NewLine; } result += indent + "DebugLevel = " + Mode.ToString() + Environment.NewLine; result += indent + "LogLevel = " + Logging.ToString() + Environment.NewLine; result += indent + "Parameters = " + Parameters + Environment.NewLine; return result; } public override string ToString() { return string.Format("{0} ({1})", Name, ClassName); } } }