internal WidgetFunctionRuntimeTreeNode(IWidgetFunction widgetFunction, string label, HelpDefinition helpDefinition, string bindingSourceName, List<BaseParameterRuntimeTreeNode> parameters)
 {
     _widgetFunction = widgetFunction;
     this.Label = label;
     this.HelpDefinition = helpDefinition;
     this.BindingSourceName = bindingSourceName;
     this.Parameters = parameters;
 }
 internal WidgetFunctionRuntimeTreeNode(IWidgetFunction widgetFunction, string label, HelpDefinition helpDefinition, string bindingSourceName, List <BaseParameterRuntimeTreeNode> parameters)
 {
     _widgetFunction        = widgetFunction;
     this.Label             = label;
     this.HelpDefinition    = helpDefinition;
     this.BindingSourceName = bindingSourceName;
     this.Parameters        = parameters;
 }
示例#3
0
        /// <exclude />
        public WidgetFunctionProvider(IWidgetFunction widgetFunction)
        {
            if (widgetFunction == null)
            {
                throw new ArgumentNullException("widgetFunction");
            }

            _widgetFunction = widgetFunction;
        }
示例#4
0
        /// <exclude />
        public static bool TryGetWidgetFunction(out IWidgetFunction foundFunction, string name)
        {
            if (MetaFunctionProviderRegistry.WidgetFunctionNames.Contains(name))
            {
                foundFunction = GetWidgetFunction(name);
                return(true);
            }

            foundFunction = null;
            return(false);
        }
示例#5
0
 private void EnsureWidgetFunction()
 {
     lock (_lock)
     {
         if (_widgetFunction == null && _serializedWidgetFunction != null)
         {
             WidgetFunctionRuntimeTreeNode functionNode = (WidgetFunctionRuntimeTreeNode)FunctionFacade.BuildTree(_serializedWidgetFunction);
             _setParameters  = functionNode.GetSetParameters().ToList();
             _widgetFunction = functionNode.GetWidgetFunction();
         }
     }
 }
        /// <exclude />
        public static FormTreeCompiler BuildWidgetForParameters(IEnumerable <ParameterProfile> parameterProfiles, Dictionary <string, object> bindings, string uniqueName, string panelLabel, IFormChannelIdentifier channelIdentifier)
        {
            XNamespace stdControlLibSpace = Namespaces.BindingFormsStdUiControls10;

            var bindingsDeclaration = new XElement(Namespaces.BindingForms10 + "bindings");
            var widgetPlaceholder   = new XElement(stdControlLibSpace + "FieldGroup", new XAttribute("Label", panelLabel));

            var bindingsValidationRules = new Dictionary <string, List <ClientValidationRule> >();

            foreach (ParameterProfile parameterProfile in parameterProfiles.Where(f => f.WidgetFunction != null))
            {
                IWidgetFunction widgetFunction = parameterProfile.WidgetFunction;

                Type bindingType = widgetFunction != null && parameterProfile.Type.IsLazyGenericType() ?
                                   widgetFunction.ReturnType : parameterProfile.Type;

                bindingsDeclaration.Add(
                    new XElement(Namespaces.BindingForms10 + "binding",
                                 new XAttribute("optional", true),
                                 new XAttribute("name", parameterProfile.Name),
                                 new XAttribute("type", bindingType.AssemblyQualifiedName)));

                var      context  = new FunctionContextContainer();
                XElement uiMarkup = FunctionFacade.GetWidgetMarkup(widgetFunction, parameterProfile.Type, parameterProfile.WidgetFunctionParameters, parameterProfile.Label, parameterProfile.HelpDefinition, parameterProfile.Name, context);

                widgetPlaceholder.Add(uiMarkup);

                if (!bindings.ContainsKey(parameterProfile.Name))
                {
                    bindings.Add(parameterProfile.Name, "");
                }

                if (parameterProfile.IsRequired)
                {
                    bindingsValidationRules.Add(parameterProfile.Name, new List <ClientValidationRule> {
                        new NotNullClientValidationRule()
                    });
                }
            }

            FormDefinition widgetFormDefinition = BuildFormDefinition(bindingsDeclaration, widgetPlaceholder, bindings);

            var compiler = new FormTreeCompiler();

            using (XmlReader reader = widgetFormDefinition.FormMarkup)
            {
                compiler.Compile(reader, channelIdentifier, widgetFormDefinition.Bindings, false, "WidgetParameterSetters" + uniqueName, bindingsValidationRules);
            }

            return(compiler);
        }
