/// <exclude /> public static ParameterList GetParametersListForTest(IEnumerable <ManagedParameterDefinition> parameterDefinitions) { ParameterList parameterList = new ParameterList(null); foreach (var parameterDefinition in parameterDefinitions) { if (!parameterDefinition.TestValueFunctionMarkup.IsNullOrEmpty()) { FunctionRuntimeTreeNode functionNode = (FunctionRuntimeTreeNode)FunctionTreeBuilder.Build(XElement.Parse(parameterDefinition.TestValueFunctionMarkup)); FunctionValueProvider valueProvider = new FunctionValueProvider(functionNode); object value = valueProvider.GetValue(); parameterList.AddConstantParameter(parameterDefinition.Name, value, parameterDefinition.Type); } else if (!parameterDefinition.DefaultValueFunctionMarkup.IsNullOrEmpty()) { FunctionRuntimeTreeNode functionNode = (FunctionRuntimeTreeNode)FunctionTreeBuilder.Build(XElement.Parse(parameterDefinition.DefaultValueFunctionMarkup)); FunctionValueProvider valueProvider = new FunctionValueProvider(functionNode); object value = valueProvider.GetValue(); parameterList.AddConstantParameter(parameterDefinition.Name, value, parameterDefinition.Type); } else { throw new InvalidOperationException("Parameter '{0}' have neigther 'test value' nor 'default value' specified.".FormatWith(parameterDefinition.Name)); } } return(parameterList); }
/// <exclude /> public override object GetValue(FunctionContextContainer contextContainer) { using (TimerProfilerFacade.CreateTimerProfiler(this.GetNamespace() + "." + this.GetName())) { if (contextContainer == null) throw new ArgumentNullException("contextContainer"); ValidateNotSelfCalling(); try { var parameters = new ParameterList(contextContainer); foreach (ParameterProfile parameterProfile in _function.ParameterProfiles) { List<BaseParameterRuntimeTreeNode> parameterTreeNodes = this.Parameters.Where(ptn => ptn.Name == parameterProfile.Name).ToList(); if (parameterTreeNodes.Count > 0) { parameters.AddLazyParameter(parameterProfile.Name, parameterTreeNodes[0], parameterProfile.Type); continue; } if (parameterProfile.Type.IsGenericType && parameterProfile.Type.GetGenericTypeDefinition() == typeof(NullableDataReference<>)) { parameters.AddConstantParameter(parameterProfile.Name, null, parameterProfile.Type); continue; } if (parameterProfile.IsRequired) { var injectedValue = TryGetInjectedValue(parameterProfile.Type); if (injectedValue == null) { throw new ArgumentException("Missing parameter '{0}' (type of {1})".FormatWith(parameterProfile.Name, parameterProfile.Type.FullName)); } parameters.AddConstantParameter(parameterProfile.Name, injectedValue, parameterProfile.Type); continue; } BaseValueProvider valueProvider = parameterProfile.FallbackValueProvider; object value; try { value = valueProvider.GetValue(contextContainer); } catch (Exception ex) { throw new InvalidOperationException(string.Format("Failed to get value for parameter '{0}' in function '{1}'.", parameterProfile.Name, _function.CompositeName()), ex); } parameters.AddConstantParameter(parameterProfile.Name, value, parameterProfile.Type, true); } object result; IDisposable measurement = null; try { string functionName = _function.CompositeName(); if (functionName != "Composite.Utils.GetInputParameter") { measurement = Profiler.Measure(functionName ?? "<unknown function>", () => _function.EntityToken); } result = _function.Execute(parameters, contextContainer); } finally { if (measurement != null) { measurement.Dispose(); } } return result; } catch(ThreadAbortException) { return null; // Nothing will be returned as ThreadAbort will propagate } catch (Exception ex) { throw new InvalidOperationException("Failed to get value for function '{0}'".FormatWith(_function.CompositeName()), ex); } } }
/// <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); }