Как реализовать метод getParent для ContentProvider - PullRequest
0 голосов
/ 08 марта 2012

У меня есть ContentProvider для TreeSelectionDialog. Мне нужно реализовать метод 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 Ответ

1 голос
/ 08 марта 2012

В большинстве случаев реализации дерева вы знаете своего родителя, поэтому родители устанавливаются либо методом setter, либо конструктором.Вы понятия не имеете, кто является родителем, поэтому вы представляете наихудший случай, когда вам, как правило, нужно получить все узлы, и проверить, что дети каждого узла содержат вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...