Add support for processing start event triggers

Process application start event triggers' list of conditions on a group
and perform the defined actions.

This re-uses the following structs(and their necessary functions)
directly from phosphor-inventory-manager:
--struct PropertyConditionBase
--struct PropertyCondition

Change-Id: If4090299fe887ef940320091d4d4be9f6aa7dd29
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/src/functor.cpp b/src/functor.cpp
new file mode 100644
index 0000000..f4d2574
--- /dev/null
+++ b/src/functor.cpp
@@ -0,0 +1,63 @@
+#include "functor.hpp"
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/message.hpp>
+
+namespace phosphor
+{
+namespace dbus
+{
+namespace monitoring
+{
+
+bool PropertyConditionBase::operator()(sdbusplus::bus::bus& bus,
+                                       sdbusplus::message::message&,
+                                       Monitor& mon) const
+{
+    std::string host;
+
+    if (_service)
+    {
+        host.assign(_service);
+    }
+    else
+    {
+        auto mapperCall = bus.new_method_call(
+                              "xyz.openbmc_project.ObjectMapper",
+                              "/xyz/openbmc_project/object_mapper",
+                              "xyz.openbmc_project.ObjectMapper",
+                              "GetObject");
+        mapperCall.append(_path);
+        mapperCall.append(std::vector<std::string>({_iface}));
+        auto mapperResponseMsg = bus.call(mapperCall);
+        if (mapperResponseMsg.is_method_error())
+        {
+            return false;
+        }
+
+        std::map<std::string, std::vector<std::string>> mapperResponse;
+        mapperResponseMsg.read(mapperResponse);
+        if (mapperResponse.empty())
+        {
+            return false;
+        }
+
+        host = mapperResponse.begin()->first;
+    }
+    auto hostCall = bus.new_method_call(host.c_str(),
+                                        _path.c_str(),
+                                        "org.freedesktop.DBus.Properties",
+                                        "Get");
+    hostCall.append(_iface);
+    hostCall.append(_property);
+    auto hostResponseMsg = bus.call(hostCall);
+    if (hostResponseMsg.is_method_error())
+    {
+        return false;
+    }
+
+    return eval(hostResponseMsg);
+}
+
+} // namespace monitoring
+} // namespace dbus
+} // namespace phosphor