/*
*
* 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.compiler.internal.config;
import java.util.LinkedList;
import java.util.List;
import java.util.ArrayList;
import org.apache.flex.compiler.config.ConfigurationBuffer;
import org.apache.flex.compiler.exceptions.ConfigurationException;
/**
* This class makes the default values go in through the configuration
* buffer instead of just the value set on the actual object. This is
* useful for dependency checking and also for reporting the source
* location of a particular configuration value when there is some
* sort of a conflict between two values; i.e. "X (set in defaults)
* must be disabled to use Y (set on command line)"
*
* The other (main) reason it is used is for the
* FileConfigurator.formatBuffer - since getters aren't part of the
* config system, the only values that can be printed are ones set via
* the config setters. Since its handy to be able to generate a full
* config file based on current settings, having the default values
* set here makes the defaults show up too.
*
* Although the decentralization of the various config objects is
* somewhat broken by this class, if you consider it to be basically a
* "baked in config file", then it might feel less strange.
*
* In the end, if it is too much of a pain, don't worry about it, just
* set your local defaults inside your configuration object. No big
* deal.
*/
public class DefaultsConfigurator
{
private static void set( ConfigurationBuffer cfgbuf, String var, String val ) throws ConfigurationException
{
LinkedList<String> args = new LinkedList<String>();
args.add( val );
cfgbuf.setVar( var, args, "defaults", -1 );
}
private static void set( ConfigurationBuffer cfgbuf, String[] vars, String val ) throws ConfigurationException
{
for (int i = 0; i < vars.length; ++i)
{
set( cfgbuf, vars[i], val );
}
}
// load defaults for normal compile
public static void loadDefaults( ConfigurationBuffer cfgbuf ) throws ConfigurationException
{
loadCommonDefaults( cfgbuf );
}
// load defaults for compc
public static void loadCompcDefaults( ConfigurationBuffer cfgbuf ) throws ConfigurationException
{
loadCommonDefaults( cfgbuf );
set( cfgbuf, "compiler.debug", "true" );
set (cfgbuf, "directory", "false" );
}
public static void loadASDocDefaults( ConfigurationBuffer cfgbuf ) throws ConfigurationException
{
loadCommonDefaults( cfgbuf );
set( cfgbuf, "compiler.debug", "false" );
set( cfgbuf, "compiler.doc", "true" );
set( cfgbuf, "output", "asdoc-output" );
set( cfgbuf, "left-frameset-width", "-1" );
}
public static void loadOEMCompcDefaults( ConfigurationBuffer cfgbuf ) throws ConfigurationException
{
loadCommonDefaults( cfgbuf );
set( cfgbuf, "compiler.debug", "true" );
}
private static void loadCommonDefaults( ConfigurationBuffer cfgbuf ) throws ConfigurationException
{
// specified in case people are using older flex-config.xml
// also specified in flex-config.xml
set( cfgbuf, "target-player", "11.1.0" );
set( cfgbuf,
new String[]
{
"compiler.accessible",
"compiler.es",
"compiler.verbose-stacktraces",
"compiler.show-dependency-warnings",
"compiler.allow-source-path-overlap",
}, "false" );
set( cfgbuf,
new String[]
{
"compiler.omit-trace-statements",
"compiler.optimize",
"compiler.strict",
"compiler.show-actionscript-warnings",
"compiler.as3",
"compiler.show-deprecation-warnings",
"compiler.show-shadowed-device-font-warnings",
"compiler.show-binding-warnings",
"compiler.show-multiple-definition-warnings",
"compiler.fonts.advanced-anti-aliasing",
"use-network",
}, "true" );
set( cfgbuf, "debug-password", "" );
//set( cfgbuf, "framework", "halo" );
// The Flex 4 default theme.
set( cfgbuf, "compiler.theme", "${flexlib}/themes/Spark/spark.css" );
set( cfgbuf, "compiler.locale", java.util.Locale.getDefault().toString());
set( cfgbuf, "default-frame-rate", "24" );
set( cfgbuf, "default-background-color", "0xFFFFFF" );
LinkedList<String> args = new LinkedList<String>();
args.add( "500" );
args.add( "375" );
cfgbuf.setVar( "default-size", args, "defaults", -1 );
args.clear();
args.add( "${flexlib}/${configname}-config.xml" );
// we should probably have a dedicated subclass of DefaultsConfigurator for
// each product (i.e. webtier doesn't use this var), but for now, this seems
// like such a seductively easy workaround, lets see if this is adequate:
if (cfgbuf.isValidVar( "load-config" ))
cfgbuf.setVar("load-config", args, "defaults", -1, null, false);
args.clear();
args.add( "1000" );
args.add( "60" );
cfgbuf.setVar( "default-script-limits", args, "defaults", -1 );
// Fonts
set( cfgbuf, "compiler.fonts.max-cached-fonts", "20" );
set( cfgbuf, "compiler.fonts.max-glyphs-per-face", "1000" );
List<String> fontManagers = new ArrayList<String>();
fontManagers.add( "flash.fonts.JREFontManager" );
fontManagers.add( "flash.fonts.BatikFontManager" );
cfgbuf.setVar( "compiler.fonts.managers", fontManagers, "defaults", -1 );
String os = System.getProperty("os.name");
if (os != null)
{
os = os.toLowerCase();
if (os.startsWith( "windows xp") )
set( cfgbuf, "compiler.fonts.local-fonts-snapshot", "${flexlib}/winFonts.ser" );
else if (os.startsWith("mac os x"))
set( cfgbuf, "compiler.fonts.local-fonts-snapshot", "${flexlib}/macFonts.ser" );
else
set( cfgbuf, "compiler.fonts.local-fonts-snapshot", "${flexlib}/localFonts.ser" );
}
else
set( cfgbuf, "compiler.fonts.local-fonts-snapshot", "${flexlib}/localFonts.ser" );
}
}