dcmi: asset-tag: Add API to write asset tag to the DBUS object

Change-Id: Ia4bf3f99a865617535c65a023c8e697792cd43b4
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
diff --git a/dcmihandler.cpp b/dcmihandler.cpp
index 0b98036..4c4f8b7 100644
--- a/dcmihandler.cpp
+++ b/dcmihandler.cpp
@@ -105,6 +105,32 @@
     return assetTag.get<std::string>();
 }
 
+void writeAssetTag(const std::string& assetTag)
+{
+    sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
+    dcmi::assettag::ObjectTree objectTree;
+
+    // Read the object tree with the inventory root to figure out the object
+    // that has implemented the Asset tag interface.
+    readAssetTagObjectTree(objectTree);
+
+    auto method = bus.new_method_call(
+            (objectTree.begin()->second.begin()->first).c_str(),
+            (objectTree.begin()->first).c_str(),
+            dcmi::propIntf,
+            "Set");
+    method.append(dcmi::assetTagIntf);
+    method.append(dcmi::assetTagProp);
+    method.append(sdbusplus::message::variant<std::string>(assetTag));
+
+    auto reply = bus.call(method);
+    if (reply.is_method_error())
+    {
+        log<level::ERR>("Error in writing asset tag");
+        elog<InternalFailure>();
+    }
+}
+
 } // namespace dcmi
 
 ipmi_ret_t getAssetTag(ipmi_netfn_t netfn, ipmi_cmd_t cmd,