iCectionFilters와의 IADAPBE에 대해 혼란스러워합니다
-
20-09-2019 - |
문제
나는 iAdaptable 및 관련 클래스에 대해 혼동합니다. 어댑터, 어댑터, 적응 가능한 유형은 어느 클래스입니까?
문맥
테이블/트리 뷰어 항목에 대한 컨텍스트 메뉴가 있습니다. 컨텍스트 메뉴의 특정 동작은 뷰어의 각 객체의 상태에 따라 보이지 않아야합니다 (즉, 테이블 뷰어의 행의 속성 값).
Plugin.xml에서 다음과 같은 구성으로이를 달성 할 수 있습니다.
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
adaptable="false"
id="<some_id>"
objectClass="<object_class_of_viewer_entry>">
<visibility>
<objectState name="buildable" value="true"/>
</visibility>
<action
class="<my_action_class>"
그러나 객체 클래스가 org.eclipse.ui.iactionFilter를 구현하는 경우에만 작동합니다.
문제
내 객체 클래스는 IACtionFilter를 구현할 수 없으며 인터페이스를 변경하고 싶지 않습니다. 따라서, 나는 iadaptable 메커니즘을 사용하여 그것을 해결해야합니다.
Eclipse 문서를 읽으면 모든 것이 용어 (어댑터, 어댑터, 적응 가능한 유형)에 당황했으며 여전히 내 문제를 해결하는 방법에 대해 혼란스러워했습니다.
객체 클래스 (위 구성에서 언급)는 손대지 않아야합니다.
내 접근 방식은 다음과 같습니다.
<extension
point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="<object_class_of_viewer_entry>"
class="MyFactory">
<adapter
type="org.eclipse.ui.IActionFilter">
</adapter>
</factory>
</extension>
myfactory는 다음과 같습니다.
public class MyFactory implements IAdapterFactory {
private static final Class[] types = {
<object_class_of_viewer_entry>.class,
};
@Override
public Object getAdapter(Object adaptableObject, Class adapterType) {
return new <class_that_implements_IActionFilter>((<object_class_of_viewer_entry>) adaptableObject);
}
@Override
public Class[] getAdapterList() {
return types;
}
}
이것에 대해 무엇이 잘못 되었습니까? 내가 어디서 뭔가를 놓쳤습니까?
해결책
거의 모든 것이 정확했습니다. Plugin.xml에서 객체 _class_of_viewer_entry의 인터페이스와 구현을 간단히 혼합했습니다.
도움이 된 두 기사 : http://www.eclipsezone.com/articles/what-is-iadaptable/ 그리고 http://wiki.eclipse.org/faq_how_how_do_i_use_iadaptable_and_iadapterfactory%3f