public Version getOSGiVersion()

in src/main/java/org/apache/sling/feature/ArtifactId.java [334:405]


    public Version getOSGiVersion() {
        String parts[] = version.split("\\.");

        if ( parts.length < 4) {

            int pos = parts[parts.length - 1].indexOf('-');
            if ( pos != -1 ) {
                final String[] newParts = new String[4];
                newParts[0] = parts.length > 1 ? parts[0] : parts[0].substring(0, pos);
                newParts[1] = parts.length > 2 ? parts[1] : (parts.length > 1 ? parts[1].substring(0, pos) : "0");
                newParts[2] = parts.length > 3 ? parts[2] : (parts.length > 2 ? parts[2].substring(0, pos) : "0");
                newParts[3] = parts[parts.length - 1].substring(pos + 1);
                parts = newParts;
            }
            else {
                // special case for strange versions like NUMBER_NUMBER
                for (int i = 0; i < parts.length; i++) {
                    for (pos = parts[i].indexOf('_'); pos != -1 && pos < parts[i].length() - 1; pos = parts[i].indexOf('_')) {
                        List<String> newParts = new ArrayList<>(Arrays.asList(parts));
                        newParts.remove(i);
                        newParts.add(i, parts[i].substring(0, pos));
                        newParts.add(i + 1, parts[i].substring(pos + 1));
                        parts = newParts.toArray(new String[0]);
                    }
                }
            }
        }
        if ( parts.length >= 4 ) {
            final int pos = parts[2].indexOf('-');
            if ( pos != -1 ) {
                parts[3] = parts[2].substring(pos + 1) + "." + parts[3];
                parts[2] = parts[2].substring(0, pos);
            }
        }
        if ( parts.length > 4 ) {
            final StringBuilder sb = new StringBuilder(parts[3]);
            for(int i=4; i<parts.length;i++) {
                sb.append('.');
                sb.append(parts[i]);
            }
            parts[3] = sb.toString();
        }
        if ( parts.length > 3 && parts[3] != null ) {
            final StringBuilder sb = new StringBuilder();
            for ( int i = 0; i < parts[3].length(); i++ )
            {
                final char c = parts[3].charAt( i );
                if ( ( c >= '0' && c <= '9' ) || ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || c == '_'
                    || c == '-' ) {
                    sb.append( c );
                } else {
                    sb.append( '_' );
                }
            }
            parts[3] = sb.toString();
        }
        final int majorVersion = parseInt(parts[0], version);
        final int minorVersion;
        final int microVersion;
        if ( parts.length > 1 ) {
            minorVersion = parseInt(parts[1], version);
        } else {
            minorVersion = 0;
        }
        if ( parts.length > 2 ) {
            microVersion = parseInt(parts[2], version);
        } else {
            microVersion = 0;
        }
        final String qualifier = (parts.length > 3 ? parts[3] : "");
        return new Version(majorVersion, minorVersion, microVersion, qualifier);
    }