Move to new association interface

A new association interface is defined in phosphor-dbus-interfaces
It would be nice to move the local version of the interface
to the new one.

The behavior of how association work is described here:
https://github.com/openbmc/docs/blob/master/object-mapper.md#associations

Partially resolves openbmc/openbmc#3584

Tested: Create a new log using the Create interface, see that
org.openbmc.Associations has been replaced by the xyz one and
2 association objects are created by the mapper.

Signed-off-by: John Wang <wangzqbj@inspur.com>
Change-Id: I9bcddd4765b12224967383bab2dbaa6d273e2790
diff --git a/Makefile.am b/Makefile.am
index e731c30..961aecf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -36,7 +36,6 @@
 	log_manager_main.cpp \
 	elog-lookup.cpp \
 	elog_entry.cpp \
-	org.openbmc.Associations.cpp \
 	elog-process-metadata.cpp \
 	elog_meta.cpp \
 	elog_serialize.cpp \
diff --git a/README.md b/README.md
index 8861245..e7178ec 100644
--- a/README.md
+++ b/README.md
@@ -85,7 +85,7 @@
 The interfaces are:
 * [xyz.openbmc_project.Logging.Entry]
   * The main event log interface.
-* [org.openbmc.Associations]
+* [xyz.openbmc_project.Association.Definitions]
   * Used for specifying inventory items as the cause of the event.
   * For more information on associations, see [here][associations-doc].
 * [xyz.openbmc_project.Object.Delete]
@@ -226,7 +226,7 @@
 **TODO**
 
 [xyz.openbmc_project.Logging.Entry]: https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Logging/Entry.interface.yaml
-[org.openbmc.Associations]: https://github.com/openbmc/phosphor-logging/blob/master/org/openbmc/Associations.interface.yaml
+[xyz.openbmc_project.Association.Definitions]: https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Association/Definitions.interface.yaml
 [associations-doc]: https://github.com/openbmc/docs/blob/master/object-mapper.md#associations
 [callout-doc]: https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Common/Callout/README.md
 [xyz.openbmc_project.Object.Delete]: https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Object/Delete.interface.yaml
diff --git a/elog_entry.hpp b/elog_entry.hpp
index abcfe50..9c93afe 100644
--- a/elog_entry.hpp
+++ b/elog_entry.hpp
@@ -1,12 +1,12 @@
 #pragma once
 
