public String apply(String input) {
      if (!input.isEmpty()) {
        if (this == CAPITALIZED && !Ascii.isUpperCase(input.charAt(0))) {
          return CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, input);
        }
        if (this == LOWERIZED && !Ascii.isLowerCase(input.charAt(0))) {
          return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, input);
        }
      }
      return input;
    }
Require naming to follow JavaBeam capitalization convention.

<p>See 8.8 Capitalization of inferred names

<pre>
Thus when we extract a property or event name from the middle of an existing Java name, we
normally convert the first character to lower case. However to support the occasional use of all
upper-case names, we check if the first two characters of the name are both upper case and if
so leave it alone. So for example, "FooBah" becomes "fooBah", "Z" becomes "z", "URL" becomes "URL"
</pre>
@see  <a href="https://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/">javabean spec</a>
generator/src/org/immutables/generator/Naming.java