예제 #1
0
        //public PropertyStep(
        //   Func<TDescriptor, IVMPropertyDescriptor> propertySelector,
        //   Type propertyHint
        //) {
        //   Check.NotNull(propertySelector, nameof(propertySelector));
        //   _propertySelector = propertySelector;
        //   _propertyNameHint = String.Format("IVMPropertyDescriptor<{0}>", TypeService.GetFriendlyName(propertyHint));
        //}

        public override PathMatch Matches(PathDefinitionIterator definitionSteps, PathIterator step)
        {
            if (!step.HasStep || step.IsCollection || step.IsProperty)
            {
                return(PathMatch.Fail());
            }

            PathIterator parentStep = step;

            step.MoveNext();

            if (!step.HasStep)
            {
                return(PathMatch.Fail());
            }

            bool currentStepMatches = Matches(parentStep.ViewModel, step);

            if (currentStepMatches)
            {
                PathMatch result     = PathMatch.Succeed(length: 1);
                PathMatch nextResult = definitionSteps.MatchesNext(step);

                return(PathMatch.Combine(result, nextResult));
            }
            else
            {
                return(PathMatch.Fail());
            }
        }
예제 #2
0
        public override PathMatch Matches(PathDefinitionIterator definitionSteps, PathIterator step)
        {
            if (!step.HasStep || !step.IsCollection)
            {
                return(PathMatch.Fail());
            }

            IVMCollection parentCollection = step.Collection;

            step.MoveNext();

            if (!step.HasStep || !step.IsProperty)
            {
                return(PathMatch.Fail());
            }

            if (!(parentCollection.GetItemDescriptor() is TDescriptor))
            {
                return(PathMatch.Fail());
            }

            var itemDescriptor   = parentCollection.GetItemDescriptor();
            var expectedProperty = _propertySelector.GetProperty(itemDescriptor);

            if (expectedProperty == step.Property)
            {
                PathMatch result     = PathMatch.Succeed(length: 1);
                PathMatch nextResult = definitionSteps.MatchesNext(step);

                return(PathMatch.Combine(result, nextResult));
            }

            return(PathMatch.Fail());
        }
예제 #3
0
        public override PathMatch Matches(PathDefinitionIterator definitionSteps, PathIterator step)
        {
            if (!step.HasStep || step.IsCollection || step.IsProperty)
            {
                return(PathMatch.Fail());
            }
            int          pathLength = 0;
            PathIterator parentStep = step;

            step.MoveNext();
            pathLength++;

            bool currentStepMatches = Matches(parentStep.ViewModel, step);

            if (currentStepMatches)
            {
                while (step.HasStep)
                {
                    step.MoveNext();
                    pathLength++;
                }

                return(PathMatch.Succeed(length: pathLength));
            }
            else
            {
                return(PathMatch.Fail());
            }
        }
예제 #4
0
        public override PathMatch Matches(PathDefinitionIterator definitionSteps, PathIterator step)
        {
            int matchedSteps = 0;

            if (step.HasStep)
            {
                step.MoveNext();
                matchedSteps++;
            }

            return(step.HasStep ?
                   PathMatch.Fail() :
                   PathMatch.Succeed(length: matchedSteps));
        }
예제 #5
0
        public override PathMatch Matches(PathDefinitionIterator definitionSteps, PathIterator step)
        {
            if (!step.HasStep || !step.IsViewModel)
            {
                return(PathMatch.Fail());
            }

            IViewModel parentViewModel = step.ViewModel;

            step.MoveNext();

            if (!step.HasStep || !step.IsCollection)
            {
                return(PathMatch.Fail());
            }

            if (!(parentViewModel.Descriptor is TDescriptor))
            {
                return(PathMatch.Fail());
            }

            var descriptor = (TDescriptor)parentViewModel.Descriptor;

            var collectionProperty = (IVMPropertyDescriptor)_propertySelector.GetProperty(descriptor); // HACK ATTACK

            if (!parentViewModel.Kernel.IsLoaded(collectionProperty))
            {
                return(PathMatch.Fail());
            }

            var expectedCollection = parentViewModel.Kernel.GetValue(collectionProperty);

            if (step.Collection == expectedCollection)
            {
                PathMatch result     = PathMatch.Succeed(length: 1);
                PathMatch nextResult = definitionSteps.MatchesNext(step);

                return(PathMatch.Combine(result, nextResult));
            }
            else
            {
                return(PathMatch.Fail());
            }
        }