terminalsecurity/SCP/SCPDatabase/inc/SCPParamDB.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 31 Mar 2010 23:00:03 +0300
branchRCL_3
changeset 13 86979fe66c4c
parent 0 b497e44ab2fc
permissions -rw-r--r--
Revision: 201011 Kit: 201013

/*
* Copyright (c) 2009 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:
*
*/
#ifndef __CSCPARAMDB_H_
#define __CSCPARAMDB_H_

#include <e32base.h>
#include <e32std.h>
#include <badesca.h>
#include <e32def.h>
#include <e32base.h>
#include <f32file.h>
#include <d32dbms.h>

_LIT(KDatabaseName,             "c:scp.db");
_LIT(KTblParameter,             "PARAMETER");
_LIT(KColParamId,               "PARAMID");
_LIT(KColAppId,                 "APPID");
_LIT(KColValueInt,              "VALUEINT");
_LIT(KColValueDes,              "VALUEDES");

_LIT(KSelectAll,                        "SELECT * FROM PARAMETER");
_LIT(KSelectAllAscParamID,               "SELECT * FROM PARAMETER ORDER BY PARAMID ASC");
_LIT(KSelectWhereParamId,               "SELECT * FROM PARAMETER WHERE PARAMID=%d");
_LIT(KSelectWhereParamIdAppID,          "SELECT * FROM PARAMETER WHERE PARAMID=%d AND APPID=%d");
_LIT(KSelectAppIDParamValNotIn,         "SELECT * FROM PARAMETER WHERE NOT APPID=%d AND VALUEDES='%S'");
_LIT(KSelectWhereAppId,                 "SELECT * FROM PARAMETER WHERE APPID=%d");
_LIT(KSelectWhereAppIdByAscParamID,    "SELECT * FROM PARAMETER WHERE APPID=%d ORDER BY PARAMID ASC");
_LIT(KDeleteWhereParamIDValueDes,       "DELETE FROM PARAMETER WHERE PARAMID=%d AND VALUEDES='%S'");
_LIT(KDeleteWhereParamIDValueDesAppID,  "DELETE FROM PARAMETER WHERE PARAMID=%d AND VALUEDES='%S' AND APPID=%d");
_LIT(KDeleteWhereParamIDAppID,          "DELETE FROM PARAMETER WHERE PARAMID=%d AND APPID=%d");
_LIT(KDeleteWhereParamID,               "DELETE FROM PARAMETER WHERE PARAMID=%d");
_LIT(KUpdateValIntWhereParamId,         "UPDATE PARAMETER SET APPID=%d, VALUEINT=%d WHERE PARAMID=%d");
_LIT(KInsertValInt,                     "INSERT INTO PARAMETER (PARAMID, VALUEINT, APPID) VALUES(%d, %d, %d)");
_LIT(KInsertValDes,                     "INSERT INTO PARAMETER (PARAMID, VALUEDES, APPID) VALUES(%d, '%S', %d)");
_LIT(KUpdateValDesWhereParamId,         "UPDATE PARAMETER SET APPID=%d, VALUEDES='%S' WHERE PARAMID=%d");
_LIT(KCreateTable,                      "CREATE TABLE PARAMETER (PARAMID INTEGER NOT NULL,\
                                            APPID INTEGER, VALUEINT INTEGER, VALUEDES CHAR(255))");

/**
 *  Database class
 *
 *  @lib
 *  @since
 */
