예제 #1
0
        public void QueryExpandtTest()
        {
            // prepare
            var odataQuery1 = new OdataQuery
            {
                QuerySelect = new QuerySelect(new[] { "name" }),
                QueryFilter = new QueryFilter("name eq 'test'")
            };

            var odataQuery2 = new OdataQuery
            {
                QuerySelect = new QuerySelect(new[] { "id", "result" }),
                QueryTop    = new QueryTop(5)
            };

            var query = new QueryExpand(new[]
            {
                new Expand(new[] { "Datastreams" }, odataQuery1),
                new Expand(new[] { "Datastreams", "Observations" }, odataQuery2)
            }
                                        );


            // assert
            Assert.AreEqual(2, query.Value.Length);
            Assert.AreEqual("expand", query.GetQueryParam());
            Assert.AreEqual("Datastreams($select=name;$filter=name eq 'test'),Datastreams/Observations($select=id,result;$top=5)", query.GetQueryValueString());
        }
예제 #2
0
        private async Task <Response <T> > Get <T>(Type get, string id, OdataQuery odata)
        {
            var idString = string.IsNullOrEmpty(id) ? "" : $"({id})";

            var url = $"{_homedoc.GetUrlByEntityName(get.GetString(true))}{idString}";

            url = odata != null?odata.AppendOdataQueryToUrl(url) : url;

            return(await Http.GetJson <T>(url));
        }
예제 #3
0
        private async Task <Response <T> > Get <T>(Type get, Type by, string id, OdataQuery odata)
        {
            if (by == null)
            {
                throw new ArgumentNullException(nameof(by));
            }
            if (string.IsNullOrEmpty(id))
            {
                throw new ArgumentException("ID is required", nameof(id));
            }
            var url = $"{_homedoc.GetUrlByEntityName(by.GetString(true))}({id})/{get.GetString(by)}";

            url = odata != null?odata.AppendOdataQueryToUrl(url) : url;

            return(await Http.GetJson <T>(url));
        }
        /// <summary>
        /// Get Datastreams where name contains temperature including Sensor and ObservedProperty
        /// and the 5 latest observations with a result of 15 or higher
        /// select only id and name for datastreams and id, result and phenomenonTime for the observations
        /// </summary>
        public static async void GetDatastreamsOdataExample()
        {
            var odataQueryObservations = new OdataQuery
            {
                QuerySelect  = new QuerySelect(new[] { "id", "result", "phenomenonTime" }),
                QueryTop     = new QueryTop(5),
                QueryFilter  = new QueryFilter("result ge 15"),
                QueryOrderBy = new QueryOrderBy(new Dictionary <string, OrderType> {
                    { "phenomenonTime", OrderType.Descending }
                })
            };

            var odataQuery = new OdataQuery
            {
                QuerySelect = new QuerySelect(new[] { "id", "name" }),
                QueryFilter = new QueryFilter("contains(name,'temperature')"),
                QueryExpand = new QueryExpand(new[] {
                    new Expand(new[] { "Sensor" }),
                    new Expand(new[] { "ObservedProperty" }),
                    new Expand(new[] { "Observations" }, odataQueryObservations)
                })
            };

            var datastreamsResponse = await Client.GetDatastreamCollection(odataQuery);

            if (datastreamsResponse.Success)
            {
                var datastreams = datastreamsResponse.Result;
                foreach (var datastream in datastreams.Items)
                {
                    Console.WriteLine("------------------------------");
                    Console.WriteLine($"Datastream: {datastream.Name}");
                    Console.WriteLine("------------------------------");
                    Console.WriteLine($"Sensor: {datastream.Sensor.Name}");
                    Console.WriteLine($"ObservedProperty: {datastream.ObservedProperty.Name}");

                    foreach (var obs in datastream.Observations)
                    {
                        Console.WriteLine($"{obs.PhenomenonTime.Start} - {obs.Result}");
                    }

                    Console.WriteLine("");
                }
            }
        }
        private async void LoadData()
        {
            var client = new SensorThingsClient(serverurl);
            var odata  = new OdataQuery {
                QueryExpand = new QueryExpand(new[]
                {
                    new Expand(new[] { "Observations" })
                }
                                              )
            };


            var response = await client.GetDatastream(datastreamid, odata);

            var datastream = response.Result;

            var lineSerie = new OxyPlot.Series.LineSeries
            {
                StrokeThickness             = 2,
                MarkerSize                  = 3,
                MarkerStroke                = Colors.GetColors[0],
                MarkerType                  = MarkerTypes.markerTypes[0],
                CanTrackerInterpolatePoints = false,
                Title  = datastream.Description,
                Smooth = false,
            };

            var obs = datastream.Observations.OrderBy(m => m.PhenomenonTime.Start);

            foreach (var observation in obs)
            {
                if (observation.PhenomenonTime != null)
                {
                    var time = observation.GetPhenomenonTime(true);
                    var res  = Convert.ToDouble(observation.Result);
                    lineSerie.Points.Add(new DataPoint(OxyPlot.Axes.DateTimeAxis.ToDouble(time), res));
                }
            }

            plotModel.Series.Add(lineSerie);
            plotview.InvalidatePlot();
        }
