--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/ds/settings/src/NSmlDSProfile.cpp Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,1242 @@
+/*
+* 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: DS-settings
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <sysutil.h>
+
+#include <nsmlconstants.h>
+#include <nsmldsconstants.h>
+#include "nsmldssettings.h"
+
+
+//=============================================
+//
+// CNSmlDSProfile
+//
+//=============================================
+
+//=============================================
+// CNSmlDSProfile::NewL()
+// Creates a new instance of CNSmlDSProfile object.
+//=============================================
+
+CNSmlDSProfile* CNSmlDSProfile::NewL( RDbNamedDatabase* aDatabase )
+ {
+ CNSmlDSProfile* self = CNSmlDSProfile::NewLC( aDatabase );
+ CleanupStack::Pop();
+ return self;
+ }
+
+//=============================================
+// CNSmlDSProfile::NewLC()
+// Creates a new instance of CNSmlDSProfile object.
+// Pushes and leaves new instance into CleanupStack.
+//=============================================
+
+CNSmlDSProfile* CNSmlDSProfile::NewLC( RDbNamedDatabase* aDatabase )
+ {
+ CNSmlDSProfile* self = new( ELeave ) CNSmlDSProfile;
+ CleanupStack::PushL( self );
+ self->ConstructL( aDatabase );
+ return self;
+ }
+
+//=============================================
+// CNSmlDSProfile::ConstructL()
+// Second phase constructor.
+//=============================================
+
+void CNSmlDSProfile::ConstructL( RDbNamedDatabase* aDatabase )
+ {
+ iDatabase = aDatabase;
+ iId = KNSmlNewObject;
+
+ User::LeaveIfError( iTableProfiles.Open( *iDatabase, KNSmlTableProfiles ) );
+ iColSetProfiles = iTableProfiles.ColSetL();
+
+ User::LeaveIfError( iTableAdapters.Open( *iDatabase, KNSmlTableAdapters ) );
+ iColSetAdapters = iTableAdapters.ColSetL();
+
+ iDisplayName = HBufC::NewL( KNSmlMaxProfileNameLength );
+ iSyncServerUsername = HBufC::NewL( KNSmlMaxUsernameLength );
+ iSyncServerPassword = HBufC::NewL( KNSmlMaxPasswordLength );
+ iServerURL = HBufC::NewL( KNSmlMaxURLLength );
+ iServerId = HBufC::NewL( KNSmlMaxServerIdLength );
+
+ iHttpAuthUsername = HBufC::NewL( KNSmlMaxHttpAuthUsernameLength );
+ iHttpAuthPassword = HBufC::NewL( KNSmlMaxHttpAuthPasswordLength );
+
+ iContentTypes = new ( ELeave ) CArrayPtrFlat<CNSmlDSContentType>( KSmlArrayGranularity );
+ }
+
+//=============================================
+// CNSmlDSProfile::~CNSmlDSProfile()
+// Destructor.
+//=============================================
+
+EXPORT_C CNSmlDSProfile::~CNSmlDSProfile()
+ {
+ delete iDisplayName;
+ delete iSyncServerUsername;
+ delete iSyncServerPassword;
+ delete iServerURL;
+ delete iServerId;
+
+ delete iHttpAuthUsername;
+ delete iHttpAuthPassword;
+
+ iView.Close();
+ iRSView.Close();
+ iWSView.Close();
+
+ delete iColSetProfiles;
+ delete iColSetAdapters;
+
+ iTableAdapters.Close();
+ iTableProfiles.Close();
+
+ iContentTypes->ResetAndDestroy();
+ delete iContentTypes;
+ }
+
+//=============================================
+// CNSmlDSProfile::AddContentTypeL()
+// Appends a new content type to iContentTypes -list,
+// if it doesn't exist before.
+//=============================================
+
+ EXPORT_C CNSmlDSContentType* CNSmlDSProfile::AddContentTypeL( TInt aImplementationUID, TDesC& aClientDataSource, TDesC& aServerDataSource )
+ {
+ if ( ContentType( aImplementationUID ) ) // Check if type already on the list
+ {
+ return NULL;
+ }
+
+ iAdapterId = KNSmlNewObject;
+
+ iContentTypes->AppendL( CNSmlDSContentType::NewLC( this->iDatabase ) );
+ CleanupStack::Pop();
+
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterTableId, iAdapterId);
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterProfileId, iId);
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterImplementationId, aImplementationUID);
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterEnabled, TRUE);
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterCreatorId, iCreatorId);
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetStrValue( EDSAdapterServerDataSource, aServerDataSource );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetStrValue( EDSAdapterClientDataSource, aClientDataSource );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterFilterMatchType, ESyncMLMatchDisabled );
+
+ return iContentTypes->At( iContentTypes->Count() - 1 );
+ }
+
+//=============================================
+// CNSmlDSProfile::ContentType()
+// Returns a pointer to a CNSmlDSContentType
+// object with given ImplementationUID.
+//=============================================
+
+EXPORT_C CNSmlDSContentType* CNSmlDSProfile::ContentType( TInt aImplementationUID ) const
+ {
+ for ( TInt i = 0; i < iContentTypes->Count(); i++ )
+ {
+ if ( iContentTypes->At( i )->IntValue( EDSAdapterImplementationId ) == aImplementationUID )
+ {
+ return iContentTypes->At( i );
+ }
+ }
+
+ return NULL;
+ }
+
+//=============================================
+// CNSmlDSProfile::ContentTypeId()
+// Returns a pointer to a CNSmlDSContentType
+// object with given content id.
+//=============================================
+
+EXPORT_C CNSmlDSContentType* CNSmlDSProfile::ContentTypeId( TInt aId ) const
+ {
+ for ( TInt i = 0; i < iContentTypes->Count(); i++ )
+ {
+ if ( iContentTypes->At( i )->IntValue( EDSAdapterTableId ) == aId )
+ {
+ return iContentTypes->At( i );
+ }
+ }
+ return NULL;
+ }
+
+//=============================================
+// CNSmlDSProfile::DeleteContentTypeL()
+// Delete object with given task id.
+//
+//=============================================
+
+EXPORT_C TBool CNSmlDSProfile::DeleteContentTypeL( TInt aTaskId )
+ {
+ HBufC* sqlStatement = HBufC::NewLC( KDSSQLGetAdapterId().Length() + KNSmlDsSettingsMaxIntegerLength);
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ TInt err;
+
+ for ( TInt i = 0; i < iContentTypes->Count(); i++ )
+ {
+ if ( iContentTypes->At( i )->IntValue( EDSAdapterTableId ) == aTaskId )
+ {
+//
+// Remove first from database
+//
+ iDatabase->Begin();
+
+ sqlStatementPtr.Format( KDSSQLGetAdapterId, aTaskId );
+
+ PrepareViewL( sqlStatementPtr, iView.EUpdatable );
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ iAdapterId = iView.ColUint( iColSetAdapters->ColNo( KNSmlAdapterId ) );
+ }
+
+ sqlStatementPtr.Format( KDSSQLDeleteAdapterById, iAdapterId );
+ err = iDatabase->Execute( sqlStatementPtr );
+ CleanupStack::PopAndDestroy(); // sqlStatement
+ if ( err < KErrNone )
+ {
+ iDatabase->Rollback();
+ return EFalse;
+ }
+
+ CommitAndCompact();
+//
+// Delete object from list
+//
+ CNSmlDSContentType* contentType = ContentTypeId( iAdapterId );
+ delete contentType;
+ contentType = 0;
+//
+// Remove it also from list
+//
+ iContentTypes->Delete( i );
+ iContentTypes->Compress();
+
+ return ETrue;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+ return EFalse;
+ }
+
+
+//=============================================
+// CNSmlDSProfile::SaveL()
+// Saves a profile ie. writes all profile data to the database.
+// If save is successful returns KErrNone,
+// otherwise returns negative integer (defined in EPOC error codes).
+//=============================================
+
+EXPORT_C TInt CNSmlDSProfile::SaveL()
+ {
+
+ if ( iDatabase->InTransaction() )
+ {
+ return ( KErrAccessDenied );
+ }
+
+ iDatabase->Begin();
+
+ CNSmlDSCrypt* crypt = new( ELeave ) CNSmlDSCrypt;
+ CleanupStack::PushL( crypt );
+
+ if ( iId == KNSmlNewObject )
+ {
+ // Check OOD before saving a New profile
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+ CleanupClosePushL(fs);
+
+ if (SysUtil::FFSSpaceBelowCriticalLevelL(&fs, KNSmlDsSettingsFatMinSize))
+ {
+ CleanupStack::PopAndDestroy(2); // fs, crypt
+ iDatabase->Rollback();
+ return KErrDiskFull;
+ // do not write
+ }
+ CleanupStack::PopAndDestroy(); //fs
+
+ //new profile
+ iTableProfiles.InsertL();
+
+ TableProfilesSetColDesL( KNSmlDSProfileDisplayName, *iDisplayName );
+ TableProfilesSetColIntL( KNSmlDSProfileTransportId, iTransportId );
+ TableProfilesSetColIntL( KNSmlDSProfileIAPId, iIAPId );
+
+ TableProfilesSetColDesL( KNSmlDSProfileSyncServerUsername, *iSyncServerUsername );
+ TableProfilesSetColDesL( KNSmlDSProfileSyncServerPassword, crypt->EncryptedL( *iSyncServerPassword) );
+
+ TableProfilesSetColDesL( KNSmlDSProfileServerURL, *iServerURL );
+ TableProfilesSetColDesL( KNSmlDSProfileServerId, *iServerId );
+
+ TableProfilesSetColIntL( KNSmlDSProfileServerAlertedAction, iServerAlertedAction );
+ TableProfilesSetColIntL( KNSmlDSProfileDeleteAllowed, iDeleteAllowed );
+ TableProfilesSetColIntL( KNSmlDSProfileHidden, iProfileHidden );
+
+ TableProfilesSetColIntL( KNSmlDSProfileHttpAuthUsed, iHttpAuthUsed );
+ TableProfilesSetColDesL( KNSmlDSProfileHttpAuthUsername, *iHttpAuthUsername );
+ TableProfilesSetColDesL( KNSmlDSProfileHttpAuthPassword, crypt->EncryptedL( *iHttpAuthPassword) );
+ TableProfilesSetColIntL( KNSmlDSProfileAutoChangeIAP, iAutoChangeIAP );
+ TableProfilesSetColIntL( KNSmlDSProfileCreatorID, iCreatorId );
+
+ HBufC* v = GetVisibilityStrL();
+ CleanupStack::PushL(v);
+ TableProfilesSetColDesL( KNSmlDSProfileVisibilityStr, *v);
+ CleanupStack::PopAndDestroy(); // v
+
+ TableProfilesSetColIntL( KNSmlDSProfileProtocolVersion, iProtocolVersion );
+
+ TBuf<64> sqlStatement;
+ sqlStatement.Format( KDSSQLCountProfiles );
+ PrepareViewL( sqlStatement, iView.EReadOnly );
+
+ iId = iTableProfiles.ColUint( iColSetProfiles->ColNo( KNSmlDSProfileId) ); // Use autoincrement
+
+ iTableProfiles.PutL();
+
+ for ( TInt i = 0; i < iContentTypes->Count(); i++ )
+ {
+ if( iContentTypes->At(i)->StrValue( EDSAdapterClientDataSource ).Compare(
+ iContentTypes->At(i)->StrValue( EDSAdapterServerDataSource ) ) == 0 )
+ {
+ iDatabase->Rollback();
+ CleanupStack::PopAndDestroy(); //crypt
+ return KErrArgument;
+ }
+ InsertTableAdaptersL( i );
+
+ }
+ }
+ else
+ {
+ //existing profile
+ TBuf<64> sqlStatement;
+ sqlStatement.Format( KDSSQLGetProfile, iId );
+
+ PrepareViewL( sqlStatement, iView.EUpdatable );
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ iView.UpdateL();
+
+ ViewSetColDesL( KNSmlDSProfileDisplayName, *iDisplayName );
+ ViewSetColIntL( KNSmlDSProfileTransportId, iTransportId );
+ ViewSetColIntL( KNSmlDSProfileIAPId, iIAPId );
+ ViewSetColDesL( KNSmlDSProfileSyncServerUsername, *iSyncServerUsername );
+ ViewSetColDesL( KNSmlDSProfileSyncServerPassword, crypt->EncryptedL( *iSyncServerPassword ) );
+ ViewSetColDesL( KNSmlDSProfileServerURL, *iServerURL );
+ ViewSetColDesL( KNSmlDSProfileServerId, *iServerId );
+
+ ViewSetColIntL( KNSmlDSProfileServerAlertedAction, iServerAlertedAction );
+ ViewSetColIntL( KNSmlDSProfileDeleteAllowed, iDeleteAllowed );
+ ViewSetColIntL( KNSmlDSProfileHidden, iProfileHidden );
+
+ ViewSetColIntL( KNSmlDSProfileHttpAuthUsed, iHttpAuthUsed );
+ ViewSetColDesL( KNSmlDSProfileHttpAuthUsername, *iHttpAuthUsername );
+ ViewSetColDesL( KNSmlDSProfileHttpAuthPassword, crypt->EncryptedL( *iHttpAuthPassword) );
+ ViewSetColIntL( KNSmlDSProfileAutoChangeIAP, iAutoChangeIAP );
+ ViewSetColIntL( KNSmlDSProfileCreatorID, iCreatorId );
+
+ HBufC* v = GetVisibilityStrL();
+ CleanupStack::PushL(v);
+ ViewSetColDesL( KNSmlDSProfileVisibilityStr, *v);
+ CleanupStack::PopAndDestroy(); // v
+
+ ViewSetColIntL( KNSmlDSProfileProtocolVersion, iProtocolVersion );
+
+ iView.PutL();
+ }
+ else
+ {
+ iDatabase->Rollback();
+ CleanupStack::PopAndDestroy(); //crypt
+ return KErrNotFound;
+ }
+
+ for ( TInt i = 0; i < iContentTypes->Count(); i++ )
+ {
+ if( iContentTypes->At(i)->StrValue( EDSAdapterClientDataSource ).Compare(
+ iContentTypes->At(i)->StrValue( EDSAdapterServerDataSource ) ) == 0 )
+ {
+ iDatabase->Rollback();
+ CleanupStack::PopAndDestroy(); //crypt
+ return KErrArgument;
+ }
+ if ( iContentTypes->At( i )->IntValue( EDSAdapterTableId ) == KNSmlNewObject )
+ {
+ //existing profile & new contentType
+ InsertTableAdaptersL( i );
+ }
+ else
+ {
+ //existing profile & existing contentType
+ sqlStatement.Format( KDSSQLFindContentType, iContentTypes->At( i )->IntValue( EDSAdapterTableId ) );
+
+ PrepareViewL( sqlStatement, iView.EUpdatable );
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ iView.UpdateL();
+
+ iView.SetColL( iColSetAdapters->ColNo( KNSmlAdapterEnabled ), ( TInt ) iContentTypes->At( i )->IntValue( EDSAdapterEnabled ) );
+ iView.SetColL( iColSetAdapters->ColNo( KNSmlAdapterImlementationUID ), ( TInt ) iContentTypes->At( i )->IntValue( EDSAdapterImplementationId ) );
+ iView.SetColL( iColSetAdapters->ColNo( KNSmlAdapterCreatorID ), ( TInt ) iContentTypes->At( i )->IntValue( EDSAdapterCreatorId ) );
+ iView.SetColL( iColSetAdapters->ColNo( KNSmlAdapterDisplayName ), iContentTypes->At( i )->StrValue( EDSAdapterDisplayName ) );
+ iView.SetColL( iColSetAdapters->ColNo( KNSmlAdapterClientDataSource ), iContentTypes->At( i )->StrValue( EDSAdapterClientDataSource ) );
+ iView.SetColL( iColSetAdapters->ColNo( KNSmlAdapterServerDataSource ), iContentTypes->At( i )->StrValue( EDSAdapterServerDataSource ) );
+ iView.SetColL( iColSetAdapters->ColNo( KNSmlAdapterSyncType ), ( TInt ) iContentTypes->At( i )->IntValue( EDSAdapterSyncType ) );
+ iView.SetColL( iColSetAdapters->ColNo( KNSmlAdapterFilterMatchType ), ( TInt ) iContentTypes->At( i )->IntValue( EDSAdapterFilterMatchType ) );
+ iView.PutL();
+ }
+ else
+ {
+ iDatabase->Rollback();
+ CleanupStack::PopAndDestroy(); //crypt
+ return KErrNotFound;
+ }
+ }
+
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); //crypt
+ CommitAndCompact();
+
+ return KErrNone;
+ }
+
+//=============================================
+// CNSmlDSProfile::IsNew()
+// Returns true if profile is new, otherwise false.
+//=============================================
+
+EXPORT_C TBool CNSmlDSProfile::IsNew() const
+ {
+ return ( iId == KNSmlNewObject );
+ }
+
+//=============================================
+// CNSmlDSProfile::SetHiddenL()
+// Returns true if update done otherwise false.
+//=============================================
+
+EXPORT_C TBool CNSmlDSProfile::SetHiddenL(TBool aHidden)
+ {
+ TBool ret = EFalse;
+
+ if (iId < 1)
+ {
+ return ret;
+ }
+
+ HBufC* sqlStatement = HBufC::NewLC( KDSSQLGetProfile().Length() + KNSmlDsSettingsMaxIntegerLength);
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDSSQLGetProfile, iId );
+
+ PrepareViewL( sqlStatementPtr, iView.EUpdatable );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ iView.UpdateL();
+ iView.SetColL( iColSetProfiles->ColNo( KNSmlDSProfileHidden ), aHidden );
+ iView.PutL();
+
+ ret = ETrue;
+
+ // Also profile value set for SaveL()
+ SetIntValue( EDSProfileHidden, aHidden);
+ }
+
+ return ret;
+ }
+
+//=============================================
+// CNSmlDSProfile::IsNullL()
+// Returns true if profile data is NULL,
+// otherwise false.
+//=============================================
+
+EXPORT_C TBool CNSmlDSProfile::IsNullL( const TDesC& aFieldName )
+ {
+ HBufC* sqlStatement = HBufC::NewLC( KDSSQLGetProfile().Length() + KNSmlDsSettingsMaxIntegerLength);
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDSSQLGetProfile, iId );
+
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ if ( iView.IsColNull( iColSetProfiles->ColNo( aFieldName ) ) )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+//=============================================
+// CNSmlDSProfile::StrValue()
+// Returns a given string value.
+//=============================================
+
+EXPORT_C const TDesC& CNSmlDSProfile::StrValue( TNSmlDSProfileData aProfileItem ) const
+ {
+ HBufC* result = 0;
+ switch ( aProfileItem )
+ {
+ case ( EDSProfileDisplayName ) :
+ {
+ result = iDisplayName;
+ }
+ break;
+
+ case ( EDSProfileSyncServerUsername ) :
+ {
+ result = iSyncServerUsername;
+ }
+ break;
+
+ case ( EDSProfileSyncServerPassword ) :
+ {
+ result = iSyncServerPassword;
+ }
+ break;
+
+ case ( EDSProfileServerURL ) :
+ {
+ result = iServerURL;
+ }
+ break;
+
+ case ( EDSProfileServerId ) :
+ {
+ result = iServerId;
+ }
+ break;
+
+ case ( EDSProfileHttpAuthUsername ) :
+ {
+ result = iHttpAuthUsername;
+ }
+ break;
+
+ case ( EDSProfileHttpAuthPassword ) :
+ {
+ result = iHttpAuthPassword;
+ }
+ break;
+
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ return *result;
+ }
+
+//=============================================
+// CNSmlDSProfile::IntValue()
+// Returns a given int value.
+//=============================================
+
+EXPORT_C TInt CNSmlDSProfile::IntValue( TNSmlDSProfileData aProfileItem ) const
+ {
+ TInt result( 0 );
+ switch ( aProfileItem )
+ {
+ case ( EDSProfileId ) :
+ {
+ result = iId;
+ }
+ break;
+
+ case ( EDSProfileIAPId ) :
+ {
+ result = iIAPId;
+ }
+ break;
+
+ case ( EDSProfileTransportId ) :
+ {
+ result = iTransportId;
+ }
+ break;
+
+ case ( EDSProfileServerAlertedAction ) :
+ {
+ result = iServerAlertedAction;
+ }
+ break;
+
+ case ( EDSProfileDeleteAllowed ) :
+ {
+ result = iDeleteAllowed;
+ }
+ break;
+
+ case ( EDSProfileHidden ) :
+ {
+ result = iProfileHidden;
+ }
+ break;
+
+ case ( EDSProfileHttpAuthUsed ) :
+ {
+ result = iHttpAuthUsed;
+ }
+ break;
+
+ case ( EDSProfileAutoChangeIAP ) :
+ {
+ result = iAutoChangeIAP;
+ }
+ break;
+
+ case ( EDSProfileProtocolVersion ) :
+ {
+ result = iProtocolVersion;
+ }
+ break;
+
+ case ( EDSProfileCreatorId ) :
+ {
+ result = iCreatorId;
+ }
+ break;
+
+ case ( EDSProfileDefaultProfile ) :
+ {
+ result = iDefaultProfile;
+ }
+ break;
+
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ return result;
+ }
+
+//=============================================
+// CNSmlDSProfile::SetStrValue()
+// Sets a given string value.
+//=============================================
+
+EXPORT_C void CNSmlDSProfile::SetStrValue( TNSmlDSProfileData aProfileItem, const TDesC& aNewValue )
+ {
+ switch ( aProfileItem )
+ {
+ case ( EDSProfileDisplayName ) :
+ {
+ *iDisplayName = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileSyncServerUsername ) :
+ {
+ *iSyncServerUsername = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileSyncServerPassword ) :
+ {
+ *iSyncServerPassword = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileServerURL ) :
+ {
+ *iServerURL = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileServerId ) :
+ {
+ *iServerId = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileHttpAuthUsername ) :
+ {
+ *iHttpAuthUsername = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileHttpAuthPassword ) :
+ {
+ *iHttpAuthPassword = aNewValue;
+ }
+ break;
+
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ }
+
+//=============================================
+// CNSmlDSProfile::SetIntValue()
+// Sets a given int value.
+//=============================================
+
+EXPORT_C void CNSmlDSProfile::SetIntValue( TNSmlDSProfileData aProfileItem, const TInt aNewValue )
+ {
+ switch ( aProfileItem )
+ {
+ case ( EDSProfileId ) :
+ {
+ iId = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileIAPId ) :
+ {
+ iIAPId = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileTransportId ) :
+ {
+ iTransportId = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileServerAlertedAction ) :
+ {
+ iServerAlertedAction = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileDeleteAllowed ) :
+ {
+ iDeleteAllowed = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileHidden ) :
+ {
+ iProfileHidden = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileHttpAuthUsed ) :
+ {
+ iHttpAuthUsed = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileAutoChangeIAP ) :
+ {
+ iAutoChangeIAP = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileProtocolVersion ) :
+ {
+ iProtocolVersion = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileCreatorId ) :
+ {
+ iCreatorId = aNewValue;
+ }
+ break;
+
+ case ( EDSProfileDefaultProfile ) :
+ {
+ iDefaultProfile = aNewValue;
+ }
+ break;
+
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ }
+
+//=============================================
+// CNSmlDSProfile::Visibility()
+// Returns the visibility of the given
+// dataitem.
+//=============================================
+
+EXPORT_C TNSmlDSFieldVisibility CNSmlDSProfile::Visibility( TNSmlDSProfileData aProfileItem ) const
+ {
+
+ TInt index = (TInt)aProfileItem;
+
+ if (index >= iVisibilityArray.Count() || index < 0)
+ {
+ // unknown field. TNSmlDSProfileData-enum has been changed without changing
+ // the size of iVisibilityArray, or negative
+ // values has been assigned to some of those fields
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+
+ return iVisibilityArray[index];
+ }
+
+//=============================================
+// CNSmlDSProfile::SetVisibility()
+// Sets the visibility of the given
+// dataitem.
+//=============================================
+
+EXPORT_C void CNSmlDSProfile::SetVisibility( TNSmlDSProfileData aProfileItem,
+ const TNSmlDSFieldVisibility aVisibility )
+ {
+
+ TInt index = (TInt)aProfileItem;
+
+ if (index >= iVisibilityArray.Count() || index < 0)
+ {
+ // unknown field. TNSmlDSProfileData-enum has been changed without changing
+ // the size of iVisibilityArray, or negative
+ // values has been assigned to some of those fields
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+
+ iVisibilityArray[index] = aVisibility;
+ }
+
+//=============================================
+// CNSmlDSProfile::InitVisibilityArray()
+// Method for initializing the
+// visibilityArray, i.e. parses the given
+// string's characters and maps them to
+// dataitem's visibilities.
+//=============================================
+
+void CNSmlDSProfile::InitVisibilityArray( const TDesC& aVisibilityStr )
+ {
+
+ if ( aVisibilityStr.Length() != iVisibilityArray.Count())
+ {
+ // The given string must be equal in size to visibilityarray, otherwise
+ // there is something wrong with the format
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+
+ for (TInt i=0; i < aVisibilityStr.Length(); ++i)
+ {
+ iVisibilityArray[i] = CharToVisibility( aVisibilityStr[i] );
+ }
+
+ }
+
+//=============================================
+// CNSmlDSProfile::GetVisibilityStrL()
+// Return the visibility array as a
+// string (the form in which it is written
+// and read from the database).
+//=============================================
+
+HBufC* CNSmlDSProfile::GetVisibilityStrL() const
+ {
+
+ HBufC* result = HBufC::NewL(KNSmlDSVisibilityArraySize);
+ TPtr ptr = result->Des();
+
+ for (TInt i=0; i < iVisibilityArray.Count(); ++i)
+ {
+ ptr += VisibilityToChar( iVisibilityArray[i] );
+ }
+
+ return result;
+ }
+
+//=============================================
+// CNSmlDSProfile::CharToVisibility()
+// Turns the given char into
+// TNSmlDSFieldVisibility.
+//=============================================
+TNSmlDSFieldVisibility CNSmlDSProfile::CharToVisibility( const TText aCh ) const
+ {
+ switch ( aCh )
+ {
+ case KNSmlDSNormalChar:
+ {
+ return EVisibilityNormal;
+ }
+ case KNSmlDSReadOnlyChar:
+ {
+ return EVisibilityReadOnly;
+ }
+ case KNSmlDSHiddenChar:
+ {
+ return EVisibilityHidden;
+ }
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ return EVisibilityNormal;
+ }
+ }
+ }
+
+
+//=============================================
+// CNSmlDSProfile::VisibilityToChar()
+// Turns the given visibility into char.
+//=============================================
+TPtrC CNSmlDSProfile::VisibilityToChar( const TNSmlDSFieldVisibility aVisibility ) const
+ {
+ switch (aVisibility)
+ {
+ case EVisibilityNormal:
+ {
+ return KNSmlDSVisibilityNormal();
+ }
+ case EVisibilityReadOnly:
+ {
+ return KNSmlDSVisibilityReadOnly();
+ }
+ case EVisibilityHidden:
+ {
+ return KNSmlDSVisibilityHidden();
+ }
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ return KNullDesC();
+ }
+ }
+ }
+
+//=============================================
+// CNSmlDSProfile::HasLogL()
+// Returns true if profile has Log-data,
+// otherwise false.
+//=============================================
+
+EXPORT_C TBool CNSmlDSProfile::HasLogL()
+ {
+ HBufC* sqlStatement = HBufC::NewLC( KDSSQLGetProfile().Length() + KNSmlDsSettingsMaxIntegerLength);
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDSSQLGetProfile, iId );
+
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ if ( iView.IsColNull( iColSetProfiles->ColNo( KNSmlDSProfileLog ) ) )
+ {
+ return EFalse;
+ }
+ }
+ return ETrue;
+ }
+
+//=============================================
+// CNSmlDSProfile::LogReadStreamL()
+// Reads log-data from database
+//=============================================
+EXPORT_C RReadStream& CNSmlDSProfile::LogReadStreamL()
+{
+ HBufC* sqlStatement = HBufC::NewLC( KDSSQLGetProfile().Length() + KNSmlDsSettingsMaxIntegerLength);
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format(KDSSQLGetProfile, iId);
+
+ User::LeaveIfError(iRSView.Prepare(*iDatabase, TDbQuery( sqlStatementPtr ), RDbRowSet::EReadOnly));
+ User::LeaveIfError(iRSView.EvaluateAll());
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ // Get the structure of rowset
+ CDbColSet* colSet = iRSView.ColSetL();
+ TDbColNo col = colSet->ColNo(KNSmlDSProfileLog()); // Ordinal position of long column
+ delete colSet;
+ colSet = NULL;
+
+ // get row
+ if( iRSView.FirstL() )
+ {
+ iRSView.GetL();
+ iRs.OpenL(iRSView, col);
+ }
+
+ return iRs;
+}
+
+//=============================================
+// CNSmlDSProfile::LogWriteStreamL()
+// Writes given stream-data to database
+//=============================================
+
+EXPORT_C RWriteStream& CNSmlDSProfile::LogWriteStreamL()
+ {
+ HBufC* sqlStatement = HBufC::NewLC( KDSSQLGetProfile().Length() + KNSmlDsSettingsMaxIntegerLength);
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format(KDSSQLGetProfile, iId);
+
+ // create a view on the database
+ User::LeaveIfError(iWSView.Prepare(*iDatabase, TDbQuery(sqlStatementPtr), RDbRowSet::EUpdatable));
+ User::LeaveIfError(iWSView.EvaluateAll());
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ // Get the structure of rowset
+ CDbColSet* colSet = iWSView.ColSetL();
+ TDbColNo col = colSet->ColNo(KNSmlDSProfileLog()); // Ordinal position of long column
+ delete colSet;
+ colSet = NULL;
+
+ // get row
+ iDatabase->Begin();
+ if( iWSView.FirstL() )
+ {
+ iWSView.GetL();
+ iWSView.UpdateL();
+ iWs.OpenL(iWSView, col);
+ }
+
+ return iWs;
+ }
+
+
+//=============================================
+// CNSmlDSProfile::WriteStreamCommitL()
+//
+//
+//=============================================
+EXPORT_C void CNSmlDSProfile::WriteStreamCommitL()
+ {
+ iWSView.PutL();
+ iWSView.Close();
+ CommitAndCompact();
+ }
+
+//=============================================
+// CNSmlDSProfile::PrepareViewL()
+// Closes and prepares the view
+//
+//=============================================
+void CNSmlDSProfile::PrepareViewL( const TDesC& aSql, RDbRowSet::TAccess aAccess )
+ {
+ iView.Close();
+ User::LeaveIfError( iView.Prepare( *iDatabase, TDbQuery( aSql ), aAccess ) );
+ }
+
+//=============================================
+// CNSmlDSProfile::UpdateToDeleteAllowedL()
+//
+//
+//=============================================
+void CNSmlDSProfile::UpdateToDeleteAllowedL()
+ {
+ iView.GetL();
+ iView.UpdateL();
+ iView.SetColL( iColSetProfiles->ColNo( KNSmlDSProfileDeleteAllowed ), ( TInt ) EDSAllowed );
+ iView.PutL();
+ }
+
+//=============================================
+// CNSmlDSProfile::CommitAndCompact
+// Commits update and compacts the database
+//
+//=============================================
+void CNSmlDSProfile::CommitAndCompact()
+ {
+ iDatabase->Commit();
+ iDatabase->Compact();
+ }
+
+//=============================================
+// CNSmlDSProfile::ResetContentTypesL()
+//
+//
+//=============================================
+void CNSmlDSProfile::ResetContentTypesL()
+ {
+ iView.GetL();
+ iContentTypes->AppendL( CNSmlDSContentType::NewLC( this->iDatabase ) );
+ CleanupStack::Pop();
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterTableId, iView.ColUint( iColSetAdapters->ColNo( KNSmlAdapterId ) ) );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterProfileId, iView.ColInt( iColSetAdapters->ColNo( KNSmlAdapterProfileId ) ) );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterImplementationId, iView.ColUint( iColSetAdapters->ColNo( KNSmlAdapterImlementationUID ) ) );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterEnabled, iView.ColInt( iColSetAdapters->ColNo( KNSmlAdapterEnabled) ) );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterCreatorId, iView.ColInt( iColSetAdapters->ColNo( KNSmlAdapterCreatorID) ) );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetStrValue( EDSAdapterDisplayName, iView.ColDes( iColSetAdapters->ColNo( KNSmlAdapterDisplayName) ) );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetStrValue( EDSAdapterServerDataSource, iView.ColDes( iColSetAdapters->ColNo( KNSmlAdapterServerDataSource) ) );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetStrValue( EDSAdapterClientDataSource, iView.ColDes( iColSetAdapters->ColNo( KNSmlAdapterClientDataSource) ) );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterSyncType, iView.ColInt( iColSetAdapters->ColNo( KNSmlAdapterSyncType) ) );
+ ( iContentTypes->At( iContentTypes->Count() -1 ) )->SetIntValue( EDSAdapterFilterMatchType, iView.ColInt( iColSetAdapters->ColNo( KNSmlAdapterFilterMatchType) ) );
+ }
+
+//=============================================
+// CNSmlDSProfile::TableProfilesSetColIntL
+//
+//
+//=============================================
+void CNSmlDSProfile::TableProfilesSetColIntL( const TDesC& aFieldName, TInt aValue)
+ {
+ iTableProfiles.SetColL( iColSetProfiles->ColNo( aFieldName ), aValue );
+ }
+
+//=============================================
+// CNSmlDSProfile::TableProfilesSetColDesL
+//
+//
+//=============================================
+void CNSmlDSProfile::TableProfilesSetColDesL( const TDesC& aFieldName, TDesC& aValue)
+ {
+ iTableProfiles.SetColL( iColSetProfiles->ColNo( aFieldName ), aValue );
+ }
+
+//=============================================
+// CNSmlDSProfile::ViewSetColIntL
+//
+//
+//=============================================
+void CNSmlDSProfile::ViewSetColIntL( const TDesC& aFieldName, TInt aValue)
+ {
+ iView.SetColL( iColSetProfiles->ColNo( aFieldName ), aValue );
+ }
+
+//=============================================
+// CNSmlDSProfile::ViewSetColDesL
+//
+//
+//=============================================
+void CNSmlDSProfile::ViewSetColDesL( const TDesC& aFieldName, TDesC& aValue)
+ {
+ iView.SetColL( iColSetProfiles->ColNo( aFieldName ), aValue );
+ }
+
+//=============================================
+// CNSmlDSProfile::InsertTableAdaptersL
+// Insert adapterdata to database
+//
+//=============================================
+void CNSmlDSProfile::InsertTableAdaptersL( TInt aInd)
+ {
+ iTableAdapters.InsertL();
+
+ iTableAdapters.SetColL( iColSetAdapters->ColNo( KNSmlAdapterProfileId ), iId );
+ iTableAdapters.SetColL( iColSetAdapters->ColNo( KNSmlAdapterImlementationUID ), ( TInt ) iContentTypes->At( aInd )->IntValue( EDSAdapterImplementationId ) );
+ iTableAdapters.SetColL( iColSetAdapters->ColNo( KNSmlAdapterEnabled ), iContentTypes->At( aInd )->IntValue( EDSAdapterEnabled ) );
+ iTableAdapters.SetColL( iColSetAdapters->ColNo( KNSmlAdapterCreatorID ), iContentTypes->At( aInd )->IntValue( EDSAdapterCreatorId ) );
+ iTableAdapters.SetColL( iColSetAdapters->ColNo( KNSmlAdapterDisplayName ), iContentTypes->At( aInd )->StrValue( EDSAdapterDisplayName ) );
+ iTableAdapters.SetColL( iColSetAdapters->ColNo( KNSmlAdapterServerDataSource ), iContentTypes->At( aInd )->StrValue( EDSAdapterServerDataSource ) );
+ iTableAdapters.SetColL( iColSetAdapters->ColNo( KNSmlAdapterClientDataSource ), iContentTypes->At( aInd )->StrValue( EDSAdapterClientDataSource ) );
+ iTableAdapters.SetColL( iColSetAdapters->ColNo( KNSmlAdapterSyncType ), iContentTypes->At( aInd )->IntValue( EDSAdapterSyncType ) );
+ iTableAdapters.SetColL( iColSetAdapters->ColNo( KNSmlAdapterFilterMatchType ), iContentTypes->At( aInd )->IntValue( EDSAdapterFilterMatchType ) );
+
+ TInt id = iTableAdapters.ColUint( iColSetAdapters->ColNo(KNSmlAdapterId ));
+
+ iTableAdapters.PutL();
+
+ iContentTypes->At( aInd )->SetIntValue( EDSAdapterTableId, id);
+ }
+
+//=============================================
+// CNSmlDSProfile::GetContentTypesL()
+// Member iContentTypes is resetted and appended
+// with CNSmlDSContentType objects.
+// Depending on parameter aMode method appends all or active content types.
+//=============================================
+
+void CNSmlDSProfile::GetContentTypesL( const TNSmlDSContentTypeGetMode aMode )
+ {
+ HBufC* sqlStatement = HBufC::NewLC( KDSSQLGetAllContentTypes().Length() + KNSmlDsSettingsMaxIntegerLength);
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ switch ( aMode )
+ {
+ case ( EDSAllContentTypes ) :
+ {
+ sqlStatementPtr.Format( KDSSQLGetAllContentTypes, iId );
+ }
+ break;
+
+ default:
+ {
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+
+ iContentTypes->Reset();
+
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ ResetContentTypesL();
+ while ( iView.NextL() )
+ {
+ ResetContentTypesL();
+ }
+ }
+ }
+
+
+//=============================================
+// CNSmlDSProfile::GetContentTypeL( TInt aImplementationUID )
+// Gets contenttype with given impl. id.
+//=============================================
+CNSmlDSContentType* CNSmlDSProfile::GetContentTypeL( TInt aImplementationUID )
+ {
+ HBufC* sqlStatement = HBufC::NewLC( KDSSQLGetAllContentTypesByImplementationId().Length() + KNSmlDsSettingsMaxIntegerLength);
+ TPtr sqlStatementPtr = sqlStatement->Des();
+ sqlStatementPtr.Format( KDSSQLGetAllContentTypesByImplementationId, iId, aImplementationUID );
+
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ ResetContentTypesL();
+ }
+
+ return iContentTypes->At( iContentTypes->Count() - 1 );
+ }
+
+// End of File