以下のサンプル・コードのように、ServerSideLayout クラスのインスタンスを使用して、サーバー・サイドでグラフ・レイアウトを実行します。
var treeLayout = new ibm_ilog.graphlayout.tree.TreeLayout(); graph.setNodeLayout(treeLayout); var serverLayout = new ibm_ilog.graphlayout.ServerSideLayout(graph, url); var deferred = serverLayout.layout();
ServerSideLayout インスタンスのコンストラクターには、2 つの引数があります。
レイアウトするグラフの名前を graph 引数に渡し、サーバー・サイド・グラフ・レイアウト・サービスの URL を url 引数に渡します。
ServerSideLayout インスタンスで layout メソッドを呼び出す場合、レイアウトは、サーバーで非同期に実行されます。
メモ
すべてのマルチスレッド・アプリケーションと同様、アプリケーションは、非同期グラフ・レイアウト実行用に設計する必要があります。アプリケーションは、レイアウト実行中にグラフを変更してはなりません。さもないと、クライアント側で行われたすべての変更が、レイアウト完了時に上書きされます。
layout メソッドは、グラフ・レイアウトの実行完了を待つことなく、直ちに現在のスレッドに戻ります。ブラウザーのユーザー・インターフェースはアクティブのままで、アプリケーションは他の処理を継続することができます。
グラフ・レイアウトの実行が完了すると、新規のノード位置およびリンク形状が、グラフに対して自動的に適用されます。
ノード・レイアウトおよびリンク・レイアウト・アルゴリズムを構成する場合、グラフ・レイアウトをクライアント・サイドまたはサーバー・サイドのいずれから実行しようと、同じメソッド
(Graph.setNodeLayout および Graph.setLinkLayout) を使用します。
ただし、 Graph.performGraphLayout および Diagram.performGraphLayout 呼び出しを使用して、サーバー・サイドでグラフ・レイアウトを実行することはしないでください。これらは、クライアント・サイドのグラフ・レイアウト専用です。
コールバックの追加
layout メソッドは、レイアウトの終了時にユーザーに通知するために使用できる dojo.Deferred オブジェクトを戻します。
通知を提供するには、dojo.Deferred オブジェクトの addCallback メソッドを呼び出します。以下の例では、レイアウトの実行中にあるボタンを使用不可にし、レイアウトの終了時点でそのボタンを使用可能にします。
dijit.byId("layoutButton").attr("disabled", true); var deferred = serverLayout.layout(); deferred.addCallback(function(){ dijit.byId("layoutButton").attr("disabled", false); });
また、グラフ・レイアウトの実行時にエラーが発生した場合に通知されるようにするため、dojo.Deferred オブジェクトを使用することもできます。
レイアウト・エラーが通知されるようにするには、以下の例のように addErrback メソッドを呼び出します。
deferred.addErrback(function(e){ alert(e); dijit.byId("layoutButton").attr("disabled", false); });
サーバー・サイド・グラフ・レイアウト実行の停止
サーバー・サイド・グラフ・レイアウトの実行は、ServerSideLayout オブジェクトの stop メソッドを呼び出すことにより停止することができます。
これによって、クライアント・サイドでグラフを変更せずにサーバー要求が取り消されます。
serverLayout.stop();