Fix ONOS-2090 - Improvements to Intent JSON
- Intents are now identified by the name portion of the appId rather than
the number
- removed the now useless "details" field which had a toString()
dump of the intent for when we didn't support all intent types
- Single Intent GET operations now accept a decimal or hexadecimal
value for the Intent key.
Change-Id: I39d635e68cccf2e59d0d11307b93329a2dc0bc96
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/IntentCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/IntentCodec.java
index 36ff8fa..8613a96 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/IntentCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/IntentCodec.java
@@ -28,6 +28,7 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.net.UrlEscapers;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onlab.util.Tools.nullIsIllegal;
@@ -40,7 +41,6 @@
protected static final String TYPE = "type";
protected static final String ID = "id";
protected static final String APP_ID = "appId";
- protected static final String DETAILS = "details";
protected static final String STATE = "state";
protected static final String PRIORITY = "priority";
protected static final String RESOURCES = "resources";
@@ -50,11 +50,12 @@
@Override
public ObjectNode encode(Intent intent, CodecContext context) {
checkNotNull(intent, "Intent cannot be null");
+
final ObjectNode result = context.mapper().createObjectNode()
.put(TYPE, intent.getClass().getSimpleName())
.put(ID, intent.id().toString())
- .put(APP_ID, intent.appId().toString())
- .put(DETAILS, intent.toString());
+ .put(APP_ID, UrlEscapers.urlPathSegmentEscaper()
+ .escape(intent.appId().name()));
final ArrayNode jsonResources = result.putArray(RESOURCES);
@@ -98,8 +99,8 @@
*/
public static void intentAttributes(ObjectNode json, CodecContext context,
Intent.Builder builder) {
- short appId = (short) nullIsIllegal(json.get(IntentCodec.APP_ID),
- IntentCodec.TYPE + IntentCodec.MISSING_MEMBER_MESSAGE).asInt();
+ String appId = nullIsIllegal(json.get(IntentCodec.APP_ID),
+ IntentCodec.APP_ID + IntentCodec.MISSING_MEMBER_MESSAGE).asText();
CoreService service = context.getService(CoreService.class);
builder.appId(service.getAppId(appId));