package org.qi4j.library.struts2.util; import java.util.Arrays; import org.qi4j.functional.Function; import org.qi4j.functional.Iterables; import static java.lang.Character.isLowerCase; import static java.lang.Character.toLowerCase; public final class ClassNames { private ClassNames() { } public static String classNameInDotNotation( Class<?> type ) { Function<Class<?>, String> mapper = ClassNameFilters.passThruMapper; Iterable<String> map = Iterables.map( mapper, Arrays.asList( type ) ); return ClassNames.camelCaseToDotNotation( map ); } public static String classNameInDotNotation( Iterable<Class<?>> type, ClassNameMapper mapper ) { Iterable<String> map = Iterables.map( mapper, type ); return ClassNames.camelCaseToDotNotation( map ); } public static String camelCaseToDotNotation( Iterable<String> names ) { StringBuilder sb = new StringBuilder(); int count = 0; for( String name : names ) { if( count++ > 0 ) { sb.append( "," ); } sb.append( camelCaseToDotNotation( name ) ); } if( count == 1 ) { return sb.toString(); } sb.append( "]" ); return "[" + sb.toString(); } private static String camelCaseToDotNotation( String name ) { StringBuilder sb = new StringBuilder( name.length() ); sb.append( toLowerCase( name.charAt( 0 ) ) ); for( int i = 1; i < name.length(); i++ ) { char c = name.charAt( i ); if( isLowerCase( c ) ) { sb.append( c ); } else { sb.append( '.' ); sb.append( toLowerCase( c ) ); } } return sb.toString(); } }