/// <summary> /// Initialize the entity container to Swagger model. /// </summary> protected virtual void InitializeContainer() { Contract.Assert(SwaggerDocument != null); Contract.Assert(EdmModel != null); SwaggerPaths = new JObject(); SwaggerDocument.Add("paths", SwaggerPaths); if (EdmModel.EntityContainer == null) { return; } foreach (var entitySet in EdmModel.EntityContainer.EntitySets()) { SwaggerPaths.Add("/" + entitySet.Name, ODataSwaggerUtilities.CreateSwaggerPathForEntitySet(entitySet)); SwaggerPaths.Add(ODataSwaggerUtilities.GetPathForEntity(entitySet), ODataSwaggerUtilities.CreateSwaggerPathForEntity(entitySet)); } foreach (var operationImport in EdmModel.EntityContainer.OperationImports()) { SwaggerPaths.Add(ODataSwaggerUtilities.GetPathForOperationImport(operationImport), ODataSwaggerUtilities.CreateSwaggerPathForOperationImport(operationImport)); } }
/// <summary> /// Initialize the operations to Swagger model. /// </summary> protected virtual void InitializeOperations() { Contract.Assert(SwaggerDocument != null); Contract.Assert(EdmModel != null); Contract.Assert(SwaggerPaths != null); if (EdmModel.EntityContainer == null) { return; } foreach (var operation in EdmModel.SchemaElements.OfType <IEdmOperation>()) { // skip unbound operation if (!operation.IsBound) { continue; } var boundParameter = operation.Parameters.First(); var boundType = boundParameter.Type.Definition; // skip operation bound to non entity (or entity collection) if (boundType.TypeKind == EdmTypeKind.Entity) { IEdmEntityType entityType = (IEdmEntityType)boundType; foreach (var entitySet in EdmModel.EntityContainer.EntitySets().Where(es => es.EntityType().Equals(entityType))) { SwaggerPaths.Add(ODataSwaggerUtilities.GetPathForOperationOfEntity(operation, entitySet), ODataSwaggerUtilities.CreateSwaggerPathForOperationOfEntity(operation, entitySet)); } } else if (boundType.TypeKind == EdmTypeKind.Collection) { IEdmCollectionType collectionType = boundType as IEdmCollectionType; if (collectionType != null && collectionType.ElementType.Definition.TypeKind == EdmTypeKind.Entity) { IEdmEntityType entityType = (IEdmEntityType)collectionType.ElementType.Definition; foreach (var entitySet in EdmModel.EntityContainer.EntitySets().Where(es => es.EntityType().Equals(entityType))) { SwaggerPaths.Add(ODataSwaggerUtilities.GetPathForOperationOfEntitySet(operation, entitySet), ODataSwaggerUtilities.CreateSwaggerPathForOperationOfEntitySet(operation, entitySet)); } } } } }
/// <summary> /// Initialize the type definitions to Swagger model. /// </summary> protected virtual void InitializeTypeDefinitions() { Contract.Assert(SwaggerDocument != null); Contract.Assert(EdmModel != null); SwaggerTypeDefinitions = new JObject(); SwaggerDocument.Add("definitions", SwaggerTypeDefinitions); foreach (var type in EdmModel.SchemaElements.OfType <IEdmStructuredType>()) { SwaggerTypeDefinitions.Add(type.FullTypeName(), ODataSwaggerUtilities.CreateSwaggerTypeDefinitionForStructuredType(type)); } }