#中央値を取得するコンポーネント
中央値は階級に幅があるパターンがあったりしますが、一番簡単な個別のデータから中央値を取得するものを作ります。
###実装したいこと
- 入力ストリームはRecordとCSV
- レコードの指定フィールドから中央値を取得する
- 取得した中央値はプロパティの値として設定する
#IntelliJでプロジェクト作成
作成したプロジェクトへ以下を追加していきます。
- パッケージ com.asteria.sample.kotlin.component にします。
- コンポーネント用Kotlinクラスファイル MedianComponent.kt にします。
- META-INFのもろもろファイル
- External Libraries
- Artifacts
###META-INF
コンポーネントとして必要なJarファイル内に必要なファイルたちです。
プロジェクトの「src」の下に作成します。
META-INF
└ asteria
├ icons
│ └ Median.png アイコンファイル
├ ja
│ ├ reference
│ │ └ component
│ │ └ Median.html ヘルプファイル
│ └ ComponentDefine.xconf コンポーネント定義ファイル
└ version.xml バージョンファイル
ComponentDefine.xconfファイルはいつものxscファイルとほぼ同じ感じで作ります。
###Project Structure
以下の2つはメニューから File>Project Structure... を開いて設定します。
####External Libraries
Project Settings>Libraries から追加します。
ascore-1912.0800.jar、asdesigner-1912.0800.jarの2つを追加します。
####Artifacts
Project Settings>Atrifacts から追加します。
MedianComponent.jarという名前にします。このJarファイルへはkotlinのライブラリは追加しますが、ascore-1912.0800.jarとasdesigner-1912.0800.jarは含めません。
以上でIntelliJでビルドを実行するとコンポーネントのJarファイルが作成できるようになりました。
#コード
プロパティは3つ
*フィールド名:中央値を取得したいフィールド名を指定する
*中央値:readonlyで計算した中央値を設定する
*レコード数 :readonlyで使用したレコード数を設定する
KotlinはJavaのクラスを継承できるのでSimpleComponentを継承します。
class MedianComponent : SimpleComponent {
エラーコードはvalで定義します。
private val ERROR_FIELD_NAME_IS_EMPTY = "1"
プロパティもこんな感じに定義できます。
private val _propFieldName = StringProperty("FieldName", true, true)
通常コンストラクタでストリーム定義などを行います。
こんな感じ
constructor() : super() {
inputConnector.acceptType = StreamType.RECORDS or StreamType.CSV
inputConnector.acceptLinkCount = 1
outputConnector.acceptType = StreamType.RECORDS or StreamType.CSV
registerProperty(_propFieldName)
registerProperty(_propMedian)
registerProperty(_propRecordCount)
}
処理の本体executeメソッドは以下な感じで書きます。
override fun execute(p0: ExecuteContext?): Boolean {
//処理
passStream();
return true
}
実はKotlin初心者の私がサクサクコードが書けたのもIntelliJのおかげです。
Javaのコードをコピーしてきて、ペーストするとKotlinのコードに変換してくれました。
JavaのコードがあるならKotlinで書かなくてもいいのでは?という疑問は置いといて、ごにょごにょと変換してくれる動作は感動的です!
全コードはgithubに置いておきましたので見たい方はどうぞ。
#注意
- ConponentDefine.xconfはxscファイルと若干違うので、インストール済のコンポーネントを見て確認することをお勧めします。
- ヘルプファイルは雛形を書くのではなく、完成形のhtmlファイルを書きます。CSSを他のヘルプと合わせたければ既存のコンポーネントヘルプで確認します。
#ビルド
ビルドはIntelliJのこのボタンをクリック!
作成されたjarファイルはoutフォルダー下にあります。
#AsteriaWarpへJarファイル追加
コンポーネントのJarファイルは、[DATA_DIR]下の以下のパスにコピーします。
C:\asteriahome5\system\lib\components
#フローデザイナーへJarファイル追加
メニューから ツール>コンポーネント/マッパー関数の取得 を開きます。MedianComponent.jarをダウンロードしてフローデザイナーを再起動します。
#Flow
Flowは以下な感じで作成しました。
アイコンは的の中央に当たった矢をイメージしてみました。
ちょっとアレなのでわかりやすく「中央」と漢字で書いてみたり・・・