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
;
35 import java
.util
.ArrayList
;
37 public class JavaModuleType
extends ModuleType
<JavaModuleBuilder
> {
39 public JavaModuleType() {
43 protected JavaModuleType(@NonNls String 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
;
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;