Allowing driver loaders to refer to classes loaded by others.
Change-Id: Ife4e50758620d4c052a7bb81740d9b9305647317
diff --git a/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java b/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java
index 9f88bc7..9718610 100644
--- a/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java
+++ b/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java
@@ -70,6 +70,7 @@
private Set<DriverProvider> providers = Sets.newConcurrentHashSet();
private Map<String, Driver> driverByKey = Maps.newConcurrentMap();
+ private Map<String, Class<? extends Behaviour>> classes = Maps.newConcurrentMap();
@Activate
protected void activate() {
@@ -80,6 +81,9 @@
@Deactivate
protected void deactivate() {
AbstractProjectableModel.setDriverService(this, null);
+ providers.clear();
+ driverByKey.clear();
+ classes.clear();
log.info("Stopped");
}
@@ -95,6 +99,11 @@
driverByKey.put(key(driver.manufacturer(),
driver.hwVersion(),
driver.swVersion()), d);
+ d.behaviours().forEach(b -> {
+ Class<? extends Behaviour> implementation = d.implementation(b);
+ classes.put(b.getName(), b);
+ classes.put(implementation.getName(), implementation);
+ });
});
providers.add(provider);
}
@@ -111,6 +120,11 @@
}
@Override
+ public Class<? extends Behaviour> getBehaviourClass(String className) {
+ return classes.get(className);
+ }
+
+ @Override
public Set<Driver> getDrivers() {
checkPermission(DRIVER_READ);
ImmutableSet.Builder<Driver> builder = ImmutableSet.builder();