ONOS-743 - Use REST API Codecs to generate JSON for CLI commands

Change-Id: I25e0840d1af03341c638f837498c95275e6cf31b
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/ApplicationCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/ApplicationCodec.java
index 4812154..b2cab09 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/ApplicationCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/ApplicationCodec.java
@@ -31,7 +31,7 @@
     @Override
     public ObjectNode encode(Application app, CodecContext context) {
         checkNotNull(app, "Application cannot be null");
-        ApplicationService service = context.get(ApplicationService.class);
+        ApplicationService service = context.getService(ApplicationService.class);
         ObjectNode result = context.mapper().createObjectNode()
                 .put("name", app.id().name())
                 .put("id", app.id().id())
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java
index 4b06ff0..65d758e 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/ControllerNodeCodec.java
@@ -35,7 +35,7 @@
     @Override
     public ObjectNode encode(ControllerNode node, CodecContext context) {
         checkNotNull(node, "Controller node cannot be null");
-        ClusterService service = context.get(ClusterService.class);
+        ClusterService service = context.getService(ClusterService.class);
         return context.mapper().createObjectNode()
                 .put("id", node.id().toString())
                 .put("ip", node.ip().toString())
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
index 899ade5..3526f23 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
@@ -117,19 +117,19 @@
     }
 
     private interface CriterionTypeFormatter {
-        ObjectNode formatCriterion(ObjectNode root, Criterion criterion);
+        ObjectNode encodeCriterion(ObjectNode root, Criterion criterion);
     }
 
     private static class FormatUnknown implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             return root;
         }
     }
 
     private static class FormatInPort implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final PortCriterion portCriterion = (PortCriterion) criterion;
             return root.put("port", portCriterion.port().toLong());
         }
@@ -137,7 +137,7 @@
 
     private static class FormatMetadata implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final MetadataCriterion metadataCriterion =
                     (MetadataCriterion) criterion;
             return root.put("metadata", metadataCriterion.metadata());
@@ -146,7 +146,7 @@
 
     private static class FormatEth implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final EthCriterion ethCriterion = (EthCriterion) criterion;
             return root.put("mac", ethCriterion.mac().toString());
         }
@@ -154,7 +154,7 @@
 
     private static class FormatEthType implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final EthTypeCriterion ethTypeCriterion =
                     (EthTypeCriterion) criterion;
             return root.put("ethType", ethTypeCriterion.ethType());
@@ -163,7 +163,7 @@
 
     private static class FormatVlanVid implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final VlanIdCriterion vlanIdCriterion =
                     (VlanIdCriterion) criterion;
             return root.put("vlanId", vlanIdCriterion.vlanId().toShort());
@@ -172,7 +172,7 @@
 
     private static class FormatVlanPcp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final VlanPcpCriterion vlanPcpCriterion =
                         (VlanPcpCriterion) criterion;
                 return root.put("priority", vlanPcpCriterion.priority());
@@ -181,7 +181,7 @@
 
     private static class FormatIpDscp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final IPDscpCriterion ipDscpCriterion =
                         (IPDscpCriterion) criterion;
                 return root.put("ipDscp", ipDscpCriterion.ipDscp());
@@ -190,7 +190,7 @@
 
     private static class FormatIpEcn implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final IPEcnCriterion ipEcnCriterion =
                         (IPEcnCriterion) criterion;
                 return root.put("ipEcn", ipEcnCriterion.ipEcn());
@@ -199,7 +199,7 @@
 
     private static class FormatIpProto implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPProtocolCriterion iPProtocolCriterion =
                     (IPProtocolCriterion) criterion;
             return root.put("protocol", iPProtocolCriterion.protocol());
@@ -208,7 +208,7 @@
 
     private static class FormatIp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final IPCriterion iPCriterion = (IPCriterion) criterion;
                 return root.put("ip", iPCriterion.ip().toString());
         }
@@ -216,7 +216,7 @@
 
     private static class FormatTcp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final TcpPortCriterion tcpPortCriterion =
                         (TcpPortCriterion) criterion;
                 return root.put("tcpPort", tcpPortCriterion.tcpPort());
