Exemplo n.º 1
0
        public void Apply(Operation operation, DataTypeRegistry dataTypeRegistry, ApiDescription apiDescription)
        {
            var methodNode = _navigator.SelectSingleNode(GetXPathFor(apiDescription.ActionDescriptor));

            operation.Summary = GetChildValueOrDefault(methodNode, SummaryExpression);
            operation.Notes   = GetChildValueOrDefault(methodNode, RemarksExpression);

            foreach (var paramDesc in apiDescription.ParameterDescriptions)
            {
                if (paramDesc.ParameterDescriptor == null)
                {
                    continue;                                        // not in action signature (e.g. route parameter)
                }
                var parameter = operation.Parameters.SingleOrDefault(p => p.Name == paramDesc.Name);
                if (parameter == null)
                {
                    continue;
                }

                parameter.Description = GetChildValueOrDefault(
                    methodNode,
                    String.Format(ParameterExpression, paramDesc.ParameterDescriptor.ParameterName));
            }

            if (methodNode == null)
            {
                return;
            }

            foreach (var responseMessage in GetResponseMessages(methodNode))
            {
                operation.ResponseMessages.Add(responseMessage);
            }
        }
Exemplo n.º 2
0
        public void Apply(DataType model, DataTypeRegistry dataTypeRegistry, Type type)
        {
            var typeNode = _navigator.SelectSingleNode(String.Format(TypeExpression, type.FullName));

            if (typeNode == null)
            {
                return;
            }

            var summary = GetChildValue(typeNode, SummaryExpression);

            if (summary != null)
            {
                model.Description = summary;
            }

            foreach (var property in model.Properties)
            {
                var propertyNode = _navigator.SelectSingleNode(String.Format(PropertyExpression, type.FullName, property.Key));
                if (propertyNode == null)
                {
                    continue;
                }

                summary = GetChildValue(propertyNode, SummaryExpression);
                if (summary != null)
                {
                    property.Value.Description = summary;
                }
            }
        }
Exemplo n.º 3
0
        public void Apply(Operation operation, DataTypeRegistry dataTypeRegistry, ApiDescription apiDescription)
        {
            if (operation.Parameters == null)
            {
                return;
            }

            HandleFromUriObjectParams(operation, dataTypeRegistry, apiDescription);
        }
Exemplo n.º 4
0
 public void Apply(Operation operation, DataTypeRegistry dataTypeRegistry, ApiDescription apiDescription)
 {
     if (apiDescription.ActionDescriptor.GetFilters().OfType <AuthorizeAttribute>().Any())
     {
         operation.ResponseMessages.Add(new ResponseMessage
         {
             Code    = (int)HttpStatusCode.Unauthorized,
             Message = "Authentication required"
         });
     }
 }
Exemplo n.º 5
0
        public void Apply(DataType model, DataTypeRegistry dataTypeRegistry, Type type)
        {
            var typeNode = _navigator.SelectSingleNode(String.Format(TypeExpression, type.FullName));

            model.Description = GetChildValueOrDefault(typeNode, SummaryExpression);

            foreach (var property in model.Properties)
            {
                var propertyNode = _navigator.SelectSingleNode(String.Format(PropertyExpression, type.FullName, property.Key));
                property.Value.Description = GetChildValueOrDefault(propertyNode, SummaryExpression);
            }
        }
Exemplo n.º 6
0
        public void Apply(DataType model, DataTypeRegistry dataTypeRegistry, Type type)
        {
            var camelCasedProperties = new Dictionary <string, DataType>();

            foreach (var entry in model.Properties)
            {
                var key = entry.Key;
                camelCasedProperties[Char.ToLower(key[0]) + key.Substring(1)] = entry.Value;
            }

            model.Properties = camelCasedProperties;
        }
Exemplo n.º 7
0
 public void Apply(DataType model, DataTypeRegistry dataTypeRegistry, Type type)
 {
     foreach (
         var name in
         from name in model.Properties.Keys.ToArray()
         let property = type.GetProperty(name)
                        where property != null && property.GetCustomAttributes(typeof(ObsoleteAttribute), false).Any()
                        select name)
     {
         model.Properties.Remove(name);
     }
 }
        public void Apply(Operation operation, DataTypeRegistry dataTypeRegistry, ApiDescription apiDescription)
        {
            operation.ResponseMessages.Add(new ResponseMessage
            {
                Code    = (int)HttpStatusCode.OK,
                Message = "It's all good!"
            });

            operation.ResponseMessages.Add(new ResponseMessage
            {
                Code    = (int)HttpStatusCode.InternalServerError,
                Message = "Somethings up!"
            });
        }
