creating module from template

This commit is contained in:
Dmitry Avdeev
2012-10-09 15:36:16 +04:00
parent f7fd29bb31
commit 8a2d32baf4
6 changed files with 49 additions and 40 deletions
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.ide.util.newProjectWizard.ProjectNameWithModuleStep">
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.ide.util.newProjectWizard.ProjectNameWithTypeStep">
<grid id="807b" binding="myModulePanel" layout-manager="GridBagLayout">
<constraints>
<xy x="20" y="20" width="707" height="453"/>
<xy x="20" y="20" width="416" height="453"/>
</constraints>
<properties/>
<border type="none"/>
@@ -77,7 +77,7 @@
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<grid row="0" column="0" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
<gridbag weightx="0.0" weighty="0.0"/>
<gridbag weightx="1.0" weighty="0.0"/>
</constraints>
<properties/>
<border type="none"/>
@@ -19,6 +19,7 @@ import com.intellij.ide.BrowserUtil;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.highlighter.ModuleFileType;
import com.intellij.ide.util.BrowseFilesListener;
import com.intellij.ide.util.newProjectWizard.modes.CreateFromTemplateMode;
import com.intellij.ide.util.newProjectWizard.modes.WizardMode;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
import com.intellij.ide.util.projectWizard.ProjectWizardUtil;
@@ -55,7 +56,7 @@ import java.awt.event.MouseEvent;
import java.io.File;
import java.util.List;
public class ProjectNameWithModuleStep extends ProjectNameStep {
public class ProjectNameWithTypeStep extends ProjectNameStep {
private JEditorPane myModuleDescriptionPane;
private JList myTypesList;
protected JCheckBox myCreateModuleCb;
@@ -82,7 +83,7 @@ public class ProjectNameWithModuleStep extends ProjectNameStep {
private final StepSequence mySequence;
public ProjectNameWithModuleStep(final WizardContext wizardContext, StepSequence sequence, final WizardMode mode) {
public ProjectNameWithTypeStep(final WizardContext wizardContext, StepSequence sequence, final WizardMode mode) {
super(wizardContext, mode);
mySequence = sequence;
myAdditionalContentPanel.add(myModulePanel,
@@ -274,27 +275,34 @@ public class ProjectNameWithModuleStep extends ProjectNameStep {
}
}
final AnAction arrow = new AnAction() {
@Override
public void actionPerformed(AnActionEvent e) {
if (e.getInputEvent() instanceof KeyEvent) {
final int code = ((KeyEvent)e.getInputEvent()).getKeyCode();
if (!myCreateModuleCb.isSelected()) return;
int i = myTypesList.getSelectedIndex();
if (code == KeyEvent.VK_DOWN) {
if (++i == myTypesList.getModel().getSize()) return;
if (mode instanceof CreateFromTemplateMode) {
replaceModuleTypeOptions(new JPanel());
myHeader.setVisible(false);
}
else {
final AnAction arrow = new AnAction() {
@Override
public void actionPerformed(AnActionEvent e) {
if (e.getInputEvent() instanceof KeyEvent) {
final int code = ((KeyEvent)e.getInputEvent()).getKeyCode();
if (!myCreateModuleCb.isSelected()) return;
int i = myTypesList.getSelectedIndex();
if (code == KeyEvent.VK_DOWN) {
if (++i == myTypesList.getModel().getSize()) return;
}
else if (code == KeyEvent.VK_UP) {
if (--i == -1) return;
}
myTypesList.setSelectedIndex(i);
}
else if (code == KeyEvent.VK_UP) {
if (--i == -1) return;
}
myTypesList.setSelectedIndex(i);
}
}
};
final KeyboardShortcut up = new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), null);
final KeyboardShortcut down = new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), null);
arrow.registerCustomShortcutSet(new CustomShortcutSet(up, down), myNamePathComponent.getNameComponent());
arrow.registerCustomShortcutSet(new CustomShortcutSet(up, down), myModuleName);
};
final KeyboardShortcut up = new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), null);
final KeyboardShortcut down = new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), null);
arrow.registerCustomShortcutSet(new CustomShortcutSet(up, down), myNamePathComponent.getNameComponent());
arrow.registerCustomShortcutSet(new CustomShortcutSet(up, down), myModuleName);
}
}
private Dimension calcTypeListPreferredSize(final List<ModuleBuilder> allModuleTypes) {
@@ -20,7 +20,7 @@
*/
package com.intellij.ide.util.newProjectWizard.modes;
import com.intellij.ide.util.newProjectWizard.ProjectNameWithModuleStep;
import com.intellij.ide.util.newProjectWizard.ProjectNameWithTypeStep;
import com.intellij.ide.util.newProjectWizard.StepSequence;
import com.intellij.ide.util.projectWizard.EmptyModuleBuilder;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
@@ -54,7 +54,7 @@ public class CreateFromScratchMode extends WizardMode {
@Nullable
protected StepSequence createSteps(final WizardContext context, @NotNull final ModulesProvider modulesProvider) {
final StepSequence sequence = new StepSequence();
sequence.addCommonStep(new ProjectNameWithModuleStep(context, sequence, this));
sequence.addCommonStep(new ProjectNameWithTypeStep(context, sequence, this));
for (ModuleBuilder builder : ModuleBuilder.getAllBuilders()) {
addModuleBuilder(builder, context, modulesProvider, sequence);
}
@@ -15,7 +15,7 @@
*/
package com.intellij.ide.util.newProjectWizard.modes;
import com.intellij.ide.util.newProjectWizard.ProjectNameWithModuleStep;
import com.intellij.ide.util.newProjectWizard.ProjectNameWithTypeStep;
import com.intellij.ide.util.newProjectWizard.SelectTemplateStep;
import com.intellij.ide.util.newProjectWizard.StepSequence;
import com.intellij.ide.util.projectWizard.ProjectBuilder;
@@ -57,7 +57,7 @@ public class CreateFromTemplateMode extends WizardMode {
protected StepSequence createSteps(WizardContext context, @NotNull ModulesProvider modulesProvider) {
mySelectTemplateStep = new SelectTemplateStep(context);
StepSequence sequence = new StepSequence(mySelectTemplateStep);
sequence.addCommonStep(new ProjectNameWithModuleStep(context, sequence, this));
sequence.addCommonStep(new ProjectNameWithTypeStep(context, sequence, this));
return sequence;
}
@@ -22,12 +22,12 @@ import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.module.ModifiableModuleModel;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.module.ModuleWithNameAlreadyExists;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.io.StreamUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
@@ -35,14 +35,13 @@ import com.intellij.openapi.vfs.newvfs.RefreshQueue;
import com.intellij.platform.ProjectTemplate;
import com.intellij.platform.templates.github.ZipUtil;
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.net.URL;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
@@ -102,28 +101,30 @@ public class ArchivedProjectTemplate implements ProjectTemplate {
return null;
}
@Nullable
@NotNull
@Override
public List<Module> commit(Project project, ModifiableModuleModel model, ModulesProvider modulesProvider) {
final String path = myContext.getProjectFileDirectory();
public Module createModule(@NotNull ModifiableModuleModel moduleModel)
throws InvalidDataException, IOException, ModuleWithNameAlreadyExists, JDOMException, ConfigurationException {
final String path = getContentEntryPath();
String iml;
try {
File dir = new File(path);
ZipInputStream zipInputStream = getStream();
ZipUtil.unzip(ProgressManager.getInstance().getProgressIndicator(), dir, zipInputStream);
VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(dir);
RefreshQueue.getInstance().refresh(false, true, null, virtualFile);
iml = ContainerUtil.find(dir.list(), new Condition<String>() {
@Override
public boolean value(String s) {
return s.endsWith(".iml");
}
});
new File(path, iml).renameTo(new File(getModuleFilePath()));
RefreshQueue.getInstance().refresh(false, true, null, virtualFile);
}
catch (IOException e) {
throw new RuntimeException(e);
}
return ImportImlMode.setUpLoader(path + "/" + iml).commit(project, model, modulesProvider);
return ImportImlMode.setUpLoader(getModuleFilePath()).createModule(moduleModel);
}
};
}
@@ -30,8 +30,8 @@ import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.NullableComputable;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
@@ -236,7 +236,7 @@ public abstract class ModuleBuilder extends ProjectBuilder{
if (myModuleFilePath == null) {
myModuleFilePath = project.getBaseDir().getPath() + File.separator + myName + ModuleFileType.DOT_DEFAULT_EXTENSION;
}
Exception ex = ApplicationManager.getApplication().runWriteAction(new Computable<Exception>() {
Exception ex = ApplicationManager.getApplication().runWriteAction(new NullableComputable<Exception>() {
@Override
public Exception compute() {
try {
@@ -249,7 +249,7 @@ public abstract class ModuleBuilder extends ProjectBuilder{
}
});
if (ex != null) {
LOG.info(ex);
LOG.warn(ex);
Messages.showErrorDialog(IdeBundle.message("error.adding.module.to.project", ex.getMessage()), IdeBundle.message("title.add.module"));
}
}