blob: 1724beb035d3f1737823e9a57b71db68ffa9f754 [file] [log] [blame]
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;
}
}