More readable toString for BMv2 extension selectors and treatments
Also, added a test for serialization
Change-Id: I77e80fa7597b552c71e80c9d39d03549e0325778
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionSelector.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionSelector.java
index d9d9d0e..1e357c4 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionSelector.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionSelector.java
@@ -29,9 +29,10 @@
import org.onosproject.net.flow.AbstractExtension;
import org.onosproject.net.flow.criteria.ExtensionSelector;
import org.onosproject.net.flow.criteria.ExtensionSelectorType;
+import org.onosproject.store.serializers.KryoNamespaces;
import java.nio.ByteBuffer;
-import java.util.HashMap;
+import java.util.Collections;
import java.util.Map;
import static com.google.common.base.Preconditions.*;
@@ -46,9 +47,8 @@
@Beta
public final class Bmv2ExtensionSelector extends AbstractExtension implements ExtensionSelector {
- private final KryoNamespace appKryo = new KryoNamespace.Builder()
- .register(HashMap.class)
- .register(Bmv2MatchParam.class)
+ private static final KryoNamespace APP_KRYO = new KryoNamespace.Builder()
+ .register(KryoNamespaces.API)
.register(Bmv2ExactMatchParam.class)
.register(Bmv2TernaryMatchParam.class)
.register(Bmv2LpmMatchParam.class)
@@ -83,12 +83,12 @@
@Override
public byte[] serialize() {
- return appKryo.serialize(parameterMap);
+ return APP_KRYO.serialize(parameterMap);
}
@Override
public void deserialize(byte[] data) {
- this.parameterMap = appKryo.deserialize(data);
+ this.parameterMap = APP_KRYO.deserialize(data);
}
@Override
@@ -110,9 +110,31 @@
@Override
public String toString() {
- return MoreObjects.toStringHelper(this)
- .add("parameterMap", parameterMap)
- .toString();
+ MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(this);
+ parameterMap.forEach((name, param) -> {
+ switch (param.type()) {
+ case EXACT:
+ Bmv2ExactMatchParam e = (Bmv2ExactMatchParam) param;
+ helper.add(name, e.value());
+ break;
+ case TERNARY:
+ Bmv2TernaryMatchParam t = (Bmv2TernaryMatchParam) param;
+ helper.add(name, t.value() + "&&&" + t.mask());
+ break;
+ case LPM:
+ Bmv2LpmMatchParam l = (Bmv2LpmMatchParam) param;
+ helper.add(name, l.value() + "/" + String.valueOf(l.prefixLength()));
+ break;
+ case VALID:
+ Bmv2ValidMatchParam v = (Bmv2ValidMatchParam) param;
+ helper.add(name, v.flag() ? "VALID" : "NOT_VALID");
+ break;
+ default:
+ helper.add(name, param);
+ break;
+ }
+ });
+ return helper.toString();
}
/**
@@ -121,7 +143,7 @@
* @return a BMv2 extension treatment
*/
public static Bmv2ExtensionSelector empty() {
- return new Bmv2ExtensionSelector(null);
+ return new Bmv2ExtensionSelector(Collections.emptyMap());
}
/**