contentstorage/caclient/stub/src/canotifiers.cpp
changeset 85 7feec50967db
child 86 e492551a0d54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/caclient/stub/src/canotifiers.cpp	Tue Mar 23 23:17:02 2010 +0200
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: canotifiers.cpp
+ *
+ */
+
+#include <canotifierfilter.h>
+
+#include "canotifiers.h"
+#include "caclientnotifierproxy.h"
+
+CaNotifiers::NotifierHash CaNotifiers::mNotifiers;
+
+int CaNotifiers::addNotifier(const CaNotifierFilter *notifierFilter,
+    CaNotifierPrivate::NotifierType notifierType,
+    const CaClientNotifierProxy *notifierProxy)
+{
+    NotifierKey key = NotifierKey(notifierFilter, notifierType);
+    if (!mNotifiers.contains(key)) {
+        mNotifiers.insert(key, notifierProxy);
+    }
+    return 0;
+}
+
+void CaNotifiers::removeNotifier(const CaNotifierFilter *notifierFilter,
+    CaNotifierPrivate::NotifierType notifierType)
+{
+    mNotifiers.remove(NotifierKey(notifierFilter, notifierType));
+}
+
+void CaNotifiers::Notify(int groupId)
+{
+    for (NotifierHash::const_iterator i = mNotifiers.constBegin();
+        i != mNotifiers.constEnd();
+        ++i) {
+        const CaNotifierFilter *filter = i.key().first;
+        if (filter->getIds().isEmpty() || filter->getIds().contains(groupId)) {
+            if (i.key().second
+                == CaNotifierPrivate::GroupContentChangedNotifierType) {
+                i.value()->groupContentChanged(groupId);
+            }
+        }
+    }
+}
+
+void CaNotifiers::Notify(const CaEntry &targetEntry,
+    ChangeType changeType,
+    QList<int> &parentIds)
+{
+    for (NotifierHash::const_iterator i = mNotifiers.constBegin();
+        i != mNotifiers.constEnd();
+        ++i) {
+        if (isRegisterdForNotification(
+            *i.key().first, targetEntry, parentIds)) {
+            if (i.key().second
+                == CaNotifierPrivate::EntryChangedWithIdNotifierType) {
+                i.value()->entryChanged(targetEntry.id(), changeType);
+            } else if (i.key().second
+                == CaNotifierPrivate::EntryChangedWithEntryNotifierType) {
+                i.value()->entryChanged(targetEntry, changeType);
+            } else if (i.key().second
+                == CaNotifierPrivate::EntryTouchedNotifierType) {
+                i.value()->entryChanged(targetEntry.id(), changeType);
+            }
+        }
+    }
+}
+
+bool CaNotifiers::isRegisterdForNotification(
+    const CaNotifierFilter &filter,
+    const CaEntry &entry,
+    const QList<int> &parentIds)
+{
+    bool ret = true;
+    if (!filter.getIds().isEmpty()) {
+            ret = ret && filter.getIds().contains(entry.id());
+    }
+    if (filter.getParentId() > 0) {
+        if (entry.id() == filter.getParentId()) {
+            ret = true;
+        } else {
+            ret = ret && parentIds.contains(filter.getParentId());
+        }
+    }
+    if (!filter.getTypeNames().isEmpty()) {
+        ret = ret && filter.getTypeNames().contains(entry.entryTypeName());
+    }
+    if (filter.getEntryRole()) {
+        ret = ret && (filter.getEntryRole().testFlag(entry.role()));
+    }
+    return ret;
+}
+
+