public static ApiObject GetQueryObject(ClientGeneratorMethod generatedMethod, Method method, string objectName)
        {
            var queryObject = new ApiObject { Name = generatedMethod.Name + objectName + "Query" };
            queryObject.Properties = ParseParameters(method);

            return queryObject;
        }
Example #2
0
        private IEnumerable <Property> BuildResponseProperties(ClientGeneratorMethod method)
        {
            var properties = new Collection <Property>();

            if (method.ReturnType != "string" && method.ReturnType != "HttpContent")
            {
                properties.Add(new Property
                {
                    Name        = "Content",
                    Description = "Typed Response content",
                    Type        = method.ReturnType
                });
            }

            if (method.ResponseHeaders != null && method.ResponseHeaders.Any())
            {
                properties.Add(new Property
                {
                    Name        = "Headers",
                    Description = "Typed Response headers (defined in RAML)",
                    Type        = method.ResponseHeaderType
                });
            }

            return(properties);
        }
Example #3
0
        private ClientGeneratorMethod BuildClassMethod(string url, Method method, Resource resource)
        {
            var parentUrl = UrlGeneratorHelper.GetParentUri(url, resource.RelativeUri);

            var generatedMethod = new ClientGeneratorMethod
            {
                Name        = NetNamingMapper.GetMethodName(method.Verb ?? "Get" + resource.RelativeUri),
                ReturnType  = GetReturnType(GeneratorServiceHelper.GetKeyForResource(method, resource, parentUrl), method, resource, url),
                Parameter   = GetParameter(GeneratorServiceHelper.GetKeyForResource(method, resource, parentUrl), method, resource, url),
                Comment     = GetComment(resource, method, url),
                Url         = url,
                Verb        = NetNamingMapper.Capitalize(method.Verb),
                Parent      = null,
                UseSecurity =
                    raml.SecuredBy != null && raml.SecuredBy.Any() ||
                    resource.Methods.Any(m => m.Verb == method.Verb && m.SecuredBy != null && m.SecuredBy.Any()),
                RequestContentTypes  = method.Body.Keys.ToArray(),
                ResponseContentTypes = method.Responses != null?method.Responses.Where(r => r.Body != null).SelectMany(r => r.Body.Keys).ToArray() : new string[0]
            };

            // look in traits

            // look in resource types

            return(generatedMethod);
        }
		private IEnumerable<Property> BuildResponseProperties(ClientGeneratorMethod method)
		{
			var properties = new Collection<Property>();

			if (method.ReturnType != "string" && method.ReturnType != "HttpContent")
			{
				properties.Add(new Property
				{
					Name = "Content",
					Description = "Typed Response content",
					Type = method.ReturnType
				});
			}

			if (method.ResponseHeaders != null && method.ResponseHeaders.Any())
			{
				properties.Add(new Property
				{
					Name = "Headers",
					Description = "Typed Response headers (defined in RAML)",
					Type = method.ResponseHeaderType
				});
			}

			return properties;
		}
 public static ApiObject GetHeadersObject(ClientGeneratorMethod generatedMethod, Method method, string objectName)
 {
     return new ApiObject
     {
         Name = generatedMethod.Name + objectName + "Header",
         Properties = ParseHeaders(method)
     };
 }
 public static ApiObject GetHeadersObject(ClientGeneratorMethod generatedMethod, Response response, string objectName)
 {
    return new ApiObject
     {
         Name = generatedMethod.Name + objectName + ParserHelpers.GetStatusCode(response.Code) + "ResponseHeader",
         Properties = ParseHeaders(response)
     };
 }
