diff -r d2517372cc44 -r ae69c2e8bc34 omaprovisioning/provisioning/IMAdapter/Src/CWPIMSAPItem.cpp --- a/omaprovisioning/provisioning/IMAdapter/Src/CWPIMSAPItem.cpp Tue Sep 28 17:53:08 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,476 +0,0 @@ -/* -* Copyright (c) 2002 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: -* Settings item for wireless village settings, handles also the saving of -* Settings item. -* -*/ - - -// INCLUDE FILES -#include "CWPIMSAPItem.h" - - -#include -#include -#include -#include - -// CONSTANTS -const TUint KLengthOfIncrementChars = 4; - -// ================= MEMBER FUNCTIONS ======================= - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CWPIMSAPItem* CWPIMSAPItem::NewLC( TIMPSAccessGroup aAccessGroup ) - { - CWPIMSAPItem* self = new ( ELeave ) CWPIMSAPItem( aAccessGroup ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::CWPIMSAPItem -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CWPIMSAPItem::CWPIMSAPItem( TIMPSAccessGroup aAccessGroup ) - : iAccessGroup( aAccessGroup ) - { - } - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -CWPIMSAPItem::~CWPIMSAPItem() - { - delete iWVSAPSettings; - delete iSAPStore; - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CWPIMSAPItem::ConstructL() - { - iWVSAPSettings = CIMPSSAPSettings::NewL(); - - // create the SAPSettingsStore - TRAPD( err, iSAPStore = CIMPSSAPSettingsStore::NewL() ); - - if ( err == KErrCorrupt ) - { - // if corrupted, recreation creates also new db. - iSAPStore = CIMPSSAPSettingsStore::NewL(); - } - else - { - User::LeaveIfError(err); - } - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::SetSettingsNameL -// ----------------------------------------------------------------------------- -// -void CWPIMSAPItem::SetSettingsNameL(const TDesC& aName) - { - iWVSAPSettings->SetSAPNameL( aName ); - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::SetUserIDL -// ----------------------------------------------------------------------------- -// -void CWPIMSAPItem::SetUserIDL(const TDesC& aUserId) - { - iWVSAPSettings->SetSAPUserIdL( aUserId ); - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::SetPasswordL -// ----------------------------------------------------------------------------- -// -void CWPIMSAPItem::SetPasswordL(const TDesC& aPassword) - { - iWVSAPSettings->SetSAPUserPasswordL(aPassword); - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::SetSAPURIL -// ----------------------------------------------------------------------------- -// -void CWPIMSAPItem::SetSAPURIL(const TDesC& aURI) - { - iWVSAPSettings->SetSAPAddressL( aURI); - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::SetIAPIdL -// ----------------------------------------------------------------------------- -// -void CWPIMSAPItem::SetIAPIdL(TUint32 aUid) - { - iWVSAPSettings->SetAccessPoint( aUid ); - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::StoreL -// ----------------------------------------------------------------------------- -// -TUint32 CWPIMSAPItem::StoreL() - { - FLOG( _L( "CWPIMSAPItem::StoreL: Enter" ) ); - TUint32 uid(0); - // check is there already a server with a same name; if there is, - // increment the name. - if ( !IsServerNameUniqueL( iWVSAPSettings->SAPName() ) ) - { - TInt length = iWVSAPSettings->SAPName().Length() + KLengthOfIncrementChars; - - HBufC* newName = HBufC::NewLC(length); - TPtr namePtr = newName->Des(); - namePtr = iWVSAPSettings->SAPName(); - - do - { - IncrementNameL(namePtr); - } - while ( !IsServerNameUniqueL(namePtr) ); - - iWVSAPSettings->SetSAPNameL(namePtr); - - CleanupStack::PopAndDestroy(newName); - } - - // store the SAP item - uid = iSAPStore->StoreNewSAPL( iWVSAPSettings, iAccessGroup ); - FLOG( _L( "CWPIMSAPItem::StoreL: Exit" ) ); - return uid; - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::DeleteL -// ----------------------------------------------------------------------------- -// -void CWPIMSAPItem::DeleteL( TUint32 aUid ) - { - TUint32 defaultUid = 0; - TRAPD( error, iSAPStore->GetDefaultL( defaultUid, iAccessGroup )); - if ( error != KErrNone ) - { - // No default found, which is fine. - // set default to 0 just in case - defaultUid = 0; - } - TUint32 sapCount = iSAPStore->SAPCountL( iAccessGroup ); - - if ( aUid == defaultUid && sapCount != 1 ) - { - // SAP to be deleted is default SAP, need to set another to default - CIMPSSAPSettingsList* list = CIMPSSAPSettingsList::NewLC(); - iSAPStore->PopulateSAPSettingsListL( *list, iAccessGroup ); - TUint32 tempUid = 0; - for ( TUint32 i = 0; i < sapCount; i++ ) - { - tempUid = list->UidForIndex( i ); - if ( tempUid != aUid ) - { - iSAPStore->SetToDefaultL( tempUid, iAccessGroup ); - break; - } - } - CleanupStack::PopAndDestroy( list ); - } - - // currently do not react to error situations - TRAP( error, iSAPStore->DeleteSAPL( aUid )); - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::IsServerNameUniqueL -// ----------------------------------------------------------------------------- -// -TBool CWPIMSAPItem::IsServerNameUniqueL( const TDesC& aServerName ) - { - TBool ret(ETrue); - // create list for SAP items. - CIMPSSAPSettingsList* SAPList = CIMPSSAPSettingsList::NewLC(); - // populate the list with SAP settings - iSAPStore->PopulateSAPSettingsListL( *SAPList, iAccessGroup ); - - TInt storedCount = SAPList->MdcaCount(); - - for( TInt index(0); index < storedCount; index++ ) - { - SAPList->MdcaPoint( index ); - TInt SAPListUid = SAPList->UidForIndex( index ); - // get list item - const CIMPSSAPSettingsListItem* item = - SAPList->ListItemForUid( SAPListUid ); - // compare is there already a server with same name. - if ( item && aServerName == item->Name() ) - { - // SAP setting name exists in list. - ret = EFalse; - break; - } - } - CleanupStack::PopAndDestroy( SAPList ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::SetAsDefaultL -// ----------------------------------------------------------------------------- -// -void CWPIMSAPItem::SetAsDefaultL( TUint32 aUid, TIMPSAccessGroup aAccessGroup ) - { - // create the store - CIMPSSAPSettingsStore* sapStore = CIMPSSAPSettingsStore::NewLC(); - // set SAPItem with aUid as default - sapStore->SetToDefaultL( aUid, aAccessGroup ); - CleanupStack::PopAndDestroy( sapStore ); - } - -void CWPIMSAPItem::IncrementNameL(TDes& aName) - { - - FLOG( _L( "CWPIMSAPItem::IncrementNameL: Enter" ) ); - - TInt length = aName.Length(); - - - // If this fails it means that at least default name should have been assigned - // to item. - //__ASSERT_ALWAYS(length > 0, Panic(EMEUNameEmpty)); - TInt newOrdinal = 0; - TInt index = length-1; - TInt charValue = aName[index]; - - // Check if name ends with ')' - if (charValue == ')') - { - TBool cutBetweenIndexes = EFalse; - index--; - TInt multi = 1; - while ( index >= 0) - { - charValue = aName[index]; - TChar ch(charValue); - - if (!ch.IsDigit()) - { - // There was non-digits inside the brackets. - if ( charValue == '(') - { - // We found the start - cutBetweenIndexes = ETrue; - index--; - break; - } - else - { - // There was a non-digit inside the '(' and ')' - // We just append after the original name. - break; - } - } // if - else - { - TInt newNum = ch.GetNumericValue(); - if (multi <= 100000000) - { - // If there's a pattern (007) then this makes it to be (007)(01) - if (newNum == 0 && newOrdinal != 0 && multi > 10) - { - break; - } - newOrdinal += newNum * multi; - multi*=10; - }//0010 - else - { - newOrdinal = 0; - break; - } - } - index--; - } // while - - // There was correct pattern of (0000) so now we delete it. - if (cutBetweenIndexes) - { - aName.Delete(index+1, length-index); - } - else - { - // This case is for example 12345) so we get 12345)(01) - newOrdinal = 0; - } - } // if - - // Add one to the ordinal read from the old name - newOrdinal++; - - // Check that there's enough space to add the ordinal - TInt maxLength = aName.MaxLength(); - TInt ordinalSpace(4); // Ordinal space comes from (00) so it's 4 - length = aName.Length(); - if (length + ordinalSpace > maxLength) - { - aName.Delete(maxLength-ordinalSpace, ordinalSpace); - } - - // Append the ordinal at the end of the name - HBufC* old = aName.AllocLC(); - - _LIT(KFormatSpecLessTen, "%S(0%d)"); - _LIT(KFormatSpecOverTen, "%S(%d)"); - if (newOrdinal < 10) - { - aName.Format(KFormatSpecLessTen, old, newOrdinal); - } - else - { - aName.Format(KFormatSpecOverTen, old, newOrdinal); - } - CleanupStack::PopAndDestroy(old); // old - - FLOG( _L( "CWPIMSAPItem::IncrementNameL: Exit" ) ); - } - - -// ----------------------------------------------------------------------------- -// CWPIMSAPItem::IncrementNameL -// ----------------------------------------------------------------------------- -// -void CWPIMSAPItem::IncrementNameL(TDes& aName, TInt aMaxLength) - { - - FLOG( _L( "CWPIMSAPItem::IncrementNameL: Enter" ) ); - - TInt length = aName.Length(); - - - // If this fails it means that at least default name should have been assigned - // to item. - //__ASSERT_ALWAYS(length > 0, Panic(EMEUNameEmpty)); - TInt newOrdinal = 0; - TInt index = length-1; - TInt charValue = aName[index]; - - // Check if name ends with ')' - if (charValue == ')') - { - TBool cutBetweenIndexes = EFalse; - index--; - TInt multi = 1; - while ( index >= 0) - { - charValue = aName[index]; - TChar ch(charValue); - - if (!ch.IsDigit()) - { - // There was non-digits inside the brackets. - if ( charValue == '(') - { - // We found the start - cutBetweenIndexes = ETrue; - index--; - break; - } - else - { - // There was a non-digit inside the '(' and ')' - // We just append after the original name. - break; - } - } // if - else - { - TInt newNum = ch.GetNumericValue(); - if (multi <= 100000000) - { - // If there's a pattern (007) then this makes it to be (007)(01) - if (newNum == 0 && newOrdinal != 0 && multi > 10) - { - break; - } - newOrdinal += newNum * multi; - multi*=10; - }//0010 - else - { - newOrdinal = 0; - break; - } - } - index--; - } // while - - // There was correct pattern of (0000) so now we delete it. - if (cutBetweenIndexes) - { - aName.Delete(index+1, length-index); - } - else - { - // This case is for example 12345) so we get 12345)(01) - newOrdinal = 0; - } - } // if - - // Add one to the ordinal read from the old name - newOrdinal++; - - // Check that there's enough space to add the ordinal - TInt maxLength = aMaxLength; - TInt ordinalSpace(4); // Ordinal space comes from (00) so it's 4 - length = aName.Length(); - if (length + ordinalSpace > maxLength) - { - aName.Delete(maxLength-ordinalSpace, ordinalSpace); - } - - // Append the ordinal at the end of the name - HBufC* old = aName.AllocLC(); - - _LIT(KFormatSpecLessTen, "%S(0%d)"); - _LIT(KFormatSpecOverTen, "%S(%d)"); - if (newOrdinal < 10) - { - aName.Format(KFormatSpecLessTen, old, newOrdinal); - } - else - { - aName.Format(KFormatSpecOverTen, old, newOrdinal); - } - CleanupStack::PopAndDestroy(old); // old - - FLOG( _L( "CWPIMSAPItem::IncrementNameL: Enter" ) ); - } - -// End of File -