blob: 49dd257f824b3454e98bfe13d0b4fa3eb76b3bfe [file] [log] [blame]
package org.jetbrains.android.compiler.artifact;
import com.intellij.CommonBundle;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ui.configuration.ChooseModulesDialog;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Ref;
import com.intellij.packaging.artifacts.Artifact;
import com.intellij.packaging.artifacts.ArtifactManager;
import com.intellij.packaging.elements.PackagingElementResolvingContext;
import com.intellij.packaging.impl.artifacts.ArtifactUtil;
import com.intellij.packaging.ui.ArtifactEditorContext;
import com.intellij.util.Processor;
import com.intellij.util.containers.HashMap;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author Eugene.Kudelevsky
*/
public class AndroidArtifactUtil {
private AndroidArtifactUtil() {
}
public static boolean containsAndroidPackage(ArtifactEditorContext editorContext, Artifact artifact) {
return !ArtifactUtil
.processPackagingElements(artifact, AndroidFinalPackageElementType.getInstance(), new Processor<AndroidFinalPackageElement>() {
@Override
public boolean process(AndroidFinalPackageElement e) {
return false;
}
}, editorContext, true);
}
public static boolean isRelatedArtifact(@NotNull Artifact artifact, @NotNull Module module) {
if (!(artifact.getArtifactType() instanceof AndroidApplicationArtifactType)) {
return false;
}
final AndroidFacet facet = getPackagedFacet(module.getProject(), artifact);
return facet != null && module.equals(facet.getModule());
}
@Nullable
public static AndroidFacet getPackagedFacet(Project project, Artifact artifact) {
final Ref<AndroidFinalPackageElement> elementRef = Ref.create(null);
final PackagingElementResolvingContext resolvingContext = ArtifactManager.getInstance(project).getResolvingContext();
ArtifactUtil
.processPackagingElements(artifact, AndroidFinalPackageElementType.getInstance(), new Processor<AndroidFinalPackageElement>() {
@Override
public boolean process(AndroidFinalPackageElement e) {
elementRef.set(e);
return false;
}
}, resolvingContext, true);
final AndroidFinalPackageElement element = elementRef.get();
return element != null ? element.getFacet() : null;
}
@Nullable
public static AndroidFacet chooseAndroidApplicationModule(@NotNull Project project,
@NotNull List<AndroidFacet> facets) {
final Map<Module, AndroidFacet> map = new HashMap<Module, AndroidFacet>();
for (AndroidFacet facet : facets) {
map.put(facet.getModule(), facet);
}
String message = "Selected Android application module will be included in the created artifact with all dependencies";
final ChooseModulesDialog dialog = new ChooseModulesDialog(project, new ArrayList<Module>(map.keySet()), "Select Module", message);
dialog.setSingleSelectionMode();
dialog.show();
final List<Module> selected = dialog.getChosenElements();
if (selected.isEmpty()) {
return null;
}
assert selected.size() == 1;
final Module module = selected.get(0);
final String moduleName = module.getName();
final AndroidFacet facet = map.get(module);
if (facet == null) {
message = "Cannot find Android facet for module " + moduleName;
Messages.showErrorDialog(project, message, CommonBundle.getErrorTitle());
return null;
}
return facet;
}
}