public void VerifyThatRequirementVerificationStateOfComplianceIsSetForBooleanExpressionRowViewModels(Type thingType) { var thing = Activator.CreateInstance(thingType); IHaveWritableRequirementStateOfCompliance row = null; if (thing is BooleanExpression booleanExpressionRow) { row = booleanExpressionRow.GetBooleanExpressionViewModel(this.parametricConstraintRowViewModel) as IHaveWritableRequirementStateOfCompliance; if (row is IRowViewModelBase <Thing> rowViewModelBase) { this.parametricConstraintRowViewModel.ContainedRows.Add(rowViewModelBase); } } Assert.IsNotNull(row); CDPMessageBus.Current.SendMessage(new RequirementStateOfComplianceChangedEvent(RequirementStateOfCompliance.Calculating), thing); Assert.AreEqual(RequirementStateOfCompliance.Calculating, row.RequirementStateOfCompliance); CDPMessageBus.Current.SendMessage(new RequirementStateOfComplianceChangedEvent(RequirementStateOfCompliance.Pass), thing); Assert.AreEqual(RequirementStateOfCompliance.Pass, row.RequirementStateOfCompliance); if (thingType == typeof(RelationalExpression) && row is IHaveContainerViewModel) { CDPMessageBus.Current.SendMessage(new RequirementStateOfComplianceChangedEvent(RequirementStateOfCompliance.Unknown), typeof(ParameterOrOverrideBase)); Assert.AreEqual(RequirementStateOfCompliance.Unknown, row.RequirementStateOfCompliance); Assert.AreEqual(RequirementStateOfCompliance.Unknown, this.parametricConstraintRowViewModel.RequirementStateOfCompliance); } }
/// <summary> /// Reset the <see cref="RequirementStateOfCompliance"/> tree of ViewModels that implement <see cref="IHaveWritableRequirementStateOfCompliance"/> and <see cref="IHaveContainerViewModel"/> to <see cref="RequirementStateOfCompliance.Unknown"/> /// </summary> /// <param name="requirementStateOfComplianceObject">The <see cref="IHaveWritableRequirementStateOfCompliance"/> implementation</param> private static void ResetRequirementStateOfComplianceTree(IHaveWritableRequirementStateOfCompliance requirementStateOfComplianceObject) { if (requirementStateOfComplianceObject is IHaveContainerViewModel containerViewModel) { containerViewModel.ResetRequirementStateOfComplianceTree(); } }
/// <summary> /// Creates a reactive subscriptions for a <see cref="IHaveWritableRequirementStateOfCompliance"/> object /// </summary> /// <param name="requirementStateOfComplianceObject">The <see cref="IHaveWritableRequirementStateOfCompliance"/></param> /// <param name="thing">The <see cref="Thing"/> that te subscription is set for</param> /// <param name="disposables">The <see cref="ICollection{IDisposable}"/> where the subscription must be added to to avoid memory leaks</param> public static void SetRequirementStateOfComplianceChangedEventSubscription(this IHaveWritableRequirementStateOfCompliance requirementStateOfComplianceObject, Thing thing, ICollection <IDisposable> disposables) { var requirementVerifierListener = CDPMessageBus.Current.Listen <RequirementStateOfComplianceChangedEvent>(thing) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => SetRequirementStateOfCompliance(requirementStateOfComplianceObject, x)); disposables?.Add(requirementVerifierListener); if (thing is RelationalExpression) { var resetRequirementVerifierListener = CDPMessageBus.Current.Listen <RequirementStateOfComplianceChangedEvent>(typeof(ParameterOrOverrideBase)) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => { ResetRequirementStateOfComplianceTree(requirementStateOfComplianceObject); }); disposables?.Add(resetRequirementVerifierListener); } }
/// <summary> /// Actually sets the <see cref="IHaveWritableRequirementStateOfCompliance.RequirementStateOfCompliance"/> property. /// </summary> /// <param name="requirementStateOfComplianceObject">The <see cref="IHaveWritableRequirementStateOfCompliance"/> implementation</param> /// <param name="requirementStateOfComplianceChangedEvent">The <see cref="RequirementStateOfComplianceChangedEvent"/></param> private static void SetRequirementStateOfCompliance(IHaveWritableRequirementStateOfCompliance requirementStateOfComplianceObject, RequirementStateOfComplianceChangedEvent requirementStateOfComplianceChangedEvent) { requirementStateOfComplianceObject.RequirementStateOfCompliance = requirementStateOfComplianceChangedEvent.RequirementStateOfCompliance; }