public IEntityTypeBuilder Initialize(IBindableModelBuilder modelBuilder) { var signatureProperty = this.CreateProperty(this.propertyService.CompactSignatureProperty, FactonModelKeywords.SignaturePropertyName); var publicEntityType = modelBuilder.CreateEntityTypeBuilder(FactonModelKeywords.PublicEntityTypeName) .AsAbstractType() .WithKeyProperty(CreateEntityIdProperty(this.structuralPropertyFactory)) .WithStructuralProperty(signatureProperty); foreach (var property in this.propertyService.AllRelevantProperties) { IStructuralProperty structuralProperty; if (this.structuralPropertyFactory.TryCreate(property, out structuralProperty)) { publicEntityType.WithStructuralProperty(structuralProperty); } else { this.logger.Write(TraceEventType.Error, $"Cannot create property {property.Name}: data type {property.DomainType} not mapped"); } } return(publicEntityType); }
public IEntityTypeBuilder Initialize(IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType) { var valueRuleBuilder = modelBuilder.CreateEntityTypeBuilder(FactonModelKeywords.ValueRuleEntityTypeName).WithParentType(publicEntityType); var valueRuleContainerBuilder = modelBuilder.CreateEntityTypeBuilder(FactonModelKeywords.ValueRuleContainerTypeName); publicEntityType.KeyProperties.ForEach(keyProperty => valueRuleContainerBuilder.WithKeyProperty(keyProperty)); foreach (var valueProperty in this.GetDimensionDependingProperties()) { var valueRuleProperty = valueRuleContainerBuilder.CreateContainedNavigationProperty(valueRuleBuilder, valueProperty) .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.Many) .WithSupportedOperations(Operation.Get | Operation.Post | Operation.Patch); var binding = new ConcreteValueRuleContainerNavigationPropertyBinding( this.valueRuleService, this.valueRuleMetadataService, valueProperty); modelBuilder .WithBinding(valueRuleProperty, binding) .WithOptionalDependency(valueRuleProperty, publicEntityType.KeyProperties.First()); } AddContainerNavigationProperty(modelBuilder, publicEntityType, valueRuleContainerBuilder); return(valueRuleContainerBuilder); }
public IEntityTypeBuilder Initialize(SignatureTypeConfiguration config, IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType) { var typeBuilder = modelBuilder.CreateEntityTypeBuilder(config.SignatureType) .WithParentType(publicEntityType) .WithStructuralProperty(this.quantityTypeProperty); foreach (var signature in this.signatureSetInitializer.GetRelevantSignaturesByType(config.SignatureType)) { var setBuilder = this.signatureSetInitializer.InitializeSet( modelBuilder, typeBuilder, signature, config.RelevantEntityTypes, "ResourceMasterdata"); IEntitySetBinding existingBinding; if (!modelBuilder.TryGetBinding(setBuilder, out existingBinding)) { throw new InvalidOperationException("No existing bind found for resource entity set."); } modelBuilder .WithBinding(setBuilder, new ResourceEntitySetBinding(this.resourceService, signature, existingBinding)) .WithDependency(setBuilder, this.quantityTypeProperty) .WithOptionalDependency(setBuilder, publicEntityType.KeyProperties.First()); } return(typeBuilder); }
public IEntitySetBuilder InitializeSet( IBindableModelBuilder modelBuilder, IEntityTypeBuilder entityTypeBuilder, ISignature signature, IEnumerable <string> entityTypes) { return(this.InitializeSet(modelBuilder, entityTypeBuilder, signature, entityTypes, string.Empty)); }
public void InitializeVersionsNavigationProperty(IBindableModelBuilder modelBuilder, IEntityTypeBuilder sourceTypeBuilder, IEntityTypeBuilder versionInfoTypeBuilder) { modelBuilder.WithBinding( sourceTypeBuilder.CreateContainedNavigationProperty(versionInfoTypeBuilder, FactonModelKeywords.VersionInfoNavigationPropertyName) .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.Many) .WithSupportedOperations(Operation.Get | Operation.Post), new VersionInfoNavigationPropertyBinding(this.factonQueryService, this.queryBuilderFactory)); }
private static void AddContainerNavigationProperty( IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType, IEntityTypeBuilder containerEntityType) { modelBuilder.WithBinding( publicEntityType.CreateContainedNavigationProperty(containerEntityType, FactonModelKeywords.ValueRuleContainerNavigationPropertyName) .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.One) .WithSupportedOperations(Operation.Get), new VirtualValueRuleContainerNavigationPropertyBinding()); }
private static void RegisterVersionedEntityNavigationProperty( IBindableModelBuilder modelBuilder, IEntityTypeBuilder versionInfoTypeBuilder, IEntityTypeBuilder publicEntityTypeBuilder) { modelBuilder.WithBinding( versionInfoTypeBuilder.CreateContainedNavigationProperty( publicEntityTypeBuilder, FactonModelKeywords.VersionedEntityNavigationPropertyName) .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.One) .WithSupportedOperations(Operation.Get), new VersionedEntityNavigationPropertyBinding()); }
private void InitializeSignatureTypes(IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityTypeBuilder) { // create one entity type per every registered FACTON signature type foreach (var signatureType in this.configurationRegistry.RegisteredSignatureTypeConfigurations) { var initializer = this.entityTypeInitializerRegistry.GetAll() .OfType <ISignatureTypeInitializer>() .FirstOrDefault(i => i.CanHandleSignatureType(signatureType)); initializer?.Initialize(signatureType, modelBuilder, publicEntityTypeBuilder); } }
public IEntitySetBuilder InitializeSet( IBindableModelBuilder modelBuilder, IEntityTypeBuilder entityTypeBuilder, ISignature signature, IEnumerable <string> entityTypes, string space) { var entitySetBuilder = modelBuilder.CreateEntitySetBuilder(this.GetSetName(signature), entityTypeBuilder) .WithSupportedOperations(Operation.Get | Operation.Post | Operation.Patch); modelBuilder.WithBinding(entitySetBuilder, this.CreateEntitySetBinding(signature, entityTypes, space)); return(entitySetBuilder); }
public void Initialize(IBindableModelBuilder modelBuilder) { modelBuilder .WithNamespace("facton") .WithContainerName("container") .WithComplexDataTypes(this.complexDataTypes); var publicEntityTypeBuilder = this.publicEntityTypeInitializer.Initialize(modelBuilder); this.InitializeCoreTypes(modelBuilder, publicEntityTypeBuilder); this.InitializeSignatureTypes(modelBuilder, publicEntityTypeBuilder); this.RegisterGlobalOperationHandlers(modelBuilder); this.PerformPostProcessing(modelBuilder, publicEntityTypeBuilder); }
public IEntityTypeBuilder Initialize( SignatureTypeConfiguration config, IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType) { var typeBuilder = modelBuilder.CreateEntityTypeBuilder(config.SignatureType).WithParentType(publicEntityType); foreach (var signature in this.signatureSetInitializer.GetRelevantSignaturesByType(config.SignatureType)) { this.signatureSetInitializer.InitializeSingleton( modelBuilder, typeBuilder, signature, config.RelevantEntityTypes, "GlobalMasterData"); } return(typeBuilder); }
public IEntitySetBuilder InitializeSingleton( IBindableModelBuilder modelBuilder, IEntityTypeBuilder entityTypeBuilder, ISignature signature, IEnumerable <string> entityTypes, string space) { var singletonBuilder = modelBuilder.CreateEntitySetBuilder(this.GetSetName(signature), entityTypeBuilder) .AsSingleton() .WithSupportedOperations(Operation.Get | Operation.Patch); modelBuilder.WithBinding( singletonBuilder, new SignatureSingletonBinding(this.factonQueryService, this.queryBuilderFactory, signature, entityTypes, space)); return(singletonBuilder); }
public IEntityTypeBuilder Initialize( SignatureTypeConfiguration config, IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType) { var typeBuilder = modelBuilder.CreateEntityTypeBuilder(config.SignatureType).WithParentType(publicEntityType); var versionInfoTypeBuilder = this.versionInfoTypeInitializer.GetOrCreateVersionInfoType(modelBuilder, publicEntityType); this.versionInfoTypeInitializer.InitializeVersionsNavigationProperty(modelBuilder, typeBuilder, versionInfoTypeBuilder); foreach (var signature in this.signatureSetInitializer.GetRelevantSignaturesByType(config.SignatureType)) { this.signatureSetInitializer.InitializeSet(modelBuilder, typeBuilder, signature, config.RelevantEntityTypes); } return(typeBuilder); }
public IEntityTypeBuilder GetOrCreateVersionInfoType(IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityTypeBuilder) { IEntityTypeBuilder versionInfoTypeBuilder; if (!modelBuilder.TryGetEntityTypeBuilder(FactonModelKeywords.VersionInfoTypeName, out versionInfoTypeBuilder)) { versionInfoTypeBuilder = modelBuilder.CreateEntityTypeBuilder(FactonModelKeywords.VersionInfoTypeName); IStructuralProperty versionNumberProperty; if (!this.structuralPropertyFactory.TryCreate( this.metadataService.GetPropertyByName("_VersionNumber"), "VersionNumber", false, out versionNumberProperty)) { throw new InvalidOperationException("Cannot map version number property."); } versionInfoTypeBuilder.WithParentType(publicEntityTypeBuilder).WithStructuralProperty(versionNumberProperty); RegisterVersionedEntityNavigationProperty(modelBuilder, versionInfoTypeBuilder, publicEntityTypeBuilder); } return(versionInfoTypeBuilder); }
private void AddTreePropertiesToPublicEntityType( ISignature treeSignature, IBindableModelBuilder modelBuilder, IEntityTypeBuilder dataTreeType, IEntityTypeBuilder publicEntityType) { foreach (var property in this.propertyService.GetSelectionTreePropertiesByTreeSignature(treeSignature)) { modelBuilder.WithBinding( publicEntityType.CreateUncontainedNavigationProperty(dataTreeType, property) .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.One) .WithSupportedOperations(Operation.Get), new SelectionTreeValueNavigationPropertyBinding(property)); } foreach (var property in this.propertyService.GetSelectionTreeValueListPropertiesByTreeSignature(treeSignature)) { modelBuilder.WithBinding( publicEntityType.CreateUncontainedNavigationProperty(dataTreeType, property) .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.Many) .WithSupportedOperations(Operation.Get), new SelectionTreeValueListValueNavigationPropertyBinding(property)); } }
public IEntityTypeBuilder Initialize( SignatureTypeConfiguration config, IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType) { var dataTreeTypeBuilder = modelBuilder.CreateEntityTypeBuilder(config.SignatureType).WithParentType(publicEntityType); var parentProperty = dataTreeTypeBuilder.CreateUncontainedNavigationProperty(dataTreeTypeBuilder, FactonModelKeywords.TreeNodeParentNavigationPropertyName) .WithMultiplicity(EdmMultiplicity.Many, EdmMultiplicity.One) .WithSupportedOperations(Operation.Get); modelBuilder.WithBinding(parentProperty, new TreeNodeParentNavigationPropertyBinding()); foreach (var signature in this.signatureSetInitializer.GetRelevantSignaturesByType(config.SignatureType)) { var setBuilder = this.signatureSetInitializer.InitializeSet( modelBuilder, dataTreeTypeBuilder, signature, config.RelevantEntityTypes, this.space) .WithUncontainedNavigationPropertySelfTarget(parentProperty); IEntitySetBinding existingBinding; if (!modelBuilder.TryGetBinding(setBuilder, out existingBinding)) { throw new InvalidOperationException("No existing binding found for tree node entity set."); } modelBuilder .WithBinding(setBuilder, new TreeNodeEntitySetBinding(existingBinding)) .WithDependency(setBuilder, parentProperty) .WithOptionalDependency(setBuilder, publicEntityType.KeyProperties.First()); this.AddTreePropertiesToPublicEntityType(signature, modelBuilder, dataTreeTypeBuilder, publicEntityType); } return(dataTreeTypeBuilder); }
public IEntityTypeBuilder Initialize(SignatureTypeConfiguration config, IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType) { throw new NotImplementedException(); }
private void InitializeCoreTypes(IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityTypeBuilder) { this.entityTypeInitializerRegistry.GetAll() .OfType <ICoreTypeInitializer>() .ForEach(i => i.Initialize(modelBuilder, publicEntityTypeBuilder)); }