以下内容参考:setup/HowToCreatePluginsInProM – prom
可以参考视频教程:流程挖掘开发,ProM Workshop 介绍_哔哩哔哩_bilibili,开发部分只需看part1-part3,字幕是自制的,若有错误欢迎评论区纠正 ^-^
Hello World插件开发初探
插件定义
package org.processmining.plugins.gettingstarted;
import org.processmining.contexts.uitopia.annotations.UITopiaVariant;
import org.processmining.framework.plugin.PluginContext;
import org.processmining.framework.plugin.annotations.Plugin;
public class HelloWorld {
@Plugin(
name = "My Hello World Plugin",
parameterLabels = {},
returnLabels = { "Hello world string" },
returnTypes = { String.class },
userAccessible = true,
help = "Produces the string: 'Hello world'"
)
@UITopiaVariant(
affiliation = "My company",
author = "My name",
email = "My e-mail address"
)
public static String helloWorld(PluginContext context) {
return "Hello World";
}
}
- helloworld方法包含了插件的逻辑,输入参数PluginContext类型是必须的。
- @Plugin 插件通过该注解表示,作用于方法上,该方法是插件的逻辑。@Plugin的属性也即插件的属性:
| 插件 | 属性 | 作用 | 例子 |
| @Plugin | name | 插件名 | My Hello World Plugin |
| parameterLabels | 插件的输入的标签 | 本例中没指明 | |
| returnLabels | 给插件输出的对象的标签列表,一个输出对象对应一个标签 | 本例返回一个字符串,标签为Hello world string | |
| returnTypes | 插件输出对象的类型 | String.class | |
| userAccessible | 是否用户可以访问的 | 一般情况设为true | |
| help | 说明如何使用该插件(可选) | Produces the string: 'Hello world' |
ProM框架启动时,会扫描所有class文件中的@Plugin注解,并对应注册一个插件。
- @UITopiaViant 注解通知ProM GUI此插件的存在,其属性有:
| 插件 | 属性 | 作用 | 例子 |
| @UITopiaViant | affiliation | 作者的组织 | |
| author | 作者名 | ||
| 作者邮箱 |
- 插件运行效果:①运行ProM with UITopia (GettingStarted).launch

找到上面写的插件,点击Start运行。当有注解@UITopiaViant 时,ProM tools可以找到对应的插件,插件名称是@Plugin中的name。插件列表显示绿色表示该插件可以运行,这里是因为我们这个插件不需要input,自然是可以运行的;若为黄褐色,则表示缺乏需要的输入,因此不能运行。
运行效果:

多输出
前面说了@Plugin的returnLabels和returnTypes属性控制插件的输出,输出是一个列表,输出的标签、类型和顺序由它们确定。
package org.processmining.plugins.gettingstarted;
import org.processmining.contexts.uitopia.annotations.UITopiaVariant;
import org.processmining.framework.plugin.PluginContext;
import org.processmining.framework.plugin.annotations.Plugin;
public class HelloWorld2 {
@Plugin(
name = "My 2nd Hello World Plug-in",
parameterLabels = {},
returnLabels = {"Hello string", "Number", "Worlds string" },
returnTypes = {String.class, Integer.class, String.class },
userAccessible = true,
help = "Produces three objects: 'Hello', number, 'world'"
)
@UITopiaVariant(
affiliation = "My company",
author = "My name",
email = "My e-mail address"
)
public static Object[] helloWorlds(PluginContext context) {
return new Object[] { "Hello", new Integer(6), "Worlds" };
}
}
执行My 2nd Hello World Plug-in后输出三个Object(Integer没有实现可视化)

在方法中,输出一个Object[]数组类型,在这里没有对类型进行检查,但是返回类型必须在returnLabels明确,ProM在执行插件时才能检查类型是否正常,并在不正确时抛出一个异常(将上面数组第三个元素改成3,输出以下效果)。

多输入
前面说了@Plugin的parameterLabels属性说明插件的输入的标签,不同于输出,输入的类型和顺序由方法参数确定。
package org.processmining.plugins.gettingstarted;
import org.processmining.contexts.uitopia.annotations.UITopiaVariant;
import org.processmining.framework.plugin.PluginContext;
import org.processmining.framework.plugin.annotations.Plugin;
public class HelloWorld3 {
@Plugin(
name = "My Combine Worlds Plug-in",
parameterLabels = { "First string", "Number", "Second string" },
returnLabels = { "First string several second strings" },
returnTypes = { String.class },

本文详细解读了ProM插件开发的基础,包括HelloWorld插件的创建、多输出与多输入处理,以及PluginContext的使用、进度指示器、Future对象和对象管理。还介绍了插件重载、可选输入、插件管理以及非静态方法插件的概念。

347

被折叠的 条评论
为什么被折叠?



