# HascTool 開発者向けドキュメント

※ ソースファイルからビルド、修正、独自ブロックの開発をする場合など

※ http://download.eclipse.org/〜 のURLが見つからない場合は、http://archive.eclipse.org/〜 に置き換えてみて下さい

## ソースファイルのセットアップ方法

- Eclipse 3.6 (Helios) RCP版をダウンロードして起動

- SR2（動作確認済）

- http://www.eclipse.org/downloads/packages/eclipse-rcp-and-rap-developers/heliossr2

- SR1

- http://www.eclipse.org/downloads/packages/eclipse-rcp-and-rap-developers/heliossr1

- 初版

- http://www.eclipse.org/downloads/packages/eclipse-rcp-and-rap-developers/heliosr

- Eclipse RCPに、Zest pluginをinstall

- メニュー > Help > install new software..
- siteは、"Helios" を選ぶ
- "Group items by category" のチェックをはずす
- 検索ボックスに"zest"と入れ、見つかった３つのpluginを全てinstall

- Eclipse RCPに、以下のプロジェクトをimport

- HascTool
- HascTool_BDEditor1
- HascTool_BDEditor2
- HascLoggerServerPlugin
- HascWekaPrj

- HascToolの起動設定を作る

- メニュー Run > Run configuration..
- Eclipse Applicationの場所に、新規configurationを追加
- Mainタブ

- Name, Workspace Data Location を適当に設定
- Run a product: の場所で jp.hasc.hasctool.ui.product を選ぶ

- Argumentsタブ

- Program arguments に、 -consoleLog -clean を追加。（直前に空白文字も必要）

- （-consoleLog:エラーログを親Eclipseのコンソールに表示。-clean:古いplug-inが残らないよう に）

- Plug-ins タブ（依存pluginが変わるたびに再設定が必要）

- Launch with: (plug-ins) selected below only
- Deselect All ボタンを押す
- Workspaceにある、以下のpluginのチェックをつける

- jp.hasc.hasctool.ui
- jp.hasc.hasctool.ui.bdeditor1
- jp.hasc.hasctool.ui.bdeditor2
- jp.hasc.loggerserver
- jp.hasc.hasctool.wekaPrj

- Add Required Plug-ins ボタンを押す

- HascTool上での設定

- HascToolを起動する
- Resourcesパースペクティブのままなら、HascToolパースペクティブに変更
- Window > Reset Perspective..

- Eclipseのメニューを日本語にする場合は、Eclipse RCPに、Babel Language Pack を入れる

- http://babel.eclipse.org/babel/

- R0.8.1（動作確認済）用の、Eclipse Plug-in リポジトリ：
  http://archive.eclipse.org/technology/babel/update-site/R0.8.1/helios

- 以下のplug-inをインストール

- Babel Language Pack for eclipse in Japanese
- Babel Language Pack for rt.equinox in Japanese
- Babel Language Pack for rt.equinox.p2 in Japanese

- 日本語のpropertiesファイルを編集する場合は、Eclipse RCPに、プロパティファイルエディター プラグインを入れる

- http://propedit.sourceforge.jp/

- htmlドキュメントを編集する場合は、BlueGriffonを使用して下さい

- http://bluegriffon.org/
- Macの場合、メニュー:オプション>Sourceで、Force Unix-style carriage returns (LF) を有効に
- メニュー:書式>ページのプロパティで、文字セットをUnicode(UTF-8)に設定
- svnのsvn:eol-styleプロパティをnativeに指定すれば、異なるOSで編集しても改行コードが変わりません。

## 実行ファイル（バイナリパッケージ）のexport方法

- OS

- MacOS X 64bits版上で動作確認しています
- WIndowsの場合は、MSYS と zip コマンド をインストールして、PATHを通しておいて下さい

- Eclipse 3.6 (Helios) RCP をインストール（上記参照）
- Delta packをインストール（Eclipseのバージョンに合った物を使用する必要）

- Helios SR2（3.6.2）用: http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/index.php#DeltaPack
- Helios SR1（3.6.1）用: http://archive.eclipse.org/eclipse/downloads/drops/R-3.6.1-201009090800/index.php#DeltaPack
- Helios 初版（3.6）用: http://archive.eclipse.org/eclipse/downloads/drops/R-3.6-201006080911/index.php#DeltaPack
- インストール方法：http://aniefer.blogspot.com/2009/06/using-deltapack-in-eclipse-35.html

