Eclipse/プラグイン開発のTIPS集/org.eclipse.core.runtime.IAdaptable(cont.)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
さて、Eclipse/プラグイン開発のTIPS集/org.eclipse.core.run...
さっきのように、ContactクラスがPlatformObjectを拡張してい...
org.eclipse.core.runtime.IAdaptable インタフェース
org.eclipse.core.runtime.PlatformObject オブジェクト
org.eclipse.core.runtime.IAdapterFactory ファクトリ
を使ってViewに表示ができました。今度はModelオブジェクトが...
***モデル [#u660bd10]
モデルは先のクラス構成で、ContactがPlatformObjectを拡張し...
#ref(model.png)
***org.eclipse.core.runtime.adapters拡張ポイント [#w41962...
こたえはやはりorg.eclipse.core.runtime.adapters拡張ポイン...
<extension point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="org.eclipsercp.hyperbola.model.Conta...
class="org.eclipsercp.hyperbola.model.HyperbolaAdap...
<adapter type="org.eclipse.ui.model.IWorkbenchAdapte...
</factory>
</extension>
このように定義しておくと、Contactのインスタンスelementに...
Platform.getAdapterManager().loadAdapter
(element, IWorkbenchAdapter.class.getName());
↑adaptableType ↑<adapter type="org.eclipse.ui.m...
というメソッドがよばれたときに、
IAdapterFactory adapterFactory = new HyperbolaAdapterFa...
Platform.getAdapterManager().registerAdapters(adapterFa...
が自動的に行われます。でメソッドの返り値が
IAdapterFactory#getAdapter(element, IWorkbenchAdapter.cl...
になります。
つまりContactがPlatformObjectではないにもかかわらず、IAda...
IWorkbenchAdapter adapter=(IWorkbenchAdapter) Contact.ge...
の様なことができるわけですね。これと
IAdapterFactory adapterFactory = new HyperbolaAdapterFa...
Platform.getAdapterManager().registerAdapters(adapterFa...
IWorkbenchAdapter adapter = (IWorkbenchAdapter)adapterF...
は等価でしたね。
***ちょっとまとめ [#e297a645]
まとめると
-あるモデルがある
-あるモデルに対してgetAdapterして別のオブジェクトを取得し...
-plugin.xmlに
<extension point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="あるモデルのクラス名"
class="IAdapterFactoryの実装クラス名">
<adapter type="別のオブジェクトのクラス名"/>
</factory>
</extension>
と定義しておく
-IAdapterFactoryの実装クラスで
public Object getAdapter(Object adaptableObject, Class a...
public Class[] getAdapterList();
をoverrideする
-public Object getAdapter(Object adaptableObject, Class a...
adaptableObjectはあるモデルのクラス名
adapterTypeは別のオブジェクトのクラス名
だった場合は「別のオブジェクトのクラス」を返す、という処...
-public Class[] getAdapterList();は「別のオブジェクトのク...
となるわけです。つまり、ある一般的なクラスに対して、IAdap...
***さて、つづき [#ldaa64ed]
さて、Viewerの続きです。ContactはもはやPlatformObjectでは...
protected IWorkbenchAdapter getAdapter(Object element) {
if (!(element instanceof IAdaptable)) {
return null;
}
return (IWorkbenchAdapter) ((IAdaptable) element)
.getAdapter(IWorkbenchAdapter.class);
}
は当然nullになってしまうので、拡張クラスを作ってOverride...
public class HogeContentProvider extends BaseWorkbenchCo...
protected IWorkbenchAdapter getAdapter(Object element...
↑この引数elementはモデル要素: Contact,ContactEntr...
IWorkbenchAdapter adapter = null;
// モデルが、IAdaptableならばそのまま使う
if (element instanceof IAdaptable) {
adapter = getAdapter(element);
}
// モデルが、一般的なオブジェクトならば、さっきの...
if (element != null && adapter == null) {
adapter = (IWorkbenchAdapter) Platform.getAda...
.loadAdapter(element, IWorkbenchAdapt...
}
// この返り値adapterは、org.eclipsercp.hyperbola....
// のgetAdapter(element,IWorkbenchAdapter.class);...
return adapter;
}
}
Viewerにはこのコンテンツプロバイダをセットすることで、先...
当然、Viewでorg.eclipsercp.hyperbola.model.HyperbolaAdapt...
、、、、ここまでやって、コンテンツプロバイダやラベルプロ...
あ、当然ラベルプロバイダも書き換える必要があります。この...
***関連リンク [#c3b6a9f0]
#ls2(Eclipse/プラグイン開発のTIPS集/org.eclipse.core.runt...
----
この記事は
#vote(おもしろかった[6],そうでもない[0])
-ここに書いた情報は、まだあってるかあやしいですよ。。ごち...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
さて、Eclipse/プラグイン開発のTIPS集/org.eclipse.core.run...
さっきのように、ContactクラスがPlatformObjectを拡張してい...
org.eclipse.core.runtime.IAdaptable インタフェース
org.eclipse.core.runtime.PlatformObject オブジェクト
org.eclipse.core.runtime.IAdapterFactory ファクトリ
を使ってViewに表示ができました。今度はModelオブジェクトが...
***モデル [#u660bd10]
モデルは先のクラス構成で、ContactがPlatformObjectを拡張し...
#ref(model.png)
***org.eclipse.core.runtime.adapters拡張ポイント [#w41962...
こたえはやはりorg.eclipse.core.runtime.adapters拡張ポイン...
<extension point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="org.eclipsercp.hyperbola.model.Conta...
class="org.eclipsercp.hyperbola.model.HyperbolaAdap...
<adapter type="org.eclipse.ui.model.IWorkbenchAdapte...
</factory>
</extension>
このように定義しておくと、Contactのインスタンスelementに...
Platform.getAdapterManager().loadAdapter
(element, IWorkbenchAdapter.class.getName());
↑adaptableType ↑<adapter type="org.eclipse.ui.m...
というメソッドがよばれたときに、
IAdapterFactory adapterFactory = new HyperbolaAdapterFa...
Platform.getAdapterManager().registerAdapters(adapterFa...
が自動的に行われます。でメソッドの返り値が
IAdapterFactory#getAdapter(element, IWorkbenchAdapter.cl...
になります。
つまりContactがPlatformObjectではないにもかかわらず、IAda...
IWorkbenchAdapter adapter=(IWorkbenchAdapter) Contact.ge...
の様なことができるわけですね。これと
IAdapterFactory adapterFactory = new HyperbolaAdapterFa...
Platform.getAdapterManager().registerAdapters(adapterFa...
IWorkbenchAdapter adapter = (IWorkbenchAdapter)adapterF...
は等価でしたね。
***ちょっとまとめ [#e297a645]
まとめると
-あるモデルがある
-あるモデルに対してgetAdapterして別のオブジェクトを取得し...
-plugin.xmlに
<extension point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="あるモデルのクラス名"
class="IAdapterFactoryの実装クラス名">
<adapter type="別のオブジェクトのクラス名"/>
</factory>
</extension>
と定義しておく
-IAdapterFactoryの実装クラスで
public Object getAdapter(Object adaptableObject, Class a...
public Class[] getAdapterList();
をoverrideする
-public Object getAdapter(Object adaptableObject, Class a...
adaptableObjectはあるモデルのクラス名
adapterTypeは別のオブジェクトのクラス名
だった場合は「別のオブジェクトのクラス」を返す、という処...
-public Class[] getAdapterList();は「別のオブジェクトのク...
となるわけです。つまり、ある一般的なクラスに対して、IAdap...
***さて、つづき [#ldaa64ed]
さて、Viewerの続きです。ContactはもはやPlatformObjectでは...
protected IWorkbenchAdapter getAdapter(Object element) {
if (!(element instanceof IAdaptable)) {
return null;
}
return (IWorkbenchAdapter) ((IAdaptable) element)
.getAdapter(IWorkbenchAdapter.class);
}
は当然nullになってしまうので、拡張クラスを作ってOverride...
public class HogeContentProvider extends BaseWorkbenchCo...
protected IWorkbenchAdapter getAdapter(Object element...
↑この引数elementはモデル要素: Contact,ContactEntr...
IWorkbenchAdapter adapter = null;
// モデルが、IAdaptableならばそのまま使う
if (element instanceof IAdaptable) {
adapter = getAdapter(element);
}
// モデルが、一般的なオブジェクトならば、さっきの...
if (element != null && adapter == null) {
adapter = (IWorkbenchAdapter) Platform.getAda...
.loadAdapter(element, IWorkbenchAdapt...
}
// この返り値adapterは、org.eclipsercp.hyperbola....
// のgetAdapter(element,IWorkbenchAdapter.class);...
return adapter;
}
}
Viewerにはこのコンテンツプロバイダをセットすることで、先...
当然、Viewでorg.eclipsercp.hyperbola.model.HyperbolaAdapt...
、、、、ここまでやって、コンテンツプロバイダやラベルプロ...
あ、当然ラベルプロバイダも書き換える必要があります。この...
***関連リンク [#c3b6a9f0]
#ls2(Eclipse/プラグイン開発のTIPS集/org.eclipse.core.runt...
----
この記事は
#vote(おもしろかった[6],そうでもない[0])
-ここに書いた情報は、まだあってるかあやしいですよ。。ごち...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: