Importing for Flex & Eclipse

(cherry picked from commit d487dc2f5ba630dba8d5ffa0de93614963c04b28)
This commit is contained in:
Dmitry Avdeev
2012-11-30 14:39:26 +04:00
parent b144bfa85d
commit bc52e3cbfa
10 changed files with 94 additions and 16 deletions
@@ -21,7 +21,6 @@ import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.fileChooser.FileChooserDialog;
import com.intellij.openapi.fileChooser.FileChooserFactory;
import com.intellij.openapi.module.Module;
@@ -80,7 +79,12 @@ public class ImportModuleAction extends AnAction {
@Nullable
public static AddModuleWizard selectFileAndCreateWizard(final Project project, Component dialogParent) {
FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFileOrFolderDescriptor();
FileChooserDescriptor descriptor = new OpenProjectFileChooserDescriptor(true) {
@Override
public boolean isFileSelectable(VirtualFile file) {
return file.isDirectory() || isProjectFile(file);
}
};
descriptor.setTitle("Select File or Directory to Import");
ProjectImportProvider[] providers = ProjectImportProvider.PROJECT_IMPORT_PROVIDER.getExtensions();
String description = getFileChooserDescription(project);
@@ -104,29 +108,23 @@ public class ImportModuleAction extends AnAction {
return project != null || provider.canCreateNewProject();
}
});
StringBuilder builder = new StringBuilder("<html>Select");
StringBuilder builder = new StringBuilder("<html>Select ");
boolean first = true;
if (list.size() > 1) {
for (ProjectImportProvider provider : list) {
String sample = provider.getFileSample();
if (sample != null) {
if (!first) {
builder.append(',');
builder.append(", <br>");
}
else {
first = false;
}
builder.append(" <b>").append(sample).append("</b>");
if (sample.contains("*")) {
builder.append(" file");
}
builder.append(sample);
}
}
}
if (!first) {
builder.append(" or");
}
builder.append(" directory with <b>existing sources</b> to be imported.</html>");
builder.append(".</html>");
return builder.toString();
}
@@ -21,6 +21,7 @@ import com.intellij.ide.util.projectWizard.importSources.impl.ProjectFromSources
import com.intellij.openapi.roots.ui.configuration.DefaultModulesProvider;
import com.intellij.projectImport.ProjectImportBuilder;
import com.intellij.projectImport.ProjectImportProvider;
import org.jetbrains.annotations.Nullable;
/**
* @author Dmitry Avdeev
@@ -43,4 +44,10 @@ public class ImportFromSourcesProvider extends ProjectImportProvider {
mode.addSteps(context, DefaultModulesProvider.createForProject(context.getProject()), sequence, getName());
myBuilder = (ProjectImportBuilder)mode.getModuleBuilder();
}
@Nullable
@Override
public String getFileSample() {
return "directory with <b>existing sources</b>";
}
}
@@ -53,6 +53,6 @@ public class ModuleImportProvider extends ProjectImportProvider {
@Nullable
@Override
public String getFileSample() {
return "*.iml";
return "Intellij IDEA module file (*.iml)";
}
}
@@ -26,6 +26,7 @@ import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import org.intellij.lang.annotations.Language;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -97,6 +98,7 @@ public abstract class ProjectImportProvider {
}
@Nullable
@Language("HTML")
public String getFileSample() {
return null;
}
@@ -23,11 +23,17 @@ package org.jetbrains.idea.eclipse.importWizard;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.projectImport.ProjectImportProvider;
import org.jetbrains.annotations.Nullable;
public class EclipseProjectImportProvider extends ProjectImportProvider {
private final EclipseProjectOpenProcessor myProcessor;
public EclipseProjectImportProvider(final EclipseImportBuilder builder) {
super(builder);
myProcessor = new EclipseProjectOpenProcessor(builder);
}
public ModuleWizardStep[] createSteps(WizardContext context) {
@@ -35,4 +41,15 @@ public class EclipseProjectImportProvider extends ProjectImportProvider {
return new ModuleWizardStep[]{new EclipseWorkspaceRootStep(context), new SelectEclipseImportedProjectsStep(context),
stepFactory.createProjectJdkStep(context)/*, stepFactory.createNameAndLocationStep(context)*/};
}
@Override
protected boolean canImportFromFile(VirtualFile file) {
return myProcessor.canOpenProject(file);
}
@Nullable
@Override
public String getFileSample() {
return "<b>Eclipse</b> project (.project) or classpath (.classpath) file";
}
}
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path=""/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path=""/>
</classpath>
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>root</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -17,10 +17,14 @@ package org.jetbrains.idea.eclipse;
import com.intellij.ide.projectWizard.ProjectWizardTestCase;
import com.intellij.ide.util.projectWizard.ImportFromSourcesProvider;
import com.intellij.openapi.application.PluginPathManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.idea.eclipse.importWizard.EclipseImportBuilder;
import org.jetbrains.idea.eclipse.importWizard.EclipseProjectImportProvider;
import java.io.File;
import java.io.IOException;
/**
* @author Dmitry Avdeev
@@ -28,6 +32,32 @@ import java.io.File;
*/
public class EclipseImportWizardTest extends ProjectWizardTestCase {
public void testImportProject() throws Exception {
Module module = doTest(".project");
assertEquals("root", module.getName());
}
public void testImportClasspath() throws Exception {
Module module = doTest(".classpath");
assertEquals("root", module.getName());
}
public void testImportFromDirectory() throws Exception {
Module module = doTest("");
assertEquals("root", module.getName());
}
private Module doTest(final String fileName) throws IOException {
copyTestData();
return importProjectFrom(getProject().getBaseDir().getPath() + "/" + fileName, null,
new EclipseProjectImportProvider(new EclipseImportBuilder()));
}
private void copyTestData() throws IOException {
final File testRoot = new File(PluginPathManager.getPluginHomePath("eclipse") + "/testData", "import");
FileUtil.copyDir(testRoot, new File(getProject().getBaseDir().getPath()));
}
public void testNothingToImport() throws Exception {
try {
File file = createTempFile("Foo.java", "class Foo {}");
@@ -38,6 +38,6 @@ public class GradleProjectImportProvider extends ProjectImportProvider {
@Nullable
@Override
public String getFileSample() {
return "*.gradle";
return "<b>Gradle</b> build script (*.gradle)";
}
}
@@ -24,6 +24,7 @@ import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.projectImport.ProjectImportProvider;
@@ -49,7 +50,7 @@ public class MavenProjectImportProvider extends ProjectImportProvider {
VirtualFile root = ((MavenProjectBuilder)getBuilder()).getRootDirectory();
if (root != null) {
final String relPath = VfsUtilCore.getRelativePath(project.getDirectoryFile(), root, File.separatorChar);
if (relPath.length() != 0) {
if (StringUtil.isNotEmpty(relPath)) {
stringBuilder.append(" [").append(relPath).append("]");
}
}
@@ -88,6 +89,6 @@ public class MavenProjectImportProvider extends ProjectImportProvider {
@Nullable
@Override
public String getFileSample() {
return "pom.xml";
return "<b>Maven</b> project file (pom.xml)";
}
}