diff -r 3785f754ee62 -r 5360b7ddc251 upnpmediaserver/contentdirectoryservice/inc/upnpmetadatastorage.h --- a/upnpmediaserver/contentdirectoryservice/inc/upnpmetadatastorage.h Fri Sep 17 08:31:21 2010 +0300 +++ b/upnpmediaserver/contentdirectoryservice/inc/upnpmetadatastorage.h Mon Nov 01 12:37:49 2010 +0200 @@ -1,482 +1,482 @@ -/** @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 UPNPMETADATASTORAGE_H -#define UPNPMETADATASTORAGE_H - -// INCLUDES -#include -#include -#include -#include -#include -#include - -// FORWARD DECLARATIONS -class CUpnpObjectBean; -class CUpnpElementBean; -class CUpnpAttributeBean; -class CUpnpResourcesBean; - -// CLASS DECLARATION - -/** -* Metadata storage -* -* @lib avcontentdirectory.lib -* @since Series 60 3.0 -*/ -class CUpnpMetadataStorage : public CBase -{ -public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CUpnpMetadataStorage* NewL(const TDesC& aDatabaseFileName); - static CUpnpMetadataStorage* NewLC(const TDesC& aDatabaseFileName); - - /** - * Destructor. - */ - virtual ~CUpnpMetadataStorage(); - -public: // New functions - - /** - * 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. - */ - TBool IsContainerL(TInt aObjId); - void DeleteResourcesL(RArray& aObjList); - void AddResourceL(CUpnpResourcesBean* aResBean, TInt aObjId); - TUpnpErrorCode DoDeleteObjectL(TInt aObjId, TBool aDeleteResource, TBool aDeleteRef=ETrue ); - void InsertIntoAttributeTableL(TInt aElmId, CUpnpAttributeBean* aAtrBn, TInt aObjId, TInt aAtrId); - TInt InsertIntoElementTableL(TInt aObjId, CUpnpElementBean* aElmBn, TInt aElmId); - TInt InsertIntoObjectTableL(TInt aContainer, CUpnpObjectBean* aObjBn); - /** - * @since Series S60 3.1 - * @param aObjId - * @return RDbView - */ - RDbView GetObjViewL(TInt aObjId); - - /** - * - * @since Series S60 3.1 - */ - void BeginTransactionL(); - - /** - * - * @since Series S60 3.1 - */ - void CommitTransactionL(); - - /** - * - * @since Series S60 3.1 - */ - void RollbackTransactionL(); - - /** - * Getter - * @since Series S30 3.1 - * @param aObjectID - * @param aAll - * @return RDbView - */ - RDbView GetElementsViewL(TInt aObjectID, TBool aAll); - - /** - * Getter - * @since Series S30 3.1 - * @param aElementID - * @param aAll - * @return RDbView - */ - RDbView GetAttributesViewL(TInt aElementID, TBool aAll); - - /** - * Getter - * @since Series S30 3.2 - * @param aObjectID - * @param aAll - * @return RDbView - */ - RDbView GetAttributesViewByObjectIdL( TInt aObjectID, TBool aAll ); - - /** - * Getter - * @since Series S30 3.1 - * @param aAttrNameID - * @param aAttrVal - * @return - */ - TInt GetElmIdForAttrL(const TDesC8& aAttrName, const TDesC8& aAttrVal); - - /** - * Getter - * @since Series S30 3.1 - * @param aAttrName - * @param aAttrVal - * @return - */ - TInt GetElmIdForAttrLikeL(const TDesC8& aAttrName, const TDesC8& aAttrVal); - - /** - * - * @since Series S30 3.1 - * @param aResVal - * @param aObjId - */ - void DeleteResElL(const TDesC& aResVal, TInt ObjId); - - /** - * Getter - * @since Series S30 3.1 - * @param aResVal - * @return RDbView - */ - RDbView GetViewOfObjectListForResL(const TDesC& aResVal); - - /** - * Getter - * @since Series S30 3.1 - * @param aElmName - * @param aElmValue - * @return RDbView - */ - RDbView GetViewOfElmIdByNameAndValL(const TDesC& aElmName, const TDesC& aElmValue); - - /** - * Getter - * @since Series S30 3.1 - * @param aAttrName - * @param aAttrVal - * @return RDbView - */ - RDbView GetAttrViewL(const TDesC8& aAttrName, const TDesC8& aAttrVal); - - /** - * Getter - * @since Series S30 3.1 - * @param aElmId - * @param aAttrName - * @return RDbView - */ - RDbView GetAttrViewL(TInt aElmId, const TDesC8& aAttrName); - - /** - * Getter - * @since Series S30 3.2 - * @param aBjectId - * @param aAttrName - * @return RDbView - */ - RDbView GetAttrViewByObjectIdL(TInt aBjectId, const TDesC8& aAttrName); - - /** - * - * @since Series S30 3.1 - * @param aSqlQuery - * @return RDbView - */ - RDbView PrepareViewL(const TDesC& aSqlQuery); - - /** - * Getter - * @since Series S30 3.1 - * @param aSqlQuery - * @return RDbView - */ - RDbView GetEvaluatedViewL(const TDesC& aSqlQuery); - HBufC8* GetObjectPathL(TInt aObjId); - HBufC8* GetObjectTitleL(TInt aObjId); - void ExecuteL(const TDesC& aSqlCommand); - CUpnpResourcesBean* GetResourceL(TInt64 aResId); - void DeleteResourceByObjIdL(TInt aObjId, TBool aDeleteFile=ETrue); - void DeleteResourceByResIdL(TInt64 aResId, TBool aDeleteFile=ETrue); - void DeleteObjectsL(TInt aObjId); - void DeleteElementsL(TInt aObjId); - void DeleteAttributesL(TInt aObjId); - void DeleteReferencesL(TInt aObjId,RArray& aRefList); - - /** - * Performs object deletion; a transaction should be started before calling this function - * @since Series S60 3.0 - * @param id of the object to be deleted - * @param aObjId aCd pointer to the ContentDirectory object - it provides a function which deletes - * a file from the private directory - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TInt DoDeleteObjectL(TInt aObjId,RArray& aRefList, - RArray& aResList, TBool aDeleteResource, TBool aLocal, TBool aDeleteRef = ETrue ); - - /** - * 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); - - /** - * 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, - TBool aLocal = EFalse, TBool aDeleteRef = ETrue ); - - - /** - * Gets the descriptor value of the specified column in the rowset. - * @since Series S60 3.0 - * @param aRowset rowset object - * @param aColNo the number of the column to be get the value of - * @return descriptor containing the value of the specified column, - * the caller should delete it when it is no longer needed - */ - HBufC8* GetColDesValFromRowSetL(RDbRowSet aRowset, TDbColNo aColNo); - - /** - * Gets the value of childCount property for the given object. - * @since Series S60 3.0 - * @param aObjId object's id - * @return value of childCount property - */ - TInt GetChildCountL(TInt aObjId); - - /** - * Gets the parent object's id of the object with given id. - * @since Series S60 3.0 - * @param aObjId child object id - * @return perent object id - */ - TInt GetParentIdL(TInt aObjId); - - /** - * Gets the id of the object which the element with given id belongs to. - * @since Series S60 3.0 - * @param aId element's id - * @return object's id - */ - TInt GetObjIdForElmIdL(TInt aId); - - /** - * Gets id of reffered object - * @since Series S60 3.0 - * @param aObjectId object id - * @return reffered object id. - */ - TInt ReferedObjectIdL( TInt aObjectId ); - - /** - * Gets the next free id in the specified table - * @since Series S60 3.0 - * @param aName name of the table - * @return TInt next free id in the specified table - */ - TInt GetNextKeyL(const TDesC8& aName); - TInt GetNextKeyL(const TDesC8& aName, TInt aAmount); - /** - * Gets the next free id in the specified table - * @since Series S60 3.0 - * @param aName name of the table - * @return TInt next free id in the specified table - */ - TInt NextKeyL(const TDesC8& aName); - - /** - * Insert object's data into 'object' table - * @since Series S60 3.0 - * @param aElement TXmlEngElement of the object to be added - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - void InsertObjectIntoObjectTableL(const TXmlEngElement& aElement); - - /** - * Inserts single attribute into the database - * @since Series S60 3.0 - * @param aAttr TXmlEngAttr of the attribute to be inserted - * @param aElmId id of the element this attribute belongs to - * 2param aIsRequired - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - void InsertAttributeL(const TXmlEngAttr aAttr, TInt aElmId, TBool aIsRequired, TInt aObjId); - - /** - * 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 - */ - TInt InsertElementL(const TXmlEngElement& aElementel, TInt aObjId); - - /** - * Gets the database view of the named element of the specified object. - * @since Series S60 3.0 - * @param aObjId object's id - * @param aElName name of the element which we want to get the view of - * @return ?description - */ - RDbView GetElementViewL(TInt aObjId, const TDesC8& aElName); - - /** - * Adds an attribute from object table to the object's main element. - * @since Series S60 3.0 - * @param aElement object's element - * @param aId object's id - * @param aName name of the attribute which is to be added - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode AddMainTagAttrL(TXmlEngElement aElement, TInt aId, const TDesC8& aName); - - - /** - * Gets the list direct children of object with specified id - * @since Series S60 3.0 - * @param aParentId id of the parent object - * @param aList an array to be filled with object - * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. - */ - TUpnpErrorCode GetObjectListL(TInt aParentId, RArray& aList); - TUpnpErrorCode GetItemListL(TInt aParentId, RArray& aList); - TUpnpErrorCode GetContainerListL(TInt aParentId, RArray& aList); - - /** - * 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); - - /** - * Recovers the database. - * @since Series S60 3.1 - * @return Standard error code - */ - TInt RecoverDatabase(); - - /** - * Recreates the database file. - * @since Series S60 3.1 - */ - void RecreateDatabaseFileL(); - - /** - * Checks if all database columns in each table have propper definitions. - * 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 ); - - /** - * Returns DB creation status - * @since Series S60 3.2 - * @return TBool - */ - TBool IsDbCreated(); - - -private: - - /** - * C++ default constructor. - */ - CUpnpMetadataStorage(); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(const TDesC& aDatabaseFileName); - -private: - - void CompactDbL(); - TInt AddSubObjectsL(TInt aObjId, RArray& aObjList, RArray& aResList, TBool aLocal); - - /** - * Compare two column sets (type, maxsize and attributes). Used by CheckDatabaseL() function. - * Leaves with KErrCorrupt when columns are not agree. - * @since Series S60 3.2 - * @param aColSet1 First column set to compare - * @param aColSet2 Second column set to compare - */ - void CompareDbColSetsL( CDbColSet *aColSet1, CDbColSet *aColSet2 ); - - /** - * Deletes the file - * @since Series S30 3.1 - * @param aPath - */ - void DeleteFileL(const TDesC& aPath); - - /** - * - * @since Series S30 3.1 - * @param aElement - * @return descriptor pointer - */ - HBufC8* CreatePathValL(const TXmlEngElement& aElement); - HBufC8* CreatePathValL(TInt aParentId); - /** - * Opens database - * @since Series S30 3.1 - * @param aDatabaseFileName - */ - void OpenDbL( const TFileName& aDatabaseFileName ); - - /** - * - * @since Series S30 3.1 - * @param aWeight - */ - void DbChangedL(TInt aWeight); - -private: - - // For use of iFileStore - RFs iFsSession; - // For database operations - RDbStoreDatabase iDatabase; - TBool iIsOpen; - // For creating and opening database files - CFileStore* iFileStore; - // compact counter - TInt iCompactCounter; - -}; - -#endif // UPNPMETADATASTORAGE_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 UPNPMETADATASTORAGE_H +#define UPNPMETADATASTORAGE_H + +// INCLUDES +#include +#include +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CUpnpObjectBean; +class CUpnpElementBean; +class CUpnpAttributeBean; +class CUpnpResourcesBean; + +// CLASS DECLARATION + +/** +* Metadata storage +* +* @lib avcontentdirectory.lib +* @since Series 60 3.0 +*/ +class CUpnpMetadataStorage : public CBase +{ +public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CUpnpMetadataStorage* NewL(const TDesC& aDatabaseFileName); + static CUpnpMetadataStorage* NewLC(const TDesC& aDatabaseFileName); + + /** + * Destructor. + */ + virtual ~CUpnpMetadataStorage(); + +public: // New functions + + /** + * 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. + */ + TBool IsContainerL(TInt aObjId); + void DeleteResourcesL(RArray& aObjList); + void AddResourceL(CUpnpResourcesBean* aResBean, TInt aObjId); + TUpnpErrorCode DoDeleteObjectL(TInt aObjId, TBool aDeleteResource, TBool aDeleteRef=ETrue ); + void InsertIntoAttributeTableL(TInt aElmId, CUpnpAttributeBean* aAtrBn, TInt aObjId, TInt aAtrId); + TInt InsertIntoElementTableL(TInt aObjId, CUpnpElementBean* aElmBn, TInt aElmId); + TInt InsertIntoObjectTableL(TInt aContainer, CUpnpObjectBean* aObjBn); + /** + * @since Series S60 3.1 + * @param aObjId + * @return RDbView + */ + RDbView GetObjViewL(TInt aObjId); + + /** + * + * @since Series S60 3.1 + */ + void BeginTransactionL(); + + /** + * + * @since Series S60 3.1 + */ + void CommitTransactionL(); + + /** + * + * @since Series S60 3.1 + */ + void RollbackTransactionL(); + + /** + * Getter + * @since Series S30 3.1 + * @param aObjectID + * @param aAll + * @return RDbView + */ + RDbView GetElementsViewL(TInt aObjectID, TBool aAll); + + /** + * Getter + * @since Series S30 3.1 + * @param aElementID + * @param aAll + * @return RDbView + */ + RDbView GetAttributesViewL(TInt aElementID, TBool aAll); + + /** + * Getter + * @since Series S30 3.2 + * @param aObjectID + * @param aAll + * @return RDbView + */ + RDbView GetAttributesViewByObjectIdL( TInt aObjectID, TBool aAll ); + + /** + * Getter + * @since Series S30 3.1 + * @param aAttrNameID + * @param aAttrVal + * @return + */ + TInt GetElmIdForAttrL(const TDesC8& aAttrName, const TDesC8& aAttrVal); + + /** + * Getter + * @since Series S30 3.1 + * @param aAttrName + * @param aAttrVal + * @return + */ + TInt GetElmIdForAttrLikeL(const TDesC8& aAttrName, const TDesC8& aAttrVal); + + /** + * + * @since Series S30 3.1 + * @param aResVal + * @param aObjId + */ + void DeleteResElL(const TDesC& aResVal, TInt ObjId); + + /** + * Getter + * @since Series S30 3.1 + * @param aResVal + * @return RDbView + */ + RDbView GetViewOfObjectListForResL(const TDesC& aResVal); + + /** + * Getter + * @since Series S30 3.1 + * @param aElmName + * @param aElmValue + * @return RDbView + */ + RDbView GetViewOfElmIdByNameAndValL(const TDesC& aElmName, const TDesC& aElmValue); + + /** + * Getter + * @since Series S30 3.1 + * @param aAttrName + * @param aAttrVal + * @return RDbView + */ + RDbView GetAttrViewL(const TDesC8& aAttrName, const TDesC8& aAttrVal); + + /** + * Getter + * @since Series S30 3.1 + * @param aElmId + * @param aAttrName + * @return RDbView + */ + RDbView GetAttrViewL(TInt aElmId, const TDesC8& aAttrName); + + /** + * Getter + * @since Series S30 3.2 + * @param aBjectId + * @param aAttrName + * @return RDbView + */ + RDbView GetAttrViewByObjectIdL(TInt aBjectId, const TDesC8& aAttrName); + + /** + * + * @since Series S30 3.1 + * @param aSqlQuery + * @return RDbView + */ + RDbView PrepareViewL(const TDesC& aSqlQuery); + + /** + * Getter + * @since Series S30 3.1 + * @param aSqlQuery + * @return RDbView + */ + RDbView GetEvaluatedViewL(const TDesC& aSqlQuery); + HBufC8* GetObjectPathL(TInt aObjId); + HBufC8* GetObjectTitleL(TInt aObjId); + void ExecuteL(const TDesC& aSqlCommand); + CUpnpResourcesBean* GetResourceL(TInt64 aResId); + void DeleteResourceByObjIdL(TInt aObjId, TBool aDeleteFile=ETrue); + void DeleteResourceByResIdL(TInt64 aResId, TBool aDeleteFile=ETrue); + void DeleteObjectsL(TInt aObjId); + void DeleteElementsL(TInt aObjId); + void DeleteAttributesL(TInt aObjId); + void DeleteReferencesL(TInt aObjId,RArray& aRefList); + + /** + * Performs object deletion; a transaction should be started before calling this function + * @since Series S60 3.0 + * @param id of the object to be deleted + * @param aObjId aCd pointer to the ContentDirectory object - it provides a function which deletes + * a file from the private directory + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TInt DoDeleteObjectL(TInt aObjId,RArray& aRefList, + RArray& aResList, TBool aDeleteResource, TBool aLocal, TBool aDeleteRef = ETrue ); + + /** + * 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); + + /** + * 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, + TBool aLocal = EFalse, TBool aDeleteRef = ETrue ); + + + /** + * Gets the descriptor value of the specified column in the rowset. + * @since Series S60 3.0 + * @param aRowset rowset object + * @param aColNo the number of the column to be get the value of + * @return descriptor containing the value of the specified column, + * the caller should delete it when it is no longer needed + */ + HBufC8* GetColDesValFromRowSetL(RDbRowSet aRowset, TDbColNo aColNo); + + /** + * Gets the value of childCount property for the given object. + * @since Series S60 3.0 + * @param aObjId object's id + * @return value of childCount property + */ + TInt GetChildCountL(TInt aObjId); + + /** + * Gets the parent object's id of the object with given id. + * @since Series S60 3.0 + * @param aObjId child object id + * @return perent object id + */ + TInt GetParentIdL(TInt aObjId); + + /** + * Gets the id of the object which the element with given id belongs to. + * @since Series S60 3.0 + * @param aId element's id + * @return object's id + */ + TInt GetObjIdForElmIdL(TInt aId); + + /** + * Gets id of reffered object + * @since Series S60 3.0 + * @param aObjectId object id + * @return reffered object id. + */ + TInt ReferedObjectIdL( TInt aObjectId ); + + /** + * Gets the next free id in the specified table + * @since Series S60 3.0 + * @param aName name of the table + * @return TInt next free id in the specified table + */ + TInt GetNextKeyL(const TDesC8& aName); + TInt GetNextKeyL(const TDesC8& aName, TInt aAmount); + /** + * Gets the next free id in the specified table + * @since Series S60 3.0 + * @param aName name of the table + * @return TInt next free id in the specified table + */ + TInt NextKeyL(const TDesC8& aName); + + /** + * Insert object's data into 'object' table + * @since Series S60 3.0 + * @param aElement TXmlEngElement of the object to be added + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + void InsertObjectIntoObjectTableL(const TXmlEngElement& aElement); + + /** + * Inserts single attribute into the database + * @since Series S60 3.0 + * @param aAttr TXmlEngAttr of the attribute to be inserted + * @param aElmId id of the element this attribute belongs to + * 2param aIsRequired + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + void InsertAttributeL(const TXmlEngAttr aAttr, TInt aElmId, TBool aIsRequired, TInt aObjId); + + /** + * 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 + */ + TInt InsertElementL(const TXmlEngElement& aElementel, TInt aObjId); + + /** + * Gets the database view of the named element of the specified object. + * @since Series S60 3.0 + * @param aObjId object's id + * @param aElName name of the element which we want to get the view of + * @return ?description + */ + RDbView GetElementViewL(TInt aObjId, const TDesC8& aElName); + + /** + * Adds an attribute from object table to the object's main element. + * @since Series S60 3.0 + * @param aElement object's element + * @param aId object's id + * @param aName name of the attribute which is to be added + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode AddMainTagAttrL(TXmlEngElement aElement, TInt aId, const TDesC8& aName); + + + /** + * Gets the list direct children of object with specified id + * @since Series S60 3.0 + * @param aParentId id of the parent object + * @param aList an array to be filled with object + * @return EUpnpOk, if successful; Otherwise, one of the other Upnp error codes. + */ + TUpnpErrorCode GetObjectListL(TInt aParentId, RArray& aList); + TUpnpErrorCode GetItemListL(TInt aParentId, RArray& aList); + TUpnpErrorCode GetContainerListL(TInt aParentId, RArray& aList); + + /** + * 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); + + /** + * Recovers the database. + * @since Series S60 3.1 + * @return Standard error code + */ + TInt RecoverDatabase(); + + /** + * Recreates the database file. + * @since Series S60 3.1 + */ + void RecreateDatabaseFileL(); + + /** + * Checks if all database columns in each table have propper definitions. + * 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 ); + + /** + * Returns DB creation status + * @since Series S60 3.2 + * @return TBool + */ + TBool IsDbCreated(); + + +private: + + /** + * C++ default constructor. + */ + CUpnpMetadataStorage(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(const TDesC& aDatabaseFileName); + +private: + + void CompactDbL(); + TInt AddSubObjectsL(TInt aObjId, RArray& aObjList, RArray& aResList, TBool aLocal); + + /** + * Compare two column sets (type, maxsize and attributes). Used by CheckDatabaseL() function. + * Leaves with KErrCorrupt when columns are not agree. + * @since Series S60 3.2 + * @param aColSet1 First column set to compare + * @param aColSet2 Second column set to compare + */ + void CompareDbColSetsL( CDbColSet *aColSet1, CDbColSet *aColSet2 ); + + /** + * Deletes the file + * @since Series S30 3.1 + * @param aPath + */ + void DeleteFileL(const TDesC& aPath); + + /** + * + * @since Series S30 3.1 + * @param aElement + * @return descriptor pointer + */ + HBufC8* CreatePathValL(const TXmlEngElement& aElement); + HBufC8* CreatePathValL(TInt aParentId); + /** + * Opens database + * @since Series S30 3.1 + * @param aDatabaseFileName + */ + void OpenDbL( const TFileName& aDatabaseFileName ); + + /** + * + * @since Series S30 3.1 + * @param aWeight + */ + void DbChangedL(TInt aWeight); + +private: + + // For use of iFileStore + RFs iFsSession; + // For database operations + RDbStoreDatabase iDatabase; + TBool iIsOpen; + // For creating and opening database files + CFileStore* iFileStore; + // compact counter + TInt iCompactCounter; + +}; + +#endif // UPNPMETADATASTORAGE_H + +// End of File