1 // 2 // Copyright (c) 2013-2017 Carsten Sonne Larsen <cs@innolan.net> 3 // 4 // Permission is hereby granted, free of charge, to any person obtaining a copy 5 // of this software and associated documentation files (the "Software"), to deal 6 // in the Software without restriction, including without limitation the rights 7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 // copies of the Software, and to permit persons to whom the Software is 9 // furnished to do so, subject to the following conditions: 10 // 11 // The above copyright notice and this permission notice shall be included in 12 // all copies or substantial portions of the Software. 13 // 14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 // THE SOFTWARE. 21 22 using System.Collections.Generic; 23 using System.Linq; 24 using Ntp.Analyzer.Config.Node; 25 using Ntp.Analyzer.Config.Syntax.Option; 26 using Ntp.Analyzer.Config.Syntax.Setting; 27 using Ntp.Analyzer.Config.Table; 28 using Ntp.Common.Log; 29 30 namespace Ntp.Analyzer.Config.Syntax 31 { 32 public sealed class LogSyntaxNode : SyntaxNode<LogConfiguration> 33 { LogSyntaxNode(string name, int line)34 public LogSyntaxNode(string name, int line) 35 : base(Symbol.KeywordLog, name, line) 36 { 37 } 38 InternalCompile()39 protected override LogConfiguration InternalCompile() 40 { 41 var logType = Nodes.SingleOrDefault(n => n.Symbol == Symbol.KeywordType) as LogTypeNode; 42 var threshold = Nodes.SingleOrDefault(n => n.Symbol == Symbol.KeywordSeverity) as SeverityNode; 43 var showTime = Nodes.SingleOrDefault(n => n.Symbol == Symbol.KeywordShowTimestamp) as BooleanSettingNode; 44 var showSeverity = Nodes.SingleOrDefault(n => n.Symbol == Symbol.KeywordShowSeverity) as BooleanSettingNode; 45 var timeFormat = Nodes.SingleOrDefault(n => n.Symbol == Symbol.KeywordTimeFormat) as StringSettingNode; 46 var file = Nodes.SingleOrDefault(n => n.Symbol == Symbol.KeywordFile) as StringSettingNode; 47 48 return new LogConfiguration( 49 Name, 50 logType?.LogType, 51 threshold?.Severity, 52 showTime?.Value, 53 showSeverity?.Value, 54 timeFormat?.Value, 55 file?.Value 56 ); 57 } 58 ValidateMandatories()59 protected override void ValidateMandatories() 60 { 61 CheckIsUnique(new List<Symbol> 62 { 63 Symbol.KeywordType, 64 Symbol.KeywordSeverity, 65 Symbol.KeywordShowSeverity, 66 Symbol.KeywordShowTimestamp, 67 Symbol.KeywordTimeFormat, 68 Symbol.KeywordFile 69 }); 70 71 var type = Nodes.SingleOrDefault(n => n.Symbol == Symbol.KeywordType) as LogTypeNode; 72 var fileName = Nodes.SingleOrDefault(n => n.Symbol == Symbol.KeywordFile) as StringSettingNode; 73 74 if ((type == null || type.LogType == LogType.File) && fileName == null) 75 { 76 AddError("Log file name is missing."); 77 } 78 } 79 ValidateTypes()80 protected override void ValidateTypes() 81 { 82 CheckTypeIs<StringSettingNode>(Symbol.KeywordTimeFormat); 83 CheckTypeIs<StringSettingNode>(Symbol.KeywordFile); 84 CheckTypeIs<BooleanSettingNode>(Symbol.KeywordShowTimestamp); 85 CheckTypeIs<BooleanSettingNode>(Symbol.KeywordShowSeverity); 86 } 87 } 88 }