--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/omadmadapters/fota/inc/nsmldmfotaadapterdb.h Tue Jul 06 14:06:19 2010 +0300
@@ -0,0 +1,458 @@
+/*
+* Copyright (c) 2004 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: Fota adapter's DB header file
+*
+*/
+
+
+
+
+
+#ifndef __NSMLDMFOTAADAPTERDB_H
+#define __NSMLDMFOTAADAPTERDB_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+#include <e32base.h>
+#include <d32dbms.h>
+#include <f32file.h>
+#include <SyncMLDef.h>
+#include <fotaengine.h>
+#include <fotaConst.h>
+
+// CONSTANTS
+
+// null final result value
+const TInt KNSmlFotaNullResult = 0;
+
+// Database name & location
+const TInt KNSmlFotaAdapterDbDrive = EDriveC;
+_LIT( KNSmlFotaAdapterDbName, "c:nsmldmfotaadapter.db" );
+
+// Table and column names
+_LIT( KNSmlTableFwMgmtObject, "FwMgmtObject" );
+_LIT( KNSmlFwMgmtObjectId, "PkgId" );
+_LIT( KNSmlFwMgmtObjectName, "PkgName" );
+_LIT( KNSmlFwMgmtObjectVersion, "PkgVersion" );
+_LIT( KNSmlFwMgmtObjectUrl, "PkgURL" );
+_LIT( KNSmlFwMgmtObjectMgmtUri, "MgmtURI" );
+_LIT( KNSmlFwMgmtObjectProfileId, "ProfileId" );
+_LIT( KNSmlFwMgmtObjectServerId, "ServerId" );
+_LIT( KNSmlFwMgmtObjectResult, "FinalResult" );
+_LIT( KNSmlFwMgmtObjectCorrelator, "Correlator" );
+
+// SQL statements
+_LIT( KNSmlCreateFwMgmtObjectTable, "CREATE TABLE FwMgmtObject ( PkgId \
+COUNTER NOT NULL, PkgName CHAR(%d), PkgVersion CHAR(%d), PkgURL LONG VARCHAR, \
+MgmtURI CHAR(%d), ProfileId INTEGER, ServerId CHAR(%d), FinalResult INTEGER, \
+Correlator CHAR(%d) )" );
+
+_LIT( KNSmlGetFwMgmtObject, "SELECT * FROM FwMgmtObject WHERE PkgId = %d" );
+
+_LIT( KNSmlGetUnfinishedFwMgmtObjects, "SELECT * FROM FwMgmtObject \
+WHERE FinalResult = %d" );
+
+_LIT( KNSmlGetUnfinishedFwMgmtObjectByServerId, "SELECT * FROM FwMgmtObject \
+WHERE FinalResult = %d AND ServerId = '%S' AND NOT (MgmtURI = '')" );
+
+_LIT( KNSmlDeleteFwMgmtObject,"DELETE FROM FwMgmtObject WHERE PkgId = %d");
+
+// Max. lengths of string fields in FwMgmtObject
+const TInt KNSmlMaxMgmtUriLength = 60;
+const TInt KNSmlMaxServerIdLength = 150;
+const TInt KNSmlMaxCorrelatorLength = 150;
+
+// Estimate of url size used in max row size (OOD checks)
+const TInt KNSmlPkgURLLengthEstimate = 350;
+
+// space needed for above integers in buffer
+const TInt KNSmlFwMgmtObjectIntLength = 4;
+
+// space needed for an integer in buffer
+const TInt KNSmlFwMgmtObjectIntegerLength = 10;
+
+// Size of empty Fota database in bytes (+ additional treshold)
+const TInt KNSmlFotaAdapterEmptyDbSize = 350;
+
+// Estimated maximum size of FwMgmtObject table row (+ additional treshold)
+const TInt KNSmlMaxFwMgmtObjectRowSize = KFotaMaxPkgNameLength +
+ KFotaMaxPkgVersionLength +
+ KNSmlPkgURLLengthEstimate +
+ KNSmlMaxMgmtUriLength +
+ KNSmlMaxServerIdLength +
+ KNSmlMaxCorrelatorLength + 115;
+
+// TYPEDEFS
+typedef TInt TNSmlDmFwObjectId;
+typedef RArray<TNSmlDmFwObjectId> RNSmlDmFwObjectArray;
+
+
+
+// CLASS DECLARATION
+
+/**
+* CNSmlDmFotaAdapterDb provides an interface for accessing Fota database.
+*
+* @lib nsmldmfotaadapter.lib
+*
+*/
+class CNSmlDmFotaAdapterDb : public CBase
+ {
+
+public:
+
+ /**
+ * Two-phased constructor.
+ * @return A pointer to the newly created instance.
+ */
+ static CNSmlDmFotaAdapterDb* NewL();
+
+ /**
+ * Two-phased constructor. Pushes the pointer onto the CleanupStack.
+ * @return A pointer to the newly created instance.
+ */
+ static CNSmlDmFotaAdapterDb* NewLC();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CNSmlDmFotaAdapterDb();
+
+ /**
+ * Adds a new row (i.e. firmware object) to the FwMgmtObject table.
+ * The values in each column are left NULL, except FinalResult to
+ * KNSmlFotaNullResult.
+ * Leaves with KErrDiskFull, if OOD check fails.
+ * @return The id of the new fw object in Fota database.
+ */
+ TNSmlDmFwObjectId AddFwObjectL();
+
+ /**
+ * Deletes a firmware object from FwMgmtObject table.
+ * @param aId The identifier of the object to be deleted.
+ * @return KErrNone if the object was successfully deleted, KErrNotFound if
+ * the object was not found from database.
+ */
+ TInt DeleteFwObjectL( const TNSmlDmFwObjectId aId );
+
+ /**
+ * Finds all the firmware objects that have null final result and sets
+ * the ids of those objetcs to aArray.
+ * @param aArray that on return contains the ids.
+ */
+ void GetEmptyFinalResultsL( RNSmlDmFwObjectArray& aArray );
+
+ /**
+ * Finds all the firmware objects that have null final result, server id
+ * equals to given server id and mgmt uri is not empty. Sets the ids of
+ * those objetcs to aArray.
+ * @param aArray Array that on return contains the ids.
+ * @param aServerId The id of the server whose empty final result values
+ * are listed.
+ */
+ void GetEmptyFinalResultsL( RNSmlDmFwObjectArray& aArray,
+ const TDesC8& aServerId );
+
+ /**
+ * Fetches the PkgName field of a firmware object from database.
+ * @param aId The identifier of the object, whose data should be fetched.
+ * @return The value in PkgName field of the object, if object was found.
+ * NULL otherwise.
+ */
+ HBufC8* PkgNameL( const TNSmlDmFwObjectId aId );
+
+ /**
+ * Fetches the PkgVersion field of a firmware object from database.
+ * @param aId The identifier of the object, whose data should be fetched.
+ * @return The value in PkgVersion field of the object, if object was found.
+ * NULL otherwise.
+ */
+ HBufC8* PkgVersionL( const TNSmlDmFwObjectId aId );
+
+ /**
+ * Fetches the PkgURL field of a firmware object from database.
+ * @param aId The identifier of the object, whose data should be fetched.
+ * @return The value in PkgURL field of the object, if object was found.
+ * NULL otherwise.
+ */
+ HBufC8* PkgUrlL( const TNSmlDmFwObjectId aId );
+
+ /**
+ * Fetches the MgmtURI field of a firmware object from database.
+ * @param aId The identifier of the object, whose data should be fetched.
+ * @return The value in MgmtURI field of the object, if object was found.
+ * NULL otherwise.
+ */
+ HBufC8* MgmtUriL( const TNSmlDmFwObjectId aId );
+
+ /**
+ * Fetches the ProfileId field of a firmware object from database.
+ * @param aId The identifier of the object, whose data should be fetched.
+ * @return The value in ProfileId field of the object, if object was found.
+ * KErrNotFound otherwise.
+ */
+ TSmlProfileId ProfileIdL( const TNSmlDmFwObjectId aId );
+
+ /**
+ * Fetches the ServerId field of a firmware object from database.
+ * @param aId The identifier of the object, whose data should be fetched.
+ * @return The value in ServerId field of the object, if object was found.
+ * NULL otherwise.
+ */
+ HBufC8* ServerIdL( const TNSmlDmFwObjectId aId );
+
+ /**
+ * Fetches the FinalResult field of a firmware object from database.
+ * @param aId The identifier of the object, whose data should be fetched.
+ * @return The value in FinalResult field of the object, if object was
+ * found. KErrNotFound otherwise.
+ */
+ TInt FinalResultL( const TNSmlDmFwObjectId aId );
+
+ /**
+ * Fetches the Correlator field of a firmware object from database.
+ * @param aId The identifier of the object, whose data should be fetched.
+ * @return The value in Correlator field of the object, if object was
+ * found. NULL otherwise.
+ */
+ HBufC8* CorrelatorL( const TNSmlDmFwObjectId aId );
+
+ /**
+ * Sets the value of PkgName field of a firmware object.
+ * @param aName The new value for the field.
+ * @param aId The identifier of the object, whose data should be updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if the
+ * object was not found. KErrOverflow, if given name is too large for the
+ * database.
+ */
+ TInt SetPkgNameL( const TDesC8& aName, const TNSmlDmFwObjectId aId );
+
+ /**
+ * Sets the value of PkgVersion field of a firmware object.
+ * @param aVersion The new value for the field.
+ * @param aId The identifier of the object, whose data should be updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if the
+ * object was not found. KErrOverflow, if given version is too large
+ * for the database.
+ */
+ TInt SetPkgVersionL( const TDesC8& aVersion, const TNSmlDmFwObjectId aId );
+
+ /**
+ * Sets the value of PkgURL field of a firmware object.
+ * @param aUrl The new value for the field.
+ * @param aId The identifier of the object, whose data should be updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if the
+ * object was not found. KErrOverflow, if given url is too large for the
+ * database.
+ */
+ TInt SetPkgUrlL( const TDesC8& aUrl, const TNSmlDmFwObjectId aId );
+
+ /**
+ * Sets the value of MgmtURI field of a firmware object.
+ * @param aUri The new value for the field.
+ * @param aId The identifier of the object, whose data should be updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if the
+ * object was not found. KErrOverflow, if given uri is too large for the
+ * database.
+ */
+ TInt SetMgmtUriL( const TDesC8& aUri, const TNSmlDmFwObjectId aId );
+
+ /**
+ * Sets the values of ProfileId and ServerId fields of a firmware object.
+ * @param aProfile The new value for the ProfileId.
+ * @param aServerId The new value for the ServerId.
+ * @param aId The identifier of the object, whose data should be updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if the
+ * object was not found. KErrOverflow, if given server id is too large
+ * for the database.
+ */
+ TInt SetServerInfoL( const TSmlProfileId aProfile,
+ const TDesC8& aServerId,
+ const TNSmlDmFwObjectId aId );
+
+ /**
+ * Sets the value of FinalResult field of a firmware object.
+ * @param aResult The new value for the field.
+ * @param aId The identifier of the object, whose data should be updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if the
+ * object was not found.
+ */
+ TInt SetFinalResultL( const TInt aResult, const TNSmlDmFwObjectId aId );
+
+ /**
+ * Sets the value of Correlator field of a firmware object.
+ * @param aCorrelator The new value for the field.
+ * @param aId The identifier of the object, whose data should be updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if the
+ * object was not found. KErrOverflow, if given correlator is too large
+ * for the database.
+ */
+ TInt SetCorrelatorL( const TDesC8& aCorrelator,
+ const TNSmlDmFwObjectId aId );
+
+private:
+
+ /**
+ * Creates Fota database.
+ * @param aFullName Name and path of database.
+ */
+ void CreateDatabaseL( const TDesC& aFullName );
+
+ /**
+ * Sets new value to a text field in a firmware object. This method is used
+ * by the public descriptor setters.
+ * @param aColumn The name of the field to be updated.
+ * @param aValue The new value for the field.
+ * @param aObject The identifier of the object, whose data should be
+ * updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if the
+ * object was not found.
+ */
+ TInt SetStrValueL( const TDesC& aColumn,
+ const TDesC8& aValue,
+ const TNSmlDmFwObjectId aObject );
+
+ /**
+ * Writes using Db streams the new value to a long text field in a
+ * firmware object. This method is used by the public descriptor
+ * setters (PkgURL).
+ * @param aColumn The name of the field to be updated.
+ * @param aValue The new value for the field.
+ * @param aObject The identifier of the object, whose data should
+ * be updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if
+ * the object was not found.
+ */
+ TInt SetLongStrValueL( const TDesC& aColumn,
+ const TDesC8& aValue,
+ const TNSmlDmFwObjectId aObject );
+
+ /**
+ * Sets new value to a integer field in a firmware object. This method
+ * is used by the public integer setters.
+ * @param aColumn The name of the field to be updated.
+ * @param aValue The new value for the field.
+ * @param aObject The identifier of the object, whose data should be
+ * updated.
+ * @return KErrNone, if the update was successful. KErrNotFound, if the
+ * object was not found.
+ */
+ TInt SetIntValueL( const TDesC& aColumn,
+ const TInt aValue,
+ const TNSmlDmFwObjectId aObject );
+
+ /**
+ * Fetches the value in a text field of a firmware object. This method is
+ * used by the public descriptor getters.
+ * @param aColumn The name of the field where the data should be fetched.
+ * @param aObject The identifier of the object, whose data should be
+ * fetched.
+ * @return The value in the field, if object was found. NULL otherwise.
+ */
+ HBufC8* StrValueL( const TDesC& aColumn, const TNSmlDmFwObjectId aObject );
+
+ /**
+ * Fetches the value in a long text field of a firmware object using Db
+ * streams. This method is used by the public descriptor getters (PkgURL).
+ * @param aColumn The name of the field where the data should be fetched.
+ * @param aObject The identifier of the object, whose data should be
+ * fetched.
+ * @return The value in the field, if object was found. NULL otherwise.
+ */
+ HBufC8* LongStrValueL( const TDesC& aColumn,
+ const TNSmlDmFwObjectId aObject );
+
+ /**
+ * Fetches the value in a integer field of a firmware object. This method
+ * is used by the public integer getters.
+ * @param aColumn The name of the field where the data should be fetched.
+ * @param aObject The identifier of the object, whose data should be
+ * fetched.
+ * @return The value in the field, if object was found. KErrNotFound
+ * otherwise.
+ */
+ TInt IntValueL( const TDesC& aColumn, const TNSmlDmFwObjectId aObject );
+
+ /**
+ * Prepares iView with read-only access rights to a single firmware object.
+ * @param aObject The identifier of the object, whose data is about
+ * to be read.
+ */
+ void FetchRowL( const TNSmlDmFwObjectId aObject );
+
+ /**
+ * Prepares iView with update access rights to a single firmware object.
+ * @param aObject The identifier of the object, whose data is about to
+ * be updated.
+ * @return KErrNone, if there were no errors and iView was successfully
+ * prepared.
+ * KErrNotFound, if the firmware object was not found.
+ */
+ TInt UpdateRowL( const TNSmlDmFwObjectId aObject );
+
+ /**
+ * Makes an SQL query string for getting a row from FwMgmtObject table.
+ * @param aId The identifier of the object, which is used in the SQL query.
+ * @return A string containing the formatted SQL query.
+ */
+ HBufC* FwMgmtObjectRowSqlLC( TNSmlDmFwObjectId aId ) const;
+
+ /**
+ * Closes the view and then prepares it with the given values.
+ * @param aSql SQL statement defining the view, which is prepared by
+ * this method.
+ * @param aAccess Permitted operations for the view.
+ */
+ void PrepareViewL( const TDesC& aSql, RDbRowSet::TAccess aAccess );
+
+ /**
+ * Commits update and compacts the database.
+ */
+ void CommitAndCompact();
+
+ /**
+ * Converts a 8-bit descriptor to a 16-bit descriptor, which is allocated
+ * from heap and pushed onto the CleanupStack.
+ * @param aDes Descriptor to be converted.
+ * @return A pointer to the newly allocated copy.
+ */
+ HBufC* ConvertTo16BitLC( const TDesC8& aDes ) const;
+
+ /**
+ * Second phase construction.
+ */
+ void ConstructL();
+
+ /**
+ * Constructor.
+ */
+ CNSmlDmFotaAdapterDb();
+
+private:
+
+ RDbNamedDatabase iDatabase;
+ RFs iFsSession;
+ RDbs iRdbSession;
+
+ RDbTable iFwObjectTable;
+ CDbColSet* iColSet;
+ RDbView iView;
+
+ };
+
+
+#endif // __NSMLDMFOTAADAPTERDB_H
+
+// End of File