Example #7
0
 private void GetHeaders(string objectName, Method method, ClientGeneratorMethod generatedMethod)
 {
     if (method.Headers != null && method.Headers.Any())
     {
         var headerObject = HeadersParser.GetHeadersObject(generatedMethod, method, objectName);
         generatedMethod.Header = headerObject;
         headerObjects.Add(headerObject.Name, headerObject);
     }
 }
        private static string GetOkReturnType(ClientGeneratorMethod generatedMethod)
        {
            if (!generatedMethod.ReturnTypeObject.IsMultiple)
                return generatedMethod.ReturnType;

            if (generatedMethod.ReturnTypeObject.Properties.Any(p => p.StatusCode == HttpStatusCode.OK))
                return generatedMethod.ReturnTypeObject.Properties.First(p => p.StatusCode == HttpStatusCode.OK).Type;

            return generatedMethod.ReturnTypeObject.Properties.First().Type;
        }
        private IEnumerable<Property> BuildRequestProperties(ClientGeneratorMethod method)
        {
            var properties = new Collection<Property>();

            if (method.Header != null)
            {
                properties.Add(new Property
                {
                    Name = "Headers",
                    Description = "Typed Request headers",
                    Type = method.Header.Name
                });
            }

            if (method.Verb.ToLowerInvariant() != "get" && method.Verb.ToLowerInvariant() != "delete")
            {
                properties.Add(new Property
                {
                    Name = "Content",
                    Description = "Request content",
                    Type = method.Parameter != null && method.Parameter.Type != "string" ? method.Parameter.Type : "HttpContent"
                });

                properties.Add(new Property
                               {
                                   Name = "Formatter",
                                   Description = "Request formatter",
                                   Type = "MediaTypeFormatter"
                               });
            }

            if (method.Query != null)
            {
                properties.Add(new Property
                {
                    Name = "Query",
                    Description = "Request query string properties",
                    Type = method.Query.Name
                });
            }

            if (method.UriParameters.Any())
            {
                properties.Add(new Property
                {
                    Name = "UriParameters",
                    Description = "Request Uri Parameters",
                    Type = method.UriParametersType
                });
            }

            return properties;
        }
        private IEnumerable <Property> BuildRequestProperties(ClientGeneratorMethod method)
        {
            var properties = new Collection <Property>();

            if (method.Header != null)
            {
                properties.Add(new Property
                {
                    Name        = "Headers",
                    Description = "Typed Request headers",
                    Type        = method.Header.Name
                });
            }

            if (method.Verb.ToLowerInvariant() != "get" && method.Verb.ToLowerInvariant() != "delete")
            {
                properties.Add(new Property
                {
                    Name        = "Content",
                    Description = "Request content",
                    Type        = method.Parameter != null && method.Parameter.Type != "string" ? method.Parameter.Type : "HttpContent"
                });

                properties.Add(new Property
                {
                    Name        = "Formatter",
                    Description = "Request formatter",
                    Type        = "MediaTypeFormatter"
                });
            }

            if (method.Query != null)
            {
                properties.Add(new Property
                {
                    Name        = "Query",
                    Description = "Request query string properties",
                    Type        = method.Query.Name
                });
            }

            if (method.UriParameters.Any())
            {
                properties.Add(new Property
                {
                    Name        = "UriParameters",
                    Description = "Request Uri Parameters",
                    Type        = method.UriParametersType
                });
            }

            return(properties);
        }
Example #11
0
 private void GetQueryParameters(string objectName, Method method, ClientGeneratorMethod generatedMethod)
 {
     if (method.QueryParameters != null && method.QueryParameters.Any())
     {
         var queryObject = queryParametersParser.GetQueryObject(generatedMethod, method, objectName);
         generatedMethod.Query = queryObject;
         if (!queryObjects.ContainsKey(queryObject.Name))
         {
             queryObjects.Add(queryObject.Name, queryObject);
         }
     }
 }
Example #12
0
        private static string GetOkReturnType(ClientGeneratorMethod generatedMethod)
        {
            if (!generatedMethod.ReturnTypeObject.IsMultiple)
            {
                return(generatedMethod.ReturnType);
            }

            if (generatedMethod.ReturnTypeObject.Properties.Any(p => p.StatusCode == HttpStatusCode.OK))
            {
                return(generatedMethod.ReturnTypeObject.Properties.First(p => p.StatusCode == HttpStatusCode.OK).Type);
            }

            return(generatedMethod.ReturnTypeObject.Properties.First().Type);
        }
 private static List<Property> BuildProperties(ClientGeneratorMethod generatedMethod)
 {
     var properties = generatedMethod.ResponseHeaders
         .Select(kv => new Property
                       {
                           Name = kv.Value.Name,
                           Description = kv.Value.Description,
                           Example = kv.Value.Example,
                           StatusCode = kv.Key,
                           Type = kv.Value.Name
                       })
         .ToList();
     return properties;
 }
Example #14
0
        private static List <Property> BuildProperties(ClientGeneratorMethod generatedMethod)
        {
            var properties = generatedMethod.ResponseHeaders
                             .Select(kv => new Property
            {
                Name        = kv.Value.Name,
                Description = kv.Value.Description,
                Example     = kv.Value.Example,
                StatusCode  = kv.Key,
                Type        = kv.Value.Name
            })
                             .ToList();

            return(properties);
        }
