| /* |
| * |
| * 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.compiler.extensions; |
| |
| import java.io.File; |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.LinkedHashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import flex2.compiler.common.ConfigurationPathResolver; |
| import flex2.compiler.config.ConfigurationException; |
| import flex2.compiler.config.ConfigurationInfo; |
| import flex2.compiler.config.ConfigurationValue; |
| |
| /** |
| * This class handles extension specific configuration options. |
| * Currently, there is only one, -compiler.extensions.extension. |
| * |
| * @author Andrew Westberg |
| */ |
| public class ExtensionsConfiguration |
| { |
| private ConfigurationPathResolver configResolver; |
| |
| public void setConfigPathResolver( ConfigurationPathResolver resolver ) |
| { |
| this.configResolver = resolver; |
| } |
| |
| private Map<String, List<String>> extensionMappings; |
| |
| public Map<String, List<String>> getExtensionMappings() |
| { |
| if ( extensionMappings == null ) |
| { |
| extensionMappings = new LinkedHashMap<String, List<String>>(); |
| } |
| return extensionMappings; |
| } |
| |
| public void setExtensionMappings( Map<String, List<String>> extensionMappings ) |
| { |
| this.extensionMappings = extensionMappings; |
| } |
| |
| // |
| // 'compiler.extensions.extension' option |
| // |
| |
| public String[] getExtension() |
| { |
| if ( extensionMappings != null ) |
| { |
| return extensionMappings.keySet().toArray( new String[0] ); |
| } |
| else |
| { |
| return null; |
| } |
| } |
| |
| /** |
| * Configures a list of many extensions mapped to a single Extension URI. <extension> |
| * <extension>something-extension.jar</extension> <parameters>version=1.1,content=1.2</parameters> </extension> |
| * |
| * @param cfgval The configuration value context. |
| * @param args A List of values for the Extension element, with the first item expected to be the uri and the |
| * remaining are extension paths. |
| * @throws ConfigurationException When no arg is provided or when the jar does not exist. |
| */ |
| public void cfgExtension( ConfigurationValue cfgval, List<String> args ) |
| throws ConfigurationException |
| { |
| if ( args == null ) |
| { |
| throw new ConfigurationException.CannotOpen( null, cfgval.getVar(), cfgval.getSource(), cfgval.getLine() ); |
| } |
| |
| if ( configResolver == null ) |
| { |
| throw new ConfigurationException.CannotOpen( null, cfgval.getVar(), cfgval.getSource(), cfgval.getLine() ); |
| } |
| |
| Iterator<String> iterator = args.iterator(); |
| String extension = iterator.next(); |
| |
| File file = new File( extension ); |
| if ( !file.exists() ) |
| { |
| throw new ConfigurationException.NotAFile( extension, cfgval.getVar(), cfgval.getSource(), cfgval.getLine() ); |
| } |
| |
| List<String> parameters = new ArrayList<String>(); |
| while ( iterator.hasNext() ) |
| { |
| parameters.add( iterator.next() ); |
| } |
| |
| getExtensionMappings().put( file.getAbsolutePath(), parameters ); |
| } |
| |
| public static ConfigurationInfo getExtensionInfo() |
| { |
| return new ConfigurationInfo( -1, new String[] { "extension", "parameters" } ) |
| { |
| public boolean allowMultiple() |
| { |
| return true; |
| } |
| }; |
| } |
| } |