1 package org.simantics.scl.osgi.internal;
\r
4 import java.util.ArrayList;
\r
5 import java.util.Collection;
\r
6 import java.util.Enumeration;
\r
8 import org.osgi.framework.Bundle;
\r
9 import org.osgi.framework.BundleContext;
\r
10 import org.osgi.framework.BundleEvent;
\r
11 import org.osgi.service.component.ComponentContext;
\r
12 import org.osgi.service.component.annotations.Activate;
\r
13 import org.osgi.service.component.annotations.Component;
\r
14 import org.osgi.service.component.annotations.Deactivate;
\r
15 import org.osgi.util.tracker.BundleTracker;
\r
16 import org.simantics.scl.compiler.testing.TestRunnable;
\r
17 import org.simantics.scl.compiler.testing.repository.TestRepository;
\r
19 import gnu.trove.map.hash.THashMap;
\r
22 public class BundleTestScriptRepository implements TestRepository {
\r
25 THashMap<String, BundleTestScriptRunnable> testsRunnables = new THashMap<String, BundleTestScriptRunnable>();
\r
26 THashMap<Bundle, ArrayList<String>> testsPerBundle = new THashMap<Bundle, ArrayList<String>>();
\r
29 public void activate(ComponentContext context) {
\r
30 tracker = new Tracker(context.getBundleContext());
\r
35 public void deactivate() {
\r
39 class Tracker extends BundleTracker<Bundle> {
\r
40 public Tracker(BundleContext context) {
\r
41 super(context, 0xffffffff, null);
\r
45 synchronized public Bundle addingBundle(Bundle bundle, BundleEvent event) {
\r
46 Enumeration<URL> urls = bundle.findEntries("sclTests", "*.sts", true);
\r
48 ArrayList<String> modulesInThisBundle = new ArrayList<String>();
\r
49 while(urls.hasMoreElements()) {
\r
50 URL url = urls.nextElement();
\r
51 String path = url.getPath();
\r
52 String testName = path.substring(10, path.length()-4);
\r
53 testsRunnables.put(testName, new BundleTestScriptRunnable(testName, url));
\r
54 modulesInThisBundle.add(testName);
\r
56 testsPerBundle.put(bundle, modulesInThisBundle);
\r
62 synchronized public void removedBundle(Bundle bundle, BundleEvent event,
\r
64 ArrayList<String> moduleList = testsPerBundle.get(bundle);
\r
65 if(moduleList != null)
\r
66 for(String moduleName : moduleList)
\r
67 testsRunnables.remove(moduleName);
\r
72 public void collectTests(Collection<TestRunnable> tests) {
\r
73 tests.addAll(testsRunnables.values());
\r