Support JSON output in external router CLI, make router obj immutable
Change-Id: I6c76d9aafd64c1af7c3e28b42beabc268f824b88
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/ExternalPeerRouterListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/ExternalPeerRouterListCommand.java
index ebd949c..ae30021 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/ExternalPeerRouterListCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/ExternalPeerRouterListCommand.java
@@ -15,6 +15,9 @@
*/
package org.onosproject.openstacknetworking.cli;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import com.google.common.collect.Lists;
import org.apache.karaf.shell.commands.Command;
import org.onosproject.cli.AbstractShellCommand;
@@ -23,6 +26,8 @@
import java.util.List;
+import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
+
/**
* Lists external peer router lists.
*/
@@ -35,14 +40,25 @@
@Override
protected void execute() {
OpenstackNetworkService service = AbstractShellCommand.get(OpenstackNetworkService.class);
-
- print(FORMAT, "Router IP", "Mac Address", "VLAN ID");
List<ExternalPeerRouter> routers = Lists.newArrayList(service.externalPeerRouters());
- for (ExternalPeerRouter router: routers) {
- print(FORMAT, router.externalPeerRouterIp(),
- router.externalPeerRouterMac().toString(),
- router.externalPeerRouterVlanId());
+ if (outputJson()) {
+ print("%s", json(this, routers));
+ } else {
+ print(FORMAT, "Router IP", "Mac Address", "VLAN ID");
+ for (ExternalPeerRouter router: routers) {
+ print(FORMAT, router.ipAddress(),
+ router.macAddress().toString(),
+ router.vlanId());
+ }
}
}
+
+ private JsonNode json(AbstractShellCommand context, List<ExternalPeerRouter> routers) {
+ ObjectMapper mapper = new ObjectMapper();
+ ArrayNode result = mapper.enable(INDENT_OUTPUT).createArrayNode();
+ routers.forEach(r -> result.add(context.jsonForEntity(r, ExternalPeerRouter.class)));
+
+ return result;
+ }
}