如何实现ContentProvider的getParent方法

时间:2012-03-08 18:27:15

标签: java eclipse eclipse-plugin

我有一个TreeSelectionDialog的ContentProvider。我需要实现getParent方法,以便在选中其中一个节点时选择树的根。这是代码:

@SuppressWarnings("unchecked")
protected Node<T> getAdapter(Object element) {
    if(element instanceof Tree)
        return ((Tree<T>)element).getRootElement();
    else
        return (Node<T>)element;
}

@Override
public void dispose() {
    // TODO Auto-generated method stub

}

@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    // TODO Auto-generated method stub

}

@Override
public Object[] getElements(Object inputElement) {
    return getChildren(inputElement);
}

@Override
public Object[] getChildren(Object parentElement) {

    if(parentElement instanceof org.db.normalization.Table) {
        if(((org.db.normalization.Table)parentElement).getStatus() == Status.DELETED)
            return new Object[0];
        List<org.db.normalization.Attribute> atts =  new  ArrayList<org.db.normalization.Attribute>();

        for(Attribute a:((org.db.normalization.Table)parentElement).getAttributes().getAttributes())
            if(a.getStatus() != Status.UNMODIFIED)
                atts.add(a);


        for(Attribute a:((org.db.normalization.Table)parentElement).getPrimaryKey().getAttributes())
            if(a.getStatus() != Status.UNMODIFIED)
                atts.add(a);

        return atts.toArray();
    } else if (parentElement instanceof org.db.normalization.Attribute) { 
        return new Object[0];
    } else {
        @SuppressWarnings("unchecked")
        List<org.db.normalization.Table> n = (ArrayList<org.db.normalization.Table>)parentElement;
        if (n.size() > 0)  {

            return n.toArray() ;
        }
    }
    return new Object[0];
}

@Override
public Object getParent(Object element) {
    // TODO Auto-generated method stub

    return null;
}

@Override
public boolean hasChildren(Object element) {
    // TODO Auto-generated method stub
    return getChildren(element).length > 0;
}

我真的不知道在getParent方法中要写什么,因为除了作为参数接收的元素之外我没有其他信息,而且仅此元素不知道它的父元素。

谢谢!

1 个答案:

答案 0 :(得分:1)

树实现的大多数实例,您确实知道您的父实例,因此父项可以通过setter方法或构造函数设置。您不知道父母是谁,所以您提出了更糟糕的情况,您基本上必须获取所有节点,并检查每个节点的子节点是否包含您。