REST API to create flows
Change-Id: I5d001782249c0eab249d7aa857ae465da95b5955
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/TrafficSelectorCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/TrafficSelectorCodec.java
index 29b1969..eea9fae 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/TrafficSelectorCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/TrafficSelectorCodec.java
@@ -15,11 +15,15 @@
*/
package org.onosproject.codec.impl;
+import java.util.stream.IntStream;
+
import org.onosproject.codec.CodecContext;
import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flow.criteria.Criterion;
+import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -29,12 +33,14 @@
* Traffic selector codec.
*/
public final class TrafficSelectorCodec extends JsonCodec<TrafficSelector> {
+ private static final String CRITERIA = "criteria";
+
@Override
public ObjectNode encode(TrafficSelector selector, CodecContext context) {
checkNotNull(selector, "Traffic selector cannot be null");
final ObjectNode result = context.mapper().createObjectNode();
- final ArrayNode jsonCriteria = result.putArray("criteria");
+ final ArrayNode jsonCriteria = result.putArray(CRITERIA);
if (selector.criteria() != null) {
final JsonCodec<Criterion> criterionCodec =
@@ -46,4 +52,20 @@
return result;
}
+
+ @Override
+ public TrafficSelector decode(ObjectNode json, CodecContext context) {
+ final JsonCodec<Criterion> criterionCodec =
+ context.codec(Criterion.class);
+
+ JsonNode criteriaJson = json.get(CRITERIA);
+ TrafficSelector.Builder builder = DefaultTrafficSelector.builder();
+ if (criteriaJson != null) {
+ IntStream.range(0, criteriaJson.size())
+ .forEach(i -> builder.add(
+ criterionCodec.decode((ObjectNode) criteriaJson.get(i),
+ context)));
+ }
+ return builder.build();
+ }
}