brandingserver/bsclient/cbsupdater.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:49 +0200
changeset 0 e6b17d312c8b
child 21 cfd5c2994f10
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2006 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: CBSUpdater.cpp
*
*/


//  INCLUDE FILES

#include "e32base.h"

#include "cbsupdater.h"
#include "debugtrace.h"
#include "mbsaccess.h"
#include "bselementfactory.h"
#include "mbselement.h"
#include "bsserverdefs.h"

// Two-phased constructor.
CBSUpdater* CBSUpdater::NewL( const TDesC8& aApplicationId )
    {
    CBSUpdater* self = new ( ELeave ) CBSUpdater() ;
    CleanupStack::PushL( self );
    self->ConstructL( aApplicationId );
    CleanupStack::Pop( self );  //self
    return self;
    }

// Symbian OS default constructor can leave.
void CBSUpdater::ConstructL( const TDesC8& aApplicationId  )
    {
    iApplicationId = aApplicationId.AllocL();
    User::LeaveIfError( iClient.Connect() );
    }

// Destructor
CBSUpdater::~CBSUpdater()
    {
    delete iApplicationId;
    delete iBrandId;
    iClient.Close();
    }

// C++ default constructor can NOT contain any code, that
// might leave.
//
CBSUpdater::CBSUpdater()
	{
	}


// -----------------------------------------------------------------------------
// CBSUpdater::Close()
// -----------------------------------------------------------------------------
//
void CBSUpdater::Close()
	{
	delete this;
	}

// -----------------------------------------------------------------------------
// CBSUpdater::StartTransactionL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::StartTransactionL( const TDesC8& aBrandId,
									TLanguage aLanguageId,
									TUpdateTransactionType aType, /*EUpdateInstall*/
									TInt aReserved)
	{
	if( iActive )
		{
		User::Leave( KErrAlreadyExists );
		}
	
	iActive = ETrue;
	HBufC8* tmp = aBrandId.AllocL();
	delete iBrandId;
	iBrandId = tmp;
	iLanguageId = aLanguageId;
	iReserved = aReserved;
	iTxType = aType;
	
	TTransactionType operation = EBSTxAccess;
	switch( aType )
		{
		case EUpdateInstall:
			{
			operation = EBSTxInstall;
			break;
			}
		case EUpdateAppend:
			{
			operation = EBSTxAppend;
			break;
			}
		case EUpdateReplace:
			{
			operation = EBSTxReplace;
			break;
			}
		case EUpdateUninstall:
			{
			operation = EBSTxUninstall;
			break;
			}
		default:
			break;
		}
	
	TRAPD( err, iClient.StartTransactionL( *iApplicationId, aBrandId, KNullDesC8,
									aLanguageId, operation, aReserved ) );
	if( err )
		{
		iActive = EFalse;
		User::Leave( err );
		}

	}
// -----------------------------------------------------------------------------
// CBSUpdater::StopTransactionL()
// -----------------------------------------------------------------------------
//
TInt CBSUpdater::StopTransactionL()
	{
	if( !iActive )
		{
		User::Leave( KErrNotFound );
		}
	
	TInt returnValue = iClient.StopTransactionL( *iApplicationId, 
												 *iBrandId, 
												 iLanguageId, 
												 iReserved );
	iActive = EFalse;
	return returnValue;
	}


// -----------------------------------------------------------------------------
// CBSUpdater::CancelTransactionL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::CancelTransactionL()
	{
	if( !iActive )
		{
		User::Leave( KErrNotFound );
		}
	
	iClient.CancelTransactionL( *iApplicationId, *iBrandId, iLanguageId, iReserved );
	iActive = EFalse;
	}



//*** BRAND INSTALLING ***//
// -----------------------------------------------------------------------------
// CBSUpdater::InsertTextL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::InsertTextL( const TDesC8& aId,
				  			  const TDesC& aText )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateInstall )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSText, aText );
	CleanupClosePushL( *element );
	InsertElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::InsertBufferL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::InsertBufferL( const TDesC8& aId,
								const TDesC8& aBuffer )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateInstall )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSBuffer, aBuffer );
	CleanupClosePushL( *element );
	InsertElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::InsertIntL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::InsertIntL( const TDesC8& aId,
				 			 TInt aInt )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateInstall )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSInt, aInt );
	CleanupClosePushL( *element );
	InsertElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::InsertFileL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::InsertFileL( const TDesC8& aId,
				  			  const TDesC& aFileName )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateInstall )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSFile, aFileName );
	CleanupClosePushL( *element );
	InsertElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::InsertElementL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::InsertElementL( MBSElement* aElement )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateInstall )
		{
		User::Leave( KErrArgument );
		}
	iClient.InsertL( aElement );
	}




