package com.intellij.lang.javascript.flex.flashbuilder; import com.intellij.flex.model.bc.OutputType; import com.intellij.flex.model.bc.TargetPlatform; import com.intellij.lang.javascript.flex.FlexBundle; import com.intellij.openapi.util.Pair; import gnu.trove.THashMap; import gnu.trove.THashSet; import java.util.*; public class FlashBuilderProject { private String myName = FlexBundle.message("unnamed"); private Map<String, String> myLinkedResources = new THashMap<>(); private Set<String> myUsedPathVariables = new THashSet<>(); private String myProjectRootPath = ""; private Collection<String> mySourcePaths = new ArrayList<>(); private String myOutputFolderPath = ""; private boolean mySdkUsed; private String mySdkName = FlashBuilderSdkFinder.DEFAULT_SDK_NAME; private TargetPlatform myTargetPlatform = TargetPlatform.Web; private boolean myPureActionScript = false; private boolean myAirSdk = false; private OutputType myOutputType = OutputType.Application; private boolean myAndroidSupported = false; private boolean myIosSupported = false; private String myDesktopCertPath; private String myAndroidCertPath; private String myIOSCertPath; private String myIOSProvisioningPath; private String myMainAppClassName = ""; private Collection<String> myApplicationClassNames = new ArrayList<>(); private String myTargetPlayerVersion; private String myAdditionalCompilerOptions = ""; private boolean myUseHtmlWrapper = false; private Map<String, Collection<String>> myLibraryPathsAndSources = new LinkedHashMap<>(); private Collection<Pair<String, String>> myNamespacesAndManifestPaths = new ArrayList<>(1); private Collection<String> myFilesIncludedInSwc = new ArrayList<>(); private Collection<FBRLMInfo> myModules = new ArrayList<>(); private Collection<String> myCssFilesToCompile = new ArrayList<>(); private Collection<String> myPathsExcludedFromDesktopPackaging = new ArrayList<>(); private Collection<String> myPathsExcludedFromAndroidPackaging = new ArrayList<>(); private Collection<String> myPathsExcludedFromIOSPackaging = new ArrayList<>(); private String myThemeDirPathRaw; public static class FBRLMInfo { public final String MAIN_CLASS_PATH; public final String OUTPUT_PATH; public final boolean OPTIMIZE; public final String OPTIMIZE_FOR; public FBRLMInfo(final String mainClassPath, final String outputPath, final boolean optimize, final String optimizeFor) { this.MAIN_CLASS_PATH = mainClassPath; this.OUTPUT_PATH = outputPath; this.OPTIMIZE = optimize; this.OPTIMIZE_FOR = optimizeFor; } } FlashBuilderProject() { } public String getName() { return myName; } public void setName(final String name) { myName = name; } public void addLinkedResource(final String linkName, final String linkLocation) { myLinkedResources.put(linkName, linkLocation); } public Map<String, String> getLinkedResources() { return myLinkedResources; } public String getProjectRootPath() { return myProjectRootPath; } public void setProjectRootPath(final String projectRootPath) { myProjectRootPath = projectRootPath; } public Collection<String> getSourcePaths() { return mySourcePaths; } public void addSourcePath(final String sourcePath) { checkIfPathMacroUsed(sourcePath); mySourcePaths.add(sourcePath); } public String getOutputFolderPath() { return myOutputFolderPath; } public void setOutputFolderPath(final String outputFolderPath) { checkIfPathMacroUsed(outputFolderPath); myOutputFolderPath = outputFolderPath; } public boolean isSdkUsed() { return mySdkUsed; } public void setSdkUsed(boolean sdkUsed) { mySdkUsed = sdkUsed; } public String getSdkName() { return mySdkName; } public void setSdkName(final String sdkName) { mySdkName = sdkName; } public TargetPlatform getTargetPlatform() { return myTargetPlatform; } public void setTargetPlatform(final TargetPlatform targetPlatform) { myTargetPlatform = targetPlatform; } public boolean isPureActionScript() { return myPureActionScript; } public void setPureActionScript(final boolean pureActionScript) { myPureActionScript = pureActionScript; } public boolean isAirSdk() { return myAirSdk; } public void setAirSdk(final boolean airSdk) { myAirSdk = airSdk; } public OutputType getOutputType() { return myOutputType; } public void setOutputType(final OutputType outputType) { myOutputType = outputType; } public boolean isAndroidSupported() { return myAndroidSupported; } public void setAndroidSupported(final boolean androidSupported) { myAndroidSupported = androidSupported; } public boolean isIosSupported() { return myIosSupported; } public void setIosSupported(final boolean iosSupported) { myIosSupported = iosSupported; } public String getDesktopCertPath() { return myDesktopCertPath; } public void setDesktopCertPath(final String desktopCertPath) { myDesktopCertPath = desktopCertPath; } public String getAndroidCertPath() { return myAndroidCertPath; } public void setAndroidCertPath(final String androidCertPath) { myAndroidCertPath = androidCertPath; } public String getIOSCertPath() { return myIOSCertPath; } public void setIOSCertPath(final String iOSCertPath) { myIOSCertPath = iOSCertPath; } public String getIOSProvisioningPath() { return myIOSProvisioningPath; } public void setIOSProvisioningPath(final String IOSProvisioningPath) { myIOSProvisioningPath = IOSProvisioningPath; } public String getMainAppClassName() { return myMainAppClassName; } public void addApplicationClassName(final String className) { if (!className.equals(myMainAppClassName)) { myApplicationClassNames.add(className); } } public Collection<String> getApplicationClassNames() { return myApplicationClassNames; } public void setMainAppClassName(final String mainClassName) { myMainAppClassName = mainClassName; } public String getTargetPlayerVersion() { return myTargetPlayerVersion; } public void setTargetPlayerVersion(final String targetPlayerVersion) { myTargetPlayerVersion = targetPlayerVersion; } public String getAdditionalCompilerOptions() { return myAdditionalCompilerOptions; } public void setAdditionalCompilerOptions(final String additionalCompilerOptions) { myAdditionalCompilerOptions = additionalCompilerOptions; } public boolean isUseHtmlWrapper() { return myUseHtmlWrapper; } public void setUseHtmlWrapper(final boolean useHtmlWrapper) { myUseHtmlWrapper = useHtmlWrapper; } public Collection<String> getLibraryPaths() { return myLibraryPathsAndSources.keySet(); } public Collection<String> getLibrarySourcePaths(final String libraryPath) { return myLibraryPathsAndSources.get(libraryPath); } public void addLibraryPathAndSources(final String libraryPath, final Collection<String> sourcePathsForLibrary) { checkIfPathMacroUsed(libraryPath); for (final String path : sourcePathsForLibrary) { checkIfPathMacroUsed(path); } myLibraryPathsAndSources.put(libraryPath, sourcePathsForLibrary); } public Set<String> getUsedPathVariables() { return myUsedPathVariables; } public void addNamespaceAndManifestPath(final String namespace, final String manifestPath) { checkIfPathMacroUsed(manifestPath); myNamespacesAndManifestPaths.add(Pair.create(namespace, manifestPath)); } public Collection<Pair<String, String>> getNamespacesAndManifestPaths() { return myNamespacesAndManifestPaths; } public void addFileIncludedInSwc(final String path) { myFilesIncludedInSwc.add(path); } public Collection<String> getFilesIncludedInSwc() { return myFilesIncludedInSwc; } public void addModule(final FBRLMInfo rlmInfo) { checkIfPathMacroUsed(rlmInfo.MAIN_CLASS_PATH); checkIfPathMacroUsed(rlmInfo.OUTPUT_PATH); checkIfPathMacroUsed(rlmInfo.OPTIMIZE_FOR); myModules.add(rlmInfo); } public Collection<FBRLMInfo> getModules() { return myModules; } public void addCssFileToCompile(final String cssFilePath) { checkIfPathMacroUsed(cssFilePath); myCssFilesToCompile.add(cssFilePath); } public Collection<String> getCssFilesToCompile() { return myCssFilesToCompile; } public void addPathExcludedFromDesktopPackaging(final String path) { myPathsExcludedFromDesktopPackaging.add(path); } public Collection<String> getPathsExcludedFromDesktopPackaging() { return myPathsExcludedFromDesktopPackaging; } public void addPathExcludedFromAndroidPackaging(final String path) { myPathsExcludedFromAndroidPackaging.add(path); } public Collection<String> getPathsExcludedFromAndroidPackaging() { return myPathsExcludedFromAndroidPackaging; } public void addPathExcludedFromIOSPackaging(final String path) { myPathsExcludedFromIOSPackaging.add(path); } public Collection<String> getPathsExcludedFromIOSPackaging() { return myPathsExcludedFromIOSPackaging; } public void setThemeDirPathRaw(final String themeDirPathRaw) { // do not check path macro usage - there's a special macros always myThemeDirPathRaw = themeDirPathRaw; } public String getThemeDirPathRaw() { return myThemeDirPathRaw; } private void checkIfPathMacroUsed(final String path) { final int slashIndex = path.indexOf('/'); final String potentialLink = slashIndex >= 0 ? path.substring(0, slashIndex) : path; if (potentialLink.startsWith("${") && potentialLink.endsWith("}")) { myUsedPathVariables.add(potentialLink.substring(2, potentialLink.length() - 1)); } } }