Esempio n. 1
0
        private IUrlParamsMapper GetInferredTaxonFilterMapper(ControllerBase controller, string actionName)
        {
            var actionDescriptor = new ReflectedControllerDescriptor(controller.GetType()).FindAction(controller.ControllerContext, actionName);

            if (actionDescriptor == null || actionDescriptor.GetParameters().Length == 0)
            {
                return(null);
            }

            IUrlParamsMapper result = null;

            if (actionDescriptor.GetParameters()[0].ParameterType == typeof(ITaxon))
            {
                var taxonParamName = actionDescriptor.GetParameters()[0].ParameterName;
                if (actionDescriptor.GetParameters()[1].ParameterType == typeof(int?))
                {
                    var pageParamName = actionDescriptor.GetParameters()[1].ParameterName;
                    result = new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":category,tag}/{" + pageParamName + "}", actionName);
                }

                result = result.SetLast(new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":category,tag}", actionName));
            }

            return(result);
        }
Esempio n. 2
0
        private IUrlParamsMapper GetInferredDetailActionParamsMapper(ControllerBase controller)
        {
            var controllerType      = controller.GetType();
            IUrlParamsMapper result = null;

            var detailsAction = new ReflectedControllerDescriptor(controllerType).FindAction(controller.ControllerContext, DetailActionParamsMapper.DefaultActionName);

            if (detailsAction != null)
            {
                var contentParam = detailsAction.GetParameters().FirstOrDefault();
                if (contentParam != null && contentParam.ParameterType.ImplementsInterface(typeof(IDataItem)))
                {
                    Type contentType;
                    if (typeof(DynamicContent) == contentParam.ParameterType)
                    {
                        var dynamicContentType = controller.GetDynamicContentType();
                        contentType = dynamicContentType != null?TypeResolutionService.ResolveType(dynamicContentType.GetFullTypeName(), throwOnError : false) : null;
                    }
                    else
                    {
                        contentType = contentParam.ParameterType;
                    }

                    if (contentType != null)
                    {
                        var providerNames = this.GetModelProperty(controller, "ProviderName") as string;
                        result = result.SetLast(new DetailActionParamsMapper(controller, contentType, () => providerNames));
                    }
                }
            }

            return(result);
        }
        private IUrlParamsMapper GetInferredTaxonFilterMapper(ControllerBase controller, string actionName)
        {
            var actionDescriptor = new ReflectedControllerDescriptor(controller.GetType()).FindAction(controller.ControllerContext, actionName);

            if (actionDescriptor == null || actionDescriptor.GetParameters().Length == 0)
            {
                return(null);
            }

            var contentType = GetModelProperty(controller, "ContentType") as Type;

            if (contentType == null && controller is IDynamicContentWidget)
            {
                var dynamicType = controller.GetDynamicContentType();
                if (dynamicType != null)
                {
                    contentType = TypeResolutionService.ResolveType(dynamicType.GetFullTypeName());
                }
            }

            ISet <Guid> taxonomiesForType = null;

            if (contentType != null)
            {
                var properties = TypeDescriptor.GetProperties(contentType);
                taxonomiesForType = properties.OfType <TaxonomyPropertyDescriptor>().Select(x => x.TaxonomyId).ToHashSet();
            }

            if (taxonomiesForType != null && taxonomiesForType.Count == 0)
            {
                return(null);
            }

            IUrlParamsMapper result = null;

            if (actionDescriptor.GetParameters()[0].ParameterType == typeof(ITaxon))
            {
                string routeTemplate  = GenerateRouteTemplate(taxonomiesForType);
                var    taxonParamName = actionDescriptor.GetParameters()[0].ParameterName;
                if (actionDescriptor.GetParameters()[1].ParameterType == typeof(int?))
                {
                    var pageParamName = actionDescriptor.GetParameters()[1].ParameterName;
                    var urlParamNames = new string[] { FeatherActionInvoker.TaxonNamedParamter, FeatherActionInvoker.PagingNamedParameter };
                    result = new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":" + routeTemplate + "}/{" + pageParamName + "}", actionName, urlParamNames);
                }

                var urlTaxonParamNames = new string[] { FeatherActionInvoker.TaxonNamedParamter };
                result = result.SetLast(new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":" + routeTemplate + "}", actionName, urlTaxonParamNames));
            }

            return(result);
        }
Esempio n. 4
0
        /// <summary>
        /// Gets the prefix parameters mapper.
        /// </summary>
        /// <param name="controller">The controller.</param>
        /// <returns></returns>
        internal IUrlParamsMapper GetPrefixParamsMapper(ControllerBase controller)
        {
            IUrlParamsMapper result = null;

            result = result
                     .SetLast(this.GetInferredPagingMapper(controller, "Index"));

            // If no other mappers are added we skip the default one.
            if (result != null)
            {
                result.SetLast(new DefaultUrlParamsMapper(controller));
            }

            return(result);
        }
