creator/src/creator_imps.cpp
changeset 0 d6fe6244b863
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/src/creator_imps.cpp	Tue Feb 02 00:17:27 2010 +0200
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2008 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:  
+*
+*/
+
+
+#ifdef __PRESENCE
+
+#include "creator_imps.h" 
+#include "creator_traces.h"
+
+#include <cimpssapsettingslist.h>
+
+static const TInt KIMPSFieldLength = 128;
+
+_LIT(KCreatorIMPSPrefixName, "CR_");
+
+
+//----------------------------------------------------------------------------
+
+CIMPSParameters::CIMPSParameters()
+    {
+    LOGSTRING("Creator: CIMPSParameters::CIMPSParameters");
+
+    iServerName = HBufC::New(KIMPSFieldLength);
+    iServerURL = HBufC::New(KIMPSFieldLength);
+    iServerUsername = HBufC::New(KIMPSFieldLength);
+    iServerPassword = HBufC::New(KIMPSFieldLength);
+    iServerAccessPointName = HBufC::New(KIMPSFieldLength);
+    // User needs to set connectionmethod manually to be able to use the IMPS setting
+    iServerAccessPointName->Des().Copy(_L("DEFAULT-IAP"));
+    }
+
+CIMPSParameters::~CIMPSParameters()
+    {
+    LOGSTRING("Creator: CIMPSParameters::~CIMPSParameters");
+
+    delete iServerAccessPointName;
+    delete iServerPassword;
+    delete iServerUsername;
+    delete iServerURL;
+    delete iServerName;
+    }
+
+void CIMPSParameters::SetRandomNameL(CCreatorEngine& aEngine)
+    {
+    if(iServerName == 0)
+        {
+        iServerName = HBufC::New(KIMPSFieldLength);
+        }
+    TBuf<160> company = aEngine.RandomString(CCreatorEngine::ECompany);
+    iServerName->Des() = KCreatorIMPSPrefixName;
+    iServerName->Des().Append( company );
+    iServerName->Des().Append( _L(" #") );
+    iServerName->Des().AppendNum( aEngine.RandomNumber(1000, 9999) );    
+    }
+
+void CIMPSParameters::SetRandomUrlL(CCreatorEngine& aEngine)
+    {
+    if(iServerURL == 0)
+        {
+        iServerURL = HBufC::New(KIMPSFieldLength);
+        }
+    TBuf<160> company = aEngine.RandomString(CCreatorEngine::ECompany);
+    iServerURL->Des() = _L("http://imps.");
+    iServerURL->Des().Append( company );
+    iServerURL->Des().Append( _L(".com:18080/CSP/csp") );
+    }
+
+void CIMPSParameters::SetRandomUsernameL(CCreatorEngine& aEngine)
+    {
+    iServerUsername->Des() = aEngine.RandomString(CCreatorEngine::EFirstName);
+    iServerUsername->Des().LowerCase();
+    }
+
+void CIMPSParameters::SetRandomPasswordL(CCreatorEngine& aEngine)
+    {
+    iServerPassword->Des() = aEngine.RandomString(CCreatorEngine::ESurname);
+    iServerPassword->Des().LowerCase();
+    }
+void CIMPSParameters::SetDefaultAccessPointL()
+    {
+    iServerAccessPointName->Des().Copy(_L("DEFAULT-IAP"));
+    }
+//----------------------------------------------------------------------------
+
+CCreatorIMPS* CCreatorIMPS::NewL(CCreatorEngine* aEngine)
+    {
+    CCreatorIMPS* self = CCreatorIMPS::NewLC(aEngine);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCreatorIMPS* CCreatorIMPS::NewLC(CCreatorEngine* aEngine)
+    {
+    CCreatorIMPS* self = new (ELeave) CCreatorIMPS;
+    CleanupStack::PushL(self);
+    self->ConstructL(aEngine);
+    return self;
+    }
+
+CCreatorIMPS::CCreatorIMPS()
+    {
+    }
+
+void CCreatorIMPS::ConstructL(CCreatorEngine* aEngine)
+    {
+    LOGSTRING("Creator: CCreatorIMPS::ConstructL");
+
+    iEngine = aEngine;
+
+    iIMPSSAPSettingsStore = CIMPSSAPSettingsStore::NewL();    
+    }
+
+CCreatorIMPS::~CCreatorIMPS()
+    {
+    LOGSTRING("Creator: CCreatorIMPS::~CCreatorIMPS");
+
+    if ( iEngine && iEntryIds.Count() )
+        {
+        TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iEntryIds, KUidDictionaryUidIMPS ) );
+        }
+    iEntryIds.Reset();
+    iEntryIds.Close();
+    
+    delete iIMPSSAPSettingsStore;
+    
+    if (iParameters)
+        delete iParameters;
+    }
+
+//----------------------------------------------------------------------------
+
+TBool CCreatorIMPS::AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries)
+    {
+    LOGSTRING("Creator: CCreatorIMPS::AskDataFromUserL");
+    if ( aCommand == ECmdDeleteIMPSs )
+        {
+        return iEngine->YesNoQueryDialogL( _L("Delete all IMPS server entries?") );
+        }
+    else if ( aCommand ==  ECmdDeleteCreatorIMPSs )
+        {
+        return iEngine->YesNoQueryDialogL( _L("Delete all IMPS server entries created with Creator?") );
+        }
+    return iEngine->EntriesQueryDialogL(aNumberOfEntries, _L("How many entries to create?"));
+    }
+
+
+//----------------------------------------------------------------------------
+
+TInt CCreatorIMPS::CreateIMPSServerEntryL(CIMPSParameters *aParameters)
+    {
+    LOGSTRING("Creator: CCreatorIMPS::CreateIMPSServerEntryL");
+
+    // clear any existing parameter definations
+    delete iParameters;
+    iParameters = NULL;
+    
+    CIMPSParameters* parameters = aParameters;
+    
+    // random data needed if no predefined data available
+    if (!parameters)
+        {
+        iParameters = new(ELeave) CIMPSParameters;
+        parameters = iParameters;                
+        parameters->SetRandomNameL(*iEngine);
+        parameters->SetRandomUrlL(*iEngine);
+        parameters->SetRandomUsernameL(*iEngine);
+        parameters->SetRandomPasswordL(*iEngine);
+        parameters->SetDefaultAccessPointL();
+        }
+
+    TInt err = KErrNone;
+
+    // set data to save item
+    CIMPSSAPSettings* settings = CIMPSSAPSettings::NewLC();
+    TUint32 iapId = iEngine->AccessPointNameToIdL(parameters->iServerAccessPointName->Des(), ETrue );
+    err = settings->SetAccessPoint( iapId );
+    if( err != KErrNone )
+    	{
+    	LOGSTRING("Creator: CCreatorIMPS::CreateIMPSServerEntryL - Unable to resolve access point.");
+    	err = KErrNone;
+    	}
+    settings->SetSAPNameL( parameters->iServerName->Des() );
+    settings->SetSAPAddressL( parameters->iServerURL->Des() );
+    settings->SetSAPUserIdL( parameters->iServerUsername->Des() );
+    settings->SetSAPUserPasswordL( parameters->iServerPassword->Des() );
+    
+    // save the item
+    TRAP(err, iIMPSSAPSettingsStore->StoreNewSAPL( settings, EIMPSIMAccessGroup ));
+    
+    // id has been generated, store it for being able to delete
+    // only entries created with Creator
+    iEntryIds.Append( settings->Uid() );
+    
+    TRAP(err, iIMPSSAPSettingsStore->StoreNewSAPL( settings, EIMPSPECAccessGroup ));
+
+    // id has been generated, store it for being able to delete
+    // only entries created with Creator
+    iEntryIds.Append( settings->Uid() );
+    
+    CleanupStack::PopAndDestroy(); //settings
+    return err;
+    }
+
+
+//----------------------------------------------------------------------------
+void CCreatorIMPS::DeleteAllL()
+    {
+    LOGSTRING("Creator: CCreatorIMPS::DeleteAllL");
+    CIMPSSAPSettingsList* imps = CIMPSSAPSettingsList::NewLC();
+    iIMPSSAPSettingsStore->PopulateSAPSettingsListL( *imps, EIMPSAccessFilterAll );
+    for ( TInt i = 0; i < imps->Count(); i++ )
+        {
+        iIMPSSAPSettingsStore->DeleteSAPL( imps->UidForIndex( i ) ); 
+        }
+    CleanupStack::PopAndDestroy( imps );
+    
+    // reset must be done here, because iEntryIds is stored in destructor
+    iEntryIds.Reset();
+    
+    // all entries deleted, remove the IMPS related registry
+    iEngine->RemoveStoreL( KUidDictionaryUidIMPS );
+    }
+
+//----------------------------------------------------------------------------
+void CCreatorIMPS::DeleteAllCreatedByCreatorL()
+    {
+    LOGSTRING("Creator: CCreatorIMPS::DeleteAllCreatedByCreatorL");
+    iEntryIds.Reset();
+    
+    // fetch ids of entries created by Creator
+    iEngine->ReadEntryIdsFromStoreL( iEntryIds, KUidDictionaryUidIMPS );
+    
+    // delete entries
+    for ( TInt i = 0; i < iEntryIds.Count(); i++ )
+        {
+        TRAP_IGNORE( iIMPSSAPSettingsStore->DeleteSAPL( iEntryIds[i] ) ); 
+        }
+    // reset must be done here, because iEntryIds is stored in destructor
+    iEntryIds.Reset();
+    
+    // all entries deleted, remove the IMPS related registry
+    iEngine->RemoveStoreL( KUidDictionaryUidIMPS );
+    }
+
+#endif //__PRESENCE
+