Enterprise Architect 代码生成:获取界面标签

Enterprise Architect Code Generation: Get tags of interface

我使用 Enterprise Architect 进行代码生成,我想自动检索 class 实现的接口的所有标签(在我的例子中是 Java 注释)。考虑以下示例:

根据这个模型,我想生成一个 class 如下所示:

@AnnotationOfMyInterface
public class MyClass {
    ...
}

所以我想将注释作为标签添加到 MyInterface,在代码生成期间应该应用于 MyClass。在 UI 中,显示了已实现接口的标签,所以我希望有一种方法可以在代码生成期间获取这些标签。

我尝试编辑代码生成模板并找到宏来获取

  1. class 实现的所有接口:%list="ClassInterface" @separator=", "%
  2. 具有给定名称的所有标签(正在为其生成代码的 class):%classTag:"annotations"%

但不幸的是,我无法组合这些宏,即我无法将一个接口传递给 classTag 宏,以便我可以检索该特定接口的标签(而不是我正在生成代码的接口)为了)。有没有办法获取特定 class / 接口的 class 标签? 我还尝试创建一个单独的代码生成模板并从主 class 代码生成模板“调用”它。但是在我的模板中,classTag 宏仍然只获取 class.

的标签

多亏了上面的评论,特别是因为在 EA 的论坛上回答了我的问题,我才能够设置一些概念验证来实现我想要的。我正在回答我的问题以记录我的解决方案,以防将来有人遇到类似问题。

在 Eve 在 EA 论坛中的提示之后,我研究了为 Enterprise Architect 创建一个插件,以便从代码生成模板中使用该插件。正如@Geert Bellekens 在 this tutorial 中所解释的那样,我首先编写了一个基本的插件。之后我更改了 AddIn 以满足我的需要。这就是我最终获得 class 实现的接口的标记值(注释)的方式:

第一步: 在代码生成模板中,我获得了 class 实现的所有接口并将它们传递给我的 AddIn:

$interfaces=%list="ClassInterface" @separator=", "%
%EXEC_ADD_IN("MyAddin","getInterfaceTags", $interfaces)%

第二步: 如记录 here 存储库对象与 EXEC_ADD_IN 调用一起传递。我使用存储库对象并使用 $interfaces 中包含的名称查询所有接口。然后我可以获得每个界面元素的标记值。为单个界面实现此目的的简单原型:

public Object getInterfaceTags(EA.Repository repo, Object args)
{
  String[] interfaceNames = args as String[];
  String firstInterfaceName = interfaceNames[0];
  EA.Element interfaceElement = repo.GetElementsByQuery("Simple", firstInterfaceName).GetAt(0);
  String tag = interfaceElement.TaggedValues.GetAt(0);
  return interfaceElement.Name + " has tag value" + tag.Value;
}

我知道,有几个缺点,但这只是一个很可能永远不会成为生产代码的想法的简单概念证明。