こんにちは。渡邊です。
商用ルールエンジン、Corticonの研究をしています。
corticon_extensions.pdf を読みながら、演算子を拡張しました。メモを残します。
corticon_extensions.pdf が丁寧に記されているで、同ドキュメント参照で終わりにしてもよいくらいです。
ドキュメントではString属性の演算子を拡張していますが、私はDate型属性の演算子を拡張しました。
Javaのコード
次のように月初を返す演算子と月末を返す演算子を、一つのクラスに定義しました。ちなみにこのクラスのUTはしていません。バグっていたらごめんなさい。
package com.natswell.corticon.extension.operator.attribute; import java.util.Calendar; import java.util.Date; import com.corticon.services.extensions.ICcDateTimeExtension; public class NWDateOperator implements ICcDateTimeExtension { public static Date beginningOfMonth(Date date) { Calendar beginningOfMonth = Calendar.getInstance(); beginningOfMonth.setTime(date); beginningOfMonth.set(Calendar.DATE, 1); return beginningOfMonth.getTime(); } public static Date endOfMonth(Date date) { Calendar endOfMonth = Calendar.getInstance(); endOfMonth.setTime(beginningOfMonth(date)); endOfMonth.add(Calendar.MONTH, 1); endOfMonth.add(Calendar.DATE, -1); return endOfMonth.getTime(); } }
MANIFEST.MF
Manifest-Version から Bundle-Vendor までは、Plug-Inプロジェクト作成時点から変更していません。
Require-Bundle以下は、基本的に corticon_extensions.pdf からコピペした定義です。Export-Packageだけ、コピー元の設定を一部修正し、自分が作成したパッケージを定義します。”.,”は消さないように気を付けてください。
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: com.natswell.corticon.extension.AttributeOperators Bundle-SymbolicName: com.natswell.corticon.extension.AttributeOperators Bundle-Version: 1.0.0.qualifier Bundle-Vendor: com.natswell Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Require-Bundle: com.corticon.services, com.corticon.legacy Export-Package: ., com.natswell.corticon.extension.operator.attribute Eclipse-RegisterBuddy: com.corticon.legacy
Rulesheet
下の画像のようにルールを作成しました。
全属性のデータ型は、Date型です。
未設定です。
DateOperatorエンティティのinput属性に対して、新規作成した拡張演算子を使っています。
条件無し列において、beginningOfMonth属性にbeginningOfMonth演算子の結果、endOfMonth属性にendOfMonth演算子の結果を設定しています。
Ruletest
テスト実行結果です。input属性に2014年8月15日を設定しています。ルール適用後に2014年8月15日に対する月初と月末が出力されています。
所感
Corticonはドキュメントがしっかりしていていいですね。