1. 前言

已有一些工具可以根据文本自动生成UML时序图,如PlantUML(https://plantuml.com/zh/)、Mermaid(https://mermaid-js.github.io/mermaid/)等。但存在一些使用不便之处,例如激活需要手工指定、语法较复杂,不便于记忆、部分功能使用频率较低、不便于人工继续编辑、展示的样式与常见的UML时序图不同等。

因此使用Java开发了以下根据文本自动生成UML时序图的工具,激活能够自动生成、语法简单便于记忆,支持大部分UML时序图的功能、生成draw.io格式文件,可以继续编辑、展示的样式与常见的UML时序图一致。

本工具生成的UML时序图相关的术语及样式参考了https://www.uml-diagrams.org/sequence-diagrams.html,支持的元素包括:生命线(Lifeline)、激活(Execution/Activation)、消息(Message)。

当前项目可用于为Java代码自动生成UML时序图,可参考https://github.com/Adrninistrator/gen-java-code-uml-sequence-diagram。

2. 更新说明

  • 0.1.0

支持根据消息文本计算所需高度,不再需要人工指定统一固定高度

  • 0.1.1

检查输入文件编码是否为UTF-8-BOM

3. 示例

以下为本工具生成的draw.io格式的UML时序图:

生成以上UML时序图的文本如下:

>><font color="#0000ff"><u>这是一个描述</u></font><br>end~这是一个链接
@<font style="font-size: 17px" face="幼圆" color="#000000"><b><i>小<br>明</i></b></font> as xm
@爸爸
@妈妈 as mm
@老师
@请假<br>系统 as qjxt
xm=>xm:<strike>今天不想上学了</strike>
xm->妈妈:<font style="font-size: 18px" face="微软雅黑" color="#000000">妈妈我今天不想上学了<br>我肚子不舒服</font>
xm=>mm:         <b>妈妈我今天肚子不舒服<br>帮我找老师请个假</b>
mm=>老师:小明今天不舒服<br>想请个假
妈妈<=老师:<font style="font-size: 16px" face="幼圆" color="#0000ff"><b><i>稍等我查一下记录<br>等会回复你</i></b></font>
xm<=妈妈:<u>老师说要等一会</u>老师=>老师:让我看看小明的请假记录~https://www.baidu.com
老师=>qjxt:查询小明的请假记录
老师<=请假<br>系统:返回数据<br>今年共请假0次
老师=>妈妈:那就让他休息一天吧
老师<=妈妈:谢谢老师妈妈->xm:老师同意你请假了

默认会为每个消息自动添加序号,可以通过后续说明的配置关闭。

将鼠标移到生命线或激活上方后,会显示对应生命线的描述,便于在时序图较长时查看。

4. 根据文本文件生成UML时序图

本工具代码地址为: https://github.com/Adrninistrator/uml-sequence-diagram-drawio/ 。

4.1. 使用方式

使用本工具的操作系统中需要安装JDK,并在环境变量中配置对应目录。

4.1.1. 通过命令行执行

可从以下地址下载本工具并解压:

https://github.com/Adrninistrator/uml-sequence-diagram-drawio/releases/

在Windows环境执行时,可在命令行执行以下命令,参数1为文本文件路径(可在资源管理器中将文件拖放到命令行窗口中):

run.bat [文本文件路径]

在Windows环境执行时,还可将文本文件拖动到run.bat图标上执行,操作更简单。

在Linux等环境执行时,可在命令行执行以下命令,参数1为文本文件路径:

sh run.sh [文本文件路径]

执行完毕后,会在文本文件路径所在目录下生成对应的draw.io格式的UML时序图文件。

4.1.2. 在Java项目中执行

在Java项目中执行本工具时,可以通过以下方式引入本工具:

  • Gradle
testImplementation 'com.github.adrninistrator:uml-sequence-diagram-drawio:0.1.1'
  • Maven
<dependency><groupId>com.github.adrninistrator</groupId><artifactId>uml-sequence-diagram-drawio</artifactId><version>0.1.1</version><type>provided</type>
</dependency>

执行com.adrninistrator.usddi.runner.RunnerGenUmlSequenceDiagram类,generate()方法,可以根据指定的文本文件,生成对应的draw.io格式的UML时序图文件。

4.2. 输入文本要求

4.2.1. 输入文本关键字

以下关键字用于指定描述:

>>

以下关键字用于指定生命线的名称:

@
as

以下关键字用于指定消息:

=>
<=
->
:

以下关键字用于对描述或消息指定链接:

~

以下关键字用于指定注释:

#

4.2.2. 输入文本格式

4.2.2.1. 描述格式

描述是指时序图最上部用于说明的文字,与时序图没有关联,仅起说明作用。

  • >>description

使用“>>description”格式指定描述,“description”为描述的内容,可指定任意内容;

描述需要在输入文本的最前面指定,只能指定一个描述,也可以不指定。

可使用HTML标签设置描述内容的样式,如换行等,可参考后续内容。

4.2.2.1.1. 链接格式
  • >>description~link

使用“~link”格式指定描述对应的链接,“link”为链接的内容;

点击指定了链接的描述内容后,会显示对应的链接,如下所示:

链接内容可以指定为一般的文字,也可以指定为URL或文件路径(file://),如下所示:

file://C:\Windows\System32\calc.exe
file://C:\Windows\system.ini
https://www.baidu.com

当链接内容指定为URL时,点击链接时会使用默认浏览器打开对应URL;

当链接内容指定为文件路径,点击链接时会使用对应文件格式的默认软件打开文件,若对应文件格式未指定默认软件,则不会打开,需要先设置。

4.2.2.2. 生命线格式

在输入文本中前面的内容(若有指定描述,则在描述之后),使用以下格式指定生命线,生命线在输入文本中出现的顺序(从上往下)与在UML时序图中的展示顺序(从左往右)一致。

  • @name

使用“@name”格式指定生命线,“name”为生命线的名称;

  • @name as alias

为了简化生命线名称,可使用“@name as alias”格式指定生命线的名称,及别名,“alias”为生命线的别名;

4.2.2.3. 消息格式

在输入文本中后面面的内容,使用以下格式指定消息,消息在输入文本中出现的顺序(从上往下)与在UML时序图中的展示顺序(从上往下)一致。

以下的“~L”为可选数据,如果不需要为消息指定链接则不需要指定。

  • x=>y:m~L

使用“x=>y:m~L”格式指定同步请求消息;

“x”为起点生命线的名称或别名,“y”为终点生命线的名称或别名,“m”为消息内容;

  • x<=y:m~L

使用“x<=y:m~L”格式指定返回消息;

“y”为起点生命线的名称或别名,“x”为终点生命线的名称或别名,“m”为消息内容;

同步请求消息与返回消息需要在正确的位置成对出现;

  • x=>x:m~L

使用“x=>x:m~L”格式指定自调用消息;

“x”为生命线的名称或别名,“m”为消息内容;

  • x->y:m~L

使用“x->y:m~L”格式指定异步消息;

“x”为起点生命线的名称或别名,“y”为终点生命线的名称或别名,“m”为消息内容;

4.2.2.3.1. 链接格式

以上消息内容中的“L”为链接,可以不指定,格式已在前文说明;

为消息指定链接后的示例如下:

4.2.2.4. 注释格式

在输入文本中,以“#”开头的行代表注释。

4.2.2.5. 时序图开始新的部分格式

有时可能需要在一个时序图中展示多个不同部分的时序图,例如在部分1中消息最初的起点对应生命线1,在部分2中消息最初的起点对应生命线2,在这种情况下,可在每个部分的消息之间指定一个或多个空行,如下所示:

部分1消息
部分1消息
...
部分1消息部分2消息
部分2消息
...
部分2消息

4.2.3. 输入文本编码

输入文本文件编码需要是UTF-8。

4.2.4. 消息顺序的要求

本工具通过栈控制各类消息的处理,因此文本中指定的消息顺序需要符合一定要求,否则无法生成最终的时序图。

当处理到同步请求消息时,会将当前同步请求消息入栈

当处理到返回消息,会将栈顶消息出栈

当处理到自调用消息及异步消息时,不会进行入栈或出栈处理

对于异步消息的终点,不支持作为下一条消息的起点。

4.3. 参数配置

4.3.1. 位置相关参数

位置相关参数在配置文件“~usddi_conf/position.properties”中指定,如下所示:

参数名称 参数作用 是否允许为空 默认值
lifeline.center.horizontal.spacing 生命线中间点的水平间距 非空
lifeline.box.width 生命线的方框宽度 非空
lifeline.box.height 生命线的方框高度 非空
message.vertical.spacing 消息(及与生命线之间)垂直间距 非空
self.call.horizontal.width 自调用消息的水平宽度 非空
activation.width 激活的宽度 非空
parts.extra.vertical.spacing 两个部分之间的额外垂直间距 可选 0

消息的高度根据消息字体大小与消息行数(<br>代表换行)计算得出,不需要人工指定

4.3.2. 位置相关参数示例

位置相关参数示例如下所示:

4.3.3. 样式相关参数

样式相关参数在配置文件“~usddi_conf/style.properties”中指定,如下所示:

参数名称 参数作用 是否允许为空 默认值
message.auto.seq 自动为消息添加序号 可选
line.width.of.lifeline 线条宽度-生命线 可选 1
line.width.of.activation 线条宽度-激活 可选 1
line.width.of.message 线条宽度-消息 可选 1
line.color.of.lifeline 线条颜色-生命线 可选 黑色
line.color.of.activation 线条颜色-激活 可选 黑色
line.color.of.message 线条颜色-消息 可选 黑色
box.color.of.lifeline 方框背景颜色-生命线 可选 白色
box.color.of.activation 方框背景颜色-激活 可选 白色
text.font.of.lifeline 文字字体-生命线 可选 Helvetica
text.font.of.message 文字字体-消息 可选 Helvetica
text.size.of.lifeline 文字大小-生命线 可选 12
text.size.of.message 文字大小-消息 可选 12
text.color.of.lifeline 文字颜色-生命线 可选 黑色
text.color.of.message 文字颜色-消息 可选 黑色

颜色相关的参数,应为RGB颜色十六进制形式,即“#xxxxxx”,如“#00ff00”;

文字字体相关的参数,应指定字体的名称,如“宋体”、“Times New Roman”;

线条宽度相关的参数,支持整数或小数;

文字大小相关的参数,支持整数。

4.4. 为某个生命线名称、消息内容文字指定样式

以上样式相关参数是对一个UML时序图内统一的参数配置,当需要为某个生命线名称、消息内容文字单独指定样式时,可以按照以下方式实现:

4.4.1. 文字字体、大小、颜色

文字字体、大小、颜色可通过HTML中的font标签进行设置,如下所示:

<font face="宋体" style="font-size: 18px" color="#ff9999" >xxx</font>
  • 文字字体
<font face="宋体">xxx</font>
  • 文字大小
<font style="font-size: 18px">xxx</font>
  • 文字颜色
<font color="#ff9999" >xxx</font>

4.4.2. 加粗、斜体、下划线、删除线

文字加粗、斜体、下划线、删除线可通过HTML中的标签进行设置,如下所示:

  • 加粗
<b>xxx</b>
  • 斜体
<i>xxx</i>
  • 下划线
<u>xxx</u>
  • 删除线
<strike>xxx</strike>
  • 多个样式
<b><i><u><strike>xxx</strike></u></i></b>

同时指定文字字体、大小、颜色,及加粗、斜体、下划线、删除线时,如下所示:

<font face="宋体" style="font-size: 18px" color="#ff9999" ><b><i><u><strike>xxx</strike></u></i></b></font>

4.4.3. 文字换行

当需要使文字换行时,使用以下内容作为换行符:

<br>

5. 在Java项目中生成UML时序图

调用上述Java组件提供的RunnerGenTextFile4USD类,可以生成用于生成UML时序图的文本文件,再根据文本文件生成UML时序图,该类提供的方法说明如下:

方法名 功能
init 初始化
writeDescription 设置描述
writeComment 添加注释
addReqMessage 添加同步请求消息
addRspMessage 添加返回消息
addSelfCallMessage 添加自调用消息
addAsyncMessage 添加异步请求消息
write2File 将添加的数据写入文件

在使用RunnerGenTextFile4USD类时,需要先调用init方法,指定需要生成的文本文件路径,之后根据需要添加注释或消息,最后调用write2File方法将添加的数据写入文件。

RunnerGenTextFile4USD类的使用示例如下所示,可参考test.usddi.gen_text_file.TestGenTextFile4USD类。

String filePath = "test-" + System.currentTimeMillis() + ".txt";
System.out.println(filePath);RunnerGenTextFile4USD runnerGenTextFile4USD = new RunnerGenTextFile4USD();try (BufferedWriter writer = runnerGenTextFile4USD.init(filePath)) {// 设置描述runnerGenTextFile4USD.writeDescription("description", "descriptionLink");// 添加注释runnerGenTextFile4USD.writeComment("111");runnerGenTextFile4USD.writeComment("222");runnerGenTextFile4USD.writeComment("333");// 添加不同类型的消息runnerGenTextFile4USD.addReqMessage("a", "b", "请求1");runnerGenTextFile4USD.addRspMessage("a", "b", "返回1");runnerGenTextFile4USD.addSelfCallMessage("a", "自调用1<br>aaa");runnerGenTextFile4USD.addAsyncMessage("a", "c", "异步请求1<br>bbb");// 将添加的数据写入文件runnerGenTextFile4USD.write2File();// 根据文本生成UML时序图文件new RunnerGenUmlSequenceDiagram().generate(filePath, filePath + USDDIConstants.EXT_DRAWIO);
} catch (Exception e) {e.printStackTrace();
}

6. 生成的.drawio文件使用方式

6.1. 直接打开.drawio文件

从以下地址可以下载draw.io桌面版软件:

https://github.com/jgraph/drawio-desktop/releases

本工具生成的.drawio文件可使用draw.io软件打开并编辑。

6.2. 复制.drawio文件的XML内容

复制本工具生成的.drawio文件的XML内容,在draw.io桌面版或网页版中,打开“其他->编辑绘图”,或“Extras->Edit Diagram”菜单,可以粘贴到当前打开的draw.io文件中。

根据文本自动生成UML时序图(draw.io格式)相关推荐

  1. Android Studio自动生成UML关系图的方法步骤

    本文主要介绍了Android Studio自动生成UML关系图,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.目录 安装Sketch It 安装"Pl ...

  2. OC代码通过Xcode自动生成UML类图

    先来了解什么是UML? 在UML的静态机制中类图是一个重点,它不但是设计人员关心的核心,更是实现人员关注的核心.建模工具也主要根据类图来产生代码.类图在UML的9个图中占据了一个相当重要的地位.Jam ...

  3. Android Studio插件Code Iris——自动生成UML类图

    今天给大家推荐一个非常好用的Android Studio插件Code Iris.这个插件可以帮我们自动生成项目的UML类图,并且随着我们代码跳转,将UML图展示的中心和重点变成我们正在浏览的类.类图可 ...

  4. IDEA自动生成UML顺序图/时序图

    IDEA顺序图插件 最近老师留了画顺序图的作业,为了提高生产效率,找了个IDEA的顺序图插件:sequenceDiagram 这插件能干的事情真不少 安装好之后右键自己想生成的方法 选择顺序图即可,然 ...

  5. 根据.Net代码自动生成UML Sequence 图。

    Sequence Diagram Generator for .NET I was recently asked about programs that can automatically gener ...

  6. mysql反向生成uml类图_UML类图自动生成,太爽了

    最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑).draw.io(可视化编辑).PlantUML(代码生成), ...

  7. 【系统设计】:画UML时序图的技巧

    1 推荐办法 作为程序员,肯定是使用代码画图比较方便快捷. 以下推荐使用plantUML来画各种UML图. 以下网站是plantUML的官网: www.plantuml.com 网站提供了一个在线的I ...

  8. 强大的uml java_IDEA 还是强大啊,一键把项目生成 UML 类图…

    最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑).draw.io(可视化编辑).PlantUML(代码生成), ...

  9. 【转载】文本自动生成研究进展与趋势

    CCF 中文信息技术专业委员会 万小军 冯岩松 孙薇薇 北京大学计算机科学技术研究所,北京 摘要 我们期待未来有一天计算机能够像人类一样会写作,能够撰写出高质量的自然语言文本.文 本自动生成就是实现这 ...

