uniform select jdk page for java module type (IDEA-48373)
[fedora-idea.git] / java / java-impl / src / com / intellij / openapi / module / JavaModuleType.java
blobfb56252366adafa7bc4e3771fa460646f7153e19
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.openapi.module;
18 import com.intellij.ide.util.projectWizard.JavaModuleBuilder;
19 import com.intellij.ide.util.projectWizard.ModuleWizardStep;
20 import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory;
21 import com.intellij.ide.util.projectWizard.WizardContext;
22 import com.intellij.openapi.project.ProjectBundle;
23 import com.intellij.openapi.projectRoots.JavaSdk;
24 import com.intellij.openapi.projectRoots.Sdk;
25 import com.intellij.openapi.roots.ModuleRootManager;
26 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
27 import com.intellij.openapi.util.Computable;
28 import com.intellij.openapi.util.IconLoader;
29 import com.intellij.psi.CommonClassNames;
30 import com.intellij.psi.JavaPsiFacade;
31 import com.intellij.util.ArrayUtil;
32 import org.jetbrains.annotations.NonNls;
34 import javax.swing.*;
35 import java.util.ArrayList;
37 public class JavaModuleType extends ModuleType<JavaModuleBuilder> {
39 public JavaModuleType() {
40 this("JAVA_MODULE");
43 protected JavaModuleType(@NonNls String id) {
44 super(id);
47 public JavaModuleBuilder createModuleBuilder() {
48 return new JavaModuleBuilder();
51 public String getName() {
52 return ProjectBundle.message("module.type.java.name");
55 public String getDescription() {
56 return ProjectBundle.message("module.type.java.description");
59 public Icon getBigIcon() {
60 return getJavaModuleIcon();
63 public Icon getNodeIcon(boolean isOpened) {
64 return isOpened ? getJavaModuleNodeIconOpen() : getJavaModuleNodeIconClosed();
67 public ModuleWizardStep[] createWizardSteps(final WizardContext wizardContext, final JavaModuleBuilder moduleBuilder,
68 final ModulesProvider modulesProvider) {
69 final ProjectWizardStepFactory wizardFactory = ProjectWizardStepFactory.getInstance();
70 ArrayList<ModuleWizardStep> steps = new ArrayList<ModuleWizardStep>();
71 steps.add(wizardFactory.createSourcePathsStep(wizardContext, moduleBuilder, getWizardIcon(), "reference.dialogs.new.project.fromScratch.source"));
72 steps.add(wizardFactory.createProjectJdkStep(wizardContext, JavaSdk.getInstance(), moduleBuilder, new Computable<Boolean>() {
73 public Boolean compute() {
74 final Sdk projectJdk = wizardContext.getProjectJdk();
75 return projectJdk == null || projectJdk.getSdkType() != JavaSdk.getInstance() ? Boolean.TRUE : Boolean.FALSE;
77 }, getWizardIcon(), "reference.dialogs.new.project.fromScratch.sdk"));
78 final ModuleWizardStep supportForFrameworksStep = wizardFactory.createSupportForFrameworksStep(wizardContext, moduleBuilder);
79 if (supportForFrameworksStep != null) {
80 steps.add(supportForFrameworksStep);
82 final ModuleWizardStep[] wizardSteps = steps.toArray(new ModuleWizardStep[steps.size()]);
83 return ArrayUtil.mergeArrays(wizardSteps, super.createWizardSteps(wizardContext, moduleBuilder, modulesProvider), ModuleWizardStep.class);
86 private static class IconHolder {
87 private static final Icon JAVA_MODULE_ICON = IconLoader.getIcon("/modules/javaModule.png");
90 private static Icon getJavaModuleIcon() {
92 return IconHolder.JAVA_MODULE_ICON;
95 private static class JavaModuleOpenIconHolder {
96 private static final Icon JAVA_MODULE_NODE_ICON_OPEN = IconLoader.getIcon("/nodes/ModuleOpen.png");
99 private static Icon getJavaModuleNodeIconOpen() {
100 return JavaModuleOpenIconHolder.JAVA_MODULE_NODE_ICON_OPEN;
103 private static class JavaModuleClosedIconHolder {
104 private static final Icon JAVA_MODULE_NODE_ICON_CLOSED = IconLoader.getIcon("/nodes/ModuleClosed.png");
107 private static Icon getJavaModuleNodeIconClosed() {
109 return JavaModuleClosedIconHolder.JAVA_MODULE_NODE_ICON_CLOSED;
112 private static class WizardIconHolder {
113 private static final Icon WIZARD_ICON = IconLoader.getIcon("/addmodulewizard.png");
116 private static Icon getWizardIcon() {
118 return WizardIconHolder.WIZARD_ICON;
121 @Override
122 public boolean isValidSdk(final Module module, final Sdk projectSdk) {
123 return isValidJavaSdk(module);
126 public static boolean isValidJavaSdk(final Module module) {
127 if (ModuleRootManager.getInstance(module).getSourceRoots().length == 0) return true;
128 return JavaPsiFacade.getInstance(module.getProject()).findClass(CommonClassNames.JAVA_LANG_OBJECT,
129 module.getModuleWithLibrariesScope()) != null;