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