You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ge...@apache.org on 2011/04/11 11:59:10 UTC
svn commit: r1090998 - in /karaf/trunk/features/obr/src:
main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
main/resources/OSGI-INF/blueprint/features-obr.xml
test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
Author: gertv
Date: Mon Apr 11 09:59:10 2011
New Revision: 1090998
URL: http://svn.apache.org/viewvc?rev=1090998&view=rev
Log:
KARAF-564: Allow features OBR resolver to resolve optional imports as well
Modified:
karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
karaf/trunk/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml
karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
Modified: karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java?rev=1090998&r1=1090997&r2=1090998&view=diff
==============================================================================
--- karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java (original)
+++ karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java Mon Apr 11 09:59:10 2011
@@ -40,6 +40,7 @@ import org.osgi.framework.InvalidSyntaxE
public class ObrResolver implements Resolver {
private RepositoryAdmin repositoryAdmin;
+ private boolean resolveOptionalImports;
public RepositoryAdmin getRepositoryAdmin() {
return repositoryAdmin;
@@ -49,6 +50,20 @@ public class ObrResolver implements Reso
this.repositoryAdmin = repositoryAdmin;
}
+ public boolean isResolveOptionalImports() {
+ return resolveOptionalImports;
+ }
+
+ /**
+ * When set to <code>true</code>, the OBR resolver will try to resolve optional imports as well.
+ * Defaults to <code>false</code>
+ *
+ * @param resolveOptionalImports
+ */
+ public void setResolveOptionalImports(boolean resolveOptionalImports) {
+ this.resolveOptionalImports = resolveOptionalImports;
+ }
+
public List<BundleInfo> resolve(Feature feature) throws Exception {
List<Requirement> reqs = new ArrayList<Requirement>();
List<Resource> ress = new ArrayList<Resource>();
@@ -84,7 +99,7 @@ public class ObrResolver implements Reso
resolver.add(req);
}
- if (!resolver.resolve(org.apache.felix.bundlerepository.Resolver.NO_OPTIONAL_RESOURCES)) {
+ if (!doResolve(resolver)) {
StringWriter w = new StringWriter();
PrintWriter out = new PrintWriter(w);
Reason[] failedReqs = resolver.getUnsatisfiedRequirements();
@@ -105,6 +120,9 @@ public class ObrResolver implements Reso
List<BundleInfo> bundles = new ArrayList<BundleInfo>();
Collections.addAll(deploy, resolver.getAddedResources());
Collections.addAll(deploy, resolver.getRequiredResources());
+ if (resolveOptionalImports) {
+ Collections.addAll(deploy, resolver.getOptionalResources());
+ }
for (Resource res : deploy) {
BundleInfo info = infos.get(res);
if (info == null) {
@@ -126,6 +144,14 @@ public class ObrResolver implements Reso
return bundles;
}
+ private boolean doResolve(org.apache.felix.bundlerepository.Resolver resolver) {
+ if (resolveOptionalImports) {
+ return resolver.resolve();
+ } else {
+ return resolver.resolve(org.apache.felix.bundlerepository.Resolver.NO_OPTIONAL_RESOURCES);
+ }
+ }
+
protected void printUnderline(PrintWriter out, int length) {
for (int i = 0; i < length; i++) {
out.print('-');
@@ -155,5 +181,4 @@ public class ObrResolver implements Reso
}
return repositoryAdmin.getHelper().requirement(name, filter);
}
-
}
Modified: karaf/trunk/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml?rev=1090998&r1=1090997&r2=1090998&view=diff
==============================================================================
--- karaf/trunk/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml (original)
+++ karaf/trunk/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml Mon Apr 11 09:59:10 2011
@@ -17,10 +17,22 @@
limitations under the License.
-->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+ xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
+ default-activation="lazy">
+
+ <ext:property-placeholder placeholder-prefix="$(" placeholder-suffix=")"/>
+
+ <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" ignore-missing-locations="true">
+ <ext:default-properties>
+ <ext:property name="resolveOptionalImports" value="false"/>
+ </ext:default-properties>
+ <ext:location>file:$(karaf.base)/etc/org.apache.karaf.features.obr.cfg</ext:location>
+ </ext:property-placeholder>
<bean id="obrResolver" class="org.apache.karaf.features.obr.internal.ObrResolver">
<property name="repositoryAdmin" ref="repositoryAdmin" />
+ <property name="resolveOptionalImports" value="$[resolveOptionalImports]" />
</bean>
<reference id="repositoryAdmin" interface="org.apache.felix.bundlerepository.RepositoryAdmin" />
Modified: karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java?rev=1090998&r1=1090997&r2=1090998&view=diff
==============================================================================
--- karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java (original)
+++ karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java Mon Apr 11 09:59:10 2011
@@ -81,4 +81,53 @@ public class ObrResolverTest {
verify(admin, resolver, resource);
}
+ @Test
+ public void testResolverWithOptionalImports() throws Exception {
+ final String requirement = "bundle:(&(symbolicname=org.apache.camel.camel-blueprint)(version>=2.4.0)(version<2.4.1))";
+
+ final org.apache.karaf.features.internal.model.Feature f = new org.apache.karaf.features.internal.model.Feature("f1", "1.0");
+ f.setResolver("obr");
+ f.getBundle().add(new Bundle(requirement));
+ final RepositoryAdmin admin = createMock(RepositoryAdmin.class);
+ final Resolver resolver = createMock(Resolver.class);
+ final Resource resource = createMock(Resource.class);
+ final Resource optionalResource = createMock(Resource.class);
+ final ObrResolver obrResolver = new ObrResolver();
+ obrResolver.setRepositoryAdmin(admin);
+ obrResolver.setResolveOptionalImports(true);
+
+ final Capture<Requirement> captureReq = new Capture<Requirement>();
+
+ expect(admin.getHelper()).andReturn(new DataModelHelperImpl()).anyTimes();
+ expect(admin.getSystemRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
+ expect(admin.getLocalRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
+ expect(admin.listRepositories()).andReturn(new org.apache.felix.bundlerepository.Repository[0]);
+ expect(admin.resolver(EasyMock.<org.apache.felix.bundlerepository.Repository[]>anyObject())).andReturn(resolver);
+ resolver.add(EasyMock.capture(captureReq));
+ expect(resolver.resolve()).andReturn(true);
+ expect(resolver.getAddedResources()).andReturn(new Resource[] { });
+ expect(resolver.getRequiredResources()).andReturn(new Resource[] { resource });
+ expect(resolver.getOptionalResources()).andReturn(new Resource[] { optionalResource});
+ expect(resolver.getReason(resource)).andAnswer(new IAnswer() {
+ public Object answer() throws Throwable {
+ return new Reason[] { new ReasonImpl( resource, captureReq.getValue()) };
+ }
+ });
+ expect(resolver.getReason(optionalResource)).andAnswer(new IAnswer() {
+ public Object answer() throws Throwable {
+ return new Reason[] { new ReasonImpl( optionalResource, captureReq.getValue()) };
+ }
+ });
+ expect(resource.getURI()).andReturn("foo:bar");
+ expect(optionalResource.getURI()).andReturn("foo:optional:baz");
+ replay(admin, resolver, resource, optionalResource);
+
+ List<BundleInfo> bundles = obrResolver.resolve(f);
+ assertNotNull(bundles);
+ assertEquals(2, bundles.size());
+ assertEquals("foo:bar", bundles.get(0).getLocation());
+ assertEquals("foo:optional:baz", bundles.get(1).getLocation());
+ assertEquals(obrResolver.parseRequirement(requirement).toString(), captureReq.getValue().toString());
+ verify(admin, resolver, resource);
+ }
}