コード例 #1
0
        /// <inheritdoc />
        public async Task <DataMeasurementDto[]> GetMeasurementValues(PathInformationDto partPath = null, MeasurementValueFilterAttributesDto filter = null, CancellationToken cancellationToken = default)
        {
            if (filter?.MergeAttributes?.Length > 0)
            {
                var featureMatrix = await GetFeatureMatrixInternal(FetchBehavior.FetchIfNotCached, cancellationToken).ConfigureAwait(false);

                if (!featureMatrix.SupportsRestrictMeasurementSearchByMergeAttributes)
                {
                    throw new OperationNotSupportedOnServerException(
                              "Restricting measurement search by merge attributes is not supported by this server.",
                              DataServiceFeatureMatrix.RestrictMeasurementSearchByMergeAttributesMinVersion,
                              featureMatrix.CurrentInterfaceVersion);
                }
            }

            if (filter?.MeasurementUuids?.Length > 0)
            {
                return(await GetMeasurementValuesSplitByMeasurement(partPath, filter, cancellationToken).ConfigureAwait(false));
            }

            if (filter?.CharacteristicsUuidList?.Length > 0)
            {
                return(await GetMeasurementValuesSplitByCharacteristics(partPath, filter, cancellationToken).ConfigureAwait(false));
            }

            return(await _RestClient.Request <DataMeasurementDto[]>(RequestBuilder.CreateGet("values", CreateParameterDefinitions(partPath, filter).ToArray()), cancellationToken).ConfigureAwait(false));
        }
コード例 #2
0
        private async Task <DataMeasurementDto[]> GetMeasurementValuesSplitByMeasurement(PathInformationDto partPath, MeasurementValueFilterAttributesDto filter, CancellationToken cancellationToken)
        {
            var newFilter = filter.Clone();

            newFilter.MeasurementUuids = null;

            var parameter = CreateParameterDefinitions(partPath, newFilter);

            parameter.Add(ParameterDefinition.Create(AbstractMeasurementFilterAttributesDto.MeasurementUuidsParamName, ""));

            var requestRestriction = RequestBuilder.AppendParameters("values", parameter);
            var targetSize         = RestClientHelper.GetUriTargetSize(ServiceLocation, requestRestriction, MaxUriLength);

            var result = new List <DataMeasurementDto>(filter.MeasurementUuids.Length);

            foreach (var uuids in ArrayHelper.Split(filter.MeasurementUuids, targetSize, RestClientHelper.LengthOfListElementInUri))
            {
                newFilter.MeasurementUuids = uuids;
                if (newFilter.CharacteristicsUuidList?.Length > 0)
                {
                    result.AddRange(await GetMeasurementValuesSplitByCharacteristics(partPath, newFilter, cancellationToken).ConfigureAwait(false));
                }
                else
                {
                    result.AddRange(await _RestClient.Request <DataMeasurementDto[]>(RequestBuilder.CreateGet("values", CreateParameterDefinitions(partPath, newFilter).ToArray()), cancellationToken).ConfigureAwait(false));
                }
            }

            return(result.ToArray());
        }
コード例 #3
0
        private async Task <DataMeasurementDto[]> GetMeasurementValuesSplitByCharacteristics(PathInformationDto partPath, MeasurementValueFilterAttributesDto filter, CancellationToken cancellationToken)
        {
            var newFilter = filter.Clone();

            newFilter.CharacteristicsUuidList = null;

            var parameter = CreateParameterDefinitions(partPath, newFilter);

            parameter.Add(ParameterDefinition.Create(MeasurementValueFilterAttributesDto.CharacteristicsUuidListParamName, ""));

            var requestRestriction = RequestBuilder.AppendParameters("values", parameter);
            var targetSize         = RestClientHelper.GetUriTargetSize(ServiceLocation, requestRestriction, MaxUriLength);

            var result          = new List <DataMeasurementDto>(filter.MeasurementUuids?.Length ?? 0);
            var allMeasurements = new Dictionary <Guid, DataMeasurementDto>();

            foreach (var uuids in ArrayHelper.Split(filter.CharacteristicsUuidList, targetSize, RestClientHelper.LengthOfListElementInUri))
            {
                newFilter.CharacteristicsUuidList = uuids;

                var measurements = await _RestClient.Request <DataMeasurementDto[]>(RequestBuilder.CreateGet("values", CreateParameterDefinitions(partPath, newFilter).ToArray()), cancellationToken).ConfigureAwait(false);

                foreach (var measurement in measurements)
                {
                    if (allMeasurements.TryGetValue(measurement.Uuid, out var existingMeasurement))
                    {
                        existingMeasurement.Characteristics = Combine(existingMeasurement.Characteristics, measurement.Characteristics);
                    }
                    else
                    {
                        result.Add(measurement);
                        allMeasurements.Add(measurement.Uuid, measurement);
                    }
                }
            }

            return(result.ToArray());
        }