custom wizard step for gradle and maven

This commit is contained in:
Dmitry Avdeev
2014-02-04 15:01:43 +04:00
parent c2d58196c9
commit 01fdfd4000
7 changed files with 55 additions and 48 deletions
@@ -81,8 +81,6 @@ import java.util.List;
@SuppressWarnings("unchecked")
public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
private enum Cards { FRAMEWORKS, TEMPLATES, CUSTOM }
private static final String TEMPLATES_CARD = "templates card";
private static final String FRAMEWORKS_CARD = "frameworks card";
@@ -108,10 +106,10 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
return (ModuleBuilder)key.createModuleBuilder();
}
};
private final Set<String> myCards = new HashSet<String>();
private final Map<String, ModuleWizardStep> myCustomSteps = new HashMap<String, ModuleWizardStep>();
private final MultiMap<TemplatesGroup,ProjectTemplate> myTemplatesMap;
private boolean myRemoteTemplatesLoaded;
private Cards myCurrentCard;
private String myCurrentCard;
public ProjectTypeStep(WizardContext context, NewProjectWizard wizard, ModulesProvider modulesProvider) {
myContext = context;
@@ -210,7 +208,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
}
private boolean isFrameworksMode() {
return myCurrentCard == Cards.FRAMEWORKS && getSelectedBuilder().equals(myContext.getProjectBuilder());
return FRAMEWORKS_CARD.equals(myCurrentCard) && getSelectedBuilder().equals(myContext.getProjectBuilder());
}
private List<TemplatesGroup> fillTemplatesMap(WizardContext context) {
@@ -342,13 +340,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
private void showCard(String card) {
((CardLayout)myOptionsPanel.getLayout()).show(myOptionsPanel, card);
if (FRAMEWORKS_CARD.equals(card)) {
myCurrentCard = Cards.FRAMEWORKS;
}
else if (TEMPLATES_CARD.equals(card)) {
myCurrentCard = Cards.TEMPLATES;
}
else myCurrentCard = Cards.CUSTOM;
myCurrentCard = card;
}
private void showTemplates(TemplatesGroup group) {
@@ -381,23 +373,29 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
private boolean showCustomOptions(@NotNull ModuleBuilder builder) {
String card = builder.getBuilderId();
if (!myCards.contains(card)) {
JComponent panel = builder.getCustomOptionsPanel(this);
if (panel == null) return false;
myCards.add(card);
myOptionsPanel.add(panel, card);
if (!myCustomSteps.containsKey(card)) {
ModuleWizardStep step = builder.getCustomOptionsStep(this);
if (step == null) return false;
step.updateStep();
myCustomSteps.put(card, step);
myOptionsPanel.add(step.getComponent(), card);
}
showCard(card);
return true;
}
@Nullable
private ModuleWizardStep getCustomStep() {
return myCustomSteps.get(myCurrentCard);
}
private TemplatesGroup getSelectedGroup() {
return (TemplatesGroup)myProjectTypeList.getSelectedValue();
}
@Nullable
public ProjectTemplate getSelectedTemplate() {
return myCurrentCard == Cards.TEMPLATES ? myTemplatesList.getSelectedTemplate() : null;
return myCurrentCard == TEMPLATES_CARD ? myTemplatesList.getSelectedTemplate() : null;
}
private ModuleBuilder getSelectedBuilder() {
@@ -409,7 +407,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
}
public Collection<ProjectTemplate> getAvailableTemplates() {
return myCurrentCard != Cards.FRAMEWORKS ? Collections.<ProjectTemplate>emptyList() : myTemplatesMap.get(getSelectedGroup());
return myCurrentCard != FRAMEWORKS_CARD ? Collections.<ProjectTemplate>emptyList() : myTemplatesMap.get(getSelectedGroup());
}
public void onWizardFinished() throws CommitStepException {
@@ -435,6 +433,10 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
public void updateDataModel() {
ModuleBuilder builder = getSelectedBuilder();
myWizard.getSequence().addStepsForBuilder(builder, myContext, myModulesProvider);
ModuleWizardStep step = getCustomStep();
if (step != null) {
step.updateDataModel();
}
}
@Override
@@ -444,10 +446,6 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
}
}
@Override
public void onStepLeaving() {
}
@Override
public JComponent getPreferredFocusedComponent() {
return myProjectTypeList;
@@ -39,12 +39,11 @@ public abstract class AbstractModuleBuilder extends ProjectBuilder {
return null;
}
public boolean hasCustomOptionsPanel() {
return false;
}
/**
* Custom UI to be shown on the first wizard page
*/
@Nullable
public JComponent getCustomOptionsPanel(Disposable parentDisposable) {
public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) {
return null;
}
@@ -19,6 +19,7 @@ import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.ide.fileTemplates.FileTemplateManager;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.externalSystem.service.project.wizard.AbstractExternalModuleBuilder;
import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep;
@@ -115,13 +116,15 @@ public class GradleModuleBuilder extends AbstractExternalModuleBuilder<GradlePro
@Override
public ModuleWizardStep[] createWizardSteps(@NotNull WizardContext wizardContext, @NotNull ModulesProvider modulesProvider) {
myWizardContext = wizardContext;
if (myWizardContext.isCreatingNewProject()) {
final GradleProjectSettingsControl settingsControl = new GradleProjectSettingsControl(getExternalProjectSettings());
return new ModuleWizardStep[]{new ExternalModuleSettingsStep<GradleProjectSettings>(this, settingsControl)};
}
else {
return ModuleWizardStep.EMPTY_ARRAY;
}
return super.createWizardSteps(wizardContext, modulesProvider);
}
@Nullable
@Override
public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) {
if (!myWizardContext.isCreatingNewProject()) return null;
final GradleProjectSettingsControl settingsControl = new GradleProjectSettingsControl(getExternalProjectSettings());
return new ExternalModuleSettingsStep<GradleProjectSettings>(this, settingsControl);
}
@Override
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.idea.maven.wizards.MavenArchetypesPanel">
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.idea.maven.wizards.MavenArchetypesStep">
<grid id="27dc6" binding="myMainPanel" layout-manager="GridLayoutManager" row-count="3" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
@@ -15,6 +15,7 @@
*/
package org.jetbrains.idea.maven.wizards;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.wizard.StepAdapter;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
@@ -46,7 +47,7 @@ import java.util.List;
* @author Dmitry Avdeev
* Date: 24.09.13
*/
public class MavenArchetypesPanel implements Disposable {
public class MavenArchetypesStep extends ModuleWizardStep implements Disposable {
private JCheckBox myUseArchetypeCheckBox;
private JButton myAddArchetypeButton;
@@ -63,7 +64,7 @@ public class MavenArchetypesPanel implements Disposable {
private final MavenModuleBuilder myBuilder;
@Nullable private final StepAdapter myStep;
public MavenArchetypesPanel(MavenModuleBuilder builder, @Nullable StepAdapter step) {
public MavenArchetypesStep(MavenModuleBuilder builder, @Nullable StepAdapter step) {
myBuilder = builder;
myStep = step;
Disposer.register(this, myLoadingIcon);
@@ -298,6 +299,16 @@ public class MavenArchetypesPanel implements Disposable {
public void dispose() {
}
@Override
public JComponent getComponent() {
return getMainPanel();
}
@Override
public void updateDataModel() {
}
private static class MyRenderer extends ColoredTreeCellRenderer {
public void customizeCellRenderer(JTree tree,
Object value,
@@ -216,15 +216,11 @@ public class MavenModuleBuilder extends ModuleBuilder implements SourcePathsBuil
return "Maven";
}
private MavenArchetypesPanel myPanel;
@Nullable
@Override
public JComponent getCustomOptionsPanel(Disposable parentDisposable) {
if (myPanel == null) {
myPanel = new MavenArchetypesPanel(this, null);
Disposer.register(parentDisposable, myPanel);
}
return myPanel.getMainPanel();
public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) {
MavenArchetypesStep step = new MavenArchetypesStep(this, null);
Disposer.register(parentDisposable, step);
return step;
}
}
@@ -74,14 +74,14 @@ public class MavenModuleWizardStep extends ModuleWizardStep {
private JPanel myAddToPanel;
@Nullable
private final MavenArchetypesPanel myArchetypes;
private final MavenArchetypesStep myArchetypes;
public MavenModuleWizardStep(MavenModuleBuilder builder, WizardContext context, boolean includeArtifacts) {
myProjectOrNull = context.getProject();
myBuilder = builder;
myContext = context;
if (includeArtifacts) {
myArchetypes = new MavenArchetypesPanel(builder, this);
myArchetypes = new MavenArchetypesStep(builder, this);
myArchetypesPanel.add(myArchetypes.getMainPanel(), BorderLayout.CENTER);
}
else {