Refine gbb_utility for better maintainance
 * now -g (get mode) becomes default
 * properties are now managed in a more generalized way so adding new property would be more easy

Review URL: http://codereview.chromium.org/2549001
diff --git a/utility/include/gbb_utility.h b/utility/include/gbb_utility.h
index 70a4527..021eb80 100644
--- a/utility/include/gbb_utility.h
+++ b/utility/include/gbb_utility.h
@@ -13,6 +13,14 @@
 
 class GoogleBinaryBlockUtil {
  public:
+  // enumerate of available data fields
+  enum PROPINDEX {
+    PROP_HWID,      // hardware id
+    PROP_ROOTKEY,   // root key
+    PROP_BMPFV,     // bitmap FV
+    PROP_RANGE,     // indicator of valid property range
+  };
+
   GoogleBinaryBlockUtil();
   ~GoogleBinaryBlockUtil();
 
@@ -24,22 +32,27 @@
   // return true on success.
   bool save_to_file(const char *filename);
 
-  // getters and setters of properties in GBB
-  bool set_hwid(const char *hwid);      // hwid is NUL-terminated.
+  // retrieve the value of a property from GBB data.
+  // return the property value.
+  std::string get_property(PROPINDEX i) const;
+
+  // overwrite a property in GBB data.
+  // return true on success.
+  bool set_property(PROPINDEX i, const std::string &value);
+
+  // get a readable name by a property index.
+  // return the name for valid properties, otherwise unexpected empty string.
+  std::string get_property_name(PROPINDEX i) const;
+
+  // quick getters and setters of known properties in GBB
+  bool set_hwid(const char *hwid);      // NOTE: hwid is NUL-terminated.
   bool set_rootkey(const std::string &value);
   bool set_bmpfv(const std::string &value);
-  std::string get_hwid() const    { return get_property(PROP_HWID); }
+  std::string get_hwid() const { return get_property(PROP_HWID); }
   std::string get_rootkey() const { return get_property(PROP_ROOTKEY); }
-  std::string get_bmpfv() const   { return get_property(PROP_BMPFV); }
+  std::string get_bmpfv() const { return get_property(PROP_BMPFV); }
 
  private:
-  // enumerate of available data fields
-  enum PROPINDEX {
-    PROP_HWID,          // hardware id
-    PROP_ROOTKEY,       // root key
-    PROP_BMPFV,         // bitmap FV
-  };
-
   // clear all cached data and initialize to original state
   void initialize();
 
@@ -52,17 +65,12 @@
   bool load_gbb_header(const std::string &image, long offset,
                        GoogleBinaryBlockHeader *phdr) const;
 
-  // retrieve a property from GBB data.
-  // return the property value.
-  std::string get_property(PROPINDEX i) const;
-
-  // overwrite a property in GBB data.
-  // return true on success.
-  bool set_property(PROPINDEX i, const std::string &value);
-
-  // find the size and offset information for given property
-  // return true if the offset and size are assign to *poffset and *psize.
-  bool find_property(PROPINDEX i, uint32_t *poffset, uint32_t *psize) const;
+  // find the size, offset, and name information for given property.
+  // return true if the offset and size are assign to *poffset and *psize;
+  // if pname is not NULL, *pname will hold a pointer to a readable name.
+  // return false if the property index is invalid.
+  bool find_property(PROPINDEX i, uint32_t *poffset, uint32_t *psize,
+                     const char **pname) const;
 
   GoogleBinaryBlockHeader header_;      // copy of GBB header from image
   std::string file_content_;            // complete image file content