package com.intellij.lang.javascript.flex.actions.airpackage; import com.intellij.lang.javascript.flex.actions.ExternalTask; import com.intellij.lang.javascript.flex.build.FlexCompilationUtils; import com.intellij.lang.javascript.flex.projectStructure.model.*; import com.intellij.lang.javascript.flex.run.FlexBaseRunner; import com.intellij.lang.javascript.flex.sdk.FlexSdkUtils; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.PathUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Set; import static com.intellij.lang.javascript.flex.projectStructure.model.AirPackagingOptions.FilePathAndPathInPackage; public abstract class AdtTask extends ExternalTask { public AdtTask(Project project, Sdk flexSdk) { super(project, flexSdk); } @Override protected List<String> createCommandLine() { final List<String> command = FlexSdkUtils.getCommandLineForSdkTool(myProject, myFlexSdk, null, "com.adobe.air.ADT", "adt.jar"); appendAdtOptions(command); return command; } protected abstract void appendAdtOptions(final List<String> command); public static void appendSigningOptions(final List<String> command, final AirPackagingOptions packagingOptions, final String keystorePassword, final String keyPassword) { final AirSigningOptions signingOptions = packagingOptions.getSigningOptions(); final boolean tempCertificate = !(packagingOptions instanceof IosPackagingOptions) && signingOptions.isUseTempCertificate(); if (!tempCertificate && !signingOptions.getKeyAlias().isEmpty()) { command.add("-alias"); command.add(signingOptions.getKeyAlias()); } command.add("-storetype"); command.add(tempCertificate ? "PKCS12" : signingOptions.getKeystoreType()); command.add("-keystore"); command.add(FileUtil.toSystemDependentName(tempCertificate ? AirPackageUtil.getTempKeystorePath() : signingOptions.getKeystorePath())); command.add("-storepass"); command.add(tempCertificate ? AirPackageUtil.TEMP_KEYSTORE_PASSWORD : keystorePassword); if (tempCertificate) { if (packagingOptions instanceof AirDesktopPackagingOptions) { command.add("-tsa"); command.add("none"); } } else { if (!signingOptions.getKeyAlias().isEmpty() && !keyPassword.isEmpty()) { command.add("-keypass"); command.add(keyPassword); } if (!signingOptions.getProvider().isEmpty()) { command.add("-providerName"); command.add(signingOptions.getProvider()); } if (!signingOptions.getTsa().isEmpty()) { command.add("-tsa"); command.add(signingOptions.getTsa()); } } } public static void appendPaths(final List<String> command, final Module module, final FlexBuildConfiguration bc, final AirPackagingOptions packagingOptions, final @Nullable String platformSdkPath, final String packageFileExtension) { final String outputFilePath = bc.getActualOutputFilePath(); final String outputFolder = PathUtil.getParentPath(outputFilePath); command.add(FileUtil.toSystemDependentName(outputFolder + "/" + packagingOptions.getPackageFileName() + packageFileExtension)); command.add(FileUtil.toSystemDependentName(FlexBaseRunner.getAirDescriptorPath(bc, packagingOptions))); if (platformSdkPath != null && !platformSdkPath.isEmpty()) { command.add("-platformsdk"); command.add(FileUtil.toSystemDependentName(platformSdkPath)); } appendANEPaths(command, module, bc); command.add("-C"); command.add(FileUtil.toSystemDependentName(outputFolder)); command.add(FileUtil.toSystemDependentName(PathUtil.getFileName(outputFilePath))); for (FilePathAndPathInPackage entry : packagingOptions.getFilesToPackage()) { final String fullPath = FileUtil.toSystemIndependentName(entry.FILE_PATH.trim()); String relPathInPackage = FileUtil.toSystemIndependentName(entry.PATH_IN_PACKAGE.trim()); relPathInPackage = StringUtil.trimStart(relPathInPackage, "/"); final String pathEnd = "/" + relPathInPackage; if (fullPath.endsWith(pathEnd)) { command.add("-C"); command.add(FileUtil.toSystemDependentName(fullPath.substring(0, fullPath.length() - pathEnd.length()))); command.add(FileUtil.toSystemDependentName(relPathInPackage)); } else if (".".equals(relPathInPackage)) { command.add("-C"); command.add(FileUtil.toSystemDependentName(fullPath)); command.add(FileUtil.toSystemDependentName(".")); } else { command.add("-e"); command.add(FileUtil.toSystemDependentName(fullPath)); command.add(relPathInPackage); } } } private static void appendANEPaths(final List<String> command, final Module module, final FlexBuildConfiguration bc) { final Set<VirtualFile> extDirPaths = new THashSet<>(); for (VirtualFile aneFile : FlexCompilationUtils.getANEFiles(ModuleRootManager.getInstance(module), bc.getDependencies())) { if (extDirPaths.add(aneFile.getParent())) { command.add("-extdir"); command.add(FileUtil.toSystemDependentName(aneFile.getParent().getPath())); } } } }