private static String alphaNumIncrement()

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


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