2012-03-08 9 views
0

私はTreeSelectionDialog用のContentProviderを持っています。ノードの1つがチェックされている場合、ツリーのルートを選択するためにgetParentメソッドを実装する必要があります。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メソッドに記述するものの見当がつかない:これはコードです親。

ありがとうございます!

+0

'org.db.normalization.Table'が何であるかわかりませんが、それが' element'の型であれば、それは親を返すメソッドを持つべきです。そうでない場合、あなたは運がない。 –

答えて

1

ツリーの実装のほとんどのインスタンスでは、親を知っているので、親はセッターメソッドまたはコンストラクターによって設定されます。あなたは親が誰なのか分からないので、基本的にすべてのノードを取得しなければならない悪いケースを提示し、各ノードの子どもがあなたを含んでいるかどうかを確認します。

関連する問題