/// <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(); } }
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(); } }
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); }
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(); } }
/// <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(); } }
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(); } }
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(); } }