98b94d576cd25b9b37a0ad95ae55c446b741d38d
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / artifacts / sourceItems / ArtifactsSourceItemsProvider.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.roots.ui.configuration.artifacts.sourceItems;
3
4 import com.intellij.icons.AllIcons;
5 import com.intellij.ide.projectView.PresentationData;
6 import com.intellij.packaging.artifacts.Artifact;
7 import com.intellij.packaging.elements.PackagingElement;
8 import com.intellij.packaging.impl.elements.ArtifactElementType;
9 import com.intellij.packaging.ui.*;
10 import com.intellij.ui.SimpleTextAttributes;
11 import org.jetbrains.annotations.NotNull;
12 import org.jetbrains.annotations.Nullable;
13
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.Collections;
17 import java.util.List;
18
19 public class ArtifactsSourceItemsProvider extends PackagingSourceItemsProvider {
20   @Override
21   @NotNull
22   public Collection<? extends PackagingSourceItem> getSourceItems(@NotNull ArtifactEditorContext editorContext,
23                                                                   @NotNull Artifact artifact,
24                                                                   @Nullable PackagingSourceItem parent) {
25     if (parent == null) {
26       if (!ArtifactElementType.getAvailableArtifacts(editorContext, artifact, true).isEmpty()) {
27         return Collections.singletonList(new ArtifactsGroupSourceItem());
28       }
29     }
30     else if (parent instanceof ArtifactsGroupSourceItem) {
31       List<PackagingSourceItem> items = new ArrayList<>();
32       for (Artifact another : ArtifactElementType.getAvailableArtifacts(editorContext, artifact, true)) {
33         items.add(new ArtifactSourceItem(another));
34       }
35       return items;
36     }
37     return Collections.emptyList();
38   }
39
40   private static final class ArtifactsGroupSourceItem extends PackagingSourceItem {
41     private ArtifactsGroupSourceItem() {
42       super(false);
43     }
44
45     public boolean equals(Object obj) {
46       return obj instanceof ArtifactsGroupSourceItem;
47     }
48
49     public int hashCode() {
50       return 0;
51     }
52
53     @NotNull
54     @Override
55     public SourceItemPresentation createPresentation(@NotNull ArtifactEditorContext context) {
56       return new ArtifactsGroupPresentation();
57     }
58
59     @Override
60     @NotNull
61     public List<? extends PackagingElement<?>> createElements(@NotNull ArtifactEditorContext context) {
62       return Collections.emptyList();
63     }
64
65     private static class ArtifactsGroupPresentation extends SourceItemPresentation {
66       @Override
67       public String getPresentableName() {
68         return "Artifacts";
69       }
70
71       @Override
72       public void render(@NotNull PresentationData presentationData, SimpleTextAttributes mainAttributes,
73                          SimpleTextAttributes commentAttributes) {
74         presentationData.setIcon(AllIcons.Nodes.Artifact);
75         presentationData.addText("Artifacts", mainAttributes);
76       }
77
78       @Override
79       public int getWeight() {
80         return SourceItemWeights.ARTIFACTS_GROUP_WEIGHT;
81       }
82     }
83   }
84 }