示例#7
0
        private static WidgetFunctionRuntimeTreeNode BuildWidgetFunctionRuntimeNode(XElement element)
        {
            XAttribute nameAttribute = element.Attribute(FunctionTreeConfigurationNames.NameAttributeName);

            if (nameAttribute == null)
            {
                throw new InvalidOperationException(string.Format("Missing attribute named '{0}'", FunctionTreeConfigurationNames.NameAttributeName));
            }

            string label             = AttributeValueOrEmpty(element, FunctionTreeConfigurationNames.LabelAttributeName);
            string bindingSourceName = AttributeValueOrEmpty(element, FunctionTreeConfigurationNames.BindingSourceNameAttributeName);

            HelpDefinition helpDefinition = null;
            var            parameters     = new List <BaseParameterRuntimeTreeNode>();

            foreach (XElement childElement in element.Elements())
            {
                if (childElement.Name.LocalName == FunctionTreeConfigurationNames.HelpDefinitionTagName)
                {
                    helpDefinition = HelpDefinition.Deserialize(childElement);
                }
                else if (childElement.Name.LocalName == FunctionTreeConfigurationNames.ParamTagName)
                {
                    BaseParameterRuntimeTreeNode parameterTreeNode = BuildParameterFunctionRuntimeNode(childElement);

                    parameters.Add(parameterTreeNode);
                }
                else
                {
                    throw new InvalidOperationException(string.Format("Only '{0}' tags allowed inside '{1}' tags", FunctionTreeConfigurationNames.ParamTagName, FunctionTreeConfigurationNames.FunctionTagName));
                }
            }

            if (helpDefinition == null)
            {
                helpDefinition = new HelpDefinition("");
            }

            IWidgetFunction widgetFunction = FunctionFacade.GetWidgetFunction(nameAttribute.Value);

            foreach (BaseParameterRuntimeTreeNode parameter in parameters)
            {
                if (widgetFunction.ParameterProfiles.All(pp => pp.Name != parameter.Name))
                {
                    throw new InvalidOperationException(string.Format("The parameter '{0}' is not defined in the function named '{1}' parameter profiles", parameter.Name, widgetFunction.CompositeName()));
                }
            }

            return(new WidgetFunctionRuntimeTreeNode(widgetFunction, label, helpDefinition, bindingSourceName, parameters));
        }
示例#8
0
        //public static XElement GetWidgetMarkup(IWidgetFunction widgetFunction, Type targetType, IDictionary<string, object> parameters, string label, HelpDefinition helpDefinition, string bindingSourceName, FunctionContextContainer functionContextContainer)
        //{
        //    List<BaseParameterRuntimeTreeNode> parameterNodes = new List<BaseParameterRuntimeTreeNode>();

        //    if (parameters != null)
        //    {
        //        foreach (KeyValuePair<string, object> kvp in parameters)
        //        {
        //            parameterNodes.Add(new ConstantObjectParameterRuntimeTreeNode(kvp.Key, kvp.Value));
        //        }
        //    }

        //    BaseRuntimeTreeNode node = new WidgetFunctionRuntimeTreeNode(widgetFunction, label, helpDefinition, bindingSourceName, parameterNodes);

        //    return (XElement)node.GetValue(functionContextContainer);
        //}



        /// <exclude />
        public static XElement GetWidgetMarkup(IWidgetFunction widgetFunction, Type targetType, IEnumerable <BaseParameterRuntimeTreeNode> parameters, string label, HelpDefinition helpDefinition, string bindingSourceName, FunctionContextContainer functionContextContainer)
        {
            List <BaseParameterRuntimeTreeNode> parameterNodes = new List <BaseParameterRuntimeTreeNode>();

            if (parameters != null)
            {
                foreach (BaseParameterRuntimeTreeNode parameterNode in parameters)
                {
                    parameterNodes.Add(parameterNode);
                }
            }

            BaseRuntimeTreeNode node = new WidgetFunctionRuntimeTreeNode(widgetFunction, label, helpDefinition, bindingSourceName, parameterNodes);

            return((XElement)node.GetValue(functionContextContainer));
        }
 /// <exclude />
 public WidgetFunctionRuntimeTreeNode(IWidgetFunction widgetFunction, List <BaseParameterRuntimeTreeNode> parameters)
     : this(widgetFunction, "", new HelpDefinition(""), "", parameters)
 {
 }
示例#10
0
        /// <exclude />
        public static WidgetFunctionRuntimeTreeNode BuildWidgetFunction(string widgetFunctionName, string label, HelpDefinition helpDefinition, string bindingSourceName)
        {
            IWidgetFunction widgetFunction = FunctionFacade.GetWidgetFunction(widgetFunctionName);

            return(new WidgetFunctionRuntimeTreeNode(widgetFunction, label, helpDefinition, bindingSourceName));
        }
 /// <exclude />
 public WidgetFunctionRuntimeTreeNode(IWidgetFunction widgetFunction, string label, HelpDefinition helpDefinition, string bindingSourceName)
     : this(widgetFunction, label, helpDefinition, bindingSourceName, new List<BaseParameterRuntimeTreeNode>())
 {
 }
