Exemplo n.º 1
0
        private void BuildEntryPointDescription(
            IApiDocumentation apiDocumentation,
            ControllerInfo entryPointControllerInfo,
            IHttpControllerDescriptionBuilder <EntryPointDescriptionController> entryPointControllerDescriptionBuilder)
        {
            var classUri = apiDocumentation.Context.Mappings.MappingFor(typeof(IApiDocumentation)).Classes.Select(item => item.Uri).FirstOrDefault();
            var apiDocumentationClass = apiDocumentation.Context.Create <IClass>(classUri);
            var baseUri = apiDocumentation.Context.BaseUriSelector.SelectBaseUri(new EntityId(new Uri("/", UriKind.Relative)));

            foreach (OperationInfo <Verb> operation in entryPointControllerInfo.Operations)
            {
                var url = (Uri)operation.Url;
                if (operation.UrlTemplate != null)
                {
                    var template  = new UriTemplate(baseUri + operation.UrlTemplate.TrimStart('/'));
                    var variables = operation.UnderlyingMethod.GetParameters().ToDictionary(parameter => parameter.Name, parameter => (object)parameter.DefaultValue.ToString());
                    url = template.ResolveUri(variables);
                }

                var operationId        = new EntityId(url.Combine(baseUri));
                var supportedOperation = operation.AsOperation(apiDocumentation, operationId);
                supportedOperation.MediaTypes.AddRange(ApiDescriptionBuilder.RdfMediaTypes);
                supportedOperation.Label = operation.UnderlyingMethod.Name;
                supportedOperation.Method.Add(operation.ProtocolSpecificCommand.ToString());
                var returned = apiDocumentation.Context.Create <IClass>(apiDocumentation.CreateBlankId());
                returned.SubClassOf.Add(apiDocumentationClass);
                supportedOperation.Returns.Add(returned);
                apiDocumentationClass.SupportedOperations.Add(supportedOperation);
            }

            apiDocumentation.SupportedClasses.Add(apiDocumentationClass);
        }
Exemplo n.º 2
0
 public void Teardown()
 {
     _apiDocumentation          = null;
     _xmlDocProvider            = null;
     _typeDescriptionBuilder    = null;
     _namedGraphSelectorFactory = null;
     _descriptionBuilder        = null;
 }
Exemplo n.º 3
0
        public void Setup()
        {
            Uri baseUri = new Uri("http://temp.org/");

            _apiDocumentation          = MockHelpers.MockEntity <IApiDocumentation>((_entityContext = SetupEntityContext(baseUri)).Object, new EntityId(new Uri(baseUri, "api")));
            _xmlDocProvider            = SetupXmlDocProvider();
            _typeDescriptionBuilder    = SetupTypeDescriptionBuilder(_entityContext);
            _namedGraphSelectorFactory = SetupNamedGraphSelectorFactory(baseUri);
            _descriptionBuilder        = SetupHttpControllerDescriptionBuilder();
        }
Exemplo n.º 4
0
        /// <inheritdoc />
        public void BuildDescription(IApiDocumentation apiDocumentation, IEnumerable <Uri> profiles)
        {
            ControllerInfo entryPointControllerInfo = null;
            IHttpControllerDescriptionBuilder <EntryPointDescriptionController> entryPointControllerDescriptionBuilder = null;

            foreach (var controllerDescriptionBuilder in _controllerDescriptionBuilders)
            {
                var  controllerDescriptionBuilderType = controllerDescriptionBuilder.GetType();
                Type targetImplementation             = null;
                controllerDescriptionBuilderType.GetInterfaces().FirstOrDefault(@interface => (@interface.IsGenericType) &&
                                                                                (@interface.GetGenericTypeDefinition() == typeof(IHttpControllerDescriptionBuilder <>)) &&
                                                                                (typeof(IController).IsAssignableFrom(targetImplementation = @interface.GetGenericArguments()[0])));
                if ((targetImplementation == null) || ((targetImplementation.IsGenericType) && (targetImplementation.GetGenericTypeDefinition() == typeof(DescriptionController <>))))
                {
                    continue;
                }

                var controllerDescription = controllerDescriptionBuilder.BuildDescriptor();
                if (controllerDescriptionBuilder is IHttpControllerDescriptionBuilder <EntryPointDescriptionController> )
                {
                    entryPointControllerDescriptionBuilder = (IHttpControllerDescriptionBuilder <EntryPointDescriptionController>)controllerDescriptionBuilder;
                    entryPointControllerInfo = controllerDescription;
                    continue;
                }

                if ((controllerDescription.EntryPoint == null) || (controllerDescription.EntryPoint.Url.ToString() != EntryPoint.ToString()))
                {
                    continue;
                }

                var apiDescriptionBuilder = _apiDescriptionBuilderFactory.Create(targetImplementation);
                apiDescriptionBuilder.BuildDescription(apiDocumentation, profiles);
            }

            if (entryPointControllerInfo != null)
            {
                BuildEntryPointDescription(apiDocumentation, entryPointControllerInfo, entryPointControllerDescriptionBuilder);
            }
        }
