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