58fb2cb788c4a05321ca7c9dcfdab51bba9895c0
[idea/community.git] / platform / lang-impl / src / com / intellij / platform / PlatformProjectViewStructureProvider.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package com.intellij.platform;
18
19 import com.intellij.ide.projectView.TreeStructureProvider;
20 import com.intellij.ide.projectView.ViewSettings;
21 import com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode;
22 import com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode;
23 import com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode;
24 import com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode;
25 import com.intellij.ide.util.treeView.AbstractTreeNode;
26 import com.intellij.openapi.project.DumbAware;
27 import com.intellij.openapi.project.Project;
28 import com.intellij.openapi.vfs.VirtualFile;
29 import com.intellij.psi.PsiDirectory;
30
31 import java.util.ArrayList;
32 import java.util.Collection;
33 import java.util.List;
34
35 /**
36  * @author yole
37  */
38 public class PlatformProjectViewStructureProvider implements TreeStructureProvider, DumbAware {
39   private final Project myProject;
40
41   public PlatformProjectViewStructureProvider(Project project) {
42     myProject = project;
43   }
44
45   public Collection<AbstractTreeNode> modify(final AbstractTreeNode parent, final Collection<AbstractTreeNode> children, final ViewSettings settings) {
46     if (parent instanceof ProjectViewProjectNode) {
47       int foundModules = 0;
48       List<AbstractTreeNode> allChildren = new ArrayList<AbstractTreeNode>();
49       for(AbstractTreeNode child: children) {
50         if (child instanceof ProjectViewModuleNode) {
51           foundModules++;
52           allChildren.addAll(child.getChildren());
53         }
54         else if (child instanceof ExternalLibrariesNode) {
55           allChildren.add(child);
56         }
57       }
58       if (foundModules == 1) {
59         return allChildren;
60       }
61     }
62     else if (parent instanceof PsiDirectoryNode) {
63       final VirtualFile vFile = ((PsiDirectoryNode)parent).getVirtualFile();
64       if (vFile != null && vFile.equals(myProject.getBaseDir())) {
65         final Collection<AbstractTreeNode> moduleChildren = ((PsiDirectoryNode) parent).getChildren();
66         Collection<AbstractTreeNode> result = new ArrayList<AbstractTreeNode>();
67         for (AbstractTreeNode moduleChild : moduleChildren) {
68           if (moduleChild instanceof PsiDirectoryNode) {
69             final PsiDirectory value = ((PsiDirectoryNode)moduleChild).getValue();
70             if (value.getName().equals(".idea")) {
71               continue;
72             }
73           }
74           result.add(moduleChild);
75         }
76         return result;
77       }
78     }
79     return children;
80   }
81
82   public Object getData(final Collection<AbstractTreeNode> selected, final String dataName) {
83     return null;
84   }
85 }