Initial changes to the CLI to support performance management
configuration. There are still some todos left in the code which will
be addressed in later commits.

Change-Id: I329a54f4ad9fca1599e53949a621c316e9b2d4fc
diff --git a/cli/table.py b/cli/table.py
index 6485787..1a1f576 100644
--- a/cli/table.py
+++ b/cli/table.py
@@ -89,7 +89,8 @@
             assert self.field_names[field_key] == field_name
 
 
-def print_pb_list_as_table(header, items, fields_to_omit=None, printfn=_printfn):
+def print_pb_list_as_table(header, items, fields_to_omit=None,
+                           printfn=_printfn, dividers=10):
     from cli.utils import pb2dict
 
     t = TablePrinter()
@@ -98,21 +99,36 @@
 
         def add(_row, pb, prefix='', number=0):
             d = pb2dict(pb)
-            for field in pb._fields:
-                fname = prefix + field.name
+            l=[]
+            for field in sorted(pb._fields, key=lambda f: f.number):
+                l.append(field.name)
+            for field in d:
+                if field not in l:
+                    l.append(field)
+
+            field_number = 0
+            #for field in pb._fields:
+            for field in sorted(d, key=lambda f: l.index(f)):
+                #fname = prefix + field.name
+                fname = prefix + field
                 if fname in fields_to_omit:
                     continue
-                value = getattr(pb, field.name)
+                #value = getattr(pb, field.name)
+                value = getattr(pb, field)
                 if isinstance(value, Message):
                     add(_row, value, fname + '.',
-                        100 * (number + field.number))
+                        100 * (number + field_number))
+                        #100 * (number + field.number))
                 else:
-                    t.add_cell(_row, number + field.number, fname,
-                               d.get(field.name))
+                    t.add_cell(_row, number + field_number, fname,
+                               d.get(field))
+                    #t.add_cell(_row, number + field.number, fname,
+                               #d.get(field.name))
+                field_number += 1
 
         add(row, obj)
 
-    t.print_table(header, printfn)
+    t.print_table(header, printfn, dividers)
 
 
 def print_pb_as_table(header, pb, fields_to_omit={}, printfn=_printfn):
@@ -122,11 +138,14 @@
 
     def pr(_pb, prefix=''):
         d = pb2dict(_pb)
-        for field in sorted(_pb._fields, key=lambda f: f.number):
-            fname = prefix + field.name
+        #for field in sorted(_pb._fields, key=lambda f: f.number):
+        for field in sorted(d):
+            #fname = prefix + field.name
+            fname = prefix + field
             if fname in fields_to_omit:
                 continue
-            value = getattr(_pb, field.name)
+            #value = getattr(_pb, field.name)
+            value = getattr(_pb, field)
             if isinstance(value, Message):
                 pr(value, fname + '.')
             elif isinstance(value, RepeatedCompositeFieldContainer):
@@ -137,7 +156,8 @@
             else:
                 row = t.number_of_rows()
                 t.add_cell(row, 0, 'field', fname)
-                t.add_cell(row, 1, 'value', d.get(field.name))
+                #t.add_cell(row, 1, 'value', d.get(field.name))
+                t.add_cell(row, 1, 'value', d.get(field))
 
     pr(pb)