Device driver framework enhancements and CLI.
Change-Id: I5dea67620259797eff89a985718934034a86d63e
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 9c7fddb..5f7e2e2 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
@@ -30,6 +30,7 @@
import org.onosproject.net.driver.Behaviour;
import org.onosproject.net.driver.DefaultDriverData;
import org.onosproject.net.driver.DefaultDriverHandler;
+import org.onosproject.net.driver.DefaultDriverProvider;
import org.onosproject.net.driver.Driver;
import org.onosproject.net.driver.DriverAdminService;
import org.onosproject.net.driver.DriverHandler;
@@ -40,6 +41,7 @@
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import java.util.stream.Collectors;
import static org.onlab.util.Tools.nullIsNotFound;
import static org.onosproject.net.AnnotationKeys.DRIVER;
@@ -49,7 +51,7 @@
*/
@Component(immediate = true)
@Service
-public class DriverManager implements DriverAdminService {
+public class DriverManager extends DefaultDriverProvider implements DriverAdminService {
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -61,7 +63,6 @@
protected DeviceService deviceService;
private Set<DriverProvider> providers = Sets.newConcurrentHashSet();
- private Map<String, Driver> driverByName = Maps.newConcurrentMap();
private Map<String, Driver> driverByKey = Maps.newConcurrentMap();
@Activate
@@ -83,7 +84,7 @@
@Override
public void registerProvider(DriverProvider provider) {
provider.getDrivers().forEach(driver -> {
- driverByName.put(driver.name(), driver);
+ addDrivers(provider.getDrivers());
driverByKey.put(key(driver.manufacturer(),
driver.hwVersion(),
driver.swVersion()), driver);
@@ -94,7 +95,7 @@
@Override
public void unregisterProvider(DriverProvider provider) {
provider.getDrivers().forEach(driver -> {
- driverByName.remove(driver.name());
+ removeDrivers(provider.getDrivers());
driverByKey.remove(key(driver.manufacturer(),
driver.hwVersion(),
driver.swVersion()));
@@ -103,21 +104,22 @@
}
@Override
- public Set<Driver> getDrivers(Class<? extends Behaviour>... withBehaviours) {
+ public Set<Driver> getDrivers() {
ImmutableSet.Builder<Driver> builder = ImmutableSet.builder();
- for (Class<? extends Behaviour> behaviour : withBehaviours) {
- driverByName.forEach((name, driver) -> {
- if (driver.hasBehaviour(behaviour)) {
- builder.add(driver);
- }
- });
- }
+ drivers.values().forEach(builder::add);
return builder.build();
}
@Override
+ public Set<Driver> getDrivers(Class<? extends Behaviour> withBehaviour) {
+ return drivers.values().stream()
+ .filter(d -> d.hasBehaviour(withBehaviour))
+ .collect(Collectors.toSet());
+ }
+
+ @Override
public Driver getDriver(String driverName) {
- return nullIsNotFound(driverByName.get(driverName), NO_DRIVER);
+ return nullIsNotFound(drivers.get(driverName), NO_DRIVER);
}
@Override
@@ -134,7 +136,7 @@
.filter(d -> matches(d, mfr, hw, sw)).findFirst();
// If no matching driver is found, return default.
- return optional.isPresent() ? optional.get() : driverByName.get(DEFAULT);
+ return optional.isPresent() ? optional.get() : drivers.get(DEFAULT);
}
// Matches the given driver using ERE matching against the given criteria.
@@ -163,6 +165,7 @@
return new DefaultDriverHandler(new DefaultDriverData(driver));
}
+ // Produces a composite driver key using the specified components.
private String key(String mfr, String hw, String sw) {
return String.format("%s-%s-%s", mfr, hw, sw);
}