Package org.apache.commons.cli

Source Code of org.apache.commons.cli.TypeHandlerValidator

/**
* Copyright 2004 The Apache Software Foundation
*
* Licensed 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.commons.cli;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;

import org.apache.commons.cli2.Group;
import org.apache.commons.cli2.Option;
import org.apache.commons.cli2.builder.ArgumentBuilder;
import org.apache.commons.cli2.builder.DefaultOptionBuilder;
import org.apache.commons.cli2.builder.GroupBuilder;
import org.apache.commons.cli2.validation.InvalidArgumentException;
import org.apache.commons.cli2.validation.Validator;

/**
* A utility class for converting data structures version 1 to
* version 2 Option instances.
*/
public class CLI2Converter {
 
  private CLI2Converter(){
    // prevent creation of static utility class
  }
 
  /**
   * Creates a version 2 Option instance from a version 1 Option instance.
   *
   * @param option1 the version 1 Option to convert
   * @return a version 2 Option 
   */
  public static Option option(final org.apache.commons.cli.Option option1){
   
    final DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
    obuilder.withRequired(option1.isRequired());
   
    final String shortName = option1.getOpt();
    if(shortName!=null && !" ".equals(shortName)){
      obuilder.withShortName(shortName);
    }
   
    final String longName = option1.getLongOpt();
    if(longName!=null){
      obuilder.withLongName(longName);
    }
    obuilder.withId(option1.getId());
   
    final String description = option1.getDescription();
    if(description!=null){
      obuilder.withDescription(description);
    }
   
    if(option1.hasArg()){
      final ArgumentBuilder abuilder = new ArgumentBuilder();
      final String argName = option1.getArgName();
      abuilder.withName(argName);
      abuilder.withMaximum(option1.getArgs());
      if(option1.hasValueSeparator()){
        abuilder.withSubsequentSeparator(option1.getValueSeparator());
      }
      if(option1.hasOptionalArg()){
        abuilder.withMinimum(0);
      }
      else{
        //TODO check what non-optional arg means
        abuilder.withMinimum(option1.getArgs());
      }
     
      final Object type = option1.getType();
      if(type!=null){
        abuilder.withValidator(new TypeHandlerValidator(type));
      }
     
      obuilder.withArgument(abuilder.create());
    }
   
    return obuilder.create();
  }
 
  /**
   * Creates a version 2 Group instance from a version 1 OptionGroup instance.
   *
   * @param optionGroup1 the version 1 OptionGroup to convert
   * @return a version 2 Group
   */
  public static Group group(final OptionGroup optionGroup1){
   
    final GroupBuilder gbuilder = new GroupBuilder();
   
    for(final Iterator i = optionGroup1.getOptions().iterator();i.hasNext();){
      final org.apache.commons.cli.Option option1 = (org.apache.commons.cli.Option)i.next();
      final Option option2 = option(option1);
      gbuilder.withOption(option2);
    }
   
    gbuilder.withMaximum(1);
   
    if(optionGroup1.isRequired()){
      gbuilder.withMinimum(1);
    }
   
    return gbuilder.create();
  }
 
  /**
   * Creates a version 2 Group instance from a version 1 Options instance.
   *
   * @param options1 the version 1 Options to convert
   * @return a version 2 Group
   */
  public static Group group(final Options options1){
   
    final GroupBuilder gbuilder = new GroupBuilder();
   
    final Set optionGroups = new HashSet();
   
    for(final Iterator i = options1.getOptionGroups().iterator();i.hasNext();){
      final OptionGroup optionGroup1 = (OptionGroup)i.next();
      Group group = group(optionGroup1);
      gbuilder.withOption(group);
      optionGroups.add(optionGroup1);
    }
   
    for(final Iterator i = options1.getOptions().iterator();i.hasNext();){
      final org.apache.commons.cli.Option option1 = (org.apache.commons.cli.Option)i.next();
      if(!optionInAGroup(option1,optionGroups)){
        final Option option2 = option(option1);
        gbuilder.withOption(option2);
      }
    }
   
    return gbuilder.create();
  }

  private static boolean optionInAGroup(final org.apache.commons.cli.Option option1, final Set optionGroups) {
    for (Iterator i = optionGroups.iterator(); i.hasNext();) {
      OptionGroup group = (OptionGroup) i.next();
      if(group.getOptions().contains(option1)){
        return true;
      }
    }
    return false;
  }
}

class TypeHandlerValidator implements Validator{
 
  private final Object type;
 
  /**
     * Creates a new Validator using the TypeHandler class.
     *
     * @see TypeHandler
   * @param type The required type for valid elements
   */
  public TypeHandlerValidator(final Object type){
    this.type = type;
  }
 
  /* (non-Javadoc)
   * @see org.apache.commons.cli2.validation.Validator#validate(java.util.List)
   */
  public void validate(final List values) throws InvalidArgumentException {
    final ListIterator i = values.listIterator();
    while(i.hasNext()){
      final String value = (String)i.next();
      final Object converted = TypeHandler.createValue(value,type);
      if(converted==null){
        throw new InvalidArgumentException("Unable to understand value: " + value);
      }
      i.set(converted);
    }
  }
}
TOP

Related Classes of org.apache.commons.cli.TypeHandlerValidator

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.