diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdnodeidentifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdnodeidentifier.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,391 @@ +/* +* Copyright (c) 2006-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: Contains CNcdNodeIdentifierIdentifier class +* +*/ + + +#ifndef NCD_NODE_IDENTIFIER_H +#define NCD_NODE_IDENTIFIER_H + + +#include + +class RReadStream; +class RWriteStream; + +class CCatalogsRefString; + +#define DLNODEID( nodeId ) DLTRACE(( _L("id: %S, ns: %S, uid: %x, uri: %S"), &nodeId.NodeId(), &nodeId.NodeNameSpace(), nodeId.ClientUid().iUid, &nodeId.ServerUri() )) + +/** + * ?one_line_short_description + * + * ?more_complete_description + * + * @lib ?library + * @since S60 ?S60_version *** for example, S60 v3.0 + */ +class CNcdNodeIdentifier : public CBase + { + +public: + + /** + * Destructor + */ + virtual ~CNcdNodeIdentifier(); + + /** + * NewL + * Sets the namespace, id and server URI values to KNullDesC and the + * UID value to Null() value. + * + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewL(); + + /** + * NewLC + * Sets the namespace, id and server URI values to KNullDesC and the + * UID value to Null() value. + * + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewLC(); + + + /** + * NewL + * Server URI is set to KNullDesC. + * + * @param aNodeNameSpace + * @param aNodeId This class does not take ownership. + * @param aClientUid + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewL( const TDesC& aNodeNameSpace, + const TDesC& aNodeId, + const TUid& aClientUid ); + + /** + * NewLC + * Server URI is set to KNullDesC. + * + * @param aNodeNameSpace + * @param aNodeId + * @param aClientUid + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewLC( const TDesC& aNodeNameSpace, + const TDesC& aNodeId, + const TUid& aClientUid ); + + + /** + * NewL + * + * @param aNodeNameSpace + * @param aNodeId + * @param aServerUri + * @param aClientUid + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewL( const TDesC& aNodeNameSpace, + const TDesC& aNodeId, + const TDesC& aServerUri, + const TUid& aClientUid ); + + /** + * NewLC + * + * @param aNodeNameSpace + * @param aNodeId + * @param aServerUri + * @param aClientUid + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewLC( const TDesC& aNodeNameSpace, + const TDesC& aNodeId, + const TDesC& aServerUri, + const TUid& aClientUid ); + + + /** + * NewL + * + * @param aNodeIdentifier This class does not take ownership. + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewL( const CNcdNodeIdentifier& aNodeIdentifier ); + + /** + * NewLC + * + * @param aNodeIdentifier This class does not take ownership. + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewLC( const CNcdNodeIdentifier& aNodeIdentifier ); + + + /** + * NewL + * + * @param aNodeIdentifierData + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewL( const TDesC8& aNodeIdentifierData ); + + /** + * NewLC + * + * @param aNodeIdentifierData + * @return CNcdNodeIdentifier* Pointer to the created object + * of this class. + */ + static CNcdNodeIdentifier* NewLC( const TDesC8& aNodeIdentifierData ); + + + static CNcdNodeIdentifier* NewL( RReadStream& aReadStream ); + static CNcdNodeIdentifier* NewLC( RReadStream& aReadStream ); + + virtual void InternalizeL( RReadStream& aReadStream ); + virtual void ExternalizeL( RWriteStream& aWriteStream ) const; + + + + /** + * @return TDesc& Namespace of the node + */ + const TDesC& NodeNameSpace() const; + + /** + * @return TDesc& Id of the node which is unique in a namespace + */ + const TDesC& NodeId() const; + + /** + * @return TDesc& Server URI of the node + */ + const TDesC& ServerUri() const; + + /** + * @return Client UID. + */ + const TUid& ClientUid() const; + + + /** + * This function recreates the data everytime this function is asked. + * The data will contain: + * @return HBufC8* Identifying data that contains all the nodeidentifier data. + * in one. Ownership is transferred. + */ + HBufC8* NodeIdentifierDataL() const; + + + /** + * @note As a default the uri is not included for the checking. + * + * @param aCheckNameSpace Informs if the identifier namespace should be included + * to the checking. + * @param aCheckId Informs if the identifier id should be included + * to the checking. + * @param aCheckUri Informs if the identifier server uri should be included + * to the checking. + * @param aCheckUid Informs if the identifier Uid should be included + * to the checking. + * @return ETrue if at least one of the identifier fields + * is empty. EFalse, if all of the fields contain some data. + */ + TBool ContainsEmptyFields( TBool aCheckNameSpace = ETrue, + TBool aCheckId = ETrue, + TBool aCheckUri = EFalse, + TBool aCheckUid = ETrue ) const; + + + /** + * Can be used to compare this node identifier to another. + * If all the identifier values are same then ETrue is returned. + * + * @note This compares also UID values. Different applications may have + * same ids, namespaces and URIs for the nodes, but the UID can be used to + * make corresponding nodes unique. + * + * @note As a default Uri is left out of the comparison. + * + * @param aObject1 Identifier object whose data is compared + * @param aCompareNameSpace Informs if the identifier namespace should be + * included to the comparison. + * @param aCompareId Informs if the identifier id should be + * included to the comparison. + * @param aCompareUri Informs if the identifier server uri should be + * included to the comparison. + * @param aCompareUid Informs if the identifier Uid should be + * included to the comparison. + * @return TBool ETrue if identifiers contains same info. Else EFalse. + */ + TBool Equals( const CNcdNodeIdentifier& aObject, + TBool aCompareNameSpace = ETrue, + TBool aCompareId = ETrue, + TBool aCompareUri = EFalse, + TBool aCompareUid = ETrue ) const; + + /** + * Static function that can be used to compare two node identifiers. + * If all the identifier values are same then ETrue is returned. + * + * @note This compares also UID values. Different applications may have + * same ids, namespaces and URIs for the nodes, but the UID can be used to + * make corresponding nodes unique. + * + * @note As a default Uri is left out of the comparison. + * + * @param aObject1 Identifier object whose data is compared + * @param aObject2 Identifier object whose data is compared + * @param aCompareNameSpace Informs if the identifier namespace should be + * included to the comparison. + * @param aCompareId Informs if the identifier id should be + * included to the comparison. + * @param aCompareUri Informs if the identifier server uri should be + * included to the comparison. + * @param aCompareUid Informs if the identifier Uid should be + * included to the comparison. + * @return TBool ETrue if identifiers contains same info. Else EFalse. + */ + static TBool Equals( const CNcdNodeIdentifier& aObject1, + const CNcdNodeIdentifier& aObject2, + TBool aCompareNameSpace = ETrue, + TBool aCompareId = ETrue, + TBool aCompareUri = EFalse, + TBool aCompareUid = ETrue ); + + + /** + * Node id comparison + * + * @param aObject1 First id + * @param aObject2 Second id + * @return a negative value if aObject1 < aObject2, + * 0 if aObject1 == aObject2 and a positive value if + * aObject1 > aObject2 + * @note Only node id, namespace and client UID are used for comparison + */ + static TInt Compare( const CNcdNodeIdentifier& aObject1, + const CNcdNodeIdentifier& aObject2 ); + + + /** + * Node id comparison + * + * Orders first by client UID then by namespace and finally node id + * + * @param aObject1 First id + * @param aObject2 Second id + * @return a negative value if aObject1 < aObject2, + * 0 if aObject1 == aObject2 and a positive value if + * aObject1 > aObject2 + * @note Only node id, namespace and client UID are used for comparison + */ + static TInt CNcdNodeIdentifier::CompareOrderByUid( + const CNcdNodeIdentifier& aObject1, + const CNcdNodeIdentifier& aObject2 ); + + #if defined (COMPONENT_CATALOGSSERVEREXE) && defined (LOG_MEMORY_USAGE) + + static TInt64 iCurrentMemory; + static TInt64 iMaxMemory; + static TInt iIdCount; + static TInt iMaxCount; + + static void AddId( const CNcdNodeIdentifier& aId, TInt64& aMemory ); + static void RemoveId( const CNcdNodeIdentifier& aId, const TInt64& aMemory ); + + TInt64 iMyMemory; + #endif + + #ifdef COMPONENT_CATALOGSSERVEREXE + /** + * Sets node id + */ + void SetNodeIdL( const TDesC& aNodeId ); + #endif + +protected: + + /** + * Constructor + * + */ + CNcdNodeIdentifier(); + + /** + * ConstructL + */ + void ConstructL( + const TDesC& aNodeNameSpace, + const TDesC& aNodeId, + const TDesC& aServerUri, + const TUid& aClientUid ); + + /** + * ConstructL + */ + void ConstructL( const TDesC8& aNodeIdentifierData ); + + +private: + + // Prevent if not implemented + //CNcdNodeIdentifier( const CNcdNodeIdentifier& aObject ); + CNcdNodeIdentifier& operator =( const CNcdNodeIdentifier& aObject ); + + +protected: // data + +#ifdef COMPONENT_CATALOGSSERVEREXE + + CNcdNodeIdentifier( const CNcdNodeIdentifier& aId ); + void ReleaseStrings(); + + const CCatalogsRefString* iNodeNameSpace; + const CCatalogsRefString* iNodeId; + const CCatalogsRefString* iServerUri; + +#else + // This is the name space of the node. Owns. + HBufC* iNodeNameSpace; + + // This is the id of the node. Owns. + HBufC* iNodeId; + + // This is the id of the node. Owns. + HBufC* iServerUri; + +#endif + // This is the UID of the client. + TUid iClientUid; + + }; + +#endif // NCD_NODE_IDENTIFIER_H