/// <exclude /> public override object GetValue(FunctionContextContainer contextContainer) { if (contextContainer == null) { throw new ArgumentNullException("contextContainer"); } ValidateNotSelfCalling(); ParameterList parameters = new ParameterList(contextContainer); foreach (ParameterProfile parameterProfile in _widgetFunction.ParameterProfiles) { BaseParameterRuntimeTreeNode parameterTreeNode = this.Parameters.Where(ptn => ptn.Name == parameterProfile.Name).SingleOrDefault(); if (parameterTreeNode == null) { BaseValueProvider valueProvider = parameterProfile.FallbackValueProvider; object value = valueProvider.GetValue(contextContainer); parameters.AddConstantParameter(parameterProfile.Name, value, parameterProfile.Type); } else { parameters.AddLazyParameter(parameterProfile.Name, parameterTreeNode, parameterProfile.Type); } } return(_widgetFunction.GetWidgetMarkup(parameters, this.Label, this.HelpDefinition, this.BindingSourceName)); }
/// <exclude /> public override XElement Serialize() { XElement element = XElement.Parse(string.Format(@"<f:{0} xmlns:f=""{1}"" />", FunctionTreeConfigurationNames.WidgetFunctionTagName, FunctionTreeConfigurationNames.NamespaceName)); element.Add(new XAttribute(FunctionTreeConfigurationNames.NameAttributeName, _widgetFunction.CompositeName())); if (!string.IsNullOrEmpty(this.Label)) { element.Add(new XAttribute(FunctionTreeConfigurationNames.LabelAttributeName, this.Label)); } if (!string.IsNullOrEmpty(this.BindingSourceName)) { element.Add(new XAttribute(FunctionTreeConfigurationNames.BindingSourceNameAttributeName, this.BindingSourceName)); } if (this.HelpDefinition != null && !string.IsNullOrEmpty(this.HelpDefinition.HelpText)) { element.Add(this.HelpDefinition.Serialize()); } foreach (ParameterProfile parameterProfile in _widgetFunction.ParameterProfiles) { BaseParameterRuntimeTreeNode parameterRuntimeTreeNode = this.Parameters.Where(ptn => ptn.Name == parameterProfile.Name).FirstOrDefault(); if (parameterRuntimeTreeNode != null) { element.Add(parameterRuntimeTreeNode.Serialize()); } } return(element); }
private static FunctionRuntimeTreeNode BuildFunctionRuntimeNode(XElement element, bool ignoreUnusedParameters) { XAttribute nameAttribute = element.Attribute(FunctionTreeConfigurationNames.NameAttributeName); if (nameAttribute == null) { throw new InvalidOperationException(string.Format("Missing attribute named '{0}'", FunctionTreeConfigurationNames.NameAttributeName)); } var parameters = new List <BaseParameterRuntimeTreeNode>(); foreach (XElement childElement in element.Elements()) { 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)); } } IFunction function = FunctionFacade.GetFunction(nameAttribute.Value); if (FunctionInitializedCorrectly(function)) { for (int index = parameters.Count - 1; index >= 0; index--) { BaseParameterRuntimeTreeNode parameter = parameters[index]; if (function.ParameterProfiles.All(pp => pp.Name != parameter.Name)) { string message = "The parameter '{0}' is not defined in the function named '{1}' parameter profiles" .FormatWith(parameter.Name, function.CompositeName()); if (ignoreUnusedParameters) { Log.LogWarning(typeof(FunctionTreeBuilder).Name, message); parameters.RemoveAt(index); continue; } throw new InvalidOperationException(message); } } } return(new FunctionRuntimeTreeNode(function, parameters)); }
/// <exclude /> public void RemoveParameter(string parameterName) { if (string.IsNullOrEmpty(parameterName)) { throw new ArgumentException("parameterName can not be null or an empty string"); } BaseParameterRuntimeTreeNode toRemove = this.Parameters.Where(f => f.Name == parameterName).FirstOrDefault(); if (toRemove != null) { this.Parameters.Remove(toRemove); } }
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)); }
/// <exclude /> public void SetParameter(BaseParameterRuntimeTreeNode parameterRuntimeTreeNode) { if (parameterRuntimeTreeNode == null) { throw new ArgumentNullException("parameterRuntimeTreeNode"); } BaseParameterRuntimeTreeNode node = this.Parameters.Find(n => n.Name == parameterRuntimeTreeNode.Name); if (node != null) { this.Parameters.Remove(node); } this.Parameters.Add(parameterRuntimeTreeNode); }
/// <exclude /> public override XElement Serialize() { // ensure "f:function" naming: XElement element = XElement.Parse(string.Format(@"<f:{0} xmlns:f=""{1}"" />", FunctionTreeConfigurationNames.FunctionTagName, FunctionTreeConfigurationNames.NamespaceName)); element.Add(new XAttribute(FunctionTreeConfigurationNames.NameAttributeName, _function.CompositeName())); foreach (ParameterProfile parameterProfile in _function.ParameterProfiles) { BaseParameterRuntimeTreeNode parameterRuntimeTreeNode = this.Parameters.FirstOrDefault(ptn => ptn.Name == parameterProfile.Name); if (parameterRuntimeTreeNode != null) { element.Add(parameterRuntimeTreeNode.Serialize()); } } return(element); }
/// <exclude /> public void SetParameter(BaseParameterRuntimeTreeNode parameterRuntimeTreeNode) { if (parameterRuntimeTreeNode == null) throw new ArgumentNullException("parameterRuntimeTreeNode"); BaseParameterRuntimeTreeNode node = this.Parameters.Find(n => n.Name == parameterRuntimeTreeNode.Name); if (node != null) { this.Parameters.Remove(node); } this.Parameters.Add(parameterRuntimeTreeNode); }