protected override object Create(MarkupExtensionParts parameter) { var type = DetermineType(parameter); var candidates = parameter.Arguments.Select(Get) .ToArray(); var constructor = DetermineConstructor(parameter, candidates, type); var members = _members.Get(type); var evaluator = new PropertyEvaluator(type, members.ToDictionary(x => x.Name), this); var dictionary = parameter.Properties.ToDictionary(x => x.Key, evaluator.Get); var arguments = constructor.GetParameters() .Select(x => x.ParameterType.GetTypeInfo()) .Zip(candidates, (info, evaluation) => evaluation.Get(info)) .ToArray(); var activator = new ConstructedActivator(constructor, arguments); var context = new MemberContext(constructor.ReflectedType.GetTypeInfo(), members); var extension = new ActivationContexts(_accessors, context, activator, _defaults) .Get(dictionary) .Get() .AsValid <IMarkupExtension>(); var result = extension.ProvideValue(new Provider(_provider, _services.Appending(parameter) .ToArray())); return(result); }
/// <summary> /// Ctor. /// </summary> /// <param name="windowName">specifies the name of the named window</param> /// <param name="optionalAsName">a name or null if none defined</param> /// <param name="viewSpecs">is the view specifications</param> /// <param name="filterExpressions">the named window filters</param> /// <param name="streamSpecOptions">additional options such as unidirectional stream in a join</param> /// <param name="optPropertyEvaluator">The opt property evaluator.</param> public NamedWindowConsumerStreamSpec(String windowName, String optionalAsName, ViewSpec[] viewSpecs, IList <ExprNode> filterExpressions, StreamSpecOptions streamSpecOptions, PropertyEvaluator optPropertyEvaluator) : base(optionalAsName, viewSpecs, streamSpecOptions) { WindowName = windowName; FilterExpressions = filterExpressions; _optPropertyEvaluator = optPropertyEvaluator; }
public void When_CalledWithoutPlatform() { int spyCount = 0; string inCategory = "MyCategory"; string inSectionName = "MySection"; string inPropertyKey = "MyProperty"; var inEvaluator = new PropertyEvaluator(); List <string> inTargetValues = new List <string>(); var hierarchy = new MockConfigHierarchy() { OnEvaluatePropertyValues = (string platform, string category, string sectionName, string propertyKey, ConfigHierarchyLevelRange range, PropertyEvaluator evaluator, IList <string> values) => { spyCount++; Assert.That(platform, Is.EqualTo("Default")); Assert.That(category, Is.EqualTo(inCategory)); Assert.That(sectionName, Is.EqualTo(inSectionName)); Assert.That(propertyKey, Is.EqualTo(inPropertyKey)); Assert.That(evaluator, Is.SameAs(inEvaluator)); Assert.That(values, Is.SameAs(inTargetValues)); } }; hierarchy.EvaluatePropertyValues(inCategory, inSectionName, inPropertyKey, inEvaluator, inTargetValues); Assert.That(spyCount, Is.EqualTo(1)); }
public void FindMatchesIdentifiesPropertiesNotMatching() { var oldProperty = new TestPropertyDefinition(); var newProperty = new TestPropertyDefinition(); var oldMatchingProperty = new TestPropertyDefinition(); var oldProperties = new[] { oldProperty, oldMatchingProperty }; var newMatchingProperty = oldMatchingProperty.JsonClone(); var newProperties = new[] { newMatchingProperty, newProperty }; var sut = new PropertyEvaluator(); var results = sut.FindMatches(oldProperties, newProperties); results.MatchingItems.Should().HaveCount(1); results.MatchingItems.First().OldItem.Should().Be(oldMatchingProperty); results.MatchingItems.First().NewItem.Should().Be(newMatchingProperty); results.ItemsAdded.Should().HaveCount(1); results.ItemsAdded.First().Should().Be(newProperty); results.ItemsRemoved.Should().HaveCount(1); results.ItemsRemoved.First().Should().Be(oldProperty); }
/// <summary>Constructor - validates parameter list against event type, throws exception if invalid property names or mismatcing filter operators are found. </summary> /// <param name="eventType">is the event type</param> /// <param name="filterParameters">is a list of filter parameters</param> /// <param name="eventTypeName">is the name of the event type</param> /// <param name="optionalPropertyEvaluator">optional if evaluating properties returned by filtered events</param> /// <throws>ArgumentException if validation invalid</throws> public FilterSpecCompiled(EventType eventType, String eventTypeName, IList <FilterSpecParam>[] filterParameters, PropertyEvaluator optionalPropertyEvaluator) { _filterForEventType = eventType; _filterForEventTypeName = eventTypeName; _parameters = SortRemoveDups(filterParameters); _optionalPropertyEvaluator = optionalPropertyEvaluator; }
public void When_NotUsed_DefaultReturnsValidInstance() { PropertyEvaluator.ResetDefaultEvaluator(); var defaultEvaluator = PropertyEvaluator.Default; Assert.That(defaultEvaluator, Is.Not.Null); PropertyEvaluator.ResetDefaultEvaluator(); }
public void When_ValidInstructionChain(InstructionToken[] instructions, string[] expectedValues) { var evaluator = new PropertyEvaluator(); var values = new List <string>(); Assert.That(() => { evaluator.ExecutePropertyInstructions(instructions, values); }, Throws.Nothing); Assert.That(values, Is.EquivalentTo(expectedValues)); }
public void When_UsedAfterDefault_DefaultReturnsNewInstance() { PropertyEvaluator.ResetDefaultEvaluator(); var defaultEvaluatorA = PropertyEvaluator.Default; var defaultEvaluatorB = PropertyEvaluator.Default; Assert.That(defaultEvaluatorA, Is.SameAs(defaultEvaluatorB)); PropertyEvaluator.ResetDefaultEvaluator(); }
public void When_GivenNull() { PropertyEvaluator.ResetDefaultEvaluator(); var evaluator = PropertyEvaluator.CustomOrDefault(null); Assert.That(evaluator, Is.Not.Null); Assert.That(evaluator, Is.SameAs(PropertyEvaluator.Default)); PropertyEvaluator.ResetDefaultEvaluator(); }
public ViewableActivatorNamedWindow( NamedWindowProcessor processor, IList <ExprNode> filterExpressions, PropertyEvaluator optPropertyEvaluator) { _processor = processor; _filterExpressions = filterExpressions; _optPropertyEvaluator = optPropertyEvaluator; }
/// <summary> /// Evaluates a properties values over this hierarchy of configs. /// </summary> public virtual void EvaluatePropertyValues(string platform, string category, string sectionName, string propertyKey, ConfigHierarchyLevelRange range, PropertyEvaluator evaluator, IList <string> values) { List <ConfigIni> configs = new List <ConfigIni>(); GetConfigs(platform, category, range, configs); evaluator = PropertyEvaluator.CustomOrDefault(evaluator); evaluator.EvaluatePropertyValues(configs, sectionName, propertyKey, values); }
public void FindMatchesThrowsExceptionWithNullOldItems() { var newItems = Array.Empty <PropertyDefinition>(); var sut = new PropertyEvaluator(); Action action = () => sut.FindMatches(null !, newItems); action.Should().Throw <ArgumentNullException>(); }
public void When_SetToCustomInstance_DefaultReturnsCustomInstance() { var customDefaultEvaluator = new PropertyEvaluator(); PropertyEvaluator.SetDefaultEvaluator(customDefaultEvaluator); var defaultEvaluator = PropertyEvaluator.Default; Assert.That(defaultEvaluator, Is.SameAs(customDefaultEvaluator)); PropertyEvaluator.ResetDefaultEvaluator(); }
public void When_InvalidInstructionInChain_Throws() { var evaluator = new PropertyEvaluator(); var instructions = new List <InstructionToken>(); instructions.Add(NewInstruction((InstructionType)999)); var values = new List <string>(); Assert.That(() => { evaluator.ExecutePropertyInstructions(instructions, values); }, Throws.TypeOf <InvalidEnumArgumentException>()); }
public void When_GivenCustomEvaluator() { PropertyEvaluator.ResetDefaultEvaluator(); var customEvaluator = new PropertyEvaluator(); var evaluator = PropertyEvaluator.CustomOrDefault(customEvaluator); Assert.That(evaluator, Is.Not.Null); Assert.That(evaluator, Is.SameAs(customEvaluator)); PropertyEvaluator.ResetDefaultEvaluator(); }
public NamedWindowConsumerDesc( int namedWindowConsumerId, ExprEvaluator filterEvaluator, PropertyEvaluator optPropertyEvaluator, AgentInstanceContext agentInstanceContext) { this.namedWindowConsumerId = namedWindowConsumerId; this.filterEvaluator = filterEvaluator; this.optPropertyEvaluator = optPropertyEvaluator; this.agentInstanceContext = agentInstanceContext; }
public void When_NotUsed_DefaultReturnsSameInstance() { PropertyEvaluator.ResetDefaultEvaluator(); var defaultEvaluatorA = PropertyEvaluator.Default; PropertyEvaluator.ResetDefaultEvaluator(); var defaultEvaluatorB = PropertyEvaluator.Default; Assert.That(defaultEvaluatorA, Is.Not.SameAs(defaultEvaluatorB)); PropertyEvaluator.ResetDefaultEvaluator(); }
public EPStatementStartMethodOnTriggerItem( ExprNode whereClause, bool isNamedWindowInsert, string insertIntoTableNames, ResultSetProcessorFactoryDesc factoryDesc, PropertyEvaluator propertyEvaluator) { WhereClause = whereClause; IsNamedWindowInsert = isNamedWindowInsert; InsertIntoTableNames = insertIntoTableNames; FactoryDesc = factoryDesc; PropertyEvaluator = propertyEvaluator; }
public void When_UnknownProperty(ConfigIni[] configs, string[] configIds) { var evaluator = new PropertyEvaluator(); var latestConfigId = configIds[configIds.Length - 1]; var propertyValues = new List <string>(); evaluator.EvaluatePropertyValues(configs, "MySection", "UnknownProperty", propertyValues); Assert.That(propertyValues, Is.EquivalentTo(new string[] { })); propertyValues.Clear(); evaluator.EvaluatePropertyValues(configs, null, "MyProperty", propertyValues); Assert.That(propertyValues, Is.EquivalentTo(new[] { $"SectionlessValue{latestConfigId}" })); }
/// <summary> /// Ctor. /// </summary> /// <param name="filterList">is a list of filter expressions</param> /// <param name="optPropertyEvaluator">The opt property evaluator.</param> /// <param name="eventType">the event type of the named window</param> /// <param name="consumerCallback">The consumer callback.</param> /// <param name="exprEvaluatorContext">context for expression evalauation</param> /// <param name="audit">if set to <c>true</c> [audit].</param> public NamedWindowConsumerView(ExprEvaluator[] filterList, PropertyEvaluator optPropertyEvaluator, EventType eventType, NamedWindowConsumerCallback consumerCallback, ExprEvaluatorContext exprEvaluatorContext, bool audit) { _filterList = filterList; _optPropertyEvaluator = optPropertyEvaluator; _optPropertyContainedBuffer = optPropertyEvaluator != null ? new FlushedEventBuffer() : null; _eventType = eventType; _consumerCallback = consumerCallback; _exprEvaluatorContext = exprEvaluatorContext; _audit = audit; }
public ViewableActivator CreateNamedWindow( NamedWindowProcessor processor, IList <ExprNode> filterExpressions, PropertyEvaluator optPropertyEvaluator) { if (ProcCreateNamedWindow == null) { throw new NotSupportedException(); } return(ProcCreateNamedWindow.Invoke( processor, filterExpressions, optPropertyEvaluator)); }
public bool CompareTo(PropertyEvaluator otherEval) { if (!(otherEval is PropertyEvaluatorSimple)) { return false; } var other = (PropertyEvaluatorSimple) otherEval; if (!other.ExpressionText.Equals(ExpressionText)) { return false; } if ((other.Filter == null) && (Filter == null)) { return true; } return false; }
/// <summary> /// Constructor - validates parameter list against event type, throws exception if invalid /// property names or mismatcing filter operators are found. /// </summary> /// <param name="eventType">is the event type</param> /// <param name="plan">plan is a list of filter parameters, i.e. paths and triplets</param> /// <param name="eventTypeName">is the name of the event type</param> /// <param name="optionalPropertyEvaluator">optional if evaluating properties returned by filtered events</param> /// <param name="filterCallbackId">filter id</param> /// <throws>ArgumentException if validation invalid</throws> public FilterSpecActivatable( EventType eventType, string eventTypeName, FilterSpecPlan plan, PropertyEvaluator optionalPropertyEvaluator, int filterCallbackId) { FilterForEventType = eventType; FilterForEventTypeName = eventTypeName; Plan = plan; OptionalPropertyEvaluator = optionalPropertyEvaluator; if (filterCallbackId == -1) { throw new ArgumentException("Filter callback id is unassigned"); } FilterCallbackId = filterCallbackId; }
public void When_ListProperty(ConfigIni[] configs, string[] configIds) { var evaluator = new PropertyEvaluator(); var latestConfigId = configIds[configIds.Length - 1]; var propertyValues = new List <string>(); var expectedValues = new List <string>(); evaluator.EvaluatePropertyValues(configs, null, "ListProperty", propertyValues); foreach (var configId in configIds) { if (expectedValues.Count == 0) { expectedValues.Add($"Value{configId}0"); } expectedValues.Add($"Value{configId}1"); expectedValues.Add($"Value{configId}2"); } Assert.That(propertyValues, Is.EquivalentTo(expectedValues)); }
public void FindMatchesReturnsSinglePropertyMatchingByName() { var oldProperty = new TestPropertyDefinition(); var oldProperties = new[] { oldProperty }; var newProperty = oldProperty.JsonClone(); var newProperties = new[] { newProperty }; var sut = new PropertyEvaluator(); var results = sut.FindMatches(oldProperties, newProperties); results.MatchingItems.Should().HaveCount(1); results.MatchingItems.First().OldItem.Should().Be(oldProperty); results.MatchingItems.First().NewItem.Should().Be(newProperty); results.ItemsAdded.Should().BeEmpty(); results.ItemsRemoved.Should().BeEmpty(); }
public static IResult <Unit> FillObject(object obj, JsonObject jsonObject) { var evaluator = new PropertyEvaluator(obj); foreach (var member in jsonObject) { var signature = member.Name.ToUpper1(); if (evaluator.Contains(signature)) { var type = evaluator.Type(signature); if (GetMember(type, member).If(out obj, out var exception)) { evaluator[signature] = obj; } else { return(failure <Unit>(exception)); } } } return(Unit.Success()); }
public void When_AddProperty(ConfigIni[] configs, string[] configIds) { var evaluator = new PropertyEvaluator(); var propertyValues = new List <string>(); var expectedValues = new List <string>(); evaluator.EvaluatePropertyValues(configs, "MySection", "MyAddProperty", propertyValues); foreach (var configId in configIds) { expectedValues.Add($"Value{configId}"); } Assert.That(propertyValues, Is.EquivalentTo(expectedValues)); propertyValues.Clear(); expectedValues.Clear(); evaluator.EvaluatePropertyValues(configs, null, "MyAddProperty", propertyValues); foreach (var configId in configIds) { expectedValues.Add($"SectionlessValue{configId}"); } Assert.That(propertyValues, Is.EquivalentTo(expectedValues)); }
public static ObjectGraph Serialize(object obj, Predicate <string> exclude, StringStringHash signatures) { assert(() => obj).Must().Not.BeNull().OrThrow(); var graph = RootObjectGraph(); var type = obj.GetType(); var evaluator = new PropertyEvaluator(obj); var infos = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty); foreach (var info in infos) { var signature = info.Name; var childName = signature.ToCamel(); if (evaluator.Attribute <SignatureAttribute>(signature).If(out var a)) { childName = a.Signature; } if (exclude(signature)) { continue; } if (((IHash <string, object>)evaluator).If(signature, out var objectValue)) { if (objectValue.IsNull()) { continue; } var childType = evaluator.Type(signature); graph[childName] = getGraph(objectValue.Some(), childName, childType, exclude, signatures); } } return(graph); }
public NamedWindowConsumerView( int namedWindowConsumerId, ExprEvaluator filter, PropertyEvaluator optPropertyEvaluator, EventType eventType, NamedWindowConsumerCallback consumerCallback, ExprEvaluatorContext exprEvaluatorContext, bool audit) { NamedWindowConsumerId = namedWindowConsumerId; Filter = filter; this.optPropertyEvaluator = optPropertyEvaluator; if (optPropertyEvaluator != null) { optPropertyContainedBuffer = new FlushedEventBuffer(); } else { optPropertyContainedBuffer = null; } this.eventType = eventType; ConsumerCallback = consumerCallback; this.exprEvaluatorContext = exprEvaluatorContext; this.audit = audit; }
public void EvaluatePropertyValues(string sectionName, string propertyKey, IList <string> values, PropertyEvaluator evaluator = null) { evaluator = PropertyEvaluator.CustomOrDefault(evaluator); evaluator.EvaluatePropertyValues(this, sectionName, propertyKey, values); }
public void SetUp() { testee = new PropertyEvaluator<Entity>(); }