/// <summary> /// Gets simple parameter value from it's markup. /// </summary> /// <returns></returns> public static object GetParameterValue(XElement parameterNode, ParameterProfile parameterProfile) { List <XElement> parameterElements = parameterNode.Elements(ParameterValueElementXName).ToList(); if (parameterElements.Any()) { return(parameterElements.Select(element => element.Attribute("value").Value).ToList()); } var valueAttr = parameterNode.Attribute("value"); if (valueAttr != null) { try { return(XmlSerializationHelper.Deserialize(valueAttr, parameterProfile.Type)); } catch (Exception ex) { Log.LogError(LogTitle, ex); return(parameterProfile.GetDefaultValue()); } } if (parameterNode.Elements().Any()) { Type paramType = parameterProfile.Type; if (paramType.IsSubclassOf(typeof(XContainer)) || (paramType.IsLazyGenericType() && paramType.GetGenericArguments()[0].IsSubclassOf(typeof(XContainer)))) { return(ValueTypeConverter.Convert(parameterNode.Elements().First(), parameterProfile.Type)); } throw new NotImplementedException("Not supported type of function parameter element node: '{0}'".FormatWith(paramType.FullName)); } return(parameterProfile.GetDefaultValue()); }
/// <exclude /> public static void SetParameterValue(XElement functionMarkup, ParameterProfile parameter, object parameterValue) { bool newValueNotEmpty = parameterValue != null && (!(parameterValue is IList) || ((IList)parameterValue).Count > 0) && !(parameter.IsRequired && parameterValue as string == string.Empty); var parameterNode = functionMarkup.Elements(ParameterNodeXName).FirstOrDefault(p => (string)p.Attribute("name") == parameter.Name); if (parameterNode != null) { parameterNode.Remove(); } if (newValueNotEmpty && parameterValue != parameter.GetDefaultValue()) { var newConstantParam = new ConstantObjectParameterRuntimeTreeNode(parameter.Name, parameterValue); functionMarkup.Add(newConstantParam.Serialize()); } }