/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.project;
import com.intellij.CommonBundle;
import com.intellij.ide.util.projectWizard.JavaModuleBuilder;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.util.projectWizard.ProjectJdkForModuleStep;
import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.module.JavaModuleType;
import com.intellij.openapi.module.ModuleTypeManager;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.JavaSdkVersion;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.ui.Messages;
import com.intellij.pom.java.LanguageLevel;
import gw.plugin.ij.icons.GosuIcons;
import gw.plugin.ij.sdk.GosuSdkType;
import gw.plugin.ij.sdk.GosuSdkUtils;
import gw.plugin.ij.util.GosuBundle;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
public class GosuModuleType extends JavaModuleType {
public static final String MODULE_TYPE_ID = "GOSU_MODULE";
public GosuModuleType() {
super( MODULE_TYPE_ID );
}
@NotNull
public static GosuModuleType getInstance() {
return (GosuModuleType)ModuleTypeManager.getInstance().findByID( MODULE_TYPE_ID );
}
@NotNull
public GosuModuleBuilder createModuleBuilder() {
return new GosuModuleBuilder();
}
@Override
public ModuleWizardStep[] createWizardSteps( @NotNull final WizardContext wizardContext,
final JavaModuleBuilder moduleBuilder,
ModulesProvider modulesProvider ) {
List<ModuleWizardStep> steps = new ArrayList<>();
ProjectWizardStepFactory factory = ProjectWizardStepFactory.getInstance();
steps.add( factory.createSourcePathsStep( wizardContext, moduleBuilder, null, "reference.dialogs.new.project.fromScratch.source" ) );
if( GosuSdkUtils.getDefaultGosuSdk() == null ) {
// There is no Gosu SDK yet.
// Add a step for the user to select a JDK from which we'll create the Default Gosu SDK and automatically set the project's SDK to it
steps.add(
new ProjectJdkForModuleStep( wizardContext, JavaSdk.getInstance() )
{
public void updateDataModel() {
Sdk sdk = getJdk();
if( sdk != null ) {
Sdk gosuSdk = GosuSdkUtils.createDefaultGosuSDK( sdk );
wizardContext.setProjectJdk( gosuSdk );
}
}
} );
}
else {
// There is at least a default Gosu SDK, provide a step for the user to select the Gosu SDK for the project
steps.add( new GosuSDKForModuleStep( wizardContext ) );
}
//steps.add(new GosuModuleWizardStep(moduleBuilder, wizardContext));
return steps.toArray( new ModuleWizardStep[steps.size()] );
}
public String getName() {
return GosuBundle.message( "gosu.module.type.name" );
}
public String getDescription() {
return GosuBundle.message( "gosu.module.type.description" );
}
@Nullable
public Icon getBigIcon() {
return GosuIcons.G_24;
}
@Nullable
public Icon getNodeIcon( boolean isOpened ) {
return GosuIcons.G_16;
}
private class GosuSDKForModuleStep extends ProjectJdkForModuleStep {
GosuSDKForModuleStep( WizardContext wizardContext ) {
super( wizardContext, GosuSdkType.getInstance() );
}
@Override
public void updateDataModel() {
}
@Override
public boolean validate() {
final Sdk sdk = getJdk();
if( sdk != null ) {
if( sdk.getSdkType() instanceof GosuSdkType ) {
JavaSdkVersion version = JavaSdk.getInstance().getVersion( sdk );
//noinspection ConstantConditions
return version.getMaxLanguageLevel().isAtLeast( LanguageLevel.JDK_1_5 );
}
}
Messages.showErrorDialog( GosuBundle.message( "error.no.gosu.sdk" ), CommonBundle.getErrorTitle() );
return false;
}
}
}