TreeViewModelのgetNodeInfo関数では、selectionModelを各レベルの新しいDefaultNodeInfoインスタンスに渡す必要があります。
return new DefaultNodeInfo<MyDTO>(dataProvider,new MyDTOCell(),selectionModel,null);
次に、SelectionChangeEventHandlerで次のようなことを行います。
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
Object object = selectionModel.getSelectedObject();
if (object instanceof MyRootDTO)
{
// DO SOMETHING with root level selected node
}
else if (object instanceof MySecondLevelDTO) {
// DO SOMETHING WITH 2. level selected node
}
// additional levels
});
更新:
入力の問題を回避するために、すべてのDTOによって拡張される抽象基本クラスを定義できます。
public abstract class BaseModel {
public static final ProvidesKey<BaseModel> KEY_PROVIDER = new ProvidesKey<BaseModel>() {
public Object getKey(BaseModel item) {
return item == null ? null : item.getId();
}
};
public abstract Object getId();
}
DTOで、BaseModelを拡張し、抽象getId()メソッドを実装します。
public class MyDTO extends BaseModel {
@Override
public Object getId() {
//return unique ID (i.e. MyDTO_1)
}
}