示例#1
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());
        }
示例#2
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());
            }
        }
示例#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)
 {
     foreach (var orStep in _steps)
     {
         var match = orStep.Matches(definitionSteps, step);
         if (match.Success)
         {
             return(match);
         }
     }
     return(PathMatch.Fail());
 }
示例#5
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));
        }
示例#6
0
        public void HandleChange(IViewModel ownerVM, ChangeArgs args)
        {
            bool isExpectedChangeType = _changeTypes.Contains(args.ChangeType);

            if (!isExpectedChangeType)
            {
                return;
            }

            PathMatch sourcePathMatch = _sourcePath.Matches(args.ChangedPath);

            if (sourcePathMatch.Success)
            {
                _action.Execute(ownerVM, args, this);
            }
        }
示例#7
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());
            }
        }
        public bool IsTrue(ValidationRequest operand)
        {
            PathMatch match = _expectedTarget.Matches(operand.TargetPath);

            return(match.Success);
        }