Prev Next

Model Validation Example

This example code is written in C# and provides a skeleton model validation implementation that you might want to use as a starting point in writing your own model validation rules.

Main.cs

using System;

namespace myAddin

{

     public class Main

     {

          public Rules theRules;

          public Main()

          {

               theRules = new Rules();

          }

          public string EA_Connect(EA.Repository Repository)

          {

               return "";

          }

          public void EA_Disconnect()

          {

               GC.Collect();

               GC.WaitForPendingFinalizers();

          }

          private bool IsProjectOpen(EA.Repository Repository)

          {

               try

               {

                    EA.Collection c = Repository.Models;

                    return true;

               }

               catch

               {

                    return false;

               }

          }

          public object EA_GetMenuItems(EA.Repository Repository, string MenuLocation, string MenuName)

          {

               switch (MenuName)

               {

                    case "":

                         return "-&myAddin";

                    case "-&myAddin":

                         string()  ar = { "&Test" };

                         return ar;

               }

               return "";

          }

          public void EA_GetMenuState(EA.Repository Repository, string MenuLocation, string MenuName,

          string ItemName, ref bool IsEnabled, ref bool IsChecked)

          {

               // if no open project, disable all menu options

               if (IsProjectOpen(Repository))

                    IsEnabled = true;

               else

                    IsEnabled = false;

          }

          public void EA_MenuClick(EA.Repository Repository, string MenuLocation, string MenuName, string ItemName)

          {

               switch (ItemName)

               {

                    case "&Test";

                         DoTest(Repository);

                         break;

               }

          }

          public void EA_OnInitializeUserRules(EA.Repository Repository)

          {

               if (Repository != null)

               {

                    theRules.ConfigureCategories(Repository);

                    theRules.ConfigureRules(Repository);

               }

          }

          public void EA_OnRunElementRule(EA.Repository Repository, string RuleID, EA.Element element)

          {

               theRules.RunElementRule(Repository, RuleID, element);

          }

          public void EA_OnRunDiagramRule(EA.Repository Repository, string RuleID, long lDiagramID)

          {

               theRules.RunDiagramRule(Repository, RuleID, lDiagramID);

          }

          public void EA_OnRunConnectorRule(EA.Repository Repository, string RuleID, long lConnectorID)

          {

               theRules.RunConnectorRule(Repository, RuleID, lConnectorID);

          }

          public void EA_OnRunAttributeRule(EA.Repository Repository, string RuleID, string AttGUID, long lObjectID)

          {

               return;

          }

          public void EA_OnDeleteTechnology(EA.Repository Repository, EA.EventProperties Info)

          {

               return;

          }

          public void EA_OnImportTechnology(EA.Repository Repository, EA.EventProperties Info)

          {

               return;

          }

          private void DoTest(EA.Repository Rep)

          {

               // TODO: insert test code here

           }

      }

}

Rules.cs

using System;

using System.Collections;

namespace myAddin

{

     public class Rules

     {

          private string m_sCategoryID;

          private System.Collections.ArrayList m_RuleIDs;

          private System.Collections.ArrayList m_RuleIDEx;

          private const string cRule01 = "Rule01";

          private const string cRule02 = "Rule02";

          private const string cRule03 = "Rule03";

          // TODO: expand this list as much as necessary

          public Rules()

          {

               m_RuleIDs = new System.Collections.ArrayList();

               m_RuleIDEx = new System.Collections.ArrayList();

          }

          private string LookupMap(string sKey)

          {

               return DoLookupMap(sKey, m_RuleIDs, m_RuleIDEx);

          }

          private string LookupMapEx(string sRule)

          {

               return DoLookupMap(sRule, m_RuleIDEx, m_RuleIDs);

          }

          private string DoLookupMap(string sKey, ArrayList arrValues, ArrayList arrKeys)

          {

               if (arrKeys.Contains(sKey))

                    return arrValues(arrKeys.IndexOf(sKey)).ToString();

               else

                    return "";

          }

          private void AddToMap(string sRuleID, string sKey)

          {

               m_RuleIDs.Add(sRuleID);

               m_RuleIDEx.Add(sKey);

          }

          private string GetRuleStr(string sRuleID)

          {

               switch (sRuleID)

               {

                    case cRule01:

                         return "Error Message 01";

                    case cRule02:

                         return "Error Message 02";

                    case cRule03:

                         return "Error Message 03";

                    // TODO: add extra cases as much as necessary

               }

               return "";

          }

          public void ConfigureCategories(EA.Repository Repository)

          {

               EA.Project Project = Repository.GetProjectInterface();

               m_sCategoryID = Project.DefineRuleCategory("Enterprise Collaboration Architecture (ECA) Rules");

          }

          public void ConfigureRules(EA.Repository Repository)

          {

               EA.Project Project = Repository.GetProjectInterface();

               AddToMap(Project.DefineRule(m_sCategoryID, EA.EnumMVErrorType.mvError, GetRuleStr(cRule01)), cRule01);

               AddToMap(Project.DefineRule(m_sCategoryID, EA.EnumMVErrorType.mvError, GetRuleStr(cRule02)), cRule02);

               AddToMap(Project.DefineRule(m_sCategoryID, EA.EnumMVErrorType.mvError, GetRuleStr(cRule03)), cRule03);

               // TODO: expand this list

          }

          public void RunConnectorRule(EA.Repository Repository, string sRuleID, long lConnectorID)

          {

               EA.Connector Connector = Repository.GetConnectorByID((int)lConnectorID);

               if (Connector != null)

               {

                    switch (LookupMapEx(sRuleID))

                    {

                         case cRule02:

                              // TODO: perform rule 2 check

                              break;

                         // TODO: add more cases

                    }

               }

          }

          public void RunDiagramRule(EA.Repository Repository, string sRuleID, long lDiagramID)

          {

               EA.Diagram Diagram = Repository.GetDiagramByID((int)lDiagramID);

               if (Diagram != null)

               {

                    switch (LookupMapEx(sRuleID))

                    {

                         case cRule03:

                              // TODO: perform rule 3 check

                              break;

                         // TODO: add more cases

                    }

               }

          }

          public void RunElementRule(EA.Repository Repository, string sRuleID, EA.Element Element)

          {

               if (Element != null)

               {

                    switch (LookupMapEx(sRuleID))

                    {

                         case cRule01:

                              DoRule01(Repository, Element);

                              break;

                         // TODO: add more cases

                    }

               }

          }

          private void DoRule01(EA.Repository Repository, EA.Element Element)

          {

               if (Element.Stereotype != "myStereotype")

                    return;

               // TODO: validation logic here

               // report validation errors

               EA.Project Project = Repository.GetProjectInterface();

               Project.PublishResult(LookupMap(cRule01), EA.EnumMVErrorType.mvError, GetRuleStr(cRule01));

          }

     }