FlexGantt について

優れたガントチャートをJavaアプリケーションに追加

FlexGantt は Swing 対応の先進的なガントチャート UI コンポーネントであり、プロジェクト計画やスケジューリング結果への、ユーザーからのインタラクションを実現します。 FlexGantt を用いるアプリケーションは、あらゆる方式を用いて、この Gantt コンポーネントをカスタマイズできます。 タイムラインと関連するデータの描画や編集だけではなく、コンポーネント全体の振る舞いを修正することも可能です。 こうした機能は、ガントチャートにおける特定の局面で振舞いを制御する、脱着が可能なポリシーを実装することで達成されます。 FlexGantt は、きわめて高度な抽出レベルを用いて、プロジェクト計画(リソース/人/タスク)や、ERP、生産計画、スケジューリング、製造、プロジェクト・ポートフォリオ管理といった、多種多様なドメインでの応用を実現します。

FlexGantt は、Swing の MVC アプローチに従い、多様な目的のために、いくつかの異なるモデルが使用されます。 カレンダー・モデルは休日と週末を把握します。そして、ページング・モデルは計画期間を持つ個々のユーザーをサポートし、ブックマーク・モデルはアプリケーションとユーザーが指定するブックマークを保持します。 しかしmプライマリー・モデルは、ガントチャート・コンポーネントとデータを供給する、唯一のガントチャート・モデルです。 それは、ガントチャートの左サイド(ツリーテーブル)にデータを代入できるようにした、ツリーテーブル・モデルの拡張版です。 さらに、FlexGantt は、画面の右側に表示されるタイムライン・オブジェクトを返します。 それらが、タイム・ポイントやタイム・スパンと結合するため、画面の右側にアクティビティ/タスク/イベント/マイルストーンなどを表現するタイムライン・オブジェクトを配置できるようになります。

FlexGantt の主な機能:

スクリーンの分割と、2つのガント・チャート : プランニングやスケジューリングを取り扱う、大半のアプリケーションで要求される機能は、水平にスクロールしているときに、2 種類のモデルあるいは、同じモデルの2つのセクションおいて、データを保持する能力です。 FlexGantt フレームワークには、それを処理するための Dual Gantt Chart が含まれます。そのため、いつでもユーザーは、ガントチャートを split/unsplit することができます。 水平の分割においては、上下のパートをリサイズできます。 また、タイムライン・オブジェクトを、上下のパート間でドラッグすることも可能です。

ブックマーク : ブックマークの概念に対して、ユーザーにとって慣れ親しみやすいものです。FlexGantt でも、ブックマークがサポートされています。 それにより、タイムライン設定をブックマークで調整することで、特定のタイム・ポイントや、精度、期間などが、ガントチャート上に表示されます。 定義されたブックマークは、ナビゲーション・コントロールのメニュー内にリストアップされます。ユーザーがメニュー・ボタンをクリックしたときに、コントロール・キーが押下されていれば、ブックマークを付けられたタイム・スパンの、小さなプレビュー・イメージが表示されます。

階層: FlexGantt は、グラフィックスとマッピングのアプリケーションで用いられてきた、きわめてユニークな階層化のアプローチを使用します。 それぞれのガントチャートは、コア機能を提供するシステム・レイヤのセット(垂直のグリッド・ライン描画など)および、タイムライン・オブジェクトのレンダリングに特化されたレイヤのセット(アクティビティ/イベント/マイルストーンなど)で構成されています。 アプリケーションが必要とするだけ、それらのタイムライン・オブジェクト・レイヤを加えることが可能です。 そして、それらのオブジェクトをグループ化し、その表示を一度に ON/OFF することもできます。 さらに、タイムライン・オブジェクトの重なりを容易に識別するために、レイヤにおける透過性もサポートされます。

グリッドのドラッグ&ドロップ : タイムライン・オブジェクトの、水平方向でのドラッグとリサイズおよび、垂直方向でのドラッグが可能です。ドラッグ&ドロップ操作の間に、グリッドの表示を OFF にすることも可能なため、特定の時間軸へのタイムライン・オブジェクトの配置が、さらに容易になります。 あらゆるグリッドに実装が可能なポリシーにより、そのための制御が実現されます。 デフォルトのグリッド・ポリシーでは、世紀/年/月/週/日からミリ秒まで、タイムライン・オブジェクトの単位をコンフィグレーションすることが可能です。

