Example #1
0
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            try
            {
                var request = CastRequestObjectTo <SummaryVolumesRequest>(item);

                var baseFilter = request.BaseFilter;
                var topFilter  = request.TopFilter;
                await PairUpAssetIdentifiers(request.ProjectUid.Value, baseFilter, topFilter);
                await PairUpImportedFileIdentifiers(request.ProjectUid.Value, filter1 : baseFilter, filter2 : topFilter);

                var designDescriptors = new List <DesignDescriptor>();
                designDescriptors.Add(request.BaseDesignDescriptor);
                designDescriptors.Add(request.TopDesignDescriptor);
                await PairUpImportedFileIdentifiers(request.ProjectUid.Value, designDescriptors);

                if (request.VolumeCalcType == VolumesType.Between2Filters)
                {
                    if (!request.ExplicitFilters)
                    {
                        (baseFilter, topFilter) = FilterUtilities.AdjustFilterToFilter(request.BaseFilter, request.TopFilter);
                    }
                }
                else
                {
                    (baseFilter, topFilter) = FilterUtilities.ReconcileTopFilterAndVolumeComputationMode(baseFilter, topFilter, request.VolumeCalcType);
                }

                var summaryVolumesRequest = new SummaryVolumesDataRequest(
                    request.ProjectUid,
                    baseFilter,
                    topFilter,
                    request.BaseDesignDescriptor.FileUid,
                    request.BaseDesignDescriptor.Offset,
                    request.TopDesignDescriptor.FileUid,
                    request.TopDesignDescriptor.Offset,
                    request.VolumeCalcType);
                log.LogDebug($"{nameof(SummaryVolumesExecutor)} trexRequest {JsonConvert.SerializeObject(summaryVolumesRequest)}");
                return(await trexCompactionDataProxy.SendDataPostRequest <SummaryVolumesResult, SummaryVolumesDataRequest>(summaryVolumesRequest, "/volumes/summary", customHeaders));
            }
            finally
            {
                ContractExecutionStates.ClearDynamic();
            }
        }
Example #2
0
        public Task <ContractExecutionResult> PostSummaryVolumes([FromBody] SummaryVolumesDataRequest summaryVolumesRequest)
        {
            Log.LogInformation($"{nameof(PostSummaryVolumes)}: {JsonConvert.SerializeObject(summaryVolumesRequest)}");

            summaryVolumesRequest.Validate();
            if (summaryVolumesRequest.ProjectUid == null || summaryVolumesRequest.ProjectUid == Guid.Empty)
            {
                throw new ServiceException(HttpStatusCode.BadRequest,
                                           new ContractExecutionResult(ContractExecutionStatesEnum.ValidationError,
                                                                       "Invalid project UID."));
            }
            ValidateFilterMachines(nameof(PostSummaryVolumes), summaryVolumesRequest.ProjectUid, summaryVolumesRequest.BaseFilter);
            ValidateFilterMachines(nameof(PostSummaryVolumes), summaryVolumesRequest.ProjectUid, summaryVolumesRequest.TopFilter);
            ValidateFilterMachines(nameof(PostSummaryVolumes), summaryVolumesRequest.ProjectUid, summaryVolumesRequest.AdditionalSpatialFilter);

            return(WithServiceExceptionTryExecuteAsync(() =>
                                                       RequestExecutorContainer
                                                       .Build <SummaryVolumesExecutor>(ConfigStore, LoggerFactory, ServiceExceptionHandler)
                                                       .ProcessAsync(summaryVolumesRequest)));
        }
Example #3
0
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            try
            {
                var request = CastRequestObjectTo <SummaryVolumesRequest>(item);

                var baseFilter = request.BaseFilter;
                var topFilter  = request.TopFilter;
                if (request.VolumeCalcType == VolumesType.Between2Filters)
                {
                    if (!request.ExplicitFilters)
                    {
                        (baseFilter, topFilter) = FilterUtilities.AdjustFilterToFilter(request.BaseFilter, request.TopFilter);
                    }
                }
                else
                {
                    // Note: The use of the ReconcileTopFilterAndVolumeComputationMode() here breaks with the pattern of all the other V2
                    // end points which explicitly do not perform this step. It has been copied from the Raptor implementation of this end point
                    (baseFilter, topFilter) = FilterUtilities.ReconcileTopFilterAndVolumeComputationMode(baseFilter, topFilter, request.VolumeCalcType);
                }

                var summaryVolumesRequest = new SummaryVolumesDataRequest(
                    request.ProjectUid,
                    baseFilter,
                    topFilter,
                    request.BaseDesignDescriptor?.FileUid,
                    request.BaseDesignDescriptor?.Offset,
                    request.TopDesignDescriptor?.FileUid,
                    request.TopDesignDescriptor?.Offset,
                    request.VolumeCalcType);

                return(await trexCompactionDataProxy.SendDataPostRequest <SummaryVolumesResult, SummaryVolumesDataRequest>(summaryVolumesRequest, "/volumes/summary", customHeaders));
            }
            finally
            {
                ContractExecutionStates.ClearDynamic();
            }
        }