Author: cziegeler
Date: Thu Jun  1 07:38:21 2017
New Revision: 1797149

URL: http://svn.apache.org/viewvc?rev=1797149&view=rev
Log:
Improve version handling

Modified:
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Application.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Artifact.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/ArtifactId.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Capability.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/KeyValueMap.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Requirement.java
    
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
    
sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/ArtifactIdTest.java

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Application.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Application.java?rev=1797149&r1=1797148&r2=1797149&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Application.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Application.java
 Thu Jun  1 07:38:21 2017
@@ -39,7 +39,7 @@ public class Application {
     private final List<Configuration> configurations = new ArrayList<>();
 
     /** Map of framework properties. */
-    private final KeyValueMap<String> frameworkProperties = new 
KeyValueMap<>();
+    private final KeyValueMap frameworkProperties = new KeyValueMap();
 
     /** List of extensions. */
     private final List<Extension> extensions = new ArrayList<>();
@@ -72,7 +72,7 @@ public class Application {
      * The map is modifiable
      * @return The map of properties
      */
-    public KeyValueMap<String> getFrameworkProperties() {
+    public KeyValueMap getFrameworkProperties() {
         return this.frameworkProperties;
     }
 

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Artifact.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Artifact.java?rev=1797149&r1=1797148&r2=1797149&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Artifact.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Artifact.java
 Thu Jun  1 07:38:21 2017
@@ -29,7 +29,7 @@ public class Artifact implements Compara
     private final ArtifactId id;
 
     /** Artifact metadata. */
-    private final KeyValueMap<String> metadata = new KeyValueMap<>();
+    private final KeyValueMap metadata = new KeyValueMap();
 
     /**
      * Construct a new artifact
@@ -56,7 +56,7 @@ public class Artifact implements Compara
      * The metadata can be modified.
      * @return The metadata.
      */
-    public KeyValueMap<String> getMetadata() {
+    public KeyValueMap getMetadata() {
         return this.metadata;
     }
 

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=1797149&r1=1797148&r2=1797149&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
 Thu Jun  1 07:38:21 2017
@@ -243,24 +243,55 @@ public class ArtifactId implements Compa
      * @return The OSGi version
      */
     public Version getOSGiVersion() {
-        final int qualifier = this.version.indexOf('-');
-        if ( qualifier == -1 ) {
-            return new Version(this.version);
-        }
-        int dots = 0;
-        int index = 0;
-        while ( index < qualifier) {
-            if ( this.version.charAt(index) == '.') {
-                dots++;
+        String parts[] = version.split("\\.");
+        if ( parts.length < 4) {
+            final 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;
             }
-            index++;
         }
-        if ( dots >= 2 ) {
-            return new Version(this.version.replace('-', '.'));
-        } else if ( dots == 1 ) {
-            return new Version(this.version.substring(0, qualifier) + ".0." + 
this.version.substring(qualifier + 1));
+        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;
         }
-        return new Version(this.version.substring(0, qualifier) + ".0.0." + 
this.version.substring(qualifier + 1));
+        final String qualifier = (parts.length > 3 ? parts[3] : "");
+        return new Version(majorVersion, minorVersion, microVersion, 
qualifier);
     }
 
     /**
@@ -309,4 +340,15 @@ public class ArtifactId implements Compa
     public String toString() {
         return toMvnId();
     }
+
+    /**
+     * Parse an integer.
+     */
+    private static int parseInt(final String value, final String version) {
+        try {
+            return Integer.parseInt(value);
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException("Invalid version " + version);
+        }
+    }
 }

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Capability.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Capability.java?rev=1797149&r1=1797148&r2=1797149&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Capability.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Capability.java
 Thu Jun  1 07:38:21 2017
@@ -28,10 +28,10 @@ public class Capability {
     private final String namespace;
 
     /** Map of attributes. */
-    private final KeyValueMap<String> attributes = new KeyValueMap<>();
+    private final KeyValueMap attributes = new KeyValueMap();
 
     /** Map of directives. */
-    private final KeyValueMap<String> directives = new KeyValueMap<>();
+    private final KeyValueMap directives = new KeyValueMap();
 
     /**
      * Create a new Capability.
@@ -58,7 +58,7 @@ public class Capability {
      * The map is modifiable.
      * @return The map of attributes.
      */
-    public KeyValueMap<String> getAttributes() {
+    public KeyValueMap getAttributes() {
         return attributes;
     }
 
@@ -67,7 +67,7 @@ public class Capability {
      * The map is modifiable.
      * @return The map of directives.
      */
-    public KeyValueMap<String> getDirectives() {
+    public KeyValueMap getDirectives() {
         return directives;
     }
 }

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java?rev=1797149&r1=1797148&r2=1797149&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Feature.java
 Thu Jun  1 07:38:21 2017
@@ -39,7 +39,7 @@ public class Feature implements Comparab
 
     private final List<Configuration> configurations = new ArrayList<>();
 
-    private final KeyValueMap<String> frameworkProperties = new 
KeyValueMap<>();
+    private final KeyValueMap frameworkProperties = new KeyValueMap();
 
     private final List<Requirement> requirements = new ArrayList<>();
 
@@ -103,7 +103,7 @@ public class Feature implements Comparab
         return this.configurations;
     }
 
-    public KeyValueMap<String> getFrameworkProperties() {
+    public KeyValueMap getFrameworkProperties() {
         return this.frameworkProperties;
     }
 

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/KeyValueMap.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/KeyValueMap.java?rev=1797149&r1=1797148&r2=1797149&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/KeyValueMap.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/KeyValueMap.java
 Thu Jun  1 07:38:21 2017
@@ -24,18 +24,18 @@ import java.util.TreeMap;
 /**
  * Helper class to hold key value pairs.
  */
-public class KeyValueMap<T>
-    implements Iterable<Map.Entry<String, T>> {
+public class KeyValueMap
+    implements Iterable<Map.Entry<String, String>> {
 
     /** The map holding the actual key value pairs. */
-    private final Map<String, T> properties = new TreeMap<>();
+    private final Map<String, String> properties = new TreeMap<>();
 
     /**
      * Get an item from the map.
      * @param key The key of the item.
      * @return The item or {@code null}.
      */
-    public T get(final String key) {
+    public String get(final String key) {
         return this.properties.get(key);
     }
 
@@ -44,7 +44,7 @@ public class KeyValueMap<T>
      * @param key The key of the item.
      * @param value The value
      */
-    public void put(final String key, final T value) {
+    public void put(final String key, final String value) {
         this.properties.put(key, value);
     }
 
@@ -53,7 +53,7 @@ public class KeyValueMap<T>
      * @param key The key of the item.
      * @return The previously stored value for the key or {@code null}.
      */
-    public T remove(final String key) {
+    public String remove(final String key) {
         return this.properties.remove(key);
     }
 
@@ -61,12 +61,12 @@ public class KeyValueMap<T>
      * Put all items from the other map in this map
      * @param map The other map
      */
-    public void putAll(final KeyValueMap<T> map) {
+    public void putAll(final KeyValueMap map) {
         this.properties.putAll(map.properties);
     }
 
     @Override
-    public Iterator<Entry<String, T>> iterator() {
+    public Iterator<Entry<String, String>> iterator() {
         return this.properties.entrySet().iterator();
     }
 

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Requirement.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Requirement.java?rev=1797149&r1=1797148&r2=1797149&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Requirement.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/Requirement.java
 Thu Jun  1 07:38:21 2017
@@ -28,10 +28,10 @@ public class Requirement {
     private final String namespace;
 
     /** Map of attributes. */
-    private final KeyValueMap<String> attributes = new KeyValueMap<>();
+    private final KeyValueMap attributes = new KeyValueMap();
 
     /** Map of directives. */
-    private final KeyValueMap<String> directives = new KeyValueMap<>();
+    private final KeyValueMap directives = new KeyValueMap();
 
     /**
      * Create a new Requirement.
@@ -58,7 +58,7 @@ public class Requirement {
      * The map is modifiable.
      * @return The map of attributes.
      */
-    public KeyValueMap<String> getAttributes() {
+    public KeyValueMap getAttributes() {
         return attributes;
     }
 
@@ -67,7 +67,7 @@ public class Requirement {
      * The map is modifiable.
      * @return The map of directives.
      */
-    public KeyValueMap<String> getDirectives() {
+    public KeyValueMap getDirectives() {
         return directives;
     }
 }

Modified: 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java?rev=1797149&r1=1797148&r2=1797149&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/json/FeatureJSONWriter.java
 Thu Jun  1 07:38:21 2017
@@ -273,7 +273,7 @@ public class FeatureJSONWriter {
         }
     }
 
-    static void writeFrameworkProperties(final JsonGenerator w, final 
KeyValueMap<String> props) {
+    static void writeFrameworkProperties(final JsonGenerator w, final 
KeyValueMap props) {
         // framework properties
         if ( !props.isEmpty() ) {
             w.writeStartObject(JSONConstants.FEATURE_FRAMEWORK_PROPERTIES);

Modified: 
sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/ArtifactIdTest.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/ArtifactIdTest.java?rev=1797149&r1=1797148&r2=1797149&view=diff
==============================================================================
--- 
sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/ArtifactIdTest.java
 (original)
+++ 
sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/ArtifactIdTest.java
 Thu Jun  1 07:38:21 2017
@@ -85,9 +85,14 @@ public class ArtifactIdTest {
     public void testQualifiers() {
         final Version va = new ArtifactId(G, A, "1-A", null, 
null).getOSGiVersion();
         final Version vb = new ArtifactId(G, A, "1-B", null, 
null).getOSGiVersion();
-
         assertTrue(va.compareTo(vb) < 0);
         assertTrue(vb.compareTo(va) > 0);
+
+        final Version vc = new ArtifactId(G, A, "0.11.14.1.0010", null, 
null).getOSGiVersion();
+        assertEquals(0, vc.getMajor());
+        assertEquals(11, vc.getMinor());
+        assertEquals(14, vc.getMicro());
+        assertEquals("1_0010", vc.getQualifier());
     }
 
     @Test


Reply via email to