910b7561a57d9c05af4b2c2c4463bd17fbeb2b48
[idea/community.git] / java / compiler / openapi / src / com / intellij / packaging / elements / PackagingElementType.java
1 // Copyright 2000-2018 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.packaging.elements;
3
4 import com.intellij.openapi.extensions.ExtensionPointName;
5 import com.intellij.openapi.project.Project;
6 import com.intellij.packaging.artifacts.Artifact;
7 import com.intellij.packaging.ui.ArtifactEditorContext;
8 import com.intellij.packaging.ui.PackagingElementPropertiesPanel;
9 import org.jetbrains.annotations.NonNls;
10 import org.jetbrains.annotations.NotNull;
11 import org.jetbrains.annotations.Nullable;
12
13 import javax.swing.*;
14 import java.util.List;
15
16 public abstract class PackagingElementType<E extends PackagingElement<?>> {
17   public static final ExtensionPointName<PackagingElementType> EP_NAME = ExtensionPointName.create("com.intellij.packaging.elementType");
18   private final String myId;
19   private final String myPresentableName;
20
21   protected PackagingElementType(@NotNull @NonNls String id, @NotNull String presentableName) {
22     myId = id;
23     myPresentableName = presentableName;
24   }
25
26   public final String getId() {
27     return myId;
28   }
29
30   public String getPresentableName() {
31     return myPresentableName;
32   }
33
34   @Nullable
35   public Icon getCreateElementIcon() {
36     return null;
37   }
38
39   public abstract boolean canCreate(@NotNull ArtifactEditorContext context, @NotNull Artifact artifact);
40
41   @NotNull
42   public abstract List<? extends PackagingElement<?>> chooseAndCreate(@NotNull ArtifactEditorContext context, @NotNull Artifact artifact,
43                                                                       @NotNull CompositePackagingElement<?> parent);
44
45   @NotNull
46   public abstract E createEmpty(@NotNull Project project);
47
48   protected static <T extends PackagingElementType<?>> T getInstance(final Class<T> aClass) {
49     for (PackagingElementType type : EP_NAME.getExtensionList()) {
50       if (aClass.isInstance(type)) {
51         return aClass.cast(type);
52       }
53     }
54     throw new AssertionError();
55   }
56
57   @Nullable
58   public PackagingElementPropertiesPanel createElementPropertiesPanel(@NotNull E element, @NotNull ArtifactEditorContext context) {
59     return null;
60   }
61 }