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

                var filter1 = request.Filter1;
                var filter2 = request.Filter2;
                if (request.ComputeVolType == VolumesType.Between2Filters)
                {
                    (filter1, filter2) = FilterUtilities.AdjustFilterToFilter(request.Filter1, request.Filter2);
                }
                else
                {
                    (filter1, filter2) = FilterUtilities.ReconcileTopFilterAndVolumeComputationMode(filter1, filter2, request.Mode, request.ComputeVolType);
                }

                await PairUpAssetIdentifiers(request.ProjectUid.Value, filter1, filter2);
                await PairUpImportedFileIdentifiers(request.ProjectUid.Value, request.DesignDescriptor, filter1, filter2);

                var patchDataRequest = new PatchDataRequest(
                    request.ProjectUid.Value,
                    filter1,
                    filter2,
                    request.Mode,
                    request.PatchNumber,
                    request.PatchSize,
                    AutoMapperUtility.Automapper.Map <OverridingTargets>(request.LiftBuildSettings),
                    AutoMapperUtility.Automapper.Map <LiftSettings>(request.LiftBuildSettings));
                log.LogDebug($"{nameof(PatchExecutor)} patchDataRequest {JsonConvert.SerializeObject(patchDataRequest)}");

                var fileResult = await trexCompactionDataProxy.SendDataPostRequestWithStreamResponse(patchDataRequest, "/patches", customHeaders);

                return(fileResult.Length > 0
          ? ConvertPatchResult(fileResult, request)
          : new ContractExecutionResult(ContractExecutionStatesEnum.InternalProcessingError, "Null patch returned"));
            }
            finally
            {
                ContractExecutionStates.ClearDynamic();
            }
        }
예제 #2
0
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            // Note: The numPatches out parameter is ignored in favor of the same value returned in the PatchResult proper. This will be removed
            // in due course once the breaking modifications process is agreed with BC.
            try
            {
                var request = CastRequestObjectTo <PatchRequest>(item);

                var filter1 = request.Filter1;
                var filter2 = request.Filter2;
                if (request.ComputeVolType == VolumesType.Between2Filters)
                {
                    (filter1, filter2) = FilterUtilities.AdjustFilterToFilter(request.Filter1, request.Filter2);
                }
                else
                {
                    (filter1, filter2) = FilterUtilities.ReconcileTopFilterAndVolumeComputationMode(filter1, filter2, request.Mode, request.ComputeVolType);
                }

                var patchDataRequest = new PatchDataRequest(
                    request.ProjectUid.Value,
                    filter1,
                    filter2,
                    request.Mode,
                    request.PatchNumber,
                    request.PatchSize,
                    AutoMapperUtility.Automapper.Map <OverridingTargets>(request.LiftBuildSettings),
                    AutoMapperUtility.Automapper.Map <LiftSettings>(request.LiftBuildSettings));

                var fileResult = await trexCompactionDataProxy.SendDataPostRequestWithStreamResponse(patchDataRequest, "/patches", customHeaders);

                return(fileResult.Length > 0
            ? ConvertPatchResult(fileResult, true)
            : CreateNullPatchReturnedResult());
            }
            finally
            {
                ContractExecutionStates.ClearDynamic();
            }
        }
예제 #3
0
        public async Task <FileResult> PostSubGridPatches([FromBody] PatchDataRequest patchRequest)
        {
            Log.LogInformation($"{nameof(PostSubGridPatches)}:  {JsonConvert.SerializeObject(patchRequest)}");

            patchRequest.Validate();
            ValidateFilterMachines(nameof(PostSubGridPatches), patchRequest.ProjectUid, patchRequest.Filter);
            ValidateFilterMachines(nameof(PostSubGridPatches), patchRequest.ProjectUid, patchRequest.Filter2);

            var patchResult = await WithServiceExceptionTryExecuteAsync(() =>
                                                                        RequestExecutorContainer
                                                                        .Build <PatchRequestExecutor>(ConfigStore, LoggerFactory, ServiceExceptionHandler)
                                                                        .ProcessAsync(patchRequest)) as PatchDataResult;

            if (patchResult?.PatchData == null)
            {
                var code   = patchResult == null ? HttpStatusCode.BadRequest : HttpStatusCode.NoContent;
                var exCode = patchResult == null ? ContractExecutionStatesEnum.FailedToGetResults : ContractExecutionStatesEnum.ValidationError;

                throw new ServiceException(code, new ContractExecutionResult(exCode, $"Failed to get subgrid patches for project ID: {patchRequest.ProjectUid}"));
            }

            return(new FileStreamResult(new MemoryStream(patchResult?.PatchData), ContentTypeConstants.ApplicationOctetStream));
        }