2008年4月3日木曜日

StatusとMultiStatusとその他Statusと...

ILogインターフェースでのログ出力の際に、引数として渡すIStatusの実装クラスは大きく分けて2つある。

Status
単一のメッセージとExceptionのみで構成されるログ情報。

ILog log = activator.getDefault().getLog();
log.log(new Status(Status.CANCEL, PLUGIN_ID, "これはCANCELメッセージ", null)); // 独自エラーコードなし
log.log(new Status(Status.ERROR, PLUGIN_ID, 9, "これはERRORメッセージ", null)); // Exceptionなし
log.log(new Status(Status.WARNING, PLUGIN_ID, 40, "これはWARNINGメッセージ", new Exception()));
log.log(new Status(Status.INFO, PLUGIN_ID, 2, "これはINFOメッセージ", new Exception()));
log.log(new Status(Status.OK, PLUGIN_ID, 1, "これはOKメッセージ", new Exception()));

上記は次のようになる。


MultiStatus
複数のStatusから構成される階層化ステータス。
上位ステータスは下位ステータスのSeverityが高いものが反映される。

MultiStatus multiStatus = new MultiStatus(PLUGIN_ID, 0, "これはMultiStatusのRootメッセージ", null);
multiStatus.add(new Status(Status.WARNING, PLUGIN_ID, "危険!!", null));
multiStatus.add(new Status(Status.INFO, PLUGIN_ID, "参考情報", null));
MultiStatus multiStatus2 = new MultiStatus(PLUGIN_ID, 0, "これはMultiStatus2のRootメッセージ", null);
multiStatus2.add(multiStatus);
log.log(multiStatus2);

上記は次のようになる。


その他Statusのサブクラス
MergeStatusやOperationStatusなど、個々の機能に特化したステータスクラスがある。それらもやはりStatusクラスから派生している。

2008年4月1日火曜日

EventManager

org.eclipse.core.commands.common.EventManagerクラスはスレッドセーフなListener管理実装を持つ抽象クラスであり、Listenerを管理する必要のあるクラスはこのクラスから派生させると便利。
AbstractActionやPreferenceStoreなどがこのクラスから派生している。