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()); }
//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()); } }
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()); } }
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()); }
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)); }
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); } }
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); }