mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
creating module from template
This commit is contained in:
+3
-3
@@ -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"/>
|
||||
+29
-21
@@ -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) {
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
|
||||
+2
-2
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user