- Eclipse RCP の eclipse.ini（Macの場合はEclipse.app バンドル ディレクトリの中にある） に -Dfile.encoding=UTF8 を書く（忘れるとコンパイルエラーが出る）
- Babel Language Pack (上記参照)をインストール
- 新形式（features形式；自己アップデートが可能）でexportする場合：

- HascToolFeature, HascToolBabelFeature プロジェクトをEclipseにインポートして開く
- svn等でバージョン管理する場合：出力先ディレクトリ以下のrepositoryディレクトリを、最新のものにupdateする
- 出力先ディレクトリに、win32.win32.x86 / macosx.cocoa.x86 ディレクトリが残っているとエラーになるので、もしあったら消しておく
- HascToolFeature/dist/hasctool_by_features.product を開き

- OverviewタブのEclipse product export wizardリンクを実行

- root directory名は hasctool に（忘れずに）
- Export for multiple platforms をチェックする
- platformsは、win32/x86, cocoa/x86 をチェック

- ターミナルで出力先のディレクトリへ移動し、sh (path to HascToolFeature)/dist/after_export.sh を実行

- dist_appディレクトリに、配布用の実行ファイル（zipファイル）が日付付きで作成されます（不要なら削除）

- repositoryディレクトリをアップデートサーバへアップロード（バージョン管理するならcommitも）

- 旧形式（plug-in形式）でexportする場合：

- exportする前に、出力先のディレクトリの中身を消しておく（前のファイルが残ってるとエラーが出る場合が）
- Product Configurationファイル(HascTool/dist_old/hasctool_by_plugin.product)を開き

- Dependenciesタブのplug-inリストを設定（HascToolの起動設定と同様です）
- OverviewタブのEclipse product export wizardリンクを実行（設定は上記のfeatures形式の場合と同じ）

- ターミナルで出力先のディレクトリへ移動し、sh (path to HascTool)/dist_old/after_export.sh を実行

## 独自ブロックの開発方法

- ブロックは、主にjp.hasc.hasctool.core.runtime以下のパッケージにあります。
- 現状では、ブロックを追加したい場合は、HascToolプラグインの中に追加する必要があります（別プラグインにはできません）。

- プロジェクトを分けたい場合は、HascToolプラグイン(jp.hasc.hasctool.ui)に対する「フラグメントプロジェ クト」として、新 規プロジェクトを作成して下さい。

- ブロックのクラスを追加した場合は、後述のBlock Class Listの更新も必要です。
- ブロックは、jp.hasc.hasctool.core.runtime.RuntimeBean インタフェースを実装した、JavaBeans準拠のクラスです。
- ブロックのプロパティは、Java Beansのプロパティ（setterメソッド）として実現されます。

- ブロック図エディタのプロパティビューでは、プリミティブ型とString型のプロパティのみ編集できます

- ブロック図の実行時には、以下の手順でブロックがインスタンス化され実行されます。

- デフォルトコンストラクタ の呼び出し
- プロパティをセット
- setup(RuntimeContext) メソッドの呼び出し
- Port間をconnect
- ActiveTaskのrun()メソッドの呼び出し

- ブロック間の通信は、出力ポート（MessageConnectorオブジェクト）から入力ポート（MessageProcessorオブ ジェクト）へ、 メッセージの系列を送信することにより行います。

- 入力／出力ポートは、ポート名に対応するプロパティ（getterメソッド）から取得されます
- 入力ポートは、jp.hasc.hasctool.core.messaging.MessageProcessorインタフェースを実 装したオブジェク トです。

- processMessage()メソッドで、メッセージ受信時の処理を実装します。

- 出力ポートは、jp.hasc.hasctool.core.messaging.MessageConnector型のオブジェクトで す。

- ポート間の接続は、 "出力ポート.connect(入力ポート);" で行います。
- メッセージの送信は、"出力ポート.processMessage(メッセージ);" を呼び出すと、それが、"接続された入力ポート.processMessage(メッセージ);" へと委譲（転送）されることにより、実現されます。
- これを複数回繰り返すことにより、メッセージの系列を送信します。

- 入力ポートのprocessMessage()メソッドは、単一の入力ポートに対しては、単一のスレッドから呼び出します。複数の入力 ポートがある場合 は、それぞれが別のスレッドから呼び出される可能性があります。

