Committed by
Gerrit Code Review
Fixing a discrepancy in driver manager implementation.
Change-Id: I774a3ed26dc6d34d6bdc5834e8e38d4d1741c5ed
Showing
2 changed files
with
11 additions
and
17 deletions
... | @@ -45,19 +45,17 @@ public class DefaultDriverProvider implements DriverProvider { | ... | @@ -45,19 +45,17 @@ public class DefaultDriverProvider implements DriverProvider { |
45 | } | 45 | } |
46 | 46 | ||
47 | /** | 47 | /** |
48 | - * Adds the specified driver to the provider. | 48 | + * Adds the specified driver to the provider. If a driver with the same |
49 | + * does not exist yet, the specified one will be added. Otherwise, the | ||
50 | + * existing driver will be merged with the new one and the result will be | ||
51 | + * registered. | ||
49 | * | 52 | * |
50 | * @param driver driver to be provided | 53 | * @param driver driver to be provided |
54 | + * @return registered driver | ||
51 | */ | 55 | */ |
52 | - public void addDriver(Driver driver) { | 56 | + public Driver addDriver(Driver driver) { |
53 | - Driver ddc = drivers.get(driver.name()); | 57 | + return drivers.compute(driver.name(), (name, oldDriver) -> |
54 | - if (ddc == null) { | 58 | + oldDriver == null ? driver : oldDriver.merge(driver)); |
55 | - // If we don't have the driver yet, just use the new one. | ||
56 | - drivers.put(driver.name(), driver); | ||
57 | - } else { | ||
58 | - // Otherwise merge the existing driver with the new one and rebind. | ||
59 | - drivers.put(driver.name(), ddc.merge(driver)); | ||
60 | - } | ||
61 | } | 59 | } |
62 | 60 | ||
63 | /** | 61 | /** | ... | ... |
... | @@ -89,10 +89,10 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS | ... | @@ -89,10 +89,10 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS |
89 | @Override | 89 | @Override |
90 | public void registerProvider(DriverProvider provider) { | 90 | public void registerProvider(DriverProvider provider) { |
91 | provider.getDrivers().forEach(driver -> { | 91 | provider.getDrivers().forEach(driver -> { |
92 | - addDrivers(provider.getDrivers()); | 92 | + Driver d = addDriver(driver); |
93 | driverByKey.put(key(driver.manufacturer(), | 93 | driverByKey.put(key(driver.manufacturer(), |
94 | driver.hwVersion(), | 94 | driver.hwVersion(), |
95 | - driver.swVersion()), driver); | 95 | + driver.swVersion()), d); |
96 | }); | 96 | }); |
97 | providers.add(provider); | 97 | providers.add(provider); |
98 | } | 98 | } |
... | @@ -100,7 +100,7 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS | ... | @@ -100,7 +100,7 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS |
100 | @Override | 100 | @Override |
101 | public void unregisterProvider(DriverProvider provider) { | 101 | public void unregisterProvider(DriverProvider provider) { |
102 | provider.getDrivers().forEach(driver -> { | 102 | provider.getDrivers().forEach(driver -> { |
103 | - removeDrivers(provider.getDrivers()); | 103 | + removeDriver(driver); |
104 | driverByKey.remove(key(driver.manufacturer(), | 104 | driverByKey.remove(key(driver.manufacturer(), |
105 | driver.hwVersion(), | 105 | driver.hwVersion(), |
106 | driver.swVersion())); | 106 | driver.swVersion())); |
... | @@ -111,7 +111,6 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS | ... | @@ -111,7 +111,6 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS |
111 | @Override | 111 | @Override |
112 | public Set<Driver> getDrivers() { | 112 | public Set<Driver> getDrivers() { |
113 | checkPermission(DRIVER_READ); | 113 | checkPermission(DRIVER_READ); |
114 | - | ||
115 | ImmutableSet.Builder<Driver> builder = ImmutableSet.builder(); | 114 | ImmutableSet.Builder<Driver> builder = ImmutableSet.builder(); |
116 | drivers.values().forEach(builder::add); | 115 | drivers.values().forEach(builder::add); |
117 | return builder.build(); | 116 | return builder.build(); |
... | @@ -120,7 +119,6 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS | ... | @@ -120,7 +119,6 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS |
120 | @Override | 119 | @Override |
121 | public Set<Driver> getDrivers(Class<? extends Behaviour> withBehaviour) { | 120 | public Set<Driver> getDrivers(Class<? extends Behaviour> withBehaviour) { |
122 | checkPermission(DRIVER_READ); | 121 | checkPermission(DRIVER_READ); |
123 | - | ||
124 | return drivers.values().stream() | 122 | return drivers.values().stream() |
125 | .filter(d -> d.hasBehaviour(withBehaviour)) | 123 | .filter(d -> d.hasBehaviour(withBehaviour)) |
126 | .collect(Collectors.toSet()); | 124 | .collect(Collectors.toSet()); |
... | @@ -129,7 +127,6 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS | ... | @@ -129,7 +127,6 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS |
129 | @Override | 127 | @Override |
130 | public Driver getDriver(String driverName) { | 128 | public Driver getDriver(String driverName) { |
131 | checkPermission(DRIVER_READ); | 129 | checkPermission(DRIVER_READ); |
132 | - | ||
133 | return nullIsNotFound(drivers.get(driverName), NO_DRIVER); | 130 | return nullIsNotFound(drivers.get(driverName), NO_DRIVER); |
134 | } | 131 | } |
135 | 132 | ||
... | @@ -182,7 +179,6 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS | ... | @@ -182,7 +179,6 @@ public class DriverManager extends DefaultDriverProvider implements DriverAdminS |
182 | @Override | 179 | @Override |
183 | public DriverHandler createHandler(DeviceId deviceId, String... credentials) { | 180 | public DriverHandler createHandler(DeviceId deviceId, String... credentials) { |
184 | checkPermission(DRIVER_WRITE); | 181 | checkPermission(DRIVER_WRITE); |
185 | - | ||
186 | Driver driver = getDriver(deviceId); | 182 | Driver driver = getDriver(deviceId); |
187 | return new DefaultDriverHandler(new DefaultDriverData(driver, deviceId)); | 183 | return new DefaultDriverHandler(new DefaultDriverData(driver, deviceId)); |
188 | } | 184 | } | ... | ... |
-
Please register or login to post a comment