aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfacesCodec.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfacesCodec.java')
-rw-r--r--framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfacesCodec.java96
1 files changed, 96 insertions, 0 deletions
diff --git a/framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfacesCodec.java b/framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfacesCodec.java
new file mode 100644
index 00000000..ddd7a597
--- /dev/null
+++ b/framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfacesCodec.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.pim.impl;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+
+import java.util.Collection;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * PIM neighbors Codec.
+ */
+public class PIMInterfacesCodec extends JsonCodec<Collection<PIMInterface>> {
+ // JSON field names
+ //Return Name
+ private static final String CPNBRLIST = "connect_point_list";
+
+ // PIM Neightbors Fields
+ private static final String IP = "ip";
+ private static final String PRIORITY = "priority";
+ private static final String NBRLIST = "neighbor_list";
+
+ // PIM neighbor Files
+ private static final String DR = "designated";
+ private static final String NBR_IP = "ip";
+ private static final String PR = "priority";
+ private static final String HOLDTIME = "hold_time";
+
+ /**
+ * Encode the PIM Neighbors.
+ *
+ * @param cpn ConnectPoint neighbors
+ * @param context encoding context
+ *
+ * @return Encoded neighbors used by CLI and REST
+ */
+ @Override
+ public ObjectNode encode(Collection<PIMInterface> cpn, CodecContext context) {
+ checkNotNull(cpn, "Pim Neighbors cannot be null");
+
+ ObjectNode pimNbrJsonCodec = context.mapper().createObjectNode();
+ ArrayNode cpnList = context.mapper().createArrayNode();
+
+ for (PIMInterface pn: cpn) {
+ // get the PimNeighbors Obj, contains Neighbors list
+ // create the json object for a single Entry in the Neighbors list
+ ObjectNode cp = context.mapper().createObjectNode();
+ cp.put(IP, pn.getIpAddress().toString());
+ cp.put(PRIORITY, String.valueOf(pn.getPriority()));
+
+ // create the array for the neighbors list
+ ArrayNode nbrsList = context.mapper().createArrayNode();
+ for (PIMNeighbor nbr : pn.getNeighbors()) {
+ nbrsList.add(neighbor(nbr, context));
+ }
+ // adds pim neighbor to list
+ cp.set(NBRLIST, nbrsList);
+ // adds to arraynode which will represent the connect point neighbors hash map.
+ cpnList.add(cp);
+ }
+ pimNbrJsonCodec.set(CPNBRLIST, cpnList);
+ return pimNbrJsonCodec;
+ }
+
+ /**
+ * Encode a single PIM Neighbor.
+ *
+ * @param nbr the neighbor to be encoded
+ * @param context encoding context
+ * @return the encoded neighbor
+ */
+ private ObjectNode neighbor(PIMNeighbor nbr, CodecContext context) {
+ return context.mapper().createObjectNode()
+ .put(DR, Boolean.toString(nbr.isDr()))
+ .put(NBR_IP, nbr.getPrimaryAddr().toString())
+ .put(PR, String.valueOf(nbr.getPriority()))
+ .put(HOLDTIME, String.valueOf(nbr.getHoldtime()));
+ }
+}