Implement event manager class

On handling of property change event, If callback is
of type event then event manager would be asked to create
the event dbus objects.

Change-Id: I7f1d365d7f44a1cca54516e9ef555bb132d6b063
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/src/Makefile.am b/src/Makefile.am
index cf91619..94f81b8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -10,7 +10,8 @@
 	elog.cpp \
 	main.cpp \
 	propertywatch.cpp \
-	resolve_errors.cpp
+	resolve_errors.cpp \
+	event_manager.cpp
 phosphor_dbus_monitor_LDADD = \
 	$(SDBUSPLUS_LIBS) \
 	$(PHOSPHOR_DBUS_INTERFACES_LIBS) \
diff --git a/src/event_manager.cpp b/src/event_manager.cpp
new file mode 100644
index 0000000..ef2098a
--- /dev/null
+++ b/src/event_manager.cpp
@@ -0,0 +1,41 @@
+/**
+ * Copyright © 2017 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "event.hpp"
+#include "event_manager.hpp"
+#include "config.h"
+
+namespace phosphor
+{
+namespace events
+{
+
+void Manager::create(
+    const std::string& eventName,
+    const std::string& objectPath,
+    const std::string& propertyName,
+    const std::string& propertyvalue)
+{
+    // TODO Implement it in later commit.
+}
+
+Manager& getManager()
+{
+    static Manager mgr;
+    return mgr;
+}
+
+} // namespace events
+} // namespace phosphor
diff --git a/src/event_manager.hpp b/src/event_manager.hpp
new file mode 100644
index 0000000..3d1f8d1
--- /dev/null
+++ b/src/event_manager.hpp
@@ -0,0 +1,42 @@
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+
+namespace phosphor
+{
+namespace events
+{
+
+/** @class Manager
+ *  @brief OpenBMC Event manager implementation.
+ */
+class Manager
+{
+    public:
+        Manager() = default;
+        Manager(const Manager&) = delete;
+        Manager& operator=(const Manager&) = delete;
+        Manager(Manager&&) = default;
+        Manager& operator=(Manager&&) = default;
+        virtual ~Manager() = default;
+
+        /** @brief Create the D-Bus Event object.
+         *  @detail Add the objectPath,propertyName, propertyValue
+         *          as additional data of the event object.
+         *  @param[in] eventName - Name of the event.
+         *  @param[in] objectPath - Path of the D-Bus object.
+         *  @param[in] propertyName - Name of the property.
+         *  @param[in] propertyValue - Value of the property.
+         */
+        void create(
+            const std::string& eventName,
+            const std::string& objectPath,
+            const std::string& propertyName,
+            const std::string& propertyValue);
+
+};
+
+Manager& getManager();
+
+} // namespace events
+} // namespace phosphor
diff --git a/src/main.cpp b/src/main.cpp
index 08cd849..5e191e1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -13,8 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "sdbusplus.hpp"
+
+#include "config.h"
 #include "generated.hpp"
+#include "sdbusplus.hpp"
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server/manager.hpp>
 
 using namespace phosphor::dbus::monitoring;
 
@@ -32,6 +37,12 @@
 
 int main(void)
 {
+    auto& bus = SDBusPlus::getBus();
+
+    // Add sdbusplus Object Manager for the 'root' path of events.
+    sdbusplus::server::manager::manager objManager(bus, OBJ_EVENT);
+    bus.request_name(BUSNAME_EVENT);
+
     for (auto& watch : ConfigPropertyWatches::get())
     {
         watch->start();