- プロパティは、Commons BeanUtils による拡張（プロパティ名"inputPort[n]"が、getInputPort(int index)メソッドに対応するなど）にも対応しています。
- readme.html に書かれている、ブロックリファレンス、メッセージリファレンスも参照して下さい。
- ブロックのクラスに、public static String getRuntimeBeanDescription() というメソッドを定義して、そのブロックの簡単な説明文を返すことが出来ます。Block Class List 内の項目や、ブロック図エディタ（新版）でブロックを選択した時の _ClassDescription プロパティに、この説明文が表示されます。 多言語対応したい場合は、EclipseのExternalize Strings機能などを使って下さい。（サンプル： jp.hasc.hasctool.core.runtime.filter.SampleFilter1）
- ブロックのクラスに対して、@RuntimeBeanInfo アノテーションをつけることにより、入出力ポートの一覧、および、ポートに入出力されるメッセージのクラス（複数可）を記述できます。

- この、ポートに入出力されるメッセージのクラス（複数可）の情報は、ブロック図エディタ（新版）でコネクションを選択した時に、 _OutputPortClasses（出力ポート側）、_InputPortClasses（入力ポート側）プロパティに表示されます。
- 入出力間でクラスがマッチする場合（出力側のクラスが、入力側と同じクラスかそのサブクラスの場合）は、クラス名が角括弧 [ ] で囲んで表示されます。

- マッチしないからといって、エラーというわけではありません。例えば、抽象的なクラス（SignalMessage等）のメッセージを扱うブ ロックからの出力を、それらのサブクラス（VectorSignalMessage等）のメッセージを扱うブロックに入力するような場合は、マッ チしません。

- 現状では単に参考情報として表示するだけで、実行には影響ありません。
- 詳しい記述方法については、RuntimeBeanInfo および PortInfo アノテーションのJavaDoc、および SampleFilter1のソースコードを参照して下さい。

## Block Class List の項目の管理

- ブロックのクラスを追加した場合は、Block Class List の項目を管理している、BeansList xml ファイル（標準では HascToolBeansList.xml）を更新する必要があります。
- Eclipse上で、以下のクラスを Java Application として実行すれば、プロジェクト内のRuntimeBeansを実装した全てのクラスを検索し、一覧をBeansList xml形式で出力します。

- Project: 検索対象とするプロジェクト
- Main Class: jp.hasc.hasctool.ui.views.beanslist.BeansListGenerator
- Program Arguments: -dir クラスファイルのルートディレクトリのパス（HascToolのパス/classes） -o 出力先xmlファイルのパス（HascToolのパス/HascToolBeansList.xml)

- フラグメントプロジェクトを作成する場合など、別のBeansList xmlファイルを追加したい場合は、以下のような拡張ポイントを定義して、追加のxmlファイルを指定して下さい。全てのxmlファイルがマージされて Block Class List ビューに表示されます。

- <extension point="jp.hasc.hasctool.beanslist"> <list-xml resource="MyBeansList.xml" /> </extension>

## 既知の不具合と対処方法

- Macの場合、EclipseからHascToolを起動すると、別名保存ダイアログのテキストボックスにテキストが入力できないようです。テキスト ボックスのコンテキストメニューからのコピー＆ペーストは利用可能なので、コピーして別のテキストエディタ等で編集し、テキストボックス にペーストしなおして下さい。exportしたHascTool バイナリ版では問題ないようです。
- エラーが出てHascToolが起動しない場合は、HascToolの起動設定（メニュー Run > Run-configuration..）を見直してみて下さい

- エラーメッセージ例：!MESSAGE One or more bundles are not resolved because the following root constraints are not resolved:
- Plug-insタブのplug-inリストを再設定

- Deselect All ボタンを押し、jp.hasc.*のプラグインをチェックし、Add Required Plug-ins ボタンを押す

- ArgumentsタブのProgram argumentsに -consoleLog -clean を追加してあることを確認
- それでも直らない場合＞Mainタブで、Workspace Data を Clear する設定にし、起動時にWorkspaceを消せば、直るかもしれません

- readme.html の不具合情報も参照して下さい

## RuntimeSampleView の説明（古いコードであり、現在はあまり使いません）

- １段目のボタン（複数列） : 様々な波形を再生
- ２段目のボタン : ファイル等から入力した波形を再生
- ３段目のボタン

- stop: 再生停止
- output CSV file: 再生された信号をCSVファイルに保存（次回再生時から。毎回上書き）
- queue capacity: 時間同期用のキューの最大サイズ。空欄なら無限大。小さいとデッドロックします
- sleep time scale: 信号の時刻（の指定倍）に合わせてsleepしながら再生する。値が小さいと速く再生。0や空欄ならsleepしない