--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/server/inc/ncdnodefactory.h Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,477 @@
+/*
+* 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 CNcdNodeFactory class
+*
+*/
+
+
+#ifndef NCD_NODE_FACTORY_H
+#define NCD_NODE_FACTORY_H
+
+
+// For streams
+#include <s32mem.h>
+
+// For CBase
+#include <e32base.h>
+
+#include "ncdnodeclassids.h"
+
+class CNcdNodeIdentifier;
+class CNcdNodeManager;
+class CNcdNodeDbManager;
+class CNcdNode;
+class CNcdNodeItem;
+class CNcdNodeFolder;
+class CNcdNodeSupplier;
+class CNcdNodeMetaData;
+class CNcdNodeItemMetaData;
+class CNcdNodeFolderMetaData;
+
+/**
+ * This class object should be used to create node and metadata
+ * objects instead of directly creating them in different places
+ * of code.
+ * Also, functions to check the object types are provided here.
+ *
+ * @lib ?library
+ * @since S60 ?S60_version *** for example, S60 v3.0
+ */
+class CNcdNodeFactory : public CBase
+ {
+
+public:
+
+ /**
+ * TNcdNodeType is used to inform the general type of the
+ * node. Folder may contain other folders or items.
+ */
+ enum TNcdNodeType
+ {
+ /**
+ * The node is some kind of item node.
+ */
+ ENcdNodeItem,
+
+ /**
+ * The node is some kind of folder node.
+ */
+ ENcdNodeFolder,
+
+ /**
+ * The node some kind of root
+ */
+ ENcdNodeRoot,
+
+ /**
+ * This node is not really a full node but a wrapper that will
+ * contain an actual node when the type of the actual node is known
+ * and the actual node can be created.
+ */
+ ENcdNodeSupplier,
+
+ /**
+ * The node is a search bundle folder (special type needed because
+ * bundle searching needs special handling).
+ */
+ ENcdNodeSearchBundle
+ };
+
+
+ /**
+ * Defines the purpose of the node. This enumeration can be used
+ * to inform if node should be normal node or if it should have
+ * some special meaning or functionality.
+ */
+ enum TNcdNodePurpose
+ {
+ /**
+ * This means that normal nodes should be created.
+ */
+ ENcdNormalNode,
+
+ /**
+ * This means that the ref data is gotten as a result of the search.
+ */
+ ENcdSearchNode,
+
+ /**
+ * This means that the ref data was gotten from the configuration server
+ * for the bundle node.
+ */
+ ENcdBundleNode,
+
+ /**
+ * This means that the configuration server has given data for the
+ * transparent node.
+ */
+ ENcdTransparentNode,
+
+ /**
+ * This means that the given data is for the child of the transparent parent
+ * folder. This type should be used only for the nodes that are directly children
+ * of the transparent folder. The grand children of the transparent folder should
+ * use ENormalNode type.
+ *
+ * @note Because the parser gives the child data before the parent data, this type
+ * can be used to check if the parent that will be created should be transparent folder
+ * instead of for example normal
+ */
+ ENcdChildOfTransparentNode
+
+ };
+
+
+ /**
+ * NewL
+ *
+ * @param aNodeManager
+ * @return CNcdNodeFactory* Pointer to the created object
+ * of this class.
+ */
+ static CNcdNodeFactory* NewL( CNcdNodeManager& aNodeManager );
+
+ /**
+ * NewLC
+ *
+ * @param aNodeManager
+ * @return CNcdNodeFactory* Pointer to the created object
+ * of this class.
+ */
+ static CNcdNodeFactory* NewLC( CNcdNodeManager& aNodeManager );
+
+
+ /**
+ * Destructor
+ *
+ */
+ virtual ~CNcdNodeFactory();
+
+
+public: // Functions to check the node types and node purposes
+
+ /**
+ *
+ */
+ static TNcdNodeType NodeTypeL( const TDesC8& aNodeData );
+
+ /**
+ *
+ */
+ static TNcdNodeType NodeTypeL( const CNcdNode& aNode );
+
+ /**
+ *
+ */
+ static TNcdNodeType NodeTypeL( NcdNodeClassIds::TNcdNodeClassId aClassId );
+
+
+ /**
+ * @note Warning! Does not identify ENcdChildOfTransparentNode but returns
+ * ENcdNormalNode instead.
+ */
+ static TNcdNodePurpose NodePurposeL( const CNcdNode& aNode );
+
+ /**
+ * @see CNcdNodeFactory::NodePurposeL
+ */
+ static TNcdNodePurpose NodePurposeL( NcdNodeClassIds::TNcdNodeClassId aClassId );
+
+
+public: // Functions to find out the node class id
+
+ /**
+ * This function gives the class id of a node that has given properties.
+ * The class id can be used to create the node of the right type by
+ * using the creation function of this class.
+ *
+ * @param aNodeType
+ * @param aNodePurpose
+ * @return NcdNodeClassIds::TNcdNodeClassId Class of the node that has
+ * the given properties.
+ */
+ static NcdNodeClassIds::TNcdNodeClassId NodeClassIdL( CNcdNodeFactory::TNcdNodeType aNodeType,
+ CNcdNodeFactory::TNcdNodePurpose aNodePurpose );
+
+
+public: // Functions to create node objects
+
+ /**
+ *
+ */
+ CNcdNodeItem* CreateNodeItemL( const CNcdNodeIdentifier& aParentIdentifier,
+ const CNcdNodeIdentifier& aMetaDataIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeItemL
+ */
+ CNcdNodeItem* CreateNodeItemLC( const CNcdNodeIdentifier& aParentIdentifier,
+ const CNcdNodeIdentifier& aMetaDataIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ *
+ */
+ CNcdNodeItem* CreateNodeItemL( const CNcdNodeIdentifier& aNodeIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeItemL
+ */
+ CNcdNodeItem* CreateNodeItemLC( const CNcdNodeIdentifier& aNodeIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+
+ /**
+ *
+ */
+ CNcdNodeFolder* CreateNodeFolderL( const CNcdNodeIdentifier& aParentIdentifier,
+ const CNcdNodeIdentifier& aMetaDataIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeFolderL
+ */
+ CNcdNodeFolder* CreateNodeFolderLC( const CNcdNodeIdentifier& aParentIdentifier,
+ const CNcdNodeIdentifier& aMetaDataIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ *
+ */
+ CNcdNodeFolder* CreateNodeFolderL( const CNcdNodeIdentifier& aNodeIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeFolderL
+ */
+ CNcdNodeFolder* CreateNodeFolderLC( const CNcdNodeIdentifier& aNodeIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ *
+ */
+ CNcdNodeSupplier* CreateNodeSupplierL( const CNcdNodeIdentifier& aNodeIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeSupplierL
+ */
+ CNcdNodeSupplier* CreateNodeSupplierLC( const CNcdNodeIdentifier& aNodeIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+
+ /**
+ *
+ */
+ CNcdNode* CreateNodeL( const CNcdNodeIdentifier& aParentIdentifier,
+ const CNcdNodeIdentifier& aMetaDataIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeL
+ */
+ CNcdNode* CreateNodeLC( const CNcdNodeIdentifier& aParentIdentifier,
+ const CNcdNodeIdentifier& aMetaDataIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ *
+ */
+ CNcdNode* CreateNodeL( const CNcdNodeIdentifier& aNodeIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeL
+ */
+ CNcdNode* CreateNodeLC( const CNcdNodeIdentifier& aNodeIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+
+ /**
+ *
+ */
+ CNcdNode* CreateNodeL( const CNcdNodeIdentifier& aNodeIdentifier,
+ RReadStream& aStream ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeL
+ */
+ CNcdNode* CreateNodeLC( const CNcdNodeIdentifier& aNodeIdentifier,
+ RReadStream& aStream ) const;
+
+
+ /**
+ *
+ */
+ CNcdNode* CreateNodeL( const CNcdNodeIdentifier& aNodeIdentifier,
+ const TDesC8& aData ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeL
+ */
+ CNcdNode* CreateNodeLC( const CNcdNodeIdentifier& aNodeIdentifier,
+ const TDesC8& aData ) const;
+
+ /**
+ * Internalizes the given node from the given data.
+ *
+ * @param aNode The node.
+ * @param aData The data.
+ */
+ void InternalizeNodeL( CNcdNode& aNode, const TDesC8& aData );
+
+public: // Functions to get metadata type info
+
+ /**
+ *
+ */
+ static TNcdNodeType MetaDataTypeL( const CNcdNodeMetaData& aMetaData );
+
+ /**
+ *
+ */
+ static TNcdNodeType MetaDataTypeL( NcdNodeClassIds::TNcdNodeClassId aClassId );
+
+
+public: // Functions to find out the metadata class id
+
+ /**
+ * This function gives the class id of a metadata that has given properties.
+ * The class id can be used to create the node of the right type by
+ * using the creation function of this class.
+ *
+ * @param aMetaType
+ * @return NcdNodeClassIds::TNcdNodeClassId Class of the node that has
+ * the given properties.
+ */
+ static NcdNodeClassIds::TNcdNodeClassId MetaDataClassId( CNcdNodeFactory::TNcdNodeType aMetaType );
+
+
+public: // Functions to create metadata objects
+
+ /**
+ *
+ */
+ CNcdNodeMetaData* CreateMetaDataL( const CNcdNodeIdentifier& aIdentifier,
+ TNcdNodeType aMetaType ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateMetaDataL
+ */
+ CNcdNodeMetaData* CreateMetaDataLC( const CNcdNodeIdentifier& aIdentifier,
+ TNcdNodeType aMetaType ) const;
+
+
+ /**
+ *
+ */
+ CNcdNodeItemMetaData* CreateItemMetaDataL( const CNcdNodeIdentifier& aIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateItemMetaDataItemL
+ */
+ CNcdNodeItemMetaData* CreateItemMetaDataLC( const CNcdNodeIdentifier& aIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+
+ /**
+ *
+ */
+ CNcdNodeFolderMetaData* CreateFolderMetaDataL( const CNcdNodeIdentifier& aIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateNodeFolderL
+ */
+ CNcdNodeFolderMetaData* CreateFolderMetaDataLC( const CNcdNodeIdentifier& aIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ *
+ */
+ CNcdNodeMetaData* CreateMetaDataL( const CNcdNodeIdentifier& aIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateMetaData
+ */
+ CNcdNodeMetaData* CreateMetaDataLC( const CNcdNodeIdentifier& aIdentifier,
+ NcdNodeClassIds::TNcdNodeClassId aClassId ) const;
+
+
+ /**
+ *
+ */
+ CNcdNodeMetaData* CreateMetaDataL( const CNcdNodeIdentifier& aIdentifier,
+ RReadStream& aStream ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateMetaDataL
+ */
+ CNcdNodeMetaData* CreateMetaDataLC( const CNcdNodeIdentifier& aIdentifier,
+ RReadStream& aStream ) const;
+
+
+ /**
+ *
+ */
+ CNcdNodeMetaData* CreateMetaDataL( const CNcdNodeIdentifier& aIdentifier,
+ const TDesC8& aData ) const;
+
+ /**
+ * @see CNcdNodeFactory::CreateMetaDataL
+ */
+ CNcdNodeMetaData* CreateMetaDataLC( const CNcdNodeIdentifier& aIdentifier,
+ const TDesC8& aData ) const;
+
+
+protected:
+
+ /**
+ * Constructor
+ *
+ * @param aNodeManager
+ */
+ CNcdNodeFactory( CNcdNodeManager& aNodeManager );
+
+ /**
+ * ConstructL
+ */
+ virtual void ConstructL();
+
+
+ /**
+ * @return CNcdNodeManager& Manager that owns this cleaner
+ */
+ CNcdNodeManager& NodeManager() const;
+
+
+private:
+
+ // Prevent these two if they are not implemented
+ CNcdNodeFactory( const CNcdNodeFactory& aObject );
+ CNcdNodeFactory& operator =( const CNcdNodeFactory& aObject );
+
+
+private: // data
+
+ // NodeManager that owns this factory
+ CNcdNodeManager& iNodeManager;
+
+ };
+
+#endif // NCD_NODE_FACTORY_H