3ae4ef78bc0269331ace3cb01036d1de7e002ca4
[idea/community.git] / java / idea-ui / src / com / intellij / ide / util / newProjectWizard / OldFrameworkSupportProviderWrapper.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.ide.util.newProjectWizard;
3
4 import com.intellij.framework.FrameworkTypeEx;
5 import com.intellij.framework.addSupport.FrameworkSupportInModuleConfigurable;
6 import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider;
7 import com.intellij.framework.library.FrameworkLibraryVersion;
8 import com.intellij.framework.library.FrameworkLibraryVersionFilter;
9 import com.intellij.framework.library.FrameworkSupportWithLibrary;
10 import com.intellij.ide.util.frameworkSupport.*;
11 import com.intellij.ide.util.projectWizard.ModuleBuilder;
12 import com.intellij.openapi.module.Module;
13 import com.intellij.openapi.module.ModuleType;
14 import com.intellij.openapi.roots.ModifiableModelsProvider;
15 import com.intellij.openapi.roots.ModifiableRootModel;
16 import com.intellij.openapi.roots.ui.configuration.FacetsProvider;
17 import com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription;
18 import com.intellij.openapi.util.Disposer;
19 import com.intellij.ui.GuiUtils;
20 import com.intellij.util.ui.EmptyIcon;
21 import org.jetbrains.annotations.NotNull;
22
23 import javax.swing.*;
24 import java.util.List;
25
26 public class OldFrameworkSupportProviderWrapper extends FrameworkSupportInModuleProvider {
27   private final FrameworkSupportProvider myProvider;
28   private final OldFrameworkSupportProviderWrapper.FrameworkSupportProviderBasedType myType;
29
30   public OldFrameworkSupportProviderWrapper(FrameworkSupportProvider provider) {
31     myProvider = provider;
32     myType = new FrameworkSupportProviderBasedType(myProvider, this);
33   }
34
35   public FrameworkSupportProvider getProvider() {
36     return myProvider;
37   }
38
39   @NotNull
40   @Override
41   public FrameworkTypeEx getFrameworkType() {
42     return myType;
43   }
44
45   @NotNull
46   @Override
47   public FrameworkSupportInModuleConfigurable createConfigurable(@NotNull FrameworkSupportModel model) {
48     final FrameworkSupportConfigurable configurable = myProvider.createConfigurable(model);
49     return new FrameworkSupportConfigurableWrapper(configurable);
50   }
51
52   @Override
53   public boolean isEnabledForModuleType(@NotNull ModuleType moduleType) {
54     return myProvider.isEnabledForModuleType(moduleType);
55   }
56
57   @Override
58   public boolean isEnabledForModuleBuilder(@NotNull ModuleBuilder builder) {
59     return myProvider.isEnabledForModuleBuilder(builder);
60   }
61
62   @Override
63   public boolean isSupportAlreadyAdded(@NotNull Module module, @NotNull FacetsProvider facetsProvider) {
64     return myProvider.isSupportAlreadyAdded(module, facetsProvider);
65   }
66
67   @Override
68   public FrameworkRole[] getRoles() {
69     return myProvider.getRoles();
70   }
71
72   public static final class FrameworkSupportProviderBasedType extends FrameworkTypeEx {
73     private final FrameworkSupportProvider myOldProvider;
74     private final OldFrameworkSupportProviderWrapper myNewProvider;
75
76     private FrameworkSupportProviderBasedType(FrameworkSupportProvider oldProvider,
77                                               OldFrameworkSupportProviderWrapper newProvider) {
78       super(oldProvider.getId());
79       myOldProvider = oldProvider;
80       myNewProvider = newProvider;
81     }
82
83     @NotNull
84     @Override
85     public FrameworkSupportInModuleProvider createProvider() {
86       return myNewProvider;
87     }
88
89     @NotNull
90     @Override
91     public String getPresentableName() {
92       return GuiUtils.getTextWithoutMnemonicEscaping(myOldProvider.getTitle());
93     }
94
95     @Override
96     public String getUnderlyingFrameworkTypeId() {
97       return myOldProvider.getUnderlyingFrameworkId();
98     }
99
100     @NotNull
101     @Override
102     public Icon getIcon() {
103       final Icon icon = myOldProvider.getIcon();
104       return icon != null ? icon : EmptyIcon.ICON_16;
105     }
106
107     public FrameworkSupportProvider getProvider() {
108       return myOldProvider;
109     }
110   }
111
112   public static class FrameworkSupportConfigurableWrapper extends FrameworkSupportInModuleConfigurable {
113     private final FrameworkSupportConfigurable myConfigurable;
114     private final FrameworkLibraryVersionFilter myVersionFilter;
115
116     public FrameworkSupportConfigurableWrapper(FrameworkSupportConfigurable configurable) {
117       Disposer.register(this, configurable);
118       myConfigurable = configurable;
119       myVersionFilter = getVersionFilter(configurable);
120     }
121
122     private FrameworkLibraryVersionFilter getVersionFilter(FrameworkSupportConfigurable configurable) {
123       if (configurable instanceof FrameworkSupportWithLibrary) {
124         final FrameworkLibraryVersionFilter filter = configurable.getVersionFilter();
125         if (filter != null) {
126           return filter;
127         }
128       }
129       return new FrameworkLibraryVersionFilter() {
130         @Override
131         public boolean isAccepted(@NotNull FrameworkLibraryVersion version) {
132           final FrameworkVersion selectedVersion = myConfigurable.getSelectedVersion();
133           return selectedVersion == null || version.getVersionString().equals(selectedVersion.getVersionName());
134         }
135       };
136     }
137
138     public FrameworkSupportConfigurable getConfigurable() {
139       return myConfigurable;
140     }
141
142     @Override
143     public void onFrameworkSelectionChanged(boolean selected) {
144       myConfigurable.onFrameworkSelectionChanged(selected);
145     }
146
147     @Override
148     public boolean isVisible() {
149       return myConfigurable.isVisible();
150     }
151
152     @Override
153     public JComponent createComponent() {
154       return myConfigurable.getComponent();
155     }
156
157     @Override
158     public boolean isOnlyLibraryAdded() {
159       return myConfigurable instanceof FrameworkSupportWithLibrary && ((FrameworkSupportWithLibrary)myConfigurable).isLibraryOnly();
160     }
161
162     @Override
163     public CustomLibraryDescription createLibraryDescription() {
164       if (myConfigurable instanceof FrameworkSupportWithLibrary) {
165         return ((FrameworkSupportWithLibrary)myConfigurable).createLibraryDescription();
166       }
167
168       List<? extends FrameworkVersion> versions = myConfigurable.getVersions();
169       if (versions.isEmpty()) return null;
170       return OldCustomLibraryDescription.createByVersions(versions);
171     }
172
173     @NotNull
174     @Override
175     public FrameworkLibraryVersionFilter getLibraryVersionFilter() {
176       return myVersionFilter;
177     }
178
179     @Override
180     public void addSupport(@NotNull Module module,
181                            @NotNull ModifiableRootModel rootModel,
182                            @NotNull ModifiableModelsProvider modifiableModelsProvider) {
183       myConfigurable.addSupport(module, rootModel, null);
184     }
185   }
186 }