6b65f5a31474ef21c24ef0e611288ed890ba28f0
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / artifacts / sourceItems / LibrarySourceItem.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 package com.intellij.openapi.roots.ui.configuration.artifacts.sourceItems;
17
18 import com.intellij.ide.presentation.VirtualFilePresentation;
19 import com.intellij.ide.projectView.PresentationData;
20 import com.intellij.openapi.roots.OrderRootType;
21 import com.intellij.openapi.roots.impl.libraries.LibraryEx;
22 import com.intellij.openapi.roots.libraries.Library;
23 import com.intellij.openapi.roots.libraries.LibraryUtil;
24 import com.intellij.openapi.vfs.VirtualFile;
25 import com.intellij.packaging.elements.PackagingElement;
26 import com.intellij.packaging.elements.PackagingElementFactory;
27 import com.intellij.packaging.elements.PackagingElementOutputKind;
28 import com.intellij.packaging.impl.elements.LibraryPackagingElement;
29 import com.intellij.packaging.impl.ui.LibraryElementPresentation;
30 import com.intellij.packaging.ui.ArtifactEditorContext;
31 import com.intellij.packaging.ui.PackagingSourceItem;
32 import com.intellij.packaging.ui.SourceItemPresentation;
33 import com.intellij.packaging.ui.SourceItemWeights;
34 import com.intellij.ui.SimpleTextAttributes;
35 import com.intellij.util.PlatformIcons;
36 import org.jetbrains.annotations.NotNull;
37
38 import java.util.List;
39
40 public class LibrarySourceItem extends PackagingSourceItem {
41   private final Library myLibrary;
42
43   public LibrarySourceItem(@NotNull Library library) {
44     myLibrary = library;
45   }
46
47   @NotNull
48   @Override
49   public SourceItemPresentation createPresentation(@NotNull ArtifactEditorContext context) {
50     return new LibrarySourceItemPresentation(myLibrary, context);
51   }
52
53   public boolean equals(Object obj) {
54     return obj instanceof LibrarySourceItem && myLibrary.equals(((LibrarySourceItem)obj).myLibrary);
55   }
56
57   public int hashCode() {
58     return myLibrary.hashCode();
59   }
60
61   @NotNull 
62   public Library getLibrary() {
63     return myLibrary;
64   }
65
66   @NotNull
67   @Override
68   public PackagingElementOutputKind getKindOfProducedElements() {
69     return LibraryPackagingElement.getKindForLibrary(myLibrary);
70   }
71
72   @Override
73   @NotNull
74   public List<? extends PackagingElement<?>> createElements(@NotNull ArtifactEditorContext context) {
75     return PackagingElementFactory.getInstance().createLibraryElements(myLibrary);
76   }
77
78   private static class LibrarySourceItemPresentation extends SourceItemPresentation {
79     private final Library myLibrary;
80     private final ArtifactEditorContext myContext;
81
82     LibrarySourceItemPresentation(Library library, ArtifactEditorContext context) {
83       myLibrary = library;
84       myContext = context;
85     }
86
87     @Override
88     public boolean canNavigateToSource() {
89       return myLibrary != null;
90     }
91
92     @Override
93     public void navigateToSource() {
94       myContext.selectLibrary(myLibrary);
95     }
96
97     @Override
98     public String getPresentableName() {
99       return LibraryUtil.getPresentableName(myLibrary);
100     }
101
102     @Override
103     public void render(@NotNull PresentationData presentationData, SimpleTextAttributes mainAttributes,
104                        SimpleTextAttributes commentAttributes) {
105       final String name = myLibrary.getName();
106       if (name != null) {
107         presentationData.setIcon(PlatformIcons.LIBRARY_ICON);
108         presentationData.addText(name, mainAttributes);
109         presentationData.addText(LibraryElementPresentation.getLibraryTableComment(myLibrary), commentAttributes);
110       }
111       else {
112         if (((LibraryEx)myLibrary).isDisposed()) {
113           //todo[nik] disposed library should not be shown in the tree
114           presentationData.addText("Invalid Library", SimpleTextAttributes.ERROR_ATTRIBUTES);
115           return;
116         }
117         final VirtualFile[] files = myLibrary.getFiles(OrderRootType.CLASSES);
118         if (files.length > 0) {
119           final VirtualFile file = files[0];
120           presentationData.setIcon(VirtualFilePresentation.getIcon(file));
121           presentationData.addText(file.getName(), mainAttributes);
122         }
123         else {
124           presentationData.addText("Empty Library", SimpleTextAttributes.ERROR_ATTRIBUTES);
125         }
126       }
127     }
128
129     @Override
130     public int getWeight() {
131       return SourceItemWeights.LIBRARY_WEIGHT;
132     }
133   }
134 }