private static void ProcessModelErrorChange(ModelHasError errorLink) { ModelError error = errorLink.Error; // Give the error itself a chance to have an indirect owner. // A ModelError can own itself. InvalidateIndirectErrorOwnerDisplay(error, null, null); DomainClassInfo classInfo = error.GetDomainClass(); ReadOnlyCollection <DomainRoleInfo> playedMetaRoles = classInfo.AllDomainRolesPlayed; int playedMetaRoleCount = playedMetaRoles.Count; for (int i = 0; i < playedMetaRoleCount; ++i) { DomainRoleInfo roleInfo = playedMetaRoles[i]; if (roleInfo.Id != ModelHasError.ErrorDomainRoleId) { LinkedElementCollection <ModelElement> rolePlayers = roleInfo.GetLinkedElements(error); int rolePlayerCount = rolePlayers.Count; for (int j = 0; j < rolePlayerCount; ++j) { ModelElement rolePlayer = rolePlayers[j]; InvalidateErrorOwnerDisplay(rolePlayer); InvalidateIndirectErrorOwnerDisplay(rolePlayer, null, null); } } } }
/// <summary> /// DeletingRule: typeof(ORMSolutions.ORMArchitect.Core.ObjectModel.ModelHasError) /// </summary> private static void ModelErrorDeletingRule(ElementDeletingEventArgs e) { ModelHasError link = e.ModelElement as ModelHasError; if (!link.Model.IsDeleting) { ProcessModelErrorChange(link); } }
/// <summary> /// ChangeRule: typeof(ORMSolutions.ORMArchitect.Core.ObjectModel.ModelError) /// If the state changes on a displayed error, then the displayed error state /// needs to change as well. /// </summary> private static void ModelErrorStateChangedRule(ElementPropertyChangedEventArgs e) { ModelHasError errorLink; if (e.DomainProperty.Id == ModelError.ErrorStateDomainPropertyId && null != (errorLink = ModelHasError.GetLinkToModel((ModelError)e.ModelElement))) { ProcessModelErrorChange(errorLink); } }
/// <summary> /// DeletingRule: typeof(ORMSolutions.ORMArchitect.Core.ObjectModel.ElementAssociatedWithModelError) /// If multiple elements are associated with a model error, then an individual element can be removed /// from the collection without deleting the error. This element will not be reachable when the /// error itself is removed, and the display will not update. /// </summary> private static void ModelErrorComponentDeletingRule(ElementDeletingEventArgs e) { ElementAssociatedWithModelError link = (ElementAssociatedWithModelError)e.ModelElement; ModelError error; if (!(error = link.ModelError).IsDeleting) { foreach (DomainRoleInfo roleInfo in link.GetDomainRelationship().DomainRoles) { if (!roleInfo.IsSource && roleInfo.IsMany) { ModelHasError errorLink; if (null != (errorLink = ModelHasError.GetLinkToModel(error))) { ProcessModelErrorChange(errorLink); } break; } } } }
/// <summary> /// Add all model errors in the specific store that match the specified domain /// model to the task provider. /// </summary> protected sealed override void PhaseCompleted(Store store) { DomainModelInfo modelFilter = myDomainModelFilter; IList <ModelHasError> errorLinks = store.ElementDirectory.FindElements <ModelHasError>(); int linkCount = errorLinks.Count; for (int i = 0; i < linkCount; ++i) { ModelHasError errorLink = errorLinks[i]; ModelError error = errorLink.Error; if (!errorLink.IsDeleted && !error.IsDeleted && (modelFilter == null || error.GetDomainClass().DomainModel == modelFilter)) { // Make sure the error state is correct based on the full error state error.FixupErrorState(); // Make sure the text is up to date error.GenerateErrorText(); ModelError.AddToTaskProvider(errorLink); } } }
/// <summary> /// Helper function to add an error to the task provider /// when the error is attached to the model. /// </summary> /// <param name="errorLink"></param> public static void AddToTaskProvider(ModelHasError errorLink) { AddToTaskProvider(errorLink.Error); }
private static void ProcessModelErrorChange(ModelHasError errorLink) { ModelError error = errorLink.Error; // Give the error itself a change to have an indirect owner. // A ModelError can own itself. InvalidateIndirectErrorOwnerDisplay(error, null, null); DomainClassInfo classInfo = error.GetDomainClass(); ReadOnlyCollection<DomainRoleInfo> playedMetaRoles = classInfo.AllDomainRolesPlayed; int playedMetaRoleCount = playedMetaRoles.Count; for (int i = 0; i < playedMetaRoleCount; ++i) { DomainRoleInfo roleInfo = playedMetaRoles[i]; if (roleInfo.Id != ModelHasError.ErrorDomainRoleId) { LinkedElementCollection<ModelElement> rolePlayers = roleInfo.GetLinkedElements(error); int rolePlayerCount = rolePlayers.Count; for (int j = 0; j < rolePlayerCount; ++j) { ModelElement rolePlayer = rolePlayers[j]; InvalidateErrorOwnerDisplay(rolePlayer); InvalidateIndirectErrorOwnerDisplay(rolePlayer, null, null); } } } }