NONSHARABLE_CLASS(CSCPParamDB) : public CBase {
public:
    ~CSCPParamDB();
    static CSCPParamDB* NewL();
    static CSCPParamDB* NewLC();

    /*
     * Store value for a parameter into the database. The parameter value that can be stored through this function
     * can only be of type numeric/boolean (The 16 shared parameters excepting EPasscodeClearSpecificStrings, 
     * EPasscodeDisallowSpecific and EPasscodeAllowSpecific)
     * 
     * @Params - aParamID: The Parameter ID 
     *                     (Has to be one from the enum list, RTerminalControl3rdPartySession :: TTerminalControl3rdPartyMessages)
     *           aValue: The value of the parameter identified by aParamID
     *           aApp: The UID of the calling application.
     * 
     * @returns -   KErrNone: on successful completion.
     *              
     */
    TInt SetValueForParameterL(TInt aParamID, const TInt32 aValue, const TInt32 aApp);
    
    /*
     * Store values of a literal/string type parameter into the database. Currently the function supports set operations on
     * only EPasscodeDisallowSpecific
     * 
     * @Params - aParamID: The Parameter ID 
     *                     (Currently it has to be EPasscodeDisallowSpecific, for anything else an KErrNotSupported is returned)
     *           aParamValues: Multiple values (if any) can be specified through this array.
     *              NOTE: The values contained in this array has to be cleaned explicitly by the caller. (by a call to ResetAndDestroy())
     *              
     *           aApp: The UID of the calling application.
     *           
     * @returns -   KErrNone: on successful completion.           
     */
	TInt SetValuesForParameterL(TInt aParamID, const RPointerArray <HBufC>& aParamValues, const TInt32 aApp);

    /*
     * Returns the value associated with the parameter ID (The 16 shared parameters excepting EPasscodeClearSpecificStrings, 
     * EPasscodeDisallowSpecific and EPasscodeAllowSpecific)
     * 
     * @Params - aParamID: The Parameter ID 
     *                     (Has to be one from the enum list, RTerminalControl3rdPartySession :: TTerminalControl3rdPartyMessages)
     *           aValue: The value of the parameter identified by aParamID
     *           aApp: The UID of the calling application.
     *           
     * @returns -   KErrNone: on successful completion.           
     */
    TInt GetValueForParameterL(TInt aParamID, TInt32& aValue, TInt32& aApp);
    
    
    /*
     * Returns the string/descriptor values associated with the parameter.
     * 
     * @Params - aParamID: The Parameter ID 
     *                     (Currently it has to be EPasscodeDisallowSpecific, for anything else KErrNotSupported is returned)
     *                     
     *           aParamValues: Parameter value(s) as an array
     *              NOTE: The values contained in this array has to be cleaned explicitly by the caller. (by a call to ResetAndDestroy())
     *              
     *           aApp: The UID of the calling application.
     *           
     * @returns -   KErrNone: on successful completion.
     * 
     */
    TInt GetValuesForParameterL(TInt aParamID, RPointerArray <HBufC>& aParamValues, const TInt32 aApp);
    
    /*
     * Returns the list of applications that have currently set one or more values
     * 
     * @Params - aIDArray: Contains the UID's of the applications
     *           
     * @returns -   KErrNone: on successful completion.           
     */    
    TInt GetApplicationIDListL(RArray <TUid>& aIDArray);
    
    /*
     * This function can be called to check if any of the entries made for the descriptor column matches. The case might arise if 
     * multiple applications have set 'DisallowString' values that are same. This function can be called before DropValuesL()
     * to make sure that a shared value is not dropped from the DB.
     * 
     * @Params - aParamValue: The parameter value that needs to be checked.
     *           aApp: The UID of the calling application.
     *           
     * @returns - ETrue if the value is shared, EFalse otherwise (EFalse is returned also if the entry is not availble in the DB).
     */
    TBool IsParamValueSharedL(HBufC* aParamValue, const TInt32 aApp);
    
    /*
     * Removes all the entries corresponding to the values mentioned in the input array from the DB.
     * 
     * @Params - aParamValues: Parameter value(s) that need to be dropped from the DB.
     * 
     *           aApp:  The UID of the calling application (Only the entries of this application are dropped).
     *                  By default, if aApp is not specified, the function drops all the entries that match
     *                  the values mentioned in the input array.
     *           
     * @returns -   KErrNone: on successful completion.
     * 
     * NOTE:    The function by default (if aApp=-1) does not check if the value is shared accross multiple applications. As a safer approach, 
     *          IsParamValueSharedL() can be called on each of the parameter values being passed in the input 
     *          array before a call to this function.     *          
     *          If the function leaves, the parameter aParamValues has to be cleaned explicitly by a call to ResetAndDestroy.           
     * 
     * Currently this function can be called only to drop values set on EPasscodeDisallowSpecific.
     */
    TInt DropValuesL(TInt aParamID, RPointerArray <HBufC>& aParamValues, const TInt32 aApp=-1);
    
    /*
     * Lists the parameters (ID's) that the specified application has set.
     * 
     * @Params -    aParamIds: Contains the list of parameter ID's set by the specified application. 
     *              (All unique parameter ID's is aApp is not specified)
     * 
     *              aApp:  The UID of the calling application. (Optional)
     *           
     * @returns -   KErrNone: on successful completion.
     * 
     */   
    TInt ListParamsUsedByAppL(RArray <TInt>& aParamIds, const TInt32 aApp=-1);
    
    /*
     * Removes all entries of the parameter for the specified application.
     * 
     * @Params - aParamID: ID of the parameter that needs to be dropped.
     * 
     *           aApp:  The UID of the calling application (Only the entries of this application are dropped).
     *                  By default, if aApp is not specified, the function drops all the entries that match
     *                  the parameter ID.
     *           
     * @returns -   KErrNone: on successful completion.
     * 
     */   
    TInt DropValuesL(TInt aParamID, const TInt32 aApp=-1);
    
    /*
     * Provides a dump of all the entries currently available in the DB (For debug purposes only)
     * 
     * @Params - aNumCols:  On return, contains values of all the numeric type columns (PARAMID, APPID, VALUEINT) 
     *                      in column major fashion.
     *           
     *           aDesCols: Contains the values of the descriptor column (VALUEDES).
     * 
     *           aApp:  The UID of the calling application (Only the entries of this application are listed).
     *                  By default, if aApp is not specified, the application lists the entire DB)
     *           
     * @returns -   KErrNone: on successful completion.
     * 
     */
    TInt ListEntriesL(RArray <TInt32>& aNumCols, RPointerArray <HBufC>& aDesCols, const TInt32 aApp=-1);

private:
    CSCPParamDB() {}
    void ConstructL();

    TInt OpenDB();

private:
    RDbs iRdbSession;
    RDbNamedDatabase iParameterDB;
    CDbColSet* iColSet;
    RDbTable iTable;
};

#endif // __CSCPARAMDB_H_