//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) { 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 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) { int matchedSteps = 0; if (step.HasStep) { step.MoveNext(); matchedSteps++; } return(step.HasStep ? PathMatch.Fail() : PathMatch.Succeed(length: matchedSteps)); }
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()); } }