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 @@
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 @@
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