Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }