/// <summary> /// Parsed log and returns information about sensors defined inside log. /// </summary> /// <param name="readNextLine">Generic function for parsing any stream.</param> /// <returns>Parsed log</returns> /// <exception cref="InvalidReferenceFormatException"></exception> /// <exception cref="InvalidSensorTypeException"></exception> /// <exception cref="InvalidSensorValueException"></exception> /// <exception cref="MissingReferenceValueException"></exception> /// <exception cref="MissingSensorDefinitionException"></exception> /// <exception cref="NoReadingValuesException"></exception> private static string Parse(Func <string> readNextLine) { var referenceMap = ReferenceValueParser.GetReferenceValues(readNextLine()); var result = new Dictionary <string, string>(); ISensor activeSensor = null; string line; while ((line = readNextLine()) != null) { if (line.Trim() == "") { continue; } var(state, part1, part2) = TryNextState(line); switch (state) { case ParseStateEnum.Sensor: AddToResult(activeSensor, result); activeSensor = SensorFactory.Create(referenceMap, part1, part2); break; case ParseStateEnum.Value: if (activeSensor == null) { throw new MissingSensorDefinitionException(); } activeSensor.HandleValue(part2); break; default: throw new InvalidSensorValueException(line); } } AddToResult(activeSensor, result); return(JsonConvert.SerializeObject(result)); }
public override ReferenceArgs <XmlProcessingInstruction, XmlAttribute> Create(Parser parser, ReferenceKind kind, XmlProcessingInstruction element, XmlAttribute attribute, ReferenceValueParser valueParser) { return(new ReferenceArgs <XmlProcessingInstruction, XmlAttribute>(parser, kind, GetMimeType(attribute), element, attribute, valueParser)); }
public override ReferenceArgs <HtmlNode, HtmlAttribute> Create(Parser parser, ReferenceKind kind, HtmlNode element, HtmlAttribute attribute, ReferenceValueParser valueParser) { return(new ReferenceArgs <HtmlNode, HtmlAttribute>(parser, GetKind(element, kind), null, element, attribute, valueParser)); }