--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/srvinc/casrvnotifier.h Fri Mar 19 09:35:23 2010 +0200
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2008 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: ?Description
+ *
+ */
+
+#ifndef CASRVNOTIFIER_H
+#define CASRVNOTIFIER_H
+
+#include <e32base.h>
+#include "cadef.h"
+
+// FORWARD DECLARATION
+
+class RMessage2;
+class CCaInnerNotifierFilter;
+class CCaInnerEntry;
+class CDesC16ArrayFlat;
+// CLASS DECLARATION
+
+/**
+ * Server side notifier object.
+ */
+NONSHARABLE_CLASS( CCaSrvNotifier ): public CBase
+ {
+
+public:
+
+ /**
+ * Destructor.
+ */
+ virtual ~CCaSrvNotifier();
+
+ /**
+ * Two phase constructor. Leaves on failure.
+ */
+ static CCaSrvNotifier* NewL();
+
+ /**
+ * Two phase constructor. Leaves on failure.
+ */
+ static CCaSrvNotifier* NewLC();
+
+ /**
+ * Notification requested.
+ * @param aMessage Message requesting the notification.
+ */
+ void NotifyL( const RMessage2& aMessage );
+
+ /**
+ * Cancel request, if any.
+ * Base implementation completes the message with KErrCancel.
+ * Override and add real cancellation of outstanding requests.
+ */
+ virtual void Cancel();
+
+ /**
+ * Complete message if filter is correct.
+ * @param aEntry was changed.
+ * @param aChangeType - update, add, remowe.
+ * @param aParentIds - array with parents ids.
+ */
+ void EntryChangedL( const CCaInnerEntry* aEntry, TChangeType aChangeType,
+ const RArray<TInt>& aParentIds );
+
+ /**
+ * Complete message if filter is correct.
+ * @param aId entry id.
+ */
+ void EntryTouchedL( TInt aId );
+
+ /**
+ * Complete message if filter is correct.
+ * @param aParentIds entries(groups) id.
+ */
+ void GroupContentChangedL( const RArray<TInt>& aParentIds );
+
+ /**
+ * Get info from latest changes.
+ * @param aMessage message from client.
+ */
+ void GetChangeInfoL( const RMessage2& aMessage );
+
+private:
+
+ /**
+ * Constructor. Leaves on failure.
+ */
+ CCaSrvNotifier();
+
+ /**
+ * Second phase constructor. Leaves on failure.
+ */
+ void ConstructL();
+
+ /**
+ * Set this message as pending (take ownership of completion).
+ * Call this as LAST thing in the request method,
+ * and DO NOT LEAVE AFTER this is called.
+ * Leaving after this method is called causes double completion of the
+ * message (once by this object, once by the sessions ServiceError()).
+ * @param aMessage Message to complete. Will be completed by this object.
+ */
+ void SetPendingL( const RMessage2& aMessage );
+
+ /**
+ * Panic aMessage and leave if this object is pending.
+ * Call this as first thing in request method. (Sanity checking.)
+ * @param aMessage Message.
+ */
+ void PanicIfPendingL( const RMessage2& aMessage );
+
+ /**
+ * Completes the message, if pending. Does nothing if not pending.
+ * @param aReason Completion code.
+ */
+ void Complete( TInt aReason = KErrNone );
+
+ /**
+ * Check filter for entry which was changed.
+ * @param aEntry to check.
+ * @param aParentIds - array with parents ids.
+ * @return ETrue if entry is correct with filter.
+ */
+ TBool CheckFilterForEntry( const CCaInnerEntry* aEntry,
+ const RArray<TInt>& aParentIds );
+
+ /**
+ * Prepare simply entry only with id.
+ * @param aId entry id.
+ */
+ void AddEntryWithIdL( TInt aId );
+
+ /**
+ * If aIds array is not empty then it should contains aId.
+ * @param aIds array with ids.
+ * @param aId entry id which was changed.
+ * @return EFalse if aIds is not empty and does not contain aId.
+ */
+ TBool CheckIds( const RArray<TInt>& aIds, TInt aId );
+
+ /**
+ * If aTypeNames array is not empty then it should contains aTypeName.
+ * @param aTypeNames array with type names.
+ * @param aTypeName entry type name which was changed.
+ * @return EFalse if aTypeNames is not empty.
+ * and does not contain aTypeName.
+ */
+ TBool CheckTypeName( const CDesC16ArrayFlat* aTypeNames,
+ const RBuf& aTypeName );
+
+private:
+ // data
+
+ /*
+ * Pending. (Owner of an incompleted message).
+ */
+ TBool iPending;
+
+ /*
+ * The message (valid only if iPending). Not own.
+ */
+ RMessage2 iMessage;
+
+ /*
+ * Filter. Own.
+ */
+ CCaInnerNotifierFilter* iFilter;
+
+ /*
+ * Array with externalized changed entries. Own.
+ */
+ RPointerArray<HBufC8> iBufArrayInfo;
+
+ /*
+ * Array with change type. Own.
+ */
+ RArray<TChangeType> iArrayChangeType;
+ };
+
+#endif /* CASRVNOTIFIER_H */