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/K8sSyncStateCommand.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncStateCommand.java
index f9bc2c8..a466e14 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncStateCommand.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/K8sSyncStateCommand.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.k8snetworking.cli;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import io.fabric8.kubernetes.api.model.Endpoints;
 import io.fabric8.kubernetes.api.model.Namespace;
@@ -22,6 +23,7 @@
 import io.fabric8.kubernetes.api.model.extensions.Ingress;
 import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import org.apache.commons.lang.StringUtils;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
@@ -38,6 +40,17 @@
 
 import java.util.List;
 
+import static org.onosproject.k8snetworking.api.Constants.CLI_CONTAINERS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESSES_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_IP_ADDRESS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_LABELS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_MARGIN_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAMESPACE_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_NAME_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_PHASE_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_PORTS_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.CLI_TYPES_LENGTH;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.syncPortFromPod;
 
 /**
@@ -48,12 +61,19 @@
         description = "Synchronizes all kubernetes states")
 public class K8sSyncStateCommand extends AbstractShellCommand {
 
-    private static final String POD_FORMAT = "%-50s%-15s%-15s%-30s";
-    private static final String SERVICE_FORMAT = "%-50s%-30s%-30s";
-    private static final String ENDPOINTS_FORMAT = "%-50s%-50s%-20s";
-    private static final String INGRESS_FORMAT = "%-50s%-15s%-30s";
-    private static final String NETWORK_POLICY_FORMAT = "%-50s%-15s%-30s";
-    private static final String NAMESPACE_FORMAT = "%-50s%-15s%-30s";
+    private static final String POD_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_NAMESPACE_LENGTH, CLI_IP_ADDRESS_LENGTH,
+            CLI_CONTAINERS_LENGTH));
+    private static final String SERVICE_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_IP_ADDRESS_LENGTH, CLI_PORTS_LENGTH));
+    private static final String ENDPOINTS_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_IP_ADDRESSES_LENGTH, CLI_PORTS_LENGTH));
+    private static final String INGRESS_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_NAMESPACE_LENGTH, CLI_IP_ADDRESS_LENGTH));
+    private static final String NETWORK_POLICY_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_NAMESPACE_LENGTH, CLI_TYPES_LENGTH));
+    private static final String NAMESPACE_FORMAT = genFormatString(ImmutableList.of(
+            CLI_NAME_LENGTH, CLI_PHASE_LENGTH, CLI_LABELS_LENGTH));
 
     @Override
     protected void doExecute() {
@@ -164,8 +184,10 @@
                 .getIngress().forEach(i -> lbIps.add(i.getIp()));
 
         print(INGRESS_FORMAT,
-                ingress.getMetadata().getName(),
-                ingress.getMetadata().getNamespace(),
+                StringUtils.substring(ingress.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(ingress.getMetadata().getNamespace(),
+                        0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
                 lbIps.isEmpty() ? "" : lbIps);
     }
 
@@ -179,19 +201,24 @@
         });
 
         print(ENDPOINTS_FORMAT,
-                endpoints.getMetadata().getName(),
-                ips.isEmpty() ? "" : ips,
+                StringUtils.substring(endpoints.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                ips.isEmpty() ? "" : StringUtils.substring(ips.toString(),
+                        0, CLI_IP_ADDRESSES_LENGTH - CLI_MARGIN_LENGTH),
                 ports.isEmpty() ? "" : ports);
     }
 
     private void printNamespace(Namespace namespace) {
         print(NAMESPACE_FORMAT,
-                namespace.getMetadata().getName(),
+                StringUtils.substring(namespace.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
                 namespace.getStatus().getPhase(),
                 namespace.getMetadata() != null &&
                         namespace.getMetadata().getLabels() != null &&
                         !namespace.getMetadata().getLabels().isEmpty() ?
-                        namespace.getMetadata().getLabels() : "");
+                        StringUtils.substring(namespace.getMetadata()
+                                        .getLabels().toString(), 0,
+                                CLI_LABELS_LENGTH - CLI_MARGIN_LENGTH) : "");
     }
 
     private void printService(io.fabric8.kubernetes.api.model.Service service) {
@@ -201,8 +228,10 @@
         service.getSpec().getPorts().forEach(p -> ports.add(p.getPort()));
 
         print(SERVICE_FORMAT,
-                service.getMetadata().getName(),
-                service.getSpec().getClusterIP(),
+                StringUtils.substring(service.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(service.getSpec().getClusterIP(),
+                        0, CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
                 ports.isEmpty() ? "" : ports);
     }
 
@@ -213,16 +242,21 @@
         pod.getSpec().getContainers().forEach(c -> containers.add(c.getName()));
 
         print(POD_FORMAT,
-                pod.getMetadata().getName(),
-                pod.getMetadata().getNamespace(),
-                pod.getStatus().getPodIP(),
+                StringUtils.substring(pod.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(pod.getMetadata().getNamespace(),
+                        0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(pod.getStatus().getPodIP(),
+                        0, CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
                 containers.isEmpty() ? "" : containers);
     }
 
     private void printNetworkPolicy(NetworkPolicy policy) {
         print(NETWORK_POLICY_FORMAT,
-                policy.getMetadata().getName(),
-                policy.getMetadata().getNamespace(),
+                StringUtils.substring(policy.getMetadata().getName(),
+                        0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+                StringUtils.substring(policy.getMetadata().getNamespace(),
+                        0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
                 policy.getSpec().getPolicyTypes().isEmpty() ?
                         "" : policy.getSpec().getPolicyTypes());
     }