You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by pi...@apache.org on 2011/02/21 16:25:32 UTC
svn commit: r1073017 - in /karaf/trunk/features/core/src:
main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
test/java/org/apache/karaf/features/FeaturesServiceTest.java
Author: pieber
Date: Mon Feb 21 15:25:31 2011
New Revision: 1073017
URL: http://svn.apache.org/viewvc?rev=1073017&view=rev
Log:
[KARAF-473] FeatureService#getFeatures handles version ranges
Modified:
karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
Modified: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java?rev=1073017&r1=1073016&r2=1073017&view=diff
==============================================================================
--- karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java Mon Feb 21 15:25:31 2011
@@ -16,12 +16,37 @@
*/
package org.apache.karaf.features.internal;
-import java.io.*;
+import static java.lang.String.format;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.EnumSet;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
@@ -800,13 +825,25 @@ public class FeaturesServiceImpl impleme
return null;
} else {
Feature feature = versions.get(version);
- if (feature == null && FeatureImpl.DEFAULT_VERSION.equals(version)) {
- Version latest = new Version(cleanupVersion(version));
- for (String available : versions.keySet()) {
- Version availableVersion = new Version(cleanupVersion(available));
- if (availableVersion.compareTo(latest) > 0) {
- feature = versions.get(available);
- latest = availableVersion;
+ if (feature == null) {
+ if (FeatureImpl.DEFAULT_VERSION.equals(version)) {
+ Version latest = new Version(cleanupVersion(version));
+ for (String available : versions.keySet()) {
+ Version availableVersion = new Version(cleanupVersion(available));
+ if (availableVersion.compareTo(latest) > 0) {
+ feature = versions.get(available);
+ latest = availableVersion;
+ }
+ }
+ } else {
+ Version latest = new Version(cleanupVersion(FeatureImpl.DEFAULT_VERSION));
+ VersionRange versionRange = new VersionRange(version, true, true);
+ for (String available : versions.keySet()) {
+ Version availableVersion = new Version(cleanupVersion(available));
+ if (availableVersion.compareTo(latest) > 0 && versionRange.contains(availableVersion)) {
+ feature = versions.get(available);
+ latest = availableVersion;
+ }
}
}
}
Modified: karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java?rev=1073017&r1=1073016&r2=1073017&view=diff
==============================================================================
--- karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java (original)
+++ karaf/trunk/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java Mon Feb 21 15:25:31 2011
@@ -16,6 +16,14 @@
*/
package org.apache.karaf.features;
+import static org.easymock.EasyMock.aryEq;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
@@ -35,6 +43,7 @@ import java.util.concurrent.CopyOnWriteA
import java.util.jar.JarInputStream;
import junit.framework.TestCase;
+
import org.apache.karaf.features.internal.FeatureImpl;
import org.apache.karaf.features.internal.FeaturesServiceImpl;
import org.easymock.EasyMock;
@@ -573,6 +582,46 @@ public class FeaturesServiceTest extends
svc.uninstallFeature("f2", "0.1");
}
+ public void testGetFeaturesShouldHandleDifferentVersionPatterns() throws Exception {
+
+ String name = getJarUrl(Bundle.class);
+
+ File tmp = File.createTempFile("smx", ".feature");
+ PrintWriter pw = new PrintWriter(new FileWriter(tmp));
+ pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
+ pw.println(" <feature name=\"f1\" version=\"0.1\">");
+ pw.println(" <feature version=\"[0.1,0.3)\">f2</feature>");
+ pw.println(" </feature>");
+ pw.println(" <feature name=\"f2\" version=\"0.1\">");
+ pw.println(" <bundle>" + name + "</bundle>");
+ pw.println(" </feature>");
+ pw.println(" <feature name=\"f2\" version=\"0.2\">");
+ pw.println(" <bundle>" + name + "</bundle>");
+ pw.println(" </feature>");
+ pw.println("</features>");
+ pw.close();
+
+ URI uri = tmp.toURI();
+
+ FeaturesServiceImpl svc = new FeaturesServiceImpl();
+ svc.addRepository(uri);
+
+ Feature feature = svc.getFeature("f2", "[0.1,0.3)");
+ assertEquals("f2", feature.getName());
+ assertEquals("0.2", feature.getVersion());
+
+ Feature feature2 = svc.getFeature("f2", "0.0.0");
+ assertEquals("f2", feature2.getName());
+ assertEquals("0.2", feature2.getVersion());
+
+ Feature feature3 = svc.getFeature("f2", "0.2");
+ assertEquals("f2", feature3.getName());
+ assertEquals("0.2", feature3.getVersion());
+
+ Feature feature4 = svc.getFeature("f2", "0.3");
+ assertNull(feature4);
+ }
+
private BundleContext prepareBundleContextForInstallUninstall() throws Exception {
BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
Bundle installedBundle = EasyMock.createMock(Bundle.class);