public ProfilesAppliedResourceModel( ContentTypeUsage usage, ProfileResourceModel[] profileResourceModels) { if (profileResourceModels == null || profileResourceModels.Length == 0) { throw new ArgumentException("Argument must be non-null, and non-empty.", nameof(profileResourceModels)); } if (profileResourceModels.Select(x => x.ResourceModel) .Distinct() .Count() > 1) { throw new ArgumentException("Supplied profile resource models do not have the same underlying resource model."); } _resourceSelector = new ProfilesAppliedResourceSelector(profileResourceModels, usage); var resourceModel = profileResourceModels.First() .ResourceModel; SchemaNameMapProvider = resourceModel.SchemaNameMapProvider; // Assign the current selector as the contextual selector _resourceSelector.UnderlyingResourceSelector = ((IHasContextualResourceSelector)resourceModel) .SetContextualResourceSelector(_resourceSelector); }
public string GetResourceName(SwaggerResource swaggerResource, ContentTypeUsage contentTypeUsage) { var resource = swaggerResource.Resource; var schemaPrefix = resource.Entity.DomainModel.SchemaNameMapProvider.GetSchemaMapByPhysicalName( resource.Entity.Schema) .ProperCaseName; return(SwaggerDocumentHelper.CamelCaseSegments($"{schemaPrefix}_{resource.Name}")); }
public ContentMetaData GetResourceMemberData(Resource resource, ContentTypeUsage contentTypeUsage) { var contentMetaData = new ContentMetaData(); switch (contentTypeUsage) { case ContentTypeUsage.Readable: if (resource.ReadContentType.Property != null) { contentMetaData.MemberCount += resource.ReadContentType.Property.Count(); contentMetaData.Members.AddRange( resource.ReadContentType.Property.Select(property => property.name)); } if (resource.ReadContentType.Object != null) { UpdateContentMetaData(resource.ReadContentType.Object, contentMetaData); } if (resource.ReadContentType.Collection != null) { UpdateContentMetaData(resource.ReadContentType.Collection, contentMetaData); } break; case ContentTypeUsage.Writable: if (resource.WriteContentType.Property != null) { contentMetaData.MemberCount += resource.WriteContentType.Property.Count(); contentMetaData.Members.AddRange( resource.WriteContentType.Property.Select(property => property.name)); } if (resource.WriteContentType.Object != null) { UpdateContentMetaData(resource.WriteContentType.Object, contentMetaData); } if (resource.WriteContentType.Collection != null) { UpdateContentMetaData(resource.WriteContentType.Collection, contentMetaData); } break; } return(contentMetaData); }
public static string CreateContentType( string resourceCollectionName, string profileName, ContentTypeUsage usage) { // ReSharper disable once UseStringInterpolation return(string.Format( "application/vnd.ed-fi{0}.{1}.{2}.{3}+json", string.Empty, CompositeTermInflector.MakeSingular(resourceCollectionName).ToLower(), profileName.ToLower(), usage.ToString().ToLower())); }
private SwaggerResource GetGenerationContextForSwaggerResource( IList <Resource> resources, SwaggerResource swaggerResource, ContentTypeUsage contentTypeUsage) { if (!swaggerResource.Resource.IsBase()) { return(null); } var derivedResource = resources.FirstOrDefault(r => r.IsDerivedFrom(swaggerResource.Resource)); return(derivedResource == null ? null : new SwaggerResource(swaggerResource.Resource) { ContextualResource = derivedResource, Name = swaggerResource.Name, Readable = contentTypeUsage == ContentTypeUsage.Readable, Writable = contentTypeUsage == ContentTypeUsage.Writable, IsProfileResource = true }); }
private SwaggerResource GetBaseResourceInProfile( IList <Resource> resources, SwaggerResource swaggerResource, ContentTypeUsage contentTypeUsage) { if (swaggerResource.Resource.IsBase()) { return(null); } var baseResource = resources.FirstOrDefault(r => swaggerResource.Resource.IsDerivedFrom(r)); return(baseResource == null ? null : new SwaggerResource(baseResource) { Name = GetBaseResourceName(baseResource, swaggerResource.Resource, contentTypeUsage), Readable = contentTypeUsage == ContentTypeUsage.Readable, Writable = contentTypeUsage == ContentTypeUsage.Writable, IsProfileResource = true }); }
public string GetResourceName(SwaggerResource swaggerResource, ContentTypeUsage contentTypeUsage) { var schemaPrefix = swaggerResource.Resource.Entity.DomainModel.SchemaNameMapProvider .GetSchemaMapByPhysicalName(swaggerResource.Resource.Entity.Schema) .ProperCaseName; var name = swaggerResource.ContextualResource == null ? string.Format( "{0}_{1}_{2}", schemaPrefix, CompositeTermInflector.MakeSingular(swaggerResource.Resource.Name), contentTypeUsage) : string.Format( "{0}_{1}_{2}_{3}", schemaPrefix, CompositeTermInflector.MakeSingular(swaggerResource.Resource.Name), swaggerResource.ContextualResource.Name, contentTypeUsage); return(SwaggerDocumentHelper.CamelCaseSegments(name)); }
// Generates a list of assigned profiles that can be used by the client for the sent resource private IEnumerable <string> GetApplicableContentTypes( IEnumerable <string> assignedProfiles, string resourceCollectionName, string resourceItemName, HttpMethod httpMethod) { ContentTypeUsage contentTypeUsage = httpMethod == HttpMethod.Get ? ContentTypeUsage.Readable : ContentTypeUsage.Writable; var assignedContentTypes = assignedProfiles .Select(x => ProfilesContentTypeHelper.CreateContentType(resourceCollectionName, x, contentTypeUsage)); return(assignedContentTypes .Intersect( _profileResourceNamesProvider.GetProfileResourceNames() .Where(x => x.ResourceName.EqualsIgnoreCase(resourceItemName)) .Select( x => ProfilesContentTypeHelper.CreateContentType( CompositeTermInflector.MakePlural(x.ResourceName), x.ProfileName, contentTypeUsage))) .ToList()); }
private string GetBaseResourceName(Resource baseResource, Resource resource, ContentTypeUsage contentTypeUsage) => $"{baseResource.Name}_{CompositeTermInflector.MakeSingular(resource.Name)}_{contentTypeUsage}".ToCamelCase();
public string GetOperationContentType(SwaggerResource swaggerResource, ContentTypeUsage contentTypeUsage) { return(SwaggerDocumentHelper.ContentType); }
public string GetResourceName(OpenApiMetadataResource openApiMetadataResource, ContentTypeUsage contentTypeUsage) { return(openApiMetadataResource.Resource.Name.ToCamelCase()); }
public string GetResourceName(SwaggerResource swaggerResource, ContentTypeUsage contentTypeUsage) { return(swaggerResource.Resource.Name.ToCamelCase()); }
public string GetOperationContentType(OpenApiMetadataResource openApiMetadataResource, ContentTypeUsage contentTypeUsage) { return(OpenApiMetadataDocumentHelper.ContentType); }
public string GetOperationContentType(OpenApiMetadataResource openApiMetadataResource, ContentTypeUsage contentTypeUsage) => ProfilesContentTypeHelper.CreateContentType( openApiMetadataResource.Resource.Name, _documentContext.ProfileContext.ProfileName, contentTypeUsage);
public ProfilesAppliedResourceSelector(ProfileResourceModel[] profileResourceModels, ContentTypeUsage usage) { _profileResourceModels = profileResourceModels; _usage = usage; }
public string GetOperationContentType(SwaggerResource swaggerResource, ContentTypeUsage contentTypeUsage) => ProfilesContentTypeHelper.CreateContentType( swaggerResource.Resource.Name, _documentContext.ProfileContext.ProfileName, contentTypeUsage);