@@ -225,7 +225,7 @@
 
     private static class FormatUdp implements CriterionTypeFormatter {
             @Override
-            public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+            public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
                 final UdpPortCriterion udpPortCriterion =
                         (UdpPortCriterion) criterion;
                 return root.put("udpPort", udpPortCriterion.udpPort());
@@ -234,7 +234,7 @@
 
     private static class FormatSctp implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final SctpPortCriterion sctpPortCriterion =
                     (SctpPortCriterion) criterion;
             return root.put("sctpPort", sctpPortCriterion.sctpPort());
@@ -243,7 +243,7 @@
 
     private static class FormatIcmpV4Type implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IcmpTypeCriterion icmpTypeCriterion =
                     (IcmpTypeCriterion) criterion;
             return root.put("icmpType", icmpTypeCriterion.icmpType());
@@ -252,7 +252,7 @@
 
     private static class FormatIcmpV4Code implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IcmpCodeCriterion icmpCodeCriterion =
                     (IcmpCodeCriterion) criterion;
             return root.put("icmpCode", icmpCodeCriterion.icmpCode());
@@ -261,7 +261,7 @@
 
     private static class FormatIpV6FLabel implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPv6FlowLabelCriterion ipv6FlowLabelCriterion =
                     (IPv6FlowLabelCriterion) criterion;
             return root.put("flowLabel", ipv6FlowLabelCriterion.flowLabel());
@@ -270,7 +270,7 @@
 
     private static class FormatIcmpV6Type implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final Icmpv6TypeCriterion icmpv6TypeCriterion =
                     (Icmpv6TypeCriterion) criterion;
             return root.put("icmpv6Type", icmpv6TypeCriterion.icmpv6Type());
@@ -279,7 +279,7 @@
 
     private static class FormatIcmpV6Code implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final Icmpv6CodeCriterion icmpv6CodeCriterion =
                     (Icmpv6CodeCriterion) criterion;
             return root.put("icmpv6Code", icmpv6CodeCriterion.icmpv6Code());
@@ -288,7 +288,7 @@
 
     private static class FormatV6NDTarget implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPv6NDTargetAddressCriterion ipv6NDTargetAddressCriterion
                 = (IPv6NDTargetAddressCriterion) criterion;
             return root.put("targetAddress", ipv6NDTargetAddressCriterion.targetAddress().toString());
@@ -297,7 +297,7 @@
 
     private static class FormatV6NDTll implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPv6NDLinkLayerAddressCriterion ipv6NDLinkLayerAddressCriterion
                 = (IPv6NDLinkLayerAddressCriterion) criterion;
             return root.put("mac", ipv6NDLinkLayerAddressCriterion.mac().toString());
@@ -306,7 +306,7 @@
 
     private static class FormatMplsLabel implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final MplsCriterion mplsCriterion =
                     (MplsCriterion) criterion;
             return root.put("label", mplsCriterion.label().toInt());
@@ -315,7 +315,7 @@
 
     private static class FormatIpV6Exthdr implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final IPv6ExthdrFlagsCriterion exthdrCriterion =
                     (IPv6ExthdrFlagsCriterion) criterion;
             return root.put("exthdrFlags", exthdrCriterion.exthdrFlags());
@@ -324,7 +324,7 @@
 
     private static class FormatOchSigId implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final LambdaCriterion lambdaCriterion =
                     (LambdaCriterion) criterion;
             return root.put("lambda", lambdaCriterion.lambda());
@@ -333,7 +333,7 @@
 
     private static class FormatOchSigType implements CriterionTypeFormatter {
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             final OpticalSignalTypeCriterion opticalSignalTypeCriterion =
                     (OpticalSignalTypeCriterion) criterion;
             return root.put("signalType", opticalSignalTypeCriterion.signalType());
@@ -343,7 +343,7 @@
     private class FormatDummyType implements CriterionTypeFormatter {
 
         @Override
-        public ObjectNode formatCriterion(ObjectNode root, Criterion criterion) {
+        public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
             checkNotNull(criterion, "Criterion cannot be null");
 
             return root.put("type", criterion.type().toString());
@@ -364,7 +364,7 @@
                         "No formatter found for criterion type "
                                 + criterion.type().toString());
 
-        return formatter.formatCriterion(result, criterion);
+        return formatter.encodeCriterion(result, criterion);
     }
 
 
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/DeviceCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/DeviceCodec.java
index 7f78756..f1a4f78 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/DeviceCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/DeviceCodec.java
@@ -48,7 +48,7 @@
     @Override
     public ObjectNode encode(Device device, CodecContext context) {
         checkNotNull(device, "Device cannot be null");
-        DeviceService service = context.get(DeviceService.class);
+        DeviceService service = context.getService(DeviceService.class);
         ObjectNode result = context.mapper().createObjectNode()
                 .put(ID, device.id().toString())
                 .put(TYPE, device.type().name())
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/LinkCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/LinkCodec.java
index 65fcb80..491d751 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/LinkCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/LinkCodec.java
@@ -37,6 +37,7 @@
     private static final String SRC = "src";
     private static final String DST = "dst";
     private static final String TYPE = "type";
+    private static final String STATE = "state";
 
     @Override
     public ObjectNode encode(Link link, CodecContext context) {
@@ -46,6 +47,9 @@
         result.set(SRC, codec.encode(link.src(), context));
         result.set(DST, codec.encode(link.dst(), context));
         result.put(TYPE, link.type().toString());
+        if (link.state() != null) {
+            result.put(STATE, link.state().toString());
+        }
         return annotate(result, link, context);
     }