Ejemplo de Validación de Modelos [Guía de Usuario de Enterprise Architect] |
Top Previous Next |
El siguiente ejemplo de código está escrito en C# y proporciona una implementación de validación del esqueleto del modelo que puede querer utilizar como un punto de inicio al escribir sus propias reglas de validación de modelo. 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) { // si no hay ningún proyecto abierto, deshabilite todas las opciones de menú 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: insertar código de prueba aquí } } }
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: expandir esta lista tanto como sea necesario
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: agregar casos extras tanto como sea necesario } 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: expandir esta lista }
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: realizar revisión de regla 2 break; // TODO: agregar más clases } } }
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: realizar revisión de regla 3 break; // TODO: agregar más clases } } }
public void RunElementRule(EA.Repository Repository, string sRuleID, EA.Element Element) { if (Element != null) { switch (LookupMapEx(sRuleID)) { case cRule01: DoRule01(Repository, Element); break; // TODO: agregar más clases } } }
private void DoRule01(EA.Repository Repository, EA.Element Element) { if (Element.Stereotype != "myStereotype") return;
// TODO: lógica de validación aquí
// informar errores de validación EA.Project Project = Repository.GetProjectInterface(); Project.PublishResult(LookupMap(cRule01), EA.EnumMVErrorType.mvError, GetRuleStr(cRule01)); } } } |