Adding first fallback provider for flow rule subsystem.

Fixing onos-check-apps.

Change-Id: Ic8c2bac4403bb7a49813826262706e857932b6c0
diff --git a/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java b/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java
index 73234d5..9b490c5 100644
--- a/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java
+++ b/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java
@@ -46,6 +46,15 @@
      */
     protected abstract S createProviderService(P provider);
 
+    /**
+     * Returns the default fall-back provider. Default implementation return null.
+     *
+     * @return default provider
+     */
+    protected P defaultProvider() {
+        return null;
+    }
+
     @Override
     public synchronized S register(P provider) {
         checkNotNull(provider, "Provider cannot be null");
@@ -89,13 +98,16 @@
     }
 
     /**
-     * Returns the provider registered with the specified provider ID.
+     * Returns the provider registered with the specified provider ID or null
+     * if none is found for the given provider family and default fall-back is
+     * not supported.
      *
      * @param providerId provider identifier
      * @return provider
      */
     protected synchronized P getProvider(ProviderId providerId) {
-        return providers.get(providerId);
+        P provider = providers.get(providerId);
+        return provider != null ? provider : defaultProvider();
     }
 
     /**
@@ -105,7 +117,8 @@
      * @return provider bound to the URI scheme
      */
     protected synchronized P getProvider(DeviceId deviceId) {
-        return providersByScheme.get(deviceId.uri().getScheme());
+        P provider = providersByScheme.get(deviceId.uri().getScheme());
+        return provider != null ? provider : defaultProvider();
     }
 
     /**