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.
21 package com
.intellij
.ide
.projectView
.impl
;
23 import com
.intellij
.ide
.projectView
.ViewSettings
;
24 import com
.intellij
.ide
.projectView
.impl
.nodes
.PackageElement
;
25 import com
.intellij
.ide
.projectView
.impl
.nodes
.PackageUtil
;
26 import com
.intellij
.ide
.projectView
.impl
.nodes
.ProjectViewDirectoryHelper
;
27 import com
.intellij
.ide
.util
.treeView
.TreeViewUtil
;
28 import com
.intellij
.openapi
.project
.Project
;
29 import com
.intellij
.openapi
.roots
.FileIndexUtil
;
30 import com
.intellij
.openapi
.roots
.impl
.DirectoryIndex
;
31 import com
.intellij
.openapi
.vfs
.VirtualFile
;
32 import com
.intellij
.psi
.JavaDirectoryService
;
33 import com
.intellij
.psi
.PsiDirectory
;
34 import com
.intellij
.psi
.PsiPackage
;
35 import org
.jetbrains
.annotations
.NotNull
;
36 import org
.jetbrains
.annotations
.Nullable
;
38 import java
.util
.Arrays
;
40 public class JavaProjectViewDirectoryHelper
extends ProjectViewDirectoryHelper
{
41 public JavaProjectViewDirectoryHelper(Project project
, DirectoryIndex index
) {
42 super(project
, index
);
46 public String
getLocationString(@NotNull final PsiDirectory directory
) {
47 PsiPackage aPackage
= JavaDirectoryService
.getInstance().getPackage(directory
);
48 if (ProjectRootsUtil
.isSourceRoot(directory
) && aPackage
!= null) { //package prefix
49 return aPackage
.getQualifiedName();
51 return super.getLocationString(directory
);
55 public boolean isShowFQName(final ViewSettings settings
, final Object parentValue
, final PsiDirectory value
) {
58 && !(parentValue
instanceof Project
)
59 && settings
.isFlattenPackages()
60 && (aPackage
= JavaDirectoryService
.getInstance().getPackage(value
)) != null
61 && aPackage
.getQualifiedName().length() > 0;
67 public String
getNodeName(final ViewSettings settings
, final Object parentValue
, final PsiDirectory directory
) {
68 PsiPackage aPackage
= JavaDirectoryService
.getInstance().getPackage(directory
);
70 PsiPackage parentPackage
;
71 if (!ProjectRootsUtil
.isSourceRoot(directory
) && aPackage
!= null && aPackage
.getQualifiedName().length() > 0 &&
72 parentValue
instanceof PsiDirectory
) {
74 parentPackage
= JavaDirectoryService
.getInstance().getPackage(((PsiDirectory
)parentValue
));
80 return PackageUtil
.getNodeName(settings
, aPackage
, parentPackage
, directory
.getName(), isShowFQName(settings
, parentValue
, directory
));
85 public boolean skipDirectory(final PsiDirectory directory
) {
86 return JavaDirectoryService
.getInstance().getPackage(directory
) == null;
90 public boolean showFileInLibClasses(final VirtualFile vFile
) {
91 return !FileIndexUtil
.isJavaSourceFile(getProject(), vFile
);
95 public boolean isEmptyMiddleDirectory(final PsiDirectory directory
, final boolean strictlyEmpty
) {
96 return JavaDirectoryService
.getInstance().getPackage(directory
) != null && TreeViewUtil
.isEmptyMiddlePackage(directory
, strictlyEmpty
);
100 public boolean supportsFlattenPackages() {
105 public boolean supportsHideEmptyMiddlePackages() {
110 public boolean canRepresent(final Object element
, final PsiDirectory directory
) {
111 if (super.canRepresent(element
, directory
)) return true;
112 if (element
instanceof PackageElement
) {
113 final PackageElement packageElement
= (PackageElement
)element
;
114 return Arrays
.asList(packageElement
.getPackage().getDirectories()).contains(directory
);