1 package com
.intellij
.ide
.util
.treeView
;
3 import com
.intellij
.ide
.projectView
.TreeStructureProvider
;
4 import com
.intellij
.ide
.projectView
.ViewSettings
;
5 import com
.intellij
.openapi
.diagnostic
.Logger
;
6 import com
.intellij
.openapi
.project
.Project
;
7 import com
.intellij
.openapi
.project
.DumbService
;
8 import com
.intellij
.util
.ArrayUtil
;
9 import org
.jetbrains
.annotations
.NotNull
;
10 import org
.jetbrains
.annotations
.Nullable
;
12 import java
.util
.ArrayList
;
13 import java
.util
.Collection
;
14 import java
.util
.List
;
16 public abstract class AbstractTreeStructureBase
extends AbstractTreeStructure
{
17 protected final Project myProject
;
19 private static final Logger LOG
= Logger
.getInstance("#com.intellij.ide.util.treeView.AbstractTreeStructureBase");
22 protected AbstractTreeStructureBase(Project project
) {
26 public Object
[] getChildElements(Object element
) {
27 LOG
.assertTrue(element
instanceof AbstractTreeNode
, element
.getClass().getName());
28 AbstractTreeNode
<?
> treeNode
= (AbstractTreeNode
)element
;
29 Collection
<?
extends AbstractTreeNode
> elements
= treeNode
.getChildren();
30 List
<TreeStructureProvider
> providers
= getProvidersDumbAware();
31 if (providers
!= null && !providers
.isEmpty()) {
32 for (TreeStructureProvider provider
: providers
) {
33 elements
= provider
.modify(treeNode
, (Collection
<AbstractTreeNode
>)elements
, ViewSettings
.DEFAULT
);
36 for (AbstractTreeNode node
: elements
) {
37 node
.setParent(treeNode
);
40 return ArrayUtil
.toObjectArray(elements
);
43 public Object
getParentElement(Object element
) {
44 if (element
instanceof AbstractTreeNode
){
45 return ((AbstractTreeNode
)element
).getParent();
51 public NodeDescriptor
createDescriptor(final Object element
, final NodeDescriptor parentDescriptor
) {
52 return (NodeDescriptor
)element
;
56 public abstract List
<TreeStructureProvider
> getProviders();
58 public Object
getDataFromProviders(final List
<AbstractTreeNode
> selectedNodes
, final String dataId
) {
59 final List
<TreeStructureProvider
> providers
= getProvidersDumbAware();
60 if (providers
!= null) {
61 for (TreeStructureProvider treeStructureProvider
: providers
) {
62 final Object fromProvider
= treeStructureProvider
.getData(selectedNodes
, dataId
);
63 if (fromProvider
!= null) {
71 private List
<TreeStructureProvider
> getProvidersDumbAware() {
72 if (myProject
== null) {
73 return new ArrayList
<TreeStructureProvider
>();
76 return DumbService
.getInstance(myProject
).filterByDumbAwareness(getProviders());