remote templates

This commit is contained in:
Dmitry Avdeev
2014-02-20 12:12:55 +04:00
parent 35825601d3
commit cd39c84585
4 changed files with 17 additions and 25 deletions
@@ -73,4 +73,8 @@ public class ChooseTemplateStep extends ModuleWizardStep {
myWizardContext.setProjectTemplate(myTemplateList.getSelectedTemplate());
}
}
public ProjectTemplateList getTemplateList() {
return myTemplateList;
}
}
@@ -47,11 +47,15 @@ public class NewProjectWizard extends AbstractProjectWizard {
myWizardContext.setNewWizard(true);
ProjectTypeStep projectTypeStep = new ProjectTypeStep(myWizardContext, this, modulesProvider);
mySequence.addCommonStep(projectTypeStep);
mySequence.addCommonStep(new ChooseTemplateStep(myWizardContext, projectTypeStep));
ChooseTemplateStep chooseTemplateStep = new ChooseTemplateStep(myWizardContext, projectTypeStep);
mySequence.addCommonStep(chooseTemplateStep);
mySequence.addCommonFinishingStep(new ProjectSettingsStep(myWizardContext), null);
for (ModuleWizardStep step : mySequence.getAllSteps()) {
addStep(step);
}
if (myWizardContext.isCreatingNewProject()) {
projectTypeStep.loadRemoteTemplates(chooseTemplateStep);
}
super.init();
}
@@ -114,7 +114,6 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
};
private final Map<String, ModuleWizardStep> myCustomSteps = new HashMap<String, ModuleWizardStep>();
private final MultiMap<TemplatesGroup,ProjectTemplate> myTemplatesMap;
private boolean myRemoteTemplatesLoaded;
private String myCurrentCard;
public ProjectTypeStep(WizardContext context, NewProjectWizard wizard, ModulesProvider modulesProvider) {
@@ -459,13 +458,6 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
}
}
@Override
public void updateStep() {
if (myContext.isCreatingNewProject() && !myRemoteTemplatesLoaded) {
loadRemoteTemplates();
}
}
@Override
public boolean validate() throws ConfigurationException {
ModuleWizardStep step = getCustomStep();
@@ -519,12 +511,13 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
return map;
}
private void loadRemoteTemplates() {
void loadRemoteTemplates(final ChooseTemplateStep chooseTemplateStep) {
ProgressManager.getInstance().run(new Task.Backgroundable(myContext.getProject(), "Loading Templates") {
@Override
public void run(@NotNull ProgressIndicator indicator) {
try {
myTemplatesList.setPaintBusy(true);
chooseTemplateStep.getTemplateList().setPaintBusy(true);
RemoteTemplatesFactory factory = new RemoteTemplatesFactory();
String[] groups = factory.getGroups();
for (String group : groups) {
@@ -545,12 +538,13 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
if (group == null) return;
Collection<ProjectTemplate> templates = myTemplatesMap.get(group);
setTemplatesList(group, templates, true);
chooseTemplateStep.updateStep();
}
});
}
finally {
myTemplatesList.setPaintBusy(false);
myRemoteTemplatesLoaded = true;
chooseTemplateStep.getTemplateList().setPaintBusy(false);
}
}
});
@@ -55,8 +55,6 @@ import java.util.zip.ZipInputStream;
public class RemoteTemplatesFactory extends ProjectTemplatesFactory {
private static final String URL = "http://download.jetbrains.com/idea/project_templates/";
public static final String SAMPLES_GALLERY = "Samples Gallery";
private static final Namespace NAMESPACE = Namespace.getNamespace("http://www.jetbrains.com/projectTemplates");
public static final String INPUT_FIELD = "input-field";
public static final String TEMPLATE = "template";
@@ -113,20 +111,12 @@ public class RemoteTemplatesFactory extends ProjectTemplatesFactory {
@SuppressWarnings("unchecked")
public static MultiMap<String, ArchivedProjectTemplate> createFromText(String text) throws IOException, JDOMException {
Element rootElement = JDOMUtil.loadDocument(text).getRootElement();
List<Element> groups = rootElement.getChildren("group", NAMESPACE);
MultiMap<String, ArchivedProjectTemplate> map = new MultiMap<String, ArchivedProjectTemplate>();
if (groups.isEmpty()) { // sample gallery by default
map.put(SAMPLES_GALLERY, createGroupTemplates(rootElement, Namespace.NO_NAMESPACE));
Element rootElement = JDOMUtil.loadDocument(text).getRootElement();
List<ArchivedProjectTemplate> templates = createGroupTemplates(rootElement, Namespace.NO_NAMESPACE);
for (ArchivedProjectTemplate template : templates) {
map.putValue(template.getCategory(), template);
}
else {
for (Element group : groups) {
if (checkRequiredPlugins(group, NAMESPACE)) {
map.put(group.getChildText("name", NAMESPACE), createGroupTemplates(group, NAMESPACE));
}
}
}
return map;
}