8 フレックス・フィルタの作成
フレックス・アセットを作成した場合、それはフレックス・フィルタを関連付けると適切に機能するようになります。フレックス・フィルタは割り当てられたタスクを実行し、フレックス・クラスはフレックス・フィルタの機能を実装します。また、1つのフレックス・アセットに複数のフレックス・フィルタを関連付けて、処理の順序を定義することもできます。
トピック:
フレックス・フィルタ・クラスおよびフレックス・フィルタ・アセットについて
フレックス・クラスには、フレックス・フィルタ・アセットの機能を実装し、そのアセットを設計した目的であるタスクをフィルタで処理できるようにします。
次のトピックを参照してください。
フレックス・フィルタ・クラス
フレックス・フィルタ・クラスには、フレックス・フィルタ・アセットの機能が実装されます。これらのクラスは、WebCenter SitesデータベースのFilters
表に一覧表示されます。フレックス・フィルタ・アセットを作成する場合には、対象となるフレックス・フィルタ・クラスを選択します。
WebCenter Sitesに用意されているフレックス・フィルタ・クラスは次のとおりです。
-
Doc-Type: 1つ以上のMIMEファイル・タイプを含むアセットからコンポーネントを抽出し、各ファイル・タイプを個々に名付けられた属性にマップします。
-
サムネイル・クリエータ: イメージをサムネイルに変換します。
-
フィールド・コピアー: システム定義された属性の内容をユーザー定義の属性にコピーします。
-
ドキュメント変換: 登録された変換エンジン(
SystemTransforms
表で指定されたエンジン)を起動して、あるファイル・タイプのドキュメントを別のファイル・タイプのドキュメントに変換します。変換エンジンは、ドキュメント・トランスフォーマにコールを転送してドキュメントの変換を行うラッパーとして機能します。
WebCenter SitesのFilters
データベース表に定義することにより、カスタム・フレックス・フィルタ・クラスを作成できます。カスタム・フレックス・フィルタ・クラスの作成方法については、「カスタム・フレックス・フィルタ・クラスの定義」を参照してください。
Doc-Typeフィルタ・クラス
Doc-Typeフィルタは、ドキュメントを取り込んで、ファイルに関連付けられたMIMEタイプ・データを個々のコンポーネントに抽出します。たとえば、テキストおよびGIF写真を含むアップロードされたファイルは、TXTフォーマット・データおよびGIFフォーマット・データをそれぞれ含む2つの生成された属性にフィルタされます。
Doc-Typeクラスは、次の引数で定義されます。
-
Attribute to Hold Derived File Name: (オプション) 出力ファイル名を格納するフレックス属性を入力します。
-
Attribute to Hold Derived File Type: この属性にはファイル拡張子が格納されます。
-
Attribute to Hold Derived MIME Type: (オプション) MIMEファイルには、プレーン・テキスト、添付、メディア・ファイルなど、いくつかのタイプがあります。
-
Input Attribute Name: アップロードされたファイル名に対応する、WebCenter Sitesによって格納された属性名。
サムネイル・クリエータ・フィルタ・クラス
サムネイル・クリエータ・フィルタを使用すると、コンテンツ・プロバイダは元のグラフィックをアップロードでき、WebCenter Sitesは新しいサムネイル・サイズのGIFグラフィック・ファイルを作成できます。
サムネイル・クリエータ・クラスを定義する引数は次のとおりです。
-
Input Attribute Name: アップロードされたファイルの名前。
-
大きなバージョンのサムネイル・グラフィックのための表示値: Output Attribute for Main Height、Output Attribute for Main WidthおよびEnter Maximum Pixel Size。
-
作成するサムネイルを定義する属性: Output Attribute Name、Output Attribute for Thumb Height、Output Attribute for Image AspectおよびOutput Attribute for Thumb Width。
フィールド・コピアー・フィルタ・クラス
フィールド・コピアー・フィルタは、システム定義された属性の内容をユーザー定義のフレックス属性にコピーします。
フィールド・コピアー・クラスを定義する引数は次のとおりです。
-
Name: コピーするシステム定義された属性の名前。
-
Value: システム定義された属性の値のコピー先とするフレックス属性の名前。
図10-3は、FirstSiteIIサンプル・サイトのMediaフレックス・ファミリを使用して、フィールド・コピアー・フィルタを実装する方法の詳細な例を示しています。フィールド・コピアー・フィルタのこの例での目的は、親アセットの名前によりイメージ・アセットを分類することです。
ドキュメント変換フィルタ・クラス
ドキュメント変換フィルタ・クラスを定義する引数は次のとおりです。
-
Document Transformer Name:
SystemTransforms
表に一覧表示されているとおりの、登録された変換エンジンの名前。デフォルトでは、SystemTransforms
表にCS: Convert to Raw Textが一覧表示されています。このエンジンは、バイナリ・ファイルからテキスト・フォーマットへの変換を開始する場合に使用されます。ノート:
WebCenter Sitesでは、次のドキュメント・トランスフォーマを使用できます。
com.fatwire.transformer.tika.DocumentTransformerImpl
ドキュメント・トランスフォーマは、CS: Convert to Raw Textエンジンによって起動されたときに、ドキュメントを未加工のテキスト・ファイルに変換するようにコーディングされています。他のファイル・タイプに変換するには、そのファイル・タイプ用にドキュメント・トランスフォーマを作成して、(登録されていないかぎりは)対応する変換エンジンを登録し、そのドキュメント・トランスフォーマをWebCenter Sitesに登録する必要があります。デフォルトの実装およびドキュメント変換ソリューションの詳細は、「ドキュメント変換フレックス・フィルタ」を参照してください。
-
Input Attribute Name: フレックス・フィルタによって内容が変換されるフレックス属性の名前。ドキュメント変換フィルタについては、入力属性は
blob
タイプである必要があります。これは、ドキュメント変換フィルタがこの属性のファイルを検索するためです。 -
Fail on Transform Error: 変換が正常終了しなかった場合に、エラー・メッセージが表示されるようにするかどうかを選択します。
-
Output Attribute Name: ドキュメント変換の結果を格納するフレックス属性の名前。ドキュメント変換フィルタについては、出力属性は
blob
タイプである必要があります。これは、変換結果がファイルとして格納されるためです。出力属性(フィールド)に格納されるデータは、入力属性のデータに由来するため、読取り専用です。このデータは、アセットが保存されるたびに、入力属性のソース・データから再生成されます。
-
Output Document Extension: 結果として生成されるファイルに割り当てられるファイル拡張子。選択したDocument Transformer Nameに適したドキュメント拡張子を入力してください。たとえば、ドキュメント変換エンジンをCS: Convert to HTMLに指定した場合、ドキュメント拡張子はhtmまたはhtmlにする必要があります。
フレックス・フィルタ・アセット
フレックス・フィルタ・アセットは、次の基準のすべてで定義されます。
-
Filters
表に登録されたフレックス・フィルタ・クラス。 -
そのフィルタ・クラスに(引数を介して)渡された情報。これらの引数は、使用するデータ、フィルタのアクションに対する制約、およびアセットが保存されたときにフィルタリング・プロセスの結果を格納する場所を指定します。
フレックス・フィルタ・アセットを作成する場合、使用するフレックス・フィルタ・クラスを選択し、フィルタ・クラスのアクションに必要な引数の値を入力します。
フレックス・フィルタ・アセットを作成した後、それを適切なフレックス定義アセットに割り当てます。その後、コンテンツ・プロバイダがその定義のフレックス・アセットを保存するたびに、フィルタは割り当てられたアクションを自動的に実行します。フレックス・フィルタ・アセットの作成を参照してください。
フレックス・フィルタ・クラスの定義およびフレックス・フィルタ・アセットの作成
フレックス・アセットのタスクを処理するためには、フレックス・フィルタが必要です。また、フレックス・フィルタの機能を実装するカスタムのフレックス・フィルタ・クラスを定義すると、フレックス・フィルタが機能するようになります。
基本的なステップは次のとおりです。
-
カスタム・フレックス・フィルタ・クラス用の実装コードを提供するJavaクラスを作成します。フレックス・フィルタ・クラスの実装を参照してください。
-
新規フレックス・フィルタ・クラスを、WebCenter Sitesデータベースの
Filters
表に定義します。「カスタム・フレックス・フィルタ・クラスの定義」を参照してください。 -
カスタム・フレックス・フィルタ・クラスで定義されたフレックス・フィルタ・アセットを作成します。
-
フィルタの引数として参照される属性を作成します。
-
フレックス・フィルタ・アセットを作成し、フレックス・フィルタ・クラスに割り当てます。
-
新規フィルタ・アセットを子定義に追加します。
-
フィルタ・アセットを追加した定義に関連付けられたすべての関連アセットを再度保存します。フレックス・フィルタ・アセットの作成を参照してください。
-
次のトピックを参照してください。
フレックス・フィルタ・クラスの実装
カスタム・フレックス・フィルタを実装するには、AbstractFlexFilter
クラスを拡張することにより、そのための新規Javaクラスを作成します。このフィルタ・クラスには、フィルタ要求の処理に必要なデフォルト機能がすべて含まれています。AbstractFlexFilter
クラスを拡張し、フレックス属性にアクセスして導出属性値を設定することを目的とするカスタム・フレックス・フィルタ・クラスの実行例は、ソース・ファイルSampleFlexFilter.java
に提供されています。
フレックス・フィルタの機能は、抽象化インタフェースと呼ばれるパラメータにより実装されます。フレックス・フィルタは、フィルタリングしているアセットの特定の側面についてのみ知る必要があるため、抽象化インタフェースは、指定されたフレックス・アセットに対して機能を実行するために必要なアセット情報にのみフィルタがアクセスできるようにしています。
次の表に、フレックス・フィルタの実装に必要な抽象化インタフェース、および各抽象化インタフェースがフィルタに渡すアセット情報の一覧を示します。カスタム・フレックス・フィルタ・クラスの実装に使用される抽象化インタフェースの詳細は、Oracle WebCenter Sites Java APIリファレンスを参照してください。
表8-1 抽象化インタフェース(com.openmarket.gator.interfaces
パッケージ)
抽象化インタフェース | 説明 |
---|---|
|
フィルタをサポートしている環境についての情報を取得するための方法を提供します。 |
|
フィルタされているアセットを操作するための方法を提供します。 |
|
フィルタが実行中に変更する可能性のあるすべての導出属性を記述するための方法を提供します。 |
|
フィルタされるアセット・インスタンスに対する依存性を記録するための方法を提供します。依存性は、フィルタされるアセットとの関係を共有するタイプおよびIDにより別のアセットを参照します。依存性が宣言される場合、その依存性はexactとexistsのいずれかです。 |
ノート:
標準アセット属性は、IFilterableAssetInstance.get
メソッドにより取得できます。たとえば、標準アセット記述を取得するには、次の行を追加します。
String description = instance.get(description);
新規フレックス・フィルタ・クラスのJavaコードを作成する場合、(COM.FutureTense.Interfaces
パッケージ内の)単一のFTValList
パラメータ付きでコンストラクタを定義します。このパラメータは、Filters
データベース表に格納されているフィルタの定義から取得した引数のリストを提供します。これらの引数は、キー/値のペアの形でフィルタに渡されます。Filters
データベース表内のフィルタ・クラスに対してあらかじめ定義された引数がない場合、FTValList
はNULLとなります。
AbstractFlexFilterクラスの拡張
フレックス・フィルタ・クラスの実装を作成するために、AbstractFlexFilter
クラスを拡張できます。このクラスはcom.openmarket.gator.flexfilters
パッケージ内にあります。新規フレックス・フィルタのJavaクラスを作成する場合、theAbstractFlexFilter
クラスのJavaコードからフィルタの機能に必要なメソッドをコールできます。これにより、カスタム実装の作成に必要なコードの量が簡略化されます。
メソッドがコールされると、フィルタのアセット識別子である、引数String
filterIdentifier
が提供されます。同じフィルタを異なるフレックス・アセット・ファミリに関連付けると、フィルタ識別子に、関連付けられたファミリのフィルタ定義が反映されます。この引数は、異なるアセット・ファミリが使用するフィルタを実装している場合に便利です。フィルタは、起動された時点でどのフレックス・ファミリの関連付けが使用されているかを知ることができます。
フレックス・フィルタ・クラスの実装に使用される抽象化メソッドの詳細は、Oracle WebCenter Sites Java APIリファレンスを参照してください。
Required Abstract Methods
すべてのフレックス・フィルタ実装で必要となる抽象化メソッドは次のとおりです。
public void filterAsset(IFilterEnvironment env, String filterIdentifier, FTValList filterArguments, IFilterableAssetInstance instance) throws AssetException;
これらの行は、新規または既存のアセットが保存されるときに、アセットの後処理を実行するための主要なメソッドです。このメソッドは、編集が取り消されるとコールされません。フィルタの目的を表す作業を実行します。引数のリスト(FTValList
)が提供され、フィルタは、入力属性定義または出力属性定義(あるいはその両方)を入手でき、フィルタに対して有効な他の情報も入手できます。WebCenter Sitesインタフェース内にフィルタが作成されると、filterArguments
リストが定義されます。
public FTValList getLegalArguments(IFilterEnvironment env, String filterIdentifier) throws AssetException;
これらの行は、適切なフィルタ引数のリストを返すためにコールされるメソッドです。フィルタを選択して「引数の取得」ボタンを押した後に、WebCenter Sitesインタフェースはドロップダウン・リストを埋めるために、フィルタの作成または編集中にこのメソッドをコールします。
Optional Abstract Methods
次の抽象化メソッドは、AbstractFlexFilter
クラス内の抽象化メソッドをオーバーライドするために使用できます。AbstractFlexFilter
クラスが提供するデフォルトの実装は通常、ほとんどのフィルタで十分であるため、これらのメソッドはオプションです。
public void describeDerivedAttributes(IFilterEnvironment env, String filterIdentifier, FTValList filterArguments, String defTypeName, String parentDefTypeName, IFilterDescription descriptionObject) throws AssetException
このメソッドは、すべての可能性のある導出属性、グループ・アフィニティ、およびフィルタで設定できる推奨を記述します。フィルタが属性を出力するように計画している場合、このメソッドは変更される属性を識別する必要があります。これは、フレックス・アセットが表示されるたびに、アセットの編集を行うためにコールされます。
public void getDependencies(IFilterEnvironment env,String filterIdentifier, FTValList filterArguments, String assetTypeName, String parentTypeName, IFilterDependencies filterdeps) throws AssetException
このメソッドは、フィルタのアセット依存性を記述するためにコールされます。フィルタ依存性は、exists
とexact
のいずれかに設定されます。
public String[] getArgumentLegalValues(IFilterEnvironment env, String filterIdentifier, String argumentName) throws AssetException
このメソッドは、指定された引数の許容値のリストを返すためにコールされます。返された一覧がNULLの場合、どのような値でも許容されます。このメソッドは、フィルタ・アセットに指定された引数値を有効化するために、フィルタ・アセットが作成または編集されているときに、Adminインタフェースによってコールされます。
カスタム・フレックス・フィルタ・クラスの定義
カスタム・フレックス・フィルタ・クラスを、WebCenter SitesデータベースのFilters
表に定義します。次の手順では、フレックス・フィルタ・クラスにはCustomFilter
という名前が付けられます。
カスタム・フレックス・フィルタ・クラスを定義するには:
-
カスタム・フレックス・フィルタ・クラス用の実装コードを含む
.jar
ファイルまたはclass
ファイルを、WebCenter Sites製品のjars
を保持しているディレクトリにコピーします。ノート:
カスタム・フレックス・フィルタ・クラス用の実装コードを提供するJavaクラスの作成の詳細は、「フレックス・フィルタ・クラスの実装」を参照してください。
-
WebLogicの場合:
app-server-install-dir/bea/path-to-domain/domain-name/applications/WEB-INF/lib
-
WebSphereの場合:
WebSphere-Installation-Directory/InstalledApps/WEB-INF/lib
-
-
Oracle WebCenter Sites Explorerを開き、新規フィルタ・クラス用の行を
Filters
表に追加します。-
ツリーで、「表」ノードを展開し、Filters表を選択します。
-
「ファイル」→「新規」→「レコード」の順に選択します。
-
データベースで次の列に入力して、フィルタを定義します。
-
name
: WebCenter Sitesインタフェースに表示させるフィルタの名前を入力します。 -
description
: (オプション) フィルタ・クラスの目的についての短い要約を入力します。 -
classname
: フィルタ・クラスの実装の正確なクラス名(たとえば、com.fatwire.firstsite.filter.SampleFlexFilter
)を入力します。この名前は、WebCenter Sitesのクラスパスにロード可能である必要があります。 -
args
: (オプション) フィルタ用の入出力引数を入力します。引数のキー/値のペアは、アンパサンド(&)文字で区切られます (例:arg1=argument1&arg2=argument2
)。これらの引数は、フィルタ・コンストラクタに渡され、その使用はフィルタの開発者に任されます。ノート:
フレックス・フィルタ・クラスの入出力引数を
Filters
表に定義しない場合、それらの引数はフレックス・フィルタ・クラスのコードに定義できます。フレックス・フィルタ・クラスの実装を参照してください。
-
-
「ファイル」→「保存」の順に選択します。
新規フィルタ・エントリはこの図のようになります。
フィルタ・クラスは、フィルタ・アセットの「新規」フォームおよび「編集」フォームの「フィルタ」ドロップダウン・リスト内のオプションとして表示されます。
-
フレックス・フィルタ・アセットの作成
フィルタ・アセットの作成前に、入出力の属性として使用するフレックス属性が存在している必要があります。既存の属性の値が上書きされないようにするために、カスタム・フレックス・フィルタの引数が参照する属性を作成します。この例では、タイプstring
のMedia
属性を2つ(入力属性として使用するFSII_CustomInput
と、出力属性として使用するFSII_CustomOutput
)を作成しました。
FirstSiteIIサンプル・サイトのMedia
フレックス・ファミリに対して、FSII_CustomFlexFilter
という名前のフレックス・フィルタ・アセットを作成します。
フレックス・フィルタ・アセットを作成するには:
-
一般管理者としてAdminインタフェースにログインし、フレックス・フィルタ・アセットを作成するサイトを選択します(この例ではFirstSiteIIサンプル・サイト)。
-
フィルタの入出力引数が参照する属性を作成します(定義されていない場合)。次の要件に注意してください。
-
ドキュメント変換フィルタ・クラスを使用しているフレックス・フィルタの場合、入出力属性のタイプは
blob
である必要があります。 -
どのフレックス・フィルタでも、入力属性、出力属性、フレックス・フィルタはすべて、同一のフレックス・ファミリに属している必要があります。
-
-
関連付けられたフレックス・ファミリ(この例ではMediaフレックス・ファミリ)に対するフレックス・フィルタ・アセットを作成します。
-
スタート・メニュー項目から「新規」をクリックします。
-
アセット・タイプのリストで、作成するフィルタのタイプを選択します。この例では、New Media Filterです。
メディア・フィルタ・フォームが開きます。
-
次の各フィールドに値を入力します。
-
「名前」フィールドで、このフィルタの一意の名前を入力します(この例では
FSII_CustomFlexFilter
を使用)。 -
「説明」フィールドに、フィルタの機能を要約した短い説明を入力します。
-
「フィルタ」ドロップダウン・リストから、カスタム・フィルタに割り当てた名前と一致するフィルタ定義を選択します(この例では、CustomFilterを選択)。次に「引数の取得」をクリックします。
-
「引数」フィールドで、フレックス・フィルタ・アセットに対する入力および出力の引数を指定します。「追加」をクリックして、フィルタに引数を追加します。
-
-
「保存」をクリックします。
この図は、保存したフィルタを示しています。
-
-
新規フィルタ・アセットを追加する先の子定義を検索します(この例では、たとえば、フィルタを
Media
子定義FSII_Image
に追加します)。-
スタート・メニュー項目から「検索」をクリックします。
-
アセット・タイプのリストで、フィルタを追加する先のアセット定義のタイプを選択します(この例ではFind Media Definition)。
-
「検索」フィールドに、フィルタを追加する先の定義の名前を入力します(この例ではFSII_Image)。
-
「検索」をクリックします。
-
検索結果のリストで定義に移動して、その「編集」アイコンをクリックします(この例ではFSII_Image)。
定義の「編集」フォームが開きます。
-
-
「編集」フォームで、フィルタと入力引数を定義に追加します。
-
「属性」で、「使用可能」リスト内の入力属性を強調表示して、「選択済」リストに移動します(この例ではFSII_CustomInput)。
-
「フィルタ」で、「使用可能」リスト内のフレックス・フィルタを強調表示して、「選択済」リストに移動します(この例ではFSII_CustomFlexFilter)。
ノート:
新規フィルタを追加します。新規フィルタが依存または共有する属性を作成または変更するフィルタがほかにあれば、そのフィルタの後に追加します。
-
「保存」をクリックします。この図は、保存したフィルタを示しています。
-
-
フィルタを追加した定義に関連付けられたすべての既存アセットを検索し、再度保存します。これにより、フィルタは出力属性(FSII_CustomOutput)に、入力属性(FSII_CustomInput)からの導出値を移入できます。たとえば:
-
アプリケーション・バーで、「コントリビュータ」アイコンをクリックし、Oracle WebCenter Sites: Contributorインタフェースに切り替えます。
-
「検索」フィールドで下矢印アイコンをクリックします。「検索タイプ」メニューで、ステップ5で変更した定義に関連付けられたアセットのタイプを選択します(この例ではFind Media)。次に、虫めがねアイコンをクリックします。
「検索」タブが開き、検索結果が表示されます。
-
アセットを再度保存します。アセットのツールバーで、「保存」アイコンをクリックします。
-
アセットを調査します。アセットのツールバーで、「調査」アイコンをクリックします。
このイメージは、この項で作成したフィルタを含む、複数のフィルタを起動するフレックス・アセットの編集結果です。デフォルトでは、
Media
アセットはFSII_FieldCopier
フィルタ、FSII_ImageType
フィルタおよびFSII_ThumbnailExtractor
フィルタをコールします。この例では、Media
アセットも、入力属性(MediaCustomInput
)の値をとるFSII_CustomFlexFilter
フィルタをコールし、導出文字列値を出力属性(MediaCustomOutput
)に挿入します。
-
ドキュメント変換フレックス・フィルタ
ドキュメント変換フレックス・フィルタ用に、Oracle WebCenter Sitesにはドキュメントを未加工のテキスト・ファイルに変換するデフォルトのソリューションが用意されています。ドキュメントを別の形式に変換するフレックス・フィルタが必要になった場合は、カスタム・ソリューションを作成し、そのコンポーネントを登録してフレックス・フィルタで使用します。
ドキュメント変換フレックス・フィルタの実装に必要なコンポーネントは次のとおりです。
-
SystemTransforms
表に登録され、目的のファイル・タイプを示す名前が付けられた変換エンジン。たとえば、CS:Convert to Raw Text
のようになります。 -
ドキュメント変換(たとえば、バイナリ・ファイルを未加工のテキスト・ファイルに変換する)を行うカスタム・クラスである、ドキュメント・トランスフォーマ。ドキュメント・トランスフォーマ・クラスは、次のインタフェースを実装します。
com.fatwire.transformer.common.DocumentTransformer
-
変換エンジンのドキュメント・トランスフォーマへの関連付けに使用される
transformer-formats.xml
ファイル。WebCenter SitesのWEB-INF/classes
フォルダにあるこのファイルは、目的のファイル・タイプとドキュメント・トランスフォーマを指定します。
ドキュメント変換フレックス・フィルタが起動されると、変換エンジンはラッパーとして機能します。エンジンは(transformer-formats.xml
ファイルを使用して)ドキュメント・トランスフォーマへコールを転送し、ドキュメント・トランスフォーマがファイル変換を実行します。
次のトピックを参照してください。
デフォルトのソリューション
WebCenter Sitesは、ドキュメントを未加工のテキスト・ファイルに変換するために使用できるデフォルトのソリューションを提供しています。デフォルトのコンポーネントは次のとおりです。
-
SystemTransforms
表に登録されたCS:Convert to Raw Text
変換エンジン。 -
com.fatwire.transformer.tika.DocumentTransformerImpl
という名前のドキュメント・トランスフォーマ。CS:Convert to Raw Text
エンジンによって起動されたときに、未加工のテキスト・ファイルを出力するようにコーディングされています。 -
transformer-formats.xml
ファイル。前述で命名されたドキュメント・トランスフォーマ・クラスにCS:Convert to Raw Text
エンジンを関連付けるように構成されています。
デフォルトのソリューションを使用するには、対応するドキュメント変換フレックス・フィルタの実装が必要で、これにより、変換エンジンが、WebCenter Sitesインタフェースからドキュメント変換オプションとしてアクセスできるようになります。
カスタム・ソリューションについて
前述したデフォルトのソリューション以外のドキュメント変換のソリューションを設計するには、次のコンポーネントを作成およびカスタマイズします。
- 目的のファイル・タイプ用のドキュメント・トランスフォーマを作成して、デプロイします。
- 目的のファイル・タイプ用の変換エンジンを登録します。
- ドキュメント・トランスフォーマと目的のファイル・タイプを指定するように
transformer-formats.xml
ファイルを構成します。(このxmlファイルは、複数のドキュメント・トランスフォーマをサポートします。) - この章で記述しているように、ドキュメント変換フレックス・フィルタを実装します。
ドキュメント変換フレックス・フィルタのカスタマイズを参照してください。
デフォルトの変換エンジンの使用
WebCenter Sitesには、CS:Convert to Raw Text
変換エンジンが用意されています。これらのエンジンはすべて、デフォルトでSystemTransforms
表に登録されます。ドキュメント・トランスフォーマをHTML、HTMLフラグメントまたはXMLの出力ファイルに書き込む場合は、対応するエンジンを使用してください。
デフォルトの変換エンジンを使用するには:
- Oracle WebCenter Sites Explorerを開きます。
SystemTransforms
表を選択します。- 作成したエンジンを見つけます。エンジンのtargetフィールドの値をノートにとります。この値を、「ドキュメント・トランスフォーマの登録」に記載されている
transformer-formats.xml
ファイルの<mime-type>
に入力します。 - この変換エンジンに適した引数があれば、argsフィールドで設定します。たとえば、
exporttype=HTML
と入力します。 - 「ドキュメント・トランスフォーマの登録」に進みます。
ドキュメント変換フレックス・フィルタのカスタマイズ
WebCenter Sitesには、デフォルトのドキュメント・トランスフォーマとしてcom.fatwire.transformer.tika.DocumentTransformerImpl
が用意されており、これは、CS:Convert to Raw Text
エンジンによって起動されたときに、未加工のテキスト・ファイルを出力するようにコーディングされています。目的のファイルが未加工のテキスト以外の場合は、次のように、フレックス・フィルタがサポートするコンポーネントを作成して登録します。
ドキュメント・トランスフォーマ・フレックス・フィルタを実装する前に:
変換エンジンの登録
ドキュメント・トランスフォーマを未加工のテキスト以外の出力ファイルに書き込んだ場合は、次の手順を実行します。それ以外の場合は、次を参照してください。
変換エンジンを登録するには::
ドキュメント・トランスフォーマの登録
WEB-INF/classes
フォルダにあるtransformer-formats.xml
ファイルに登録できます。デフォルトのファイルは次のようになります。<transformer-format>
<name>Text Format</name>
<!-- name of the output format supported by this repository -->
<mime-type>text/plain</mime-type>
<file-extension>txt</file-extension>
<transformer-options>
<!-- number of possible transformers available for this transformation -->
<transformer>
<name>TIKA</name>
<properties>
<property>
<name>ClassName</name>
<!-- name of the transformer class that gets loaded by transformer factory -->
<value>com.fatwire.transformer.tika.DocumentTransformerImpl</value>
</property>
<property>
<name>InputFile_Exts</name>
<!-- allowed input file extensions..* means all file types supported by tika -->
<value>*</value>
</property>
</properties>
</transformer>
</transformer-options>
</transformer-format>
SampleFlexFilter.java
AbstractFlexFilter
クラスを拡張し、フレックス属性にアクセスして導出属性値を設定することを目的とするカスタム・フレックス・フィルタ・クラスの実行例。
/**
Copyright (c) 2010 Oracle Corporation. All Rights Reserved. Title,
ownership
rights, and intellectual property rights in and to this software remain
with
FatWire Corporation. This software is protected by international copyright
laws and treaties, and may be protected by other law. Violation of
copyright
laws may result in civil liability and criminal penalties.
*/
package com.fatwire.firstsite.filter;
.
import java.util.Enumeration;
import java.util.Set;
.
.
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
.
import COM.FutureTense.Interfaces.FTValList;
.
import com.openmarket.basic.interfaces.AssetException;
import com.openmarket.basic.interfaces.IListBasic;
import com.openmarket.gator.flexfilters.AbstractFlexFilter;
import com.openmarket.gator.interfaces.IFilterDependencies;
import com.openmarket.gator.interfaces.IFilterDescription;
import com.openmarket.gator.interfaces.IFilterEnvironment;
import com.openmarket.gator.interfaces.IFilterableAssetInstance;
.
/**
Sample Flex Filter class.
This filter class demonstrates a very simple filter application. It takes
an incoming
Flex asset attribute and creates a derived attribute from it.
The derived attribute that is generated by this filter contains the filter
identifier,
assetId/assetType of the asset being changed, and the value of the asset
itself.
It also writes an informational log entry with various characteristics of
the asset
being saved.
The intent is not to provide a useful filter but simply to demonstrate the
mechanics of building a custom filter.
*
*/
public class SampleFlexFilter extends AbstractFlexFilter {
// This defines the input and output attribute names. These values are
// overridden by the sample constructor when there is an initialization
string
// provided by the database entry for the filter. The database
initialization string
// is optional.
private static String ARG_CUSTOM[] =
{ "Input custom string" , "Output custom string" }
;
private static final Log log= LogFactory.getLog(LoggerPropDesc.LOG_NAME);
.
/**
A filter implementation is required to have a single-argument public
constructor that expects a COM.FutureTense.Interfaces.FTValList
object.
The FTValList provided to the constructor is the set of configuration
arguments that were registered in the database entry for the filter.
*
@param configurationParameters
*
This constructor will override statically defined arguments within
this
filter with values taken from the database. If nothing is defined in
the
database filter definitions then the static values will prevail.
*
*/
@SuppressWarnings("unchecked")
public SampleFlexFilter(FTValList configurationParameters) {
super(configurationParameters);
if ( configurationParameters == null || configurationParameters.size() <
1 )
{ log.info("SampleFlexFilter constructor: there are no arguments in Filters table entry"); }
else {
// Bingo! Something is coming from the database so break it down
// and replace the static variables.
Set<String> entries = configurationParameters.keySet();
ARG_CUSTOM = new String[entries.size()];
int i = 0;
for ( String key : entries )
{ String value = configurationParameters.getValString(key); log.info("SampleFlexFilter constructor : "+key+"="+value); ARG_CUSTOM[i++] = new String(key); }
}
}
.
/**
Perform the filter operation. This method is entered after an asset is
created or
modified. There is no way to reject the operation. All changes occur to
the
IFilterableAssetInstance.
*/
@Override
public void filterAsset(IFilterEnvironment env, String filterIdentifier,
FTValListfilterArguments, IFilterableAssetInstance instance)
throws AssetException {
// Get the identifier and name of the asset being saved.
String assetid = instance.getAssetID();
String assetname = instance.getName();
// Put some interesting information in the log.
log.info(filterIdentifier+" SampleFlexFilter filterAsset :"
+" FilterType="+env.getFilterType()
+", AttributeType="+env.getAttributeType()
+", AssetTypeName="+instance.getAssetTypeName()
+", GroupTypeName="+instance.getGroupTypeName()
);
// Setup the variables to generate the derived attribute.
String assetValue = "FilterId="filterIdentifier",
assetId="assetid"("assetname")";
String value = " <noInput>";
.
String inputattr = getAttrID(env, filterArguments, ARG_CUSTOM[0]);
IListBasic ilistbasic = instance.getAttribute(inputattr);
if ( inputattr != null && ilistbasic != null && ilistbasic.hasData() ) {
try {
value = " ["+ilistbasic.getValue("value")+"]";
}
catch ( NoSuchFieldException e) {
log.info("SampleFlexFilter : NoSuchFieldException");
}
}
.
// Create the derived attribute using the attribute name and the string
values
// that were initialized above.
instance.addDerivedDataValue(filterIdentifier
,
env.getAttributeIdentifier(filterArguments.getValString(ARG_CUSTOM[1]))
, assetValue+value);
}
.
/**
Describe all the potential derived attributes, parent affinities, and
recommendations the filter might set.
*
This method exists as part of the AbstractFlexFilter class and
does not need to be implemented in a custom filter unless the default
behavior
needs to be changed. The default is to describe all attributes arguments
as
eligible for being set by this filter.
*/
@Override
public void describeDerivedAttributes(IFilterEnvironment env,
String filterIdentifier, FTValList filterArguments,
String defTypeName, String parentDefTypeName,
IFilterDescription descriptionObject) throws AssetException {
String attrname =
env.getAttributeIdentifier(filterArguments.getValString(ARG_CUSTOM[1]));
if (attrname != null)
descriptionObject.addAttribute(filterIdentifier, attrname, false,
true);
}
.
/**
Describes the filter's asset dependencies. This sample implementation
uses 'exist' dependency.
*
This method exists as part of the AbstractFlexFilter class and
does not need to be implemented in a custom filter unless the default
behavior
needs to be changed.
*/
@Override
public void getDependencies(IFilterEnvironment env,
String filterIdentifier, FTValList filterArguments,
String assetTypeName, String parentTypeName,
IFilterDependencies filterdeps) throws AssetException {
.
Enumeration<?> args = getLegalArguments(env, filterIdentifier).keys();
while(args.hasMoreElements())
Unknown macro: {String currentAttrId = getAttrID(env, filterArguments, (String)args.nextElement()); if (currentAttrId != null && currentAttrId.length() > 0) { // Exists or exact filterdeps.addExistsToDeps(env.getAttributeType(), currentAttrId); } }
}
.
/**
Return a list of legal filter arguments. This method is called by the CS
Advanced UI
to display the list of valid arguments accepted by the filter.
*/
@Override
public FTValList getLegalArguments(IFilterEnvironment env,
String filterIdentifier) throws AssetException {
.
FTValList ftvallist = new FTValList();
ftvallist.setValString(ARG_CUSTOM[0], ARG_CUSTOM[0]);
ftvallist.setValString(ARG_CUSTOM[1], ARG_CUSTOM[1]);
return ftvallist;
}
.
/**
Obtain the legal values for a single filter argument. By
returning null indicates that any value is legal. Implementing this
method is optional. The default is to allow any value.
*/
@Override
public String[] getArgumentLegalValues(IFilterEnvironment env,
String filterIdentifier, String argumentName) throws AssetException {
.
String[] legalValues = null;
if ( argumentName.equalsIgnoreCase(ARG_CUSTOM[0]) ) {
legalValues = new String[3];
legalValues[0]= "FSII_CustomInput";
legalValues[1] = "CustomInput";
legalValues[2] = "InputAttribute";
}
else if ( argumentName.equalsIgnoreCase(ARG_CUSTOM[1]) ) {
legalValues = new String[1];
legalValues[0] = "FSII_CustomOutput";
}
return legalValues;
}
}