Beispiel #1
0
        /// <summary>
        /// Processes the request for type T.
        /// </summary>
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            try
            {
                var request = CastRequestObjectTo <TileRequest>(item);

                var filter1 = request.Filter1;
                var filter2 = request.Filter2;
                await PairUpAssetIdentifiers(request.ProjectUid.Value, filter1, filter2);
                await PairUpImportedFileIdentifiers(request.ProjectUid.Value, request.DesignDescriptor, filter1, filter2);

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

                var trexRequest = new TRexTileRequest(
                    request.ProjectUid.Value,
                    request.Mode,
                    request.Palettes,
                    request.DesignDescriptor,
                    filter1,
                    filter2,
                    request.BoundBoxLatLon,
                    request.BoundBoxGrid,
                    request.Width,
                    request.Height,
                    AutoMapperUtility.Automapper.Map <OverridingTargets>(request.LiftBuildSettings),
                    AutoMapperUtility.Automapper.Map <LiftSettings>(request.LiftBuildSettings),
                    request.ComputeVolumesType
                    );
                log.LogDebug($"{nameof(TilesExecutor)} trexRequest {JsonConvert.SerializeObject(trexRequest)}");

                var fileResult = await trexCompactionDataProxy.SendDataPostRequestWithStreamResponse(trexRequest, "/tile", customHeaders);

                using (var ms = new MemoryStream())
                {
                    fileResult.CopyTo(ms);
                    return(new TileResult(ms.ToArray()));
                }
            }
            finally
            {
                ContractExecutionStates.ClearDynamic();
            }
        }
Beispiel #2
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();
            }
        }
Beispiel #3
0
        private async Task <CompactionProfileResult <CompactionSummaryVolumesProfileCell> > ProcessSummaryVolumesWithTRexGateway(CompactionProfileProductionDataRequest request)
        {
            if (request.IsAlignmentDesign)
            {
                throw new ServiceException(HttpStatusCode.BadRequest,
                                           new ContractExecutionResult(ContractExecutionStatesEnum.ValidationError, "TRex unsupported request"));
            }

            var volumeCalcType = request.VolumeCalcType ?? VolumeCalcType.None;

            if (volumeCalcType != VolumeCalcType.None)
            {
                var baseFilter = request.BaseFilter;
                var topFilter  = request.TopFilter;
                if (volumeCalcType == VolumeCalcType.GroundToGround && !request.ExplicitFilters)
                {
                    (baseFilter, topFilter) = FilterUtilities.AdjustFilterToFilter(request.BaseFilter, request.TopFilter);
                }

                var liftBuildSettings = request.LiftBuildSettings;
                var summaryVolumesProfileDataRequest = new SummaryVolumesProfileDataRequest(
                    request.ProjectUid ?? Guid.Empty,
                    baseFilter,
                    topFilter,
                    request.VolumeDesignDescriptor?.FileUid,
                    request.VolumeDesignDescriptor?.Offset,
                    ConvertVolumeCalcType(volumeCalcType),
                    request.GridPoints != null,
                    request.GridPoints?.x1 ?? request.WGS84Points.lon1,
                    request.GridPoints?.y1 ?? request.WGS84Points.lat1,
                    request.GridPoints?.x2 ?? request.WGS84Points.lon2,
                    request.GridPoints?.y2 ?? request.WGS84Points.lat2,
                    AutoMapperUtility.Automapper.Map <OverridingTargets>(liftBuildSettings),
                    AutoMapperUtility.Automapper.Map <LiftSettings>(liftBuildSettings)
                    );

                var trexResult = await trexCompactionDataProxy.SendDataPostRequest <ProfileDataResult <SummaryVolumeProfileCell>, SummaryVolumesProfileDataRequest>(summaryVolumesProfileDataRequest, "/volumes/summary/profile", customHeaders);

                return(trexResult != null?ConvertTRexSummaryVolumesProfileResult(trexResult, volumeCalcType) : null);
            }

            return(null);
        }
Beispiel #4
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();
            }
        }
Beispiel #5
0
        /// <summary>
        /// Processes the request for type of T.
        /// </summary>
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            try
            {
                var request = CastRequestObjectTo <TileRequest>(item);

                var filter1 = request.Filter1;
                var filter2 = request.Filter2;
                if (request.ComputeVolumesType == VolumesType.Between2Filters && !request.ExplicitFilters)
                {
                    (filter1, filter2) = FilterUtilities.AdjustFilterToFilter(request.Filter1, request.Filter2);
                }

                var trexRequest = new TRexTileRequest(
                    request.ProjectUid.Value,
                    request.Mode,
                    request.Palettes,
                    request.DesignDescriptor,
                    filter1,
                    filter2,
                    request.BoundBoxLatLon,
                    request.BoundBoxGrid,
                    request.Width,
                    request.Height,
                    AutoMapperUtility.Automapper.Map <OverridingTargets>(request.LiftBuildSettings),
                    AutoMapperUtility.Automapper.Map <LiftSettings>(request.LiftBuildSettings),
                    request.ComputeVolumesType
                    );
                var fileResult = await trexCompactionDataProxy.SendDataPostRequestWithStreamResponse(trexRequest, "/tile", customHeaders);

                using (var ms = new MemoryStream())
                {
                    fileResult.CopyTo(ms);
                    return(new TileResult(ms.ToArray()));
                }
            }
            finally
            {
                ContractExecutionStates.ClearDynamic();
            }
        }
Beispiel #6
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();
            }
        }
Beispiel #7
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();
            }
        }