You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2016/11/09 16:44:53 UTC

svn commit: r1768997 - /sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java

Author: cziegeler
Date: Wed Nov  9 16:44:53 2016
New Revision: 1768997

URL: http://svn.apache.org/viewvc?rev=1768997&view=rev
Log:
SLING-6266 : Feature version should be converted to OSGi version

Modified:
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java?rev=1768997&r1=1768996&r2=1768997&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java Wed Nov  9 16:44:53 2016
@@ -26,6 +26,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.commons.io.IOUtils;
@@ -139,7 +140,7 @@ public class ModelPreprocessor {
         if ( nodeBooleanValue(info.plugin, "setFeatureVersions", false) ) {
             for(final Feature f : info.localModel.getFeatures() ) {
                 if ( f.getVersion() == null ) {
-                    f.setVersion(info.project.getVersion());
+                    f.setVersion(cleanupVersion(info.project.getVersion()));
                 }
             }
         }
@@ -582,4 +583,66 @@ public class ModelPreprocessor {
     protected void mergeModels(final Model base, final Model additional) throws MavenExecutionException {
         MergeUtility.merge(base, additional);
     }
+
+    /**
+     * Pattern for converting Maven to OSGi version
+     * Based on the DefaultMaven2OsgiConverter from the Apache Maven Project.
+     */
+    private static final Pattern FUZZY_VERSION = Pattern.compile( "(\\d+)(\\.(\\d+)(\\.(\\d+))?)?([^a-zA-Z0-9](.*))?",
+        Pattern.DOTALL );
+
+
+    private String cleanupVersion( final String version ) {
+        final StringBuilder result = new StringBuilder();
+        final Matcher m = FUZZY_VERSION.matcher( version );
+        if ( m.matches() ) {
+            final String major = m.group( 1 );
+            final String minor = m.group( 3 );
+            final String micro = m.group( 5 );
+            final String qualifier = m.group( 7 );
+
+            if ( major != null ) {
+                result.append( major );
+                if ( minor != null ) {
+                    result.append( "." );
+                    result.append( minor );
+                    if ( micro != null ) {
+                        result.append( "." );
+                        result.append( micro );
+                        if ( qualifier != null )
+                        {
+                            result.append( "." );
+                            cleanupModifier( result, qualifier );
+                        }
+                    } else if ( qualifier != null ) {
+                        result.append( ".0." );
+                        cleanupModifier( result, qualifier );
+                    } else {
+                        result.append( ".0" );
+                    }
+                } else if ( qualifier != null ) {
+                    result.append( ".0.0." );
+                    cleanupModifier( result, qualifier );
+                } else {
+                    result.append( ".0.0" );
+                }
+            }
+        } else {
+            result.append( "0.0.0." );
+            cleanupModifier( result, version );
+        }
+        return result.toString();
+    }
+
+    private static void cleanupModifier( final StringBuilder result, final String modifier )  {
+        for ( int i = 0; i < modifier.length(); i++ ) {
+            final char c = modifier.charAt( i );
+            if ( ( c >= '0' && c <= '9' ) || ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || c == '_'
+                || c == '-' ) {
+                result.append( c );
+            } else {
+                result.append( '_' );
+            }
+        }
+    }
 }