最新文章

  1. 基于 OpenCV 的表格文本内容提取
  2. IT餐馆—第二回 私活
  3. PIL图像处理:读取图像,显示图像,ROI,保存图像
  4. linux下jdk/maven/tomcat
  5. mfc指示灯报警显示_消防水炮需要外置声光报警吗
  6. ASP.NET Core 2.0 Web API项目升级到ASP.NET Core 3.0概要笔记
  7. Java面向对象(5)--类的成员构造器(构造方法)
  8. 多线程下实现自增的几种方式
  9. Python(set/list/dict/tuple)
  10. SQL 优化之该走索引却不走索引的分析
  11. at shutdown 不起作用_at胎是什么胎
  12. 驱动大师显示无法连接服务器,教你win10系统无法连接到nvidia服务器的解决教程...
  13. 2011年Esri用户大会技术亮点总结之一:概览
  14. NOD32企业内部更新服务器搭建
  15. intel服务器最新主板芯片组,Intel主流服务器主板驱动更新:新增支持Patsburg芯片组...
  16. html特殊符号怎么输入法,教您特殊符号怎么打出来
  17. 微信公众平台与微信公众平台的区别与联系
  18. 如何选择期权品种,是做期货期货还是做期权
  19. 晨控CK-GW06-E03与TwinCAT软件配置指南
  20. 深入理解插入排序(why二分插入排序中left就是待插入位置)

热门文章

  1. 点云孔洞定位_点云处理——孔洞修补
  2. 第三十九章 SQL命令 DROP TRIGGER
  3. 你有没有使用java生成过二维码?(一)
  4. 安卓开发工程师面试题!十多家大厂Android面试真题锦集干货整理,好文推荐
  5. 十大基于风险的漏洞管理工具
  6. 程序员护眼不是你想象的那样
  7. 去掉iPhone safari下手机号码默认的下划线
  8. linux如何使用管理员模式
  9. 安卓view圆周运动(逆时针和顺时针转动)
  10. CUDA笔记--GPU的结构与SM(流处理器)结构