package com.intellij.lang.javascript.flex.artifacts; import com.intellij.flex.model.bc.OutputType; import com.intellij.flex.model.bc.TargetPlatform; import com.intellij.lang.javascript.flex.FlexModuleType; import com.intellij.lang.javascript.flex.projectStructure.FlexBuildConfigurationsExtension; import com.intellij.lang.javascript.flex.projectStructure.model.FlexBuildConfiguration; import com.intellij.lang.javascript.flex.projectStructure.model.impl.FlexProjectConfigurationEditor; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleType; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.ui.ArtifactEditorContext; import com.intellij.packaging.ui.PackagingSourceItem; import com.intellij.packaging.ui.PackagingSourceItemsProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; public class FlashPackagingSourceItemsProvider extends PackagingSourceItemsProvider { @NotNull public Collection<? extends PackagingSourceItem> getSourceItems(final @NotNull ArtifactEditorContext editorContext, final @NotNull Artifact artifact, final @Nullable PackagingSourceItem parent) { if (parent == null) { return createFlashModuleSourceItems(editorContext); } else if (parent instanceof FlashModuleSourceItem) { return createFlashBCOutputSourceItems(((FlashModuleSourceItem)parent).getModule()); } return Collections.emptyList(); } private static Collection<? extends PackagingSourceItem> createFlashModuleSourceItems(final ArtifactEditorContext editorContext) { final List<PackagingSourceItem> result = new ArrayList<>(); for (Module module : editorContext.getModulesProvider().getModules()) { if (ModuleType.get(module) == FlexModuleType.getInstance()) { result.add(new FlashModuleSourceItem(module)); } } return result; } private static Collection<? extends PackagingSourceItem> createFlashBCOutputSourceItems(final Module module) { final List<PackagingSourceItem> result = new ArrayList<>(); int orderNumber = 0; final FlexProjectConfigurationEditor configEditor = FlexBuildConfigurationsExtension.getInstance().getConfigurator().getConfigEditor(); assert configEditor != null; // because Project Structure is open for (FlexBuildConfiguration bc : configEditor.getConfigurations(module)) { final String outputFilePath = bc.getActualOutputFilePath().toLowerCase(); if (!outputFilePath.endsWith(".swf") && !outputFilePath.endsWith(".swc")) { continue; // BC is not configured properly yet } result.add(new FlashBCOutputSourceItem(bc, FlashBCOutputSourceItem.Type.OutputFile, orderNumber++)); if (bc.getOutputType() == OutputType.Application && bc.getTargetPlatform() == TargetPlatform.Web && bc.isUseHtmlWrapper()) { result.add(new FlashBCOutputSourceItem(bc, FlashBCOutputSourceItem.Type.OutputFileAndHtmlWrapper, orderNumber++)); } result.add(new FlashBCOutputSourceItem(bc, FlashBCOutputSourceItem.Type.OutputFolderContents, orderNumber++)); } return result; } }