public abstract class UIComponentClassicTagBase extends UIComponentTagBase implements JspIdConsumer, BodyTag
UIComponentTagBase は、ビューの UIComponent インスタンスに対応する「クラシック」Jakarta Server Pages タグインターフェースを使用するすべての Jakarta Server Pages タグの基本クラスです。Faces 1.2 では、すべてのコンポーネントタグは BodyTag インスタンスであり、ページを実行してコンポーネントツリーを構築できますが、レンダリングはできません。レンダリングは、コンポーネントツリーが完全に構築された後にのみ発生します。
UIComponentTag は UIComponentClassicTagBase を継承して、Faces 1.1 式言語に準拠するプロパティのサポートを追加します。
UIComponentELTag は、UIComponentClassicTagBase クラスを継承して、式言語 API に準拠するプロパティのサポートを追加します。
デフォルトの実装では、ページ作成者の予想どおり、テンプレートテキスト、Faces 以外の Jakarta Server Pages タグ出力、Faces コンポーネントタグ出力を同じページに適切に織り交ぜることができます。
次の例の CASE マーカーは、このクラスのメソッドの説明で引用されます。
ケース 1 は、コンポーネントタグの子として、そのコンポーネントタグの最初のコンポーネントタグの子の前に発生するテンプレートテキストまたは非コンポーネントカスタムタグの出力を記述します。
ケース 2 では、2 つの兄弟コンポーネントタグ間で発生するテンプレートテキストや非コンポーネントカスタムタグの出力について説明します。
CASE 3 は、ページ内の任意のポイントで <f:verbatim> タグの子コンテンツとして発生するテンプレートテキストおよび / または非コンポーネントカスタムタグの出力について説明しています。
CASE 4 は、最後の子コンポーネントタグとそれを囲む親コンポーネントタグの終了タグの間に発生するテンプレートテキストや非コンポーネントカスタムタグの出力を記述します。
<h:panelGrid style="color:red" border="4" columns="2">
CASE 1
<h:outputText value="component 1"/>
CASE 2
<h:outputText value="component 2"/>
<f:verbatim>CASE 3</f:verbatim>
<c:out value="${pageScope.CASE4}" />
</h:panelGrid>
前述の面コンポーネントタグの配置は、以下と同じようにレンダリングされるマークアップを生成する必要があります(${pageScope.CASE4} が引用符なしで "CASE 4" と評価されると仮定)。
<table border="4" style="color:red">
<tbody>
<tr><td>CASE 1</td></tr> <tr><td>component 1</td></tr>
<tr><td>CASE 2</td> <tr><td>component 2</td></tr>
<tr><td>CASE 3</td> <td>CASE 4</td></tr>
</tbody>
</table>
| 修飾子と型 | フィールドと説明 |
|---|---|
protected BodyContent | bodyContent このタグハンドラーの bodyContent。 |
protected PageContext | pageContext 埋め込まれているページの Jakarta Server Pages PageContext。 |
protected static StringSE | UNIQUE_ID_PREFIXID のプレフィックスとして使用されます。 |
logEVAL_BODY_BUFFERED, EVAL_BODY_TAGEVAL_BODY_AGAINEVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE| コンストラクターと説明 |
|---|
UIComponentClassicTagBase() |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected void | addChild(UIComponent child) 指定された UIComponent のコンポーネント識別子を、このリクエストを処理するネストされた UIComponentTag によって作成または検索されたコンポーネント識別子のリストに追加します。 |
protected void | addFacet(StringSE name) 指定されたファセットのファセット名を、ネストされた UIComponentTag がこのリクエストを処理することによって作成または検索されたファセット名のリストに追加します。 |
protected void | addVerbatimAfterComponent(UIComponentClassicTagBase parentTag, UIComponent verbatim, UIComponent component) 親の子リスト内のコンポーネントで構成要素の兄弟として逐語的に追加します。 |
protected void | addVerbatimBeforeComponent(UIComponentClassicTagBase parentTag, UIComponent verbatim, UIComponent component) 親の子リスト内のコンポーネントで構成要素の兄弟として逐語的に追加します。 |
protected abstract UIComponent | createComponent(FacesContext context, StringSE newId)getComponentType() を呼び出して返される型の新しい子コンポーネントを作成して返します。 |
protected UIOutput | createVerbatimComponent()Application インスタンスを使用して、次の特性を持つ新しいコンポーネントを作成します。 |
protected UIComponent | createVerbatimComponentFromBodyContent() このタグインスタンスの本文コンテンツから一時的な UIOutput コンポーネントを作成するか、本文コンテンツがない、本文コンテンツが空白である、本文コンテンツがコメントである場合は null を返します。 |
int | doAfterBody() クラスの説明で CASE 4 の内容の影響を処理するために必要な処理を実行します。 |
int | doEndTag() クラスの説明で CASE 3 の内容の影響を処理するために必要な処理を実行します。 |
void | doInitBody() 身体の評価の準備をします。 |
int | doStartTag() ページ内のこのタグインスタンスに対応するビューで UIComponent インスタンスを検索(または作成)するために必要な処理を実行し、コンポーネントが作成された場合に限り、ページ作成者が期待する適切な場所でツリーに挿入します。 |
protected void | encodeBegin() 使用すべきではありません。 Jakarta Server Pages ページの実行中にエンコードは行われません。エンコーディングは、ページの実行が完了するまで延期され、エンコーディングが発生する前にツリー全体を構築できます。 |
protected void | encodeChildren() 使用すべきではありません。 Jakarta Server Pages ページの実行中にエンコードは行われません。エンコーディングは、ページの実行が完了するまで延期され、エンコーディングが発生する前にツリー全体を構築できます。 |
protected void | encodeEnd() 使用すべきではありません。 Jakarta Server Pages ページの実行中にエンコードは行われません。エンコーディングは、ページの実行が完了するまで延期され、エンコーディングが発生する前にツリー全体を構築できます。 |
protected UIComponent | findComponent(FacesContext context) このタグハンドラーインスタンスに対応する UIComponent をコンポーネントツリーから見つけて返します。 |
BodyContent | getBodyContent() |
UIComponent | getComponentInstance() このタグインスタンスに関連付けられている UIComponent インスタンスを返します。 |
boolean | getCreated() このタグの実行中に新しいコンポーネントインスタンスを動的に作成した場合は、 true を返します。 |
protected ListSE<StringSE> | getCreatedComponents() |
protected int | getDoAfterBodyValue() 呼び出されたときに doAfterBody() メソッドから返されるフラグ値を返します。 |
protected int | getDoEndValue() 呼び出されたときに doEnd() メソッドから返されるフラグ値を返します。 |
protected int | getDoStartValue() 呼び出されたときに doStart() メソッドから返されるフラグ値を返します。 |
protected FacesContext | getFacesContext() 現在のリクエストの FacesContext インスタンスを返します。 |
protected StringSE | getFacesJspId() このメソッドがこのタグの有効期間の前に( release() が呼び出される前に)呼び出された場合、以前に返された値を返します。 |
protected StringSE | getFacetName() 保存するファセット名があれば、それを返します。それ以外の場合は、null を返します(子コンポーネントになることを示します)。 |
protected StringSE | getId() ページ作成者によって割り当てられた id 値を返します。 |
protected int | getIndexOfNextChildTag() このタグの子として追加される次の子のインデックスを返します。 |
StringSE | getJspId() |
Tag | getParent() このインスタンスの親である Tag を返します。 |
static UIComponentClassicTagBase | getParentUIComponentClassicTagBase(PageContext context) |
JspWriter | getPreviousOut()BodyContent から JspWriter を取得します。 |
protected abstract boolean | hasBinding() このコンポーネントに null 以外のバインディング属性がある場合、true を返します。 |
void | release() このタグハンドラーの実行中に割り当てられたリソースを解放します。 |
void | setBodyContent(BodyContent bodyContent) このタグハンドラーの bodyContent を設定します。 |
void | setId(StringSE id) コンポーネントのコンポーネント識別子を設定します。 |
void | setJspId(StringSE id)JspIdConsumer で定義されています。 |
void | setPageContext(PageContext pageContext) このタグインスタンスを含むページの PageContext を設定します。 |
void | setParent(Tag parent) このインスタンスの親である Tag を設定します。 |
protected abstract void | setProperties(UIComponent component) このタグハンドラーインスタンスの対応するプロパティが明示的に設定されている場合、指定されたコンポーネントのプロパティと属性をオーバーライドします。 |
protected void | setupResponseWriter() 現在のレスポンスに対して ResponseWriter をセットアップします(まだ行っていない場合)。 |
getComponentType, getELContext, getRendererTypecloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEprotected static final StringSE UNIQUE_ID_PREFIX
protected BodyContent bodyContent
このタグハンドラーの bodyContent。
protected PageContext pageContext
埋め込まれているページの Jakarta Server Pages PageContext。
protected int getDoStartValue()
throws JspException 呼び出されたときに doStart() メソッドから返されるフラグ値を返します。サブクラスは、このメソッドをオーバーライドして適切な値を返す場合があります。
doStart() から返す値 JspException - doStart() に例外をスローさせる protected int getDoEndValue()
throws JspException 呼び出されたときに doEnd() メソッドから返されるフラグ値を返します。サブクラスは、このメソッドをオーバーライドして適切な値を返す場合があります。
doEnd() から返す値 JspException - doEnd() に例外をスローさせる protected void encodeBegin()
throws IOExceptionSE 対応する UIComponent の encodeBegin() メソッドにデリゲートします。このメソッドは doStartTag() から呼び出されます。通常、委譲は無条件に行われます。ただし、このメソッドは抽象化されているため、高度なタグが条件付きでこの呼び出しを実行できます。
IOExceptionSE - 入出力エラーが発生した場合 protected void encodeChildren()
throws IOExceptionSE 対応する UIComponent の encodeChildren() メソッドにデリゲートします。このメソッドは doStartTag() から呼び出されます。通常、委譲は無条件に行われます。ただし、このメソッドは抽象化されているため、高度なタグが条件付きでこの呼び出しを実行できます。
IOExceptionSE - 入出力エラーが発生した場合 protected void encodeEnd()
throws IOExceptionSE 対応する UIComponent の encodeEnd() メソッドにデリゲートします。このメソッドは doStartTag() から呼び出されます。通常、委譲は無条件に行われます。ただし、このメソッドは抽象化されているため、高度なタグが条件付きでこの呼び出しを実行できます。
IOExceptionSE - 入出力エラーが発生した場合 public void setPageContext(PageContext pageContext)
このタグインスタンスを含むページの PageContext を設定します。
Tag の setPageContext pageContext - 囲んでいる PageContextpublic Tag getParent()
このインスタンスの親である Tag を返します。
Tag の getParent TagSupport.findAncestorWithClass(javax.servlet.jsp.tagext.Tag, java.lang.Class<?>)public void setParent(Tag parent)
このインスタンスの親である Tag を設定します。
protected void setupResponseWriter()
現在のレスポンスに対して ResponseWriter をセットアップします(まだ行っていない場合)。
@deprecated。ViewHandler.renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot) は、レスポンスライターのセットアップを担当します。このメソッドは何もしなくなりました。
protected UIComponent findComponent(FacesContext context) throws JspException
このタグハンドラーインスタンスに対応する UIComponent をコンポーネントツリーから見つけて返します。そのような UIComponent がない場合は、UIComponent を作成し、最も近い外側の UIComponentTag に関連付けられている UIComponent の子またはファセットとして追加します。コンポーネントを検索または作成するプロセスは次のとおりです。
UIComponentTag インスタンスを探して親コンポーネントを見つけ、そのコンポーネントを要求します。親 UIComponentTag インスタンスがない場合、このタグはルートコンポーネントを表すため、現在の Tree から取得して返します。UIComponentTag インスタンスに facetName 属性が設定されている場合は、親 UIComponent にこの名前のファセットを要求してください。見つからない場合は作成し、新しいコンポーネントをパラメーターとして setProperties() を呼び出し、この名前で登録します。見つかった、または作成されたファセット UIComponent を返します。UIComponentTag に id 属性が設定されている場合は、その値を使用します。それ以外の場合は、このページが処理されるたびにこの UIComponent で同じであることが保証されている識別子を生成します(つまり、id 属性が設定されていないすべての UIComponentTag インスタンスの場所に基づく識別子)。UIComponent に要求します。見つからない場合は作成し、新しいコンポーネントをパラメーターとして指定して setProperties() を呼び出し、それをこの ID の子として登録します。検索または作成された子 UIComponent を返します。コンポーネントを作成するときのプロセスは次のとおりです。
UIComponentTagBase.getComponentType() を呼び出してコンポーネント型を取得する binding 属性がある場合は、それから式を作成し、その式、FacesContext、コンポーネント型を使用して Application.createComponent(java.lang.String) を呼び出します。キー "binding" を使用して式を保存します。Application.createComponent(java.lang.String) を呼び出します。setProperties() を呼び出します。context - 現在のリクエストの FacesContext。JspException - コンポーネントの検索中に予期しない状態が発生した場合 public static UIComponentClassicTagBase getParentUIComponentClassicTagBase(PageContext context)
UIComponentClassicTagBase が存在する場合、最も近くにある UIComponentClassicTagBase を見つけて返します。それ以外の場合は、null を返します。
context - 現在のページの PageContext protected int getIndexOfNextChildTag()
UIComponentTagBaseこのタグの子として追加される次の子のインデックスを返します。デフォルトの実装は、作成されたコンポーネントのリストを維持し、リストのサイズを返します。
UIComponentTagBase の getIndexOfNextChildTag protected void addChild(UIComponent child)
UIComponentTagBase 指定された UIComponent のコンポーネント識別子を、このリクエストを処理するネストされた UIComponentTag によって作成または検索されたコンポーネント識別子のリストに追加します。
UIComponentTagBase の addChild child - 識別子を追加する必要がある新しい子 protected void addFacet(StringSE name)
UIComponentTagBase 指定されたファセットのファセット名を、ネストされた UIComponentTag がこのリクエストを処理することによって作成または検索されたファセット名のリストに追加します。
UIComponentTagBase の addFacet name - 追加するファセット名 protected UIComponent createVerbatimComponentFromBodyContent()
このタグインスタンスの本文コンテンツから一時的な UIOutput コンポーネントを作成するか、本文コンテンツがない、本文コンテンツが空白である、本文コンテンツがコメントである場合は null を返します。
protected UIOutput createVerbatimComponent()
Application インスタンスを使用して、次の特性を持つ新しいコンポーネントを作成します。
componentType は javax.faces.HtmlOutputText です。
transient は true です。
escape は false です。
id は FacesContext.getViewRoot().createUniqueId() です
protected void addVerbatimBeforeComponent(UIComponentClassicTagBase parentTag, UIComponent verbatim, UIComponent component)
親の子リストのコンポーネントにコンポーネントの兄弟として逐語的に追加します。 コンポーネントの直前の位置で逐語的にリストに追加されます。
parentTag - 親タグ verbatim - コンポーネントの前に追加する逐語的 component - コンポーネントの後に追加されるコンポーネント protected void addVerbatimAfterComponent(UIComponentClassicTagBase parentTag, UIComponent verbatim, UIComponent component)
親の子リスト内のコンポーネントで構成要素の兄弟として逐語的に追加します。 コンポーネントの直後の位置で逐語的にリストに追加されます。
parentTag - 親タグ verbatim - コンポーネントの後に追加する逐語的 component - コンポーネントの前に追加されるコンポーネント public int doStartTag()
throws JspException ページ内のこのタグインスタンスに対応するビューで UIComponent インスタンスを検索(または作成)するために必要な処理を実行し、コンポーネントが作成された場合にのみ、ページ作成者が期待する適切な場所でツリーに挿入します。次に、一時的な UIOutput コンポーネントを作成し、このタグの UIComponent インスタンスの前にツリーに 配置します。この UIOutput コンポーネントの値には、クラスの説明に CASE 1 または CASE 2 でカバーされるものがすべて含まれている必要があります。
ほとんどのコンポーネントで十分であることが意図されているデフォルトの実装は、getParentUIComponentClassicTagBase(javax.servlet.jsp.PageContext) を呼び出し、結果に対して createVerbatimComponentFromBodyContent() を呼び出すことによって、この 2 次要件を実装します。次に、addVerbatimBeforeComponent(javax.faces.webapp.UIComponentClassicTagBase, javax.faces.component.UIComponent, javax.faces.component.UIComponent) を呼び出して、返されたコンポーネントをこのタグインスタンスインスタンスの実際のコンポーネントの前にツリーに 追加します。
戻る前に、コンポーネントはこのレスポンスのためにコンポーネントスタックにプッシュされ、getParentUIComponentClassicTagBase(javax.servlet.jsp.PageContext) メソッドが正しく機能できるようになります。
返されるフラグ値は、getDoStartValue() メソッドを呼び出すことによって取得されます。このメソッドは、デフォルト値が必要ない場合にタグサブクラスがオーバーライドする可能性があります。
Tag の doStartTag JspException - エラーが発生した場合 BodyTagpublic int doEndTag()
throws JspExceptionクラスの説明で CASE 3 の内容の影響を処理するために必要な処理を実行します。
ほとんどのコンポーネントで十分であることが意図されているデフォルトの実装は、このインスタンスで createVerbatimComponentFromBodyContent() を呼び出し、子リストの最後にあるこのタグのコンポーネントのコンポーネントの子として追加します。さらに、以下のハウスキーピング手順が実行されます。
UIComponentTag インスタンスによって作成された子コンポーネントのコンポーネント ID のセットを UIComponent から取得します(存在する場合)。このページ処理パス中に作成された子のリストと比較し、古いリストに存在するが新しいリストには存在しないすべての子を削除します。新しいリストをコンポーネント属性として保存して、コンポーネントの状態の一部として保存されるようにします。UIComponentTag インスタンスによって作成されたファセットのファセット名のセットを UIComponent から取得します(存在する場合)。このページ処理パス中に作成されたファセットのリストと比較し、古いリストに存在するが新しいリストには存在しないすべてのファセットを削除します。新しいリストをコンポーネント属性として保存して、コンポーネントの状態の一部として保存されるようにします。 返されるフラグ値は、getDoEndValue() メソッドを呼び出すことによって取得されます。このメソッドは、デフォルト値が必要ない場合にタグサブクラスがオーバーライドする可能性があります。
Tag の doEndTag JspException - エラーが発生した場合 protected int getDoAfterBodyValue()
throws JspException 呼び出されたときに doAfterBody() メソッドから返されるフラグ値を返します。サブクラスは、このメソッドをオーバーライドして適切な値を返す場合があります。
doAfterBody() から返す値 JspException - 値の取得中に予期しない状態が発生した場合 public void setBodyContent(BodyContent bodyContent)
このタグハンドラーに bodyContent を設定します。このメソッドは、doInitiBody() の前に、アクション呼び出しごとに最大 1 回 Jakarta Server Pages ページ実装オブジェクトによって呼び出されます。このメソッドは、doStartTag() メソッドが SKIP_BODY または EVAL_BODY_INCLUDE を返す空のタグまたは空でないタグに対しては呼び出されません。
BodyTag の setBodyContent bodyContent - このタグの新しい BodyContent BodyTag.doInitBody(), IterationTag.doAfterBody()public JspWriter getPreviousOut()
BodyContent から JspWriter を取得します。
public BodyContent getBodyContent()
public void doInitBody()
throws JspException 体の評価の準備をします。このメソッドは、setBodyContent() の後、本体が最初に評価される前に、Jakarta Server Pages ページ実装オブジェクトによって呼び出されます。このメソッドは、空のタグ、または doStartTag() メソッドが SKIP_BODY または EVAL_BODY_INCLUDE を返す空でないタグに対しては呼び出されません。
BodyTag の doInitBody JspException - エラーが発生した場合 IterationTag.doAfterBody()public int doAfterBody()
throws JspExceptionクラスの説明で CASE 4 の内容の影響を処理するために必要な処理を実行します。
getDoAfterBodyValue() から結果を返す
IterationTag の doAfterBody JspException - エラーが発生した場合 public void setId(StringSE id)
コンポーネントのコンポーネント識別子を設定します。引数が UIViewRoot.UNIQUE_ID_PREFIX で始まる場合は、IllegalArgumentException をスローします
UIComponentTagBase の setId id - 新しいコンポーネント識別子。これは UIViewRoot.UNIQUE_ID_PREFIX で始まらない場合があります。IllegalArgumentExceptionSE - 引数が非 null で、UIViewRoot.UNIQUE_ID_PREFIX で始まる場合。protected StringSE getId()
ページ作成者によって割り当てられた id 値を返します。
protected StringSE getFacesJspId()
このタグの有効期間(release() が呼び出される前)にこのメソッドが以前に呼び出された場合は、以前に返された値を返します。それ以外の場合、getJspId() が非 null を返す場合は、UNIQUE_ID_PREFIX を jspId の前に付加して、結果を返します。
public void setJspId(StringSE id)
JspIdConsumer で定義されています。このメソッドは、doStartTag() の前にコンテナーによって呼び出されます。引数はページ内で一意であることが保証されています。
IMPLEMENTATION NOTE: このメソッドは、インクルード内の場所を検出し、特定の「論理ページ」内の各インクルードに一意の ID を割り当てます。これにより、明示的な ID のないコンポーネントを持つインクルードページで ID が重複する可能性を回避できます。
JspIdConsumer の setJspId id - このタグのコンテナー生成 ID。ページ内で一意であることが保証されています。public StringSE getJspId()
protected abstract void setProperties(UIComponent component)
このタグハンドラーインスタンスの対応するプロパティが明示的に設定されている場合、指定されたコンポーネントのプロパティと属性をオーバーライドします。このメソッドは、指定された UIComponent がこのタグハンドラーインスタンスの実行中に実際に作成された場合にのみ呼び出す必要があり、この呼び出しは UIComponent がビューに追加される前に発生します。
追加のセットプロパティをサポートするタグサブクラスは、ベースクラス setProperties() メソッドが引き続き呼び出されることを確認する必要があります。追加のプロパティ foo および bar をサポートする典型的な実装は、次のようになります。
protected void setProperties(UIComponent component) {
super.setProperties(component);
if (foo != null) {
component.setAttribute("foo", foo);
}
if (bar != null) {
component.setAttribute("bar", bar);
}
}
デフォルトの実装は、次のプロパティをオーバーライドします。
rendered - このタグハンドラーインスタンスに rendered プロパティの値が指定されている場合に設定します。rendererType - getRendererType() メソッドが null 以外の値を返す場合に設定します。component - プロパティがオーバーライドされる UIComponentprotected abstract UIComponent createComponent(FacesContext context, StringSE newId) throws JspException
getComponentType() を呼び出すことによって返される型の新しい子コンポーネントを作成して返します。この UIComponentTag に NULL 以外の binding 属性がある場合、これは binding 属性用に作成された式を使用して Application.createComponent(java.lang.String) を呼び出すことによって実行され、式はコンポーネントに保管されます。それ以外の場合、Application.createComponent(java.lang.String) はコンポーネント型のみで呼び出されます。最後に、コンポーネント ID とその他のプロパティを初期化します。
context - 現在のリクエストの FacesContextnewId - コンポーネントの IDJspException - コンポーネントを作成できない場合 protected abstract boolean hasBinding()
このコンポーネントに非 null バインディング属性がある場合、true を返します。このメソッドは、binding プロパティを Faces 1.1 スタイルの式言語プロパティとして公開するサブクラスと、Jakarta Expression Language API プロパティとして公開するサブクラスを許可するために必要です。
public UIComponent getComponentInstance()
このタグインスタンスに関連付けられている UIComponent インスタンスを返します。このメソッドは、このタグ内にネストされたタグで使用するように設計されており、このタグインスタンスでの doStartTag() と doEndTag() の実行の間にのみ有用な結果を返します。
UIComponentTagBase の getComponentInstance public boolean getCreated()
このタグの実行中に新しいコンポーネントインスタンスを動的に作成した場合は、true を返します。このメソッドは、このタグ内にネストされたタグで使用するように設計されており、このタグインスタンスでの doStartTag() と doEndTag() の実行の間にのみ有用な結果を返します。
UIComponentTagBase の getCreated protected FacesContext getFacesContext()
UIComponentTagBase 現在のリクエストの FacesContext インスタンスを返します。この値は、各タグインスタンスの doStartTag() の開始から doEndTag() の終了までのみ非 null になります。
UIComponentTagBase の getFacesContext FacesContext protected StringSE getFacetName()
保存するファセット名があれば、それを返します。それ以外の場合は、null を返します(子コンポーネントになることを示します)。
Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.