Support pretty JSON output for openstack node and networking apps

Change-Id: Id837ce5730a4073d207c1ec68913f953deb6a190
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java
index b383a11..4784da8 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java
@@ -15,8 +15,7 @@
  */
 package org.onosproject.openstacknetworking.cli;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-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;
@@ -30,8 +29,8 @@
 import java.util.List;
 import java.util.stream.Collectors;
 
-import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
 
 /**
  * Lists OpenStack networks.
@@ -49,44 +48,40 @@
         networks.sort(Comparator.comparing(Network::getName));
 
         if (outputJson()) {
-            try {
-                print("%s", mapper().writeValueAsString(json(networks)));
-            } catch (JsonProcessingException e) {
-                print("Failed to list networks in JSON format");
+            print("%s", json(networks));
+        } else {
+            print(FORMAT, "ID", "Name", "Network Mode", "VNI", "Subnets", "HostRoutes");
+            for (Network net: networks) {
+                List<Subnet> subnets = service.subnets().stream()
+                        .filter(subnet -> subnet.getNetworkId().equals(net.getId()))
+                        .collect(Collectors.toList());
+
+                List<String> subnetsString = subnets.stream()
+                        .map(Subnet::getCidr)
+                        .collect(Collectors.toList());
+
+                List<String> hostRoutes = Lists.newArrayList();
+
+                subnets.forEach(subnet -> {
+                    subnet.getHostRoutes().forEach(h -> hostRoutes.add(h.toString()));
+                });
+
+                print(FORMAT, net.getId(),
+                        net.getName(),
+                        net.getNetworkType().toString(),
+                        net.getProviderSegID(),
+                        subnets.isEmpty() ? "" : subnetsString,
+                        hostRoutes.isEmpty() ? "" : hostRoutes);
             }
-            return;
-        }
-
-        print(FORMAT, "ID", "Name", "Network Mode", "VNI", "Subnets", "HostRoutes");
-        for (Network net: networks) {
-            List<Subnet> subnets = service.subnets().stream()
-                    .filter(subnet -> subnet.getNetworkId().equals(net.getId()))
-                    .collect(Collectors.toList());
-
-            List<String> subnetsString = subnets.stream()
-                    .map(Subnet::getCidr)
-                    .collect(Collectors.toList());
-
-            List<String> hostRoutes = Lists.newArrayList();
-
-            subnets.forEach(subnet -> {
-                subnet.getHostRoutes().forEach(h -> hostRoutes.add(h.toString()));
-            });
-
-            print(FORMAT, net.getId(),
-                    net.getName(),
-                    net.getNetworkType().toString(),
-                    net.getProviderSegID(),
-                    subnets.isEmpty() ? "" : subnetsString,
-                    hostRoutes.isEmpty() ? "" : hostRoutes);
         }
     }
 
-    private JsonNode json(List<Network> networks) {
-        ArrayNode result = mapper().enable(INDENT_OUTPUT).createArrayNode();
+    private String json(List<Network> networks) {
+        ObjectMapper mapper = new ObjectMapper();
+        ArrayNode result = mapper.createArrayNode();
         for (Network net: networks) {
             result.add(modelEntityToJson(net, NeutronNetwork.class));
         }
-        return result;
+        return prettyJson(mapper, result.toString());
     }
 }