diff -r 3785f754ee62 -r 5360b7ddc251 upnpmediaserver/contentdirectoryservice/inc/upnpcontentdirectorydb.h --- a/upnpmediaserver/contentdirectoryservice/inc/upnpcontentdirectorydb.h Fri Sep 17 08:31:21 2010 +0300 +++ b/upnpmediaserver/contentdirectoryservice/inc/upnpcontentdirectorydb.h Mon Nov 01 12:37:49 2010 +0200 @@ -1,591 +1,591 @@ -/** @file -* Copyright (c) 2005-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: Database for MediaServer -* -*/ - - - -#ifndef C_CUPNPCONTENTDIRECTORYDB_H -#define C_CUPNPCONTENTDIRECTORYDB_H - -// INCLUDES -#include -#include -#include -#include -#include -#include - - -// CLASS DECLARATION -class CUpnpElementBean; -class CUpnpFilterElement; -class CUpnpAttributeBean; -class CUpnpObjectBean; -class CUpnpDlnaProtocolInfo; -class CUpnpShareMapBean; -class CUpnpResourcesBean; -class CUpnpMetadataStorage; - - - -/** -* Database for AVContentDirectory. -* Implements a database which is used to store descriptors of shared content. -* -* @lib ContentDirectoryDb.lib -* @since Series 60 3.0 -*/ -class CUpnpContentDirectoryDb : public CBase -{ - public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CUpnpContentDirectoryDb* NewLC(CUpnpMetadataStorage* aMetadataStorage); - static CUpnpContentDirectoryDb* NewL(CUpnpMetadataStorage* aMetadataStorage); - - /** - * Destructor - */ - ~CUpnpContentDirectoryDb(); - - public: // New functions - - /** - * Checks if object with the given id exists, is a container and its 'restricted' attribute has value of 'false' - * @since Series S60 3.0 - * @param aObjId id of the object to be checked - * @return returns EUpnpOk if object with the given id exists in database and is a "non restricted conainer" - */ - TUpnpErrorCode CheckObjectRestrictionL(TInt aObjId); - - /** - * Inserts object into database - * @since Series S60 3.0 - * @param aFragment RDocuemnt of the document to be added to database - * @param aId id of the object - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode InsertObjectL( RXmlEngDocument& aFragment, TInt aContainer, TInt* aId); - - /** - * Function returns DIDL-Lite XML fragment with metadata for requested object. - * IMPORTANT: 1. Caller takes responsibility for returned document and is - * obliged to close it. - * 2. The root element of the document is element and - * the object's element is its direct, onluy child. - * @param aObjectID id of requested object. - * @param aDoc handler to document containing object's metadata. - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode GetObjectL( TInt aObjectID, RXmlEngDocument& aDoc, - const TDesC8& aFilterString); - - /** - * Gets id of reffered object - * @since Series S60 3.0 - * @param aObjectId object id - * @return reffered object id. - */ - TInt ReferedObjectIdL( TInt aObjectId ); - - /** - * Gets object list - * @since Series S60 3.1 - * @param aParentId - * @parem aList - * @return upnperrorcode descriping situation - */ - TUpnpErrorCode GetObjectListL(TInt aParentId, RArray& aList); - - /** - * Deletes object from database - * @since Series S60 3.0 - * @param aObjId id of the object to be deleted - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode DeleteObjectL(TInt aObjId,RArray& aRefList, TBool aDeleteResource=ETrue); - - /** - * Updates the metadata of the object with specified id - * @since Series S60 3.0 - * @param aObjId id of the object to be updated - * @param aFragment XML DOM tree with the updated object's metadata - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode UpdateObjectL(TInt aObjId, RXmlEngDocument& aFragment); - - - /** - * Deletes the res elements with the specified value. - * @since Series S60 3.0 - * @param aResVal value of the res element which is to be deleted - * @param aTumbailResVal value of the thumbail res element which is to be deleted - */ - void DeleteResourceL(const TDesC8& aResVal, RArray& aContIds); - - /** - * Gets object by its attribute value. - * @since Series S60 3.0 - * @param aDoc on return, it contains the object's data - * @param aObjId on, return it contains the object's id - * @param aAttrName attribute's name - * @param aAttrVal attribute's value - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode GetObjectByAttrL(RXmlEngDocument& aDoc, TInt* aObjId, - const TDesC8& aAttrName, const TDesC8& aAttrVal); - - /** - * Checks the restrictions of the parent object of the given object. - * @since Series S60 3.0 - * @param aObjId object's id - * @return returns EUpnpOk if object with the given id exists in database and is a "non restricted conainer" - */ - TUpnpErrorCode CheckParentRestrictionL(TInt aObjId); - - /** - * Gets the object id by its attribute value. - * @since Series S60 3.0 - * @param aAttrName attribute's name - * @param aAttrVal attribute's value - * @return object's id - */ - TInt GetObjIdByAttrL(const TDesC8& aAttrName, const TDesC8& aAttrVal); - - /** - * Gets the object id by its attribute value. Uses LIKE operator for comparison - * @since Series S60 3.0 - * @param aAttrName attribute's name - * @param aAttrVal attribute's value - * @return object's id - */ - TInt GetObjIdByAttrLikeL(const TDesC8& aAttrName, const TDesC8& aAttrVal); - - - /** - * Prepares a new RXmlEngDocument with DIDL-Lite element - * @since Series S60 3.0 - * @return Returns just created document - */ - RXmlEngDocument PrepareDidlDocumentL(); - - - /** - * Find protocolInfo by contentUri (Not by importUri). - * @param aContentUri uri to be searched in database (Value of resource). - * @param aProtocolInfo ProtocolInfo related to resorce which has been founded. Ownership is transfered to the caller. - * @return KErrNone if successful, otherwise another of the system-wide error codes - */ - TInt GetProtocolInfoL(const TDesC8& aContentUri, CUpnpDlnaProtocolInfo*& aProtocolInfo); // virtual - - - /** - * Gets object list - * @since Series S60 3.1 - * @param aIds - * @param aFilter - * @param aObjs - * @return upnperrorcode descriping situation - */ - void GetObjectListL(const RArray& aIds, const TDesC8& aFilter, RArray& aObjs); - - /** - * - * @since Series S60 3.1 - * @param aObjId - * @return boolean whether can be nested - */ - TBool CanBeNestedL(TInt aObjId); - - /** - * - * @since Series S60 3.1 - * @param aResBean - */ - void AddResourceL(CUpnpResourcesBean* aResBean, TInt aObjId); - - /** - * Deletes resource - * @since Series S60 3.1 - * @param aResId - * @param aDeleteFile - */ - void DeleteResourceByResIdL(TInt64 aResId, TBool aDeleteFile = ETrue); - - /** - * Deletes resource - * @since Series S60 3.1 - * @param aResId - * @param aDeleteFile - */ - void DeleteResourceByObjIdL(TInt aObjId, TBool aDeleteFile = ETrue); - - /** - * - * @since Series S60 3.1 - * @param aOldDir - */ - void NewMediaDirectoryL(const TDesC& aOldDir); - - /** - * Gets resource - * @since Series S60 3.1 - * @param aResId - * @return pointer to CUpnpResourceBean - */ - CUpnpResourcesBean* GetResourceL(TInt64 aResId); - - /** - * Gets attribute - * @since Series S60 3.1 - * @param aElmId - * @param aAttrName - * @param aAttrVal - * @return pointer to CUpnpAttributesBean - */ - CUpnpAttributeBean* GetAttrByNameL(TInt aElmId, const TDesC8& aAttrName, HBufC8*& aAttrVal); - - /** - * Gets attribute - * @since Series S60 3.1 - * @param aAttrName - * @param aAttrVal - * @return pointer to CUpnpAttributeBean - */ - CUpnpAttributeBean* GetAttrByValueL(const TDesC8& aAttrName, const TDesC8& aAttrVal); - - /** - * Gest protocol info - * @since Series S60 3,1 - * @param aImportUri - * @return descriptor pointer - */ - HBufC8* GetProtocolInfoByImportUriL(const TDesC8& aImportUri); - - - /** - * Getter - * @since Series S60 3.1 - * @return TInt - */ - TInt GetKeyForUriL(); - - /** - * Gets first object ID by element value - * @param aElmName - element name - * @param aElmValue - element value - * @return object ID - */ - TInt GetObjectIdByElementValueLikeL(const TDesC8& aElmName, const TDesC8& aElmValue); - - /** - * Gets the parent object's id of the object with given id. - * @since Series S60 3.1 - * @param aObjectId child object id - * @return parentid - */ - TInt GetParentIdL(TInt aObjectId); - /** - * Gets the next object's id . - * @since Series S60 3.1 - * @return id - */ - TInt GetObjectIdL(); - /** - * Gets the next object's id . - * @since Series S60 3.1 - * @return id - */ - HBufC8* GetObjectTitleL(TInt aId); - - /** - * Checks if database have propper columns in each table. - * If not it leaves with KErrCorrupt. - * @since Series S60 3.2 - */ - void CheckDatabaseL(); - - /** - * Handles DB error - * Tries to recover, if fails tries to recreate - * @since Series S60 3.2 - * @return TInt - KErrNone if succed - */ - TInt HandleDbError( TInt aError ); - - /** - * Recreates the database file. - * @since Series S60 3.1 - */ - TInt RecreateDatabaseFile(); - - /** - * Returns DB creation status - * @since Series S60 3.2 - * @return TBool - */ - TBool IsDbCreated(); - - private: - - /** - * Getter - * @since Series S60 3.1 - * @param aObjId - * @return pointer to CUpnpObjectBean - */ - CUpnpObjectBean* GetObjBeanLC(TInt aObjId); - - /** - * Gets object - * @since Series S60 3.1 - * @param aIns - * @param AresVal - */ - void GetObjectsByResourceL(RArray& aIds, const TDesC& aResVal); - - - /** - * Gets element - * @since Series S60 3.1 - * @param aElmName - * @param ElmValue - * @return TInt - */ - TInt GetElmIdByNameAndValL(const TDesC& aElmName, const TDesC& aElmValue); - - /** - * Gets attribute - * @since Series S60 3.1 - * @param aElmId - * @param aAttrName - * @param aAttrValue - */ - void GetAttrValueByNameL(TInt aElmId, const TDesC8& aAttrName, HBufC8*& aAttrVal); - - /** - * Performs resource deletion of the object being destroyed - * @since Series S60 3.0 - * @param aObjId aObjId id of the object being destroyed - * @param aObjId aCd pointer to the ContentDirectory object - it provides a function which deletes - * a file from the private directory - */ - void DeleteResourcesL(TInt aObjId); - - /** - * Performs the DeleteResource operation. - * Deletes each res element with the value of aResVal and corresponding thumnail res elements - * @since Series S60 3.0 - * @param aResVal value of the res whis is to be deleted - * @param aThumbailResVal value of the thumbail res whis is to be deleted - */ - void DoDeleteResourceL(const TDesC8& aResVal, RArray& aContIds); - - - /** - * Sets the childCount attribute in the given object's element. - * @since Series S60 3.0 - * @param aElement object's element - * @param aId object's id - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - void SetChildCountL(TXmlEngElement aElement, TInt aId); - - /** - * Adds all (existing in the database) properties to the object's element. - * @since Series S60 3.0 - * @param aElement object's element - * @param aObjBean object table description object - */ - void AddAllPropertiesL(TXmlEngElement aElement, CUpnpObjectBean* aObjBean); - - /** - * Adds new attribute to the element. - * @since Series S60 3.0 - * @param aElement object's element - * @param aAttrName the name of the attribute which is to be added - * @param aElementId id of the element which the attribute belongs to - * @param aObjectId id of the object which the elements belongs to - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - void AddAttributeL( TXmlEngElement aElement, const TDesC8& aAttrName, TInt aElementId, TInt aObjectId ); - - /** - * Adds a requested properties to the object's element. - * @since Series S60 3.0 - * @param aObjectID object's id - * @param aElement an array containing filter elements of the requested property - * @param aFilterElements ?description - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode AddRequestedPropertiesL(TInt aObjectID,TXmlEngElement aElement, - const RPointerArray& aFilterElements); - - /** - * Adds requested element to the object's element. - * @since Series S60 3.0 - * @param aElement an element wich we want to add a new element to - * @param aObjectID id of the object - * @param aReqElement filter object of the element to be added - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - void AddElementL(TXmlEngElement aElement, TInt aObjectID, const CUpnpFilterElement* aReqElement); - - /** - * Adds required property to the object. - * @since Series S60 3.0 - * @param aElement TXmlEngElement of the object which is to be added the required property - * @param aObjId id of the object being processed - * @param aFilterElement CUpnpFilterElement object of the property to be added - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode AddRequiredPropertyL(TXmlEngElement aElement, TInt aObjId, CUpnpFilterElement* aFilterElement); - - /** - * Parses filter string. - * @since Series S60 3.0 - * @param aFilter filter string to be parsed - * @param aList On return, contains CFilterElements objects of the filter string - */ - void ParseFilterStringL(const TDesC8& aFilter, RPointerArray& aList); - - /** - * Performs get object operation. - * @since Series S60 3.0 - * @param aObjectID id of requested object. - * @param aDoc handler to document containing object's metadata. - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode DoGetObjectL(TInt aObjectID, RXmlEngDocument& aDoc, TBool aAll); - - /** - * Inserts element into database - * @since Series S60 3.0 - * @param aElementel TXmlEngElement of the element to be inserted - * @param aObjId id of the object this element belongs to - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode InsertElementL(const TXmlEngElement& aElementel, TInt aObjId); - - /** - * Performs object update; a transaction should be started before calling this function - * @since Series S60 3.0 - * @param aObjId id of the object to be updated - * @param aFragment XML DOM tree with the updated object's metadata - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode DoUpdateObjectL(TInt aObjId, TXmlEngElement aFragment); - - /** - * Inserts updated object into database - * @since Series S60 3.0 - * @param aObjId id of the object - * @param aFragment XML DOM tree with the updated object's metadata - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode InsertUpdatedL(TInt aObjId, TXmlEngElement& aElement); - - /** - * Sets the id attribute in the given object; adds attribute if does not exist - * @since Series S60 3.0 - * @param aElement TXmlEngElement of the object - * @return value of the id - */ - TInt SetObjectIdL(TXmlEngElement& aElement); - - /** - * Inserts object into database; a transaction should be started before calling this function - * @since Series S60 3.0 - * @param param descr - * @return EUpnpOk, if successful; Leaves if the object could not be inserted into the database - * In case it leaves the transaction must be rolled back - */ - TUpnpErrorCode DoInsertObjectL( TXmlEngElement& aElement, TInt aContainerId, TInt* aId); - - - - /** - * Inserts attributes of the given element into the database - * @since Series S60 3.0 - * @param aElement TXmlEngElement of the element - * @param aElmId id of the element - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode InsertAttributesL(const TXmlEngElement aElement, TInt aElmId,TInt aObjId); - - - /** - * Checks if the given attribute has a corresponding marker attr in the given array - * @since Series S60 3.0 - * @param aAttr TXmlEngAttr of the attribute to be chceck - * @param aMarkers an array containing marker attributes - * @return ETrue if the attribute is required, otherwise EFalse - */ - TBool IsAttrRequiredL(const TXmlEngAttr& aAttr, RArray& aMarkers); - - /** - * C++ default constructor. - */ - CUpnpContentDirectoryDb(CUpnpMetadataStorage* aMetadataStorage); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - - /** - * If data base file is present it just opens it, - * otherwise creates new database storage file. - * @since Series S60 3.0 - * @param aDatabaseFileName name of storage file - */ - void ConstructDbL(const TFileName& aDatabaseFileName); - - /** - * Opens existing database. - * @since Series S60 3.0 - * @param aDatabaseFileName name of storage file - */ - void OpenDbL( const TFileName& aDatabaseFileName ); - - /** - * Adds elements that are children of inquired object to passed DOM TXmlEngElement. - * @param aObjectID - id of the object, which child elements will be added. - * @param aObjectElement - element to which the elements will be added. - */ - void AddElementsL( TInt aObjectID, TXmlEngElement aObjectElement, TBool aAll ); - - /** - * Adds attributes to passed DOM TXmlEngElement. - * @param aElementID - id of the element, which attributes will be added. - * @param aObjectId id of the object which the elements belongs to - * @param aElement - element to which the attributes will be added. - */ - void AddAttributesL( TInt aElementID, TInt aObjectID, TXmlEngElement& aElement, TBool aAll ); - - - - - private: // Data - CUpnpMetadataStorage* iMetadataStorage; // not owned - RXmlEngDOMImplementation iDOMImpl; - }; - -#endif //CCONTENTDIRECTORYDB_H - -// End Of File +/** @file +* Copyright (c) 2005-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: Database for MediaServer +* +*/ + + + +#ifndef C_CUPNPCONTENTDIRECTORYDB_H +#define C_CUPNPCONTENTDIRECTORYDB_H + +// INCLUDES +#include +#include +#include +#include +#include +#include + + +// CLASS DECLARATION +class CUpnpElementBean; +class CUpnpFilterElement; +class CUpnpAttributeBean; +class CUpnpObjectBean; +class CUpnpDlnaProtocolInfo; +class CUpnpShareMapBean; +class CUpnpResourcesBean; +class CUpnpMetadataStorage; + + + +/** +* Database for AVContentDirectory. +* Implements a database which is used to store descriptors of shared content. +* +* @lib ContentDirectoryDb.lib +* @since Series 60 3.0 +*/ +class CUpnpContentDirectoryDb : public CBase +{ + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CUpnpContentDirectoryDb* NewLC(CUpnpMetadataStorage* aMetadataStorage); + static CUpnpContentDirectoryDb* NewL(CUpnpMetadataStorage* aMetadataStorage); + + /** + * Destructor + */ + ~CUpnpContentDirectoryDb(); + + public: // New functions + + /** + * Checks if object with the given id exists, is a container and its 'restricted' attribute has value of 'false' + * @since Series S60 3.0 + * @param aObjId id of the object to be checked + * @return returns EUpnpOk if object with the given id exists in database and is a "non restricted conainer" + */ + TUpnpErrorCode CheckObjectRestrictionL(TInt aObjId); + + /** + * Inserts object into database + * @since Series S60 3.0 + * @param aFragment RDocuemnt of the document to be added to database + * @param aId id of the object + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode InsertObjectL( RXmlEngDocument& aFragment, TInt aContainer, TInt* aId); + + /** + * Function returns DIDL-Lite XML fragment with metadata for requested object. + * IMPORTANT: 1. Caller takes responsibility for returned document and is + * obliged to close it. + * 2. The root element of the document is element and + * the object's element is its direct, onluy child. + * @param aObjectID id of requested object. + * @param aDoc handler to document containing object's metadata. + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode GetObjectL( TInt aObjectID, RXmlEngDocument& aDoc, + const TDesC8& aFilterString); + + /** + * Gets id of reffered object + * @since Series S60 3.0 + * @param aObjectId object id + * @return reffered object id. + */ + TInt ReferedObjectIdL( TInt aObjectId ); + + /** + * Gets object list + * @since Series S60 3.1 + * @param aParentId + * @parem aList + * @return upnperrorcode descriping situation + */ + TUpnpErrorCode GetObjectListL(TInt aParentId, RArray& aList); + + /** + * Deletes object from database + * @since Series S60 3.0 + * @param aObjId id of the object to be deleted + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode DeleteObjectL(TInt aObjId,RArray& aRefList, TBool aDeleteResource=ETrue); + + /** + * Updates the metadata of the object with specified id + * @since Series S60 3.0 + * @param aObjId id of the object to be updated + * @param aFragment XML DOM tree with the updated object's metadata + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode UpdateObjectL(TInt aObjId, RXmlEngDocument& aFragment); + + + /** + * Deletes the res elements with the specified value. + * @since Series S60 3.0 + * @param aResVal value of the res element which is to be deleted + * @param aTumbailResVal value of the thumbail res element which is to be deleted + */ + void DeleteResourceL(const TDesC8& aResVal, RArray& aContIds); + + /** + * Gets object by its attribute value. + * @since Series S60 3.0 + * @param aDoc on return, it contains the object's data + * @param aObjId on, return it contains the object's id + * @param aAttrName attribute's name + * @param aAttrVal attribute's value + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode GetObjectByAttrL(RXmlEngDocument& aDoc, TInt* aObjId, + const TDesC8& aAttrName, const TDesC8& aAttrVal); + + /** + * Checks the restrictions of the parent object of the given object. + * @since Series S60 3.0 + * @param aObjId object's id + * @return returns EUpnpOk if object with the given id exists in database and is a "non restricted conainer" + */ + TUpnpErrorCode CheckParentRestrictionL(TInt aObjId); + + /** + * Gets the object id by its attribute value. + * @since Series S60 3.0 + * @param aAttrName attribute's name + * @param aAttrVal attribute's value + * @return object's id + */ + TInt GetObjIdByAttrL(const TDesC8& aAttrName, const TDesC8& aAttrVal); + + /** + * Gets the object id by its attribute value. Uses LIKE operator for comparison + * @since Series S60 3.0 + * @param aAttrName attribute's name + * @param aAttrVal attribute's value + * @return object's id + */ + TInt GetObjIdByAttrLikeL(const TDesC8& aAttrName, const TDesC8& aAttrVal); + + + /** + * Prepares a new RXmlEngDocument with DIDL-Lite element + * @since Series S60 3.0 + * @return Returns just created document + */ + RXmlEngDocument PrepareDidlDocumentL(); + + + /** + * Find protocolInfo by contentUri (Not by importUri). + * @param aContentUri uri to be searched in database (Value of resource). + * @param aProtocolInfo ProtocolInfo related to resorce which has been founded. Ownership is transfered to the caller. + * @return KErrNone if successful, otherwise another of the system-wide error codes + */ + TInt GetProtocolInfoL(const TDesC8& aContentUri, CUpnpDlnaProtocolInfo*& aProtocolInfo); // virtual + + + /** + * Gets object list + * @since Series S60 3.1 + * @param aIds + * @param aFilter + * @param aObjs + * @return upnperrorcode descriping situation + */ + void GetObjectListL(const RArray& aIds, const TDesC8& aFilter, RArray& aObjs); + + /** + * + * @since Series S60 3.1 + * @param aObjId + * @return boolean whether can be nested + */ + TBool CanBeNestedL(TInt aObjId); + + /** + * + * @since Series S60 3.1 + * @param aResBean + */ + void AddResourceL(CUpnpResourcesBean* aResBean, TInt aObjId); + + /** + * Deletes resource + * @since Series S60 3.1 + * @param aResId + * @param aDeleteFile + */ + void DeleteResourceByResIdL(TInt64 aResId, TBool aDeleteFile = ETrue); + + /** + * Deletes resource + * @since Series S60 3.1 + * @param aResId + * @param aDeleteFile + */ + void DeleteResourceByObjIdL(TInt aObjId, TBool aDeleteFile = ETrue); + + /** + * + * @since Series S60 3.1 + * @param aOldDir + */ + void NewMediaDirectoryL(const TDesC& aOldDir); + + /** + * Gets resource + * @since Series S60 3.1 + * @param aResId + * @return pointer to CUpnpResourceBean + */ + CUpnpResourcesBean* GetResourceL(TInt64 aResId); + + /** + * Gets attribute + * @since Series S60 3.1 + * @param aElmId + * @param aAttrName + * @param aAttrVal + * @return pointer to CUpnpAttributesBean + */ + CUpnpAttributeBean* GetAttrByNameL(TInt aElmId, const TDesC8& aAttrName, HBufC8*& aAttrVal); + + /** + * Gets attribute + * @since Series S60 3.1 + * @param aAttrName + * @param aAttrVal + * @return pointer to CUpnpAttributeBean + */ + CUpnpAttributeBean* GetAttrByValueL(const TDesC8& aAttrName, const TDesC8& aAttrVal); + + /** + * Gest protocol info + * @since Series S60 3,1 + * @param aImportUri + * @return descriptor pointer + */ + HBufC8* GetProtocolInfoByImportUriL(const TDesC8& aImportUri); + + + /** + * Getter + * @since Series S60 3.1 + * @return TInt + */ + TInt GetKeyForUriL(); + + /** + * Gets first object ID by element value + * @param aElmName - element name + * @param aElmValue - element value + * @return object ID + */ + TInt GetObjectIdByElementValueLikeL(const TDesC8& aElmName, const TDesC8& aElmValue); + + /** + * Gets the parent object's id of the object with given id. + * @since Series S60 3.1 + * @param aObjectId child object id + * @return parentid + */ + TInt GetParentIdL(TInt aObjectId); + /** + * Gets the next object's id . + * @since Series S60 3.1 + * @return id + */ + TInt GetObjectIdL(); + /** + * Gets the next object's id . + * @since Series S60 3.1 + * @return id + */ + HBufC8* GetObjectTitleL(TInt aId); + + /** + * Checks if database have propper columns in each table. + * If not it leaves with KErrCorrupt. + * @since Series S60 3.2 + */ + void CheckDatabaseL(); + + /** + * Handles DB error + * Tries to recover, if fails tries to recreate + * @since Series S60 3.2 + * @return TInt - KErrNone if succed + */ + TInt HandleDbError( TInt aError ); + + /** + * Recreates the database file. + * @since Series S60 3.1 + */ + TInt RecreateDatabaseFile(); + + /** + * Returns DB creation status + * @since Series S60 3.2 + * @return TBool + */ + TBool IsDbCreated(); + + private: + + /** + * Getter + * @since Series S60 3.1 + * @param aObjId + * @return pointer to CUpnpObjectBean + */ + CUpnpObjectBean* GetObjBeanLC(TInt aObjId); + + /** + * Gets object + * @since Series S60 3.1 + * @param aIns + * @param AresVal + */ + void GetObjectsByResourceL(RArray& aIds, const TDesC& aResVal); + + + /** + * Gets element + * @since Series S60 3.1 + * @param aElmName + * @param ElmValue + * @return TInt + */ + TInt GetElmIdByNameAndValL(const TDesC& aElmName, const TDesC& aElmValue); + + /** + * Gets attribute + * @since Series S60 3.1 + * @param aElmId + * @param aAttrName + * @param aAttrValue + */ + void GetAttrValueByNameL(TInt aElmId, const TDesC8& aAttrName, HBufC8*& aAttrVal); + + /** + * Performs resource deletion of the object being destroyed + * @since Series S60 3.0 + * @param aObjId aObjId id of the object being destroyed + * @param aObjId aCd pointer to the ContentDirectory object - it provides a function which deletes + * a file from the private directory + */ + void DeleteResourcesL(TInt aObjId); + + /** + * Performs the DeleteResource operation. + * Deletes each res element with the value of aResVal and corresponding thumnail res elements + * @since Series S60 3.0 + * @param aResVal value of the res whis is to be deleted + * @param aThumbailResVal value of the thumbail res whis is to be deleted + */ + void DoDeleteResourceL(const TDesC8& aResVal, RArray& aContIds); + + + /** + * Sets the childCount attribute in the given object's element. + * @since Series S60 3.0 + * @param aElement object's element + * @param aId object's id + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + void SetChildCountL(TXmlEngElement aElement, TInt aId); + + /** + * Adds all (existing in the database) properties to the object's element. + * @since Series S60 3.0 + * @param aElement object's element + * @param aObjBean object table description object + */ + void AddAllPropertiesL(TXmlEngElement aElement, CUpnpObjectBean* aObjBean); + + /** + * Adds new attribute to the element. + * @since Series S60 3.0 + * @param aElement object's element + * @param aAttrName the name of the attribute which is to be added + * @param aElementId id of the element which the attribute belongs to + * @param aObjectId id of the object which the elements belongs to + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + void AddAttributeL( TXmlEngElement aElement, const TDesC8& aAttrName, TInt aElementId, TInt aObjectId ); + + /** + * Adds a requested properties to the object's element. + * @since Series S60 3.0 + * @param aObjectID object's id + * @param aElement an array containing filter elements of the requested property + * @param aFilterElements ?description + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode AddRequestedPropertiesL(TInt aObjectID,TXmlEngElement aElement, + const RPointerArray& aFilterElements); + + /** + * Adds requested element to the object's element. + * @since Series S60 3.0 + * @param aElement an element wich we want to add a new element to + * @param aObjectID id of the object + * @param aReqElement filter object of the element to be added + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + void AddElementL(TXmlEngElement aElement, TInt aObjectID, const CUpnpFilterElement* aReqElement); + + /** + * Adds required property to the object. + * @since Series S60 3.0 + * @param aElement TXmlEngElement of the object which is to be added the required property + * @param aObjId id of the object being processed + * @param aFilterElement CUpnpFilterElement object of the property to be added + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode AddRequiredPropertyL(TXmlEngElement aElement, TInt aObjId, CUpnpFilterElement* aFilterElement); + + /** + * Parses filter string. + * @since Series S60 3.0 + * @param aFilter filter string to be parsed + * @param aList On return, contains CFilterElements objects of the filter string + */ + void ParseFilterStringL(const TDesC8& aFilter, RPointerArray& aList); + + /** + * Performs get object operation. + * @since Series S60 3.0 + * @param aObjectID id of requested object. + * @param aDoc handler to document containing object's metadata. + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode DoGetObjectL(TInt aObjectID, RXmlEngDocument& aDoc, TBool aAll); + + /** + * Inserts element into database + * @since Series S60 3.0 + * @param aElementel TXmlEngElement of the element to be inserted + * @param aObjId id of the object this element belongs to + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode InsertElementL(const TXmlEngElement& aElementel, TInt aObjId); + + /** + * Performs object update; a transaction should be started before calling this function + * @since Series S60 3.0 + * @param aObjId id of the object to be updated + * @param aFragment XML DOM tree with the updated object's metadata + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode DoUpdateObjectL(TInt aObjId, TXmlEngElement aFragment); + + /** + * Inserts updated object into database + * @since Series S60 3.0 + * @param aObjId id of the object + * @param aFragment XML DOM tree with the updated object's metadata + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode InsertUpdatedL(TInt aObjId, TXmlEngElement& aElement); + + /** + * Sets the id attribute in the given object; adds attribute if does not exist + * @since Series S60 3.0 + * @param aElement TXmlEngElement of the object + * @return value of the id + */ + TInt SetObjectIdL(TXmlEngElement& aElement); + + /** + * Inserts object into database; a transaction should be started before calling this function + * @since Series S60 3.0 + * @param param descr + * @return EUpnpOk, if successful; Leaves if the object could not be inserted into the database + * In case it leaves the transaction must be rolled back + */ + TUpnpErrorCode DoInsertObjectL( TXmlEngElement& aElement, TInt aContainerId, TInt* aId); + + + + /** + * Inserts attributes of the given element into the database + * @since Series S60 3.0 + * @param aElement TXmlEngElement of the element + * @param aElmId id of the element + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode InsertAttributesL(const TXmlEngElement aElement, TInt aElmId,TInt aObjId); + + + /** + * Checks if the given attribute has a corresponding marker attr in the given array + * @since Series S60 3.0 + * @param aAttr TXmlEngAttr of the attribute to be chceck + * @param aMarkers an array containing marker attributes + * @return ETrue if the attribute is required, otherwise EFalse + */ + TBool IsAttrRequiredL(const TXmlEngAttr& aAttr, RArray& aMarkers); + + /** + * C++ default constructor. + */ + CUpnpContentDirectoryDb(CUpnpMetadataStorage* aMetadataStorage); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * If data base file is present it just opens it, + * otherwise creates new database storage file. + * @since Series S60 3.0 + * @param aDatabaseFileName name of storage file + */ + void ConstructDbL(const TFileName& aDatabaseFileName); + + /** + * Opens existing database. + * @since Series S60 3.0 + * @param aDatabaseFileName name of storage file + */ + void OpenDbL( const TFileName& aDatabaseFileName ); + + /** + * Adds elements that are children of inquired object to passed DOM TXmlEngElement. + * @param aObjectID - id of the object, which child elements will be added. + * @param aObjectElement - element to which the elements will be added. + */ + void AddElementsL( TInt aObjectID, TXmlEngElement aObjectElement, TBool aAll ); + + /** + * Adds attributes to passed DOM TXmlEngElement. + * @param aElementID - id of the element, which attributes will be added. + * @param aObjectId id of the object which the elements belongs to + * @param aElement - element to which the attributes will be added. + */ + void AddAttributesL( TInt aElementID, TInt aObjectID, TXmlEngElement& aElement, TBool aAll ); + + + + + private: // Data + CUpnpMetadataStorage* iMetadataStorage; // not owned + RXmlEngDOMImplementation iDOMImpl; + }; + +#endif //CCONTENTDIRECTORYDB_H + +// End Of File