Fixing a discrepancy in driver manager implementation.
Change-Id: I774a3ed26dc6d34d6bdc5834e8e38d4d1741c5ed
diff --git a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java
index b2b5281..23d1047 100644
--- a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java
+++ b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java
@@ -45,19 +45,17 @@
}
/**
- * Adds the specified driver to the provider.
+ * Adds the specified driver to the provider. If a driver with the same
+ * does not exist yet, the specified one will be added. Otherwise, the
+ * existing driver will be merged with the new one and the result will be
+ * registered.
*
* @param driver driver to be provided
+ * @return registered driver
*/
- public void addDriver(Driver driver) {
- Driver ddc = drivers.get(driver.name());
- if (ddc == null) {
- // If we don't have the driver yet, just use the new one.
- drivers.put(driver.name(), driver);
- } else {
- // Otherwise merge the existing driver with the new one and rebind.
- drivers.put(driver.name(), ddc.merge(driver));
- }
+ public Driver addDriver(Driver driver) {
+ return drivers.compute(driver.name(), (name, oldDriver) ->
+ oldDriver == null ? driver : oldDriver.merge(driver));
}
/**