2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com
.intellij
.ide
.util
.treeView
;
19 import com
.intellij
.ide
.projectView
.TreeStructureProvider
;
20 import com
.intellij
.ide
.projectView
.ViewSettings
;
21 import com
.intellij
.openapi
.diagnostic
.Logger
;
22 import com
.intellij
.openapi
.project
.Project
;
23 import com
.intellij
.openapi
.project
.DumbService
;
24 import com
.intellij
.util
.ArrayUtil
;
25 import org
.jetbrains
.annotations
.NotNull
;
26 import org
.jetbrains
.annotations
.Nullable
;
28 import java
.util
.ArrayList
;
29 import java
.util
.Collection
;
30 import java
.util
.List
;
32 public abstract class AbstractTreeStructureBase
extends AbstractTreeStructure
{
33 protected final Project myProject
;
35 private static final Logger LOG
= Logger
.getInstance("#com.intellij.ide.util.treeView.AbstractTreeStructureBase");
38 protected AbstractTreeStructureBase(Project project
) {
42 public Object
[] getChildElements(Object element
) {
43 LOG
.assertTrue(element
instanceof AbstractTreeNode
, element
.getClass().getName());
44 AbstractTreeNode
<?
> treeNode
= (AbstractTreeNode
)element
;
45 Collection
<?
extends AbstractTreeNode
> elements
= treeNode
.getChildren();
46 List
<TreeStructureProvider
> providers
= getProvidersDumbAware();
47 if (providers
!= null && !providers
.isEmpty()) {
48 for (TreeStructureProvider provider
: providers
) {
49 elements
= provider
.modify(treeNode
, (Collection
<AbstractTreeNode
>)elements
, ViewSettings
.DEFAULT
);
52 for (AbstractTreeNode node
: elements
) {
53 node
.setParent(treeNode
);
56 return ArrayUtil
.toObjectArray(elements
);
59 public Object
getParentElement(Object element
) {
60 if (element
instanceof AbstractTreeNode
){
61 return ((AbstractTreeNode
)element
).getParent();
67 public NodeDescriptor
createDescriptor(final Object element
, final NodeDescriptor parentDescriptor
) {
68 return (NodeDescriptor
)element
;
72 public abstract List
<TreeStructureProvider
> getProviders();
74 public Object
getDataFromProviders(final List
<AbstractTreeNode
> selectedNodes
, final String dataId
) {
75 final List
<TreeStructureProvider
> providers
= getProvidersDumbAware();
76 if (providers
!= null) {
77 for (TreeStructureProvider treeStructureProvider
: providers
) {
78 final Object fromProvider
= treeStructureProvider
.getData(selectedNodes
, dataId
);
79 if (fromProvider
!= null) {
87 private List
<TreeStructureProvider
> getProvidersDumbAware() {
88 if (myProject
== null) {
89 return new ArrayList
<TreeStructureProvider
>();
92 final List
<TreeStructureProvider
> providers
= getProviders();
93 if (providers
== null) {
97 return DumbService
.getInstance(myProject
).filterByDumbAwareness(providers
);