Exemple #1
0
            private ParameterProfile BuildParameterProfile(IParameter parameter)
            {
                Type parameterType = TypeManager.GetType(parameter.TypeManagerName);
                bool isRequired    = false;
                BaseValueProvider defaultValueProvider;

                if (string.IsNullOrEmpty(parameter.DefaultValueFunctionMarkup))
                {
                    defaultValueProvider = new NoValueValueProvider();
                    isRequired           = true;
                }
                else
                {
                    defaultValueProvider = new FunctionValueProvider(XElement.Parse(parameter.DefaultValueFunctionMarkup));
                }

                WidgetFunctionProvider widgetFunctionProvider;

                if (string.IsNullOrEmpty(parameter.WidgetFunctionMarkup) == false)
                {
                    widgetFunctionProvider = new WidgetFunctionProvider(XElement.Parse(parameter.WidgetFunctionMarkup));
                }
                else
                {
                    widgetFunctionProvider = WidgetFunctionProvider.BuildNoWidgetProvider();
                }

                return(new ParameterProfile(parameter.Name, parameterType, isRequired, defaultValueProvider, widgetFunctionProvider, parameter.Label, new HelpDefinition(parameter.HelpText)));
            }
        internal static ParameterProfile BuildParameterProfile(string name, Type type, FunctionParameterAttribute attribute, Type controllerType)
        {
            BaseValueProvider defaultValueProvider = new NoValueValueProvider();
            string            label    = name;
            string            helpText = String.Empty;

            if (!attribute.Label.IsNullOrEmpty())
            {
                label = attribute.Label;
            }

            if (!attribute.Help.IsNullOrEmpty())
            {
                helpText = attribute.Help;
            }

            bool isRequired = !attribute.HasDefaultValue;

            if (!isRequired)
            {
                defaultValueProvider = new ConstantValueProvider(attribute.DefaultValue);
            }

            WidgetFunctionProvider widgetProvider = attribute.GetWidgetFunctionProvider(controllerType, null);

            bool hideInSimpleView = attribute.HideInSimpleView;

            if (widgetProvider == null)
            {
                widgetProvider = StandardWidgetFunctions.GetDefaultWidgetFunctionProviderByType(type, isRequired);
            }

            return(new ParameterProfile(name, type, isRequired, defaultValueProvider, widgetProvider, label,
                                        new HelpDefinition(helpText),
                                        hideInSimpleView));
        }
        private IList <ParameterProfile> InitializeParamteres()
        {
            ParameterInfo[] parameterInfos = this.MethodInfo.GetParameters();

            var defaultValues   = new Dictionary <string, object>();
            var labels          = new Dictionary <string, string>();
            var helpTexts       = new Dictionary <string, string>();
            var widgetProviders = new Dictionary <string, WidgetFunctionProvider>();
            var parametersToHideInSimpleView = new HashSet <string>();

            foreach (object obj in this.MethodInfo.GetCustomAttributes(typeof(MethodBasedDefaultValueAttribute), true))
            {
                MethodBasedDefaultValueAttribute attribute = (MethodBasedDefaultValueAttribute)obj;
                defaultValues.Add(attribute.ParameterName, attribute.DefaultValue);
            }

            // Run through obsolete FunctionParameterDescriptionAttribute
#pragma warning disable 612,618
            foreach (
                object obj in this.MethodInfo.GetCustomAttributes(typeof(FunctionParameterDescriptionAttribute), true))
            {
                FunctionParameterDescriptionAttribute attribute = (FunctionParameterDescriptionAttribute)obj;
                if (attribute.HasDefaultValue && !defaultValues.ContainsKey(attribute.ParameterName))
                {
                    defaultValues.Add(attribute.ParameterName, attribute.DefaultValue);
                }

                labels.Add(attribute.ParameterName, attribute.ParameterLabel);
                helpTexts.Add(attribute.ParameterName, attribute.ParameterHelpText);
            }
#pragma warning restore 612,618

            // Run trhough new and improved FunctionParameterAttribute. Many may exist for one parameter.
            foreach (object obj in this.MethodInfo.GetCustomAttributes(typeof(FunctionParameterAttribute), true))
            {
                var attribute = (FunctionParameterAttribute)obj;

                Verify.That(attribute.HasName,
                            "All [FunctionParameter(...)] definitions on the method '{0}' must have 'Name' specified.",
                            this.MethodInfo.Name);

                string parameterName = attribute.Name;

                if (attribute.HasDefaultValue && !defaultValues.ContainsKey(parameterName))
                {
                    defaultValues.Add(parameterName, attribute.DefaultValue);
                }

                if (attribute.HasLabel && !labels.ContainsKey(parameterName))
                {
                    labels.Add(parameterName, attribute.Label);
                }

                if (attribute.HasHelp && !helpTexts.ContainsKey(parameterName))
                {
                    helpTexts.Add(parameterName, attribute.Help);
                }

                if (attribute.HasWidgetMarkup && !widgetProviders.ContainsKey(parameterName))
                {
                    try
                    {
                        var widgetFunctionProvider = attribute.GetWidgetFunctionProvider(null, null);
                        widgetProviders.Add(parameterName, widgetFunctionProvider);
                    }
                    catch (Exception ex)
                    {
                        string errText = "Failed to set Widget Markup for parameter '{0}' on method '{1}'. {2}"
                                         .FormatWith(parameterName, this.MethodInfo.Name, ex.Message);
                        throw new InvalidOperationException(errText);
                    }
                }

                if (attribute.HideInSimpleView)
                {
                    parametersToHideInSimpleView.Add(parameterName);
                }
            }

            var result = new List <ParameterProfile>();

            foreach (ParameterInfo parameterInfo in parameterInfos)
            {
                string parameterName = parameterInfo.Name;

                BaseValueProvider valueProvider;
                object            defaultValue = null;
                if (defaultValues.TryGetValue(parameterName, out defaultValue))
                {
                    valueProvider = new ConstantValueProvider(defaultValue);
                }
                else
                {
                    valueProvider = new NoValueValueProvider();
                }

                bool isRequired = !defaultValues.ContainsKey(parameterName);

                string parameterLabel = parameterInfo.Name;
                if (labels.ContainsKey(parameterName))
                {
                    parameterLabel = labels[parameterName];
                }

                string parameterHelpText = "";
                if (helpTexts.ContainsKey(parameterName))
                {
                    parameterHelpText = helpTexts[parameterName];
                }

                WidgetFunctionProvider widgetFunctionProvider =
                    (widgetProviders.ContainsKey(parameterName)
                         ? widgetProviders[parameterName]
                         : StandardWidgetFunctions.GetDefaultWidgetFunctionProviderByType(parameterInfo.ParameterType));

                bool hideInSimpleView = parametersToHideInSimpleView.Contains(parameterName);

                result.Add(new ParameterProfile(parameterName, parameterInfo.ParameterType, isRequired,
                                                valueProvider, widgetFunctionProvider, parameterLabel,
                                                new HelpDefinition(parameterHelpText),
                                                hideInSimpleView));
            }

            return(result);
        }