You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2014/04/22 14:32:20 UTC
[2/6] git commit: [KARAF-2923] Add back overrides support
[KARAF-2923] Add back overrides support
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/fabd10e2
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/fabd10e2
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/fabd10e2
Branch: refs/heads/master
Commit: fabd10e2b33aa656ae30b35566e1642bb120875c
Parents: e8023c6
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Tue Apr 22 10:36:45 2014 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue Apr 22 14:31:49 2014 +0200
----------------------------------------------------------------------
.../features/internal/region/Subsystem.java | 36 +++++++++++++++-----
.../internal/region/SubsystemResolver.java | 4 +--
.../internal/resolver/FeatureResource.java | 4 +--
.../internal/service/FeaturesServiceImpl.java | 2 +-
.../features/internal/service/Overrides.java | 4 +--
.../features/internal/region/SubsystemTest.java | 22 ++++++++++++
.../karaf/features/internal/region/data3/a.mf | 5 +++
.../karaf/features/internal/region/data3/b.mf | 5 +++
.../features/internal/region/data3/features.xml | 25 ++++++++++++++
9 files changed, 91 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
index 8d55317..98d5f60 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
@@ -42,6 +42,7 @@ import org.apache.karaf.features.internal.resolver.RequirementImpl;
import org.apache.karaf.features.internal.resolver.ResourceBuilder;
import org.apache.karaf.features.internal.resolver.ResourceImpl;
import org.apache.karaf.features.internal.resolver.ResourceUtils;
+import org.apache.karaf.features.internal.service.Overrides;
import org.eclipse.equinox.region.RegionFilter;
import org.osgi.framework.BundleException;
import org.osgi.framework.Version;
@@ -205,9 +206,10 @@ public class Subsystem extends ResourceImpl {
@SuppressWarnings("InfiniteLoopStatement")
public void preResolve(Collection<Feature> features,
DownloadManager manager,
+ Set<String> overrides,
String featureResolutionRange) throws Exception {
for (Subsystem child : children) {
- child.preResolve(features, manager, featureResolutionRange);
+ child.preResolve(features, manager, overrides, featureResolutionRange);
}
List<Requirement> processed = new ArrayList<Requirement>();
while (true) {
@@ -229,7 +231,7 @@ public class Subsystem extends ResourceImpl {
Subsystem fs = getChild(ssName);
if (fs == null) {
fs = new Subsystem(ssName, feature, this);
- fs.preResolve(features, manager, featureResolutionRange);
+ fs.preResolve(features, manager, overrides, featureResolutionRange);
installable.add(fs);
children.add(fs);
}
@@ -241,7 +243,7 @@ public class Subsystem extends ResourceImpl {
}
}
if (feature != null) {
- final Map<String, Resource> bundles = new ConcurrentHashMap<String, Resource>();
+ final Map<String, ResourceImpl> bundles = new ConcurrentHashMap<String, ResourceImpl>();
final Downloader downloader = manager.createDownloader();
final Map<BundleInfo, Boolean> infos = new HashMap<BundleInfo, Boolean>();
for (Conditional cond : feature.getConditional()) {
@@ -255,21 +257,37 @@ public class Subsystem extends ResourceImpl {
for (Map.Entry<BundleInfo, Boolean> entry : infos.entrySet()) {
final BundleInfo bi = entry.getKey();
final String loc = bi.getLocation();
- final boolean mandatory = entry.getValue();
downloader.download(loc, new DownloadCallback() {
@Override
public void downloaded(StreamProvider provider) throws Exception {
ResourceImpl res = createResource(loc, provider.getMetadata());
bundles.put(loc, res);
- if (bi.isDependency()) {
- addDependency(res, false);
- } else {
- doAddDependency(res, mandatory);
- }
+ }
+ });
+ }
+ for (String override : overrides) {
+ final String loc = Overrides.extractUrl(override);
+ downloader.download(loc, new DownloadCallback() {
+ @Override
+ public void downloaded(StreamProvider provider) throws Exception {
+ ResourceImpl res = createResource(loc, provider.getMetadata());
+ bundles.put(loc, res);
}
});
}
downloader.await();
+ Overrides.override(bundles, overrides);
+ for (Map.Entry<BundleInfo, Boolean> entry : infos.entrySet()) {
+ final BundleInfo bi = entry.getKey();
+ final String loc = bi.getLocation();
+ final boolean mandatory = entry.getValue();
+ ResourceImpl res = bundles.get(loc);
+ if (bi.isDependency()) {
+ addDependency(res, false);
+ } else {
+ doAddDependency(res, mandatory);
+ }
+ }
for (Dependency dep : feature.getDependencies()) {
Subsystem ss = this;
while (!ss.isAcceptDependencies()) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
index 8a98328..6387023 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
@@ -24,7 +24,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.TreeMap;
import org.apache.felix.resolver.ResolverImpl;
import org.apache.felix.resolver.Util;
@@ -79,6 +78,7 @@ public class SubsystemResolver {
List<Repository> repositories,
Map<String, Set<String>> features,
Collection<? extends Resource> system,
+ Set<String> overrides,
String featureResolutionRange
) throws Exception {
// Build subsystems on the fly
@@ -114,7 +114,7 @@ public class SubsystemResolver {
for (Repository repo : repositories) {
allFeatures.addAll(Arrays.asList(repo.getFeatures()));
}
- root.preResolve(allFeatures, manager, featureResolutionRange);
+ root.preResolve(allFeatures, manager, overrides, featureResolutionRange);
// Add system resources
for (Resource res : system) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java
index 99e1253..707a213 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java
@@ -38,7 +38,7 @@ public class FeatureResource extends ResourceImpl {
private final Feature feature;
- public static FeatureResource build(Feature feature, Conditional conditional, String featureRange, Map<String, Resource> locToRes) throws BundleException {
+ public static FeatureResource build(Feature feature, Conditional conditional, String featureRange, Map<String, ? extends Resource> locToRes) throws BundleException {
Feature fcond = conditional.asFeature(feature.getName(), feature.getVersion());
FeatureResource resource = build(fcond, featureRange, locToRes);
for (String cond : conditional.getCondition()) {
@@ -63,7 +63,7 @@ public class FeatureResource extends ResourceImpl {
return resource;
}
- public static FeatureResource build(Feature feature, String featureRange, Map<String, Resource> locToRes) throws BundleException {
+ public static FeatureResource build(Feature feature, String featureRange, Map<String, ? extends Resource> locToRes) throws BundleException {
FeatureResource resource = new FeatureResource(feature);
for (BundleInfo info : feature.getBundles()) {
if (!info.isDependency()) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
index ec5b55d..b7b3d13 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
@@ -831,7 +831,6 @@ public class FeaturesServiceImpl implements FeaturesService {
// Resolve
// TODO: requirements
// TODO: bundles
- // TODO: overrides
Set<String> overrides = Overrides.loadOverrides(this.overrides);
Repository[] repositories = listRepositories();
@@ -844,6 +843,7 @@ public class FeaturesServiceImpl implements FeaturesService {
Arrays.asList(repositories),
features,
systemBundles,
+ overrides,
featureResolutionRange);
Collection<Resource> allResources = resolution.keySet();
Map<String, StreamProvider> providers = resolver.getProviders();
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java
index 233a8a2..238b007 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java
@@ -65,12 +65,12 @@ public class Overrides {
* @param resources the list of resources to resolve
* @param overrides list of bundle overrides
*/
- public static void override(Map<String, Resource> resources, Collection<String> overrides) {
+ public static <T extends Resource> void override(Map<String, T> resources, Collection<String> overrides) {
// Do override replacement
for (Clause override : Parser.parseClauses(overrides.toArray(new String[overrides.size()]))) {
String url = override.getName();
String vr = override.getAttribute(OVERRIDE_RANGE);
- Resource over = resources.get(url);
+ T over = resources.get(url);
if (over == null) {
// Ignore invalid overrides
continue;
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
----------------------------------------------------------------------
diff --git a/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java b/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
index 0ef26cb..c16de51 100644
--- a/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
+++ b/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
@@ -64,6 +64,7 @@ public class SubsystemTest {
resolver.resolve(Collections.<Repository>singletonList(repo),
features,
Collections.<Resource>emptyList(),
+ Collections.<String>emptySet(),
FeaturesServiceImpl.DEFAULT_FEATURE_RESOLUTION_RANGE);
verify(resolver, expected);
@@ -93,11 +94,32 @@ public class SubsystemTest {
resolver.resolve(Collections.<Repository>singletonList(repo),
features,
Collections.<Resource>emptyList(),
+ Collections.<String>emptySet(),
FeaturesServiceImpl.DEFAULT_FEATURE_RESOLUTION_RANGE);
verify(resolver, expected);
}
+ @Test
+ public void testOverrides() throws Exception {
+ RepositoryImpl repo = new RepositoryImpl(getClass().getResource("data3/features.xml").toURI());
+
+ Map<String, Set<String>> features = new HashMap<String, Set<String>>();
+ addToMapSet(features, "root/apps1", "f1");
+
+ Map<String, Set<String>> expected = new HashMap<String, Set<String>>();
+ addToMapSet(expected, "root/apps1", "a/1.0.1");
+
+ SubsystemResolver resolver = new SubsystemResolver(new TestDownloadManager("data3"));
+ resolver.resolve(Collections.<Repository>singletonList(repo),
+ features,
+ Collections.<Resource>emptyList(),
+ Collections.singleton("b"),
+ FeaturesServiceImpl.DEFAULT_FEATURE_RESOLUTION_RANGE);
+
+ verify(resolver, expected);
+ }
+
private void verify(SubsystemResolver resolver, Map<String, Set<String>> expected) {
Map<String, Set<String>> mapping = getBundleNamesPerRegions(resolver);
if (!expected.equals(mapping)) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/a.mf
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/a.mf b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/a.mf
new file mode 100644
index 0000000..20a7811
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/a.mf
@@ -0,0 +1,5 @@
+Manifest-Version: 1
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: a
+Bundle-Version: 1.0.0
+
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/b.mf
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/b.mf b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/b.mf
new file mode 100644
index 0000000..a5439b0
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/b.mf
@@ -0,0 +1,5 @@
+Manifest-Version: 1
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: a
+Bundle-Version: 1.0.1
+
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/features.xml
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/features.xml b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/features.xml
new file mode 100644
index 0000000..575f957
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/features.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<features name="test" xmlns="http://karaf.apache.org/xmlns/features/v1.3.0">
+
+ <feature name="f1">
+ <bundle>a</bundle>
+ </feature>
+
+</features>
\ No newline at end of file