예제 #1
0
        private OdcmField WriteNavigationField(OdcmClass odcmClass, IEdmNavigationProperty navigationProperty)
        {
            OdcmField odcmField = WriteField(odcmClass, navigationProperty);

            odcmField.ContainsTarget = navigationProperty.ContainsTarget;
            odcmField.IsLink         = true;

            return(odcmField);
        }
예제 #2
0
        private void WriteProperty(OdcmClass odcmClass, OdcmField odcmField, IEdmEntitySet entitySet)
        {
            OdcmProperty odcmProperty = new OdcmProperty(entitySet.Name);

            odcmProperty.Class = odcmClass;
            odcmProperty.Field = odcmField;
            odcmProperty.Type  = odcmField.Type;
            odcmClass.Properties.Add(odcmProperty);
        }
예제 #3
0
        private void WriteProperty(OdcmClass odcmClass, OdcmField odcmField, IEdmProperty property)
        {
            OdcmProperty odcmProperty = new OdcmProperty(property.Name);

            odcmProperty.Class      = odcmClass;
            odcmProperty.IsNullable = property.Type.IsNullable;
            odcmClass.Properties.Add(odcmProperty);

            odcmProperty.Field = odcmField;
        }
예제 #4
0
        public static OdcmField OdcmField(Action <OdcmField> config = null)
        {
            var retVal = new OdcmField(Any.CSharpIdentifier());

            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
예제 #5
0
        private void WriteProperty(OdcmClass odcmClass, OdcmField odcmField, IEdmSingleton singleton)
        {
            OdcmProperty odcmProperty = new OdcmProperty(singleton.Name);

            odcmProperty.Class = odcmClass;
            odcmProperty.Type  = odcmField.Type;
            odcmClass.Properties.Add(odcmProperty);

            odcmProperty.Field = odcmField;
            odcmProperty.Type  = odcmField.Type;
        }
예제 #6
0
        private OdcmField WriteField(OdcmClass odcmClass, IEdmProperty property)
        {
            OdcmField odcmField = new OdcmField("_" + property.Name);

            odcmField.Class = odcmClass;
            odcmClass.Fields.Add(odcmField);

            odcmField.Type         = ResolveType(property.Type);
            odcmField.IsCollection = property.Type.IsCollection();

            return(odcmField);
        }
예제 #7
0
        private OdcmField WriteField(OdcmClass odcmClass, IEdmSingleton singleton)
        {
            OdcmField odcmField = new OdcmField("_" + singleton.Name);

            odcmField.Class = odcmClass;
            odcmClass.Fields.Add(odcmField);

            odcmField.Type = ResolveType(singleton.EntityType().Name, singleton.EntityType().Namespace, TypeKind.Entity);

            odcmField.IsLink = true;

            return(odcmField);
        }
예제 #8
0
        public void ProcessField(OdcmField odcmField)
        {
            PushIndent("   ");

            string fieldType = GetType(odcmField.Type, odcmField.IsCollection);



#line default
#line hidden

#line 200 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
            this.Write("\r\npublic ");


#line default
#line hidden

#line 202 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(fieldType));


#line default
#line hidden

#line 202 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
            this.Write(" _");


#line default
#line hidden

#line 202 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(odcmField.Name));


#line default
#line hidden

#line 202 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
            this.Write(";\r\n");


#line default
#line hidden

#line 203 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"

            PopIndent();
        }
예제 #9
0
        public static object ComplexOdcmField(OdcmNamespace odcmNamespace, Action <OdcmField> config = null)
        {
            var retVal = new OdcmField(Any.CSharpIdentifier())
            {
                Type = Any.ComplexOdcmType(odcmNamespace)
            };

            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
예제 #10
0
        public static OdcmField PrimitiveOdcmField(Action <OdcmField> config = null)
        {
            var retVal = new OdcmField(Any.CSharpIdentifier())
            {
                Type = Any.PrimitiveOdcmType()
            };

            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
예제 #11
0
        private OdcmField WriteField(OdcmClass odcmClass, IEdmEntitySet entitySet)
        {
            OdcmField odcmField = new OdcmField("_" + entitySet.Name);

            odcmField.Class = odcmClass;
            odcmClass.Fields.Add(odcmField);

            odcmField.Type = ResolveType(entitySet.EntityType().Name, entitySet.EntityType().Namespace, TypeKind.Entity);

            odcmField.IsCollection = true;
            odcmField.IsLink       = true;

            return(odcmField);
        }
예제 #12
0
        private void WriteNamespace(IEdmModel edmModel, string @namespace)
        {
            var namespaceElements = from elements in edmModel.SchemaElements
                                    where string.Equals(elements.Namespace, @namespace)
                                    select elements;

            var types = from element in namespaceElements
                        where element.SchemaElementKind == EdmSchemaElementKind.TypeDefinition
                        select element as IEdmType;
            var complexTypes = from element in types
                               where element.TypeKind == EdmTypeKind.Complex
                               select element as IEdmComplexType;
            var entityTypes = from element in types
                              where element.TypeKind == EdmTypeKind.Entity
                              select element as IEdmEntityType;
            var enumTypes = from elements in types
                            where elements.TypeKind == EdmTypeKind.Enum
                            select elements as IEdmEnumType;

            var entityContainers = from element in namespaceElements
                                   where element.SchemaElementKind == EdmSchemaElementKind.EntityContainer
                                   select element as IEdmEntityContainer;

            var actions = from element in namespaceElements
                          where element.SchemaElementKind == EdmSchemaElementKind.Action && ((IEdmAction)element).IsBound
                          select element as IEdmAction;

            var functions = from element in namespaceElements
                            where element.SchemaElementKind == EdmSchemaElementKind.Function && ((IEdmFunction)element).IsBound
                            select element as IEdmFunction;

            foreach (var enumType in enumTypes)
            {
                OdcmEnum odcmEnum;
                if (!OdcmModel.TryResolveType(enumType.Name, enumType.Namespace, out odcmEnum))
                {
                    odcmEnum = new OdcmEnum(enumType.Name, enumType.Namespace);
                    odcmEnum.UnderlyingType = (OdcmPrimitiveType)ResolveType(enumType.UnderlyingType.Name, enumType.UnderlyingType.Namespace, TypeKind.Primitive);
                    OdcmModel.AddType(odcmEnum);
                }

                foreach (var enumMember in enumType.Members)
                {
                    odcmEnum.Members.Add(new OdcmEnumMember(enumMember.Name)
                    {
                        Value = ((EdmIntegerConstant)enumMember.Value).Value
                    });
                }
            }

            foreach (var complexType in complexTypes)
            {
                OdcmClass odcmClass;
                if (!OdcmModel.TryResolveType(complexType.Name, complexType.Namespace, out odcmClass))
                {
                    odcmClass = new OdcmClass(complexType.Name, complexType.Namespace, OdcmClassKind.Complex);
                    OdcmModel.AddType(odcmClass);
                }

                odcmClass.IsAbstract = complexType.IsAbstract;

                if (complexType.BaseType != null)
                {
                    OdcmClass baseClass;
                    if (!OdcmModel.TryResolveType(((IEdmSchemaElement)complexType.BaseType).Name, ((IEdmSchemaElement)complexType.BaseType).Namespace, out baseClass))
                    {
                        baseClass = new OdcmClass(((IEdmSchemaElement)complexType.BaseType).Name, ((IEdmSchemaElement)complexType.BaseType).Namespace, OdcmClassKind.Complex);
                        OdcmModel.AddType(baseClass);
                    }
                    odcmClass.Base = baseClass;
                    if (!baseClass.Derived.Contains(odcmClass))
                    {
                        baseClass.Derived.Add(odcmClass);
                    }
                }

                var structuralProperties = from element in complexType.Properties()
                                           where element.PropertyKind == EdmPropertyKind.Structural &&
                                           element.DeclaringType == (IEdmStructuredType)complexType
                                           select element as IEdmStructuralProperty;
                foreach (var structuralProperty in structuralProperties)
                {
                    OdcmField odcmField = WriteStructuralField(odcmClass, structuralProperty);
                    WriteStructuralProperty(odcmClass, odcmField, structuralProperty);
                }
            }

            foreach (var entityType in entityTypes)
            {
                OdcmClass odcmClass;
                if (!OdcmModel.TryResolveType(entityType.Name, entityType.Namespace, out odcmClass))
                {
                    odcmClass = new OdcmClass(entityType.Name, entityType.Namespace, OdcmClassKind.Entity);
                    OdcmModel.AddType(odcmClass);
                }

                odcmClass.IsAbstract = entityType.IsAbstract;

                if (entityType.BaseType != null)
                {
                    OdcmClass baseClass;
                    if (!OdcmModel.TryResolveType(((IEdmSchemaElement)entityType.BaseType).Name, ((IEdmSchemaElement)entityType.BaseType).Namespace, out baseClass))
                    {
                        baseClass = new OdcmClass(((IEdmSchemaElement)entityType.BaseType).Name, ((IEdmSchemaElement)entityType.BaseType).Namespace, OdcmClassKind.Entity);
                        OdcmModel.AddType(baseClass);
                    }
                    odcmClass.Base = baseClass;
                    if (!baseClass.Derived.Contains(odcmClass))
                    {
                        baseClass.Derived.Add(odcmClass);
                    }
                }

                var structuralProperties = from element in entityType.DeclaredProperties
                                           where element.PropertyKind == EdmPropertyKind.Structural
                                           select element as IEdmStructuralProperty;
                foreach (var structuralProperty in structuralProperties)
                {
                    OdcmField odcmField = WriteStructuralField(odcmClass, structuralProperty);
                    WriteStructuralProperty(odcmClass, odcmField, structuralProperty);
                }

                foreach (IEdmStructuralProperty keyProperty in entityType.Key())
                {
                    var property = FindProperty(odcmClass, keyProperty);
                    if (property != null)
                    {
                        // The properties that compose the key MUST be non-nullable.
                        property.IsNullable = false;
                    }

                    odcmClass.Key.Add(FindField(odcmClass, keyProperty));
                }

                var navigationProperties = from element in entityType.DeclaredProperties
                                           where element.PropertyKind == EdmPropertyKind.Navigation
                                           select element as IEdmNavigationProperty;
                foreach (var navigationProperty in navigationProperties)
                {
                    OdcmField odcmField = WriteNavigationField(odcmClass, navigationProperty);
                    WriteNavigationProperty(odcmClass, odcmField, navigationProperty);
                }

                var entityTypeActions = from element in actions
                                        where IsOperationBound(element, entityType)
                                        select element;
                foreach (var action in entityTypeActions)
                {
                    WriteMethod(odcmClass, action);
                }

                var entityTypeFunctions = from element in functions
                                          where IsOperationBound(element, entityType)
                                          select element;
                foreach (var function in entityTypeFunctions)
                {
                    WriteMethod(odcmClass, function);
                }
            }

            foreach (var entityContainer in entityContainers)
            {
                OdcmClass odcmClass;
                if (!OdcmModel.TryResolveType(entityContainer.Name, entityContainer.Namespace, out odcmClass))
                {
                    odcmClass = new OdcmClass(entityContainer.Name, entityContainer.Namespace, OdcmClassKind.Service);
                    OdcmModel.AddType(odcmClass);
                }

                var entitySets = from element in entityContainer.Elements
                                 where element.ContainerElementKind == EdmContainerElementKind.EntitySet
                                 select element as IEdmEntitySet;
                foreach (var entitySet in entitySets)
                {
                    OdcmField odcmField = WriteField(odcmClass, entitySet);
                    WriteProperty(odcmClass, odcmField, entitySet);
                }

                var singletons = from element in entityContainer.Elements
                                 where element.ContainerElementKind == EdmContainerElementKind.Singleton
                                 select element as IEdmSingleton;
                foreach (var singleton in singletons)
                {
                    OdcmField odcmField = WriteField(odcmClass, singleton);
                    WriteProperty(odcmClass, odcmField, singleton);
                }

                var actionImports = from element in entityContainer.Elements
                                    where element.ContainerElementKind == EdmContainerElementKind.ActionImport
                                    select element as IEdmActionImport;
                foreach (var actionImport in actionImports)
                {
                    WriteMethod(odcmClass, actionImport.Action);
                }

                var functionImports = from element in entityContainer.Elements
                                      where element.ContainerElementKind == EdmContainerElementKind.FunctionImport
                                      select element as IEdmFunctionImport;
                foreach (var functionImport in functionImports)
                {
                    WriteMethod(odcmClass, functionImport.Function);
                }
            }
        }
예제 #13
0
 private void WriteStructuralProperty(OdcmClass odcmClass, OdcmField odcmField, IEdmStructuralProperty structuralProperty)
 {
     WriteProperty(odcmClass, odcmField, structuralProperty);
 }
예제 #14
0
 private void WriteNavigationProperty(OdcmClass odcmClass, OdcmField odcmField, IEdmNavigationProperty navigationProperty)
 {
     WriteProperty(odcmClass, odcmField, navigationProperty);
 }
예제 #15
0
 public static string GetFieldName(OdcmField odcmField)
 {
     return(odcmField.Name);
 }
예제 #16
0
 public void Write(OdcmField odcmField)
 {
     _("private {0} {1};", NamesService.GetPublicTypeName(odcmField.Type).FullName, odcmField.Name);
 }