Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
 }
Ejemplo n.º 5
0
 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));
 }
Ejemplo n.º 6
0
 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());
 }
Ejemplo n.º 7
0
 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());
 }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        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));
            }
        }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 17
0
 public IEntityTypeBuilder Initialize(SignatureTypeConfiguration config, IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 18
0
 private void InitializeCoreTypes(IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityTypeBuilder)
 {
     this.entityTypeInitializerRegistry.GetAll()
     .OfType <ICoreTypeInitializer>()
     .ForEach(i => i.Initialize(modelBuilder, publicEntityTypeBuilder));
 }