diff --git a/java/idea-ui/src/com/intellij/platform/templates/ArchivedProjectTemplate.java b/java/idea-ui/src/com/intellij/platform/templates/ArchivedProjectTemplate.java index d14db955f555..f11f6277461c 100644 --- a/java/idea-ui/src/com/intellij/platform/templates/ArchivedProjectTemplate.java +++ b/java/idea-ui/src/com/intellij/platform/templates/ArchivedProjectTemplate.java @@ -23,6 +23,7 @@ import com.intellij.platform.ProjectTemplate; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.io.IOException; import java.util.List; import java.util.zip.ZipInputStream; @@ -45,6 +46,10 @@ public abstract class ArchivedProjectTemplate implements ProjectTemplate { return myDisplayName; } + public Icon getIcon() { + return getModuleType().getIcon(); + } + protected abstract ModuleType getModuleType(); @NotNull diff --git a/java/idea-ui/src/com/intellij/platform/templates/LocalArchivedTemplate.java b/java/idea-ui/src/com/intellij/platform/templates/LocalArchivedTemplate.java index 1a8a152fcd30..0e20e0595239 100644 --- a/java/idea-ui/src/com/intellij/platform/templates/LocalArchivedTemplate.java +++ b/java/idea-ui/src/com/intellij/platform/templates/LocalArchivedTemplate.java @@ -20,13 +20,16 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.module.ModuleTypeManager; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.io.StreamUtil; import org.jdom.Document; +import org.jdom.Element; import org.jdom.Namespace; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.io.IOException; import java.net.URL; import java.util.Collections; @@ -41,11 +44,12 @@ import java.util.zip.ZipInputStream; public class LocalArchivedTemplate extends ArchivedProjectTemplate { static final String DESCRIPTION_PATH = ".idea/description.html"; - static final String IDEA_INPUT_FIELDS_XML = ".idea/input-fields.xml"; + static final String IDEA_INPUT_FIELDS_XML = ".idea/project-template.xml"; private final URL myArchivePath; private final ModuleType myModuleType; private List myInputFields = Collections.emptyList(); + private Icon myIcon; public LocalArchivedTemplate(String displayName, URL archivePath) { @@ -61,7 +65,12 @@ public class LocalArchivedTemplate extends ArchivedProjectTemplate { }); if (s != null) { try { - myInputFields = RemoteTemplatesFactory.getFields(JDOMUtil.loadDocument(s).getRootElement(), Namespace.NO_NAMESPACE); + Element templateElement = JDOMUtil.loadDocument(s).getRootElement(); + myInputFields = RemoteTemplatesFactory.getFields(templateElement, Namespace.NO_NAMESPACE); + String iconPath = templateElement.getChildText("icon-path"); + if (iconPath != null) { + myIcon = IconLoader.findIcon(iconPath); + } } catch (Exception e) { throw new RuntimeException(e); @@ -79,6 +88,11 @@ public class LocalArchivedTemplate extends ArchivedProjectTemplate { }); } + @Override + public Icon getIcon() { + return myIcon == null ? super.getIcon() : myIcon; + } + @Nullable String readEntry(Condition condition) { ZipInputStream stream = null; @@ -87,7 +101,7 @@ public class LocalArchivedTemplate extends ArchivedProjectTemplate { ZipEntry entry; while ((entry = stream.getNextEntry()) != null) { if (condition.value(entry)) { - return StreamUtil.readText(stream); + return StreamUtil.readText(stream, TemplateModuleBuilder.UTF_8); } } } 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 a18236209d11..01484d5ab338 100644 --- a/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java +++ b/java/idea-ui/src/com/intellij/platform/templates/TemplateModuleBuilder.java @@ -20,6 +20,7 @@ import com.intellij.execution.configurations.ModuleBasedConfiguration; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.ide.fileTemplates.FileTemplateManager; import com.intellij.ide.fileTemplates.FileTemplateUtil; +import com.intellij.ide.util.newProjectWizard.SupportForFrameworksStep; import com.intellij.ide.util.newProjectWizard.modes.ImportImlMode; import com.intellij.ide.util.projectWizard.*; import com.intellij.openapi.application.ApplicationManager; @@ -43,12 +44,14 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.RefreshQueue; import com.intellij.platform.templates.github.ZipUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.NullableFunction; import com.intellij.util.containers.ContainerUtil; import org.jdom.JDOMException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.io.File; import java.io.IOException; import java.util.List; @@ -81,7 +84,13 @@ public class TemplateModuleBuilder extends ModuleBuilder { @Override public ModuleWizardStep[] createWizardSteps(WizardContext wizardContext, ModulesProvider modulesProvider) { - return myType.createModuleBuilder().createWizardSteps(wizardContext, modulesProvider); + ModuleWizardStep[] steps = myType.createModuleBuilder().createWizardSteps(wizardContext, modulesProvider); + for (ModuleWizardStep step : steps) { + if (step instanceof SupportForFrameworksStep) { + return ArrayUtil.remove(steps, step); + } + } + return steps; } @Override @@ -140,6 +149,11 @@ public class TemplateModuleBuilder extends ModuleBuilder { return myType; } + @Override + public Icon getNodeIcon() { + return myTemplate.getIcon(); + } + @NotNull @Override public Module createModule(@NotNull ModifiableModuleModel moduleModel) diff --git a/java/java-impl/src/resources/projectTemplates/Java/Command_Line_App.zip b/java/java-impl/src/resources/projectTemplates/Java/Command_Line_App.zip index b87acb2a00f2..03fcc258406f 100644 Binary files a/java/java-impl/src/resources/projectTemplates/Java/Command_Line_App.zip and b/java/java-impl/src/resources/projectTemplates/Java/Command_Line_App.zip differ