package org.jetbrains.android.compiler.artifact; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.elements.CompositePackagingElement; import com.intellij.packaging.elements.PackagingElement; import com.intellij.packaging.elements.PackagingElementType; import com.intellij.packaging.ui.ArtifactEditorContext; import icons.AndroidIcons; import org.jetbrains.android.facet.AndroidFacet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @author Eugene.Kudelevsky */ public class AndroidFinalPackageElementType extends PackagingElementType<AndroidFinalPackageElement> { @NonNls public static final String TYPE_ID = "android-final-package"; protected AndroidFinalPackageElementType() { super(TYPE_ID, "Android Final Package"); } public static AndroidFinalPackageElementType getInstance() { return getInstance(AndroidFinalPackageElementType.class); } @Override public Icon getCreateElementIcon() { return AndroidIcons.Android; } @Override public boolean canCreate(@NotNull ArtifactEditorContext context, @NotNull Artifact artifact) { return getAndroidApplicationFacets(context, context.getModulesProvider().getModules()).size() > 0 && !AndroidArtifactUtil.containsAndroidPackage(context, artifact); } @NotNull private static List<AndroidFacet> getAndroidApplicationFacets(@NotNull ArtifactEditorContext context, @NotNull Module[] modules) { final List<AndroidFacet> result = new ArrayList<AndroidFacet>(); for (Module module : modules) { for (AndroidFacet facet : context.getFacetsProvider().getFacetsByType(module, AndroidFacet.ID)) { if (!facet.isLibraryProject()) { result.add(facet); } } } return result; } @NotNull @Override public List<? extends PackagingElement<?>> chooseAndCreate(@NotNull ArtifactEditorContext context, @NotNull Artifact artifact, @NotNull CompositePackagingElement<?> parent) { final List<AndroidFacet> facets = getAndroidApplicationFacets(context, context.getModulesProvider().getModules()); final AndroidFacet facet = AndroidArtifactUtil.chooseAndroidApplicationModule(context.getProject(), facets); if (facet == null) { return Collections.emptyList(); } return Collections.singletonList(new AndroidFinalPackageElement(context.getProject(), facet)); } @NotNull @Override public AndroidFinalPackageElement createEmpty(@NotNull Project project) { return new AndroidFinalPackageElement(project, null); } }