Logging information about device not being driver programmable instead of throwing exception

Change-Id: I1d64e83ca0cabc9378bcaf19badddbba584128f8
diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleDriverProvider.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleDriverProvider.java
index 4d2eaf7..0ecaadd 100644
--- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleDriverProvider.java
+++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleDriverProvider.java
@@ -22,6 +22,7 @@
 import com.google.common.collect.Sets;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.mastership.MastershipService;
+import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.flow.CompletedBatchOperation;
@@ -154,11 +155,13 @@
     }
 
     private FlowRuleProgrammable getFlowRuleProgrammable(DeviceId deviceId) {
-        FlowRuleProgrammable programmable = deviceService.getDevice(deviceId).as(FlowRuleProgrammable.class);
-        if (programmable == null) {
+        Device device = deviceService.getDevice(deviceId);
+        if (device.is(FlowRuleProgrammable.class)) {
+            return device.as(FlowRuleProgrammable.class);
+        } else {
             log.warn("Device {} is not flow rule programmable");
+            return null;
         }
-        return programmable;
     }
 
 
diff --git a/core/net/src/main/java/org/onosproject/net/group/impl/GroupDriverProvider.java b/core/net/src/main/java/org/onosproject/net/group/impl/GroupDriverProvider.java
index 75fbb89..35f3ba0 100644
--- a/core/net/src/main/java/org/onosproject/net/group/impl/GroupDriverProvider.java
+++ b/core/net/src/main/java/org/onosproject/net/group/impl/GroupDriverProvider.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.net.group.impl;
 
+import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.group.GroupOperations;
@@ -60,10 +61,12 @@
     }
 
     private GroupProgrammable getGroupProgrammable(DeviceId deviceId) {
-        GroupProgrammable programmable = deviceService.getDevice(deviceId).as(GroupProgrammable.class);
-        if (programmable == null) {
+        Device device = deviceService.getDevice(deviceId);
+        if (device.is(GroupProgrammable.class)) {
+            return device.as(GroupProgrammable.class);
+        } else {
             log.warn("Device {} is not group programmable");
+            return null;
         }
-        return programmable;
     }
 }
diff --git a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketDriverProvider.java b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketDriverProvider.java
index ae37736..3b9e359 100644
--- a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketDriverProvider.java
+++ b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketDriverProvider.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.net.packet.impl;
 
+import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.packet.OutboundPacket;
@@ -60,10 +61,12 @@
     }
 
     private PacketProgrammable getPacketProgrammable(DeviceId deviceId) {
-        PacketProgrammable programmable = deviceService.getDevice(deviceId).as(PacketProgrammable.class);
-        if (programmable == null) {
+        Device device = deviceService.getDevice(deviceId);
+        if (device.is(PacketProgrammable.class)) {
+            return device.as(PacketProgrammable.class);
+        } else {
             log.warn("Device {} is not packet programmable");
+            return null;
         }
-        return programmable;
     }
 }