private void GetMethodsFromChildResources(EndPoint resource, string url, ControllerObject parentController,
                                                  IDictionary <string, Parameter> parentUriParameters)
        {
            if (resource == null)
            {
                return;
            }

            var fullUrl = resource.Path;

            var methods = webApiMethodsGenerator.GetMethods(resource, fullUrl, parentController, parentController.Name, parentUriParameters, modelsNamespace);

            foreach (var method in methods)
            {
                parentController.Methods.Add(method);
            }

            GetInheritedUriParams(parentUriParameters, resource);

            //GetMethodsFromChildResources(resource.Resources, fullUrl, parentController, parentUriParameters);
        }
        private ControllerObject CreateControllerAndAddMethods(IList <ControllerObject> classes, ICollection <string> classesNames,
                                                               IDictionary <string, ControllerObject> classesObjectsRegistry, EndPoint resource, string fullUrl,
                                                               IDictionary <string, Parameter> parentUriParameters)
        {
            var controller = new ControllerObject
            {
                Name        = GetUniqueObjectName(resource, null),
                PrefixUri   = UrlGeneratorHelper.FixControllerRoutePrefix(fullUrl),
                Description = resource.Description,
            };

            var methods = webApiMethodsGenerator.GetMethods(resource, fullUrl, controller, controller.Name, parentUriParameters, modelsNamespace);

            foreach (var method in methods)
            {
                controller.Methods.Add(method);
            }

            classesNames.Add(controller.Name);
            classes.Add(controller);
            classesObjectsRegistry.Add(CalculateClassKey(fullUrl), controller);
            return(controller);
        }
        private void GetControllers(IList <ControllerObject> classes,
                                    ICollection <string> classesNames, IDictionary <string, ControllerObject> classesObjectsRegistry, IDictionary <string, Parameter> parentUriParameters)
        {
            var rootController = new ControllerObject {
                Name = "Home", PrefixUri = "/"
            };

            foreach (var resource in raml.WebApi.EndPoints)
            {
                if (resource == null)
                {
                    continue;
                }

                var fullUrl = resource.Path;

                var isParentController = fullUrl.Count(u => u == '/') == 1;
                if (isParentController)
                {
                    CreateControllerAndAddMethods(classes, classesNames, classesObjectsRegistry, resource, fullUrl, parentUriParameters);
                }
                else
                {
                    var parentController = classes.FirstOrDefault(c => c.PrefixUri.StartsWith("/")
                                                            ? resource.Path.StartsWith(c.PrefixUri)
                                                            : resource.Path.StartsWith("/" + c.PrefixUri));
                    if (parentController != null)
                    {
                        GetMethodsFromChildResources(resource, fullUrl, parentController, parentUriParameters);
                    }
                    else
                    {
                        CreateControllerAndAddMethods(classes, classesNames, classesObjectsRegistry, resource, fullUrl, parentUriParameters);
                    }
                }
            }
        }
        private void AddMethodsToRootController(IList <ControllerObject> classes, ICollection <string> classesNames,
                                                IDictionary <string, ControllerObject> classesObjectsRegistry, EndPoint resource, string fullUrl, ControllerObject rootController,
                                                IDictionary <string, Parameter> parentUriParameters)
        {
            var generatedMethods = webApiMethodsGenerator.GetMethods(resource, fullUrl, rootController, rootController.Name, parentUriParameters,
                                                                     modelsNamespace);

            foreach (var method in generatedMethods)
            {
                rootController.Methods.Add(method);
            }

            classesNames.Add(rootController.Name);
            classesObjectsRegistry.Add(CalculateClassKey("/"), rootController);
            classes.Add(rootController);
        }