Add support for packaging Module Sources to Artifacts. (IDEA-110964)
[idea/community.git] / java / compiler / impl / src / com / intellij / packaging / impl / ui / ModuleElementPresentation.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.packaging.impl.ui;
17
18 import com.intellij.ide.projectView.PresentationData;
19 import com.intellij.openapi.module.ModifiableModuleModel;
20 import com.intellij.openapi.module.Module;
21 import com.intellij.openapi.module.ModulePointer;
22 import com.intellij.packaging.impl.elements.ModuleElementTypeBase;
23 import com.intellij.packaging.ui.ArtifactEditorContext;
24 import com.intellij.packaging.ui.PackagingElementWeights;
25 import com.intellij.packaging.ui.TreeNodePresentation;
26 import com.intellij.ui.SimpleTextAttributes;
27 import org.jetbrains.annotations.NotNull;
28 import org.jetbrains.annotations.Nullable;
29
30 /**
31  * @author nik
32  */
33 public class ModuleElementPresentation extends TreeNodePresentation {
34   private final ModulePointer myModulePointer;
35   private final ArtifactEditorContext myContext;
36   private final ModuleElementTypeBase myElementType;
37
38   public ModuleElementPresentation(@Nullable ModulePointer modulePointer,
39                                    @NotNull ArtifactEditorContext context,
40                                    @NotNull ModuleElementTypeBase elementType) {
41     myModulePointer = modulePointer;
42     myContext = context;
43     myElementType = elementType;
44   }
45
46   public String getPresentableName() {
47     return myModulePointer != null ? myModulePointer.getModuleName() : "<unknown>";
48   }
49
50   @Override
51   public boolean canNavigateToSource() {
52     return findModule() != null;
53   }
54
55   @Nullable
56   private Module findModule() {
57     return myModulePointer != null ? myModulePointer.getModule() : null;
58   }
59
60   @Override
61   public void navigateToSource() {
62     final Module module = findModule();
63     if (module != null) {
64       myContext.selectModule(module);
65     }
66   }
67
68   public void render(@NotNull PresentationData presentationData,
69                      SimpleTextAttributes mainAttributes,
70                      SimpleTextAttributes commentAttributes) {
71     final Module module = findModule();
72     presentationData.setIcon(myElementType.getElementIcon(module));
73
74     String moduleName;
75     if (module != null) {
76       ModifiableModuleModel moduleModel = myContext.getModifiableModuleModel();
77       if (moduleModel != null) {
78         moduleName = moduleModel.getActualName(module);
79       }
80       else {
81         moduleName = module.getName();
82       }
83     }
84     else if (myModulePointer != null) {
85       moduleName = myModulePointer.getModuleName();
86     }
87     else {
88       moduleName = "<unknown>";
89     }
90
91     String text = myElementType.getElementText(moduleName);
92     presentationData.addText(text, module != null ? mainAttributes : SimpleTextAttributes.ERROR_ATTRIBUTES);
93   }
94
95   @Override
96   public int getWeight() {
97     return PackagingElementWeights.MODULE;
98   }
99 }