Package flex2.tools

Source Code of flex2.tools.CommandLineConfiguration

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

}
TOP

Related Classes of flex2.tools.CommandLineConfiguration

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.