diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.form b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.form index 64c581834f93..aab0321dde52 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.form +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.form @@ -1,16 +1,16 @@
- + - + - + @@ -36,25 +36,41 @@ - + - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.java index dce9d8485a47..e75887888f1f 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.java @@ -26,6 +26,7 @@ import com.intellij.ui.CollectionListModel; import com.intellij.ui.ColoredListCellRenderer; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.SearchTextField; +import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBList; import com.intellij.util.containers.ContainerUtil; @@ -48,6 +49,8 @@ public class SelectTemplateStep extends ModuleWizardStep { private JBList myTemplatesList; private JPanel mySettingsPanel; private SearchTextField mySearchField; + private JBLabel myDescriptionLabel; + private JPanel myDescriptionPanel; public SelectTemplateStep(WizardContext context) { @@ -78,6 +81,10 @@ public class SelectTemplateStep extends ModuleWizardStep { if (settingsPanel != null) { mySettingsPanel.add(settingsPanel, BorderLayout.NORTH); } + mySettingsPanel.setVisible(settingsPanel != null); + String description = template.getDescription(); + myDescriptionLabel.setText(description); + myDescriptionPanel.setVisible(description != null); } mySettingsPanel.revalidate(); mySettingsPanel.repaint(); 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 4a8322333a2e..f26ea034eecd 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.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ui.configuration.ModulesProvider; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.io.StreamUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.RefreshQueue; @@ -35,9 +36,9 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.net.URL; import java.util.List; +import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** @@ -45,18 +46,16 @@ import java.util.zip.ZipInputStream; * Date: 10/1/12 */ public class ArchivedProjectTemplate implements ProjectTemplate { + private final String myDisplayName; - private final String myDescription; private final URL myArchivePath; private final WizardContext myContext; public ArchivedProjectTemplate(String displayName, - String description, URL archivePath, WizardContext context) { myDisplayName = displayName; - myDescription = description; myArchivePath = archivePath; myContext = context; } @@ -68,7 +67,19 @@ public class ArchivedProjectTemplate implements ProjectTemplate { @Override public String getDescription() { - return myDescription; + try { + ZipInputStream stream = getStream(); + ZipEntry entry; + while ((entry = stream.getNextEntry()) != null) { + if (entry.getName().endsWith("/description.html")) { + return StreamUtil.readText(stream); + } + } + } + catch (IOException e) { + return null; + } + return null; } @NotNull @@ -81,9 +92,9 @@ public class ArchivedProjectTemplate implements ProjectTemplate { final String path = myContext.getProjectFileDirectory(); String iml; try { - InputStream stream = myArchivePath.openStream(); File dir = new File(path); - ZipUtil.unzip(null, dir, new ZipInputStream(stream)); + ZipInputStream zipInputStream = getStream(); + ZipUtil.unzip(null, dir, zipInputStream); VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(dir); RefreshQueue.getInstance().refresh(false, true, null, virtualFile); iml = ContainerUtil.find(dir.list(), new Condition() { @@ -101,6 +112,10 @@ public class ArchivedProjectTemplate implements ProjectTemplate { }; } + private ZipInputStream getStream() throws IOException { + return new ZipInputStream(myArchivePath.openStream()); + } + @Override public JComponent getSettingsPanel() { return null; diff --git a/java/idea-ui/src/com/intellij/platform/templates/ArchivedTemplatesFactory.java b/java/idea-ui/src/com/intellij/platform/templates/ArchivedTemplatesFactory.java index 1e654651d11e..639d3f941891 100644 --- a/java/idea-ui/src/com/intellij/platform/templates/ArchivedTemplatesFactory.java +++ b/java/idea-ui/src/com/intellij/platform/templates/ArchivedTemplatesFactory.java @@ -16,7 +16,10 @@ package com.intellij.platform.templates; import com.intellij.ide.fileTemplates.impl.UrlUtil; +import com.intellij.ide.plugins.IdeaPluginDescriptor; +import com.intellij.ide.plugins.PluginManager; import com.intellij.ide.util.projectWizard.WizardContext; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.platform.ProjectTemplate; import com.intellij.platform.ProjectTemplatesFactory; import org.jetbrains.annotations.NotNull; @@ -34,23 +37,36 @@ public class ArchivedTemplatesFactory implements ProjectTemplatesFactory { @NotNull @Override public ProjectTemplate[] createTemplates(WizardContext context) { - try { - List templates = new ArrayList(); - Enumeration resources = getClass().getClassLoader().getResources("resources/projectTemplates"); - Set urls = new HashSet(Collections.list(resources)); - for (URL url : urls) { + + IdeaPluginDescriptor[] plugins = PluginManager.getPlugins(); + Set urls = new HashSet(); + for (IdeaPluginDescriptor plugin : plugins) { + try { + Enumeration resources = plugin.getPluginClassLoader().getResources("resources/projectTemplates"); + urls.addAll(Collections.list(resources)); + } + catch (IOException e) { + LOG.error(e); + } + } + + List templates = new ArrayList(); + for (URL url : urls) { + try { final List children = UrlUtil.getChildrenRelativePaths(url); for (String child : children) { if (child.endsWith(".zip")) { final URL templateUrl = new URL(url.toExternalForm() + "/" + child); - templates.add(new ArchivedProjectTemplate(child, null, templateUrl, context)); + templates.add(new ArchivedProjectTemplate(child, templateUrl, context)); } } } - return templates.toArray(new ProjectTemplate[templates.size()]); - } - catch (IOException e) { - throw new RuntimeException(e); + catch (IOException e) { + LOG.error(e); + } } + return templates.toArray(new ProjectTemplate[templates.size()]); } + + private final static Logger LOG = Logger.getInstance(ArchivedTemplatesFactory.class); } diff --git a/platform/lang-impl/src/com/intellij/platform/templates/github/AbstractGithubTagDownloadedProjectGenerator.java b/platform/lang-impl/src/com/intellij/platform/templates/github/AbstractGithubTagDownloadedProjectGenerator.java index 8d71f5dafd97..697ec6f9961d 100644 --- a/platform/lang-impl/src/com/intellij/platform/templates/github/AbstractGithubTagDownloadedProjectGenerator.java +++ b/platform/lang-impl/src/com/intellij/platform/templates/github/AbstractGithubTagDownloadedProjectGenerator.java @@ -118,9 +118,6 @@ public abstract class AbstractGithubTagDownloadedProjectGenerator extends WebPro Messages.showErrorDialog(project, fullMessage, title); } - @Nullable - public abstract String getHomepageUrl(); - @Nullable public abstract String getDescription(); } diff --git a/platform/lang-impl/src/com/intellij/platform/templates/github/GithubProjectGeneratorPeer.form b/platform/lang-impl/src/com/intellij/platform/templates/github/GithubProjectGeneratorPeer.form index 260feeb3a316..e5d320026a5f 100644 --- a/platform/lang-impl/src/com/intellij/platform/templates/github/GithubProjectGeneratorPeer.form +++ b/platform/lang-impl/src/com/intellij/platform/templates/github/GithubProjectGeneratorPeer.form @@ -1,16 +1,16 @@
- + - + - + @@ -19,17 +19,17 @@ - + - + - + @@ -37,7 +37,7 @@ - + @@ -47,32 +47,12 @@ - + - - - - - - - - - - - - - - - - - - - - diff --git a/platform/lang-impl/src/com/intellij/platform/templates/github/GithubProjectGeneratorPeer.java b/platform/lang-impl/src/com/intellij/platform/templates/github/GithubProjectGeneratorPeer.java index 884c1bc0912c..05b1faa9b386 100644 --- a/platform/lang-impl/src/com/intellij/platform/templates/github/GithubProjectGeneratorPeer.java +++ b/platform/lang-impl/src/com/intellij/platform/templates/github/GithubProjectGeneratorPeer.java @@ -5,9 +5,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.intellij.openapi.ui.ValidationInfo; import com.intellij.platform.WebProjectGenerator; -import com.intellij.ui.HyperlinkLabel; import com.intellij.ui.ListCellRendererWrapper; -import com.intellij.ui.components.JBLabel; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; @@ -32,11 +30,8 @@ public class GithubProjectGeneratorPeer implements WebProjectGenerator.Generator private JComboBox myComboBox; private final GithubTagListProvider myProvider; private JComponent myComponent; - private HyperlinkLabel myHyperlink; private JLabel myErrorMessage; private JButton myReloadButton; - private JBLabel myHomepageLabel; - private JBLabel myDescriptionLabel; public GithubProjectGeneratorPeer(@NotNull AbstractGithubTagDownloadedProjectGenerator generator) { String ghUserName = generator.getGithubUserName(); @@ -45,19 +40,6 @@ public class GithubProjectGeneratorPeer implements WebProjectGenerator.Generator "master", String.format("https://github.com/%s/%s/zipball/master", ghUserName, ghRepoName) ); - String url = generator.getHomepageUrl(); - if (url != null) { - myHomepageLabel.setVisible(true); - myHyperlink.setVisible(true); - myHyperlink.setHyperlinkText(url); - myHyperlink.setHyperlinkTarget(url); - myHyperlink.revalidate(); - } - else { - myHomepageLabel.setVisible(false); - myHyperlink.setVisible(false); - } - myDescriptionLabel.setText(generator.getDescription()); myComboBox.setRenderer(new ListCellRendererWrapper() { @Override @@ -120,9 +102,7 @@ public class GithubProjectGeneratorPeer implements WebProjectGenerator.Generator UIUtil.invokeLaterIfNeeded(new Runnable() { @Override public void run() { - if (false) { - myErrorMessage.setText(message); - } + myErrorMessage.setText(message); } }); } diff --git a/platform/platform-impl/src/com/intellij/platform/ProjectTemplate.java b/platform/platform-impl/src/com/intellij/platform/ProjectTemplate.java index 1fabea513f6e..5ba1f8bafa51 100644 --- a/platform/platform-impl/src/com/intellij/platform/ProjectTemplate.java +++ b/platform/platform-impl/src/com/intellij/platform/ProjectTemplate.java @@ -29,6 +29,7 @@ public interface ProjectTemplate { String getName(); + @Nullable String getDescription(); @Nullable