第8章
この章では、関係ビューアを使用してリソースセット内の関係をナビゲートする方法について説明します。この章の節は次のとおりです。
「 関係ビューア 」は、現在開いているオブジェクトに存在する関係を示します。リソースセット内でオブジェクトを開くと、関係ビューアは、このオブジェクトからユーザが興味のありそうなリソースセット内の他の項目に向かう簡単なナビゲーションパスを表示します。可能なナビゲーションパスは、Windows Explorerで使用されるツリー表示に似たフォルダとファイルのツリーとして示されます。ツリーのブランチを展開または縮小して、リソースセット内の関係にナビゲートすることができます。
関係ビューアは、「関係アナライザ」が生成した出力の可視的レンダリングです。関係アナライザは、リソースセット内のオブジェクトからユーザに興味のあるナビゲーションパスを決定します。関係アナライザは、関係ビューアに処理される出力としてXMLツリーを生成します。 通常、これらのナビゲーションパスは、exteNd Directorアプリケーションの基本である関係に基づきます。 たとえば、PIDページを開くと、関係ビューアは、そのページのPID記述子を表示します。
exteNd Directorは、リソースセットの共通項目のための組み込み関係アナライザを含みます。 また、独自のアプリケーション要件に合うカスタム関係アナライザを作成することもできます。
関係ビューアを使用するには、最初にファイルを開く必要があります。ファイルは、[検索]タブまたはビューから開きます。
ソースファイルエディタはファイルのコンテンツを表示し、関係ビューアは、開いているファイルのタイプに固有の1つまたは複数の関係を表示します。
ディスクから読み込まれた項目は編集することができ、黒で表示されます。 JARファイルから読み込まれた項目は編集することができません。 これらの項目は、青で表示され、[RO](読み込み専用)が付いています。
開きたい他のファイルを見つけたら、そのファイルをダブルクリックします。
ソースファイルエディタはファイルのコンテンツを表示し、関係ビューアはこのファイルに固有の1つまたは複数の関係を表示します。
exteNd Directorリソースセットが知る必要のある新しいタイプの要素を作成する場合、カスタム関係アナライザを作成します。
たとえば、リソースセット内のmy-stuffというディレクトリでカスタム要素を作成するとします。 my-stuffディレクトリ内に、目的のポートレットを一覧表示するXMLファイルを配置します。 この場合、my-stuffディレクトリの各XMLドキュメントについて、ポートレット情報を処理して、一覧表示されたポートレットをXMLツリーに追加する必要があります。
my-stuffディレクトリのサンプルファイルであるexample.xmlのソースは、次のとおりです。
<portlets> <portlet cid="FireRule.xml"> <portlet cid="MyPages.xml"> </portlets>
example.xmlファイルが開発環境で開かれると、カスタム関係アナライザが呼び出され、表示されるツリーを示すXML構造に変換します。
関係ビューアは、組み込み関係アナライザの1つで生成されたツリーを表示するように、カスタム関係アナライザで生成されたツリーを表示します。 ディスクから読み込まれた項目は編集することができ、黒で表示されます。 JARファイルから読み込まれた項目は編集することができません。 これらの項目は、青で表示され、[RO](読み込み専用)が付いています。
使用できる関係アナライザを決定するため、開発環境はリソースセットに対し、EbiElementRelationshipAnalyzerインタフェースを実装するすべてのクラスのリストを尋ねます。 このリストを得ると、リスト上のクラスを循環して、関係ツリーのプロバイダとなるかどうかを各クラスに尋ねます。これは、analyzeFile()メソッドを呼び出すことによって実行されます。 メソッドがTrueを戻す場合、処理は停止され、関係のツリーを表すXML構造の提供が同じクラスに対して2回目に求められます。これは、getTreeXML()メソッドを呼び出すことによって実行されます。
カスタム関係アナライザを作成するには、EbiElementRelationshipAnalyzerインタフェースを実装するクラスを作成し、そのクラスをリソースセット内に配置する必要があります。たとえば、my-stuffディレクトリ(前に説明)のカスタム要素をサポートするには、MyStuffRelationshipAnalyzer.javaというソースファイルを作成し、それをResourceSet/srcディレクトリに配置します。
MyStuffRelationshipAnalyzerのコードは、次のとおりです。
import java.io.*;
import java.util.*;
import com.sssw.fw.resource.*;
import com.sssw.extensions.xwb.util.*;
import com.sssw.extensions.xwb.fw.resource.api.*;
import com.sssw.extensions.xwb.fw.resource.ui.*;
public class MyStuffRelationshipAnalyzer implements EbiElementRelationshipAnalyzer {
public boolean analyzeFile( EboResourceElement element ) {
// make sure we have an element
if ( element != null ) {
// if it is from the "my-stuff" directory & is XML, then I will
// provide the relationship analyzer for it
if ( element.getDirectoryName().equals( "my-stuff" ) ) {
return element.isXML();
}
}
return false;
}
public org.jdom.Document getTreeXml( EboResourceElement element ) {
// create the xml tree
EboTreeXmlHelper th = new EboTreeXmlHelper();
try {
// add the opened object as a node
th.addElement( th.makeElement( element,
EbiElementRelationshipAnalyzer.XML_ICON ) );
// create a portlets folder
EboFolder portletsFolder = new EboFolder( "Portlets" );
th.addFolder( portletsFolder );
// find all the portlets nodes
org.w3c.dom.NodeList portlets =
element.getDocument().getElementsByTagName( "portlet" );
if ( portlets != null ) {
String cid = null;
org.w3c.dom.Element portletElem = null;
int len = portlets.getLength();
// process through the portlets nodeList
for ( int i = 0; i < len; i++ ) {
if ( portlets.item( i ) instanceof org.w3c.dom.Element ) {
portletElem = (org.w3c.dom.Element)( portlets.item( i ) );
// get the portlet id ( cid )
cid = portletElem.getAttribute( "cid" );
if ( cid != null ) {
// try and find the portlet in the portal-portlet
// directory
EboResourceElement re =
EboResource.getCurrent().getResourceElement(
"portal-portlet", cid );
// add it to the portlets folder
th.addElement( portletsFolder, th.makeElement( re,
EbiElementRelationshipAnalyzer.XML_ICON ) );
}
}
}
}
}
catch ( Exception e ) {
System.out.println( e );
}
return th.getDocument();
}
}
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...