Exemplo n.º 5
0
        /// <summary>Initializes a new instance of the <see cref="ApiDescriptionBuilder" /> class.</summary>
        /// <param name="descriptionBuilder">Description builder.</param>
        /// <param name="xmlDocProvider">The XML documentation provider.</param>
        /// <param name="typeDescriptionBuilders">Type description builders.</param>
        /// <param name="serverBehaviorAttributeVisitors">Server behavior attribute visitors.</param>
        /// <param name="namedGraphSelectorFactory">Named graph selector factory.</param>
        protected ApiDescriptionBuilder(
            IHttpControllerDescriptionBuilder descriptionBuilder,
            IXmlDocProvider xmlDocProvider,
            IEnumerable<ITypeDescriptionBuilder> typeDescriptionBuilders,
            IEnumerable<IServerBehaviorAttributeVisitor> serverBehaviorAttributeVisitors,
            INamedGraphSelectorFactory namedGraphSelectorFactory)
        {
            if (descriptionBuilder == null)
            {
                throw new ArgumentNullException("descriptionBuilder");
            }

            if (xmlDocProvider == null)
            {
                throw new ArgumentNullException("xmlDocProvider");
            }

            if (typeDescriptionBuilders == null)
            {
                throw new ArgumentNullException("typeDescriptionBuilders");
            }

            if (!typeDescriptionBuilders.Any())
            {
                throw new ArgumentOutOfRangeException("typeDescriptionBuilders");
            }

            if (namedGraphSelectorFactory == null)
            {
                throw new ArgumentNullException("namedGraphSelectorFactory");
            }

            _descriptionBuilder = descriptionBuilder;
            _xmlDocProvider = xmlDocProvider;
            _typeDescriptionBuilders = typeDescriptionBuilders;
            _serverBehaviorAttributeVisitors = serverBehaviorAttributeVisitors ?? new IServerBehaviorAttributeVisitor[0];
            _namedGraphSelectorFactory = namedGraphSelectorFactory;
        }
Exemplo n.º 6
0
        /// <summary>Initializes a new instance of the <see cref="ApiDescriptionBuilder" /> class.</summary>
        /// <param name="descriptionBuilder">Description builder.</param>
        /// <param name="xmlDocProvider">The XML documentation provider.</param>
        /// <param name="typeDescriptionBuilders">Type description builders.</param>
        /// <param name="serverBehaviorAttributeVisitors">Server behavior attribute visitors.</param>
        /// <param name="namedGraphSelectorFactory">Named graph selector factory.</param>
        protected ApiDescriptionBuilder(
            IHttpControllerDescriptionBuilder descriptionBuilder,
            IXmlDocProvider xmlDocProvider,
            IEnumerable <ITypeDescriptionBuilder> typeDescriptionBuilders,
            IEnumerable <IServerBehaviorAttributeVisitor> serverBehaviorAttributeVisitors,
            INamedGraphSelectorFactory namedGraphSelectorFactory)
        {
            if (descriptionBuilder == null)
            {
                throw new ArgumentNullException("descriptionBuilder");
            }

            if (xmlDocProvider == null)
            {
                throw new ArgumentNullException("xmlDocProvider");
            }

            if (typeDescriptionBuilders == null)
            {
                throw new ArgumentNullException("typeDescriptionBuilders");
            }

            if (!typeDescriptionBuilders.Any())
            {
                throw new ArgumentOutOfRangeException("typeDescriptionBuilders");
            }

            if (namedGraphSelectorFactory == null)
            {
                throw new ArgumentNullException("namedGraphSelectorFactory");
            }

            _descriptionBuilder              = descriptionBuilder;
            _xmlDocProvider                  = xmlDocProvider;
            _typeDescriptionBuilders         = typeDescriptionBuilders;
            _serverBehaviorAttributeVisitors = serverBehaviorAttributeVisitors ?? new IServerBehaviorAttributeVisitor[0];
            _namedGraphSelectorFactory       = namedGraphSelectorFactory;
        }
        private void BuildEntryPointDescription(
            IApiDocumentation apiDocumentation,
            ControllerInfo entryPointControllerInfo,
            IHttpControllerDescriptionBuilder<EntryPointDescriptionController> entryPointControllerDescriptionBuilder)
        {
            var classUri = apiDocumentation.Context.Mappings.MappingFor(typeof(IApiDocumentation)).Classes.Select(item => item.Uri).FirstOrDefault();
            var apiDocumentationClass = apiDocumentation.Context.Create<IClass>(classUri);
            var baseUri = apiDocumentation.Context.BaseUriSelector.SelectBaseUri(new EntityId(new Uri("/", UriKind.Relative)));
            foreach (OperationInfo<Verb> operation in entryPointControllerInfo.Operations)
            {
                var url = (Uri)operation.Url;
                if (operation.UrlTemplate != null)
                {
                    var template = new UriTemplate(baseUri + operation.UrlTemplate.TrimStart('/'));
                    var variables = operation.UnderlyingMethod.GetParameters().ToDictionary(parameter => parameter.Name, parameter => (object)parameter.DefaultValue.ToString());
                    url = template.ResolveUri(variables);
                }

                var operationId = new EntityId(url.Combine(baseUri));
                var supportedOperation = operation.AsOperation(apiDocumentation, operationId);
                supportedOperation.MediaTypes.AddRange(ApiDescriptionBuilder.RdfMediaTypes);
                supportedOperation.Label = operation.UnderlyingMethod.Name;
                supportedOperation.Method.Add(operation.ProtocolSpecificCommand.ToString());
                var returned = apiDocumentation.Context.Create<IClass>(apiDocumentation.CreateBlankId());
                returned.SubClassOf.Add(apiDocumentationClass);
                supportedOperation.Returns.Add(returned);
                apiDocumentationClass.SupportedOperations.Add(supportedOperation);
            }

            apiDocumentation.SupportedClasses.Add(apiDocumentationClass);
        }