Example #15
0
        private void CreateMultipleType(ClientGeneratorMethod generatedMethod)
        {
            var properties = BuildProperties(generatedMethod);

            var name = NetNamingMapper.GetObjectName("Multiple" + generatedMethod.Name + "Header");

            var apiObject = new ApiObject
            {
                Name        = name,
                Description = "Multiple Header Types " + string.Join(", ", properties.Select(p => p.Name)),
                Properties  = properties,
                IsMultiple  = true
            };

            responseHeadersObjects.Add(new KeyValuePair <string, ApiObject>(name, apiObject));

            generatedMethod.ResponseHeaderType = ClientGeneratorMethod.ModelsNamespacePrefix + name;
        }
Example #16
0
        private ClientGeneratorMethod BuildClassMethod(string url, Method method, Resource resource, IDictionary <string, ApiObject> schemaRequestObjects, IDictionary <string, ApiObject> schemaResponseObjects)
        {
            var generatedMethod = new ClientGeneratorMethod
            {
                Name        = NetNamingMapper.GetMethodName(method.Verb ?? "Get" + resource.RelativeUri),
                ReturnType  = GetReturnType(GeneratorServiceHelper.GetKeyForResource(method, resource), method, resource, schemaResponseObjects),
                Parameter   = GetParameter(GeneratorServiceHelper.GetKeyForResource(method, resource), method, resource, schemaRequestObjects),
                Comment     = GetComment(resource, method),
                Url         = url,
                Verb        = NetNamingMapper.Capitalize(method.Verb),
                Parent      = null,
                UseSecurity =
                    raml.SecuredBy != null && raml.SecuredBy.Any() ||
                    resource.Methods.Any(m => m.Verb == method.Verb && m.SecuredBy != null && m.SecuredBy.Any())
            };

            return(generatedMethod);
        }
 private void BuildRequest(ClientGeneratorMethod method, ClassObject classObject, ICollection<ApiObject> objects)
 {
     var requestProperties = BuildRequestProperties(method).ToList();
     if (requestProperties.Any())
     {
         var reqObject = new ApiObject
         {
             Name = classObject.Name + method.Name + "Request",
             Description = "Request object for method " + method.Name + " of class " + classObject.Name,
             Properties = requestProperties
         };
         objects.Add(reqObject);
         method.RequestType = ClientGeneratorMethod.ModelsNamespacePrefix + reqObject.Name;
     }
     else
     {
         method.RequestType = "ApiRequest";
     }
 }
        private void BuildRequest(ClientGeneratorMethod method, ClassObject classObject, ICollection <ApiObject> objects)
        {
            var requestProperties = BuildRequestProperties(method).ToList();

            if (requestProperties.Any())
            {
                var reqObject = new ApiObject
                {
                    Name        = classObject.Name + method.Name + "Request",
                    Description = "Request object for method " + method.Name + " of class " + classObject.Name,
                    Properties  = requestProperties
                };
                objects.Add(reqObject);
                method.RequestType = ClientGeneratorMethod.ModelsNamespacePrefix + reqObject.Name;
            }
            else
            {
                method.RequestType = "ApiRequest";
            }
        }
