IDEA-109705 Gradle: on pressing "Attach Project" button in Gradle tool window, general "Select File or Directory to Import" dialog appears, and it allows to import whichever project (ant, maven, etc.)

This commit is contained in:
Denis.Zhdanov
2013-06-28 12:28:10 +04:00
parent ac19624328
commit d3136a73d3
4 changed files with 44 additions and 5 deletions

View File

@@ -35,6 +35,7 @@ import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.projectImport.ProjectImportProvider;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -106,6 +107,15 @@ public class ImportModuleAction extends AnAction {
String description = getFileChooserDescription(project);
descriptor.setDescription(description);
return selectFileAndCreateWizard(project, dialogParent, descriptor, providers);
}
@Nullable
public static AddModuleWizard selectFileAndCreateWizard(final Project project,
@Nullable Component dialogParent,
@NotNull FileChooserDescriptor descriptor,
ProjectImportProvider[] providers)
{
FileChooserDialog chooser = FileChooserFactory.getInstance().createFileChooser(descriptor, project, dialogParent);
VirtualFile toSelect = null;
String lastLocation = PropertiesComponent.getInstance().getValue(LAST_IMPORTED_LOCATION);
@@ -151,7 +161,7 @@ public class ImportModuleAction extends AnAction {
}
public static AddModuleWizard createImportWizard(final Project project,
Component dialogParent,
@Nullable Component dialogParent,
final VirtualFile file,
ProjectImportProvider... providers) {
List<ProjectImportProvider> available = ContainerUtil.filter(providers, new Condition<ProjectImportProvider>() {

View File

@@ -17,17 +17,20 @@ package com.intellij.openapi.externalSystem.action;
import com.intellij.icons.AllIcons;
import com.intellij.ide.actions.ImportModuleAction;
import com.intellij.ide.util.newProjectWizard.AddModuleWizard;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.externalSystem.ExternalSystemManager;
import com.intellij.openapi.externalSystem.model.ExternalSystemDataKeys;
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
import com.intellij.openapi.externalSystem.service.project.wizard.AbstractExternalProjectImportProvider;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.SystemInfoRt;
import com.intellij.projectImport.ProjectImportProvider;
/**
* @author Denis Zhdanov
@@ -61,7 +64,23 @@ public class AttachExternalProjectAction extends AnAction implements DumbAware {
if (project == null) {
return;
}
ProjectImportProvider[] providers = new ProjectImportProvider[1];
for (ProjectImportProvider provider : ProjectImportProvider.PROJECT_IMPORT_PROVIDER.getExtensions()) {
if (provider instanceof AbstractExternalProjectImportProvider
&& externalSystemId.equals(((AbstractExternalProjectImportProvider)provider).getExternalSystemId()))
{
providers[0] = provider;
break;
}
}
if (providers[0] == null) {
return;
}
ImportModuleAction.doImport(project);
AddModuleWizard wizard = ImportModuleAction.selectFileAndCreateWizard(project, null, manager.getExternalProjectDescriptor(), providers);
if (wizard != null) {
ImportModuleAction.createFromWizard(project, wizard);
}
}
}

View File

@@ -2,9 +2,11 @@ package com.intellij.openapi.externalSystem.service.project.wizard;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.projectImport.ProjectImportBuilder;
import com.intellij.projectImport.ProjectImportProvider;
import org.jetbrains.annotations.NotNull;
/**
* Provides 'import from external model' functionality.
@@ -13,9 +15,17 @@ import com.intellij.projectImport.ProjectImportProvider;
* @since 7/29/11 3:45 PM
*/
public abstract class AbstractExternalProjectImportProvider extends ProjectImportProvider {
public AbstractExternalProjectImportProvider(ProjectImportBuilder builder) {
@NotNull private final ProjectSystemId myExternalSystemId;
public AbstractExternalProjectImportProvider(ProjectImportBuilder builder, @NotNull ProjectSystemId externalSystemId) {
super(builder);
myExternalSystemId = externalSystemId;
}
@NotNull
public ProjectSystemId getExternalSystemId() {
return myExternalSystemId;
}
@Override

View File

@@ -27,7 +27,7 @@ import org.jetbrains.plugins.gradle.util.GradleConstants;
public class GradleProjectImportProvider extends AbstractExternalProjectImportProvider {
public GradleProjectImportProvider(GradleProjectImportBuilder builder) {
super(builder);
super(builder, GradleConstants.SYSTEM_ID);
}
@Override