--- /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 <e32base.h>
+
+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