-#include "org/openbmc/Associations/server.hpp"
 #include "xyz/openbmc_project/Logging/Entry/server.hpp"
 #include "xyz/openbmc_project/Object/Delete/server.hpp"
 #include "xyz/openbmc_project/Software/Version/server.hpp"
 
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
+#include <xyz/openbmc_project/Association/Definitions/server.hpp>
 
 namespace phosphor
 {
@@ -16,7 +16,7 @@
 using EntryIfaces = sdbusplus::server::object::object<
     sdbusplus::xyz::openbmc_project::Logging::server::Entry,
     sdbusplus::xyz::openbmc_project::Object::server::Delete,
-    sdbusplus::org::openbmc::server::Associations,
+    sdbusplus::xyz::openbmc_project::Association::server::Definitions,
     sdbusplus::xyz::openbmc_project::Software::server::Version>;
 
 using AssociationList =
@@ -31,7 +31,7 @@
  *  @brief OpenBMC logging entry implementation.
  *  @details A concrete implementation for the
  *  xyz.openbmc_project.Logging.Entry and
- *  org.openbmc.Associations DBus APIs.
+ *  xyz.openbmc_project.Associations.Definitions DBus APIs.
  */
 class Entry : public EntryIfaces
 {
diff --git a/org.openbmc.Associations.cpp b/org.openbmc.Associations.cpp
deleted file mode 100644
index 25d79fd..0000000
--- a/org.openbmc.Associations.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-#include <algorithm>
-#include <org/openbmc/Associations/server.hpp>
-#include <sdbusplus/exception.hpp>
-#include <sdbusplus/server.hpp>
-
-namespace sdbusplus
-{
-namespace org
-{
-namespace openbmc
-{
-namespace server
-{
-
-Associations::Associations(bus::bus& bus, const char* path) :
-    _org_openbmc_Associations_interface(bus, path, _interface, _vtable, this)
-{
-}
-
-Associations::Associations(
-    bus::bus& bus, const char* path,
-    const std::map<std::string, PropertiesVariant>& vals) :
-    Associations(bus, path)
-{
-    for (const auto& v : vals)
-    {
-        setPropertyByName(v.first, v.second);
-    }
-}
-
-auto Associations::associations() const
-    -> std::vector<std::tuple<std::string, std::string, std::string>>
-{
-    return _associations;
-}
-
-int Associations::_callback_get_associations(sd_bus* bus, const char* path,
-                                             const char* interface,
-                                             const char* property,
-                                             sd_bus_message* reply,
-                                             void* context, sd_bus_error* error)
-{
-    using sdbusplus::server::binding::details::convertForMessage;
-
-    try
-    {
-        auto m = message::message(reply);
-#ifndef DISABLE_TRANSACTION
-        {
-            auto tbus = m.get_bus();
-            sdbusplus::server::transaction::Transaction t(tbus, m);
-            sdbusplus::server::transaction::set_id(
-                std::hash<sdbusplus::server::transaction::Transaction>{}(t));
-        }
-#endif
-
-        auto o = static_cast<Associations*>(context);
-        m.append(convertForMessage(o->associations()));
-    }
-    catch (sdbusplus::internal_exception_t& e)
-    {
-        sd_bus_error_set_const(error, e.name(), e.description());
-        return -EINVAL;
-    }
-
-    return true;
-}
-
-auto Associations::associations(
-    std::vector<std::tuple<std::string, std::string, std::string>> value)
-    -> std::vector<std::tuple<std::string, std::string, std::string>>
-{
-    if (_associations != value)
-    {
-        _associations = value;
-        _org_openbmc_Associations_interface.property_changed("associations");
-    }
-
-    return _associations;
-}
-
-int Associations::_callback_set_associations(sd_bus* bus, const char* path,
-                                             const char* interface,
-                                             const char* property,
-                                             sd_bus_message* value,
-                                             void* context, sd_bus_error* error)
-{
-    try
-    {
-        auto m = message::message(value);
-#ifndef DISABLE_TRANSACTION
-        {
-            auto tbus = m.get_bus();
-            sdbusplus::server::transaction::Transaction t(tbus, m);
-            sdbusplus::server::transaction::set_id(
-                std::hash<sdbusplus::server::transaction::Transaction>{}(t));
-        }
-#endif
-
-        auto o = static_cast<Associations*>(context);
-
-        std::vector<std::tuple<std::string, std::string, std::string>> v{};
-        m.read(v);
-        o->associations(v);
-    }
-    catch (sdbusplus::internal_exception_t& e)
-    {
-        sd_bus_error_set_const(error, e.name(), e.description());
-        return -EINVAL;
-    }
-
-    return true;
-}
-
-namespace details
-{
-namespace Associations
-{
-static const auto _property_associations = utility::tuple_to_array(
-    message::types::type_id<
-        std::vector<std::tuple<std::string, std::string, std::string>>>());
-}
-} // namespace details
-
-void Associations::setPropertyByName(const std::string& name,
-                                     const PropertiesVariant& val)
-{
-    if (name == "associations")
-    {
-        auto& v = message::variant_ns::get<
-            std::vector<std::tuple<std::string, std::string, std::string>>>(
-            val);
-        associations(v);
-        return;
-    }
-}
-
-auto Associations::getPropertyByName(const std::string& name)
-    -> PropertiesVariant
-{
-    if (name == "associations")
-    {
-        return associations();
-    }
-
-    return PropertiesVariant();
-}
-
-const vtable::vtable_t Associations::_vtable[] = {
-    vtable::start(),
-    vtable::property("associations",
-                     details::Associations::_property_associations.data(),
-                     _callback_get_associations, _callback_set_associations,
-                     vtable::property_::emits_change),
-    vtable::end()};
-
-} // namespace server
-} // namespace openbmc
-} // namespace org
-} // namespace sdbusplus
diff --git a/org/openbmc/Associations.interface.yaml b/org/openbmc/Associations.interface.yaml
deleted file mode 100644
index 9be60ce..0000000
--- a/org/openbmc/Associations.interface.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: >
-    Implement to delegate org.openbmc.Association interface management
-    responsibilities to another application.
-properties:
-    - name: associations
-      type: array[struct[string,string,string]]
-      description: >
-          An array of forward, reverse, endpoint tuples where:
-              forward - The type of the association.
-              reverse - The type of the association to create for the endpoint.
-              endpoint - The association endpoint.
-
-# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
diff --git a/org/openbmc/Associations/server.hpp b/org/openbmc/Associations/server.hpp
deleted file mode 100644
index fb3ff7e..0000000
--- a/org/openbmc/Associations/server.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-#pragma once
-#include <systemd/sd-bus.h>
-
-#include <sdbusplus/server.hpp>
-#include <tuple>
-
-namespace sdbusplus
-{
-namespace org
-{
-namespace openbmc
-{
-namespace server
-{
-
-class Associations
-{
-  public:
-    /* Define all of the basic class operations:
-     *     Not allowed:
-     *         - Default constructor to avoid nullptrs.
-     *         - Copy operations due to internal unique_ptr.
-     *         - Move operations due to 'this' being registered as the
-     *           'context' with sdbus.
-     *     Allowed:
-     *         - Destructor.
-     */
-    Associations() = delete;
-    Associations(const Associations&) = delete;
-    Associations& operator=(const Associations&) = delete;
-    Associations(Associations&&) = delete;
-    Associations& operator=(Associations&&) = delete;
-    virtual ~Associations() = default;
-
-    /** @brief Constructor to put object onto bus at a dbus path.
-     *  @param[in] bus - Bus to attach to.
-     *  @param[in] path - Path to attach at.
-     */
-    Associations(bus::bus& bus, const char* path);
-
-    using PropertiesVariant = sdbusplus::message::variant<
-        std::vector<std::tuple<std::string, std::string, std::string>>>;
-
-    /** @brief Constructor to initialize the object from a map of
-     *         properties.
-     *
-     *  @param[in] bus - Bus to attach to.
-     *  @param[in] path - Path to attach at.
-     *  @param[in] vals - Map of property name to value for initialization.
-     */
-    Associations(bus::bus& bus, const char* path,
-                 const std::map<std::string, PropertiesVariant>& vals);
-
-    /** Get value of associations */
-    virtual std::vector<std::tuple<std::string, std::string, std::string>>
-        associations() const;
-    /** Set value of associations */
-    virtual std::vector<std::tuple<std::string, std::string, std::string>>
-        associations(
-            std::vector<std::tuple<std::string, std::string, std::string>>
-                value);
-
-    /** @brief Sets a property by name.
-     *  @param[in] name - A string representation of the property name.
-     *  @param[in] val - A variant containing the value to set.
-     */
-    void setPropertyByName(const std::string& name,
-                           const PropertiesVariant& val);
-
-    /** @brief Gets a property by name.
-     *  @param[in] name - A string representation of the property name.
-     *  @return - A variant containing the value of the property.
-     */
-    PropertiesVariant getPropertyByName(const std::string& name);
-
-  private:
-    /** @brief sd-bus callback for get-property 'associations' */
-    static int _callback_get_associations(sd_bus*, const char*, const char*,
-                                          const char*, sd_bus_message*, void*,
-                                          sd_bus_error*);
-    /** @brief sd-bus callback for set-property 'associations' */
-    static int _callback_set_associations(sd_bus*, const char*, const char*,
-                                          const char*, sd_bus_message*, void*,
-                                          sd_bus_error*);
-
-    static constexpr auto _interface = "org.openbmc.Associations";
-    static const vtable::vtable_t _vtable[];
-    sdbusplus::server::interface::interface _org_openbmc_Associations_interface;
-
-    std::vector<std::tuple<std::string, std::string, std::string>>
-        _associations{};
-};
-
-} // namespace server
-} // namespace openbmc
-} // namespace org
-} // namespace sdbusplus
diff --git a/test/Makefile.am b/test/Makefile.am
index 6499764..64aa6d8 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -34,7 +34,6 @@
 	$(top_builddir)/elog_serialize.o \
 	$(top_builddir)/elog_entry.o \
 	$(top_builddir)/log_manager.o \
-	$(top_builddir)/org.openbmc.Associations.o \
 	$(top_builddir)/xyz/openbmc_project/Logging/Internal/Manager/server.o \
 	$(top_builddir)/elog_meta.o \
 	$(top_builddir)/elog-lookup.o \
@@ -104,7 +103,6 @@
 	$(top_builddir)/elog-process-metadata.o \
 	$(top_builddir)/elog_serialize.o \
 	$(top_builddir)/log_manager.o \
-	$(top_builddir)/org.openbmc.Associations.o \
 	$(top_builddir)/xyz/openbmc_project/Logging/Internal/Manager/server.o
 extensions_test_LDFLAGS = $(test_ldflags)