예제 #1
0
        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;
 }
예제 #3
0
            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));
            }
예제 #4
0
        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);
        }
예제 #5
0
 /// <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;
 }
예제 #6
0
            public void When_NotUsed_DefaultReturnsValidInstance()
            {
                PropertyEvaluator.ResetDefaultEvaluator();
                var defaultEvaluator = PropertyEvaluator.Default;

                Assert.That(defaultEvaluator, Is.Not.Null);
                PropertyEvaluator.ResetDefaultEvaluator();
            }
예제 #7
0
            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));
            }
예제 #8
0
            public void When_UsedAfterDefault_DefaultReturnsNewInstance()
            {
                PropertyEvaluator.ResetDefaultEvaluator();
                var defaultEvaluatorA = PropertyEvaluator.Default;
                var defaultEvaluatorB = PropertyEvaluator.Default;

                Assert.That(defaultEvaluatorA, Is.SameAs(defaultEvaluatorB));
                PropertyEvaluator.ResetDefaultEvaluator();
            }
예제 #9
0
            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;
 }
예제 #11
0
        /// <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);
        }
예제 #12
0
        public void FindMatchesThrowsExceptionWithNullOldItems()
        {
            var newItems = Array.Empty <PropertyDefinition>();

            var sut = new PropertyEvaluator();

            Action action = () => sut.FindMatches(null !, newItems);

            action.Should().Throw <ArgumentNullException>();
        }
예제 #13
0
            public void When_SetToCustomInstance_DefaultReturnsCustomInstance()
            {
                var customDefaultEvaluator = new PropertyEvaluator();

                PropertyEvaluator.SetDefaultEvaluator(customDefaultEvaluator);
                var defaultEvaluator = PropertyEvaluator.Default;

                Assert.That(defaultEvaluator, Is.SameAs(customDefaultEvaluator));
                PropertyEvaluator.ResetDefaultEvaluator();
            }
예제 #14
0
            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>());
            }
예제 #15
0
            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();
            }
예제 #16
0
 public NamedWindowConsumerDesc(
     int namedWindowConsumerId,
     ExprEvaluator filterEvaluator,
     PropertyEvaluator optPropertyEvaluator,
     AgentInstanceContext agentInstanceContext)
 {
     this.namedWindowConsumerId = namedWindowConsumerId;
     this.filterEvaluator = filterEvaluator;
     this.optPropertyEvaluator = optPropertyEvaluator;
     this.agentInstanceContext = agentInstanceContext;
 }
예제 #17
0
            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;
 }
예제 #19
0
            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}" }));
            }
예제 #20
0
 /// <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;
 }
예제 #21
0
        public ViewableActivator CreateNamedWindow(
            NamedWindowProcessor processor,
            IList <ExprNode> filterExpressions,
            PropertyEvaluator optPropertyEvaluator)
        {
            if (ProcCreateNamedWindow == null)
            {
                throw new NotSupportedException();
            }

            return(ProcCreateNamedWindow.Invoke(
                       processor,
                       filterExpressions,
                       optPropertyEvaluator));
        }
예제 #22
0
 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;
 }
예제 #23
0
        /// <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;
        }
예제 #24
0
            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));
            }
예제 #25
0
        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();
        }
예제 #26
0
        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());
        }
예제 #27
0
            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));
            }
예제 #28
0
        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);
        }
예제 #29
0
        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;
        }
예제 #30
0
 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>();
 }