ポリシーによる振舞いの制御 : スケジューリング・アプリケーションは、情報のビジュアライズや、データの編集、そしてユーザー・インタラクションへの反応により、大きく変化します。 FlexGantt のポリシー・フレームワークでは、こうしたガントチャートのバリエーションを調整するために、FlexGantt のポリシー・フレームワークを利用できます。 ポリシーは小さなデジション・メーカーであり、また、大量のコードを含むこともありません。さらに、それらはステートレスです。 そして、多くのケースにおいて、フラグ(boolean)とコマンドだけを返します。 フラグはプログラムのフローを制御するために使われます。 そして、コマンドはデータを実際に修正するために使われます(アンドゥ&リドゥ機能を持つコマンド・スタックを介して)。

脱着が可能なレンダリングと編集の機能 : Swing が定義するレンダリングやエディタのクラスは、その ツリー/テーブル/リストなどの、UI コンポーネントに使用されています。 FlexGantt も同様に、ツリー・テーブル・セル/カラム・ヘッダー/ポップアップ/デイライン・モデル/タイムライン・オブジェクト/イベントライン・オブジェクトなどのレンダリングを定義します。なお、ツリー・テーブル・セルとタイムライン・オブジェクトに対して、エディタを利用することが可能です。ガントチャートの右側領域に、そのための透過性を持ったウインドウが表示されます。

ポップアップとアノテーション : タイムラインの下には、アクティビティを表現するための洗練されたバーが提供されますが、スペースが制約されているため、伝えられる情報量は限られてしまいます。 それらのバーの上に、マウス・カーソルをホバリングしたときに現れるポップアップ/アノテーションは、プランナーがスケジューリングについて判断する際に必要とする、リッチな追加情報を表現するための洗練された機能です。 FlexGantt ポップアップのカスタマイズは、Swing コンポーネントのカスタマイズと同じ方式で実現されます。 それぞれのレンダリングを、各種のポップアップ・オブジェクトにマップすることが可能です。 ポップアップ・オブジェクトは、ポップアップに特化したポリシーに基づいて検索されます。

印刷 : ガントチャートに表示される計画はドキュメントであり、また、すべてのドキュメントは印刷に対応する必要があります。 FlexGantt にビルトインされた印刷機能により、ユーザーは印刷のタイム・スパンと粒度を指定することが可能になります。 結果として生じるチャートは、複数のページにまたがる幅と高さに対応することができます。

リレーションシップ : 複数のタイムライン・オブジェクトが相互に関係を持つことは、きわめて一般的なことです。 たとえば、プロジェクト計画ソフトウェアでは、多くの場合に、オブジェクト間の制約が定義されます。それらの制約の例としては、'start after'、'finish before'、'same start'、'same end' などが挙げられます。FlexGantt では、それらを結ぶラインをドローすることで、ビジュアライズを行います。それぞれのアプリケーションは、ビジュアライズのための独自の方式を持ちます(制約に応じたカラーやスタイルなど)。 関連をしめすための、カスタムなレンダリング機能をプラグインすることで、あらゆる種類の表現のための実装が可能にななります。

レイジー・ローディング: アプリケーションのタイプに応じて、ビジュアライズを必要とする大容量データが生じる場合があります。 こうした状況において、ユーザーが実際にデータを要求するときに、サーバー(あるいはデータベース)からクライアントに転送される、レイジー・ローディングのアプローチを用いると、ユーザー・インターフェイスの高速性と応答性が充たされます。 FlexGantt には、レイジー・ローディングをサポートする設計が、基本的に施されています。 たとえば、ツリー・テーブルに対して、リスナー・インターフェイスを実装するオブジェクトは、子供ノードのロードによる親ノードの拡張に対応するために、ツリーが展開される前にイベントを受け取るでしょう。また、ページング・モデルは、レイジー・ローディングをサポートする、別のインフラストラクチャの例となります。

