diff -r 000000000000 -r ba25891c3a9e ncdengine/inc/ncdnode.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/inc/ncdnode.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,218 @@ +/* +* 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 MNcdNode interface +* +*/ + + +#ifndef M_NCD_NODE_H +#define M_NCD_NODE_H + + +#include +#include + +#include "catalogsbase.h" +#include "catalogsarray.h" +#include "ncdinterfaceids.h" + + +class MNcdNodeContainer; +class MNcdLoadNodeOperation; +class MNcdLoadNodeOperationObserver; +class MNcdOperation; + + +/** + * Node contains the basic information about the content. + * The interface also provides a load function that must be used to + * initialize the node, before accessing other information. + * + * When the UI gets the node, the node may not contain any information + * except from the node state. The state may be checked by calling + * MNcdNode::State(). MNcdNode::LoadL() can then be called to load + * the content for the node, if the state is uninitialized or expired. + * + * @note The actual content information, such as name, description etc. are + * available through the MNcdNodeMetadata interface that can be queried from + * node objects. There are various other additional node interfaces as well + * that all offer different functionality and information about the node. The + * interfaces are not available at all times, they have different criteria for + * becoming available. For example, the MNcdNodeMetadata interface becomes + * available for a node when its metadata is loaded, so if it is not available + * at first, it can be made available by calling the node's MNcdNode::LoadL() + * method. + * + * + * @see MNcdNodeMetadata + * @see MNcdNodeContainer + * @see MNcdNodeContent + * @see MNcdNodeDependency + * @see MNcdNodeDownload + * @see MNcdNodeIcon + * @see MNcdNodeInstall + * @see MNcdNodePreview + * @see MNcdNodePurchase + * @see MNcdNodeScreenshot + * @see MNcdNodeSearch + * @see MNcdNodeSkin + * @see MNcdNodeSubscribe + * @see MNcdNodeUpgrade + * @see MNcdNodeUriContent + * @see MNcdNodeUserData + */ +class MNcdNode : public virtual MCatalogsBase + { + +public: + + /** + * Unique identifier for the interface, required for all MCatalogsBase interfaces. + * + * + */ + enum { KInterfaceUid = ENcdNodeUid }; + + + /** + * TNcdNode::TState gives information in what state the node is at the moment. + * This information can be used to check if the node information should be + * loaded over network or from local cache. + * + * + */ + enum TState + { + /** + * Node is not initialized and the data should + * be loaded from either local cache, or over network. + */ + EStateNotInitialized, + + /** Node data is up to date. */ + EStateInitialized, + + /** Node data is expired and should be reloaded over network. */ + EStateExpired + }; + + + /** + * 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. + */ + virtual TState State() const = 0; + + + /** + * Gets the node id. + * + * + * @return Id of the node. + */ + virtual const TDesC& Id() const = 0; + + + /** + * All nodes and their content are part of a namespace. Within the + * namespace, node identifiers are unique. This function returns the namespace + * of this node and its contents. + * + * + * @return The namespace identifier. If the protocol has not defined + * any value, an empty descriptor is returned. + */ + virtual const TDesC& Namespace() const = 0; + + + /** + * Gets the name of the catalog source for the node. + * + * + * @return Name of the catalog source where the node is loaded from. An + * empty string is returned if the source name is not defined. + */ + virtual const TDesC& CatalogSourceName() const = 0; + + + /** + * Retrieves the reference to the parent of this node. + * + * + * @return The parent of this node. NULL if the node + * has no parent. Counted, Release() must be called + * after use. + * @exception Leave System wide error code, + * KErrNotFound if the parent node is not loaded. + */ + virtual MNcdNodeContainer* ParentL() const = 0; + + + /** + * Loads node information from the content provider. + * + * @note Should be called when a folder node needs to be refreshed, clears all + * child nodes for folders! + * + * + * @param aObserver Observer for the operation. + * @return Pointer to an operation object that can be + * used to check the loading progress. Counted, Release() must be called + * after use. + * @exception Leave System wide error code. + * KNcdErrorParallelOperationNotAllowed if a parallel client is running + * an operation for the same metadata. See MNcdOperation for full explanation. + */ + virtual MNcdLoadNodeOperation* LoadL( MNcdLoadNodeOperationObserver& aObserver ) = 0; + + + /** + * Returns a list of currently active operations of this node for progress + * monitoring and operation management. + * + * @note Operations may also be other than just MNcdLoadNodeOperations. + * + * @return List of currently active operations for the node. Counted, + * each pointer must be released after use e.g. with a call to the array's + * RCatalogsArray::ResetAndDestroy(). + * @exception Leave System wide error code + */ + virtual RCatalogsArray< MNcdOperation > OperationsL() const = 0; + + + /** + * Adds the node to favorite nodes. If the node is already + * a favorite node, does nothing. + * + * @exception Leave System wide error code + */ + virtual void AddToFavoritesL() = 0; + + +protected: + + /** + * Destructor. + * + * @see MCatalogsBase::~MCatalogsBase + */ + virtual ~MNcdNode() {} + + }; + + +#endif // M_NCD_NODE_H