Package flex2.tools.oem.internal

Source Code of flex2.tools.oem.internal.ApplicationCompiler$FBApp

/*
*
*  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;
  }
}
TOP

Related Classes of flex2.tools.oem.internal.ApplicationCompiler$FBApp

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.