omadrm/drmengine/server/inc/drmmeteringdb.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:27 +0200
changeset 0 95b198f216e5
child 18 8a03a285ab14
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007 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:  Interface for the Metering database
*
*/


#ifndef DRMMETERINGDB_H
#define DRMMETERINGDB_H

//  INCLUDES
#include <e32std.h>
#include <caf/caf.h>
#include <D32DBMS.H>
#include "DRMPointerArray.h"

// CONSTANTS
// MACROS
// FUNCTION PROTOTYPES
// FORWARD DECLARATIONS
class CPersistentStore;
class CDrmMeteringDbData;

// DATA TYPES

// CLASS DECLARATION

/**
*  Content metering information database. This class manages storing 
*  information of Content ID, Rights Issuer ID, metered count and metered 
*  accumulated time. 
*
*  @lib RightsServer.exe
*  @since 3.2
*/
NONSHARABLE_CLASS( RDrmMeteringDb )
    {
        
    public: // Constructors and destructor
    
        /**
        * Constructor.
        * @since S60 3.2
        */
        RDrmMeteringDb( RFs& aFs );
    
        /**
        * Default constructor.
        * @since S60 3.2
        */
        RDrmMeteringDb();
    
        public: // New functions
    
        /**
        * Sets the iFs according to this reference.
        *
        * @since S60 3.2
        * @param aFs Reference to open file server session. 
        */
        void Set( RFs& aFs );
    
        /**
        * Closes the database.
        * @since S60 3.2
        */
        void Close();
    
        /**
        * Initializes the database.
        * @since S60 3.2
        * @param aFileName File name of the database
        */
        void InitL( const TDesC& aFileName );
                
        /**
        * Destructor.
        * @since S60 3.2
        */
        ~RDrmMeteringDb();
    
        /**
        * Add a metering data entry to the database.
        * @since S60 3.2
        * @param aMeteringData One metering data entry
        */
        void AddL( const CDrmMeteringDbData* aMeteringData );
        
        /**  
        * Get the metering data list based on the Rights Issuer Id from the 
        * metering database. Return value is ETrue if at least one entry was 
        * found corresponding to the given Rights Issuer Id. Return value is 
        * EFalse if no entry was found. The function will leave if an error 
        * happens in the handling of the database or if the Rights Issuer Id 
        * is empty or too long.
        * @since S60 3.2
        * @param aRiId Rights Issuer Id
        * @param aMeteringDataList Metering data list for a Rights Issuer
        * @return Boolean
        */
        TBool GetL( const TDesC8& aRiId, 
                    CDRMPointerArray< CDrmMeteringDbData >& aMeteringDataList );
        
        /**
        * Delete all the metering data information associated to the given 
        * Rights Issuer Id from the metering database. Return value is ETrue
        * if at least one entry was found corresponding to the given Rights 
        * Issuer Id. Return value is EFalse if no entry was found. The function 
        * will leave if an error happens in the handling of the database or if 
        * the Rights Issuer Id is empty or too long. 
        * @since S60 3.2
        * @param aRiId Rights Issuer Id 
        * @return Boolean
        */
        TBool DeleteL( const TDesC8& aRiId );
        
    private: // Private functions
    
        /**
        * Opens a database.
        * @since S60 3.2
        * @param aDb Database.
        * @param aFileName File name.
        */
        void OpenDbL( RDbNamedDatabase& aDb, 
                      const TDesC& aFileName );

        /**
        * Replace an existing database.
        * @since S60 3.2
        * @param aDb Database.
        * @param aFileName File name.
        */
        void ReplaceDbL( RDbNamedDatabase& aDb,
                         const TDesC& aFileName );

        /**
        * Initializes the view.
        * @since S60 3.2
        * @param aView View to initialize.
        */
        void InitViewLC( RDbView& aView );
    
        /**
        * Compare the Rights Issuer Id and Content Id to their counterparts in
        * the current row of the view. Return value is ETrue only if both the 
        * Content Id and the Rights Issuer Id match their counterpart Ids in
        * the view. Overloaded.  
        * 
        * @since S60 3.2
        * @param aView View.
        * @param aCID Content Id
        * @param aRiId Rights Issuer Id
        * @return Boolean
        */
        TBool CompareIDL( RDbRowSet& aView, 
                          const TDesC8& aCID, 
                          const TDesC8& aRiId );
        
        /**
        * Compare the Rights Issuer Id to its counterpart in the current row 
        * of the view. Overloaded.  
        * 
        * @since S60 3.2
        * @param aView View.
        * @param aRiId Rights Issuer Id
        * @return Boolean
        */
        TBool CompareIDL( RDbRowSet& aView, const TDesC8& aRiId );
            
        /**
        * Push a cleanup item to the cleanup stack in order to rollback
        * the database.
        * @since S60 3.2
        * @param aDb Database.
        */
        void PushL( RDbDatabase& aDb );
    
        /**
        * Pop the cleanup item pushed in by PushL
        * @since S60 3.2
        */
        void Pop();

    private: // Data
        // File server session handle. Not owned by this object.
        RFs* iFs;
    
        // Metering database 
        RDbNamedDatabase iDb;
    
    };

#endif //DRMMETERINGDB_H