dae6f817cd7a88ae414eebf9b1262c2ade2b7977
[idea/community.git] / platform / lang-api / src / com / intellij / ide / util / frameworkSupport / FrameworkSupportProvider.java
1 // Copyright 2000-2019 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
3 package com.intellij.ide.util.frameworkSupport;
4
5 import com.intellij.ide.util.projectWizard.ModuleBuilder;
6 import com.intellij.openapi.extensions.ExtensionPointName;
7 import com.intellij.openapi.module.Module;
8 import com.intellij.openapi.module.ModuleType;
9 import com.intellij.openapi.roots.ui.configuration.FacetsProvider;
10 import com.intellij.util.ArrayUtilRt;
11 import org.jetbrains.annotations.NonNls;
12 import org.jetbrains.annotations.NotNull;
13 import org.jetbrains.annotations.Nullable;
14
15 import javax.swing.*;
16
17 /**
18  * Extend {@link FrameworkSupportProviderBase} for general and {@link com.intellij.facet.ui.FacetBasedFrameworkSupportProvider} for
19  * {@link com.intellij.facet.Facet}-based framework support in your plugin.
20  */
21 public abstract class FrameworkSupportProvider {
22   public static final ExtensionPointName<FrameworkSupportProvider> EXTENSION_POINT = ExtensionPointName.create("com.intellij.frameworkSupport");
23   private final String myId;
24   private final String myTitle;
25
26   protected FrameworkSupportProvider(@NotNull @NonNls final String id, @NotNull final String title) {
27     myId = id;
28     myTitle = title;
29   }
30
31   /**
32    * Creates configurable for user settings (e.g. choosing version, features, ...).
33    *
34    * @param model Model.
35    * @return Configurable.
36    */
37   @NotNull
38   public abstract FrameworkSupportConfigurable createConfigurable(@NotNull FrameworkSupportModel model);
39
40   @NonNls
41   @Nullable
42   public String getUnderlyingFrameworkId() {
43     return null;
44   }
45
46   @NonNls
47   public String[] getPrecedingFrameworkProviderIds() {
48     return ArrayUtilRt.EMPTY_STRING_ARRAY;
49   }
50
51   public String getTitle() {
52     return myTitle;
53   }
54
55   @Nullable @NonNls
56   public String getGroupId() {
57     return null;
58   }
59
60   public String @NotNull [] getProjectCategories() {
61     return getGroupId() == null ? ArrayUtilRt.EMPTY_STRING_ARRAY : new String[] { getGroupId() };
62   }
63
64   public FrameworkRole[] getRoles() {
65     return getGroupId() == null ? FrameworkRole.UNKNOWN : new FrameworkRole[] { new FrameworkRole(getGroupId()) };
66   }
67
68   @Nullable
69   public Icon getIcon() {
70     return null;
71   }
72
73   public abstract boolean isEnabledForModuleType(@NotNull ModuleType moduleType);
74
75   public boolean isEnabledForModuleBuilder(@NotNull ModuleBuilder builder) {
76     return isEnabledForModuleType(builder.getModuleType());
77   }
78
79   public boolean isSupportAlreadyAdded(@NotNull Module module) {
80     return false;
81   }
82
83   public boolean isSupportAlreadyAdded(@NotNull Module module, @NotNull FacetsProvider facetsProvider) {
84     return isSupportAlreadyAdded(module);
85   }
86
87   @NotNull @NonNls
88   public final String getId() {
89     return myId;
90   }
91 }