Пример #1
0
        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);
        }
Пример #2
0
        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);
                    }
                }
            }
        }
Пример #3
0
 public CompactObservationPackage(ObservationPackage package)
 {
     Package = package;
 }