Repository: karaf Updated Branches: refs/heads/karaf-3.0.x 54f01bd92 -> b363d5881
[KARAF-4494] FeaturesService Should Support Variable Interpolation in featuresRepositories property. Patch from James Carmen. Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/b363d588 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/b363d588 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/b363d588 Branch: refs/heads/karaf-3.0.x Commit: b363d58815eb6a78043b69da0e2ac0f8827bdb97 Parents: 54f01bd Author: jgoodyear <[email protected]> Authored: Fri Apr 15 10:27:23 2016 -0230 Committer: jgoodyear <[email protected]> Committed: Fri Apr 15 10:27:23 2016 -0230 ---------------------------------------------------------------------- .../features/internal/FeaturesServiceImpl.java | 10 +++++++ .../karaf/features/FeaturesServiceTest.java | 30 ++++++++++++++++++++ 2 files changed, 40 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/b363d588/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java ---------------------------------------------------------------------- diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java index 4e7a863..4934390 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java @@ -16,6 +16,15 @@ */ package org.apache.karaf.features.internal; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.felix.utils.properties.InterpolationHelper; + import org.apache.felix.utils.version.VersionRange; import org.apache.felix.utils.version.VersionTable; import org.apache.karaf.features.BundleInfo; @@ -148,6 +157,7 @@ public class FeaturesServiceImpl implements FeaturesService { this.uris = new HashSet<URI>(); for (String value : s) { value = value.trim(); + value = InterpolationHelper.substVars(value, "featuresRepositories", null, null); if (!value.isEmpty()) { this.uris.add(new URI(value)); } http://git-wip-us.apache.org/repos/asf/karaf/blob/b363d588/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java ---------------------------------------------------------------------- diff --git a/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java b/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java index d23849e..b63ec89 100644 --- a/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java +++ b/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java @@ -435,6 +435,36 @@ public class FeaturesServiceTest extends TestBase { } @Test + public void testInstallFeatureRepositoryWithSystemPropertyInterpolation() throws Exception { + + URI repo = createTempRepo("<features name='test' xmlns='http://karaf.apache.org/xmlns/features/v1.0.0'></features>"); + + + final String fullPath = repo.toString().substring("file:/".length()); + final String uri = "file:/${karaf.test.fullPath}"; + System.setProperty("karaf.test.fullPath", fullPath); + + BundleContext bundleContext = EasyMock.createMock(BundleContext.class); + BundleManager bundleManager = new BundleManager(bundleContext); + expect(bundleContext.getBundles()).andReturn(new Bundle[0]).anyTimes(); + File stateFile = new File("target/FeaturesServiceState.properties"); + try { + expect(bundleContext.getDataFile("FeaturesServiceState.properties")).andReturn(stateFile).anyTimes(); + replay(bundleContext); + FeaturesServiceImpl svc = new FeaturesServiceImpl(bundleManager); + svc.setUrls(uri); + svc.start(); + Repository repository = svc.getRepository(repo); + verify(bundleContext); + assertNotNull(repository); + svc.stop(); + } finally { + assertTrue("Unable to remove state file, subsequent tests will fail (clean install required).", stateFile.delete()); + System.getProperties().remove("karaf.test.fullPath"); + } + } + + @Test public void testInstallBatchFeatureWithoutContinueOnFailureNoClean() throws Exception { String bundle1Uri = "file:bundle1"; String bundle2Uri = "file:bundle2";
