Enterprise Architect代码生成模板:将分层包结构导入为字符串

时间:2012-04-24 09:53:37

标签: namespaces code-generation enterprise-architect

问题

在代码生成模板的Enterprise Architect 7.1.834中,可以在文件模板的范围内打印类所属的所有父包吗?

需要的原因是生成符合我公司编码标准的多包含警卫


什么不起作用

我试过了两个:

  %list="Namespace__Notes" @separator="-"% 

  %packageName% 

两者的输出只打印顶级父包(Package1),但我希望看到:

  Package1-Package2-Package3

有没有人找到办法做到这一点?

Namepace__Notes

Namepace__Notes是一个具有Namepace类型的自定义模板,其内容如下所示

  %PI=""%
  %packageName%

[编辑]肮脏的解决方案

我当前的(脏)解决方案是破坏文件路径。 我错过了什么吗?

代码:

$l_backslash = %REPLACE("\z","z","")%
$filepath = %filePath%
$upper_filepath = %TO_UPPER($filepath)%
$upper_package_as_path = $l_backslash + %TO_UPPER(packageName)% + $l_backslash
$upper_package_base_len = %LENGTH(packageName)%

$package_path_pos = %FIND($upper_filepath,$upper_package_as_path)%
%if $package_path_pos != "-1" and $package_path_pos != "0"%
$upper_filepath = %MID($upper_filepath,$package_path_pos)%
%endIf%

$file_define =  "_" + $upper_filepath + "__"
$file_define = %REPLACE($file_define,".","_")%
$file_define = %REPLACE($file_define,$l_backslash,"_")%
$file_define = %REPLACE($file_define,"/","_")% 

$body += "/**************************************************************************//**"
$body += "\n * \file         " + %fileName%
$body += "\n *"
$body += "\n * \brief        " + %elemType% + " " + %className% + " header file"
$body += "\n *"
$body += "\n * \author       " + %classAuthor ? value : "<unknown>"%
$body += "\n *"
$body += "\n *****************************************************************************/"
$body += "\n"
$body += "\n#ifndef " + $file_define
$body += "\n#define " + $file_define
$body += "\n"

2 个答案:

答案 0 :(得分:0)

%packagePath%为您提供以点分隔的包层次结构,而%classQualName%为您生成:: - 分隔的类层次结构(对于内部类)。

这是针对当前版本的,我不知道这些宏是否存在于7.1之前。您应该认真考虑升级,因为当前版本是9.3,EA与项目内容是向后兼容的。

答案 1 :(得分:-1)

在EA 10%中,packagePath%也只提供文件模板中的顶级包

[编辑]另一个肮脏和局部解决方案。

我制作了一个新的自定义模板,Namespace__fullName:

$prevName = %list="Namespace__fullName"%
%if $prevName != ""%
%packageName%::$prevName
%else%
%packageName%
%endIf%

和Class__fullQualName:

%list="Namespace__fullName"%::%classQualName%

当源文件只包含1个类(可能包含嵌套项)时,这将在简单的情况下工作,因此只有1个名称空间层次结构。