工具基本注解

@ProcessDef :用来标注方法,描述工具的基本信息。

namespace() 所在的名称空间 类比 maven dependency 的 groupId
name() 名字 类比 maven dependency 的 artifactId
caption() 别名 默认为空,生成工具时会取 name 作为默认值
description() 描述信息 默认为空
Version() 版本信息 double 类型,默认1.0
compatibleVersion() 兼容版本信息 double类型,默认1.0
**注** :factoryName + namespace + name,作为工具的唯一标识,不可重复(其中,factoryName 来自于工具所在的ProcessRegistry)

@InputDef :用来标注方法参数,绑定 process 工具的 Input 和具体参数。

name() 名称 同一个工具输入名称唯一不可重复
caption() 别名 默认为空,取 name() 作为默认值
description() 描述信息  
isRequired() 是否必填 默认为 true
dataType() 数据类型 一般不需要设置,运行时反射对应的参数获取类型即可。
defaultValue() 参数的默认值 字符串类型,默认为"";单值参数有效,集合型参数将会忽略这个属性
meta() 输入参数的附加信息 比如数值型参数的值域,字符串型参数是连接信息还是普通字符串等内容
asynchronizable() 是否支持异步  
lockDataProvider()   仅当为 false 的时候有效。有些数据类型需要进一步处理需要同步的数据,比如 Recordset,需要同步的是 Recordset.getDataset()
**注**:
  • dataType() 仅在以下几种情况有效:

    • 当参数类型是 List 之类的泛型集合时,由于运行时 T 会被擦除,无法获取到正确的类型,因此需要在 dataType 里指定子项数据类型;
    • 当 InputDef 是同一个参数的多个注解之一时,由于程序无法知道 ParameterBuilder 会如何处理这些参数以及这些参数是什么类型,因此需要在 dataType 里指定数据类型;
    • dataType()指定的类型是参数类型的子类型。
  • asynchronizable()

    • 当工具执行之后,会直接修改该 input 的数据对象时,强烈建议设置该值为 false;
    • 这仅提供一种通用的保证异步执行模型时的数据同步机制,如需更为精细完整的同步,请在自定义数据或者自定义工具层面自行实现;
    • 所有基本数据类型以及对应的封装类型,均不支持。
  • lockDataProvider()

    • 这仅提供一种通用的保证异步执行模型时的数据同步机制,如需更为精细完整的同步,请在自定义数据或者自定义工具层面自行实现;
    • 通过 LockDataProvider SPI 可以添加默认配置,如果 asynchronizable()设置为 false,优先使用通过注解配置的 LockDataProvider,没有注解配置,再查找 SPI 默认配置;
    • 所有基本数据类型以及对应的封装类型,均不支持;
    • 如果 Input 是 CollectionInput,那么这个设置针对 Collection 的子项做数据加锁;
    • 如果 Input 是 SingleInput,但 type 是集合,建议直接使用 J.U.C 提供的类型实现同步。
  • 目前已经支持的 meta 数据类型:

    • 数值类型(自动匹配类型):double、float、int、short,key与对应含义如下:

      minValue 数值类型参数规定的最小值
      maxValue 数值类型参数规定的最大值
      left 数值类型规定范围的左区间,可选值为:{open,close}
      right 数值类型规定范围的右区间,可选值为:{open,close}

      例如下面的 InputDef 定义的 meta 表示的就是该参数支持[4, 200]这个数学区间上的范围。

      Annotation1

    • String类型(需要指定字符串的具体意义)

      stringType String的意义,目前支持{connection, FieldType}
      stringType=connection connection.mode 表示连接模型,可选值为{SELECT,CREATE}
      stringType=FieldType supportType 表示支持的 FieldType 类型,可选值为 FieldType 类型枚举字符串

      例如下面的 InputDef 定义的 meta 表示的是为参数限定的内容是 FieldType,支持的 FieldType 为INT16,INT32,INT64,SINGLE,DOUBLE。

      Annotation2

    • DatasetVector类型:支持的矢量数据集类型

      supportType 支持的DatasetType类型 可选值为DatasetType类型枚举字符串

      例如下面的 InputDef 表示的是支持 DatasetType 为 POINT,LINE,REGION 的矢量数据集(即,支持点、线、面数据集)。

      Annotation3

@NamespaceDef :工具的空间名称,如果没有,则使用registry中的默认namespace。

namespace() 名称空间id 类比 maven dependency 的 groupId。
title() 命名空间名字 作为处理自动化界面显示出的分级目录名
description() 命名空间描述 与title保持一致
**注** :当工具数量较多时可进行多级目录的设置,支持以 "." 符号分隔进行更多级别的目录设置。

@OutputDef :用来标注工具的输出,有 OutputDefs 作为容器,支持重复注解。

name() 名字 同一个工具输出名字唯一,不可重复
caption() 别名 默认为空,取 name 作为默认值
description() 描述信息  
outputSourceType() 输出绑定类型 RETURN 表示使用方法返回值作为输出数据
PARAMETER 表示绑定某个参数作为输出数据,与 outputSource() 搭配使用
outputSource()   仅 outputSourceType 为 PARAMETER 时有效,与对应索引值的参数绑定
meta() 输出参数的附加信息 字符串为 key=value 的形式的数组,比如数据集类型等
isAcceptNull() 是否接受为null的输出  
**@OutputSourceType**
RETURN 表示使用方法返回值作为输出数据
PARAMETR 表示绑定参数作为输出数据
FIELD 表示绑定字段作为输出数据,暂时没有用上
**@ProcessRegistry**
getName() 工具的 factoryName
getDefaultNamesapce() 工具默认的 amespace
getTitle() 工具的 title
getDescription() 工具的description
getResourceBundleName 资源化
getClasses() 需要扫描的类,用来发现工具的类型数组
**注** :getResourceBundleName,需要针对每一个 registry 传入指定的 ResourceBundleName,才能正确处理资源化;同时,需要保证同一个 registry 下的所有工具都使用同一个 ResourceBundle 的资源。