Esempio n. 5
0
        public static IUrlParamsMapper SetLast(this IUrlParamsMapper first, IUrlParamsMapper last)
        {
            if (first == null)
                return last;

            if (last == null)
                return first;

            var current = first;
            while (current.Next != null)
                current = current.Next;

            current.SetNext(last);

            return first;
        }
        /// <summary>
        /// Gets the default parameters mapper.
        /// </summary>
        /// <param name="controller">The controller.</param>
        /// <returns>The default parameters mapper for the controller.</returns>
        protected virtual IUrlParamsMapper GetDefaultParamsMapper(ControllerBase controller)
        {
            IUrlParamsMapper result = null;

            result = result
                     .SetLast(this.GetInferredDetailActionParamsMapper(controller))
                     .SetLast(this.GetInferredTaxonFilterMapper(controller, "ListByTaxon"))
                     .SetLast(this.GetInferredPagingMapper(controller, "Index"));

            // If no other mappers are added we skip the default one.
            if (result != null)
            {
                result.SetLast(new DefaultUrlParamsMapper(controller));
            }

            return(result);
        }
Esempio n. 7
0
        /// <summary>
        /// Gets the default parameters mapper.
        /// </summary>
        /// <param name="controller">The controller.</param>
        /// <returns>The default parameters mapper for the controller.</returns>
        internal IUrlParamsMapper GetDefaultParamsMapper(ControllerBase controller)
        {
            IUrlParamsMapper result = null;

            result = result
                     .SetLast(this.GetInferredDetailActionParamsMapper(controller))
                     .SetLast(this.GetInferredSuccessorsActionParamsMapper(controller))
                     .SetLast(this.GetInferredTaxonFilterQueryParamsMapper(controller, "ListByTaxon"))
                     .SetLast(this.GetInferredTaxonFilterMapper(controller, "ListByTaxon"))
                     .SetLast(this.GetInferredClassificationFilterMapper(controller, "ListByTaxon"))
                     .SetLast(this.GetInferredDateFilterMapper(controller, "ListByDate"))
                     .SetLast(this.GetInferredPagingMapper(controller, "Index"));

            // If no other mappers are added we skip the default one.
            if (result != null)
            {
                result.SetLast(new DefaultUrlParamsMapper(controller));
            }

            return(result);
        }
Esempio n. 8
0
        private IUrlParamsMapper GetInferredSuccessorsActionParamsMapper(ControllerBase controller)
        {
            IUrlParamsMapper result = null;
            var controllerType      = controller.GetType();

            if (controllerType.ImplementsInterface(typeof(ICanFilterByParent)))
            {
                var successorsAction = new ReflectedControllerDescriptor(controllerType).FindAction(controller.ControllerContext, SuccessorsActionParamsMapper.DefaultActionName);
                if (successorsAction != null)
                {
                    ICanFilterByParent canFilterByParent = controller as ICanFilterByParent;
                    var parentContentTypes = canFilterByParent.GetParentTypes();
                    if (parentContentTypes != null && parentContentTypes.Count() > 0)
                    {
                        var providerName = this.GetModelProperty(controller, "ProviderName") as string;
                        result = result.SetLast(new SuccessorsActionParamsMapper(controller, parentContentTypes, () => providerName));
                    }
                }
            }

            return(result);
        }
Esempio n. 9
0
        public static IUrlParamsMapper SetLast(this IUrlParamsMapper first, IUrlParamsMapper last)
        {
            if (first == null)
            {
                return(last);
            }

            if (last == null)
            {
                return(first);
            }

            var current = first;

            while (current.Next != null)
            {
                current = current.Next;
            }

            current.SetNext(last);

            return(first);
        }
Esempio n. 10
0
        private IUrlParamsMapper GetInferredTaxonFilterQueryParamsMapper(ControllerBase controller, string actionName)
        {
            IUrlParamsMapper result = null;

            var actionDescriptor = new ReflectedControllerDescriptor(controller.GetType()).FindAction(controller.ControllerContext, actionName);

            if (actionDescriptor == null || actionDescriptor.GetParameters().Length == 0)
            {
                return(null);
            }

            var queryParams = controller.ControllerContext.RequestContext.HttpContext.Request.QueryString;

            if (actionDescriptor.GetParameters()[0].ParameterType == typeof(ITaxon) && queryParams.Count == 3)
            {
                if (queryParams.Keys.Contains("taxonomy"))
                {
                    result = new TaxonomyUrlParamsMapper(controller, new TaxonUrlMapper(new TaxonUrlEvaluatorAdapter()));
                }
            }

            return(result);
        }
Esempio n. 11
0
 /// <inheritdoc />
 public IUrlParamsMapper SetNext(IUrlParamsMapper nextResolver)
 {
     this.next = nextResolver;
     return this.Next;
 }
 /// <inheritdoc />
 public IUrlParamsMapper SetNext(IUrlParamsMapper nextResolver)
 {
     this.next = nextResolver;
     return(this.Next);
 }