presetserver/serverinc/psdatabase.h
changeset 0 09774dfdd46b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presetserver/serverinc/psdatabase.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2006-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:  Preset database used by the preset server
+*
+*/
+
+
+#ifndef R_PSDATABASE_H
+#define R_PSDATABASE_H
+
+#include <d32dbms.h>
+
+class CPSPendingPreset;
+class MPSPresetObserver;
+
+/**
+ * Preset database used by the preset server.
+ *
+ * Handles all database related functionality related to saving and retrieving presets.
+ */
+NONSHARABLE_CLASS( RPSDatabase ) : public RDbNamedDatabase
+    {
+
+public:
+
+    /**
+     * Constructor.
+     *
+     * @param   aObserver   The observer to notify when the database is changed.
+     */
+    RPSDatabase( MPSPresetObserver& aObserver );
+
+    /**
+     * Opens an existing database or creates a new one if it doesn't exist already.
+     *
+     * The directory supplied is created if it doesn't exist.
+     *
+     * @param   aFs         File server session.
+     * @param   aFileName   Full path and file name to the database.
+     */
+    void OpenL( RFs& aFs, const TDesC& aFileName );
+
+    /**
+     * Deletes presets from the database that have no data handler installed for them.
+     *
+     * @param   aDataHandlers       Currently installed data handlers.
+     */
+    void DeleteOrphanedPresetsL( const RArray<TInt>& aDataHandlers );
+
+    /**
+     * Gets a list of presets matching the supplied data handler.
+     *
+     * If <code>KNullUid</code> is supplied as the data handler, all presets from the database are retrieved.
+     *
+     * @param   aPresets        On return, the presets matching the data handler supplied.
+     * @param   aDataHandler    Data handler for the presets, or <code>KNullUid</code> if all presets are to be retrieved.
+     */
+    void GetPresetListL( RArray<TInt>& aPresets, TUid aDataHandler );
+
+    /**
+     * Inserts a new preset into the database.
+     *
+     * The preset with the supplied data handler and index must not exist in the database,
+     * or the call will leave with <code>KErrAlreadyExists</code>.
+     *
+     * @param   aIndex          Index of the preset.
+     * @param   aDataHandler    Data handler of the preset.
+     * @return  The ID of the created preset.
+     */
+    TInt CreatePresetL( TInt aIndex, TUid aDataHandler );
+
+    /**
+     * Deletes a preset from the database.
+     *
+     * @param   aId     ID of the preset to delete.
+     */
+    void DeletePresetL( TInt aId );
+    
+    /**
+     * Commits a pending preset to the database.
+     *
+     * @param   aPreset     The preset to commit.
+     */
+    void CommitPresetL( const CPSPendingPreset& aPreset );
+
+    /**
+     * Moves a preset in the database.
+     *
+     * @param   aId                 ID of the preset to move.
+     * @param   aDestinationIndex   Index to move the preset to.
+     */
+    void MovePresetL( TInt aId, TInt aDestinationIndex );
+
+    /**
+     * Returns the name of a preset.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Name of the preset, ownership is transferred to the caller.
+     */
+    HBufC* PresetNameL( TInt aId );
+
+    /**
+     * Returns the length of a preset's name.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Length of the preset's name.
+     */
+    TInt PresetNameLengthL( TInt aId );
+
+    /**
+     * Returns the index of a preset.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Index of the preset.
+     */
+    TInt PresetIndexL( TInt aId );
+
+    /**
+     * Returns the data handler of a preset.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Data handler of the preset.
+     */
+    TUid PresetDataHandlerL( TInt aId );
+
+    /**
+     * Returns the data of a preset.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Data of the preset, ownership is transferred to the caller.
+     */
+    HBufC8* PresetDataL( TInt aId );    
+
+    /**
+     * Returns the length of a preset's data.
+     *
+     * @param   aId     ID of the preset.
+     * @return  Length of the preset's data.
+     */
+    TInt PresetDataLengthL( TInt aId );
+
+private:
+
+    /**
+     * Returns the length of a column in the database.
+     *
+     * @param   aColumn     The column to return the length of.
+     * @param   aId         ID of the preset.
+     * @return  Length of the column.
+     */
+    TInt ColumnLengthL( const TDesC& aColumn, TInt aId );
+
+    /**
+     * Returns the current database version.
+     *
+     * @return  The current database version.
+     */
+    TInt CurrentDatabaseVersionL();
+
+    /**
+     * Updates the database version.
+     *
+     * @param   aVersion    Dtabase version to update to.
+     */
+    void UpdateDatabaseVersionL( TInt aVersion );
+
+    /**
+     * Runs all update functions on the database.
+     */
+    void UpdateDatabaseL();
+
+    /**
+     * Database version 1 update function.
+     *
+     * Creates the tables in the database as they were defined.
+     */
+    void CreateTablesL();
+
+    /**
+     * Prints database information to debug output.
+     */
+    void PrintDatabaseL();
+
+private:
+
+    /** The observer that is notified upon changes in the database. */
+    MPSPresetObserver& iObserver;
+
+    /** Database update function pointer. */
+    typedef void (RPSDatabase::*KPSDatabaseUpdateFunction)();
+    
+    /** Supported database update functions. */
+    static const KPSDatabaseUpdateFunction iDatabaseUpdateFunctions[];
+
+    };
+
+#endif // R_PSDATABASE_H