| package org.jetbrains.android.importDependencies; |
| |
| import com.intellij.openapi.application.ApplicationManager; |
| import com.intellij.openapi.module.Module; |
| import com.intellij.openapi.module.ModuleManager; |
| import com.intellij.openapi.module.ModuleWithNameAlreadyExists; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.util.Computable; |
| import com.intellij.openapi.util.InvalidDataException; |
| import com.intellij.openapi.util.io.FileUtil; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import org.jdom.JDOMException; |
| import org.jetbrains.android.facet.AndroidFacet; |
| import org.jetbrains.android.sdk.AndroidSdkUtils; |
| import org.jetbrains.android.util.AndroidBundle; |
| import org.jetbrains.android.util.AndroidUtils; |
| import org.jetbrains.annotations.NotNull; |
| |
| import java.io.File; |
| import java.io.IOException; |
| |
| /** |
| * @author Eugene.Kudelevsky |
| */ |
| class ImportModuleTask extends ModuleProvidingTask { |
| private final Project myProject; |
| private final String myModuleFilePath; |
| private final VirtualFile myContentRoot; |
| |
| public ImportModuleTask(@NotNull Project project, |
| @NotNull String moduleFilePath, |
| @NotNull VirtualFile contentRoot) { |
| myModuleFilePath = moduleFilePath; |
| myContentRoot = contentRoot; |
| myProject = project; |
| } |
| |
| @Override |
| public Exception perform() { |
| final Module[] moduleWrapper = {null}; |
| final Exception exception = ApplicationManager.getApplication().runWriteAction(new Computable<Exception>() { |
| @Override |
| public Exception compute() { |
| try { |
| moduleWrapper[0] = ModuleManager.getInstance(myProject).loadModule(myModuleFilePath); |
| } |
| catch (InvalidDataException e) { |
| return e; |
| } |
| catch (IOException e) { |
| return e; |
| } |
| catch (JDOMException e) { |
| return e; |
| } |
| catch (ModuleWithNameAlreadyExists e) { |
| return e; |
| } |
| return null; |
| } |
| }); |
| |
| if (exception != null) { |
| return exception; |
| } |
| assert moduleWrapper[0] != null; |
| if (AndroidFacet.getInstance(moduleWrapper[0]) == null) { |
| AndroidUtils.addAndroidFacetInWriteAction(moduleWrapper[0], myContentRoot, true); |
| } |
| AndroidSdkUtils.setupAndroidPlatformIfNecessary(moduleWrapper[0], false); |
| setDepModule(moduleWrapper[0]); |
| return null; |
| } |
| |
| @NotNull |
| @Override |
| public String getTitle() { |
| return AndroidBundle |
| .message("android.import.dependencies.import.module.task.title", getModuleName(), FileUtil.toSystemDependentName(myModuleFilePath)); |
| } |
| |
| @Override |
| public String getModuleName() { |
| return FileUtil.getNameWithoutExtension(new File(myModuleFilePath).getName()); |
| } |
| |
| @NotNull |
| @Override |
| public VirtualFile getContentRoot() { |
| return myContentRoot; |
| } |
| |
| @Override |
| public boolean equals(Object o) { |
| if (this == o) return true; |
| if (o == null || getClass() != o.getClass()) return false; |
| |
| ImportModuleTask that = (ImportModuleTask)o; |
| |
| if (!myContentRoot.equals(that.myContentRoot)) return false; |
| if (!myModuleFilePath.equals(that.myModuleFilePath)) return false; |
| if (!myProject.equals(that.myProject)) return false; |
| |
| return true; |
| } |
| |
| @Override |
| public int hashCode() { |
| int result = myProject.hashCode(); |
| result = 31 * result + myModuleFilePath.hashCode(); |
| result = 31 * result + myContentRoot.hashCode(); |
| return result; |
| } |
| } |