예제 #6
0
        public void OdataQueryTest()
        {
            // prepare
            var odataQuery1 = new OdataQuery
            {
                QuerySelect = new QuerySelect(new[] { "name" }),
                QueryFilter = new QueryFilter("name eq 'test'")
            };

            var odataQuery2 = new OdataQuery
            {
                QuerySelect = new QuerySelect(new[] { "id", "result" }),
                QueryTop    = new QueryTop(5)
            };

            var odataQuery = new OdataQuery
            {
                QuerySelect  = new QuerySelect(new[] { "id", "name" }),
                QueryTop     = new QueryTop(5),
                QuerySkip    = new QuerySkip(1),
                QueryCount   = new QueryCount(true),
                QueryFilter  = new QueryFilter("name eq 'test'"),
                QueryOrderBy = new QueryOrderBy(new Dictionary <string, OrderType> {
                    { "name", OrderType.Descending }
                }),
                QueryExpand = new QueryExpand(new[]
                {
                    new Expand(new[] { "Datastreams" }, odataQuery1),
                    new Expand(new[] { "Datastreams", "Observations" }, odataQuery2)
                }
                                              )
            };

            Assert.AreEqual(7, odataQuery.GetOdataQueryStrings().Count());
            Assert.AreEqual("http://stserver/v1.0/Things?$expand=Datastreams($select=name;$filter=name eq 'test'),Datastreams/Observations($select=id,result;$top=5)&$select=id,name&$filter=name eq 'test'&$orderby=name desc&$top=5&$skip=1&$count=true", odataQuery.AppendOdataQueryToUrl("http://stserver/v1.0/Things"));
        }
예제 #7
0
 public async Task <Response <SensorThingsCollection <Location> > > GetLocationCollectionByThing(
     string id, OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <Location> >(typeof(Location), typeof(Thing), id, odata));
 }
예제 #8
0
 public async Task <Response <SensorThingsCollection <Location> > > GetLocationCollection(OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <Location> >(typeof(Location), null, odata));
 }
예제 #9
0
 public async Task <Response <SensorThingsCollection <Thing> > > GetThingCollection(OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <Thing> >(typeof(Thing), null, odata));
 }
예제 #10
0
 public async Task <Response <ObservedProperty> > GetObservedPropertyByDatastream(
     string id, OdataQuery odata = null)
 {
     return(await Get <ObservedProperty>(typeof(ObservedProperty), typeof(Datastream), id, odata));
 }
예제 #11
0
 GetFeatureOfInterestCollection(OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <FeatureOfInterest> >(typeof(FeatureOfInterest), null, odata));
 }
예제 #12
0
 GetHistoricalLocationsCollectionByThing(string id, OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <HistoricalLocation> >(typeof(HistoricalLocation), typeof(Thing), id,
                                                                     odata));
 }
예제 #13
0
 GetObservationCollectionByDatastream(string id, OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <Observation> >(typeof(Observation), typeof(Datastream), id, odata));
 }
예제 #14
0
 public async Task <Response <FeatureOfInterest> > GetFeatureOfInterestByObservation(
     string id, OdataQuery odata = null)
 {
     return(await Get <FeatureOfInterest>(typeof(FeatureOfInterest), typeof(Observation), id, odata));
 }
예제 #15
0
 GetObservationCollectionByFeatureOfInterest(string id, OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <Observation> >(typeof(Observation), typeof(FeatureOfInterest), id,
                                                              odata));
 }
예제 #16
0
 GetObservationCollection(OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <Observation> >(typeof(Observation), null, odata));
 }
예제 #17
0
 public async Task <Response <Observation> > GetObservation(string id, OdataQuery odata = null)
 {
     return(await Get <Observation>(typeof(Observation), id, odata));
 }
예제 #18
0
 public async Task <Response <HistoricalLocation> > GetHistoricalLocation(string id, OdataQuery odata = null)
 {
     return(await Get <HistoricalLocation>(typeof(HistoricalLocation), id, odata));
 }
예제 #19
0
 public async Task <Response <Sensor> > GetSensorByDatastream(string id, OdataQuery odata = null)
 {
     return(await Get <Sensor>(typeof(Sensor), typeof(Datastream), id, odata));
 }
예제 #20
0
 GetHistoricalLocationsCollection(OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <HistoricalLocation> >(typeof(HistoricalLocation), null, odata));
 }
예제 #21
0
 GetDatastreamCollectionBySensor(string id, OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <Datastream> >(typeof(Datastream), typeof(ObservedProperty), id,
                                                             odata));
 }
예제 #22
0
 public async Task <Response <Datastream> > GetDatastream(string id, OdataQuery odata = null)
 {
     return(await Get <Datastream>(typeof(Datastream), id, odata));
 }
예제 #23
0
 public async Task <Response <Thing> > GetThingByDatastream(string id, OdataQuery odata = null)
 {
     return(await Get <Thing>(typeof(Thing), typeof(Datastream), id, odata));
 }
예제 #24
0
 GetDatastreamCollectionByThing(string id, OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <Datastream> >(typeof(Datastream), typeof(Thing), id, odata));
 }
예제 #25
0
 public async Task <Response <Thing> > GetThingByHistoricalLocation(string id, OdataQuery odata = null)
 {
     return(await Get <Thing>(typeof(Thing), typeof(HistoricalLocation), id, odata));
 }
예제 #26
0
 GetDatastreamCollection(OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <Datastream> >(typeof(Datastream), null, odata));
 }
예제 #27
0
 GetObservedPropertyCollection(OdataQuery odata = null)
 {
     return(await Get <SensorThingsCollection <ObservedProperty> >(typeof(ObservedProperty), null, odata));
 }