| /* |
| * |
| * 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 flex2.tools.oem.internal; |
| |
| import java.io.BufferedOutputStream; |
| import java.io.File; |
| import java.io.FileNotFoundException; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.io.OutputStream; |
| import java.io.PrintWriter; |
| import java.net.URISyntaxException; |
| |
| import flex2.compiler.common.DefaultsConfigurator; |
| import flex2.compiler.config.ConfigurationBuffer; |
| import flex2.compiler.config.ConfigurationException; |
| import flex2.compiler.swc.SwcException; |
| import flex2.compiler.util.ThreadLocalToolkit; |
| import flex2.tools.CommandLineConfiguration; |
| import flex2.tools.Mxmlc; |
| import flex2.tools.oem.Application; |
| import flex2.tools.oem.Report; |
| |
| /** |
| * Command line utility for compiling applications using the OEM API. |
| * |
| * @version 2.0.1 |
| * @author Clement Wong |
| */ |
| public class ApplicationCompiler |
| { |
| static class FBApp extends Application |
| { |
| public FBApp(File file) throws FileNotFoundException |
| { |
| super(file); |
| } |
| |
| public void build(OutputStream releaseOut, OutputStream debugOut, boolean incremental) throws IOException |
| { |
| int result = compile(incremental); |
| if (result == OK || result == LINK) |
| { |
| long size = 0; |
| |
| size = link(debugOut); |
| System.out.println("(" + size + " bytes)"); |
| this.getConfiguration().enableDebugging(false, "password"); |
| this.getConfiguration().keepLinkReport(true); |
| this.getConfiguration().keepSizeReport(true); |
| size = link(releaseOut); |
| System.out.println("(" + size + " bytes)"); |
| } |
| } |
| } |
| |
| public static void main(String[] args) throws IOException |
| { |
| final OEMConsole console = new OEMConsole(); |
| |
| try |
| { |
| LibraryCompiler.init(); |
| run(console, args); |
| } |
| catch (ConfigurationException ex) |
| { |
| Mxmlc.processConfigurationException(ex, "mxmlc"); |
| } |
| catch (SwcException ex) |
| { |
| assert ThreadLocalToolkit.errorCount() > 0; |
| } |
| catch (Throwable t) // IOException, Throwable |
| { |
| ThreadLocalToolkit.logError(t.getMessage()); |
| t.printStackTrace(); |
| } |
| finally |
| { |
| LibraryCompiler.clean(); |
| } |
| |
| System.exit(console.errorCount()); |
| } |
| |
| public static void run(OEMConsole console, String[] args) |
| throws ConfigurationException, IOException, URISyntaxException |
| { |
| ThreadLocalToolkit.setLogger(console); |
| |
| /* |
| BuilderApplication a = new BuilderApplication(new File(args[0])); |
| BuilderConfiguration c = (BuilderConfiguration) a.getDefaultConfiguration(); |
| c.setConfiguration(new String[] { "-dump-config", "c:\\foo.xml", "-verbose-stacktraces=true", "--debug=false", "-warnings=true" }); |
| a.setConfiguration(c); |
| System.out.println(a.build(new java.io.ByteArrayOutputStream(), true)); |
| */ |
| |
| FBApp app = new FBApp(new File(args[args.length - 1])); |
| CommandLineConfiguration c2 = getCommandLineConfiguration(args); |
| app.setLogger(new OEMConsole()); |
| OEMConfiguration c1 = (OEMConfiguration) app.getDefaultConfiguration(); |
| OEMConfiguration c3 = new OEMConfiguration(null, c2); |
| c1.importDefaults(c3); |
| c1.keepConfigurationReport(true); |
| app.setConfiguration(c1); |
| // app.setProgressMeter(new OEMProgressMeter()); |
| |
| // app.build(new BufferedOutputStream(new FileOutputStream(new File(c2.getOutput()))), true); |
| app.build(new BufferedOutputStream(new FileOutputStream(new File(c2.getOutput()))), |
| new BufferedOutputStream(new FileOutputStream(new File(c2.getOutput() + ".swf"))), true); |
| Report r = app.getReport(); |
| r.writeLinkReport(new PrintWriter(new FileOutputStream(new File(c2.getOutput() + ".link.xml")))); |
| r.writeConfigurationReport(new PrintWriter(new FileOutputStream(new File(c2.getOutput() + ".config.xml")))); |
| /* |
| Message[] messages = r.getMessages(); |
| for (int i = 0, size = messages == null ? 0 : messages.length; i < size; i++) |
| { |
| System.out.println(messages[i].toString()); |
| } |
| */ |
| } |
| |
| private static CommandLineConfiguration getCommandLineConfiguration(String[] args) |
| throws ConfigurationException, IOException |
| { |
| ConfigurationBuffer cfgbuf = new ConfigurationBuffer(CommandLineConfiguration.class, |
| CommandLineConfiguration.getAliases()); |
| cfgbuf.setDefaultVar("file-specs"); |
| DefaultsConfigurator.loadDefaults( cfgbuf ); |
| Object obj = Mxmlc.processConfiguration(ThreadLocalToolkit.getLocalizationManager(), |
| "mxmlc", |
| args, |
| cfgbuf, |
| CommandLineConfiguration.class, |
| "file-specs"); |
| |
| return (CommandLineConfiguration) obj; |
| } |
| } |