/* * * 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; import flex2.compiler.CompilerAPI; import flex2.compiler.common.Configuration; import flex2.compiler.common.ConfigurationPathResolver; import flex2.compiler.config.ConfigurationBuffer; import flex2.compiler.config.ConfigurationException; import flex2.compiler.config.ConfigurationInfo; import flex2.compiler.config.ConfigurationValue; import flex2.compiler.io.VirtualFile; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * Support for command line specific configuration options, like * -file-specs, -help, -include-resource-bundles, -load-config, * -output, -projector, and -version. * * @author Roger Gonzalez * @author Clement Wong */ public class CommandLineConfiguration extends ToolsConfiguration { private String resourceModulePath; public String getTargetFile() { if (compilingResourceModule()) { return resourceModulePath; } return (fileSpecs.size() > 0) ? fileSpecs.get( fileSpecs.size() - 1 ) : null; } public List<String> getFileList() { if (compilingResourceModule()) { List<String> fileList = new ArrayList<String>(); fileList.add(resourceModulePath); return fileList; } return fileSpecs; } public boolean compilingResourceModule() { boolean b = fileSpecs.size() == 0 && getIncludeResourceBundles().size() > 0; if (b && resourceModulePath == null) { //resourceModulePath = I18nUtils.getGeneratedResourceModule(this).getPath(); } return b; } public void validate(ConfigurationBuffer cfgbuf) throws ConfigurationException { super.validate( cfgbuf ); String targetFile = getTargetFile(); if (targetFile == null) { throw new ConfigurationException.MustSpecifyTarget( null, null, -1); } VirtualFile virt = getVirtualFile(targetFile); if (virt == null && checkTargetFileInFileSystem()) { throw new ConfigurationException.IOError(targetFile); } } /** * Subclass could override this method. */ protected VirtualFile getVirtualFile(String targetFile) throws ConfigurationException { return CompilerAPI.getVirtualFile(targetFile); } /** * Subclass could override this method. */ protected boolean checkTargetFileInFileSystem() { return true; } private VirtualFile getVirtualFile(String file, ConfigurationValue cfgval) { try { return ConfigurationPathResolver.getVirtualFile( file, configResolver, cfgval ); } catch (ConfigurationException ex) { return null; } } // // 'file-specs' option // // list of filespecs, default var for command line private List<String> fileSpecs = new ArrayList<String>(); public List<String> getFileSpecs() { return fileSpecs; } public void cfgFileSpecs(ConfigurationValue cv, List<String> args) throws ConfigurationException { this.fileSpecs.addAll( args ); } public static ConfigurationInfo getFileSpecsInfo() { return new ConfigurationInfo( -1, new String[] { "path-element" } ) { public boolean allowMultiple() { return true; } public boolean isHidden() { return true; } }; } // // 'help' option // // dummy, just a trigger for help text public void cfgHelp(ConfigurationValue cv, String[] keywords) { } public static ConfigurationInfo getHelpInfo() { return new ConfigurationInfo( -1, "keyword" ) { public boolean isGreedy() { return true; } public boolean isDisplayed() { return false; } }; } // // 'include-resource-bundles' option // private List<String> resourceBundles = new LinkedList<String>(); public List<String> getIncludeResourceBundles() { return resourceBundles; } public void cfgIncludeResourceBundles(ConfigurationValue val, List<String> includeResourceBundles) { resourceBundles.addAll(toQNameString(includeResourceBundles)); } public static ConfigurationInfo getIncludeResourceBundlesInfo() { return new ConfigurationInfo( -1, new String[] { "bundle" } ) { public boolean allowMultiple() { return true; } }; } // // 'load-config' option // private VirtualFile configFile; public VirtualFile getLoadConfig() { return configFile; } // dummy, ignored - pulled out of the buffer public void cfgLoadConfig(ConfigurationValue cv, String filename) throws ConfigurationException { // C: resolve the flex-config.xml path to a VirtualFile so incremental compilation can detect timestamp change. configFile = ConfigurationPathResolver.getVirtualFile(filename, configResolver, cv); } public static ConfigurationInfo getLoadConfigInfo() { return new ConfigurationInfo( 1, "filename" ) { public boolean allowMultiple() { return true; } }; } // // 'output' option // public void cfgOutput(ConfigurationValue val, String output) throws ConfigurationException { this.output = Configuration.getOutputPath(val, output); } public static ConfigurationInfo getOutputInfo() { return new ConfigurationInfo(1, "filename") { public boolean isRequired() { return false; } }; } // // 'projector' option (hidden) // private VirtualFile projector; public VirtualFile getProjector() { return projector; } public void cfgProjector( ConfigurationValue cfgval, String path ) { projector = getVirtualFile(path, cfgval); } public static ConfigurationInfo getProjectorInfo() { return new ConfigurationInfo() { public boolean isHidden() { return true; } }; } // // 'version' option // // dummy, just a trigger for version info public void cfgVersion(ConfigurationValue cv, boolean dummy) { // intercepted upstream in order to allow version into to be printed even when required args are missing } }