Exemplo n.º 9
0
        public void Apply(Operation operation, DataTypeRegistry dataTypeRegistry, ApiDescription apiDescription)
        {
            var scopeIds = apiDescription.ActionDescriptor.GetFilterPipeline()
                           .Select(filterInfo => filterInfo.Instance)
                           .OfType <ScopeAuthorizeAttribute>()
                           .SelectMany(attr => attr.Scopes)
                           .Distinct();

            if (scopeIds.Any())
            {
                operation.Authorizations           = new Dictionary <string, IList <Scope> >();
                operation.Authorizations["oauth2"] = scopeIds
                                                     .Select(id => new Scope {
                    ScopeId = id
                })
                                                     .ToList();
            }
        }
Exemplo n.º 10
0
        private void HandleFromUriObjectParams(Operation operation, DataTypeRegistry dataTypeRegistry, ApiDescription apiDescription)
        {
            var models = dataTypeRegistry.GetModels();

            var fromUriObjectParams = operation.Parameters
                                      .Where(param => param.ParamType == "query" && models.ContainsKey(param.Type))
                                      .ToArray();

            foreach (var objectParam in fromUriObjectParams)
            {
                var type = apiDescription.ParameterDescriptions
                           .Single(paramDesc => paramDesc.Name == objectParam.Name)
                           .ParameterDescriptor.ParameterType;

                var model = models[objectParam.Type];

                ExtractAndAddQueryParams(model, "", objectParam.Required, models, operation.Parameters);
                operation.Parameters.Remove(objectParam);
            }
        }
Exemplo n.º 11
0
        public override void Execute()
        {
            // Define the schema elements.
            var schema     = Schemas.GetSchemaByNamespace(BasePluginConstants.DesignModel_SchemaNamespace);
            var stringType = DataTypeRegistry.Get(BasePluginConstants.DataType_string);
            var boolType   = DataTypeRegistry.Get(BasePluginConstants.DataType_bool);

            schema
            .RootElement
            .FindChildElement("Namespace/Entity")
            .GetBuilder()
            .CreateElement("Relation", "Defines a relation to another entity")
            .CreateAttribute("name", stringType, "Relation name")
            .CreateAttribute("destination", stringType, "Destination entity name", c => c.IsMandatory          = true)
            .CreateAttribute("mandatory", boolType, "Whether this is a mandatory relation", c => c.IsMandatory = true);

            var designModelElement = schema.RootElement.FindChildElement("Namespace/Entity/Relation");

            // Register parser.
            DesignModelConverterFactory.RegisterFactory(designModelElement, new EntityRelationParser(DesignModelCollection));
        }
Exemplo n.º 12
0
        /// <summary>
        /// This Operation is called, when the module shall initialize itself.
        /// </summary>
        /// <param name="typeRegistry">The type registry for service requests or registrations.</param>
        /// <inheritdoc/>
        public void Initialize(ITypeRegistry typeRegistry)
        {
            var odataObjectFactory = new ODataObjectFactory();

            var pathService                      = new ODataPathService();
            var modelItemNamingService           = new ModelItemNamingService();
            var navigationPropertyBuilderFactory = new NavigationPropertyBuilderFactory(modelItemNamingService);

            var modelBuilderFactory     = new ModelBuilderFactory(pathService, navigationPropertyBuilderFactory);
            var queryBuilderFactory     = new QueryBuilderFactory();
            var operationContextFactory = new OperationContextFactory(pathService);
            var dataTypeRegistry        = new DataTypeRegistry(new DefaultDataTypeKeyLookupStrategy());

            typeRegistry.RegisterInstance <IModelBuilderFactory>(modelBuilderFactory);
            typeRegistry.RegisterInstance <IDataTypeRegistry>(dataTypeRegistry);
            typeRegistry.RegisterInstance <IODataObjectFactory>(odataObjectFactory);
            typeRegistry.RegisterInstance <IODataPathService>(pathService);
            typeRegistry.RegisterInstance <IOperationContextFactory>(operationContextFactory);
            typeRegistry.RegisterInstance <IModelItemNamingService>(modelItemNamingService);
            typeRegistry.RegisterInstance <IQueryBuilderFactory>(queryBuilderFactory);
        }
Exemplo n.º 13
0
 public void Apply(DataType model, DataTypeRegistry dataTypeRegistry, Type type)
 {
     model.Description = "foobar";
 }
Exemplo n.º 14
0
 public void Apply(Operation operation, DataTypeRegistry dataTypeRegistry, System.Web.Http.Description.ApiDescription apiDescription)
 {
     operation.ResponseMessages.Add(new ResponseMessage {
         Code = 200, Message = "It's all good!"
     });
 }