/// <summary>
        /// Converts a model from Edm term into Taupo term
        /// </summary>
        /// <param name="edmModel">The input model in Edm term</param>
        /// <returns>The output model in Taupo term</returns>
        public EntityModelSchema ConvertToTaupoModel(IEdmModel edmModel)
        {
            this.edmModel            = edmModel;
            this.associationRegistry = new AssociationRegistry();

            var taupoModel = new EntityModelSchema();

            foreach (var edmComplexType in edmModel.SchemaElements.OfType <IEdmComplexType>())
            {
                ComplexType taupoComplexType = this.ConvertToTaupoComplexType(edmComplexType);
                taupoModel.Add(taupoComplexType);
            }

            foreach (var edmEntityType in edmModel.SchemaElements.OfType <IEdmEntityType>())
            {
                EntityType taupoEntityType = this.ConvertToTaupoEntityType(edmEntityType);
                taupoModel.Add(taupoEntityType);

                // convert to Association using information inside Navigations
                foreach (var edmNavigationProperty in edmEntityType.DeclaredNavigationProperties())
                {
                    if (!this.associationRegistry.IsAssociationRegistered(edmNavigationProperty))
                    {
                        this.associationRegistry.RegisterAssociation(edmNavigationProperty);
                    }
                }
            }

            var edmEntityContainer = edmModel.EntityContainer;

            if (edmEntityContainer != null)
            {
                EntityContainer taupoEntityContainer = this.ConvertToTaupoEntityContainer(edmEntityContainer);
                taupoModel.Add(taupoEntityContainer);
            }

            foreach (var edmFunction in edmModel.SchemaElements.OfType <IEdmOperation>())
            {
                Function taupoFunction = this.ConvertToTaupoFunction(edmFunction);
                taupoModel.Add(taupoFunction);
            }

            foreach (var edmEnum in edmModel.SchemaElements.OfType <IEdmEnumType>())
            {
                EnumType taupoEnumType = this.ConvertToTaupoEnumType(edmEnum);
                taupoModel.Add(taupoEnumType);
            }

            return(taupoModel.Resolve());
        }
Beispiel #2
0
        /// <summary>
        /// Parses the specified CSDL/SSDL content.
        /// </summary>
        /// <param name="xsdlContent">Content of multiple CSDL or multiple SSDL files.</param>
        /// <returns>
        /// Instance of <see cref="EntityModelSchema"/> which represents Entity Model parsed from the files.
        /// </returns>
        public EntityModelSchema Parse(params XElement[] xsdlContent)
        {
            EntityModelSchema model = new EntityModelSchema();

            this.entityTypeFullNames  = new List <string>();
            this.complexTypeFullNames = new List <string>();
            this.enumTypeFullNames    = new List <string>();

            foreach (XElement xsdl in xsdlContent)
            {
                this.RegisterNominalTypes(xsdl);
            }

            foreach (XElement xsdl in xsdlContent)
            {
                this.ParseSingleXsdl(model, xsdl);
            }

            return(model.Resolve());
        }