--- a/locationcentre/lcserver/src/lcregapporder.cpp Tue Feb 02 00:16:03 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,320 +0,0 @@
-/*
-* Copyright (c) 2007 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: Location Centre Server object.
-*
-*/
-
-
-// SYSTEM INCLUDES
-#include<s32mem.h>
-
-// USER INCLUDES
-#include "lcregapporder.h"
-#include "lcprivatecrkeys.h"
-#include "lcregappstore.h"
-
-// CONSTANT DEFINTIONS
-const TInt KLcNoofDigitsInInteger = 4;
-const TInt KLcMaxBufLength = 1024;
-
-// ----- Member funtions for CLcRegAppOrder ---------------------------------
-
-// ---------------------------------------------------------------------------
-// CLcRegAppOrder::CLcRegAppOrder
-// ---------------------------------------------------------------------------
-//
-CLcRegAppOrder::CLcRegAppOrder( CLcRegAppStore& aLcRegAppStore )
- :iLcRegAppStore( &aLcRegAppStore )
- {
- // C++ Default constructor. No allocations or functions which can Leave
- // should be called from here.Initiallize all the variable here
- }
-
-// ---------------------------------------------------------------------------
-// CLcRegAppOrder::~CLcRegAppOrder
-// ---------------------------------------------------------------------------
-//
-CLcRegAppOrder::~CLcRegAppOrder()
- {
- // C++ Destructor. Free all resources associated with this class.
- delete iRepository;
- iRepository = NULL;
- // clear the top key value.
- iTopArray.ResetAndDestroy();
- iTopArray.Close();
- // clear the bottom key value
- iBottomArray.ResetAndDestroy();
- iBottomArray.Close();
- // clear middle uuid array
- iMiddleArray.ResetAndDestroy();
- iMiddleArray.Close();
- }
-
-// ---------------------------------------------------------------------------
-// CLcRegAppOrder* CLcRegAppOrder::NewL
-// ---------------------------------------------------------------------------
-//
-CLcRegAppOrder* CLcRegAppOrder::NewL( CLcRegAppStore& aLcRegAppStore )
- {
- // Symbian Two phased constructor. Leaves the object on the Clean-up
- // stack.
- CLcRegAppOrder* self = new ( ELeave )CLcRegAppOrder( aLcRegAppStore );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// void CLcRegAppOrder::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CLcRegAppOrder::ConstructL()
- {
- // Create the Central repository object for manipulating Avkon Central
- // repository for application order key
- iRepository = CRepository::NewL( KCRUidLocationCentre );
- HBufC* buffer = HBufC::NewLC( NCentralRepositoryConstants::KMaxUnicodeStringLength );
- TPtr bufferPtr( buffer->Des() );
- // get the top order services
- User::LeaveIfError( iRepository->Get( ELcTop, bufferPtr ) );
- ParseCenRepKeyL( iTopArray, bufferPtr );
- // get the middle order services
- User::LeaveIfError( iRepository->Get( ELcBottom, bufferPtr ) );
- ParseCenRepKeyL( iBottomArray, bufferPtr );
- // get the bottom order services if any
- TBool isMidleKeySet = EFalse;
- User::LeaveIfError( iRepository->Get( ELcMiddle, isMidleKeySet ) );
-
- if( isMidleKeySet )
- {
- // Allocate the id Array buffer
- CBufFlat* idArrayBuf = CBufFlat::NewL( KLcMaxBufLength );
- CleanupStack::PushL( idArrayBuf );
- idArrayBuf->ResizeL( KLcMaxBufLength );
-
- TPtr8 idArrayPtr( idArrayBuf->Ptr(0));
-
- iLcRegAppStore->GetUuidValueL( idArrayPtr );
-
- if( idArrayPtr.Length() > 0 )
- {
- // Create a Read buffer stream to read the App Ids
- RBufReadStream appReadStream( *idArrayBuf, 0 );
- CleanupClosePushL( appReadStream );
-
- iMiddleArray.ResetAndDestroy();
-
- // Internalize the structure to obtain the Actual list of Ids
- iMiddleArray.InternalizeL( appReadStream );
- CleanupStack::PopAndDestroy(); // appReadStream
- }
- CleanupStack::PopAndDestroy( idArrayBuf );
- }
- else
- {
- // Deep RFS handling
- iLcRegAppStore->AddDataToTableL( KNullDesC8 );
- }
-
- CleanupStack::PopAndDestroy( buffer );
- }
-
-// ---------------------------------------------------------------------------
-// void CLcRegAppOrder::ParseCenRepKey
-// ---------------------------------------------------------------------------
-//
-void CLcRegAppOrder::ParseCenRepKeyL( RPointerArray< HBufC >& aArray,
- const TDesC& aKey )
- {
- // If the length of the buffer is less than 4 digits, then terminate
- // the function.
- if( aKey.Length() < KLcNoofDigitsInInteger )
- {
- return;
- }
- TUint count = ParseInteger( aKey );
- TInt currentlength = KLcNoofDigitsInInteger;
-
- for ( TInt i = 0; i < count; i ++ )
- {
- // If the length of the buffer is less than 4 digits, then terminate
- // the function.
- if( aKey.Right( aKey.Length() - currentlength ).Length() < KLcNoofDigitsInInteger )
- {
- return;
- }
-
- TUint32 len = ParseInteger( aKey.Right( aKey.Length() - currentlength ));
- currentlength += KLcNoofDigitsInInteger;
-
- TPtrC buffer( aKey.Right( aKey.Length() - currentlength ));
-
- // If the length of the buffer is less than the length obtained from the
- // previous operation then terminate the function.
- if( buffer.Length() < len )
- {
- return;
- }
- HBufC* identifier = HBufC::NewLC( currentlength );
- identifier->Des().Copy( buffer.Ptr(), len );
-
- TInt error = aArray.Append( identifier );
- if( error )
- {
- CleanupStack::PopAndDestroy( identifier );
- }
- else
- {
- CleanupStack::Pop( identifier );
- }
- currentlength += len;
- }
- }
-
-// ---------------------------------------------------------------------------
-// void CLcRegAppOrder::ParseInteger
-// ---------------------------------------------------------------------------
-//
-TUint32 CLcRegAppOrder::ParseInteger( const TDesC& aBuffer )
- {
- TPtrC buffer( aBuffer.Ptr(), KLcNoofDigitsInInteger );
-
- TBuf8< KLcNoofDigitsInInteger > integerBuf;
- integerBuf.Copy( buffer );
-
- TUint8* currentPtr = const_cast< TUint8 *>( integerBuf.Ptr());
- TUint32 integer = 0;
- for( TInt i = 0; i < KLcNoofDigitsInInteger; i++ )
- {
- integer += ( integer * 10 ) + ( currentPtr[i] - '0' );
- }
- return integer;
- }
-
-// ---------------------------------------------------------------------------
-// void CLcRegAppOrder::GetRegisteredAppOrder
-// ---------------------------------------------------------------------------
-//
-TInt CLcRegAppOrder::GetRegisteredAppOrder(const TDesC& aUuid,
- TInt& aRowPos )
- {
- // search the identifier in the top array.
- for(TInt i = 0; i <iTopArray.Count(); i++ )
- {
- HBufC* identifier = iTopArray[i];
- if( !identifier->Des().Compare( aUuid ) )
- {
- aRowPos = i;
- return KErrNone;
- }
- }
-
- // search the identifier in the middle array.
- for(TInt i = 0; i <iMiddleArray.Count(); i++ )
- {
- HBufC* identifier = iMiddleArray[i];
- if( !identifier->Des().Compare( aUuid ) )
- {
- aRowPos = iTopArray.Count() + i;
- return KErrNone;
- }
- }
-
- // search the identifier in the top array.
- for(TInt i = 0; i <iBottomArray.Count(); i++ )
- {
- HBufC* identifier = iBottomArray[i];
- if( !identifier->Des().Compare( aUuid ) )
- {
- aRowPos = iTopArray.Count() + iMiddleArray.Count() + i;
- return KErrNone;
- }
- }
- return KErrNotFound;
- }
-
-// ---------------------------------------------------------------------------
-// void CLcRegAppOrder::RemoveArray
-// ---------------------------------------------------------------------------
-//
-void CLcRegAppOrder::RemoveArrayL(const TDesC& aUuid )
- {
- // search the identifier in the middle array.
- for(TInt i = 0; i <iMiddleArray.Count(); i++ )
- {
- HBufC* identifier = iMiddleArray[i];
- if( !identifier->Des().Compare( aUuid ) )
- {
- iMiddleArray.Remove(i);
- // now delete the identifier
- delete identifier;
- identifier = NULL;
- break;
- }
- }
-
- // Create the buffer for packing the Application Information
- // structure and pack the contents into this buffer
- CBufFlat* buffer = CBufFlat::NewL( iMiddleArray.BufferLength());
- CleanupStack::PushL( buffer );
-
- RBufWriteStream writeStream( *buffer, 0 );
- CleanupClosePushL( writeStream );
- iMiddleArray.ExternalizeL( writeStream );
- CleanupStack::PopAndDestroy(); // writeStream
- iLcRegAppStore->AddDataToTableL( buffer->Ptr(0));
- CleanupStack::PopAndDestroy( buffer );
- // Now get the id index.
- if( iMiddleArray.Count() == 0 )
- {
- User::LeaveIfError( iRepository->Set( ELcMiddle, 0 ));
- }
- }
-
-// ---------------------------------------------------------------------------
-// void CLcRegAppOrder::AppendArray
-// ---------------------------------------------------------------------------
-//
-TInt CLcRegAppOrder::AppendArrayL(const TDesC& aUuid )
- {
- HBufC* identifier = HBufC::NewL( aUuid.Length() );
- identifier->Des().Copy( aUuid );
- User::LeaveIfError( iMiddleArray.Append( identifier ));
- // Create the buffer for packing the Application Information
- // structure and pack the contents into this buffer
- CBufFlat* buffer = CBufFlat::NewL( iMiddleArray.BufferLength());
- CleanupStack::PushL( buffer );
-
- RBufWriteStream writeStream( *buffer, 0 );
- CleanupClosePushL( writeStream );
- iMiddleArray.ExternalizeL( writeStream );
- CleanupStack::PopAndDestroy(); // writeStream
-
- iLcRegAppStore->AddDataToTableL( buffer->Ptr(0));
-
- CleanupStack::PopAndDestroy( buffer );
-
- TInt index;
- if ( GetRegisteredAppOrder(aUuid, index ) == KErrNotFound )
- {
- User::Leave( KErrNotFound );
- }
- User::LeaveIfError( iRepository->Set( ELcMiddle, 1 ));
- return index;
- }
-
-//End of file
-
-