diff --git a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectCategory.java b/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectCategory.java index d5c9b09ce19b..43c2eeecaf7b 100644 --- a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectCategory.java +++ b/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectCategory.java @@ -20,7 +20,6 @@ import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -55,11 +54,6 @@ public abstract class ProjectCategory { return createModuleBuilder().getGroupName(); } - @Nullable - public String getParentId() { - return null; - } - public FrameworkRole[] getAcceptableFrameworkRoles() { return new FrameworkRole[] {createModuleBuilder().getDefaultAcceptableRole()}; } diff --git a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java b/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java index 08e89781e0bf..f2eb01981d7a 100644 --- a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java +++ b/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java @@ -473,14 +473,21 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable { Disposer.dispose(this); } - private static MultiMap loadLocalTemplates() { + private MultiMap loadLocalTemplates() { ConcurrentMultiMap map = new ConcurrentMultiMap(); ProjectTemplateEP[] extensions = ProjectTemplateEP.EP_NAME.getExtensions(); for (ProjectTemplateEP ep : extensions) { ClassLoader classLoader = ep.getLoaderForClass(); URL url = classLoader.getResource(ep.templatePath); if (url != null) { - map.putValue(ep.projectType, new LocalArchivedTemplate(url, classLoader)); + LocalArchivedTemplate template = new LocalArchivedTemplate(url, classLoader); + if (ep.category) { + TemplateBasedCategory category = new TemplateBasedCategory(template); + myTemplatesMap.putValue(new TemplatesGroup(category), template); + } + else { + map.putValue(ep.projectType, template); + } } } return map; diff --git a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectCategoryTemplate.java b/java/idea-ui/src/com/intellij/ide/projectWizard/TemplateBasedCategory.java similarity index 60% rename from java/idea-ui/src/com/intellij/ide/projectWizard/ProjectCategoryTemplate.java rename to java/idea-ui/src/com/intellij/ide/projectWizard/TemplateBasedCategory.java index b9d02ff997aa..6c0067399142 100644 --- a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectCategoryTemplate.java +++ b/java/idea-ui/src/com/intellij/ide/projectWizard/TemplateBasedCategory.java @@ -15,42 +15,41 @@ */ package com.intellij.ide.projectWizard; -import com.intellij.platform.templates.BuilderBasedTemplate; +import com.intellij.ide.util.projectWizard.ModuleBuilder; +import com.intellij.platform.templates.ArchivedProjectTemplate; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; /** * @author Dmitry Avdeev */ -public class ProjectCategoryTemplate extends BuilderBasedTemplate { +public class TemplateBasedCategory extends ProjectCategory { - private final ProjectCategory myCategory; + private final ArchivedProjectTemplate myTemplate; - public ProjectCategoryTemplate(ProjectCategory category) { - super(category.createModuleBuilder()); - myCategory = category; + public TemplateBasedCategory(ArchivedProjectTemplate template) { + myTemplate = template; } - @NotNull @Override - public String getName() { - return myCategory.getDisplayName(); + public String getDisplayName() { + return myTemplate.getName(); } @Override public Icon getIcon() { - return myCategory.getIcon(); + return myTemplate.getIcon(); } - @Nullable @Override public String getDescription() { - return myCategory.getDescription(); + return myTemplate.getDescription(); } - public ProjectCategory getCategory() { - return myCategory; + @NotNull + @Override + public ModuleBuilder createModuleBuilder() { + return myTemplate.createModuleBuilder(); } } diff --git a/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java b/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java index 33932001f671..5ddafe07443e 100644 --- a/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java +++ b/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java @@ -154,6 +154,11 @@ public class TemplateModuleBuilder extends ModuleBuilder { return myTemplate.getIcon(); } + @Override + public boolean isTemplateBased() { + return true; + } + @NotNull @Override public Module createModule(@NotNull ModifiableModuleModel moduleModel) diff --git a/platform/platform-impl/src/com/intellij/platform/ProjectTemplateEP.java b/platform/platform-impl/src/com/intellij/platform/ProjectTemplateEP.java index b91a09bf336f..314cd74ce871 100644 --- a/platform/platform-impl/src/com/intellij/platform/ProjectTemplateEP.java +++ b/platform/platform-impl/src/com/intellij/platform/ProjectTemplateEP.java @@ -33,4 +33,6 @@ public class ProjectTemplateEP extends AbstractExtensionPointBean { @Attribute("templatePath") public String templatePath; + @Attribute("category") + public boolean category; } diff --git a/plugins/javaFX/src/META-INF/common-javaFX-plugin.xml b/plugins/javaFX/src/META-INF/common-javaFX-plugin.xml index ffb957bff742..cdc1397b5aac 100644 --- a/plugins/javaFX/src/META-INF/common-javaFX-plugin.xml +++ b/plugins/javaFX/src/META-INF/common-javaFX-plugin.xml @@ -51,7 +51,7 @@ - +