@Override public void unregisterProvider(DriverProvider provider) { provider.getDrivers().forEach(driver -> { removeDriver(driver); driverByKey.remove(key(driver.manufacturer(), driver.hwVersion(), driver.swVersion())); post(new DriverEvent(DRIVER_REDUCED, driver)); }); providers.remove(provider); checkRequiredDrivers(); }
@Override public Driver getDriver(String mfr, String hw, String sw) { checkPermission(DRIVER_READ); // First attempt a literal search. Driver driver = driverByKey.get(key(mfr, hw, sw)); if (driver != null) { return driver; } // Otherwise, sweep through the key space and attempt to match using // regular expression matching. Optional<Driver> optional = driverByKey.values().stream() .filter(d -> matches(d, mfr, hw, sw)).findFirst(); // If no matching driver is found, return default. return optional.orElse(drivers.get(DEFAULT)); }
@Override public void registerProvider(DriverProvider provider) { provider.getDrivers().forEach(driver -> { Driver d = addDriver(driver); 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); }); post(new DriverEvent(DRIVER_ENHANCED, driver)); }); providers.add(provider); checkRequiredDrivers(); }
@Modified public void modified(ComponentContext context) { Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties(); if (context != null) { requiredDrivers = get(properties, "requiredDrivers"); } requiredDriverSet = isNullOrEmpty(requiredDrivers) ? ImmutableSet.of() : ImmutableSet.copyOf(requiredDrivers.split(COMMA)); log.info(FORMAT, requiredDrivers); checkRequiredDrivers(); }
private synchronized void checkRequiredDrivers() { Set<String> driverSet = registeredDrivers(); boolean isReady = driverSet.containsAll(requiredDriverSet); if (isReady && !isStarted) { log.info("Starting driver subsystem"); componenService.activate(null, DRIVER_COMPONENT); isStarted = true; } else if (!isReady && isStarted) { log.info("Stopping driver subsystem"); componenService.deactivate(null, DRIVER_COMPONENT); isStarted = false; } }
@Activate protected void activate(ComponentContext context) { componentConfigService.registerProperties(getClass()); listenerRegistry = new ListenerRegistry<>(); eventDispatcher.addSink(DriverEvent.class, listenerRegistry); modified(context); log.info("Started"); }