ncdengine/provider/server/inc/ncdsubscriptionoperationimpl.h
changeset 0 ba25891c3a9e
child 21 de6723242771
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/server/inc/ncdsubscriptionoperationimpl.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,424 @@
+/*
+* Copyright (c) 2006 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:  
+*
+*/
+
+
+#ifndef C_NCD_SUBSCRIPTION_OPERATION_H
+#define C_NCD_SUBSCRIPTION_OPERATION_H
+
+#include "ncdbaseoperation.h"
+#include "ncdoperationobserver.h"
+#include "ncdsubscriptionoperation.h"
+#include "ncdsubscriptionssourceidentifier.h"
+#include "ncdsubscriptionmanagerobserver.h"
+
+class MCatalogsAccessPointManager;
+class MNcdProtocol;
+class CNcdSubscriptionManager;
+class CNcdSubscription;
+class CNcdPurchaseOperationImpl;
+class MNcdConfigurationManager;
+
+
+/** 
+ * Subscription operation.
+ */
+class CNcdSubscriptionOperation : public CNcdBaseOperation,
+                                  public MNcdParserObserver,
+                                  public MNcdParserSubscriptionObserver,
+                                  public MCatalogsHttpObserver,
+                                  public MNcdSubscriptionManagerObserver
+    {
+public:
+
+    /**
+     *  Sub states of subscription operation 
+     */
+    enum TSubscriptionOperationState
+        {
+        EBegin,
+        ERunning,
+        EHandlingQueries,
+        EComplete
+        };
+
+    
+    /**
+     * NewL
+     * Used for subscription refreshing.
+     *
+     * @since S60 v3.2
+     * @param aSubscriptionOperationType Type of the subscription operation.
+     * @param aAccessPointManager Access point manager.
+     * @param aSubscriptionManager Subscription manager.
+     * @param aNodeManager Node manager.
+     * @param aConfigurationManager Configuration manager.
+     * @param aHttpSession HTTP session used for creating subscription
+     * operations.
+     * @param aProtocol Protocol is used to get parser.
+     * @param aRemoveHandler Remove handler.
+     * @param aSession Session.
+     * @return Subscription operation.
+     */
+    static CNcdSubscriptionOperation* NewL(
+        MNcdSubscriptionOperation::TType aSubscriptionOperationType,
+        CNcdGeneralManager& aGeneralManager,
+        CNcdSubscriptionManager& aSubscriptionManager,        
+        MCatalogsHttpSession& aHttpSession,
+        MNcdOperationRemoveHandler& aRemoveHandler,
+        MCatalogsSession& aSession );
+
+    /**
+     * NewLC
+     * Used for subscription refreshing.
+     *
+     * @since S60 v3.2
+     * @param aSubscriptionOperationType Type of the subscription operation.
+     * @param aAccessPointManager Access point manager.
+     * @param aSubscriptionManager Subscription manager.
+     * @param aNodeManager Node manager.
+     * @param aConfigurationManager Configuration manager.
+     * @param aHttpSession HTTP session used for creating subscription
+     * operations.
+     * @param aProtocol Protocol is used to get parser.
+     * @param aRemoveHandler Remove handler.
+     * @param aSession Session.
+     * @return Subscription operation.
+     */
+    static CNcdSubscriptionOperation* NewLC(
+        MNcdSubscriptionOperation::TType aSubscriptionOperationType,
+        CNcdGeneralManager& aGeneralManager,
+        CNcdSubscriptionManager& aSubscriptionManager,
+        MCatalogsHttpSession& aHttpSession,
+        MNcdOperationRemoveHandler& aRemoveHandler,
+        MCatalogsSession& aSession );
+
+        
+    /**
+     * NewL
+     * Used for unsubscribing subscription.
+     *
+     * @since S60 v3.2
+     * @param aSubscriptionOperationType Type of the subscription operation.
+     * @param aPurchaseOptionId Subscription purchase option ID.
+     * @param aEntityId Subscription entity ID.
+     * @param aNamespace Subscription namespace.
+     * @param aServerUri Subscription server URI.
+     * @param aAccessPointManager Access point manager.
+     * @param aSubscriptionManager Subscription manager.
+     * @param aNodeManager Node manager.
+     * @param aConfigurationManager Configuration manager.
+     * @param aHttpSession HTTP session used for creating subscription
+     * operations.
+     * @param aProtocol Protocol is used to get parser.
+     * @param aRemoveHandler Remove handler.
+     * @param aSession Session.
+     * @return Subscription operation.
+     */
+    static CNcdSubscriptionOperation* NewL(
+        MNcdSubscriptionOperation::TType aSubscriptionOperationType,
+        const TDesC& aPurchaseOptionId,
+        const TDesC& aEntityId,
+        const TDesC& aNamespace,
+        const TDesC& aServerUri,
+        CNcdGeneralManager& aGeneralManager,
+        CNcdSubscriptionManager& aSubscriptionManager,
+        MCatalogsHttpSession& aHttpSession,
+        MNcdOperationRemoveHandler& aRemoveHandler,
+        MCatalogsSession& aSession );
+
+    /**
+     * NewLC
+     * Used for unsubscribing subscription.
+     *
+     * @since S60 v3.2
+     * @param aSubscriptionOperationType Type of the subscription operation.
+     * @param aPurchaseOptionId Subscription purchase option ID.
+     * @param aEntityId Subscription entity ID.
+     * @param aNamespace Subscription namespace.
+     * @param aServerUri Subscription server URI.
+     * @param aAccessPointManager Access point manager.
+     * @param aSubscriptionManager Subscription manager.
+     * @param aNodeManager Node manager.
+     * @param aConfigurationManager Configuration manager.
+     * @param aHttpSession HTTP session used for creating subscription
+     * operations.
+     * @param aProtocol Protocol is used to get parser.
+     * @param aRemoveHandler Remove handler.
+     * @param aSession Session.
+     * @return Subscription operation.
+     */
+    static CNcdSubscriptionOperation* NewLC(
+        MNcdSubscriptionOperation::TType aSubscriptionOperationType,
+        const TDesC& aPurchaseOptionId,
+        const TDesC& aEntityId,
+        const TDesC& aNamespace,
+        const TDesC& aServerUri,
+        CNcdGeneralManager& aGeneralManager,
+        CNcdSubscriptionManager& aSubscriptionManager,
+        MCatalogsHttpSession& aHttpSession,
+        MNcdOperationRemoveHandler& aRemoveHandler,
+        MCatalogsSession& aSession );
+
+    /**
+     * Destructor
+     */
+    ~CNcdSubscriptionOperation();
+
+public: // From CNcdBaseOperation
+
+    TInt RunOperation();
+
+    /**
+     * @see CNcdBaseOperation::Cancel
+     */
+    void Cancel();
+    
+    
+    /**
+     * @see CNcdBaseOperation::QueryCompletedL
+     */
+    TBool QueryCompletedL( CNcdQuery* aQuery );
+
+public: // From MCatalogsHttpObserver
+
+    /**     
+     * @see MCatalogsHttpObserver::HandleHttpEventL
+     */
+    void HandleHttpEventL( 
+        MCatalogsHttpOperation& aOperation, 
+        TCatalogsHttpEvent aEvent );
+        
+    /**
+     * @see MCatalogsHttpObserver::HandleHttpError()
+     */
+    TBool HandleHttpError(
+        MCatalogsHttpOperation& aOperation,
+        TCatalogsHttpError aError );
+        
+public: // From MNcdParserObserver
+
+    /**
+     * @see MNcdParserObserver::ParseError
+     */
+    void ParseError( TInt aErrorCode );
+
+    /**
+     * @see MNcdParserObserver::ParseCompleteL
+     */
+    void ParseCompleteL( TInt aError );
+
+public: // From MNcdParserSubscriptionObserver
+
+    /**
+     * see MNcdParserSubscriptionObserver::ValidSubscriptionL
+     */
+    void ValidSubscriptionL( MNcdPreminetProtocolSubscription* aData );
+
+    /**
+     * see MNcdParserSubscriptionObserver::OldSubscriptionL
+     */
+    void OldSubscriptionL( MNcdPreminetProtocolSubscription* aData );
+    
+public: // From MNcdOperationObserver
+    
+    /**
+     * @see MNcdOperationObserver::Progress
+     */
+    void Progress( CNcdBaseOperation& aOperation );
+    
+    /**
+     * @see MNcdOperationObserver::QueryReceived
+     */
+    void QueryReceived( CNcdBaseOperation& aOperation,
+                                CNcdQuery* aQuery );
+
+    /**
+     * @see MNcdOperationObserver::OperationComplete
+     */
+    void OperationComplete( CNcdBaseOperation* aOperation,
+                                    TInt aError );
+
+public: // From MNcdParserErrorObserver
+
+    /**
+     * @see MNcdParserErrorObserver::ErrorL
+     */
+    void ErrorL( MNcdPreminetProtocolError* aData );
+
+public: // From MNcdSubscriptionManagerObserver
+
+    /**
+     * @see MNcdSubscriptionManagerObserver::
+     *          SubscriptionsInternalizeComplete
+     */
+    void SubscriptionsInternalizeComplete( TInt aError );
+
+private:
+
+    /**
+     * Creates operation for getting all subscriptions from one server.
+     *
+     * @since S60 v3.2
+     * @param aSubscriptionOperationType Type of the subscription.
+     * @param aAccessPointManager Access point manager.
+     * @param aSubscriptionManager Subscription manager.
+     * @param aNodeManager Node manager.
+     * @param aConfigurationManager Configuration manager.
+     * @param aHttpSession HTTP session used for creating subscription
+     * operations.
+     * @param aProtocol Protocol is used to get parser.
+     * @param aRemoveHandler Remove handler.
+     * @param aSession Session.
+     * @return Subscription operation.
+     */
+    static CNcdSubscriptionOperation* CreateSubOperationLC(
+        CNcdSubscriptionsSourceIdentifier* aSource,
+        CNcdGeneralManager& aGeneralManager,
+        CNcdSubscriptionManager& aSubscriptionManager,
+        MCatalogsHttpSession& aHttpSession,
+        MNcdOperationRemoveHandler& aRemoveHandler,
+        MCatalogsSession& aSession );
+
+    /**
+     * Start refresh operation.
+     *
+     * @since S60 v3.2
+     */
+    void RunRefreshOperationL();
+    
+
+    /**
+     * Start unsubscribe operation.
+     *
+     * @since S60 v3.2
+     */
+    void RunUnsubscribeOperationL();
+
+    /**
+     * This must be called, when completing the operation.
+     *
+     * @since S60 v3.2
+     * @param aError Error information.
+     * @return Error code.
+     */
+    TInt SubscriptionOperationComplete( TInt aError );
+
+    /**
+     * Completes current iPendingMessage with error value from
+     * iCompletionErrorCode. Sets EStateComplete into
+     * iOperationState. 
+     *
+     * @since S60 v3.2
+     * @return Error code.
+     */    
+    TInt CompletePendingMessage();    
+    
+    /**
+     * Removes the given subscription from phone cache and database.
+     *
+     * @param aSubscripion The subscription.
+     */
+    void RemoveSubscriptionL(const CNcdSubscription& aSubscription );
+    
+    
+    /**
+     * @see CNcdBaseOperation::ChangeToPreviousStateL();
+     */
+    void CNcdSubscriptionOperation::ChangeToPreviousStateL();
+    
+    /**
+     * Cancels the suboperations.
+     */
+    void CancelSuboperations();
+
+protected:
+
+    /**
+     * Contsructor.
+     *
+     * @since S60 v3.2
+     * @param aSubscriptionOperationType Type of the subscription.
+     * @param aAccessPointManager Access point manager.
+     * @param aSubscriptionManager Subscription manager.
+     * @param aNodeManager Node manager.
+     * @param aConfigurationManager Configuration manager.
+     * @param aHttpSession HTTP session used for creating subscription
+     * operations.
+     * @param aProtocol Protocol is used to get parser.
+     * @param aRemoveHandler Remove handler.
+     * @param aSession Session.
+     */
+    CNcdSubscriptionOperation(
+        MNcdSubscriptionOperation::TType aSubscriptionOperationType,
+        CNcdGeneralManager& aGeneralManager,
+        CNcdSubscriptionManager& aSubscriptionManager,
+        MCatalogsHttpSession& aHttpSession,
+        MNcdOperationRemoveHandler& aRemoveHandler,
+        MCatalogsSession& aSession );
+
+    /**
+     * Contsructor.
+     *
+     * @param aSource Subscription source information.
+     */
+    void ConstructL(
+        CNcdSubscriptionsSourceIdentifier* aSource,
+        const TDesC& aPurchaseOptionId,
+        const TDesC& aEntityId,
+        const TDesC& aNamespace,
+        const TDesC& aServerUri );
+    
+
+private:
+
+    /**
+     * A sub-state of this operation's execution.
+     */
+    TSubscriptionOperationState iSubscriptionOperationState;
+
+    MNcdSubscriptionOperation::TType iSubscriptionOperationType;
+    MCatalogsAccessPointManager& iAccessPointManager;
+    CNcdSubscriptionManager& iSubscriptionManager;
+    CNcdNodeManager& iNodeManager;
+    MNcdConfigurationManager& iConfigurationManager;
+    MCatalogsHttpSession& iHttpSession;
+    MNcdProtocol& iProtocol;
+
+    // Not own.
+    const CNcdSubscription* iSubscription;
+
+    MCatalogsHttpOperation* iTransaction;
+    
+    CNcdSubscriptionsSourceIdentifier* iSource;
+    HBufC* iPurchaseOptionId;
+    HBufC* iEntityId;
+    HBufC* iNamespace;
+    HBufC* iServerUri;
+
+    RPointerArray<MNcdPreminetProtocolSubscription> iServersSubscriptions;
+
+    RPointerArray<CNcdSubscriptionOperation> iSubOps;
+    RPointerArray<CNcdSubscriptionOperation> iFailedSubOps;
+    RPointerArray<CNcdSubscriptionOperation> iCompletedSubOps;
+
+    TUid iClientUid;
+    
+    TInt iCompletionErrorCode;
+
+    };
+
+#endif // C_NCD_SUBSCRIPTION_OPERATION_H