示例#12
0
 internal WidgetFunctionWrapper(IWidgetFunction widgetFunctionToWrap)
 {
     _widgetFunctionToWrap = widgetFunctionToWrap;
 }
示例#13
0
        /// <exclude />
        public WidgetFunctionProvider(IWidgetFunction widgetFunction)
        {
            if (widgetFunction == null) throw new ArgumentNullException("widgetFunction");

            _widgetFunction = widgetFunction;
        }
示例#14
0
 private void EnsureWidgetFunction()
 {
     lock (_lock)
     {
         if (_widgetFunction == null && _serializedWidgetFunction != null)
         {
             WidgetFunctionRuntimeTreeNode functionNode = (WidgetFunctionRuntimeTreeNode)FunctionFacade.BuildTree(_serializedWidgetFunction);
             _setParameters = functionNode.GetSetParameters().ToList();
             _widgetFunction = functionNode.GetWidgetFunction();
         }
     }
 }
示例#15
0
        /// <exclude />
        public static WidgetFunctionProvider GetDefaultWidgetFunctionProviderByType(Type type, bool required)
        {
            if (type == typeof(string))
            {
                return(StandardWidgetFunctions.TextBoxWidget);
            }
            if (type == typeof(int) || type == typeof(int?))
            {
                return(StandardWidgetFunctions.IntegerTextBoxWidget);
            }
            if (type == typeof(Decimal) || type == typeof(Decimal?))
            {
                return(StandardWidgetFunctions.DecimalTextBoxWidget);
            }
            if (type == typeof(DateTime) || type == typeof(DateTime?))
            {
                return(StandardWidgetFunctions.DateSelectorWidget);
            }
            if (type == typeof(Guid) || type == typeof(Guid?))
            {
                return(StandardWidgetFunctions.GuidTextBoxWidget);
            }
            if (type == typeof(bool) || type == typeof(bool?))
            {
                return(StandardWidgetFunctions.CheckBoxWidget);
            }

            if (type == typeof(DataReference <IImageFile>))
            {
                return(StandardWidgetFunctions.GetImageSelectorWidget(required));
            }
            if (type == typeof(NullableDataReference <IImageFile>))
            {
                return(StandardWidgetFunctions.GetImageSelectorWidget(false));
            }
            if (type == typeof(DataReference <IMediaFile>))
            {
                return(StandardWidgetFunctions.GetMediaFileSelectorWidget(required));
            }
            if (type == typeof(NullableDataReference <IMediaFile>))
            {
                return(StandardWidgetFunctions.GetMediaFileSelectorWidget(false));
            }

            if (type == typeof(XhtmlDocument))
            {
                return(StandardWidgetFunctions.VisualXhtmlDocumentEditorWidget);
            }

            IEnumerable <string> functionNames = FunctionFacade.GetWidgetFunctionNamesByType(type);

            foreach (string functionName in functionNames)
            {
                IWidgetFunction widgetFunction = FunctionFacade.GetWidgetFunction(functionName);
                bool            sameType       = widgetFunction.ReturnType == type;

                if (!sameType &&
                    !required &&
                    type.IsGenericType && type.GetGenericTypeDefinition() == typeof(DataReference <>) &&
                    type.IsAssignableFrom(widgetFunction.ReturnType) &&
                    widgetFunction.ReturnType == typeof(NullableDataReference <>).MakeGenericType(type.GetGenericArguments()))
                {
                    sameType = true;
                }

                if (sameType && !widgetFunction.ParameterProfiles.Any(p => p.IsRequired))
                {
                    return(new WidgetFunctionProvider(widgetFunction));
                }
            }

            if (type.IsLazyGenericType())
            {
                var lazyType = type.GetGenericArguments().First();

                var provider = GetDefaultWidgetFunctionProviderByType(lazyType, required);

                if (provider != null)
                {
                    return(provider);
                }
            }


            return(null);
        }
 /// <exclude />
 public WidgetFunctionRuntimeTreeNode(IWidgetFunction widgetFunction, string label, HelpDefinition helpDefinition, string bindingSourceName)
     : this(widgetFunction, label, helpDefinition, bindingSourceName, new List <BaseParameterRuntimeTreeNode>())
 {
 }
 /// <exclude />
 public WidgetFunctionRuntimeTreeNode(IWidgetFunction widgetFunction, List<BaseParameterRuntimeTreeNode> parameters)
     : this(widgetFunction, "", new HelpDefinition(""), "", parameters)
 {
 }
 internal WidgetFunctionWrapper(IWidgetFunction widgetFunctionToWrap)
 {
     _widgetFunctionToWrap = widgetFunctionToWrap;
 }