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