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';
}
}