Refactor k8s-node and k8s-networking command line interfaces

Change-Id: I1eb20ccea5238893a1c58e7faeb4c3a06accd2a9
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPortListCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPortListCommand.java
index e344971..2dabb0e 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPortListCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sPortListCommand.java
@@ -18,7 +18,9 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Argument;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
@@ -30,6 +32,12 @@
 import java.util.Comparator;
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_ID_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESSES_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MAC_ADDRESS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.prettyJson;
 
 /**
@@ -40,8 +48,6 @@
         description = "Lists all kubernetes ports")
 public class K8sPortListCommand extends AbstractShellCommand {
 
-    private static final String FORMAT = "%-40s%-20s%-20s%-8s";
-
     @Argument(name = "networkId", description = "Network ID")
     private String networkId = null;
 
@@ -52,6 +58,9 @@
         List<K8sPort> ports = Lists.newArrayList(service.ports());
         ports.sort(Comparator.comparing(K8sPort::networkId));
 
+        String format = genFormatString(ImmutableList.of(CLI_ID_LENGTH,
+                CLI_NAME_LENGTH, CLI_MAC_ADDRESS_LENGTH, CLI_IP_ADDRESSES_LENGTH));
+
         if (!Strings.isNullOrEmpty(networkId)) {
             ports.removeIf(port -> !port.networkId().equals(networkId));
         }
@@ -59,13 +68,17 @@
         if (outputJson()) {
             print("%s", json(ports));
         } else {
-            print(FORMAT, "ID", "Network", "MAC Address", "Fixed IPs");
+            print(format, "ID", "Network", "MAC Address", "Fixed IPs");
             for (K8sPort port: ports) {
                 K8sNetwork k8sNet = service.network(port.networkId());
-                print(FORMAT, port.portId(),
-                        k8sNet == null ? "" : k8sNet.name(),
-                        port.macAddress(),
-                        port.ipAddress() == null ? "" : port.ipAddress().toString());
+                print(format,
+                        StringUtils.substring(port.portId(),
+                                0, CLI_ID_LENGTH - CLI_MARGIN_LENGTH),
+                        k8sNet == null ? "" : StringUtils.substring(k8sNet.name(),
+                                0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                        StringUtils.substring(port.macAddress().toString(),
+                                0, CLI_MAC_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
+                        port.ipAddress() == null ? "" : port.ipAddress());
             }
         }
     }