You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2010/02/21 15:31:34 UTC
svn commit: r912356 - in /felix/trunk: bundlerepository/
bundlerepository/src/main/java/org/apache/felix/bundlerepository/
bundlerepository/src/test/java/org/apache/felix/bundlerepository/
org.osgi.service.obr/src/main/java/org/osgi/service/obr/
Author: gnodet
Date: Sun Feb 21 14:31:33 2010
New Revision: 912356
URL: http://svn.apache.org/viewvc?rev=912356&view=rev
Log:
FELIX-2109: OBR should support matching resources for a given requirement
Modified:
felix/trunk/bundlerepository/pom.xml
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryAdminImpl.java
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/RepositoryImplTest.java
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/ResolverImplTest.java
felix/trunk/org.osgi.service.obr/src/main/java/org/osgi/service/obr/RepositoryAdmin.java
Modified: felix/trunk/bundlerepository/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/pom.xml?rev=912356&r1=912355&r2=912356&view=diff
==============================================================================
--- felix/trunk/bundlerepository/pom.xml (original)
+++ felix/trunk/bundlerepository/pom.xml Sun Feb 21 14:31:33 2010
@@ -33,7 +33,7 @@
<dependency>
<groupId>${pom.groupId}</groupId>
<artifactId>org.osgi.service.obr</artifactId>
- <version>1.0.2</version>
+ <version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>${pom.groupId}</groupId>
Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryAdminImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryAdminImpl.java?rev=912356&r1=912355&r2=912356&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryAdminImpl.java (original)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryAdminImpl.java Sun Feb 21 14:31:33 2010
@@ -31,6 +31,7 @@
import org.osgi.framework.BundleContext;
import org.osgi.framework.Filter;
import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.obr.Capability;
import org.osgi.service.obr.Repository;
import org.osgi.service.obr.RepositoryAdmin;
import org.osgi.service.obr.Requirement;
@@ -164,6 +165,56 @@
return resources;
}
+ public synchronized Resource[] discoverResources(Requirement[] requirements)
+ {
+ if (!m_initialized)
+ {
+ initialize();
+ }
+
+ Resource[] resources = null;
+ MapToDictionary dict = new MapToDictionary(null);
+ Repository[] repos = listRepositories();
+ List matchList = new ArrayList();
+ for (int repoIdx = 0; (repos != null) && (repoIdx < repos.length); repoIdx++)
+ {
+ resources = repos[repoIdx].getResources();
+ for (int resIdx = 0; (resources != null) && (resIdx < resources.length); resIdx++)
+ {
+ dict.setSourceMap(resources[resIdx].getProperties());
+ boolean match = true;
+ for (int reqIdx = 0; (requirements != null) && (reqIdx < requirements.length); reqIdx++)
+ {
+ boolean reqMatch = false;
+ Capability[] caps = resources[resIdx].getCapabilities();
+ for (int capIdx = 0; (caps != null) && (capIdx < caps.length); capIdx++)
+ {
+ if (caps[capIdx].getName().equals(requirements[reqIdx].getName())
+ && requirements[reqIdx].isSatisfied(caps[capIdx]))
+ {
+ reqMatch = true;
+ break;
+ }
+ }
+ match &= reqMatch;
+ if (!match)
+ {
+ break;
+ }
+ }
+ if (match)
+ {
+ matchList.add(resources[resIdx]);
+ }
+ }
+ }
+
+ // Convert matching resources to an array an sort them by name.
+ resources = (Resource[]) matchList.toArray(new Resource[matchList.size()]);
+ Arrays.sort(resources, m_nameComparator);
+ return resources;
+ }
+
public Requirement requirement(String name, String filter) {
RequirementImpl req = new RequirementImpl();
req.setName(name);
Modified: felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/RepositoryImplTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/RepositoryImplTest.java?rev=912356&r1=912355&r2=912356&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/RepositoryImplTest.java (original)
+++ felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/RepositoryImplTest.java Sun Feb 21 14:31:33 2010
@@ -42,7 +42,7 @@
assertEquals("referred.xml", refs[0].getUrl());
// expect two resources
- Resource[] res = repoAdmin.discoverResources(null);
+ Resource[] res = repoAdmin.discoverResources((String) null);
assertNotNull("Expect Resource", res);
assertEquals("Expect two resources", 2, res.length);
@@ -71,7 +71,7 @@
assertEquals("referred.xml", refs[0].getUrl());
// expect one resource (referral is not followed
- Resource[] res = repoAdmin.discoverResources(null);
+ Resource[] res = repoAdmin.discoverResources((String) null);
assertNotNull("Expect Resource", res);
assertEquals("Expect one resource", 1, res.length);
Modified: felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/ResolverImplTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/ResolverImplTest.java?rev=912356&r1=912355&r2=912356&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/ResolverImplTest.java (original)
+++ felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/ResolverImplTest.java Sun Feb 21 14:31:33 2010
@@ -23,6 +23,7 @@
import junit.framework.TestCase;
import org.osgi.service.obr.Repository;
+import org.osgi.service.obr.Requirement;
import org.osgi.service.obr.Resolver;
import org.osgi.service.obr.Resource;
@@ -53,7 +54,17 @@
}
- public void testResolveReq() throws Exception
+ public void testMatchingReq() throws Exception
+ {
+ RepositoryAdminImpl repoAdmin = createRepositoryAdmin();
+ repoAdmin.addRepository(getClass().getResource("/repo_for_resolvertest.xml"));
+
+ Resource[] res = repoAdmin.discoverResources(new Requirement[] { repoAdmin.requirement("package", "(package=org.apache.felix.test.osgi)") });
+ assertNotNull(res);
+ assertEquals(1, res.length);
+ }
+
+ public void testResolveReq() throws Exception
{
RepositoryAdminImpl repoAdmin = createRepositoryAdmin();
repoAdmin.addRepository(getClass().getResource("/repo_for_resolvertest.xml"));
Modified: felix/trunk/org.osgi.service.obr/src/main/java/org/osgi/service/obr/RepositoryAdmin.java
URL: http://svn.apache.org/viewvc/felix/trunk/org.osgi.service.obr/src/main/java/org/osgi/service/obr/RepositoryAdmin.java?rev=912356&r1=912355&r2=912356&view=diff
==============================================================================
--- felix/trunk/org.osgi.service.obr/src/main/java/org/osgi/service/obr/RepositoryAdmin.java (original)
+++ felix/trunk/org.osgi.service.obr/src/main/java/org/osgi/service/obr/RepositoryAdmin.java Sun Feb 21 14:31:33 2010
@@ -76,6 +76,14 @@
Resource[] discoverResources(String filterExpr);
/**
+ * Discover any resources that match the given requirements.
+ *
+ * @param requirements
+ * @return List of resources matching the filter
+ */
+ Resource[] discoverResources(Requirement[] requirements);
+
+ /**
* Create a resolver.
*
* @return