[VOL-3922] Dynamic configuration of the required drivers property to ensure correct driver is assigned to the device at all times, both instance restart and application update

Change-Id: I1c54d2e260aecd1e33b15c06bcb1f6c857603355
diff --git a/impl/src/main/java/org/opencord/olt/impl/Olt.java b/impl/src/main/java/org/opencord/olt/impl/Olt.java
index f822ae3..76f3013 100644
--- a/impl/src/main/java/org/opencord/olt/impl/Olt.java
+++ b/impl/src/main/java/org/opencord/olt/impl/Olt.java
@@ -41,6 +41,7 @@
 import org.onosproject.net.device.DeviceEvent;
 import org.onosproject.net.device.DeviceListener;
 import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.driver.DriverService;
 import org.onosproject.net.flow.FlowRuleService;
 import org.onosproject.net.flowobjective.FlowObjectiveService;
 import org.onosproject.net.flowobjective.ForwardingObjective;
@@ -134,9 +135,14 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected DeviceService deviceService;
 
+
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected CoreService coreService;
 
+    //Dependency on driver service is to ensure correct startup order
+    @Reference(cardinality = ReferenceCardinality.MANDATORY)
+    protected DriverService driverService;
+
     @Reference(cardinality = ReferenceCardinality.OPTIONAL,
             bind = "bindSadisService",
             unbind = "unbindSadisService",
@@ -1236,7 +1242,8 @@
         log.info("checkAndCreateDeviceFlows: deviceInfo {}", deviceInfo);
 
         if (deviceInfo != null) {
-            // This is an OLT device as per Sadis, we create flows for UNI and NNI ports
+            log.debug("Driver for device {} is {}", dev.id(),
+                     driverService.getDriver(dev.id()));
             for (Port p : deviceService.getPorts(dev.id())) {
                 if (PortNumber.LOCAL.equals(p.number()) || !p.isEnabled()) {
                     continue;
diff --git a/impl/src/main/java/org/opencord/olt/impl/OltFlowService.java b/impl/src/main/java/org/opencord/olt/impl/OltFlowService.java
index caeab28..fed9546 100644
--- a/impl/src/main/java/org/opencord/olt/impl/OltFlowService.java
+++ b/impl/src/main/java/org/opencord/olt/impl/OltFlowService.java
@@ -246,7 +246,7 @@
 
         log.info("modified. Values = enableDhcpOnNni: {}, enableDhcpV4: {}, " +
                          "enableDhcpV6:{}, enableIgmpOnNni:{}, " +
-                         "enableEapol{}, enablePppoe{}, defaultTechProfileId: {}",
+                         "enableEapol:{}, enablePppoe:{}, defaultTechProfileId:{}",
                  enableDhcpOnNni, enableDhcpV4, enableDhcpV6,
                  enableIgmpOnNni, enableEapol,  enablePppoe,
                  defaultTechProfileId);
@@ -681,8 +681,8 @@
                     @Override
                     public void onSuccess(Objective objective) {
                         log.info("Eapol filter {} for {} on {}/{} with meter {}.",
-                                 objective.id(), fi.getDevId(), fi.getUniPort(),
-                                 (install) ? INSTALLED : REMOVED, mId);
+                                 objective.id(), (install) ? INSTALLED : REMOVED,
+                                 fi.getDevId(), fi.getUniPort(), mId);
                         if (filterFuture != null) {
                             filterFuture.complete(null);
                         }
diff --git a/impl/src/main/java/org/opencord/olt/impl/OsgiPropertyConstants.java b/impl/src/main/java/org/opencord/olt/impl/OsgiPropertyConstants.java
index 3d76ef6..1db37e5 100644
--- a/impl/src/main/java/org/opencord/olt/impl/OsgiPropertyConstants.java
+++ b/impl/src/main/java/org/opencord/olt/impl/OsgiPropertyConstants.java
@@ -59,4 +59,7 @@
 
     public static final String PROVISION_DELAY = "provisionDelay";
     public static final int PROVISION_DELAY_DEFAULT = 100;
+
+    public static final String REQUIRED_DRIVERS_PROPERTY_DELAY = "requiredDriversPropertyDelay";
+    public static final int REQUIRED_DRIVERS_PROPERTY_DELAY_DEFAULT = 5;
 }