Example #19
0
        private void BuildResponse(ClientGeneratorMethod method, ClassObject classObject, ICollection <ApiObject> objects)
        {
            var responseProperties = BuildResponseProperties(method).ToList();

            if (responseProperties.Any())
            {
                var respObject = new ApiObject
                {
                    Name        = classObject.Name + method.Name + "Response",
                    Description = "Response object for method " + method.Name + " of class " + classObject.Name,
                    Properties  = responseProperties,
                    IsUnionType = method.ReturnTypeObject != null && method.ReturnTypeObject.IsUnionType
                };
                objects.Add(respObject);
                method.ResponseType = ClientGeneratorMethod.ModelsNamespacePrefix + respObject.Name;
            }
            else
            {
                method.ResponseType = "ApiResponse";
            }
        }
        public void Generate(Resource resource, string url, ClientGeneratorMethod clientGeneratorMethod,
            IDictionary<string, ApiObject> uriParameterObjects, IDictionary<string, Parameter> parentUriParameters)
        {
            var parameters = GetUriParameters(resource, url, parentUriParameters).ToArray();
            clientGeneratorMethod.UriParameters = parameters;

            if (!parameters.Any())
                return;

            var name = NetNamingMapper.GetObjectName(url) + "UriParameters";
            clientGeneratorMethod.UriParametersType = name;
            if (uriParameterObjects.ContainsKey(name))
                return;

            var properties = new List<Property>();
            if (resource.BaseUriParameters != null)
                properties.AddRange(QueryParametersParser.ConvertParametersToProperties(resource.BaseUriParameters));

            if (resource.UriParameters != null)
                properties.AddRange(QueryParametersParser.ConvertParametersToProperties(resource.UriParameters)
                    .Where(up => properties.All(p => !String.Equals(up.Name, p.Name, StringComparison.InvariantCultureIgnoreCase))));

            var urlParameters = ExtractParametersFromUrl(url).ToArray();
            var matchedParameters = MatchParameters(parentUriParameters, urlParameters);

            foreach (var urlParameter in matchedParameters)
            {
                var property = ConvertGeneratorParamToProperty(urlParameter);
                if (properties.All(p => !String.Equals(property.Name, p.Name, StringComparison.InvariantCultureIgnoreCase)))
                    properties.Add(property);
            }

            var apiObject = new ApiObject
                            {
                                Name = name,
                                Description = "Uri Parameters for resource " + resource.RelativeUri,
                                Properties = properties
                            };
            uriParameterObjects.Add(name, apiObject);
        }
        public void Should_Build_Uri_Parameters()
        {
            var uriParameters = new Dictionary<string, Parameter>
                                {
                                    {
                                        "code", new Parameter
                                                {
                                                    DisplayName = "code",
                                                    Type = "integer"
                                                }
                                    }
                                };

            var methods = new List<Method>
                          {
                              new Method
                              {
                                  Verb = "get"
                              }
                          };

            var resource = new Resource
                                {
                                    RelativeUri = "/abc{token}{code}",
                                    Methods = methods,
                                    UriParameters = uriParameters
                                };

            var generator = new UriParametersGenerator();
            var uriParameterObjects = new Dictionary<string, ApiObject>();
            var generatorMethod = new ClientGeneratorMethod { Name = "MethodOne"};

            generator.Generate(resource, "/movies/{bucket}/abc{token}{code}", generatorMethod, uriParameterObjects);

            Assert.AreEqual(1, uriParameterObjects.Count);
            Assert.AreEqual(3, generatorMethod.UriParameters.Count());
            Assert.AreEqual(uriParameterObjects.First().Value.Name, generatorMethod.UriParametersType);
        }
		public void should_parse_query_object()
		{
			var parameterDynamicRaml = new Dictionary<string, object>
			                           {
				                           {"type", "string"},
				                           {"displayName", "ParameterName"},
				                           {"description", "this is the description"}
			                           };

			var parameters = new Dictionary<string, object> {{"one", parameterDynamicRaml}};

			var dynamicRaml = new Dictionary<string, object> {{"method", "get"}, {"queryParameters", parameters}};

			var generatedMethod = new ClientGeneratorMethod { Name = "GeneratedMethod"};
			const string objectName = "ObjName";
			var queryObj = QueryParametersParser.GetQueryObject(generatedMethod, new MethodBuilder().Build(dynamicRaml), objectName);
			var parsedParameters = queryObj.Properties;

			Assert.AreEqual(generatedMethod.Name + objectName + "Query", queryObj.Name);
			Assert.AreEqual(1, parsedParameters.Count);
			Assert.AreEqual("string", parsedParameters.First().Type);
			Assert.AreEqual("One", parsedParameters.First().Name);
		}
