You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2014/12/22 13:00:52 UTC
svn commit: r1647295 - in /felix/sandbox/pderop/dependencymanager-prototype:
./ cnf/localrepo/ org.apache.felix.dependencymanager.itest/
org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/
org.apache.felix.dependencymanager.itest/sr...
Author: pderop
Date: Mon Dec 22 12:00:51 2014
New Revision: 1647295
URL: http://svn.apache.org/r1647295
Log:
- fixed bug in some tests using ResourceProviders (the ResourceProvider.change method was not using filters)
- the integration tests (core+runtime) are not using anymore multi-bundles
- fixed FELIX2955_ShellCommandTest.java, which is now starting/stoping/restarting the dm runtime bundle
- added shell in runtime.itest/bnd.bnd, because under gradle, the core itests is also executed (by dependency)
- updated the README in order to explain how to build/test using gradle
Now, all tests (junit + itests) can be run with gradle like this:
gradle org.apache.felix.dependencymanager:test org.apache.felix.dependencymanager.shell:test
gradle org.apache.felix.dependencymanager.runtime.itest:check
Added:
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceProvider.java
Removed:
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/api.bnd
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/bundle.bnd
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/bundle/
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime.itest/tests.bnd
Modified:
felix/sandbox/pderop/dependencymanager-prototype/README
felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml
felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/bnd.bnd
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2348_ResourceAdapterTest.java
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2955_ShellCommandTest.java
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FilterIndexResourceAdapterTest.java
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest.java
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest2.java
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterTest.java
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceDependencyTest.java
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceUpdateTest.java
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd
Modified: felix/sandbox/pderop/dependencymanager-prototype/README
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/README?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/README (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/README Mon Dec 22 12:00:51 2014
@@ -6,27 +6,55 @@ Dependency Manager 4.0.0 general README
- org.apache.felix.dependencymanager.benchmark/README
- doc/A_Glance_At_DependencyManager.odp gives a quick overview of Dependency Manager, including new features.
-* to compile:
+* to compile under eclipse/bndtools
- Install either Eclipse Kepler SR2 (+ Java8 support which is needed by benchmark sub project) or Eclipse Luna.
- Install java7/Java8 JREs in Eclipse (Window -> Preferences -> Java -> Installed JREs).
- (Use JRE 1.7 as the default JRE)
+ (Use JRE 1.7 as the default JRE; the Jdk1.8 is only required for the org.apache.felix.dependencymanager.benchmark project)
- Open BndTools perpective.
- Import Dependency Manager into Eclipse.
-* To run tests:
+* To run tests (under eclipse/bndtools)
- Click on org.apache.felix.dependencymanager project and run it as "JUnit test".
+- Click on org.apache.felix.dependencymanager.shell and run it as "JUnit test"
- Click on org.apache.felix.dependencymanager.itest and run it as "Bnd OSGi Test Launcer (Junit)".
- Click on org.apache.felix.dependencymanager.runtime.itest and run it as ""Bnd OSGi Test Launcer (Junit)".
-- Click on org.apache.felix.dependencymanager.shell and run it as "JUnit test"
-* To execute samples:
+* To execute samples (under eclipse/bndtools)
- Click on org.apache.felix.dependencymanager.samples and run it as "Bnd OSGi Run Launcher"
-* To execute the benchmark (requires Jdk1.8)
+* To execute the benchmark (under eclipse/bndtools; requires Jdk1.8)
- Click on org.apache.felix.dependencymanager.benchmark and run it as ""Bnd OSGi Run Launcher"
More informations on the benchmark can be found from org.apache.felix.dependencymanager.benchmark/README file.
+* to compile with gradle:
+
+- Install Jdk1.7
+- Install gradle (at least 2.1)
+- compile Dependendency Manager bundles (core,shell,runtime,annotations):
+
+ gradle org.apache.felix.dependencymanager:jar org.apache.felix.dependencymanager.shell:jar org.apache.felix.dependencymanager.runtime:jar org.apache.felix.dependencymanager.annotation:jar
+
+- Then compile the samples (optional)
+
+ gradle gradle org.apache.felix.dependencymanager.samples:jar
+
+- Then compile the benchmark (optional):
+
+ install jdk1.8
+ gradle org.apache.felix.dependencymanager.benchmark:jar
+
+* to run tests (junit + integration tests) with gradle:
+
+- run junit tests:
+
+ gradle org.apache.felix.dependencymanager:test org.apache.felix.dependencymanager.shell:test
+
+- run integration tests (the following will run the core + runtime itests):
+
+ gradle org.apache.felix.dependencymanager.runtime.itest:check
+
+
Modified: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
Binary files - no diff available.
Modified: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha Mon Dec 22 12:00:51 2014
@@ -1 +1 @@
-c86ef139973958be47edbdb34306a593d72d94af2501e019cba340f7231a1acd
\ No newline at end of file
+09a12ca8f1b8f15ad30c28c3ba3059a0704aab4369f13a87d0e152326baf0980
\ No newline at end of file
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/bnd.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/bnd.bnd?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/bnd.bnd (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/bnd.bnd Mon Dec 22 12:00:51 2014
@@ -4,7 +4,8 @@
org.apache.felix.dependencymanager;version=latest,\
org.apache.felix.dependencymanager.shell;version=latest,\
org.apache.felix.log;version=1.0.1,\
- org.apache.felix.configadmin;version=1.8.1
+ org.apache.felix.configadmin;version=1.8.1,\
+ org.apache.felix.dependencymanager.runtime;version=latest
-runee: JavaSE-1.7
-runvm: -ea
-runfw: org.apache.felix.framework
@@ -17,5 +18,7 @@
${junit}
-runsystempackages: \
sun.reflect
--sub: \
- *.bnd
\ No newline at end of file
+Test-Cases: \
+ ${classes;CONCRETE;EXTENDS;junit.framework.TestCase}
+Export-Package: \
+ org.apache.felix.dm.itest
\ No newline at end of file
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2348_ResourceAdapterTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2348_ResourceAdapterTest.java?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2348_ResourceAdapterTest.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2348_ResourceAdapterTest.java Mon Dec 22 12:00:51 2014
@@ -27,7 +27,9 @@ public class FELIX2348_ResourceAdapterTe
Ensure e = new Ensure();
m.add(m.createResourceAdapterService("(&(path=/path/to/*.txt)(host=localhost))", false, null, "changed")
.setImplementation(new ResourceAdapter(e)));
- m.add(m.createComponent().setImplementation(new ResourceProvider(e)).add(m.createServiceDependency().setService(ResourceHandler.class).setCallbacks("add", "remove")));
+ URL resourceURL = new URL("file://localhost/path/to/file1.txt");
+ m.add(m.createComponent().setImplementation(new ResourceProvider(context, resourceURL))
+ .add(m.createServiceDependency().setService(ResourceHandler.class).setCallbacks("add", "remove")));
e.waitForStep(3, 5000);
m.clear();
}
@@ -54,69 +56,5 @@ public class FELIX2348_ResourceAdapterTe
Assert.fail("We should not have gotten this exception.");
}
}
- }
-
- static class ResourceProvider {
- private volatile BundleContext m_context;
- private final Ensure m_ensure;
- private final Map m_handlers = new HashMap();
- private URL[] m_resources;
-
- public ResourceProvider(Ensure ensure) throws MalformedURLException {
- m_ensure = ensure;
- m_resources = new URL[] {
- new URL("file://localhost/path/to/file1.txt")
- };
- }
-
- public void add(ServiceReference ref, ResourceHandler handler) {
- String filterString = (String) ref.getProperty("filter");
- Filter filter = null;
- if (filterString != null) {
- try {
- filter = m_context.createFilter(filterString);
- }
- catch (InvalidSyntaxException e) {
- Assert.fail("Could not create filter for resource handler: " + e);
- return;
- }
- }
- synchronized (m_handlers) {
- m_handlers.put(handler, filter);
- }
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.added(m_resources[i]);
- }
- }
- }
-
- public void remove(ServiceReference ref, ResourceHandler handler) {
- Filter filter;
- synchronized (m_handlers) {
- filter = (Filter) m_handlers.remove(handler);
- }
- removeResources(handler, filter);
- }
-
- private void removeResources(ResourceHandler handler, Filter filter) {
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.removed(m_resources[i]);
- }
- }
- }
-
- public void destroy() {
- Entry[] handlers;
- synchronized (m_handlers) {
- handlers = (Entry[]) m_handlers.entrySet().toArray(new Entry[m_handlers.size()]);
- }
- for (int i = 0; i < handlers.length; i++) {
- removeResources((ResourceHandler) handlers[i].getKey(), (Filter) handlers[i].getValue());
- }
-
- System.out.println("DESTROY..." + m_handlers.size());
- }
- }
+ }
}
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2955_ShellCommandTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2955_ShellCommandTest.java?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2955_ShellCommandTest.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FELIX2955_ShellCommandTest.java Mon Dec 22 12:00:51 2014
@@ -35,48 +35,49 @@ public class FELIX2955_ShellCommandTest
public void testShellCommands() throws Throwable {
try {
- m_myBundleId = context.getBundle().getBundleId();
- for (Bundle b : context.getBundles()) {
- if (b.getSymbolicName().equals("org.apache.felix.dependencymanager.itest.bundle")) {
- m_testBundle = b;
- b.stop();
- break;
- }
- }
- DependencyManager m = getDM();
- // helper class that ensures certain steps get executed in sequence
- Ensure e = new Ensure();
+ m_myBundleId = context.getBundle().getBundleId();
+ for (Bundle b : context.getBundles()) {
+ if (b.getSymbolicName().equals("org.apache.felix.dependencymanager.runtime")) {
+ m_testBundle = b;
+ b.stop();
+ break;
+ }
+ }
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
- Component shellClient = m.createComponent();
- Component missing = m.createComponent();
+ Component shellClient = m.createComponent();
+ Component missing = m.createComponent();
- long shellClientId = shellClient.getComponentDeclaration().getId();
- long missingId = missing.getComponentDeclaration().getId();
- shellClient.setImplementation(new ShellClient(e, shellClientId, missingId))
- .add(m.createServiceDependency()
- .setService(CommandProcessor.class)
- .setRequired(true)
- );
- m.add(shellClient);
- e.waitForStep(3, 5000);
- // now create a component with a missing dependency
- missing.setImplementation(new Object() { public String toString() { return "Object"; }})
- .add(m.createServiceDependency()
- .setService(Missing.class) // Warning: don't use Object, or Runnable, which are already registered by bndtools ?
- .setRequired(true)
- );
- m.add(missing);
- e.step(4);
- e.waitForStep(5, 5000);
- m.remove(missing);
- // now start/stop our test bundle, which publishes a service that uses the dependency manager
- m_testBundle.start();
- m_testBundle.stop();
- e.step(6);
- e.waitForStep(7, 5000);
- e.ensure();
- m.remove(shellClient);
- m.clear();
+ long shellClientId = shellClient.getComponentDeclaration().getId();
+ long missingId = missing.getComponentDeclaration().getId();
+ shellClient.setImplementation(new ShellClient(e, shellClientId, missingId))
+ .add(m.createServiceDependency()
+ .setService(CommandProcessor.class)
+ .setRequired(true));
+
+ m.add(shellClient);
+ e.waitForStep(3, 5000);
+ // now create a component with a missing dependency
+ missing.setImplementation(new Object() { public String toString() { return "Object"; }})
+ .add(m.createServiceDependency()
+ .setService(Missing.class) // Warning: don't use Object, or Runnable, which are already registered by bndtools ?
+ .setRequired(true));
+
+ m.add(missing);
+ e.step(4);
+ e.waitForStep(5, 5000);
+ m.remove(missing);
+ // now start/stop our test bundle, which publishes a service that uses the dependency manager
+ m_testBundle.start();
+ m_testBundle.stop();
+ e.step(6);
+ e.waitForStep(7, 5000);
+ e.ensure();
+ m.remove(shellClient);
+ m_testBundle.start(); // restart the runtime bundle
+ m.clear();
}
catch (Throwable t) {
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FilterIndexResourceAdapterTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FilterIndexResourceAdapterTest.java?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FilterIndexResourceAdapterTest.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/FilterIndexResourceAdapterTest.java Mon Dec 22 12:00:51 2014
@@ -30,7 +30,7 @@ public class FilterIndexResourceAdapterT
// helper class that ensures certain steps get executed in sequence
Ensure e = new Ensure();
// create a resource provider
- ResourceProvider provider = new ResourceProvider(e);
+ ResourceProvider provider = new ResourceProvider(context, new URL("file://localhost/path/to/file1.txt"));
// activate it
m.add(m.createComponent().setImplementation(provider).add(m.createServiceDependency().setService(ResourceHandler.class).setCallbacks("add", "remove")));
// create a resource adapter for our single resource
@@ -74,81 +74,5 @@ public class FilterIndexResourceAdapterT
public void changed() {
m_ensure.step(4);
}
- }
-
- static class ResourceProvider {
- private volatile BundleContext m_context;
- private final Map m_handlers = new HashMap();
- private URL[] m_resources;
-
- public ResourceProvider(Ensure ensure) throws MalformedURLException {
- m_resources = new URL[] {
- new URL("file://localhost/path/to/file1.txt")
- };
- }
-
- public void change() {
- ResourceHandler[] handlers;
- synchronized (m_handlers) {
- handlers = (ResourceHandler[]) m_handlers.keySet().toArray(new ResourceHandler[m_handlers.size()]);
- }
- for (int i = 0; i < m_resources.length; i++) {
- for (int j = 0; j < handlers.length; j++) {
- ResourceHandler handler = handlers[j];
- handler.changed(m_resources[i]);
- }
- }
- }
-
- public void add(ServiceReference ref, ResourceHandler handler) {
- System.out.println("RP.add: " + ServiceUtil.toString(ref));
- String filterString = (String) ref.getProperty("filter");
- Filter filter = null;
- if (filterString != null) {
- try {
- filter = m_context.createFilter(filterString);
- }
- catch (InvalidSyntaxException e) {
- Assert.fail("Could not create filter for resource handler: " + e);
- return;
- }
- }
- synchronized (m_handlers) {
- m_handlers.put(handler, filter);
- }
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.added(m_resources[i]);
- }
- }
- }
-
- public void remove(ServiceReference ref, ResourceHandler handler) {
- Filter filter;
- synchronized (m_handlers) {
- filter = (Filter) m_handlers.remove(handler);
- }
- removeResources(handler, filter);
- }
-
- private void removeResources(ResourceHandler handler, Filter filter) {
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.removed(m_resources[i]);
- }
- }
- }
-
- public void destroy() {
- Entry[] handlers;
- synchronized (m_handlers) {
- handlers = (Entry[]) m_handlers.entrySet().toArray(new Entry[m_handlers.size()]);
- }
- for (int i = 0; i < handlers.length; i++) {
- removeResources((ResourceHandler) handlers[i].getKey(), (Filter) handlers[i].getValue());
- }
-
- System.out.println("DESTROY..." + m_handlers.size());
- }
- }
+ }
}
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest.java?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest.java Mon Dec 22 12:00:51 2014
@@ -4,7 +4,6 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
-import java.util.Map.Entry;
import junit.framework.Assert;
@@ -20,7 +19,7 @@ import org.osgi.framework.Filter;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
-@SuppressWarnings({"deprecation", "unchecked", "rawtypes", "unused"})
+@SuppressWarnings({"deprecation", "unused"})
public class ResourceAdapterDependencyAddAndRemoveTest extends TestBase {
public void testBasicResourceAdapter() throws Exception {
DependencyManager m = getDM();
@@ -33,7 +32,7 @@ public class ResourceAdapterDependencyAd
.setImplementation(new ServiceProvider(e)));
// create and add a resource provider
- ResourceProvider provider = new ResourceProvider(e);
+ ResourceProvider provider = new ResourceProvider(context, new URL("file://localhost/path/to/file1.txt"));
m.add(m.createComponent()
.setImplementation(provider)
.add(m.createServiceDependency()
@@ -85,88 +84,7 @@ public class ResourceAdapterDependencyAd
m_ensure = e;
}
}
-
- class ResourceProvider {
- private volatile BundleContext m_context;
- private final Ensure m_ensure;
- private final Map m_handlers = new HashMap();
- private URL[] m_resources;
-
- public ResourceProvider(Ensure ensure) throws MalformedURLException {
- m_ensure = ensure;
- m_resources = new URL[] {
- new URL("file://localhost/path/to/file1.txt")
- };
- }
- public void change() {
- ResourceHandler[] handlers;
- synchronized (m_handlers) {
- handlers = (ResourceHandler[]) m_handlers.keySet().toArray(new ResourceHandler[m_handlers.size()]);
- }
- for (int i = 0; i < m_resources.length; i++) {
- for (int j = 0; j < handlers.length; j++) {
- ResourceHandler handler = handlers[j];
- handler.changed(m_resources[i]);
- }
- }
- }
-
- public void add(ServiceReference ref, ResourceHandler handler) {
- debug("ResourceProvider.add(ref=%s, handler=%s", ref, handler);
- String filterString = (String) ref.getProperty("filter");
- Filter filter = null;
- if (filterString != null) {
- try {
- filter = m_context.createFilter(filterString);
- }
- catch (InvalidSyntaxException e) {
- Assert.fail("Could not create filter for resource handler: " + e);
- return;
- }
- }
- synchronized (m_handlers) {
- m_handlers.put(handler, filter);
- }
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.added(m_resources[i]);
- }
- }
- }
-
- public void remove(ServiceReference ref, ResourceHandler handler) {
- Filter filter;
- synchronized (m_handlers) {
- debug("ResourceProvider.remove: ref=%s, handler=%s, handlers=%s", ref, handler, m_handlers);
- filter = (Filter) m_handlers.remove(handler);
- }
- removeResources(handler, filter);
- }
-
- private void removeResources(ResourceHandler handler, Filter filter) {
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.removed(m_resources[i]);
- }
- }
- }
-
- public void destroy() {
- debug("ResourceProvider:%s", m_handlers);
- Entry[] handlers;
- synchronized (m_handlers) {
- debug("ResourceProvider.destroy: handlers=%s", m_handlers);
- handlers = (Entry[]) m_handlers.entrySet().toArray(new Entry[m_handlers.size()]);
- }
- for (int i = 0; i < handlers.length; i++) {
- removeResources((ResourceHandler) handlers[i].getKey(), (Filter) handlers[i].getValue());
- }
-
- debug("DESTROY...%d", m_handlers.size());
- }
- }
-
static interface ServiceInterface {
public void invoke();
}
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest2.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest2.java?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest2.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterDependencyAddAndRemoveTest2.java Mon Dec 22 12:00:51 2014
@@ -28,7 +28,7 @@ public class ResourceAdapterDependencyAd
// helper class that ensures certain steps get executed in sequence
Ensure e = new Ensure();
// create a resource provider
- ResourceProvider provider = new ResourceProvider(e);
+ ResourceProvider provider = new ResourceProvider(context, new URL("file://localhost/path/to/file1.txt"));
// activate it
Hashtable props = new Hashtable();
props.put("id", "1");
@@ -85,82 +85,7 @@ public class ResourceAdapterDependencyAd
m_dependency = d;
}
}
-
- static class ResourceProvider {
- private volatile BundleContext m_context;
- private final Ensure m_ensure;
- private final Map m_handlers = new HashMap();
- private URL[] m_resources;
-
- public ResourceProvider(Ensure ensure) throws MalformedURLException {
- m_ensure = ensure;
- m_resources = new URL[] {
- new URL("file://localhost/path/to/file1.txt")
- };
- }
- public void change() {
- ResourceHandler[] handlers;
- synchronized (m_handlers) {
- handlers = (ResourceHandler[]) m_handlers.keySet().toArray(new ResourceHandler[m_handlers.size()]);
- }
- for (int i = 0; i < m_resources.length; i++) {
- for (int j = 0; j < handlers.length; j++) {
- ResourceHandler handler = handlers[j];
- handler.changed(m_resources[i]);
- }
- }
- }
-
- public void add(ServiceReference ref, ResourceHandler handler) {
- String filterString = (String) ref.getProperty("filter");
- Filter filter = null;
- if (filterString != null) {
- try {
- filter = m_context.createFilter(filterString);
- }
- catch (InvalidSyntaxException e) {
- Assert.fail("Could not create filter for resource handler: " + e);
- return;
- }
- }
- synchronized (m_handlers) {
- m_handlers.put(handler, filter);
- }
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.added(m_resources[i]);
- }
- }
- }
-
- public void remove(ServiceReference ref, ResourceHandler handler) {
- Filter filter;
- synchronized (m_handlers) {
- filter = (Filter) m_handlers.remove(handler);
- }
- removeResources(handler, filter);
- }
-
- private void removeResources(ResourceHandler handler, Filter filter) {
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.removed(m_resources[i]);
- }
- }
- }
-
- public void destroy() {
- Entry[] handlers;
- synchronized (m_handlers) {
- handlers = (Entry[]) m_handlers.entrySet().toArray(new Entry[m_handlers.size()]);
- }
- for (int i = 0; i < handlers.length; i++) {
- removeResources((ResourceHandler) handlers[i].getKey(), (Filter) handlers[i].getValue());
- }
- }
- }
-
static interface ServiceInterface {
public void invoke();
}
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterTest.java?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterTest.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceAdapterTest.java Mon Dec 22 12:00:51 2014
@@ -26,7 +26,7 @@ public class ResourceAdapterTest extends
// helper class that ensures certain steps get executed in sequence
Ensure e = new Ensure();
// create a resource provider
- ResourceProvider provider = new ResourceProvider(e);
+ ResourceProvider provider = new ResourceProvider(context, new URL("file://localhost/path/to/file1.txt"));
// activate it
m.add(m.createComponent().setImplementation(provider).add(m.createServiceDependency().setService(ResourceHandler.class).setCallbacks("add", "remove")));
// create a resource adapter for our single resource
@@ -69,82 +69,5 @@ public class ResourceAdapterTest extends
public void changed() {
m_ensure.step(4);
}
- }
-
- static class ResourceProvider {
- private volatile BundleContext m_context;
- private final Ensure m_ensure;
- private final Map m_handlers = new HashMap();
- private URL[] m_resources;
-
- public ResourceProvider(Ensure ensure) throws MalformedURLException {
- m_ensure = ensure;
- m_resources = new URL[] {
- new URL("file://localhost/path/to/file1.txt")
- };
- }
-
- public void change() {
- ResourceHandler[] handlers;
- synchronized (m_handlers) {
- handlers = (ResourceHandler[]) m_handlers.keySet().toArray(new ResourceHandler[m_handlers.size()]);
- }
- for (int i = 0; i < m_resources.length; i++) {
- for (int j = 0; j < handlers.length; j++) {
- ResourceHandler handler = handlers[j];
- handler.changed(m_resources[i]);
- }
- }
- }
-
- public void add(ServiceReference ref, ResourceHandler handler) {
- String filterString = (String) ref.getProperty("filter");
- Filter filter = null;
- if (filterString != null) {
- try {
- filter = m_context.createFilter(filterString);
- }
- catch (InvalidSyntaxException e) {
- Assert.fail("Could not create filter for resource handler: " + e);
- return;
- }
- }
- synchronized (m_handlers) {
- m_handlers.put(handler, filter);
- }
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.added(m_resources[i]);
- }
- }
- }
-
- public void remove(ServiceReference ref, ResourceHandler handler) {
- Filter filter;
- synchronized (m_handlers) {
- filter = (Filter) m_handlers.remove(handler);
- }
- removeResources(handler, filter);
- }
-
- private void removeResources(ResourceHandler handler, Filter filter) {
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.removed(m_resources[i]);
- }
- }
- }
-
- public void destroy() {
- Entry[] handlers;
- synchronized (m_handlers) {
- handlers = (Entry[]) m_handlers.entrySet().toArray(new Entry[m_handlers.size()]);
- }
- for (int i = 0; i < handlers.length; i++) {
- removeResources((ResourceHandler) handlers[i].getKey(), (Filter) handlers[i].getValue());
- }
-
- System.out.println("DESTROY..." + m_handlers.size());
- }
- }
+ }
}
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceDependencyTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceDependencyTest.java?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceDependencyTest.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceDependencyTest.java Mon Dec 22 12:00:51 2014
@@ -22,7 +22,7 @@ import org.osgi.framework.ServiceReferen
@SuppressWarnings({"deprecation", "rawtypes", "unused"})
public class ResourceDependencyTest extends TestBase {
- public void testResourceDependency() {
+ public void testResourceDependency() throws MalformedURLException {
DependencyManager m = getDM();
// helper class that ensures certain steps get executed in sequence
Ensure e = new Ensure();
@@ -38,7 +38,10 @@ public class ResourceDependencyTest exte
.add(m.createResourceDependency()
.setFilter("(path=*.doc)")
.setCallbacks("add", null));
- ResourceProvider provider = new ResourceProvider(e);
+ ResourceProvider provider = new ResourceProvider(context,
+ new URL("file://localhost/path/to/file1.txt"),
+ new URL("file://localhost/path/to/file2.txt"),
+ new URL("file://localhost/path/to/file3.doc"));
Component resourceProvider = m.createComponent()
.setImplementation(provider)
.add(m.createServiceDependency()
@@ -61,7 +64,7 @@ public class ResourceDependencyTest exte
e.waitForStep(4, 5000);
// now change a resource and see if it gets propagated to the consumer
- provider.changeResource();
+ provider.change(0);
// wait for change callback
e.waitForStep(5, 5000);
@@ -102,87 +105,6 @@ public class ResourceDependencyTest exte
}
}
- class ResourceProvider {
- private volatile BundleContext m_context;
- private final Ensure m_ensure;
- private final Map<ResourceHandler, Filter> m_handlers = new HashMap<ResourceHandler, Filter>();
- private URL[] m_resources;
-
- public ResourceProvider(Ensure ensure) {
- m_ensure = ensure;
- try {
- m_resources = new URL[] {
- new URL("file://localhost/path/to/file1.txt"),
- new URL("file://localhost/path/to/file2.txt"),
- new URL("file://localhost/path/to/file3.doc")
- };
- }
- catch (MalformedURLException e) {
- throw new IllegalStateException(e);
- }
- }
-
- public void add(ServiceReference ref, ResourceHandler handler) {
- String filterString = (String) ref.getProperty("filter");
- Filter filter;
- try {
- filter = m_context.createFilter(filterString);
- }
- catch (InvalidSyntaxException e) {
- Assert.fail("Could not create filter for resource handler: " + e);
- return;
- }
- synchronized (m_handlers) {
- m_handlers.put(handler, filter);
- }
- for (int i = 0; i < m_resources.length; i++) {
- if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.added(m_resources[i]);
- }
- }
- }
-
- public void changeResource() {
- Filter filter;
- for (Entry<ResourceHandler, Filter> entry : m_handlers.entrySet()) {
- for (int i = 0; i < m_resources.length; i++) {
- if (i == 0) {
- if (entry.getValue().match(ResourceUtil.createProperties(m_resources[i]))) {
- entry.getKey().changed(m_resources[i]);
- }
- }
- }
- }
- }
-
- public void remove(ServiceReference ref, ResourceHandler handler) {
- debug("ResourceProvider.remove(ref=%s, handler=%s, handlers=%s", ref, handler, m_handlers);
- Filter filter;
- synchronized (m_handlers) {
- filter = (Filter) m_handlers.remove(handler);
- }
- removeResources(handler, filter);
- }
-
- private void removeResources(ResourceHandler handler, Filter filter) {
- for (int i = 0; i < m_resources.length; i++) {
- if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.removed(m_resources[i]);
- }
- }
- }
-
- public void destroy() {
- debug("ResourceProvider.destroy: handlers=%s", m_handlers);
- Entry[] handlers;
- synchronized (m_handlers) {
- handlers = (Entry[]) m_handlers.entrySet().toArray(new Entry[m_handlers.size()]);
- }
- for (int i = 0; i < handlers.length; i++) {
- removeResources((ResourceHandler) handlers[i].getKey(), (Filter) handlers[i].getValue());
- }
- }
- }
class ResourceConsumerFactory {
private final Ensure m_ensure;
Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceProvider.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceProvider.java?rev=1647295&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceProvider.java (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ResourceProvider.java Mon Dec 22 12:00:51 2014
@@ -0,0 +1,98 @@
+package org.apache.felix.dm.itest;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.apache.felix.dm.ResourceHandler;
+import org.apache.felix.dm.ResourceUtil;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+class ResourceProvider {
+ final URL[] m_resources;
+ final BundleContext m_context;
+ final Map<ResourceHandler, Filter> m_handlers = new HashMap<>();
+
+ ResourceProvider(BundleContext ctx, URL ... resources) {
+ m_context = ctx;
+ m_resources = resources;
+ }
+
+ public void change() {
+ for (int i = 0; i < m_resources.length; i++) {
+ change(i);
+ }
+ }
+
+ public void change(int resourceIndex) {
+ Map<ResourceHandler, Filter> handlers = new HashMap<>();
+ synchronized (m_handlers) {
+ handlers.putAll(m_handlers);
+ }
+ for (Map.Entry<ResourceHandler, Filter> e : handlers.entrySet()) {
+ ResourceHandler handler = e.getKey();
+ Filter filter = e.getValue();
+ if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[resourceIndex]))) {
+ handler.changed(m_resources[resourceIndex]);
+ }
+ }
+ }
+
+ public void add(ServiceReference ref, ResourceHandler handler) {
+ String filterString = (String) ref.getProperty("filter");
+ Filter filter = null;
+ if (filterString != null) {
+ try {
+ filter = m_context.createFilter(filterString);
+ }
+ catch (InvalidSyntaxException e) {
+ Assert.fail("Could not create filter for resource handler: " + e);
+ return;
+ }
+ }
+ for (int i = 0; i < m_resources.length; i++) {
+ if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+ synchronized (m_handlers) {
+ m_handlers.put(handler, filter);
+ }
+ handler.added(m_resources[i]);
+ }
+ }
+ }
+
+ public void remove(ServiceReference ref, ResourceHandler handler) {
+ Filter filter;
+ synchronized (m_handlers) {
+ filter = (Filter) m_handlers.remove(handler);
+ }
+ if (filter != null) {
+ removeResources(handler, filter);
+ }
+ }
+
+ private void removeResources(ResourceHandler handler, Filter filter) {
+ for (int i = 0; i < m_resources.length; i++) {
+ if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+ handler.removed(m_resources[i]);
+ }
+ }
+ }
+
+ public void destroy() {
+ Map<ResourceHandler, Filter> handlers = new HashMap<>();
+ synchronized (m_handlers) {
+ handlers.putAll(m_handlers);
+ }
+
+ for (Map.Entry<ResourceHandler, Filter> e : handlers.entrySet()) {
+ ResourceHandler handler = e.getKey();
+ Filter filter = e.getValue();
+ removeResources(handler, filter);
+ }
+ }
+}
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceUpdateTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceUpdateTest.java?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceUpdateTest.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceUpdateTest.java Mon Dec 22 12:00:51 2014
@@ -28,7 +28,7 @@ public class ServiceUpdateTest extends T
// helper class that ensures certain steps get executed in sequence
Ensure e = new Ensure();
// create a resource provider
- ResourceProvider provider = new ResourceProvider(e);
+ ResourceProvider provider = new ResourceProvider(context, new URL("file://localhost/path/to/file1.txt"));
// activate it
m.add(m.createComponent()
.setImplementation(new ServiceProvider(e))
@@ -83,80 +83,7 @@ public class ServiceUpdateTest extends T
}
}
-
- static class ResourceProvider {
- private volatile BundleContext m_context;
- private final Map m_handlers = new HashMap();
- private URL[] m_resources;
-
- public ResourceProvider(Ensure ensure) throws MalformedURLException {
- m_resources = new URL[] {
- new URL("file://localhost/path/to/file1.txt")
- };
- }
- public void change() {
- ResourceHandler[] handlers;
- synchronized (m_handlers) {
- handlers = (ResourceHandler[]) m_handlers.keySet().toArray(new ResourceHandler[m_handlers.size()]);
- }
- for (int i = 0; i < m_resources.length; i++) {
- for (int j = 0; j < handlers.length; j++) {
- ResourceHandler handler = handlers[j];
- handler.changed(m_resources[i]);
- }
- }
- }
-
- public void add(ServiceReference ref, ResourceHandler handler) {
- String filterString = (String) ref.getProperty("filter");
- Filter filter = null;
- if (filterString != null) {
- try {
- filter = m_context.createFilter(filterString);
- }
- catch (InvalidSyntaxException e) {
- Assert.fail("Could not create filter for resource handler: " + e);
- return;
- }
- }
- synchronized (m_handlers) {
- m_handlers.put(handler, filter);
- }
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.added(m_resources[i]);
- }
- }
- }
-
- public void remove(ServiceReference ref, ResourceHandler handler) {
- Filter filter;
- synchronized (m_handlers) {
- filter = (Filter) m_handlers.remove(handler);
- }
- removeResources(handler, filter);
- }
-
- private void removeResources(ResourceHandler handler, Filter filter) {
- for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
- handler.removed(m_resources[i]);
- }
- }
- }
-
- public void destroy() {
- Entry[] handlers;
- synchronized (m_handlers) {
- handlers = (Entry[]) m_handlers.entrySet().toArray(new Entry[m_handlers.size()]);
- }
- for (int i = 0; i < handlers.length; i++) {
- removeResources((ResourceHandler) handlers[i].getKey(), (Filter) handlers[i].getValue());
- }
- }
- }
-
static interface ServiceInterface {
public void invoke();
}
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd?rev=1647295&r1=1647294&r2=1647295&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd Mon Dec 22 12:00:51 2014
@@ -1,26 +1,29 @@
-buildpath: \
osgi.core;version='[4.2,5)',\
org.apache.felix.dependencymanager;version=latest,\
- org.apache.felix.dependencymanager.itest.api;version=latest,\
org.apache.felix.dependencymanager.annotation;version=latest,\
osgi.cmpn;version=4.2,\
${junit},\
- org.apache.felix.dependencymanager.runtime;version=latest
+ org.apache.felix.dependencymanager.runtime;version=latest,\
+ org.apache.felix.dependencymanager.itest;version=latest
-runbundles: \
- org.apache.felix.configadmin;version=1.8.0,\
+ org.apache.felix.configadmin;version=1.8.1,\
org.apache.felix.dependencymanager;version=latest,\
- org.apache.felix.dependencymanager.itest.api;version=latest,\
org.apache.felix.dependencymanager.runtime;version=latest,\
org.apache.felix.metatype;version=1.0.4,\
org.apache.felix.gogo.runtime;version=0.10.0,\
- org.apache.felix.log;version=1.0.1
+ org.apache.felix.log;version=1.0.1,\
+ org.apache.felix.dependencymanager.shell;version=latest,\
+ org.apache.felix.dependencymanager.itest;version=latest
-runee: JavaSE-1.7
-runfw: org.apache.felix.framework;version='[4.4.0,4.4.0]'
-runsystempackages: \
sun.reflect
-runvm:-ea
+Private-Package: \
+ org.apache.felix.dm.runtime.itest.tests,\
+ org.apache.felix.dm.runtime.itest.components
+-plugin: org.apache.felix.dm.annotation.plugin.bnd.AnnotationPlugin;log=debug;\
+ path:=${workspace}/org.apache.felix.dependencymanager.annotation/generated/org.apache.felix.dependencymanager.annotation.jar
Test-Cases: \
${classes;CONCRETE;EXTENDS;junit.framework.TestCase}
-
--sub: \
- *.bnd
\ No newline at end of file