public ObservationPackage GetAsObservationPackage() { //TODO: Consider sorting on identifier and timestamp List <IdentifiedObservations> identifiedObservations = new List <IdentifiedObservations>(); foreach (IdentifiedObservationsItem io in IdentifiedObservations) { IdentifiedObservations IO = new IdentifiedObservations() { ObservationId = io.Id, Observations = io.Observations.ToArray() }; identifiedObservations.Add(IO); } ObservationPackage package = new ObservationPackage() { Observations = identifiedObservations.ToArray() }; return(package); }
public CompactObservationPackage(string observations, Dictionary <int, DataType> observationDatatype) { Package = new ObservationPackage(); // Example: 1,2015-05-04T15:08:45Z,3.14 string pattern = "(?<observationId>\\d+),(?<timestamp>.*?),(?<value>.*)"; string[] lines = observations.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); foreach (string line in lines) { if (line != null && line.Length > 0) { Regex regex = new Regex(pattern); Match match = regex.Match(line); int id; if (Int32.TryParse(match.Groups["observationId"].Value, out id)) { if (observationDatatype.ContainsKey(id)) { DateTime timestamp = DateTime.UtcNow; string ts = match.Groups["timestamp"].Value; UInt32 secondsSince1970 = 0; if (ts != "0") { if (DateTime.TryParse(ts, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out timestamp)) { } else if (UInt32.TryParse(ts, out secondsSince1970)) { timestamp = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(secondsSince1970); } else { throw new ArgumentException("Invalid timestamp in line\n" + line); } } string value = match.Groups["value"].Value; if (value != null) { switch (observationDatatype[id]) { case DataType.Boolean: bool booleanValue = DataTypeStringConverter.ParseBooleanValue(value); AppendObservation(id, new BooleanObservation() { Timestamp = timestamp, Value = booleanValue }); break; case DataType.Double: double doubleValue = DataTypeStringConverter.ParseDoubleValue(value); AppendObservation(id, new DoubleObservation() { Timestamp = timestamp, Value = doubleValue }); break; case DataType.Integer: int integerValue = DataTypeStringConverter.ParseIntegerValue(value); AppendObservation(id, new IntegerObservation() { Timestamp = timestamp, Value = integerValue }); break; case DataType.Position: Position positionValue = DataTypeStringConverter.ParsePositionValue(value); AppendObservation(id, new PositionObservation() { Timestamp = timestamp, Value = positionValue }); break; case DataType.String: if (value.Length < 4096) { AppendObservation(id, new StringObservation() { Timestamp = timestamp, Value = value }); break; } else { throw new ArgumentException("String values longer than 4096 characters are not supported. Tip: Use binary observation instead."); } case DataType.Statistics: DescriptiveStatistics statisticsValue = DataTypeStringConverter.ParseStatisticsValue(value); AppendObservation(id, new StatisticsObservation() { Timestamp = timestamp, Value = statisticsValue }); break; default: throw new ArgumentException("Unsupported datatype in line\n" + line); } } else { throw new ArgumentNullException("Value is null in line\n" + line); } } else { throw new ArgumentException("Unknown observation identifier in line\n" + line); } } else { throw new ArgumentException("Invalid ObservationId in line\n" + line); } } } }
public CompactObservationPackage(ObservationPackage package) { Package = package; }