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}"));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 8
0
        // 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();
Exemplo n.º 10
0
 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());
 }
Exemplo n.º 13
0
 public string GetOperationContentType(OpenApiMetadataResource openApiMetadataResource, ContentTypeUsage contentTypeUsage)
 {
     return(OpenApiMetadataDocumentHelper.ContentType);
 }
Exemplo n.º 14
0
 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);