/// <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 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)); }