--- /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