Example #23
0
        private void GetResponseHeaders(string objectName, ClientGeneratorMethod generatedMethod, Method method)
        {
            generatedMethod.ResponseHeaders = new Dictionary <HttpStatusCode, ApiObject>();
            foreach (var resp in method.Responses.Where(r => r.Headers != null && r.Headers.Any()))
            {
                var headerObject = HeadersParser.GetHeadersObject(generatedMethod, resp, objectName);
                generatedMethod.ResponseHeaders.Add(ParserHelpers.GetHttpStatusCode(resp.Code), headerObject);
                responseHeadersObjects.Add(headerObject.Name, headerObject);
            }

            if (!generatedMethod.ResponseHeaders.Any())
            {
                generatedMethod.ResponseHeaderType = defaultHeaderType;
            }
            else if (generatedMethod.ResponseHeaders.Count == 1)
            {
                generatedMethod.ResponseHeaderType = ClientGeneratorMethod.ModelsNamespacePrefix + generatedMethod.ResponseHeaders.First().Value.Name;
            }
            else
            {
                CreateMultipleType(generatedMethod);
            }
        }
        private ClientGeneratorMethod BuildClassMethod(string url, Method method, Resource resource)
        {
            var parentUrl = UrlGeneratorHelper.GetParentUri(url, resource.RelativeUri);

            var generatedMethod = new ClientGeneratorMethod
            {
                Name = NetNamingMapper.GetMethodName(method.Verb ?? "Get" + resource.RelativeUri),
                ReturnType = GetReturnType(GeneratorServiceHelper.GetKeyForResource(method, resource, parentUrl), method, resource, url),
                Parameter = GetParameter(GeneratorServiceHelper.GetKeyForResource(method, resource, parentUrl), method, resource, url),
                Comment = GetComment(resource, method),
                Url = url,
                Verb = NetNamingMapper.Capitalize(method.Verb),
                Parent = null,
                UseSecurity =
                    raml.SecuredBy != null && raml.SecuredBy.Any() ||
                    resource.Methods.Any(m => m.Verb == method.Verb && m.SecuredBy != null && m.SecuredBy.Any()),
                RequestContentTypes = method.Body.Keys.ToArray(),
                ResponseContentTypes = method.Responses != null ? method.Responses.Where(r => r.Body != null).SelectMany(r => r.Body.Keys).ToArray() : new string[0]
            };
            return generatedMethod;
        }
	    private ClientGeneratorMethod BuildClassMethod(string url, Method method, Resource resource)
		{
			var generatedMethod = new ClientGeneratorMethod
			{
				Name = NetNamingMapper.GetMethodName(method.Verb ?? "Get" + resource.RelativeUri),
				ReturnType = GetReturnType(GeneratorServiceHelper.GetKeyForResource(method, resource), method, resource, url),
				Parameter = GetParameter(GeneratorServiceHelper.GetKeyForResource(method, resource), method, resource, url),
				Comment = GetComment(resource, method),
				Url = url,
				Verb = NetNamingMapper.Capitalize(method.Verb),
				Parent = null,
				UseSecurity =
					raml.SecuredBy != null && raml.SecuredBy.Any() ||
					resource.Methods.Any(m => m.Verb == method.Verb && m.SecuredBy != null && m.SecuredBy.Any())
			};
			return generatedMethod;
		}
		private void CreateMultipleType(ClientGeneratorMethod generatedMethod)
		{
			var properties = BuildProperties(generatedMethod);

			var name = NetNamingMapper.GetObjectName("Multiple" + generatedMethod.Name + "Header");

			var apiObject = new ApiObject
			{
				Name = name,
				Description = "Multiple Header Types " + string.Join(", ", properties.Select(p => p.Name)),
				Properties = properties,
				IsMultiple = true
			};
			responseHeadersObjects.Add(new KeyValuePair<string, ApiObject>(name, apiObject));

			generatedMethod.ResponseHeaderType = ClientGeneratorMethod.ModelsNamespacePrefix + name;
		}
		private void GetResponseHeaders(string objectName, ClientGeneratorMethod generatedMethod, Method method)
		{
			generatedMethod.ResponseHeaders = new Dictionary<HttpStatusCode, ApiObject>();
			foreach (var resp in method.Responses.Where(r => r.Headers != null && r.Headers.Any()))
			{
				var headerObject = HeadersParser.GetHeadersObject(generatedMethod, resp, objectName);
				generatedMethod.ResponseHeaders.Add(ParserHelpers.GetHttpStatusCode(resp.Code), headerObject);
				responseHeadersObjects.Add(headerObject.Name, headerObject);
			}

			if (!generatedMethod.ResponseHeaders.Any())
			{
				generatedMethod.ResponseHeaderType = defaultHeaderType;
			}
			else if (generatedMethod.ResponseHeaders.Count == 1)
			{
				generatedMethod.ResponseHeaderType = ClientGeneratorMethod.ModelsNamespacePrefix + generatedMethod.ResponseHeaders.First().Value.Name;
			}
			else
			{
				CreateMultipleType(generatedMethod);
			}
		}
		private void GetHeaders(string objectName, Method method, ClientGeneratorMethod generatedMethod)
		{
			if (method.Headers != null && method.Headers.Any())
			{
				var headerObject = HeadersParser.GetHeadersObject(generatedMethod, method, objectName);
				generatedMethod.Header = headerObject;
				headerObjects.Add(headerObject.Name, headerObject);
			}
		}
		private void GetQueryParameters(string objectName, Method method, ClientGeneratorMethod generatedMethod)
		{
			if (method.QueryParameters != null && method.QueryParameters.Any())
			{
				var queryObject = QueryParametersParser.GetQueryObject(generatedMethod, method, objectName);
				generatedMethod.Query = queryObject;
				if (!queryObjects.ContainsKey(queryObject.Name))
					queryObjects.Add(queryObject.Name, queryObject);
			}
		}