public void validateRemovedLink(Category linkedType, List <Link> remainingLinks) { var removed = new ObservableCollection <WarningItem>(); var added = new ObservableCollection <WarningItem>(); switch (category) { // check if an incorrect link has been removed or if a needed one is destroyed. case Category.VISION: if (getWarning(WarningItem.Codes.W_VISION_NOT_MISSION_GOAL_ASSESSMENT) != null) { bool removeWarning = true; foreach (var link in remainingLinks) { var src = (BMM)link.sourceModel; var trgt = (BMM)link.targetModel; if (src.category != Category.MISSION && src.category != Category.GOAL && src.category != Category.ASSESSMENT && trgt.category != Category.MISSION && trgt.category != Category.GOAL && trgt.category != Category.ASSESSMENT) { removeWarning = false; break; } } if (removeWarning) { var item = getWarning(WarningItem.Codes.W_VISION_NOT_MISSION_GOAL_ASSESSMENT); warnings.Remove(item); removed.Add(item); } } break; case Category.GOAL: if (linkedType == Category.OBJECTIVE || linkedType == Category.VISION) { bool warnObjective = true; bool warnVision = true; foreach (var link in remainingLinks) { var src = (BMM)link.sourceModel; var trgt = (BMM)link.targetModel; if (src.category == Category.OBJECTIVE || trgt.category == Category.OBJECTIVE) { warnObjective = false; } else if (src.category == Category.VISION || trgt.category == Category.VISION) { warnVision = false; } } if (warnObjective) { var item = new WarningItem(this, WarningItem.Codes.M_GOAL_OBJECTIVE); warnings.Add(item); added.Add(item); } if (warnVision) { var item = new WarningItem(this, WarningItem.Codes.M_GOAL_VISION); warnings.Add(item); added.Add(item); } } break; case Category.OBJECTIVE: break; case Category.MISSION: if (linkedType == Category.STRATEGY) { bool warn = true; foreach (var link in remainingLinks) { var src = (BMM)link.sourceModel; var trgt = (BMM)link.targetModel; if (src.category == Category.STRATEGY || trgt.category == Category.STRATEGY) { warn = false; } } if (warn) { var item = new WarningItem(this, WarningItem.Codes.M_MISSION_STRATEGY); warnings.Add(item); added.Add(item); } } break; case Category.STRATEGY: if (linkedType == Category.TACTIC || linkedType == Category.GOAL || linkedType == Category.OBJECTIVE) { bool warnTactic = true; bool warnResult = true; foreach (var link in remainingLinks) { var src = (BMM)link.sourceModel; var trgt = (BMM)link.targetModel; if (src.category == Category.TACTIC || trgt.category == Category.TACTIC) { warnTactic = false; } else if (src.category == Category.GOAL || trgt.category == Category.GOAL || src.category == Category.OBJECTIVE || trgt.category == Category.OBJECTIVE) { warnResult = false; } } if (warnTactic) { var item = new WarningItem(this, WarningItem.Codes.M_STRATEGY_TACTIC); warnings.Add(item); added.Add(item); } if (warnResult) { var item = new WarningItem(this, WarningItem.Codes.M_ACTION_RESULT); warnings.Add(item); added.Add(item); } } break; case Category.TACTIC: if (linkedType == Category.GOAL || linkedType == Category.OBJECTIVE) { bool warnResult = true; foreach (var link in remainingLinks) { var src = (BMM)link.sourceModel; var trgt = (BMM)link.targetModel; if (src.category == Category.GOAL || trgt.category == Category.GOAL || src.category == Category.OBJECTIVE || trgt.category == Category.OBJECTIVE) { warnResult = false; } } if (warnResult) { var item = new WarningItem(this, WarningItem.Codes.M_ACTION_RESULT); warnings.Add(item); added.Add(item); } } break; case Category.BUSINESS_POLICY: if (linkedType == Category.BUSINESS_RULE || linkedType == Category.STRATEGY || linkedType == Category.TACTIC || linkedType == Category.VISION || linkedType == Category.MISSION) { bool warnRule = true; bool warnAction = true; bool removeVisionMission = true; foreach (var link in remainingLinks) { var src = (BMM)link.sourceModel; var trgt = (BMM)link.targetModel; if (src.category == Category.BUSINESS_RULE || trgt.category == Category.BUSINESS_RULE) { warnRule = false; } else if (src.category == Category.STRATEGY || trgt.category == Category.STRATEGY || src.category == Category.TACTIC || trgt.category == Category.TACTIC) { warnAction = false; } else if (src.category == Category.VISION || trgt.category == Category.VISION || src.category == Category.MISSION || trgt.category == Category.MISSION) { removeVisionMission = false; } } if (warnRule) { var item = new WarningItem(this, WarningItem.Codes.M_POLICY_RULE); warnings.Add(item); added.Add(item); } if (warnAction) { var item = new WarningItem(this, WarningItem.Codes.M_DIRECTIVE_ACTION); warnings.Add(item); added.Add(item); } if (removeVisionMission) { var item = getWarning(WarningItem.Codes.W_DIRECTIVE_VISION_MISSION); warnings.Remove(item); removed.Add(item); } } break; case Category.BUSINESS_RULE: if (linkedType == Category.STRATEGY || linkedType == Category.TACTIC || linkedType == Category.VISION || linkedType == Category.MISSION) { bool warnAction = true; bool removeVisionMission = true; foreach (var link in remainingLinks) { var src = (BMM)link.sourceModel; var trgt = (BMM)link.targetModel; if (src.category == Category.STRATEGY || trgt.category == Category.STRATEGY || src.category == Category.TACTIC || trgt.category == Category.TACTIC) { warnAction = false; } else if (src.category == Category.VISION || trgt.category == Category.VISION || src.category == Category.MISSION || trgt.category == Category.MISSION) { removeVisionMission = false; } } if (warnAction) { var item = new WarningItem(this, WarningItem.Codes.M_DIRECTIVE_ACTION); warnings.Add(item); added.Add(item); } if (removeVisionMission) { var item = getWarning(WarningItem.Codes.W_DIRECTIVE_VISION_MISSION); warnings.Remove(item); removed.Add(item); } } break; case Category.INFLUENCER: if (linkedType == Category.ASSESSMENT || linkedType == Category.BUSINESS_POLICY || linkedType == Category.BUSINESS_RULE) { bool warnAssessment = true; bool removeAssDir = true; foreach (var link in remainingLinks) { var src = (BMM)link.sourceModel; var trgt = (BMM)link.targetModel; if (src.category == Category.ASSESSMENT || trgt.category == Category.ASSESSMENT) { removeAssDir = false; warnAssessment = false; } else if (src.category != Category.BUSINESS_POLICY || trgt.category != Category.BUSINESS_POLICY || src.category != Category.BUSINESS_RULE || trgt.category != Category.BUSINESS_RULE) { removeAssDir = false; } } if (warnAssessment) { var item = new WarningItem(this, WarningItem.Codes.M_INFLUENCER_ASSESSMENT); warnings.Add(item); added.Add(item); } if (removeAssDir) { var item = getWarning(WarningItem.Codes.W_INFLUENCER_NOT_ASSESSMENT_DIRECTIVE); warnings.Remove(item); removed.Add(item); } } break; case Category.ASSESSMENT: if (linkedType == Category.VISION || linkedType == Category.GOAL || linkedType == Category.OBJECTIVE || linkedType == Category.MISSION || linkedType == Category.STRATEGY || linkedType == Category.TACTIC || linkedType == Category.INFLUENCER) { bool warnEndsMeans = true; bool warnInfluencer = true; foreach (var link in remainingLinks) { var src = (BMM)link.sourceModel; var trgt = (BMM)link.targetModel; if (linkedType == Category.VISION || linkedType == Category.GOAL || linkedType == Category.OBJECTIVE || linkedType == Category.MISSION || linkedType == Category.STRATEGY || linkedType == Category.TACTIC) { warnEndsMeans = false; } else if (src.category == Category.INFLUENCER || trgt.category == Category.INFLUENCER) { warnInfluencer = false; } } if (warnEndsMeans) { var item = new WarningItem(this, WarningItem.Codes.M_ASSESSMENT_ENDS_MEANS); warnings.Add(item); added.Add(item); } if (warnInfluencer) { var item = new WarningItem(this, WarningItem.Codes.M_ASSESSMENT_INFLUENCER); warnings.Add(item); added.Add(item); } } break; } if (WarningsAddedEvent != null && added.Count > 0) { WarningsAddedEvent(this, added); } if (WarningsRemovedEvent != null && removed.Count > 0) { WarningsRemovedEvent(this, removed); } }
public void validateNewLink(Category linkedType) { var added = new ObservableCollection <WarningItem>(); var removed = new ObservableCollection <WarningItem>(); switch (category) { // check if an incorrect link is added or if a missing link is restored. case Category.VISION: if (linkedType != Category.MISSION && linkedType != Category.GOAL && linkedType != Category.ASSESSMENT) { var item = new WarningItem(this, WarningItem.Codes.W_VISION_NOT_MISSION_GOAL_ASSESSMENT); warnings.Add(item); added.Add(item); } break; case Category.GOAL: if (linkedType == Category.OBJECTIVE) { var item = getWarning(WarningItem.Codes.M_GOAL_OBJECTIVE); warnings.Remove(item); removed.Add(item); } if (linkedType == Category.VISION) { var item = getWarning(WarningItem.Codes.M_GOAL_VISION); warnings.Remove(item); removed.Add(item); } break; case Category.OBJECTIVE: break; case Category.MISSION: if (linkedType == Category.STRATEGY) { var item = getWarning(WarningItem.Codes.M_MISSION_STRATEGY); warnings.Remove(item); removed.Add(item); } break; case Category.STRATEGY: if (linkedType == Category.TACTIC) { var item = getWarning(WarningItem.Codes.M_STRATEGY_TACTIC); warnings.Remove(item); removed.Add(item); } if (linkedType == Category.GOAL || linkedType == Category.OBJECTIVE) { var item = getWarning(WarningItem.Codes.M_ACTION_RESULT); warnings.Remove(item); removed.Add(item); } break; case Category.TACTIC: if (linkedType == Category.GOAL || linkedType == Category.OBJECTIVE) { var item = getWarning(WarningItem.Codes.M_ACTION_RESULT); warnings.Remove(item); removed.Add(item); } break; case Category.BUSINESS_POLICY: if (linkedType == Category.BUSINESS_RULE) { var item = getWarning(WarningItem.Codes.M_POLICY_RULE); warnings.Remove(item); removed.Add(item); } if (linkedType == Category.STRATEGY || linkedType == Category.TACTIC) { var item = getWarning(WarningItem.Codes.M_DIRECTIVE_ACTION); warnings.Remove(item); removed.Add(item); } if (linkedType == Category.VISION || linkedType == Category.MISSION) { var item = new WarningItem(this, WarningItem.Codes.W_DIRECTIVE_VISION_MISSION); warnings.Add(item); added.Add(item); } break; case Category.BUSINESS_RULE: if (linkedType == Category.STRATEGY || linkedType == Category.TACTIC) { var item = getWarning(WarningItem.Codes.M_DIRECTIVE_ACTION); warnings.Remove(item); removed.Add(item); } if (linkedType == Category.VISION || linkedType == Category.MISSION) { var item = new WarningItem(this, WarningItem.Codes.W_DIRECTIVE_VISION_MISSION); warnings.Add(item); added.Add(item); } break; case Category.INFLUENCER: if (linkedType == Category.ASSESSMENT) { var item = getWarning(WarningItem.Codes.M_INFLUENCER_ASSESSMENT); warnings.Remove(item); removed.Add(item); } else if (linkedType != Category.BUSINESS_POLICY && linkedType != Category.BUSINESS_RULE) { var item = new WarningItem(this, WarningItem.Codes.W_INFLUENCER_NOT_ASSESSMENT_DIRECTIVE); warnings.Add(item); added.Add(item); } break; case Category.ASSESSMENT: if (linkedType == Category.VISION || linkedType == Category.GOAL || linkedType == Category.OBJECTIVE || linkedType == Category.MISSION || linkedType == Category.STRATEGY || linkedType == Category.TACTIC) { var item = getWarning(WarningItem.Codes.M_ASSESSMENT_ENDS_MEANS); warnings.Remove(item); removed.Add(item); } else if (linkedType == Category.INFLUENCER) { var item = getWarning(WarningItem.Codes.M_ASSESSMENT_INFLUENCER); warnings.Remove(item); removed.Add(item); } break; } if (WarningsAddedEvent != null && added.Count > 0) { WarningsAddedEvent(this, added); } if (WarningsRemovedEvent != null && removed.Count > 0) { WarningsRemovedEvent(this, removed); } }