--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/server/inc/ncdnodeimpl.h Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,300 @@
+/*
+* 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 CNcdNode class
+*
+*/
+
+
+#ifndef NCD_NODE_H
+#define NCD_NODE_H
+
+
+#include <e32cmn.h>
+#include <s32mem.h>
+
+#include "catalogscommunicable.h"
+#include "ncdstoragedataitem.h"
+#include "ncdnodemanager.h"
+#include "ncdnodeclassids.h"
+#include "ncdnodeidentifier.h"
+// This is included for the state enum value
+#include "ncdnode.h"
+
+class CNcdNodeLink;
+class CNcdNodeMetaData;
+class CNcdNodeIdentifier;
+class CNcdNodeUserData;
+class CNcdNodeSeen;
+
+
+/**
+ * This class object provides node specific functions.
+ * Node contains additional classes that will contain more node
+ * or metadata specific information.
+ *
+ * @lib ?library
+ * @since S60 ?S60_version *** for example, S60 v3.0
+ */
+class CNcdNode : public CCatalogsCommunicable,
+ public MNcdStorageDataItem
+ {
+public:
+
+ static TInt Compare( const CNcdNode& aFirst, const CNcdNode& aSecond )
+ {
+ return CNcdNodeIdentifier::Compare(
+ aFirst.Identifier(),
+ aSecond.Identifier() );
+ }
+
+public:
+
+ /**
+ * Destructor
+ */
+ virtual ~CNcdNode();
+
+
+ /**
+ * @return CNcdNodeIdentifier& Unique identifier of this node.
+ */
+ virtual const CNcdNodeIdentifier& Identifier() const;
+
+ /**
+ * 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 TInt The integer that describes the data type.
+ */
+ NcdNodeClassIds::TNcdNodeClassId ClassId() const;
+
+
+ /**
+ * @return The nodemanager that has created this node.
+ */
+ CNcdNodeManager& NodeManager() const;
+
+
+ /**
+ * Uses CreateLinkL to create the link if the link does not already
+ * exist. If a new link is created it is set as a link for the node.
+ *
+ * @return CNcdNodeLink& The link that has been set for this node.
+ */
+ CNcdNodeLink& CreateAndSetLinkL();
+
+ /**
+ * @return CNcdNodeLink& Reference to the node link.
+ * @exception KErrNotFound if node link has not been set.
+ */
+ CNcdNodeLink& NodeLinkL() const;
+
+ /**
+ * @return CNcdNodeLink Pointer to the node link. NULL if no link
+ * is set. Ownership is NOT transferred.
+ */
+ CNcdNodeLink* NodeLink() const;
+
+ /**
+ * @return The node seen object of the node.
+ */
+ CNcdNodeSeen& NodeSeen() const;
+
+
+ /**
+ * Internalizes data to the node link. If the node link does
+ * not exists it is created by callin CreateLinkL which should be
+ * overloaded in child classes to give the right kind of link.
+ *
+ * @param
+ * @param
+ */
+ virtual void InternalizeLinkL( const MNcdPreminetProtocolEntityRef& aData,
+ const CNcdNodeIdentifier& aParentIdentifier,
+ const CNcdNodeIdentifier& aRequestParentIdentifier,
+ const TUid& aClientUid );
+
+
+ /**
+ * @note Node manager is used to set the metadata
+ * that corresponds to the node link.
+ *
+ * @return CNcdNodeMetaData& Reference to the metadata.
+ * @exception KErrNotFound if meta data or node link has not been set.
+ */
+ CNcdNodeMetaData& NodeMetaDataL() const;
+
+ /**
+ * @return CNcdNodeMetaData* Pointer to the metadata, NULL if no metadata
+ * is set. Ownership is NOT transferred.
+ */
+ CNcdNodeMetaData* NodeMetaData() const;
+
+ /**
+ * Sets the metadata. Does not delete old one because metadata is owned
+ * byt the nodemanager.
+ *
+ * @param aMetaData is the new meta data that this node will contain.
+ * @exception KErrBadName if the metadata is not of the accepted type.
+ */
+ void SetNodeMetaDataL( CNcdNodeMetaData& aMetaData );
+
+ /**
+ * Gives information about the state of the node. This information can be used to
+ * check whether the item data has been loaded or if the data is expired.
+ *
+ * @return The state of the node.
+ */
+ MNcdNode::TState State() const;
+
+
+public: // CCatalogsCommunicable
+
+ /**
+ * @see CCatalogsCommunicable::ReceiveMessage
+ */
+ virtual void ReceiveMessage( MCatalogsBaseMessage* aMessage,
+ TInt aFunctionNumber );
+
+ /**
+ * @see CCatalogsCommunicable::CounterPartLost
+ */
+ virtual void CounterPartLost( const MCatalogsSession& aSession );
+
+
+public: // MNcdStorageDataItem
+
+ /**
+ * @see MNcdStorageDataItem::ExternalizeL
+ */
+ virtual void ExternalizeL( RWriteStream& aStream );
+
+
+ /**
+ * @see MNcdStorageDataItem::InternalizeL
+ */
+ virtual void InternalizeL( RReadStream& aStream );
+
+
+protected:
+
+ /**
+ * Constructor
+ */
+ CNcdNode( CNcdNodeManager& aNodeManager,
+ NcdNodeClassIds::TNcdNodeClassId aNodeClassId,
+ NcdNodeClassIds::TNcdNodeClassId aAcceptedLinkClassId,
+ NcdNodeClassIds::TNcdNodeClassId aAcceptedMetaDataClassId );
+
+ /**
+ * @param atIdentifier Identifier of this node. The identifier is unique
+ * to all the nodes.
+ */
+ virtual void ConstructL( const CNcdNodeIdentifier& aIdentifier );
+
+
+ /**
+ * Child classes should implement this function.
+ * So, the right type of link will be created when this creator is called.
+ * This function will create the link only once. If the link has already
+ * been created then the old link will be returned.
+ *
+ * @param CNcdNodeLink* The created link or the old link if it already existed.
+ */
+ virtual CNcdNodeLink* CreateLinkL() = 0;
+
+
+ // Here are all the functions that are used when ReceiveMessageL is called and
+ // the functionality is delegated according to the given function number.
+
+ /**
+ *
+ */
+ void InternalizeRequestL( MCatalogsBaseMessage& aMessage ) const;
+
+ /**
+ * Child classes should overload this or add their own data after
+ * the parent class data.
+ */
+ virtual void ExternalizeDataForRequestL( RWriteStream& aStream ) const;
+
+
+ void LinkHandleRequestL( MCatalogsBaseMessage& aMessage ) const;
+ void MetadataHandleRequestL( MCatalogsBaseMessage& aMessage ) const;
+ void NodeSeenHandleRequestL( MCatalogsBaseMessage& aMessage ) const;
+ void ClassIdRequestL( MCatalogsBaseMessage& aMessage ) const;
+ void ReleaseRequest( MCatalogsBaseMessage& aMessage ) const;
+
+
+private:
+
+ // Prevent if not implemented
+ CNcdNode( const CNcdNode& aObject );
+ CNcdNode& operator =( const CNcdNode& aObject );
+
+
+ // This is used to forward the internalization/externalization
+ // to the link
+ void ExternalizeLinkL( RWriteStream& aStream );
+ void InternalizeLinkL( RReadStream& aStream );
+
+ void DoReceiveMessageL(
+ MCatalogsBaseMessage& aMessage,
+ TInt aFunctionNumber );
+
+
+private: // data
+
+ // Manager manages and owns nodes.
+ // This class does not own the manager.
+ CNcdNodeManager& iNodeManager;
+
+ NcdNodeClassIds::TNcdNodeClassId iNodeClassId;
+
+ // The link type is used to check if the given link is of
+ // the right type.
+ NcdNodeClassIds::TNcdNodeClassId iAcceptedLinkClassId;
+
+ // The metadata type is used to check if the given metadata is of
+ // the right type.
+ NcdNodeClassIds::TNcdNodeClassId iAcceptedMetaDataClassId;
+
+ // This is the identifier of the node. Owns.
+ CNcdNodeIdentifier* iNodeIdentifier;
+
+protected:
+ // 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;
+
+private:
+ // These objects provide additional functionality for the node.
+
+ // This class owns node link if it has been set.
+ CNcdNodeLink* iNodeLink;
+
+ // This class does not own meta data.
+ CNcdNodeMetaData* iNodeMetaData;
+
+ // This class owns the seen information.
+ CNcdNodeSeen* iNodeSeen;
+ };
+
+
+#endif // NCD_NODE_H