diff -r 1a2a00e78665 -r f62f87b200ec contentstorage/srvinc/casrvnotifier.h --- /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 +#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& 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& 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& 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& 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 iBufArrayInfo; + + /* + * Array with change type. Own. + */ + RArray iArrayChangeType; + }; + +#endif /* CASRVNOTIFIER_H */