Left behind AMB parts.
[AGL/meta-agl.git] / meta-ivi-common / recipes-automotive / automotive-message-broker / automotive-message-broker / 0007-WORKAROUND-Allow-amb-qt-binding-to-work-in-case-of-m.patch
diff --git a/meta-ivi-common/recipes-automotive/automotive-message-broker/automotive-message-broker/0007-WORKAROUND-Allow-amb-qt-binding-to-work-in-case-of-m.patch b/meta-ivi-common/recipes-automotive/automotive-message-broker/automotive-message-broker/0007-WORKAROUND-Allow-amb-qt-binding-to-work-in-case-of-m.patch
deleted file mode 100644 (file)
index 14717a9..0000000
+++ /dev/null
@@ -1,640 +0,0 @@
-From 5de4c1f8e0d5fb22a6d2927d3526498de2b21cbe Mon Sep 17 00:00:00 2001
-From: Petr Nechaev <petr.nechaev@cogentembedded.com>
-Date: Fri, 31 Jul 2015 20:22:36 +0300
-Subject: [PATCH 7/9] [WORKAROUND] Allow amb-qt binding to work in case of
- multiple properties
-
----
- docs/amb.in.fidl                   |  21 ++++
- plugins/dbus/amb-qt/CMakeLists.txt |   2 +-
- plugins/dbus/amb-qt/ambqt.cpp      | 237 ++++++++++++++++++++++++++-----------
- plugins/dbus/amb-qt/ambqt.h        |  59 ++++-----
- plugins/dbus/amb-qt/ambqtquick.cpp |  22 +++-
- plugins/dbus/amb-qt/ambqtquick.h   |  22 +++-
- plugins/dbus/amb-qt/qmldir         |   1 +
- plugins/dbus/amb-qt/test.cpp       |  26 +++-
- plugins/dbus/automotivemanager.cpp |  65 ++++++++++
- 9 files changed, 350 insertions(+), 105 deletions(-)
-
-diff --git a/docs/amb.in.fidl b/docs/amb.in.fidl
-index 398a33d..27d2827 100644
---- a/docs/amb.in.fidl
-+++ b/docs/amb.in.fidl
-@@ -220,6 +220,27 @@ interface org.automotive.Manager  {
-   }
-   /*!
-+   * FindObjectsForZone
-+   *  \brief find the DBus object path which matches "objectName" and "zone".  This has the same behavior as FindObject
-+   * except that it takes an addition zone argument and only return the path for that zone.
-+   *  \arg String property is the requested property to be retrieved.
-+   *  \arg Zone zone is the zone which the object
-+   *  \return list of object paths that provide the given object Name.
-+   *  Possible errors:
-+   * "org.automotive.Manager.InvalidZone"
-+   * "org.automotive.Manager.ObjectNotFound"
-+  */
-+  method FindObjectsForZone {
-+        in {
-+          String objectName
-+          Zone zone
-+        }
-+        out {
-+          array of String objectPath
-+        }
-+  }
-+
-+  /*!
-    * ZonesForObjectName
-    *  \brief get a list of zones for a given objectName.
-    *  \arg String objectName object name.
-diff --git a/plugins/dbus/amb-qt/CMakeLists.txt b/plugins/dbus/amb-qt/CMakeLists.txt
-index 2f2a2a8..42b7fb4 100644
---- a/plugins/dbus/amb-qt/CMakeLists.txt
-+++ b/plugins/dbus/amb-qt/CMakeLists.txt
-@@ -16,7 +16,7 @@ endif(Qt5Core_FOUND)
- set(ambqt_headers ambqt.h amb-qt_global.h)
- set(ambqt_sources ambqt.cpp)
--set(ambqtquick_sources ambqtquick.cpp)
-+set(ambqtquick_sources ambqtquick.cpp qmldir)
- set(ambqtquick_headers ambqtquick.h)
- include_directories(${CMAKE_SOURCE_DIR}/lib ${include_dirs} ${QT_INCLUDE_DIRS})
-diff --git a/plugins/dbus/amb-qt/ambqt.cpp b/plugins/dbus/amb-qt/ambqt.cpp
-index 6a3faeb..c8f1faf 100644
---- a/plugins/dbus/amb-qt/ambqt.cpp
-+++ b/plugins/dbus/amb-qt/ambqt.cpp
-@@ -1,92 +1,189 @@
-+/*
-+Copyright (C) 2012 Intel Corporation
-+Copyright (C) 2015 Cogent Embedded Inc.
-+
-+This library is free software; you can redistribute it and/or
-+modify it under the terms of the GNU Lesser General Public
-+License as published by the Free Software Foundation; either
-+version 2.1 of the License, or (at your option) any later version.
-+
-+This library is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+Lesser General Public License for more details.
-+
-+You should have received a copy of the GNU Lesser General Public
-+License along with this library; if not, write to the Free Software
-+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-+*/
- #include "ambqt.h"
- #include <QDBusConnection>
- #include <QDBusInterface>
- #include <QtDebug>
- #include <QDBusReply>
--AmbProperty::AmbProperty(QString op, QString iface, QString propName)
--      :QObject(), mPropertyName(propName),mInterfaceName(iface), mObjectPath(op),mDBusInterface(NULL),mZone(0)
-+AmbProperty::AmbProperty(QString objectName, QString propName)
-+    :QObject(), mObjectName(objectName), mPropertyName(propName), mZone(0), managerIface(NULL)
- {
--      connect();
-+    // Automatically connect when all properties have been set
-+    connect();
- }
--void AmbProperty::propertyChangedSlot(QString, QVariantMap values, QVariantMap )
-+void AmbProperty::propertyChangedSlot(QString, QVariantMap values, QStringList )
- {
--      valueChanged(values);
-+    // try to get value
-+    mValue = values[mPropertyName];
-+
-+    // try to parse time
-+    QVariant timeVariant = values["Time"];
-+    bool ok = false;
-+    double NewTime = 0;
-+    if (timeVariant.isValid())
-+        NewTime = timeVariant.toDouble(&ok);
-+    if (ok)
-+        mTime = NewTime;
-+
-+    // emit the signal
-+    valueChanged(mValue);
- }
--void AmbProperty::propertyChanged1(QDBusVariant val, double t)
-+void AmbProperty::connect()
- {
--      mTime = t;
--      mValue = val.variant();
--
--      signalChanged(mValue);
-+    if (managerIface)
-+        disconnect();
-+
-+    managerIface = new QDBusInterface("org.automotive.message.broker","/","org.automotive.Manager", QDBusConnection::systemBus(), this);
-+
-+    if(!managerIface->isValid())
-+    {
-+        qWarning()<<"Failed to create manager interface";
-+        delete managerIface;
-+        return;
-+    }
-+
-+    QDBusReply<QList<QDBusObjectPath>> reply = managerIface->call("FindObjectsForZone", mObjectName, mZone);
-+
-+    if(reply.isValid())
-+    {
-+        for (int i=0; i < reply.value().size(); ++i)
-+        {
-+            QDBusInterface* mDBusInterface = new QDBusInterface("org.automotive.message.broker",
-+                                                                reply.value().at(i).path(),
-+                                                                "org.freedesktop.DBus.Properties",
-+                                                                QDBusConnection::systemBus(),
-+                                                                this);
-+
-+            if(!mDBusInterface->isValid())
-+            {
-+                qDebug()<<"Failed to create dbus interface for property "<<propertyName();
-+                qDebug()<<"path: "<< reply.value().at(i).path();
-+                qDebug()<<"object: "<< objectName();
-+                qDebug()<<"property: "<< propertyName();
-+                qDebug()<<"Error: "<<QDBusConnection::systemBus().lastError().message();
-+            }
-+
-+            // store object interface for future use
-+            ServerProperties.append(mDBusInterface);
-+
-+            if(!QDBusConnection::systemBus().connect("org.automotive.message.broker",
-+                                                     reply.value().at(i).path(),
-+                                                     "org.freedesktop.DBus.Properties",
-+                                                     "PropertiesChanged",
-+                                                     this,
-+                                                     SLOT(propertyChangedSlot(QString,QVariantMap,QStringList))))
-+            {
-+                qDebug()<<"Failed to connect to signal";
-+                qDebug()<<"path: "<< reply.value().at(i).path();
-+                qDebug()<<"object: "<< objectName();
-+                qDebug()<<"property: "<< propertyName();
-+                qDebug()<<"Error: "<< QDBusConnection::systemBus().lastError().message();
-+            }
-+        }
-+    }
-+
-+    //    if(mInterfaceName.isEmpty())
-+    //        mInterfaceName = "org.automotive."+mPropertyName;
-+
-+    //    mDBusInterface = new QDBusInterface("org.automotive.message.broker",objectPath(), interfaceName(), QDBusConnection::systemBus(),this);
-+
-+    //    if(!mDBusInterface->isValid())
-+    //    {
-+    //        qDebug()<<"Failed to create dbus interface for property "<<propertyName();
-+    //        qDebug()<<"Path: "<<objectPath();
-+    //        qDebug()<<"Interface: "<<interfaceName();
-+    //        qDebug()<<"Error: "<<QDBusConnection::systemBus().lastError().message();
-+    //    }
-+
-+    //    QString signalName = propertyName() + "Changed";
-+
-+
-+
-+    //    ///TODO: only use PropertiesChanged...  treat AmbProperty like an object rather than a representation of just a single property in the object
-+
-+    //    if(!QDBusConnection::systemBus().connect("org.automotive.message.broker", objectPath(), mInterfaceName,
-+    //                                             signalName, this, SLOT(propertyChanged1(QDBusVariant,double))))
-+    //    {
-+    //        qDebug()<<"Failed to connect to signal";
-+    //        qDebug()<<"path: "<<objectPath();
-+    //        qDebug()<<"interface: "<<interfaceName();
-+    //        qDebug()<<"signal: "<<propertyName();
-+    //        qDebug()<<"Error: "<<QDBusConnection::systemBus().lastError().message();
-+    //    }
- }
--void AmbProperty::connect()
-+void AmbProperty::disconnect()
- {
--      if(mDBusInterface)
--      {
--              delete mDBusInterface;
--      }
--
--      if(mObjectPath.isEmpty())
--              getObjectPath();
--
--      if(mInterfaceName.isEmpty())
--              mInterfaceName = "org.automotive."+mPropertyName;
--
--      mDBusInterface = new QDBusInterface("org.automotive.message.broker",objectPath(), interfaceName(), QDBusConnection::systemBus(),this);
--
--      if(!mDBusInterface->isValid())
--      {
--              qDebug()<<"Failed to create dbus interface for property "<<propertyName();
--              qDebug()<<"Path: "<<objectPath();
--              qDebug()<<"Interface: "<<interfaceName();
--              qDebug()<<"Error: "<<QDBusConnection::systemBus().lastError().message();
--      }
--
--      QString signalName = propertyName() + "Changed";
--
--
--      if(!QDBusConnection::systemBus().connect("org.automotive.message.broker", objectPath(), "org.freedesktop.DBus.Properties",
--                                                                                       "PropertiesChanged", this, SLOT(propertyChangedSlot(QString,QVariantMap,QVariantMap))))
--      {
--              qDebug()<<"Failed to connect to signal";
--              qDebug()<<"path: "<<objectPath();
--              qDebug()<<"interface: "<<interfaceName();
--              qDebug()<<"signal: "<<propertyName();
--              qDebug()<<"Error: "<<QDBusConnection::systemBus().lastError().message();
--      }
--
--      ///TODO: only use PropertiesChanged...  treat AmbProperty like an object rather than a representation of just a single property in the object
--
--      if(!QDBusConnection::systemBus().connect("org.automotive.message.broker", objectPath(), mInterfaceName,
--                                                                                       signalName, this, SLOT(propertyChanged1(QDBusVariant,double))))
--      {
--              qDebug()<<"Failed to connect to signal";
--              qDebug()<<"path: "<<objectPath();
--              qDebug()<<"interface: "<<interfaceName();
--              qDebug()<<"signal: "<<propertyName();
--              qDebug()<<"Error: "<<QDBusConnection::systemBus().lastError().message();
--      }
-+    delete managerIface;
-+    managerIface = NULL;
-+
-+    QDBusReply<QList<QDBusObjectPath>> reply = managerIface->call("FindObjectsForZone", mObjectName, mZone);
-+
-+    if(reply.isValid())
-+    {
-+        for (int i=0; i < reply.value().size(); ++i)
-+        {
-+            QDBusConnection::systemBus().disconnect("org.automotive.message.broker",
-+                                                    reply.value().at(i).path(),
-+                                                    "org.freedesktop.DBus.Properties",
-+                                                    "PropertiesChanged",
-+                                                    this,
-+                                                    SLOT(propertyChangedSlot(QString,QVariantMap,QStringList)));
-+        }
-+    }
-+
-+    for (int i = 0; i < ServerProperties.size(); ++i)
-+        delete ServerProperties[i];
-+
-+    ServerProperties.clear();
- }
--void AmbProperty::getObjectPath()
-+QVariant AmbProperty::updateValue()
- {
--      QDBusInterface managerIface("org.automotive.message.broker","/","org.automotive.Manager", QDBusConnection::systemBus(), this);
--
--      if(!managerIface.isValid())
--      {
--              qDebug()<<"Failed to create manager interface";
--              return;
--      }
--
--      QDBusReply<QDBusObjectPath> reply = managerIface.call("FindObjectForZone", mPropertyName, mZone);
-+    for (int i = 0; i < ServerProperties.size(); ++i)
-+    {
-+        if (!ServerProperties[i]->isValid())
-+        {
-+            qDebug()<<"error Interface is not valid "<<ServerProperties[i]->objectName();
-+        }
-+
-+        QVariant v = ServerProperties[i]->property(propertyName().toUtf8());
-+
-+        if (v.isValid())
-+            return v;
-+    }
-+}
--      if(reply.isValid())
--      {
--              mObjectPath = reply.value().path();
--      }
-+void AmbProperty::setValue(QVariant v)
-+{
-+    for (int i = 0; i < ServerProperties.size(); ++i)
-+    {
-+        if (!ServerProperties[i]->isValid())
-+        {
-+            qDebug()<<"error Interface is not valid "<<ServerProperties[i]->objectName();
-+        }
-+
-+        ServerProperties[i]->setProperty(propertyName().toUtf8(), v);
-+    }
- }
-+
-diff --git a/plugins/dbus/amb-qt/ambqt.h b/plugins/dbus/amb-qt/ambqt.h
-index 3d7e793..6510daa 100644
---- a/plugins/dbus/amb-qt/ambqt.h
-+++ b/plugins/dbus/amb-qt/ambqt.h
-@@ -1,3 +1,21 @@
-+/*
-+Copyright (C) 2012 Intel Corporation
-+Copyright (C) 2015 Cogent Embedded Inc.
-+
-+This library is free software; you can redistribute it and/or
-+modify it under the terms of the GNU Lesser General Public
-+License as published by the Free Software Foundation; either
-+version 2.1 of the License, or (at your option) any later version.
-+
-+This library is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+Lesser General Public License for more details.
-+
-+You should have received a copy of the GNU Lesser General Public
-+License along with this library; if not, write to the Free Software
-+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-+*/
- #ifndef AMBQT_H
- #define AMBQT_H
-@@ -17,57 +35,44 @@ class QDBusInterface;
- class AmbProperty: public QObject
- {
-       Q_OBJECT
--      Q_PROPERTY(QString propertyName READ propertyName WRITE setPropertyName)
-+    Q_PROPERTY(QString objectName READ objectName WRITE setObjectName)
-+    AUTOPROPERTY(QString, objectName, ObjectName)
-+    Q_PROPERTY(QString propertyName READ propertyName WRITE setPropertyName)
-       AUTOPROPERTY(QString, propertyName, PropertyName)
--      Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged)
--      Q_PROPERTY(QString interfaceName READ interfaceName WRITE setInterfaceName)
--      AUTOPROPERTY(QString, interfaceName, InterfaceName)
--      Q_PROPERTY(QString objectPath READ objectPath WRITE setObjectPath)
--      AUTOPROPERTY(QString, objectPath, ObjectPath)
-+    Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged)
-       Q_PROPERTY(int zone READ zone WRITE setZone)
-       AUTOPROPERTY(int, zone, Zone)
-       Q_PROPERTY(double time READ time)
--      public:
-+public:
-+    AmbProperty(): mPropertyName("Value"), mZone(0), mTime(0), managerIface(NULL) { }
--              AmbProperty():mDBusInterface(NULL),mZone(0),mTime(0) { }
--
--      AmbProperty(QString op, QString iface, QString propName);
-+    AmbProperty(QString objectName, QString propName);
-       QVariant value()
-       {
-               return mValue;
-       }
--      void setValue(QVariant v)
--      {
--              if(!mDBusInterface || !mDBusInterface->isValid())
--              {
--                      qDebug()<<"error Interface is not valid "<<interfaceName();
--              }
--
--              mDBusInterface->setProperty(propertyName().toUtf8(), v);
--      }
-+    void setValue(QVariant v);
-       double time(){ return mTime; }
--Q_SIGNALS:    
-+signals:
-       void valueChanged(QVariant val);
--      ///TODO: remove
--      void signalChanged(QVariant val);
--
- public Q_SLOTS:
-       void connect();
-+    QVariant updateValue();
-+    void disconnect();
- private Q_SLOTS:
--      void propertyChangedSlot(QString, QVariantMap values, QVariantMap);
--      void propertyChanged1(QDBusVariant, double);
-+    void propertyChangedSlot(QString, QVariantMap values, QStringList);
- private:
--      void getObjectPath();
--      QDBusInterface* mDBusInterface;
-+    QList<QDBusInterface*> ServerProperties;
-+    QDBusInterface* managerIface;
-       double mTime;
-       QVariant mValue;
- };
-diff --git a/plugins/dbus/amb-qt/ambqtquick.cpp b/plugins/dbus/amb-qt/ambqtquick.cpp
-index c5102a9..4362297 100644
---- a/plugins/dbus/amb-qt/ambqtquick.cpp
-+++ b/plugins/dbus/amb-qt/ambqtquick.cpp
-@@ -1,10 +1,28 @@
-+/*
-+Copyright (C) 2012 Intel Corporation
-+Copyright (C) 2015 Cogent Embedded Inc.
-+
-+This library is free software; you can redistribute it and/or
-+modify it under the terms of the GNU Lesser General Public
-+License as published by the Free Software Foundation; either
-+version 2.1 of the License, or (at your option) any later version.
-+
-+This library is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+Lesser General Public License for more details.
-+
-+You should have received a copy of the GNU Lesser General Public
-+License along with this library; if not, write to the Free Software
-+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-+*/
- #include "ambqtquick.h"
- #include <QtQml/qqml.h>
- void Components::registerTypes(const char *uri)
- {
--      qmlRegisterType<AmbProperty>(uri,0,1,"AutomotivePropertyItem");
--
-+ Q_ASSERT(uri == QLatin1String("amb"));
-+ int ret = qmlRegisterType<AmbProperty>(uri, 0, 1,"AutomotivePropertyItem");
- }
- void Components::initializeEngine(QQmlEngine *, const char *)
-diff --git a/plugins/dbus/amb-qt/ambqtquick.h b/plugins/dbus/amb-qt/ambqtquick.h
-index a48104a..74b3d6d 100644
---- a/plugins/dbus/amb-qt/ambqtquick.h
-+++ b/plugins/dbus/amb-qt/ambqtquick.h
-@@ -1,3 +1,21 @@
-+/*
-+Copyright (C) 2012 Intel Corporation
-+Copyright (C) 2015 Cogent Embedded Inc.
-+
-+This library is free software; you can redistribute it and/or
-+modify it under the terms of the GNU Lesser General Public
-+License as published by the Free Software Foundation; either
-+version 2.1 of the License, or (at your option) any later version.
-+
-+This library is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+Lesser General Public License for more details.
-+
-+You should have received a copy of the GNU Lesser General Public
-+License along with this library; if not, write to the Free Software
-+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-+*/
- #include <QQmlExtensionPlugin>
- #include "ambqt.h"
-@@ -7,8 +25,6 @@ class Components : public QQmlExtensionPlugin
-       Q_PLUGIN_METADATA(IID "org.automotive.qmlplugin")
- public:
--
-       void registerTypes(const char *uri);
--      void initializeEngine(QQmlEngine *engine, const char *uri);
--
-+    void initializeEngine(QQmlEngine *engine, const char *uri);
- };
-diff --git a/plugins/dbus/amb-qt/qmldir b/plugins/dbus/amb-qt/qmldir
-index a2d986c..49557ae 100644
---- a/plugins/dbus/amb-qt/qmldir
-+++ b/plugins/dbus/amb-qt/qmldir
-@@ -1 +1,2 @@
-+module amb
- plugin ambqtquick
-diff --git a/plugins/dbus/amb-qt/test.cpp b/plugins/dbus/amb-qt/test.cpp
-index 6eb88eb..a11f5e4 100644
---- a/plugins/dbus/amb-qt/test.cpp
-+++ b/plugins/dbus/amb-qt/test.cpp
-@@ -1,3 +1,21 @@
-+/*
-+Copyright (C) 2012 Intel Corporation
-+Copyright (C) 2015 Cogent Embedded Inc.
-+
-+This library is free software; you can redistribute it and/or
-+modify it under the terms of the GNU Lesser General Public
-+License as published by the Free Software Foundation; either
-+version 2.1 of the License, or (at your option) any later version.
-+
-+This library is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+Lesser General Public License for more details.
-+
-+You should have received a copy of the GNU Lesser General Public
-+License along with this library; if not, write to the Free Software
-+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-+*/
- #include "ambqt.h"
- #include "timestamp.h"
-@@ -15,7 +33,7 @@ int main(int argc, char** argv)
-       double totalLatency=0;
-       int numSamples=0;
--      QObject::connect(&speed, &AmbProperty::signalChanged,[&](QVariant val)
-+      QObject::connect(&speed, &AmbProperty::valueChanged,[&](QVariant val)
-       {
-               double t1 = speed.time();
-               double t2 = amb::currentTime();
-@@ -26,10 +44,14 @@ int main(int argc, char** argv)
-               totalLatency+=latency;
-               numSamples++;
-               DebugOut(0)<<"Average: "<<totalLatency / numSamples<<std::endl;
-+              qDebug()<<"Value: "<<val;
-       });
--      speed.setPropertyName("VehicleSpeed");
-+      speed.setObjectName("VehicleSpeed");
-+      speed.setPropertyName("Speed");
-       speed.connect();
-+      qDebug() << "Updated="<< speed.updateValue();
-+
-       return app.exec();
- }
-diff --git a/plugins/dbus/automotivemanager.cpp b/plugins/dbus/automotivemanager.cpp
-index 64919e0..a164d11 100644
---- a/plugins/dbus/automotivemanager.cpp
-+++ b/plugins/dbus/automotivemanager.cpp
-@@ -14,6 +14,11 @@ static const gchar introspection_xml[] =
-   "      <arg type='i' name='zone' direction='in'/>"
-   "      <arg type='o' name='response' direction='out'/>"
-   "    </method>"
-+  "    <method name='FindObjectsForZone'>"
-+  "      <arg type='s' name='searchstring' direction='in'/>"
-+  "      <arg type='i' name='zone' direction='in'/>"
-+  "      <arg type='ao' name='response' direction='out'/>"
-+  "    </method>"
-   "    <method name='FindObjectForSourceZone'>"
-   "      <arg type='s' name='searchstring' direction='in'/>"
-   "      <arg type='s' name='source' direction='in'/>"
-@@ -168,6 +173,66 @@ static void handleMethodCall(GDBusConnection       *connection,
-               g_dbus_method_invocation_return_dbus_error(invocation,"org.automotive.Manager.InvalidZone", "zone not found");
-       }
-+      else if(method == "FindObjectsForZone")
-+      {
-+              gchar* arg;
-+              int zone;
-+
-+              g_variant_get(parameters,"(si)", &arg, &zone);
-+
-+              std::string propertyToFind = arg;
-+
-+              if(propertyToFind == "")
-+              {
-+                      g_dbus_method_invocation_return_error(invocation,G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "Invalid argument.");
-+                      return;
-+              }
-+
-+              std::list<AbstractDBusInterface*> interfaces = AbstractDBusInterface::getObjectsForProperty(propertyToFind);
-+
-+              if(!interfaces.size())
-+              {
-+                      g_dbus_method_invocation_return_dbus_error(invocation, "org.automotive.Manager.ObjectNotFound", "Property not found");
-+                      return;
-+              }
-+
-+              GVariantBuilder params;
-+              g_variant_builder_init(&params, G_VARIANT_TYPE_ARRAY);
-+
-+              bool hasItems = false;
-+
-+              for(auto itr = interfaces.begin(); itr != interfaces.end(); itr++)
-+              {
-+                      AbstractDBusInterface* t = *itr;
-+                      if(!t->isSupported())
-+                              continue;
-+
-+                      if(t->zone() == (Zone::Type)zone)
-+                      {
-+                              hasItems = true;
-+
-+                              if(!t->isRegistered())
-+                                      t->registerObject();
-+
-+                              std::list<std::string> processes = manager->subscribedProcesses[t];
-+
-+                              if(!contains(processes,sender))
-+                              {
-+                                      DebugOut()<<"Referencing "<<t->objectPath()<<" with sender: "<<sender<<endl;
-+                                      manager->subscribedProcesses[t].push_back(sender);
-+                              }
-+
-+                              GVariant *newvar = g_variant_new("o",t->objectPath().c_str());
-+                              g_variant_builder_add_value(&params, newvar);
-+                      }
-+              }
-+
-+              if(hasItems)
-+                      g_dbus_method_invocation_return_value(invocation, g_variant_new("(ao)",&params));
-+              else
-+                      g_dbus_method_invocation_return_dbus_error(invocation,"org.automotive.Manager.ObjectNotFound", "Property not found");
-+      }
-+
-       else if (method == "ZonesForObjectName")
-       {
-               gchar* arg;
--- 
-1.9.1
-