//*** BRAND UPDATING - replacing ***//
// -----------------------------------------------------------------------------
// CBSUpdater::ReplaceTextL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::ReplaceTextL( const TDesC8& aId,
				   			   const TDesC& aText )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateReplace )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSText, aText );
	CleanupClosePushL( *element );
	ReplaceElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::ReplaceBufferL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::ReplaceBufferL( const TDesC8& aId,
					 			 const TDesC8& aBuffer )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateReplace )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSBuffer, aBuffer );
	CleanupClosePushL( *element );
	ReplaceElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::ReplaceIntL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::ReplaceIntL( const TDesC8& aId,
				  			  TInt aInt )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateReplace )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSInt, aInt );
	CleanupClosePushL( *element );
	ReplaceElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::ReplaceFileL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::ReplaceFileL( const TDesC8& aId,
				   			   const TDesC& aFileName )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateReplace )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSFile, aFileName );
	CleanupClosePushL( *element );
	ReplaceElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::ReplaceElementL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::ReplaceElementL( MBSElement* aElement )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateReplace )
		{
		User::Leave( KErrArgument );
		}
	iClient.ReplaceL( aElement );
	}




//*** BRAND UPDATING - appending ***//
// -----------------------------------------------------------------------------
// CBSUpdater::AppendTextL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::AppendTextL( const TDesC8& aId,
				  			  const TDesC& aText )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateAppend )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSText, aText );
	CleanupClosePushL( *element );
	AppendElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::AppendBufferL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::AppendBufferL( const TDesC8& aId,
								const TDesC8& aBuffer )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateAppend )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSBuffer, aBuffer );
	CleanupClosePushL( *element );
	AppendElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::AppendIntL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::AppendIntL( const TDesC8& aId,
				 		     TInt aInt )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateAppend )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSInt, aInt );
	CleanupClosePushL( *element );
	AppendElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::AppendFileL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::AppendFileL( const TDesC8& aId,
				  			  const TDesC& aFileName )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateAppend )
		{
		User::Leave( KErrArgument );
		}
	MBSElement* element = BSElementFactory::CreateBSElementL( aId, EBSFile, aFileName );
	CleanupClosePushL( *element );
	AppendElementL( element );
	CleanupStack::PopAndDestroy(); // element
	}


// -----------------------------------------------------------------------------
// CBSUpdater::AppendElementL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::AppendElementL( MBSElement* aElement )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	if( iTxType != EUpdateAppend )
		{
		User::Leave( KErrArgument );
		}
	iClient.AppendL( aElement );
	}


// -----------------------------------------------------------------------------
// CBSUpdater::AppendElementL()
// -----------------------------------------------------------------------------
//
void CBSUpdater::RemoveBrandL( const TDesC8& aApplicationId,
								   const TDesC8& aBrandId )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	iClient.RemoveBrandL( aApplicationId, aBrandId );
	}

// -----------------------------------------------------------------------------
// CBSUpdater::AppendElementL()
// -----------------------------------------------------------------------------
//
void CBSUpdater:: RemoveBrandsL( const TDesC8& aApplicationId )
	{
	if( !iActive )
		{
		User::Leave( KErrNotReady );
		}
	iClient.RemoveBrandsL( aApplicationId );
	}

// -----------------------------------------------------------------------------
// CBSUpdater::RegisterObserverL()
// -----------------------------------------------------------------------------
//
void CBSUpdater:: RegisterObserverL( MBSBackupRestoreStateObserver* aBackupObserver )
{
	iClient.RegisterObserverL(NULL, aBackupObserver) ;
}

// -----------------------------------------------------------------------------
// CBSUpdater::UnRegisterObserverL()
// -----------------------------------------------------------------------------
//
void CBSUpdater:: UnRegisterObserverL( MBSBackupRestoreStateObserver* aObserver )
{
	iClient.UnRegisterObserverL(NULL, aObserver) ;
}

//  END OF FILE