Initial 'shadow project' creation and handling.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/0eecfd1e Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/0eecfd1e Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/0eecfd1e Branch: refs/heads/develop Commit: 0eecfd1ed06a058a9ac8b59deb1d89f591ecbdfc Parents: 92caf9b Author: Erik de Bruin <[email protected]> Authored: Wed Jul 30 14:40:22 2014 +0200 Committer: Erik de Bruin <[email protected]> Committed: Fri Aug 1 12:59:16 2014 +0200 ---------------------------------------------------------------------- .../apache/flex/compiler/clients/MXMLJSC.java | 25 +++- .../flex/compiler/utils/VF2JSProjectUtils.java | 118 +++++++++++++++++++ 2 files changed, 141 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0eecfd1e/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java index 947b95a..e97361e 100644 --- a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java +++ b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java @@ -73,6 +73,7 @@ import org.apache.flex.compiler.targets.ITarget; import org.apache.flex.compiler.targets.ITarget.TargetType; import org.apache.flex.compiler.targets.ITargetSettings; import org.apache.flex.compiler.units.ICompilationUnit; +import org.apache.flex.compiler.utils.VF2JSProjectUtils; import org.apache.flex.utils.FileUtils; import org.apache.flex.utils.FilenameNormalization; @@ -149,12 +150,19 @@ public class MXMLJSC IBackend backend = new ASBackend(); String jsOutputTypeString = ""; + String projectFilePath = ""; for (String s : args) { + String[] kvp = s.split("="); + if (s.contains("-js-output-type")) { - jsOutputTypeString = s.split("=")[1]; - break; + jsOutputTypeString = kvp[1]; + } + + if (kvp.length == 1) // input file path + { + projectFilePath = kvp[0]; } } @@ -176,6 +184,19 @@ public class MXMLJSC backend = new GoogBackend(); break; case VF2JS: + String newProjectFilePath = + VF2JSProjectUtils.createTempProject(projectFilePath); + + for (int i = 0; i < args.length; i++) + { + String[] kvp = args[i].split("="); + + if (kvp.length == 1) // input file path + { + args[i] = newProjectFilePath; + } + } + backend = new MXMLFlexJSBackend(); break; } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0eecfd1e/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSProjectUtils.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSProjectUtils.java b/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSProjectUtils.java new file mode 100644 index 0000000..4f43328 --- /dev/null +++ b/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSProjectUtils.java @@ -0,0 +1,118 @@ +package org.apache.flex.compiler.utils; + +import java.io.File; +import java.io.IOException; + +import org.apache.commons.io.FileUtils; + +import com.google.common.io.Files; + + +public class VF2JSProjectUtils +{ + + private static File tempDir; + + public static final String createTempProject(String projectFilePath) + { + tempDir = Files.createTempDir(); + tempDir.deleteOnExit(); + + String path = projectFilePath.substring(0, projectFilePath.lastIndexOf(File.separator)); + + createTempProjectDir(new File(path).listFiles(), ""); + + String fileName = projectFilePath.substring(projectFilePath.lastIndexOf(File.separator) + 1, projectFilePath.length()); + + return tempDir.getAbsolutePath() + File.separator + fileName; + } + + private static void createTempProjectDir(File[] files, String parentPath) + { + for (File file : files) + { + if (file.isDirectory()) + { + String path = parentPath + File.separator + file.getName(); + + new File(tempDir + File.separator + path).mkdirs(); + + createTempProjectDir(file.listFiles(), path); + } + else + { + String fileName = file.getName(); + + if (fileName.contains(".") && fileName.charAt(0) != '.') + { + String extension = fileName.substring(fileName.lastIndexOf("."), fileName.length()); + + if (extension.equals(".mxml") || extension.equals(".as")) + { + File intermediateFile = file; + String tempFileName = fileName.substring(0, fileName.indexOf(".")); + File targetDir = new File(tempDir + File.separator + parentPath); + + System.out.println("NEWLOC " + targetDir.getAbsolutePath()); + + File newFile = createTempFileWithVF2JSNamespace(intermediateFile, + tempFileName, false, targetDir, extension); + + System.out.println("NEWFILE " + newFile.getAbsolutePath()); + } + } + } + } + } + + private static File createTempFileWithVF2JSNamespace(File intermediateFile, + String tempFileName, boolean createTempFile, File targetDir, + String extension) + { + File tempFile = null; + + try + { + String content = FileUtils.readFileToString(intermediateFile, "UTF-8"); + + // mx (MXML) + content = content.replace( + "xmlns:mx=\"library://ns.adobe.com/flex/mx\"", + "xmlns:vf2js_mx=\"http://flex.apache.org/vf2js_mx/ns\""); + content = content.replace("<mx:", "<vf2js_mx:"); + content = content.replace("</mx:", "</vf2js_mx:"); + + // mx (AS) + content = content.replace("mx.", "vf2js_mx."); + + // s (MXML) + content = content.replace( + "xmlns:s=\"library://ns.adobe.com/flex/spark\"", + "xmlns:vf2js_s=\"http://flex.apache.org/vf2js_s/ns\""); + content = content.replace("<s:", "<vf2js_s:"); + content = content.replace("</s:", "</vf2js_s:"); + + // s (AS) + content = content.replace("spark.", "vf2js_s."); + + if (createTempFile) + { + tempFile = File.createTempFile(tempFileName, extension, + targetDir); + tempFile.deleteOnExit(); + } + else + { + tempFile = new File(targetDir.getAbsolutePath(), + tempFileName + extension); + } + FileUtils.writeStringToFile(tempFile, content, "UTF-8"); + } + catch (IOException e) + { + throw new RuntimeException("Generating file failed", e); + } + + return tempFile; + } +}
