| /* |
| * |
| * 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.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import flex2.compiler.common.CompilerConfiguration; |
| import flex2.compiler.common.ConfigurationPathResolver; |
| import flex2.compiler.common.DefaultsConfigurator; |
| import flex2.compiler.config.CommandLineConfigurator; |
| import flex2.compiler.config.ConfigurationBuffer; |
| import flex2.compiler.config.ConfigurationException; |
| import flex2.compiler.config.FileConfigurator; |
| import flex2.compiler.config.SystemPropertyConfigurator; |
| import flex2.compiler.util.CompilerControl; |
| import flex2.compiler.util.MimeMappings; |
| import flex2.compiler.util.ThreadLocalToolkit; |
| import flex2.tools.CommandLineConfiguration; |
| import flex2.tools.CompcConfiguration; |
| import flex2.tools.ToolsConfiguration; |
| import flex2.tools.oem.*; |
| |
| import org.apache.flex.compiler.clients.COMPC; |
| import org.apache.flex.compiler.clients.MXMLC; |
| |
| /** |
| * A collection of utility methods used by classes in flex2.tools.oem. |
| * |
| * @version 2.0.1 |
| * @author Clement Wong |
| */ |
| public class OEMUtil |
| { |
| /** |
| * |
| public static final LocalizationManager setupLocalizationManager() |
| { |
| LocalizationManager l10n = ThreadLocalToolkit.getLocalizationManager(); |
| |
| if (l10n == null) |
| { |
| // set up for localizing messages |
| l10n = new LocalizationManager(); |
| l10n.addLocalizer(new ResourceBundleLocalizer()); |
| ThreadLocalToolkit.setLocalizationManager(l10n); |
| } |
| |
| return l10n; |
| } |
| */ |
| |
| /** |
| * |
| * @param logger |
| * @param mimeMappings |
| */ |
| public static final void init(Logger logger, |
| MimeMappings mimeMappings, |
| ProgressMeter meter, |
| PathResolver resolver, |
| CompilerControl cc) |
| { |
| //CompilerAPI.useAS3(); |
| //CompilerAPI.usePathResolver(resolver != null ? new OEMPathResolver(resolver) : null); |
| //setupLocalizationManager(); |
| ThreadLocalToolkit.setLogger(new OEMLogAdapter(logger)); |
| ThreadLocalToolkit.setMimeMappings(mimeMappings); |
| ThreadLocalToolkit.setProgressMeter(meter); |
| ThreadLocalToolkit.setCompilerControl(cc); |
| } |
| |
| /** |
| * |
| * |
| */ |
| public static final void clean() |
| { |
| //CompilerAPI.removePathResolver(); |
| ThreadLocalToolkit.setLogger(null); |
| //ThreadLocalToolkit.setLocalizationManager(null); |
| ThreadLocalToolkit.setMimeMappings(null); |
| ThreadLocalToolkit.setProgressMeter(null); |
| ThreadLocalToolkit.setCompilerControl(null); |
| ThreadLocalToolkit.setCompatibilityVersion(null); |
| } |
| |
| |
| /** |
| * |
| * @param args |
| * @param logger |
| * @param mimeMappings |
| * @return |
| */ |
| public static final OEMConfiguration getApplicationConfiguration(String[] args, boolean keepLinkReport, |
| boolean keepSizeReport, Logger logger, PathResolver resolver, |
| MimeMappings mimeMappings) |
| { |
| return getApplicationConfiguration(args, keepLinkReport, keepSizeReport, logger, resolver, mimeMappings, true); |
| } |
| |
| /** |
| * |
| * @param args |
| * @param logger |
| * @param mimeMappings |
| * @param processDefaults |
| * @return |
| */ |
| public static final OEMConfiguration getApplicationConfiguration(String[] args, boolean keepLinkReport, boolean keepSizeReport, |
| Logger logger, PathResolver resolver, MimeMappings mimeMappings, |
| boolean processDefaults) |
| { |
| if (!processDefaults) |
| { |
| return new OEMConfiguration(null, null); |
| } |
| |
| // expect args to have --file-specs because we need it to find app-specific-config.xml. |
| OEMUtil.init(logger, mimeMappings, null, resolver, null); |
| |
| try |
| { |
| ConfigurationBuffer cfgbuf = new ConfigurationBuffer(ApplicationCompilerConfiguration.class, |
| ApplicationCompilerConfiguration.getAliases()); |
| cfgbuf.setDefaultVar("--file-specs" /*Mxmlc.FILE_SPECS*/); |
| DefaultsConfigurator.loadDefaults(cfgbuf); |
| MXMLC mxmlc = new MXMLC(); |
| mxmlc.configure(args); |
| ApplicationCompilerConfiguration configuration = processMXMLCConfiguration(mxmlc.config); |
| |
| configuration.keepLinkReport(keepLinkReport); |
| configuration.keepSizeReport(keepSizeReport); |
| |
| return new OEMConfiguration(cfgbuf, configuration); |
| } |
| catch (ConfigurationException ex) |
| { |
| //Mxmlc.processConfigurationException(ex, "oem"); |
| return null; |
| } |
| /* |
| catch (IOException ex) |
| { |
| ThreadLocalToolkit.logError(ex.getMessage()); |
| return null; |
| } |
| */ |
| catch (RuntimeException ex) |
| { |
| Class c; |
| try |
| { |
| c = Class.forName("flex.messaging.config.ConfigurationException"); |
| if (c.isInstance(ex)) |
| { |
| ThreadLocalToolkit.logError(ex.getMessage()); |
| } |
| } |
| catch (ClassNotFoundException ex2) |
| { |
| |
| } |
| return null; |
| } |
| } |
| |
| private static ApplicationCompilerConfiguration processMXMLCConfiguration(org.apache.flex.compiler.config.Configuration config) |
| { |
| ApplicationCompilerConfiguration acc = new ApplicationCompilerConfiguration(); |
| ConfigurationPathResolver resolver = new ConfigurationPathResolver(); |
| acc.setConfigPathResolver(resolver); |
| acc.setBackgroundColor(config.getDefaultBackgroundColor()); |
| acc.setDebug(config.debug()); |
| acc.setFrameRate(config.getDefaultFrameRate()); |
| acc.setHeight(Integer.toString(config.getDefaultHeight())); |
| acc.setWidth(Integer.toString(config.getDefaultWidth())); |
| acc.setSwfVersion(config.getSwfVersion()); |
| acc.setScriptRecursionLimit(config.getScriptRecursionLimit()); |
| acc.setScriptTimeLimit(config.getScriptTimeLimit()); |
| CompilerConfiguration cc = acc.getCompilerConfiguration(); |
| cc.setAccessible(config.getCompilerAccessible()); |
| List<String> externalLibraries = config.getCompilerExternalLibraryPath(); |
| String[] extlibs = new String[externalLibraries.size()]; |
| externalLibraries.toArray(extlibs); |
| try |
| { |
| cc.cfgExternalLibraryPath(null, extlibs); |
| } |
| catch (ConfigurationException e) |
| { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| } |
| |
| return acc; |
| } |
| |
| private static LibraryCompilerConfiguration processCOMPCCConfiguration(org.apache.flex.compiler.config.Configuration config) |
| { |
| LibraryCompilerConfiguration acc = new LibraryCompilerConfiguration(); |
| acc.setBackgroundColor(config.getDefaultBackgroundColor()); |
| acc.setDebug(config.debug()); |
| acc.setFrameRate(config.getDefaultFrameRate()); |
| acc.setHeight(Integer.toString(config.getDefaultHeight())); |
| acc.setWidth(Integer.toString(config.getDefaultWidth())); |
| acc.setSwfVersion(config.getSwfVersion()); |
| acc.setScriptRecursionLimit(config.getScriptRecursionLimit()); |
| acc.setScriptTimeLimit(config.getScriptTimeLimit()); |
| |
| return acc; |
| } |
| |
| /** |
| * |
| * @param args |
| * @param logger |
| * @param mimeMappings |
| * @return |
| */ |
| public static final OEMConfiguration getLibraryConfiguration(String[] args, boolean keepLinkReport, |
| boolean keepSizeReport, Logger logger, PathResolver resolver, |
| MimeMappings mimeMappings) |
| { |
| return getLibraryConfiguration(args, keepLinkReport, keepSizeReport, logger, resolver, mimeMappings, true); |
| } |
| |
| /** |
| * |
| * @param args |
| * @param logger |
| * @param mimeMappings |
| * @param processDefaults |
| * @return |
| */ |
| public static final OEMConfiguration getLibraryConfiguration(String[] args, boolean keepLinkReport, |
| boolean keepSizeReport, Logger logger, |
| PathResolver resolver, MimeMappings mimeMappings, |
| boolean processDefaults) |
| { |
| if (!processDefaults) |
| { |
| return new OEMConfiguration(null, null); |
| } |
| |
| // expect no SWC inputs in args. |
| OEMUtil.init(logger, mimeMappings, null, resolver, null); |
| |
| try |
| { |
| ConfigurationBuffer cfgbuf = new ConfigurationBuffer(LibraryCompilerConfiguration.class, |
| LibraryCompilerConfiguration.getAliases()); |
| DefaultsConfigurator.loadOEMCompcDefaults( cfgbuf ); |
| COMPC compc = new COMPC(); |
| compc.configure(args); |
| LibraryCompilerConfiguration configuration = processCOMPCCConfiguration(compc.config); |
| configuration.keepLinkReport(keepLinkReport); |
| configuration.keepSizeReport(keepSizeReport); |
| |
| return new OEMConfiguration(cfgbuf, configuration); |
| } |
| catch (ConfigurationException ex) |
| { |
| //Mxmlc.processConfigurationException(ex, "oem"); |
| return null; |
| } |
| /* |
| catch (IOException ex) |
| { |
| ThreadLocalToolkit.logError(ex.getMessage()); |
| return null; |
| } |
| */ |
| catch (RuntimeException ex) |
| { |
| Class c; |
| try |
| { |
| c = Class.forName("flex.messaging.config.ConfigurationException"); |
| if (c.isInstance(ex)) |
| { |
| ThreadLocalToolkit.logError(ex.getMessage()); |
| } |
| } |
| catch (ClassNotFoundException ex2) |
| { |
| |
| } |
| return null; |
| } |
| } |
| |
| /** |
| * |
| * @param args |
| * @param logger |
| * @param mimeMappings |
| * @return |
| */ |
| public static final OEMConfiguration getLinkerConfiguration(String[] args, boolean keepLinkReport, boolean keepSizeReport, |
| Logger logger, MimeMappings mimeMappings, |
| PathResolver resolver, |
| flex2.compiler.common.Configuration c, |
| Set newLinkerOptions, Set<String> includes, Set<String> excludes) |
| { |
| OEMUtil.init(logger, mimeMappings, null, resolver, null); |
| |
| try |
| { |
| ConfigurationBuffer cfgbuf = new ConfigurationBuffer(ApplicationCompilerConfiguration.class, |
| ApplicationCompilerConfiguration.getAliases()); |
| cfgbuf.setDefaultVar("--file-specs" /*Mxmlc.FILE_SPECS*/); |
| DefaultsConfigurator.loadDefaults(cfgbuf); |
| MXMLC mxmlc = new MXMLC(); |
| mxmlc.configure(args); |
| ApplicationCompilerConfiguration configuration = processMXMLCConfiguration(mxmlc.config); |
| |
| configuration.keepLinkReport(keepLinkReport); |
| configuration.keepSizeReport(keepSizeReport); |
| |
| return new OEMConfiguration(cfgbuf, configuration); |
| } |
| catch (ConfigurationException ex) |
| { |
| //Mxmlc.processConfigurationException(ex, "oem"); |
| return null; |
| } |
| /* |
| catch (IOException ex) |
| { |
| ThreadLocalToolkit.logError(ex.getMessage()); |
| return null; |
| } |
| */ |
| catch (RuntimeException ex) |
| { |
| Class cls; |
| try |
| { |
| cls = Class.forName("flex.messaging.config.ConfigurationException"); |
| if (cls.isInstance(ex)) |
| { |
| ThreadLocalToolkit.logError(ex.getMessage()); |
| } |
| } |
| catch (ClassNotFoundException ex2) |
| { |
| |
| } |
| return null; |
| } |
| } |
| |
| public static final ConfigurationBuffer getCommandLineConfigurationBuffer(Logger logger, PathResolver resolver, String[] args) |
| { |
| ConfigurationBuffer cfgbuf = null; |
| |
| try |
| { |
| OEMUtil.init(logger, null, null, resolver, null); |
| |
| cfgbuf = new ConfigurationBuffer(CommandLineConfiguration.class, CommandLineConfiguration.getAliases()); |
| SystemPropertyConfigurator.load( cfgbuf, "flex" ); |
| CommandLineConfigurator.parse( cfgbuf, null, args); |
| } |
| catch (ConfigurationException ex) |
| { |
| ThreadLocalToolkit.log(ex); |
| cfgbuf = null; |
| } |
| |
| return cfgbuf; |
| } |
| |
| public static final ConfigurationBuffer getCompcConfigurationBuffer(Logger logger, PathResolver resolver, String[] args) |
| { |
| ConfigurationBuffer cfgbuf = null; |
| |
| try |
| { |
| OEMUtil.init(logger, null, null, resolver, null); |
| |
| cfgbuf = new ConfigurationBuffer(CompcConfiguration.class, CompcConfiguration.getAliases()); |
| SystemPropertyConfigurator.load( cfgbuf, "flex" ); |
| CommandLineConfigurator.parse( cfgbuf, null, args); |
| } |
| catch (ConfigurationException ex) |
| { |
| ThreadLocalToolkit.log(ex); |
| cfgbuf = null; |
| } |
| |
| return cfgbuf; |
| } |
| |
| public static String[] trim(String[] args, ConfigurationBuffer cfgbuf, Set excludes) |
| { |
| List<Object[]> positions = cfgbuf.getPositions(); |
| List<Object> newArgs = new ArrayList<Object>(); |
| for (int i = 0, length = positions.size(); i < length; i++) |
| { |
| Object[] a = positions.get(i); |
| String var = (String) a[0]; |
| int iStart = ((Integer) a[1]).intValue(), iEnd = ((Integer) a[2]).intValue(); |
| if (!excludes.contains(var)) |
| { |
| for (int j = iStart; j < iEnd; j++) |
| { |
| newArgs.add(args[j]); |
| } |
| } |
| } |
| args = new String[newArgs.size()]; |
| newArgs.toArray(args); |
| return args; |
| } |
| |
| public static final Logger getLogger(Logger logger, List<Message> messages) |
| { |
| return new BuilderLogger(logger == null ? new OEMConsole() : logger, messages); |
| } |
| |
| public static final String formatConfigurationBuffer(ConfigurationBuffer cfgbuf) |
| { |
| return FileConfigurator.formatBuffer(cfgbuf, "flex-config", |
| /*OEMUtil.setupLocalizationManager(),*/ "flex2.configuration"); |
| } |
| |
| /** |
| * |
| * @param configuration |
| * @return |
| */ |
| public static final Map getLicenseMap(ToolsConfiguration configuration) |
| { |
| return configuration.getLicensesConfiguration().getLicenseMap(); |
| } |
| |
| } |