blob: cbc91e88b8cdb1633d1953859fe79a8a2e01189a [file] [log] [blame]
/*
* Copyright 2000-2011 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ide.util.newProjectWizard;
import com.intellij.framework.FrameworkTypeEx;
import com.intellij.framework.addSupport.FrameworkSupportInModuleConfigurable;
import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider;
import com.intellij.framework.library.FrameworkLibraryVersion;
import com.intellij.framework.library.FrameworkLibraryVersionFilter;
import com.intellij.framework.library.FrameworkSupportWithLibrary;
import com.intellij.ide.util.frameworkSupport.*;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.roots.ModifiableModelsProvider;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ui.configuration.FacetsProvider;
import com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription;
import com.intellij.openapi.util.Disposer;
import com.intellij.ui.GuiUtils;
import com.intellij.util.ui.EmptyIcon;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.util.List;
/**
* @author nik
*/
public class OldFrameworkSupportProviderWrapper extends FrameworkSupportInModuleProvider {
private final FrameworkSupportProvider myProvider;
private final OldFrameworkSupportProviderWrapper.FrameworkSupportProviderBasedType myType;
public OldFrameworkSupportProviderWrapper(FrameworkSupportProvider provider) {
myProvider = provider;
myType = new FrameworkSupportProviderBasedType(myProvider, this);
}
public FrameworkSupportProvider getProvider() {
return myProvider;
}
@NotNull
@Override
public FrameworkTypeEx getFrameworkType() {
return myType;
}
@NotNull
@Override
public FrameworkSupportInModuleConfigurable createConfigurable(@NotNull FrameworkSupportModel model) {
final FrameworkSupportConfigurable configurable = myProvider.createConfigurable(model);
return new FrameworkSupportConfigurableWrapper(configurable);
}
@Override
public boolean isEnabledForModuleType(@NotNull ModuleType moduleType) {
return myProvider.isEnabledForModuleType(moduleType);
}
@Override
public boolean isEnabledForModuleBuilder(@NotNull ModuleBuilder builder) {
return myProvider.isEnabledForModuleBuilder(builder);
}
@Override
public boolean isSupportAlreadyAdded(@NotNull Module module, @NotNull FacetsProvider facetsProvider) {
return myProvider.isSupportAlreadyAdded(module, facetsProvider);
}
@Override
public FrameworkRole[] getRoles() {
return myProvider.getRoles();
}
public static class FrameworkSupportProviderBasedType extends FrameworkTypeEx {
private final FrameworkSupportProvider myOldProvider;
private final OldFrameworkSupportProviderWrapper myNewProvider;
private FrameworkSupportProviderBasedType(FrameworkSupportProvider oldProvider,
OldFrameworkSupportProviderWrapper newProvider) {
super(oldProvider.getId());
myOldProvider = oldProvider;
myNewProvider = newProvider;
}
@NotNull
@Override
public FrameworkSupportInModuleProvider createProvider() {
return myNewProvider;
}
@NotNull
@Override
public String getPresentableName() {
return GuiUtils.getTextWithoutMnemonicEscaping(myOldProvider.getTitle());
}
@Override
public String getUnderlyingFrameworkTypeId() {
return myOldProvider.getUnderlyingFrameworkId();
}
@NotNull
@Override
public Icon getIcon() {
final Icon icon = myOldProvider.getIcon();
return icon != null ? icon : EmptyIcon.ICON_16;
}
public FrameworkSupportProvider getProvider() {
return myOldProvider;
}
}
public static class FrameworkSupportConfigurableWrapper extends FrameworkSupportInModuleConfigurable {
private final FrameworkSupportConfigurable myConfigurable;
private final FrameworkLibraryVersionFilter myVersionFilter;
public FrameworkSupportConfigurableWrapper(FrameworkSupportConfigurable configurable) {
Disposer.register(this, configurable);
myConfigurable = configurable;
myVersionFilter = getVersionFilter(configurable);
}
private FrameworkLibraryVersionFilter getVersionFilter(FrameworkSupportConfigurable configurable) {
if (configurable instanceof FrameworkSupportWithLibrary) {
final FrameworkLibraryVersionFilter filter = configurable.getVersionFilter();
if (filter != null) {
return filter;
}
}
return new FrameworkLibraryVersionFilter() {
@Override
public boolean isAccepted(@NotNull FrameworkLibraryVersion version) {
final FrameworkVersion selectedVersion = myConfigurable.getSelectedVersion();
return selectedVersion == null || version.getVersionString().equals(selectedVersion.getVersionName());
}
};
}
public FrameworkSupportConfigurable getConfigurable() {
return myConfigurable;
}
@Override
public void onFrameworkSelectionChanged(boolean selected) {
myConfigurable.onFrameworkSelectionChanged(selected);
}
@Override
public boolean isVisible() {
return myConfigurable.isVisible();
}
@Override
public JComponent createComponent() {
return myConfigurable.getComponent();
}
@Override
public boolean isOnlyLibraryAdded() {
return myConfigurable instanceof FrameworkSupportWithLibrary && ((FrameworkSupportWithLibrary)myConfigurable).isLibraryOnly();
}
@Override
public CustomLibraryDescription createLibraryDescription() {
if (myConfigurable instanceof FrameworkSupportWithLibrary) {
return ((FrameworkSupportWithLibrary)myConfigurable).createLibraryDescription();
}
List<? extends FrameworkVersion> versions = myConfigurable.getVersions();
if (versions.isEmpty()) return null;
return OldCustomLibraryDescription.createByVersions(versions);
}
@NotNull
@Override
public FrameworkLibraryVersionFilter getLibraryVersionFilter() {
return myVersionFilter;
}
@Override
public void addSupport(@NotNull Module module,
@NotNull ModifiableRootModel rootModel,
@NotNull ModifiableModelsProvider modifiableModelsProvider) {
myConfigurable.addSupport(module, rootModel, null);
}
}
}