private PropertyContextFacade ChangeCollection(PropertyContext context, Func <NakedObject, NakedObject, Consent> validator, Action <NakedObject, NakedObject> mutator, ArgumentContextFacade args) { ValidateConcurrency(context.Target, args.Digest); var property = (OneToManyAssociation)context.Property; if (ConsentHandler(IsOfCorrectType(property, context), context, Cause.Other)) { if (ConsentHandler(IsCurrentlyImmutable(context.Target), context, Cause.Immutable)) { if (ConsentHandler(property.isAvailable(context.Target), context, Cause.Disabled)) { if (ConsentHandler(validator(context.Target, (NakedObject)context.ProposedNakedObject), context, Cause.Other)) { if (!args.ValidateOnly) { mutator(context.Target, (NakedObject)context.ProposedNakedObject); } } } } } context.Mutated = true; return(context.ToPropertyContextFacade(this)); }