sdbus++: use style-correct names for C++ methods

Add attribute conversions for 'name' to support camelCase,
CamelCase and snake_case naming styles.  This is done using
the 'inflection' library.  Convert server-header templates
to use these as appropriate.

Change-Id: I4cecaa0fc96de9b9156e9102ccb9bf0682c8a732
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/tools/sdbusplus/namedelement.py b/tools/sdbusplus/namedelement.py
index ed989d1..24a2f1f 100644
--- a/tools/sdbusplus/namedelement.py
+++ b/tools/sdbusplus/namedelement.py
@@ -1,5 +1,21 @@
+import inflection
+
 class NamedElement(object):
     def __init__(self, **kwargs):
         self.name = kwargs.pop('name', "unnamed")
         self.description = kwargs.pop('description', "")
         super(NamedElement, self).__init__(**kwargs)
+
+    def __getattr__(self, name):
+        l = { 'CamelCase': lambda: inflection.camelize(self.name),
+              'camelCase': lambda: inflection.camelize(self.name, False),
+              'snake_case': lambda: inflection.underscore(self.name) }\
+            .get(name)
+
+        if l:
+            return l()
+        try:
+            return super(NamedElement,self).__getattr__(name)
+        except:
+            raise AttributeError("Attribute '%s' not found in %s.NamedElement"
+                                 % (name, self.__module__))
diff --git a/tools/templates/method.mako.prototype.hpp b/tools/templates/method.mako.prototype.hpp
index 5055dbb..2718812 100644
--- a/tools/templates/method.mako.prototype.hpp
+++ b/tools/templates/method.mako.prototype.hpp
@@ -14,7 +14,7 @@
             join([ parameter(p, defaultValue) for p in method.parameters ])
 
     def parameter(p, defaultValue=False):
-        r = "%s %s" % (p.typeName, p.name)
+        r = "%s %s" % (p.typeName, p.camelCase)
         if defaultValue:
             r += default_value(p)
         return r
@@ -34,17 +34,17 @@
     % if len(method.parameters) != 0:
          *
         % for p in method.parameters:
-         *  @param[in] ${p.name} - ${p.description.strip()}
+         *  @param[in] ${p.camelCase} - ${p.description.strip()}
         % endfor
     % endif
     % if len(method.returns) != 0:
          *
         % for r in method.returns:
-         *  @return ${r.name}[${r.typeName}] - ${r.description.strip()}
+         *  @return ${r.camelCase}[${r.typeName}] - ${r.description.strip()}
         % endfor
     % endif
          */
-        virtual ${cpp_return_type()} ${ method.name }(
+        virtual ${cpp_return_type()} ${ method.camelCase }(
             ${ parameters() }) = 0;
 ###
 ### Emit 'callback-header'
@@ -52,6 +52,6 @@
     % elif ptype == 'callback-header':
         /** @brief sd-bus callback for ${ method.name }
          */
-        static int _callback_${ method.name }(
+        static int _callback_${ method.CamelCase }(
             sd_bus_message*, void*, sd_bus_error*);
     % endif