| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.flex.utilities.converter.flex; |
| |
| import org.apache.flex.utilities.converter.BaseConverter; |
| import org.apache.flex.utilities.converter.Converter; |
| import org.apache.flex.utilities.converter.air.AirConverter; |
| import org.apache.flex.utilities.converter.exceptions.ConverterException; |
| import org.apache.flex.utilities.converter.flash.FlashConverter; |
| import org.apache.flex.utilities.converter.model.MavenArtifact; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| import org.xml.sax.SAXException; |
| |
| import javax.xml.parsers.DocumentBuilder; |
| import javax.xml.parsers.DocumentBuilderFactory; |
| import javax.xml.parsers.ParserConfigurationException; |
| import java.io.*; |
| import java.util.*; |
| import java.util.jar.JarOutputStream; |
| import java.util.zip.ZipOutputStream; |
| |
| public class FlexConverter extends BaseConverter implements Converter { |
| |
| protected String flexSdkVersion; |
| protected String flexBuild; |
| |
| /** |
| * @param rootSourceDirectory Path to the root of the original Flex SDK. |
| * @param rootTargetDirectory Path to the root of the directory where the Maven artifacts should be generated to. |
| * @throws org.apache.flex.utilities.converter.exceptions.ConverterException |
| */ |
| public FlexConverter(File rootSourceDirectory, File rootTargetDirectory) throws ConverterException { |
| super(rootSourceDirectory, rootTargetDirectory); |
| |
| // Get the version of the current Flex SDK. |
| this.flexSdkVersion = getFlexVersion(rootSourceDirectory); |
| this.flexBuild = getFlexBuild(rootSourceDirectory); |
| } |
| |
| /** |
| * Entry point for generating the Maven artifacts for an Flex SDK. |
| * |
| * @throws ConverterException |
| */ |
| @Override |
| protected void processDirectory() throws ConverterException { |
| if((flexSdkVersion == null) || !rootSourceDirectory.exists() || !rootSourceDirectory.isDirectory()) { |
| System.out.println("Skipping Flex SDK generation."); |
| return; |
| } |
| |
| generateCompilerArtifacts(); |
| generateFrameworkArtifacts(); |
| generateTemplatesArtifact(); |
| } |
| |
| /** |
| * This method generates those artifacts that resemble the compiler part of the Flex SDK. |
| * |
| * @throws ConverterException |
| */ |
| protected void generateCompilerArtifacts() throws ConverterException { |
| // Create the root artifact. |
| final MavenArtifact compiler = new MavenArtifact(); |
| compiler.setGroupId("org.apache.flex"); |
| compiler.setArtifactId("compiler"); |
| compiler.setVersion(flexSdkVersion); |
| compiler.setPackaging("pom"); |
| |
| // Create a list of all libs that should belong to the Flex SDK compiler. |
| final File directory = new File(rootSourceDirectory, "lib"); |
| if(!directory.exists() || !directory.isDirectory()) { |
| throw new ConverterException("Compiler directory does not exist."); |
| } |
| final List<File> files = new ArrayList<File>(); |
| files.addAll(Arrays.asList(directory.listFiles(new FlexCompilerFilter()))); |
| |
| // Add all jars in the "external" directory. |
| final File externalDirectory = new File(directory, "external"); |
| if(externalDirectory.exists() && externalDirectory.isDirectory()) { |
| files.addAll(Arrays.asList(externalDirectory.listFiles(new FlexCompilerFilter()))); |
| } |
| |
| // Generate artifacts for every jar in the input directories. |
| for(final File sourceFile : files) { |
| final MavenArtifact artifact = resolveArtifact(sourceFile, "org.apache.flex.compiler", flexSdkVersion); |
| compiler.addDependency(artifact); |
| } |
| |
| // Write this artifact to file. |
| writeArtifact(compiler); |
| } |
| |
| /** |
| * This method generates those artifacts that resemble the framework part of the Flex SDK. |
| * |
| * @throws ConverterException |
| */ |
| protected void generateFrameworkArtifacts() throws ConverterException { |
| final File directory = new File(rootSourceDirectory, "frameworks" + File.separator + "libs"); |
| generateFrameworkArtifacts(directory, "org.apache.flex"); |
| generateThemeArtifacts(); |
| generateFrameworkConfigurationArtifact(); |
| } |
| |
| protected void generateFrameworkArtifacts(File directory, String curGroupId) throws ConverterException { |
| // Create the root artifact. |
| final MavenArtifact framework = new MavenArtifact(); |
| framework.setGroupId(curGroupId); |
| framework.setArtifactId("libs".equals(directory.getName()) ? "framework" : directory.getName()); |
| framework.setVersion(flexSdkVersion); |
| framework.setPackaging("pom"); |
| |
| final String artifactGroupId = framework.getGroupId() + "." + framework.getArtifactId(); |
| |
| // Create a list of all libs that should belong to the Flex SDK framework. |
| if(!directory.exists() || !directory.isDirectory()) { |
| throw new ConverterException("Framework directory does not exist."); |
| } |
| final List<File> files = new ArrayList<File>(); |
| files.addAll(Arrays.asList(directory.listFiles(new FlexFrameworkFilter()))); |
| |
| // Generate artifacts for every jar in the input directories. |
| for(final File sourceFile : files) { |
| // I think the experimental_mobile.swc belongs in the "mobile" package. |
| if(!"libs".equals(directory.getName()) || !"experimental_mobile.swc".equals(sourceFile.getName())) { |
| final MavenArtifact artifact = resolveArtifact(sourceFile, artifactGroupId, flexSdkVersion); |
| framework.addDependency(artifact); |
| } |
| } |
| |
| // Forcefully add the mx library to the rest of the framework. |
| if("libs".equals(directory.getName())) { |
| final File mxSwc = new File(directory, "mx/mx.swc"); |
| final MavenArtifact artifact = resolveArtifact(mxSwc, artifactGroupId, flexSdkVersion); |
| framework.addDependency(artifact); |
| } |
| |
| // If we are in the "mobile" directory and the paren contains an "experimental_mobile.swc" file, |
| // add this to the mobile package. |
| if("mobile".equals(directory.getName())) { |
| final File mobileExperimental = new File(directory.getParent(), "experimental_mobile.swc"); |
| if(mobileExperimental.exists()) { |
| final MavenArtifact artifact = resolveArtifact(mobileExperimental, artifactGroupId, flexSdkVersion); |
| framework.addDependency(artifact); |
| } |
| } |
| // Write this artifact to file. |
| writeArtifact(framework); |
| |
| // After processing the current directory, process any eventually existing child directories. |
| final List<File> children = new ArrayList<File>(); |
| children.addAll(Arrays.asList(directory.listFiles(new FileFilter() { |
| public boolean accept(File pathname) { |
| return pathname.isDirectory() && !"player".equals(pathname.getName()) && |
| !"mx".equals(pathname.getName()); |
| } |
| }))); |
| for(final File childDirectory : children) { |
| generateFrameworkArtifacts(childDirectory, artifactGroupId); |
| } |
| } |
| |
| protected void generateThemeArtifacts() throws ConverterException { |
| final File frameworksDirectory = new File(rootSourceDirectory, "frameworks"); |
| |
| // Deploy all the swcs in the themes directory. |
| final File themesSrcDirectory = new File(frameworksDirectory, "themes"); |
| if(themesSrcDirectory.exists()) { |
| generateDefaultThemeArtifacts(themesSrcDirectory); |
| } |
| |
| // Deploy MXFTEText theme |
| final File mxfteThemeCss = new File(frameworksDirectory, "projects" + File.separator + "spark" + |
| File.separator + "MXFTEText.css"); |
| if(mxfteThemeCss.exists()){ |
| generateMxFteThemeArtifact(mxfteThemeCss); |
| } |
| } |
| |
| protected void generateTemplatesArtifact() throws ConverterException { |
| // Create the root artifact. |
| final MavenArtifact templates = new MavenArtifact(); |
| templates.setGroupId("org.apache.flex"); |
| templates.setArtifactId("templates"); |
| templates.setVersion(flexSdkVersion); |
| templates.setPackaging("jar"); |
| |
| final File templatesDir = new File(rootSourceDirectory, "templates"); |
| final File[] directories = templatesDir.listFiles(new FileFilter() { |
| public boolean accept(File pathname) { |
| return pathname.isDirectory() && "automation-runtimeloading-files".equals(pathname.getName()); |
| } |
| }); |
| |
| try { |
| final File jar = File.createTempFile("flex-templates-" + flexSdkVersion, "jar"); |
| generateZip(directories, jar); |
| templates.addDefaultBinaryArtifact(jar); |
| } catch (IOException e) { |
| throw new ConverterException("Error creating runtime zip.", e); |
| } |
| |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // Utility methods |
| // |
| /////////////////////////////////////////////////////////////////////////////////////////////////// |
| |
| @Override |
| protected void writeArtifact(MavenArtifact artifact) throws ConverterException { |
| if(!"pom".equals(artifact.getPackaging())) { |
| // Copy the rsls. |
| final File rslSourceFile = getRsl(artifact.getArtifactId()); |
| if(rslSourceFile != null) { |
| final File rslTargetFile = new File( |
| artifact.getBinaryTargetFile(rootTargetDirectory, MavenArtifact.DEFAULT_CLASSIFIER).getParent(), |
| artifact.getArtifactId() + "-" + artifact.getVersion() + ".swf"); |
| copyFile(rslSourceFile, rslTargetFile); |
| artifact.addBinaryArtifact("rsl", rslSourceFile); |
| } |
| |
| // Copy the swzc. |
| final File signedRslSourceFile = getSignedRsl(artifact.getArtifactId()); |
| if(signedRslSourceFile != null) { |
| final File signedRslTargetFile = new File( |
| artifact.getBinaryTargetFile(rootTargetDirectory, MavenArtifact.DEFAULT_CLASSIFIER).getParent(), |
| artifact.getArtifactId() + "-" + artifact.getVersion() + ".swz"); |
| copyFile(signedRslSourceFile, signedRslTargetFile); |
| artifact.addBinaryArtifact("caching", rslSourceFile); |
| } |
| |
| // Copy the language resources. |
| final Map<String, File> resourceBundles = getResourceBundles(artifact.getArtifactId()); |
| if(!resourceBundles.isEmpty() && |
| artifact.getBinaryTargetFile(rootTargetDirectory, MavenArtifact.DEFAULT_CLASSIFIER) != null) { |
| boolean foundResources = false; |
| for(final String resource : resourceBundles.keySet()) { |
| final File resourceSourceFile = resourceBundles.get(resource); |
| final File resourceTargetFile = new File( |
| artifact.getBinaryTargetFile(rootTargetDirectory, MavenArtifact.DEFAULT_CLASSIFIER).getParent(), |
| artifact.getArtifactId() + "-" + artifact.getVersion() + "-" + resource + ".rb.swc"); |
| copyFile(resourceSourceFile, resourceTargetFile); |
| foundResources = true; |
| } |
| |
| // If the library had at least one resource bundle, generate a dummy rb.swc and add that as dependency. |
| if(foundResources) { |
| final File resourceDummyTargetFile = new File( |
| artifact.getBinaryTargetFile(rootTargetDirectory, MavenArtifact.DEFAULT_CLASSIFIER).getParent(), |
| artifact.getArtifactId() + "-" + artifact.getVersion() + ".rb.swc"); |
| writeDummy(resourceDummyTargetFile); |
| |
| final MavenArtifact resourceBundleDependency = new MavenArtifact(); |
| resourceBundleDependency.setGroupId(artifact.getGroupId()); |
| resourceBundleDependency.setArtifactId(artifact.getArtifactId()); |
| resourceBundleDependency.setVersion(artifact.getVersion()); |
| resourceBundleDependency.setPackaging("rb.swc"); |
| artifact.addDependency(resourceBundleDependency); |
| } |
| } |
| |
| // Add source zips. |
| final File sourceArtifactSourceFile = generateSourceArtifact(artifact.getArtifactId()); |
| if(sourceArtifactSourceFile != null) { |
| final File sourceArtifactTargetFile = new File( |
| artifact.getBinaryTargetFile(rootTargetDirectory, MavenArtifact.DEFAULT_CLASSIFIER).getParent(), |
| artifact.getArtifactId() + "-" + artifact.getVersion() + "-sources.jar"); |
| copyFile(sourceArtifactSourceFile, sourceArtifactTargetFile); |
| } |
| |
| // If this is the asdoc artifact, create the templates.zip for that. |
| if("asdoc".equals(artifact.getArtifactId())) { |
| final File asdocTemplatesZipSourceFile = generateAsdocTemplatesZip(); |
| if (asdocTemplatesZipSourceFile != null) { |
| final File asdocTemplatesZipTargetFile = new File( |
| artifact.getBinaryTargetFile( |
| rootTargetDirectory, MavenArtifact.DEFAULT_CLASSIFIER).getParent(), |
| artifact.getArtifactId() + "-" + artifact.getVersion() + "-template.zip"); |
| copyFile(asdocTemplatesZipSourceFile, asdocTemplatesZipTargetFile); |
| } |
| } |
| } |
| |
| super.writeArtifact(artifact); |
| } |
| |
| protected File generateSourceArtifact(String artifactId) throws ConverterException { |
| final File frameworksDirectory = new File(rootSourceDirectory, "frameworks"); |
| final File librarySrcRootPath = new File(frameworksDirectory, "projects/" + artifactId); |
| final File librarySourcePath = new File(librarySrcRootPath, "src"); |
| |
| if (librarySourcePath.listFiles() != null) { |
| final File sourceFiles[] = librarySourcePath.listFiles(); |
| if (sourceFiles != null) { |
| final File zipInputFiles[] = new File[sourceFiles.length + 1]; |
| System.arraycopy(sourceFiles, 0, zipInputFiles, 0, sourceFiles.length); |
| |
| try { |
| // Create a temp file. |
| final File targetFile = File.createTempFile("temp-" + artifactId, "zip"); |
| |
| JarOutputStream jar = new JarOutputStream(new FileOutputStream(targetFile)); |
| for (final File file : zipInputFiles) { |
| addFileToZip(jar, file, librarySourcePath); |
| } |
| jar.close(); |
| |
| return targetFile; |
| } catch(IOException e) { |
| throw new ConverterException("Error creating source archive.", e); |
| } |
| } |
| } |
| return null; |
| } |
| |
| protected File generateAsdocTemplatesZip() throws ConverterException { |
| final File templatesDirectory = new File(rootSourceDirectory, "asdoc/templates"); |
| |
| if (templatesDirectory.listFiles() != null) { |
| final File sourceFiles[] = templatesDirectory.listFiles(); |
| if (sourceFiles != null) { |
| final File zipInputFiles[] = new File[sourceFiles.length + 1]; |
| System.arraycopy(sourceFiles, 0, zipInputFiles, 0, sourceFiles.length); |
| |
| try { |
| // Create a temp file. |
| final File targetFile = File.createTempFile("temp-asdoc-templates", "zip"); |
| |
| JarOutputStream jar = new JarOutputStream(new FileOutputStream(targetFile)); |
| for (final File file : zipInputFiles) { |
| addFileToZip(jar, file, templatesDirectory); |
| } |
| jar.close(); |
| |
| return targetFile; |
| } catch(IOException e) { |
| throw new ConverterException("Error creating asdoc-templates archive.", e); |
| } |
| } |
| } |
| return null; |
| } |
| |
| protected void generateFrameworkConfigurationArtifact() throws ConverterException { |
| // ZIP up every file (not directory) in the framework directory and the entire themes directory. |
| final File frameworksDirectory = new File(rootSourceDirectory, "frameworks"); |
| final File sourceFiles[] = frameworksDirectory.listFiles(new FileFilter() { |
| public boolean accept(File pathname) { |
| return pathname.isFile(); |
| } |
| }); |
| final File zipInputFiles[] = new File[sourceFiles.length]; |
| System.arraycopy(sourceFiles, 0, zipInputFiles, 0, sourceFiles.length); |
| |
| try { |
| final File targetFile = new File(rootTargetDirectory, |
| "org.apache.flex.framework.framework.".replace(".", File.separator) + flexSdkVersion + |
| File.separator + "framework-" + flexSdkVersion + "-configs.zip"); |
| |
| // Add all the content to a zip-file. |
| final ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(targetFile)); |
| for (final File file : zipInputFiles) { |
| addFileToZip(zipOutputStream, file, frameworksDirectory); |
| } |
| zipOutputStream.close(); |
| } catch(IOException e) { |
| throw new ConverterException("Error generating configuration zip.", e); |
| } |
| } |
| |
| protected void generateDefaultThemeArtifacts(File themesDirectory) throws ConverterException { |
| final File[] themes = themesDirectory.listFiles(); |
| if(themes != null) { |
| for(final File themeDirectory : themes) { |
| if(themeDirectory.isDirectory()) { |
| final String themeName = themeDirectory.getName().toLowerCase(); |
| final File themeFile = new File(themeDirectory, themeName + ".swc"); |
| |
| final File targetSwcFile; |
| if(themeFile.exists()) { |
| targetSwcFile = themeFile; |
| } else { |
| targetSwcFile = generateThemeSwc(themeDirectory); |
| } |
| |
| if(targetSwcFile != null) { |
| // Generate the pom file. |
| final MavenArtifact themeArtifact = new MavenArtifact(); |
| themeArtifact.setGroupId("org.apache.flex.framework.themes"); |
| themeArtifact.setArtifactId(themeName); |
| themeArtifact.setVersion(flexSdkVersion); |
| themeArtifact.setPackaging("swc"); |
| themeArtifact.addDefaultBinaryArtifact(targetSwcFile); |
| |
| // In this case we don't want the resources to be copied. |
| super.writeArtifact(themeArtifact); |
| } |
| } |
| } |
| } |
| } |
| |
| protected void generateMxFteThemeArtifact(File themeCssFile) throws ConverterException { |
| final String themeName = "mxfte"; |
| |
| // Generate and Copy the SWC. |
| final File targetSwcFile = generateThemeSwc(themeCssFile); |
| |
| if(targetSwcFile != null) { |
| // Generate the pom file. |
| final MavenArtifact themeArtifact = new MavenArtifact(); |
| themeArtifact.setGroupId("org.apache.flex.framework.themes"); |
| themeArtifact.setArtifactId(themeName); |
| themeArtifact.setVersion(flexSdkVersion); |
| themeArtifact.setPackaging("swc"); |
| themeArtifact.addDefaultBinaryArtifact(targetSwcFile); |
| |
| // In this case we don't want the resources to be copied. |
| super.writeArtifact(themeArtifact); |
| } |
| } |
| |
| protected File generateThemeSwc(File themeDirectory) throws ConverterException { |
| final File fdkLibDir = new File(rootSourceDirectory, "lib"); |
| |
| List<String> processCmd = new ArrayList<String>(10); |
| |
| if(fdkLibDir.exists() && fdkLibDir.isDirectory()) { |
| try { |
| final File compcLibrary = new File(fdkLibDir, "compc.jar"); |
| final File frameworkDir = new File(rootSourceDirectory, "frameworks"); |
| final String targetPlayer = getTargetPlayer(new File(frameworkDir, "libs/player")); |
| if(targetPlayer == null) { |
| System.out.println("Skipping theme compilation due to missing playerglobl.swc"); |
| return null; |
| } |
| |
| processCmd.add("java"); |
| processCmd.add("-Xmx384m"); |
| processCmd.add("-Dsun.io.useCanonCaches=false"); |
| processCmd.add("-jar"); |
| processCmd.add(compcLibrary.getCanonicalPath()); |
| processCmd.add("+flexlib=" + frameworkDir.getCanonicalPath()); |
| processCmd.add("-target-player=" + targetPlayer); |
| |
| if (themeDirectory.isDirectory()) { |
| // Add all the content files. |
| final File contents[] = themeDirectory.listFiles(new FileFilter() { |
| public boolean accept(File pathname) { |
| return !(pathname.isDirectory() && "src".equals(pathname.getName())) && |
| !"preview.jpg".equals(pathname.getName()) && !pathname.getName().endsWith(".fla"); |
| } |
| }); |
| if (contents.length == 0) { |
| return null; |
| } |
| |
| for (final File resource : contents) { |
| processCmd.add("-include-file"); |
| processCmd.add(resource.getName()); |
| processCmd.add(resource.getCanonicalPath()); |
| } |
| } else { |
| processCmd.add("-include-file"); |
| processCmd.add(themeDirectory.getName()); |
| processCmd.add(themeDirectory.getCanonicalPath()); |
| } |
| |
| // Create a temp file. |
| final File targetFile = File.createTempFile(themeDirectory.getName(), "swc"); |
| |
| // Define the output file. |
| processCmd.add("-o"); |
| processCmd.add(targetFile.getCanonicalPath()); |
| |
| final File targetDirectory = targetFile.getParentFile(); |
| if (!targetDirectory.exists()) { |
| if (!targetDirectory.mkdirs()) { |
| throw new ConverterException("Could not create directory: " + targetDirectory.getCanonicalPath()); |
| } |
| } |
| |
| // Execute the command. |
| try { |
| System.out.println("Generating theme '" + themeDirectory.getName() + "'"); |
| |
| //final Process child = Runtime.getRuntime().exec(cmd.toString(), envps); |
| ProcessBuilder processBuilder = new ProcessBuilder(processCmd); |
| processBuilder.environment().put("PLAYERGLOBAL_HOME", |
| new File(new File(frameworkDir, "libs"), "player").getCanonicalPath()); |
| int exitValue = exec(processBuilder.start()); |
| if (exitValue != 0) { |
| System.out.println("Couldn't create theme swc"); |
| System.out.println("----------------------------------------------------------------"); |
| System.out.println("Env: '" + processBuilder.environment().get("PLAYERGLOBAL_HOME") + "'"); |
| System.out.println(processBuilder.command()); |
| System.out.println("----------------------------------------------------------------"); |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| |
| // Return a reference on the theme swc. |
| return targetFile; |
| } catch(IOException e) { |
| throw new ConverterException("Error generating theme swc.", e); |
| } |
| } |
| return null; |
| } |
| |
| protected int exec(Process p) throws InterruptedException, IOException { |
| String line; |
| BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream())); |
| BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); |
| while ((line = bri.readLine()) != null) { |
| System.out.println(line); |
| } |
| while ((line = bre.readLine()) != null) { |
| System.out.println(line); |
| } |
| int result = p.waitFor(); |
| bri.close(); |
| bre.close(); |
| System.out.println("Done."); |
| return result; |
| } |
| |
| /** |
| * Get the version of an Flex SDK from the content of the SDK directory. |
| * |
| * @return version string for the current Flex SDK |
| */ |
| protected String getFlexBuild(File rootDirectory) throws ConverterException { |
| final File sdkDescriptor = new File(rootDirectory, "flex-sdk-description.xml"); |
| |
| // If the descriptor is not present, return null as this FDK directory doesn't |
| // seem to contain a Flex SDK. |
| if(!sdkDescriptor.exists()) { |
| return null; |
| } |
| |
| final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
| try { |
| // Parse the document |
| final DocumentBuilder db = dbf.newDocumentBuilder(); |
| final Document dom = db.parse(sdkDescriptor); |
| |
| // Get name, version and build nodes |
| final Element root = dom.getDocumentElement(); |
| return root.getElementsByTagName("build").item(0).getTextContent(); |
| } catch (ParserConfigurationException pce) { |
| throw new ConverterException("Error parsing flex-sdk-description.xml", pce); |
| } catch (SAXException se) { |
| throw new ConverterException("Error parsing flex-sdk-description.xml", se); |
| } catch (IOException ioe) { |
| throw new ConverterException("Error parsing flex-sdk-description.xml", ioe); |
| } |
| } |
| |
| protected File getRsl(String artifactId) { |
| final FlexRslFilter filter = new FlexRslFilter(artifactId, flexSdkVersion, flexBuild); |
| final File rslDirectory = new File(rootSourceDirectory, "frameworks" + File.separator + "rsls"); |
| final File[] rsls = rslDirectory.listFiles(filter); |
| if ((rsls != null) && (rsls.length == 1)) { |
| return rsls[0]; |
| } |
| return null; |
| } |
| |
| protected File getSignedRsl(String artifactId) { |
| final FlexSignedRslFilter filter = new FlexSignedRslFilter(artifactId, flexSdkVersion); |
| final File rslDirectory = new File(rootSourceDirectory, "frameworks" + File.separator + "rsls"); |
| final File[] swzs = rslDirectory.listFiles(filter); |
| if ((swzs != null) && (swzs.length == 1)) { |
| return swzs[0]; |
| } |
| return null; |
| } |
| |
| protected Map<String, File> getResourceBundles(String artifactId) { |
| final Map<String, File> bundles = new HashMap<String, File>(); |
| final FlexResourceBundleFilter filter = new FlexResourceBundleFilter(artifactId); |
| final File[] languages = new File(rootSourceDirectory, "frameworks" + File.separator + "locale").listFiles(); |
| if(languages != null) { |
| for (final File language : languages) { |
| final File[] resources = language.listFiles(filter); |
| if ((resources != null) && (resources.length == 1)) { |
| bundles.put(language.getName(), resources[0]); |
| } |
| } |
| } |
| return bundles; |
| } |
| |
| protected String getTargetPlayer(File playerDir) { |
| if(playerDir.exists() && playerDir.isDirectory()) { |
| File[] files = playerDir.listFiles(); |
| if((files != null) && files.length > 0) { |
| return files[0].getName(); |
| } |
| } |
| return null; |
| } |
| |
| public static class FlexCompilerFilter implements FilenameFilter { |
| private AirConverter.AirCompilerFilter airFilter = new AirConverter.AirCompilerFilter(); |
| |
| public boolean accept(File dir, String name) { |
| return name.endsWith(".jar") && !airFilter.accept(dir, name) && |
| // Some old AIR SDKs contained two android libs in the main lib directory, |
| // we have to manually exclude them. |
| !name.equals("smali.jar") && !name.equals("baksmali.jar"); |
| } |
| } |
| |
| public static class FlexFrameworkFilter implements FilenameFilter { |
| private AirConverter.AirFrameworkFilter airFilter = new AirConverter.AirFrameworkFilter(); |
| private FlashConverter.FlashFrameworkFilter flashFilter = new FlashConverter.FlashFrameworkFilter(); |
| |
| public boolean accept(File dir, String name) { |
| return name.endsWith(".swc") && !airFilter.accept(dir, name) && !flashFilter.accept(dir, name); |
| } |
| } |
| |
| public static class FlexRslFilter implements FilenameFilter { |
| private String fileName; |
| |
| public FlexRslFilter(String artifactName, String artifactVersion, String build) { |
| this.fileName = artifactName + "_" + artifactVersion + "." + build + ".swf"; |
| } |
| |
| public boolean accept(File dir, String name) { |
| return name.equals(fileName); |
| } |
| } |
| |
| public static class FlexSignedRslFilter implements FilenameFilter { |
| private String fileName; |
| |
| public FlexSignedRslFilter(String artifactName, String artifactVersion) { |
| this.fileName = artifactName + "_" + artifactVersion + ".swz"; |
| } |
| |
| public boolean accept(File dir, String name) { |
| return name.equals(fileName); |
| } |
| } |
| |
| public static class FlexResourceBundleFilter implements FilenameFilter { |
| private String fileName; |
| |
| public FlexResourceBundleFilter(String artifactName) { |
| this.fileName = artifactName + "_rb.swc"; |
| } |
| |
| public boolean accept(File dir, String name) { |
| return name.equals(fileName); |
| } |
| } |
| |
| public static void main(String[] args) throws Exception { |
| FlexConverter converter = new FlexConverter(new File(args[0]), new File(args[1])); |
| converter.convert(); |
| } |
| |
| } |