private static String alphaNumIncrement()

in src/main/java/org/apache/sling/feature/maven/mojos/UpdateVersionsMojo.java [945:999]


    private static String alphaNumIncrement( String token ) {
        String newToken;
        int i = token.length();
        boolean done = false;
        newToken = token;
        while ( !done && i > 0 ) {
            i--;
            char c = token.charAt( i );
            if ( '0' <= c && c < '9' ) {
                c++;
                newToken = newToken.substring( 0, i ) + c + ( i + 1 < newToken.length() ? newToken.substring( i + 1 ) : "" );
                done = true;
            } else if ( c == '9' ) {
                c = '0';
                newToken = newToken.substring( 0, i ) + c + ( i + 1 < newToken.length() ? newToken.substring( i + 1 ) : "" );
            } else if ( 'A' <= c && c < 'Z' ) {
                c++;
                newToken = newToken.substring( 0, i ) + c + ( i + 1 < newToken.length() ? newToken.substring( i + 1 ) : "" );
                done = true;
            } else if ( c == 'Z' ) {
                c = 'A';
                newToken = newToken.substring( 0, i ) + c + ( i + 1 < newToken.length() ? newToken.substring( i + 1 ) : "" );
            } else if ( 'a' <= c && c < 'z' ) {
                c++;
                newToken = newToken.substring( 0, i ) + c + ( i + 1 < newToken.length() ? newToken.substring( i + 1 ) : "" );
                done = true;
            } else if ( c == 'z' ) {
                c = 'a';
                newToken = newToken.substring( 0, i ) + c + ( i + 1 < newToken.length() ? newToken.substring( i + 1 ) : "" );
            }
        }
        if ( done ) {
            return newToken;
        } else {
            // ok this is roll-over time
            boolean lastNumeric = false;
            boolean lastAlpha = false;
            boolean lastUpper = false;
            i = token.length();
            while ( !lastAlpha && !lastNumeric && i > 0 ) {
                i--;
                char c = token.charAt( i );
                lastAlpha = Character.isLetter( c );
                lastUpper = c == Character.toUpperCase( c );
                lastNumeric = Character.isDigit( c );
            }
            if ( lastAlpha ) {
                if ( lastUpper ) {
                    return token + 'A';
                }
                return token + 'a';
            }
            return token + '0';
        }
    }