コマンド・フレームワーク : FlexGantt は、小規模でありながらパワフルな、コマンド・フレームワークを提供します。 それは、アンドゥ&リドゥを可能にする、編集操作をサポートするために使われます。このフレームワークは、コマンド/コマンド・スタック/コマンド・スタック・リスナー/プログレス・モニターにより構成されます。 それらのコマンドは、内部的に置換えが可能なコマンド・スタックを用いるガントチャートを介して、実行/アンドゥ/リドゥされます。また、ユーザーインターフェイスの応答性を確保するために、コそれらのマンドは自身のスレッド内で実行されます。 コマンド・スタック・イベントは、コマンドが実行される際に発行されます。 プログレス・モニターは、コマンドによる進歩を表示するために使われます。 サブ・プログレス・モニターは、複数のコマンドで構成される、複合的なコマンドに対して使用されます。 コマンドの実行が終了した後に、そのコマンドはスタックのアンドゥ可能リストに加えられます。 そして、このリストは、アンドゥが不可能なコマンドを実行する際にクリアされます。 コマンド・フレームワークは高レベルの抽象概念を用いるため、すでに存在するコマンド・インフラストラクチャ(レガシーコード)の再利用が可能になります。

ページング: スケジューリング・アプリケーションが、大量のタイムライン・オブジェクトを取り扱う必要がある場合には、いくつかのページ/タイムスパンにタイムラインを分割することが、多くのケースで意味を持ちます。 このように、データを小さなチャンクに切り分けることで、さらに容易なガントチャートの取り扱いが実現されます。 このページング・モデルにより、個々のページが管理されます。 そこでは、現在のページ/前のページ/次のページ/最初のページ/最後のページに対するクエリーが可能です。 このユーザー・インターフェイスが提供するコントロールは、個々のページを選択するために使用が可能です。

Row の高さを変更: FlexGantt チャートにおける個々の Row は、自身の高さを持つことができます。 ツリー・テーブルのノードが異なるタイプのオブジェクトを表現するとき、あるいは、その値が個々のノードを組み合わされるとき、この機能はきわめて有用です。 そのようなケースでは、値に応じた Row の高さが設定されます(たとえばリソースの容量)。

マルチ・カラムのソート: ガントチャートの左側にあるツリー・テーブルは、マルチ・カラムに対するソートをサポートします。 それにより、いくつかのツリー・テーブル・カラムの同時選択と、そのテーブル・データのソートが実現されます。 FlexGantt は、高速ソートのためにクイックソート・アルゴリズムを使用し、また、昇順/降順もサポートします。

カスタマイズ可能なタイムライン: それぞれのアプリケーションは、多くの場合、タイムラインに対して個々の要件を持ちます。年間における週を、日付の次に表示したい場合や、年間における平日の、日数を表示したい場合があります(たとえば 'day 241’ )。 私たちのタイムラインは、柔軟性を念頭にして設計されています。 そのモデルとレンダリングは、置換えが可能です。さらに、タイムライン全体であっても、カスタムなサブクラスで代用することが可能です。

カレンダー・モデル : このカレンダー・モデルは、週末や休日といった各種の特別なタイムスパンに関係する、ガントチャートに対してデータを提供します。 カレンダー・モデルにおけるエントリーは、レイヤ・コンテナ(画面の右側)を縦断するかたちでレンダリングされます。 カレンダー・モデルの最も卓越した使用例は、週末だと考えられる日の定義です。つまり、週末の背景をグレー表示することです。

自動スクロール: FlexGantt チャートの Time Now/System Time が頻繁に更新される場合には、現在を示す時間軸にフォーカスすることが意味を持ちます。自動スクロールが使用可能なときには、時間軸を移動してい最中であっても、Time Nowカーソル(垂直の破線)がレイヤ・コンテナの中心に保持されるでしょう。アプリケーションがモニタリング機能を持ち、さらに、インタラクティブなスケジューリング機能も持つ場合には、きわめて有用な機能となります。

マルチライン: マルチラインの機能により、ガントチャート内の同じ Row の中で、複数のタイムライン・オブジェクトを上下に表示することが可能になります。 この方式により、普通では重なってしまうタイムライン・オブジェクトであっても、問題なく表示することが可能です。