public async void DeleteModel_WithSiteDesigns(DeleteSiteModelSelectivity selectivity) { AddApplicationGridRouting(); var model = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel(false); model.Should().NotBeNull(); model.StorageRepresentationToSupply.Should().Be(StorageMutability.Mutable); model.PrimaryStorageProxy.Mutability.Should().Be(StorageMutability.Mutable); model.PrimaryStorageProxy.ImmutableProxy.Should().NotBeNull(); var request = new AddTTMDesignRequest(); var _ = await request.ExecuteAsync(new AddTTMDesignArgument { ProjectID = model.ID, DesignDescriptor = new DesignDescriptor(Guid.NewGuid(), "", ""), Extents = new BoundingWorldExtent3D(0, 0, 1, 1), ExistenceMap = new SubGridTreeSubGridExistenceBitMask() }); SaveAndVerifyNotEmpty(model); DeleteTheModel(ref model, selectivity, selectivity == DeleteSiteModelSelectivity.All); (model?.Designs?.Count ?? 0).Should().Be(0); }
public async void Remove() { AddApplicationRouting(); var siteModel = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel(); // Add te design to be removed var designID = Guid.NewGuid(); var existenceMap = new TRex.SubGridTrees.SubGridTreeSubGridExistenceBitMask(); existenceMap[0, 0] = true; var addRequest = new AddTTMDesignRequest(); var addResponse = await addRequest.ExecuteAsync(new AddTTMDesignArgument { ProjectID = siteModel.ID, DesignDescriptor = new DesignDescriptor(designID, "folder", "filename"), Extents = new TRex.Geometry.BoundingWorldExtent3D(0, 0, 1, 1), ExistenceMap = existenceMap }); addResponse.Should().NotBeNull(); addResponse.DesignUid.Should().Be(designID); addResponse.RequestResult.Should().Be(DesignProfilerRequestResult.OK); // Re-request the sitemodel to reflect the change siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(siteModel.ID, false); siteModel.Designs.Count.Should().Be(1); var removeRequest = new RemoveTTMDesignRequest(); var removeResponse = await removeRequest.ExecuteAsync(new RemoveTTMDesignArgument { ProjectID = siteModel.ID, DesignID = designID }); removeResponse.Should().NotBeNull(); removeResponse.DesignUid.Should().Be(designID); removeResponse.RequestResult.Should().Be(DesignProfilerRequestResult.OK); // Re-request the sitemodel to reflect the change siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(siteModel.ID, false); siteModel.Designs.Count.Should().Be(0); var readExistenceMap = DIContext.Obtain <IExistenceMapServer>().GetExistenceMap(new NonSpatialAffinityKey(siteModel.ID, BaseExistenceMapRequest.CacheKeyString(TRex.ExistenceMaps.Interfaces.Consts.EXISTENCE_MAP_DESIGN_DESCRIPTOR, designID))); readExistenceMap.Should().BeNull(); }
public async void Add_FailWithNoProject() { AddApplicationRouting(); var request = new AddTTMDesignRequest(); var response = await request.ExecuteAsync(new AddTTMDesignArgument { ProjectID = Guid.NewGuid(), DesignDescriptor = new DesignDescriptor(Guid.NewGuid(), "folder", "filename"), Extents = new TRex.Geometry.BoundingWorldExtent3D(0, 0, 1, 1), ExistenceMap = new TRex.SubGridTrees.SubGridTreeSubGridExistenceBitMask() }); response.Should().NotBeNull(); response.DesignUid.Should().Be(Guid.Empty); response.RequestResult.Should().Be(DesignProfilerRequestResult.FailedToAddDesign); }
/// <summary> /// Add a design or surveyed surface or alignment file to TRex /// </summary> protected async Task AddDesign(DesignRequest request, string executorName) { // load core file from s3 to local var localPath = FilePathHelper.GetTempFolderForProject(request.ProjectUid); var localPathAndFileName = Path.Combine(new[] { localPath, request.FileName }); DesignBase design; if (request.FileType == ImportedFileType.Alignment) { design = new SVLAlignmentDesign(); } else { design = new TTMDesign(SubGridTreeConsts.DefaultCellSize); } var designLoadResult = design.LoadFromStorage(request.ProjectUid, request.FileName, localPath); if (designLoadResult != DesignLoadResult.Success) { log.LogError($"#Out# {executorName}. Addition of design failed :{request.FileName}, Project:{request.ProjectUid}, DesignUid:{request.DesignUid}, designLoadResult: {designLoadResult}"); throw CreateServiceException <TExecutor> (HttpStatusCode.InternalServerError, ContractExecutionStatesEnum.InternalProcessingError, RequestErrorStatus.DesignImportUnableToRetrieveFromS3, designLoadResult.ToString()); } if (request.FileType != ImportedFileType.Alignment) { // This generates the 2 index files designLoadResult = design.LoadFromFile(localPathAndFileName); if (designLoadResult != DesignLoadResult.Success) { log.LogError($"#Out# {executorName}. Addition of design failed :{request.FileName}, Project:{request.ProjectUid}, DesignUid:{request.DesignUid}, designLoadResult: {designLoadResult}"); throw CreateServiceException <TExecutor> (HttpStatusCode.InternalServerError, ContractExecutionStatesEnum.InternalProcessingError, RequestErrorStatus.DesignImportUnableToCreateDesign, designLoadResult.ToString()); } } var extents = new BoundingWorldExtent3D(); design.GetExtents(out extents.MinX, out extents.MinY, out extents.MaxX, out extents.MaxY); design.GetHeightRange(out extents.MinZ, out extents.MaxZ); if (request.FileType == ImportedFileType.DesignSurface) { // Create the new designSurface in our site var tRexRequest = new AddTTMDesignRequest(); var designSurfaceUid = await tRexRequest.ExecuteAsync(new AddTTMDesignArgument { ProjectID = request.ProjectUid, DesignDescriptor = new Designs.Models.DesignDescriptor(request.DesignUid, localPathAndFileName, request.FileName), Extents = extents, ExistenceMap = design.SubGridOverlayIndex() }); } if (request.FileType == ImportedFileType.SurveyedSurface) { // Create the new SurveyedSurface in our site model var tRexRequest = new AddSurveyedSurfaceRequest(); var surveyedSurfaceUid = await tRexRequest.ExecuteAsync(new AddSurveyedSurfaceArgument { ProjectID = request.ProjectUid, DesignDescriptor = new Designs.Models.DesignDescriptor(request.DesignUid, localPathAndFileName, request.FileName), AsAtDate = request.SurveyedUtc ?? TRex.Common.Consts.MIN_DATETIME_AS_UTC, // validation will have ensured this exists Extents = extents, ExistenceMap = design.SubGridOverlayIndex() }); } if (request.FileType == ImportedFileType.Alignment) { // Create the new alignment in our site model var tRexRequest = new AddAlignmentRequest(); var alignmentUid = await tRexRequest.ExecuteAsync(new AddAlignmentArgument { ProjectID = request.ProjectUid, DesignDescriptor = new Designs.Models.DesignDescriptor(request.DesignUid, localPathAndFileName, request.FileName), Extents = extents }); } if (request.FileType != ImportedFileType.Alignment) { // TTM.LoadFromFile() will have created these 3 files. We need to store them on S3 to reload cache when required var s3FileTransfer = new S3FileTransfer(TransferProxyType.DesignImport); s3FileTransfer.WriteFile(localPath, request.ProjectUid, SubGridIndexFileName(request.FileName)); s3FileTransfer.WriteFile(localPath, request.ProjectUid, SpatialIndexFileName(request.FileName)); s3FileTransfer.WriteFile(localPath, request.ProjectUid, BoundaryFileName(request.FileName)); } }
public void Creation() { var req = new AddTTMDesignRequest(); req.Should().NotBeNull(); }