ProM开发指北3——ProM插件开发入门

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

以下内容参考: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 作者名
email 作者邮箱
  • 插件运行效果:①运行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 }, 
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值