// Path: src/main/java/org/seasar/doma/extension/gen/NamingType.java
// public enum NamingType {
// 
//   /** */
//   NONE(EnumConstants.NamingType_NONE) {
// 
//     @Override
//     public String apply(String text) {
//       return text;
//     }
//   },
//   /** */
//   LOWER_CASE(EnumConstants.NamingType_LOWER_CASE) {
// 
//     @Override
//     public String apply(String text) {
//       if (text == null) {
//         throw new GenNullPointerException("text");
//       }
//       return text.toLowerCase();
//     }
//   },
//   /** */
//   UPPER_CASE(EnumConstants.NamingType_UPPER_CASE) {
// 
//     @Override
//     public String apply(String text) {
//       if (text == null) {
//         throw new GenNullPointerException("text");
//       }
//       return text.toUpperCase();
//     }
//   },
//   /** */
//   SNAKE_UPPER_CASE(EnumConstants.NamingType_SNAKE_UPPER_CASE) {
// 
//     @Override
//     public String apply(String text) {
//       if (text == null) {
//         throw new GenNullPointerException("text");
//       }
//       String s = StringUtil.fromCamelCaseToSnakeCase(text);
//       return s.toUpperCase();
//     }
//   },
//   /** */
//   SNAKE_LOWER_CASE(EnumConstants.NamingType_SNAKE_LOWER_CASE) {
// 
//     @Override
//     public String apply(String text) {
//       if (text == null) {
//         throw new GenNullPointerException("text");
//       }
//       String s = StringUtil.fromCamelCaseToSnakeCase(text);
//       return s.toLowerCase();
//     }
//   };
// 
//   private final EnumConstants enumConstant;
// 
//   private NamingType(EnumConstants enumConstant) {
//     this.enumConstant = enumConstant;
//   }
// 
//   /**
//    * 列挙定数を返します。
//    *
//    * @return 列挙定数
//    */
//   public EnumConstants getEnumConstant() {
//     return enumConstant;
//   }
// 
//   /**
//    * 参照名を返します。
//    *
//    * @return 参照名
//    */
//   public String getReferenceName() {
//     return enumConstant.getReferenceName();
//   }
// 
//   /**
//    * ネーミング規約を適用します。
//    *
//    * @param text 規約が適用される文字列
//    * @return 規約が適用された文字列
//    */
//   public abstract String apply(String text);
// }


import java.util.EnumSet;
import org.apache.tools.ant.types.EnumeratedAttribute;
import org.seasar.doma.extension.gen.NamingType;
package org.seasar.doma.extension.gen.task;


/**
 * ネーミング規約を表します。
 *
 * <p>{@link NamingType} に対応するAntの列挙型です。
 *
 * @author taedium
 */
public class NamingTypeAttribute extends EnumeratedAttribute {

  @Override
  public String[] getValues() {
    EnumSet<NamingType> set = EnumSet.allOf(NamingType.class);
    String[] results = new String[set.size()];
    int index = 0;
    for (NamingType namingType : set) {
      results[index] = namingType.name().toLowerCase();
      index++;
    }
    return results;
  }

  /**
   * {@link NamingType} に変換します。
   *
   * @return 対応する {@link NamingType}
   */
  public NamingType convertToEnum() {
// Path: src/main/java/org/seasar/doma/extension/gen/NamingType.java
// public enum NamingType {
// 
//   /** */
//   NONE(EnumConstants.NamingType_NONE) {
// 
//     @Override
//     public String apply(String text) {
//       return text;
//     }
//   },
//   /** */
//   LOWER_CASE(EnumConstants.NamingType_LOWER_CASE) {
// 
//     @Override
//     public String apply(String text) {
//       if (text == null) {
//         throw new GenNullPointerException("text");
//       }
//       return text.toLowerCase();
//     }
//   },
//   /** */
//   UPPER_CASE(EnumConstants.NamingType_UPPER_CASE) {
// 
//     @Override
//     public String apply(String text) {
//       if (text == null) {
//         throw new GenNullPointerException("text");
//       }
//       return text.toUpperCase();
//     }
//   },
//   /** */
//   SNAKE_UPPER_CASE(EnumConstants.NamingType_SNAKE_UPPER_CASE) {
// 
//     @Override
//     public String apply(String text) {
//       if (text == null) {
//         throw new GenNullPointerException("text");
//       }
//       String s = StringUtil.fromCamelCaseToSnakeCase(text);
//       return s.toUpperCase();
//     }
//   },
//   /** */
//   SNAKE_LOWER_CASE(EnumConstants.NamingType_SNAKE_LOWER_CASE) {
// 
//     @Override
//     public String apply(String text) {
//       if (text == null) {
//         throw new GenNullPointerException("text");
//       }
//       String s = StringUtil.fromCamelCaseToSnakeCase(text);
//       return s.toLowerCase();
//     }
//   };
// 
//   private final EnumConstants enumConstant;
// 
//   private NamingType(EnumConstants enumConstant) {
//     this.enumConstant = enumConstant;
//   }
// 
//   /**
//    * 列挙定数を返します。
//    *
//    * @return 列挙定数
//    */
//   public EnumConstants getEnumConstant() {
//     return enumConstant;
//   }
// 
//   /**
//    * 参照名を返します。
//    *
//    * @return 参照名
//    */
//   public String getReferenceName() {
//     return enumConstant.getReferenceName();
//   }
// 
//   /**
//    * ネーミング規約を適用します。
//    *
//    * @param text 規約が適用される文字列
//    * @return 規約が適用された文字列
//    */
//   public abstract String apply(String text);
// }


// Path: src/main/java/org/seasar/doma/extension/gen/task/NamingTypeAttribute.java
import java.util.EnumSet;
import org.apache.tools.ant.types.EnumeratedAttribute;
import org.seasar.doma.extension.gen.NamingType;

package org.seasar.doma.extension.gen.task;


/**
 * ネーミング規約を表します。
 *
 * <p>{@link NamingType} に対応するAntの列挙型です。
 *
 * @author taedium
 */
public class NamingTypeAttribute extends EnumeratedAttribute {

  @Override
  public String[] getValues() {
    EnumSet<NamingType> set = EnumSet.allOf(NamingType.class);
    String[] results = new String[set.size()];
    int index = 0;
    for (NamingType namingType : set) {
      results[index] = namingType.name().toLowerCase();
      index++;
    }
    return results;
  }

  /**
   * {@link NamingType} に変換します。
   *
   * @return 対応する {@link NamingType}
   */
  public NamingType convertToEnum() {
    if (NamingType.LOWER_CASE.name().equalsIgnoreCase(value)) {