public async Task TestReferenceModels() { var corpus = TestHelper.GetLocalCorpus(testsSubpath, nameof(TestReferenceModels)); var manifest = await corpus.FetchObjectAsync <CdmManifestDefinition>(PersistenceLayer.ModelJsonExtension, corpus.Storage.FetchRootFolder("local")); // entity with same modelId but different location var referenceEntity1 = new CdmReferencedEntityDeclarationDefinition(corpus.Ctx, "ReferenceEntity1") { EntityPath = "remote:/contoso/entity1.model.json/Entity1" }; var modelIdTrait1 = referenceEntity1.ExhibitsTraits.Add("is.propertyContent.multiTrait") as CdmTraitReference; modelIdTrait1.IsFromProperty = true; modelIdTrait1.Arguments.Add("modelId", "f19bbb97-c031-441a-8bd1-61b9181c0b83/1a7ef9c8-c7e8-45f8-9d8a-b80f8ffe4612"); manifest.Entities.Add(referenceEntity1); // entity without modelId but same location var referenceEntity2 = new CdmReferencedEntityDeclarationDefinition(corpus.Ctx, "ReferenceEntity2") { EntityPath = "remote:/contoso/entity.model.json/Entity2" }; manifest.Entities.Add(referenceEntity2); // entity with modelId and new location var referenceEntity3 = new CdmReferencedEntityDeclarationDefinition(corpus.Ctx, "ReferenceEntity3") { EntityPath = "remote:/contoso/entity3.model.json/Entity3" }; var modelIdTrait3 = referenceEntity3.ExhibitsTraits.Add("is.propertyContent.multiTrait") as CdmTraitReference; modelIdTrait3.IsFromProperty = true; modelIdTrait3.Arguments.Add("modelId", "3b2e040a-c8c5-4508-bb42-09952eb04a50"); manifest.Entities.Add(referenceEntity3); // entity with same modelId and same location var referenceEntity4 = new CdmReferencedEntityDeclarationDefinition(corpus.Ctx, "ReferenceEntity4") { EntityPath = "remote:/contoso/entity.model.json/Entity4" }; var modelIdTrait4 = referenceEntity4.ExhibitsTraits.Add("is.propertyContent.multiTrait") as CdmTraitReference; modelIdTrait4.IsFromProperty = true; modelIdTrait4.Arguments.Add("modelId", "f19bbb97-c031-441a-8bd1-61b9181c0b83/1a7ef9c8-c7e8-45f8-9d8a-b80f8ffe4612"); manifest.Entities.Add(referenceEntity4); var obtainedModelJson = await ManifestPersistence.ToData(manifest, null, null); this.HandleOutput(nameof(TestReferenceModels), PersistenceLayer.ModelJsonExtension, obtainedModelJson); }
public static EntityDeclarationDefinition ToData(CdmReferencedEntityDeclarationDefinition instance, ResolveOptions resOpt, CopyOptions options) { var result = new EntityDeclarationDefinition { Type = EntityDeclarationDefinitionType.ReferencedEntity, LastFileStatusCheckTime = TimeUtils.GetFormattedDateString(instance.LastFileStatusCheckTime), LastFileModifiedTime = TimeUtils.GetFormattedDateString(instance.LastFileModifiedTime), Explanation = instance.Explanation, EntityName = instance.EntityName, EntityPath = instance.EntityPath, ExhibitsTraits = Utils.ListCopyData(resOpt, instance.ExhibitsTraits, options) }; return(result); }
public static async Task <ReferenceEntity> ToData(CdmReferencedEntityDeclarationDefinition instance, ResolveOptions resOpt, CopyOptions options) { var sourceIndex = instance.EntityPath.LastIndexOf("/"); if (sourceIndex == -1) { Logger.Error(instance.Ctx, Tag, nameof(ToData), instance.AtCorpusPath, CdmLogCode.ErrPersistModelJsonEntityRefConversionError, instance.EntityName); return(null); } var referenceEntity = new ReferenceEntity { Type = "ReferenceEntity", Name = instance.EntityName, Source = instance.EntityPath.Slice(sourceIndex + 1), Description = instance.Explanation, LastFileModifiedTime = instance.LastFileModifiedTime, LastFileStatusCheckTime = instance.LastFileStatusCheckTime }; Utils.ProcessTraitsAndAnnotationsToData(instance.Ctx, referenceEntity, instance.ExhibitsTraits); var t2pm = new TraitToPropertyMap(instance); var isHiddenTrait = t2pm.FetchTraitReference("is.hidden"); if (isHiddenTrait != null) { referenceEntity.IsHidden = true; } var propertiesTrait = t2pm.FetchTraitReference("is.propertyContent.multiTrait"); if (propertiesTrait != null) { referenceEntity.ModelId = propertiesTrait.Arguments.AllItems[0].Value as string; } return(referenceEntity); }
public async Task TestReferencedEntityDeclarationResolution() { var cdmCorpus = new CdmCorpusDefinition(); cdmCorpus.Storage.Mount("cdm", new LocalAdapter(TestHelper.SchemaDocumentsPath)); cdmCorpus.Storage.DefaultNamespace = "cdm"; var manifest = new CdmManifestDefinition(cdmCorpus.Ctx, "manifest"); manifest.Entities.Add("Account", "cdm:/core/applicationCommon/foundationCommon/crmCommon/accelerators/healthCare/electronicMedicalRecords/Account.cdm.json/Account"); var referencedEntity = new CdmReferencedEntityDeclarationDefinition(cdmCorpus.Ctx, "Address"); referencedEntity.EntityPath = "cdm:/core/applicationCommon/foundationCommon/crmCommon/accelerators/healthCare/electronicMedicalRecords/electronicMedicalRecords.manifest.cdm.json/Address"; manifest.Entities.Add(referencedEntity); cdmCorpus.Storage.FetchRootFolder("cdm").Documents.Add(manifest); var resolvedManifest = await manifest.CreateResolvedManifestAsync("resolvedManifest", null); Assert.AreEqual(2, resolvedManifest.Entities.Count); Assert.AreEqual("core/applicationCommon/foundationCommon/crmCommon/accelerators/healthCare/electronicMedicalRecords/resolved/Account.cdm.json/Account", resolvedManifest.Entities[0].EntityPath); Assert.AreEqual("cdm:/core/applicationCommon/foundationCommon/crmCommon/accelerators/healthCare/electronicMedicalRecords/electronicMedicalRecords.manifest.cdm.json/Address", resolvedManifest.Entities[1].EntityPath); }