simplify GTDUCollector a bit more
[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.JavaUiBundle;
6 import com.intellij.ide.projectView.PresentationData;
7 import com.intellij.packaging.artifacts.Artifact;
8 import com.intellij.packaging.elements.PackagingElement;
9 import com.intellij.packaging.impl.elements.ArtifactElementType;
10 import com.intellij.packaging.ui.*;
11 import com.intellij.ui.SimpleTextAttributes;
12 import org.jetbrains.annotations.NotNull;
13 import org.jetbrains.annotations.Nullable;
14
15 import java.util.ArrayList;
16 import java.util.Collection;
17 import java.util.Collections;
18 import java.util.List;
19
20 public class ArtifactsSourceItemsProvider extends PackagingSourceItemsProvider {
21   @Override
22   @NotNull
23   public Collection<? extends PackagingSourceItem> getSourceItems(@NotNull ArtifactEditorContext editorContext,
24                                                                   @NotNull Artifact artifact,
25                                                                   @Nullable PackagingSourceItem parent) {
26     if (parent == null) {
27       if (!ArtifactElementType.getAvailableArtifacts(editorContext, artifact, true).isEmpty()) {
28         return Collections.singletonList(new ArtifactsGroupSourceItem());
29       }
30     }
31     else if (parent instanceof ArtifactsGroupSourceItem) {
32       List<PackagingSourceItem> items = new ArrayList<>();
33       for (Artifact another : ArtifactElementType.getAvailableArtifacts(editorContext, artifact, true)) {
34         items.add(new ArtifactSourceItem(another));
35       }
36       return items;
37     }
38     return Collections.emptyList();
39   }
40
41   private static final class ArtifactsGroupSourceItem extends PackagingSourceItem {
42     private ArtifactsGroupSourceItem() {
43       super(false);
44     }
45
46     public boolean equals(Object obj) {
47       return obj instanceof ArtifactsGroupSourceItem;
48     }
49
50     public int hashCode() {
51       return 0;
52     }
53
54     @NotNull
55     @Override
56     public SourceItemPresentation createPresentation(@NotNull ArtifactEditorContext context) {
57       return new ArtifactsGroupPresentation();
58     }
59
60     @Override
61     @NotNull
62     public List<? extends PackagingElement<?>> createElements(@NotNull ArtifactEditorContext context) {
63       return Collections.emptyList();
64     }
65
66     private static class ArtifactsGroupPresentation extends SourceItemPresentation {
67       @Override
68       public String getPresentableName() {
69         return "Artifacts";
70       }
71
72       @Override
73       public void render(@NotNull PresentationData presentationData, SimpleTextAttributes mainAttributes,
74                          SimpleTextAttributes commentAttributes) {
75         presentationData.setIcon(AllIcons.Nodes.Artifact);
76         presentationData.addText(JavaUiBundle.message("display.name.artifacts"), mainAttributes);
77       }
78
79       @Override
80       public int getWeight() {
81         return SourceItemWeights.ARTIFACTS_GROUP_WEIGHT;
82       }
83     }
84   }
85 }