Author: pauls Date: Tue Sep 12 14:21:30 2017 New Revision: 1808119 URL: http://svn.apache.org/viewvc?rev=1808119&view=rev Log: Improve version parsing special case handling to support <version>.<version>_<versions>
Modified: sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/ArtifactId.java Modified: sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/ArtifactId.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/ArtifactId.java?rev=1808119&r1=1808118&r2=1808119&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/ArtifactId.java (original) +++ sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/ArtifactId.java Tue Sep 12 14:21:30 2017 @@ -18,6 +18,10 @@ package org.apache.sling.feature; import org.osgi.framework.Version; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + /** * An artifact identifier. * @@ -246,13 +250,10 @@ public class ArtifactId implements Compa */ public Version getOSGiVersion() { String parts[] = version.split("\\."); - // special case for strange versions like NUMBER_NUMBER - if ( parts.length == 1 && parts[0].indexOf('_') != -1 ) { - final int pos = parts[0].indexOf('_'); - parts = new String[] {parts[0].substring(0, pos), parts[0].substring(pos +1)}; - } + if ( parts.length < 4) { - final int pos = parts[parts.length - 1].indexOf('-'); + + 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); @@ -261,6 +262,18 @@ public class ArtifactId implements Compa 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('-');