diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdnodelink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdnodelink.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,402 @@ +/* +* 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: Contains CNcdNodeLink class +* +*/ + + +#ifndef NCD_NODE_LINK_H +#define NCD_NODE_LINK_H + + +#include +#include +#include + +#include "catalogscommunicable.h" +#include "ncdnodemanager.h" +#include "ncdstorable.h" +#include "ncdnodeclassids.h" +#include "ncd_pp_entityref.h" + +class CNcdNodeIdentifier; +class CNcdNode; + + +/** + * CNcdNodeLink ... + * @lib ?library + * @since S60 ?S60_version *** for example, S60 v3.0 + */ +class CNcdNodeLink : public CCatalogsCommunicable, + public MNcdStorable + { + +public: + + /** + * Destructor + */ + virtual ~CNcdNodeLink(); + + + /** + * Retrieves the data type that informs what class the data is for. + * By checking the data type information, an InternalizeL function + * of a right class can be called when the object data is set + * from the storage. + * The data type may be decided and set in a factory that creates object. + * The factory should know which integer is reserved for which class. + * + * @return NcdNodeClassIds::TNcdNodeClassId Describes the data type. + */ + NcdNodeClassIds::TNcdNodeClassId ClassId() const; + + + /** + * @see MNcdPreminetProtocolEntityRef::Timestamp + */ + const TDesC& Timestamp() const; + + /** + * @see MNcdPreminetProtocolEntityRef::ServerUri + */ + const TDesC& ServerUri() const; + + /** + * Setter for server uri. + * + * @param aServerUri Uri to set. + */ + void SetServerUriL( const TDesC& aServerUri ); + + /** + * @see MNcdPreminetProtocolEntityRef::RemoteUri + */ + const TDesC& RemoteUri() const; + + /** + * @see MNcdPreminetProtocolEntityRef::Description + */ + MNcdPreminetProtocolEntityRef::TDescription Description() const; + + /** + * @see MNcdPreminetProtocolEntityRef::ValidUntilDelta + */ + TInt ValidUntilDelta() const; + + /** + * Setter for validity time, needed for setting root nodes + * validity time. Also sets iLinkDownloadTime to current time. + * + * @param aValidUntilDelta Validity time. + */ + void SetValidUntilDelta( TInt aValidUntilDelta ); + + /** + * @see MNcdPreminetProtocolEntityRef::ValidUntilAutoUpdate + */ + TBool ValidUntilAutoUpdate() const; + + /** + * @return CNcdNodeIdentifier contains parent identifier infromation. + */ + const CNcdNodeIdentifier& ParentIdentifier() const; + + /** + * Set the parent identifier. + * + * @note This setter function also sets the given identifier to the + * request parent identifier variable. So, if the request parent identifier + * should differ from the actual parent identifier, + * then the SetRequestParentIdentifierL function has to be called after + * this function. + * + * @param aParentIdentifier The new parent identifier. + */ + void SetParentIdentifierL( const CNcdNodeIdentifier& aParentIdentifier ); + + + /** + * @note The parent identifier differs from the request parent identifier + * if the parent is transparent. Then the proxy side should get the + * grandparent info instead of the actual parent identifier. + * + * @return CNcdNodeIdentifier Parent identifier that is used when the + * parent information is sent to the proxy side. + */ + const CNcdNodeIdentifier& RequestParentIdentifier() const; + + /** + * Set the request parent identifier. + * + * @param aRequestParentIdentifier The new parent identifier. + */ + void SetRequestParentIdentifierL( + const CNcdNodeIdentifier& aRequestParentIdentifier ); + + + /** + * @return TTIme Time when this link was downloaded. + */ + TTime LinkDownloadTime() const; + + /** + * @return TTime Expiration time. Sum of link download time and + * valid until delta. Notice that valid until delta should give + * the time value in minutes. + */ + TTime ExpiredTime() const; + + /** + * Checks whether this link is expired. + * @return ETrue if expired, EFalse if not. + */ + TBool IsExpired() const; + + /** + * Sets the catalogs source name for this nodelink. + * The source name is set only for the root node childs. + * @param aSourceName is the provider name that is gotten from the + * cp response. + */ + void SetCatalogsSourceNameL( const TDesC& aSourceName ); + + /** + * @return const TDesC& provider name that has been gotten from the + * cp response. This is only set for the root node childs. KNullDesC + * if the value has not been set. + */ + const TDesC& CatalogsSourceName() const; + + + /** + * @note The node may be a remote node if the parent gets remote uri information + * for the strcuture data of its child. This child then has to be loaded from + * the given remote uri. An example is a catalog. This function can be used + * to set the flag that tells the original purpose of the node. For example, after + * downloading a catalog it will act as a normal folder but the flag can be used + * to inform its original purpose. + * + * @param aRemote ETrue if the node is originally a remote node. + * If the node is directly part of the structure then EFalse. + */ + void SetRemoteFlag( TBool aRemoteFlag ); + + /** + * @return TBool ETrue if the node is originally a remote node. + * If the node is directly part of the structure then EFalse. + */ + TBool RemoteFlag() const; + + + /** + * Returns the identifier of the metadata that this link points to. + * This should always be used when accessing metadata via a link. + * + * @return const CNcdNodeIdentifier& + */ + const CNcdNodeIdentifier& MetaDataIdentifier() const; + + /** + * Sets the metadata identifier. + * + * @param aIdentifier The identifier of the metadata. Old one will be + * replaced with this one. + */ + void SetMetaDataIdentifierL( const CNcdNodeIdentifier& aIdentifier ); + + + /** + * This function is called when the owner of this object + * wants to internalize the content according to the data + * that has been received from the parser. + * + * @param aData The data is set in the protocol parser and can + * be used to initialize this class object. + * @param aParentIdentifier contains the parent information. + * @param aRequestParentIdentifier Parent identifier that is used + * when the parent information is sent to the proxy side. Usually this + * is most likely same as aParentIdentifier. But in case of transparent + * nodes, aRequestParentIdentifier value should be the grandparent identifier + * instead of the actual parent. + */ + virtual void InternalizeL( const MNcdPreminetProtocolEntityRef& aData, + const CNcdNodeIdentifier& aParentIdentifier, + const CNcdNodeIdentifier& aRequestParentIdentifier, + const TUid& aClientUid ); + + + /** + * Sets metadata's timestamp to link + */ + void SetMetadataTimeStampL( const TDesC& aTimeStamp ); + +public: // MNcdStorable + + /** + * @see MNcdStorageDataItem::ExternalizeL + */ + virtual void ExternalizeL( RWriteStream& aStream ); + + + /** + * @see MNcdStorageDataItem::InternalizeL + */ + virtual void InternalizeL( RReadStream& aStream ); + + +public: // CCatalogsCommunicable + + /** + * @see CCatalogsCommunicable::ReceiveMessage + */ + virtual void ReceiveMessage( MCatalogsBaseMessage* aMessage, + TInt aFunctionNumber ); + + /** + * @see CCatalogsCommunicable::CounterPartLost + */ + virtual void CounterPartLost( const MCatalogsSession& aSession ); + + +protected: + + /** + * Constructor + * + * @param aNode The node that owns this link. + * @param aClassId This identifier can be asked to identify + * the class for example when it is read from db. + */ + CNcdNodeLink( CNcdNode& aNode, + NcdNodeClassIds::TNcdNodeClassId aClassId ); + + /** + * ConstructL + */ + virtual void ConstructL(); + + + // These functions are called from the ReceiveMessage when + // the given function id has matched to the function. + + /** + * This function is called when the proxy wants to get the + * data from the serverside. This function calls the + * InternalizeDataForRequestL which may be overloaded in the + * child classes + * @param aMessage Contains data from the proxy and can be used + * to send data back to proxy + */ + void InternalizeRequestL( MCatalogsBaseMessage& aMessage ) const; + + /** + * This function writes the object data to the stream. + * The stream content will be sent to the proxy that requested the data. + * Child classes should add their own data after this parent data. + * + * @param aStream The data content of this class object will be written + * into this stream. + */ + virtual void ExternalizeDataForRequestL( RWriteStream& aStream ) const; + + + /** + * This function is called from the proxy side. When the proxy + * is deleted. + * @param aMessage Contains data from the proxy and can be used + * to send data back to proxy + */ + void ReleaseRequest( MCatalogsBaseMessage& aMessage ) const; + + + /** + * @param CNcdNode& Node that owns this link. + */ + CNcdNode& Node() const; + + +private: + + // Prevent these two if they are not implemented + CNcdNodeLink( const CNcdNodeLink& aObject ); + CNcdNodeLink& operator =( const CNcdNodeLink& aObject ); + + + /** + * This function is used to insert the right parent identifier + * into the stream for the proxy. + * In the case of the transparent parent, the proxy + * gets the grandparent as a parent instead of the real parent. + * + * @param aStream The data content of this class object will be written + * into this stream. + */ + void ParentIdentifierForRequestL( RWriteStream& aStream ) const; + + +private: // data + + // The class id is the id for this class that a factory uses + // when it creates an object of this class. + NcdNodeClassIds::TNcdNodeClassId iClassId; + + // Node that owns this link + CNcdNode& iNode; + + HBufC* iTimeStamp; + HBufC* iCatalogsSourceName; + HBufC* iRemoteUri; + HBufC* iServerUri; + + MNcdPreminetProtocolEntityRef::TDescription iDescription; + TInt iValidUntilDelta; + TBool iValidUntilAutoUpdate; + + // The actual parent of the node + CNcdNodeIdentifier* iParentIdentifier; + + // The parent identifier that is given to the proxy side + // when the parent is asked. This may differ from the actual parent + // identifier for example if parent is transparent. Then the grandparent + // should be returned to the proxy side instead the actual parent. + CNcdNodeIdentifier* iRequestParentIdentifier; + + RArray iQueries; + + TTime iLinkDownloadTime; + + // The message is set when ReceiveMessage is called. The message + // is used in the CounterPartLost-function that informs the message + // if the session has been lost. + MCatalogsBaseMessage* iMessage; + + // This identifies the metadata that this link points to + CNcdNodeIdentifier* iMetaDataIdentifier; + + // The node may be a remote node if the parent gets remote uri information + // for the strcuture data of its child. This child then has to be loaded from + // the given remote uri. An example is a catalog. For example, after + // downloading a catalog it will act as a normal folder but the flag can be used + // to inform its original purpose. EFalse means that the node was normal node, + // ETrue means that the remote uri was originally given. + TBool iRemoteFlag; + + // Metadata's timestamp is used for expiration checking + HBufC* iMetadataTimeStamp; + }; + + +#endif // NCD_NODE_LINK_H