--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/brandingserver/tools/bsimport/src/cbsimportstorage.cpp Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,297 @@
+/*
+* Copyright (c) 2006-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: Stores element data and writes it to stream
+*
+*/
+
+
+#include <s32strm.h>
+#include <utf.h>
+#include <cbsfactory.h>
+#include <mbsupdater.h>
+#include <mbselement.h>
+
+#include "cbsimportstorage.h"
+#include "cbsimportconstants.h"
+#include "importlogwriter.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::NewL
+// ---------------------------------------------------------------------------
+//
+CBSImportStorage* CBSImportStorage::NewL()
+ {
+ CBSImportStorage* self = NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::NewLC
+// ---------------------------------------------------------------------------
+//
+CBSImportStorage* CBSImportStorage::NewLC()
+ {
+ CBSImportStorage* self = new (ELeave) CBSImportStorage();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CBSImportStorage::ConstructL()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::CBSImportStorage
+// ---------------------------------------------------------------------------
+//
+CBSImportStorage::CBSImportStorage()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::~CBSImportStorage
+// ---------------------------------------------------------------------------
+//
+CBSImportStorage::~CBSImportStorage()
+ {
+ iElements.ResetAndDestroy();
+ delete iAppId;
+ delete iStorageId;
+ delete iFilename;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::AppendElement
+// ---------------------------------------------------------------------------
+//
+TInt CBSImportStorage::AppendElement( MBSElement* aElement )
+ {
+ if( aElement )
+ {
+ return iElements.Append( aElement );
+ }
+ // Ignore empty
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::ElementCount
+// ---------------------------------------------------------------------------
+//
+TInt CBSImportStorage::ElementCount()
+ {
+ return iElements.Count();
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::Element
+// ---------------------------------------------------------------------------
+//
+MBSElement* CBSImportStorage::Element( TInt aIndex )
+ {
+ return iElements[ aIndex ];
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::FlushtoServerL
+// ---------------------------------------------------------------------------
+//
+void CBSImportStorage::FlushToServerL()
+ {
+ if( !VerifyHeader() || !VerifyDataL( iElements.Array() ) )
+ {
+ // Header not complete. Will not flush
+ User::Leave( KErrCorrupt );
+ }
+
+ // Create access to server
+ CBSFactory* factory = CBSFactory::NewL( *iStorageId, *iAppId );
+ CleanupStack::PushL( factory );
+ MBSUpdater* updater = factory->CreateUpdaterLC();
+ //updater->StartTransactionL( *iStorageId, iLanguage, iVersion );
+ updater->StartTransactionL( *iStorageId, iLanguage );
+
+ // Flush data
+ TInt count = iElements.Count();
+ for( TInt i = 0; i < count; i++ )
+ {
+ TRAPD( err, updater->InsertElementL( iElements[i] ) );
+ if( err == KErrAlreadyExists )
+ {
+ err = KErrNone;
+ TRAP( err, updater->ReplaceElementL( iElements[i] ) );
+ }
+ User::LeaveIfError( err );
+ }
+
+ // Cleanup
+ updater->StopTransactionL();
+ CleanupStack::PopAndDestroy( 2 ); // factory, updater
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::SetVersion
+// ---------------------------------------------------------------------------
+//
+void CBSImportStorage::SetVersion( TInt aVersion )
+ {
+ iVersion = aVersion;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::SetApplicationIdL
+// ---------------------------------------------------------------------------
+//
+void CBSImportStorage::SetApplicationIdL( const TDesC& aAppId )
+ {
+ HBufC8* id = HBufC8::NewLC( aAppId.Length() );
+ TPtr8 idPtr( id->Des() );
+ CnvUtfConverter::ConvertFromUnicodeToUtf8( idPtr, aAppId );
+ CleanupStack::Pop( id );
+ delete iAppId;
+ iAppId = id;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::SetStorageIdL
+// ---------------------------------------------------------------------------
+//
+void CBSImportStorage::SetStorageIdL( const TDesC& aStorageId )
+ {
+ HBufC8* id = HBufC8::NewLC( aStorageId.Length() );
+ TPtr8 idPtr( id->Des() );
+ CnvUtfConverter::ConvertFromUnicodeToUtf8( idPtr, aStorageId );
+ CleanupStack::Pop( id );
+ delete iStorageId;
+ iStorageId = id;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::SetLanguageL
+// ---------------------------------------------------------------------------
+//
+void CBSImportStorage::SetLanguageL( TLanguage aLanguage )
+ {
+ iLanguage = aLanguage;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::VerifyHeader
+// ---------------------------------------------------------------------------
+//
+TBool CBSImportStorage::VerifyHeader()
+ {
+ // not checking version as it is been consider not to use. - Pankaj - 31 may 07
+ //return ( iAppId && iStorageId && iVersion > 0 && iLanguage >= ELangTest );
+ return ( iAppId && iStorageId && iLanguage >= ELangTest );
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::VerifyDataL
+// ---------------------------------------------------------------------------
+//
+TBool CBSImportStorage::VerifyDataL( TArray<MBSElement*> aArray,
+ TBool aIgnoreEmptyID /* = EFalse */ )
+ {
+ // Check that elements have unique ID's in their own namespace
+ TInt count = aArray.Count();
+ for( TInt i = 0; i < count; i++ )
+ {
+ // Verify inside list elements
+ if( aArray[i]->ElementType() == EBSList )
+ {
+ if( !VerifyDataL( aArray[i]->GetStructureL(), ETrue ) )
+ {
+ return false;
+ }
+ }
+
+ if( aIgnoreEmptyID &&
+ aArray[i]->ElementId().CompareC( KNullDesC8() ) == 0 )
+ {
+ // ignore empty id
+ continue;
+ }
+
+ // Check that sibling elements have unique ID
+ for( TInt j = i + 1; j < count; j++ )
+ {
+ if( aArray[i]->ElementId().CompareC( aArray[j]->ElementId() ) == 0 )
+ {
+ // convert elementID to 16-bit for event logger
+ TPtrC8 id( aArray[i]->ElementId() );
+ HBufC* conv = HBufC::NewLC( id.Length() );
+ TPtr uniptr( conv->Des() );
+ CnvUtfConverter::ConvertToUnicodeFromUtf8( uniptr, id );
+ IMPORT_DP( D_IMPORT_LIT("ERROR: Found duplicate element ID (%S)!"), &uniptr );
+ CleanupStack::PopAndDestroy();
+ return false;
+ }
+ }
+ }
+
+ // All elements ok
+ return true;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::Compare
+// ---------------------------------------------------------------------------
+//
+TInt CBSImportStorage::Compare( const CBSImportStorage* aStorage ) const
+ {
+ if( iVersion != aStorage->iVersion || iLanguage != aStorage->iLanguage )
+ {
+ // no match
+ return EFalse;
+ }
+ if( iAppId->Compare( aStorage->iAppId->Des() ) != 0 )
+ {
+ // no match
+ return EFalse;
+ }
+ if( iStorageId->Compare( aStorage->iStorageId->Des() ) != 0 )
+ {
+ // no match
+ return EFalse;
+ }
+ // they match
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CBSImportStorage::TakeElementsL
+// ---------------------------------------------------------------------------
+//
+void CBSImportStorage::TakeElements( CBSImportStorage* aStorage )
+ {
+ TInt count = aStorage->iElements.Count();
+ for( TInt i = 0; i < count; i++ )
+ {
+ iElements.Append( aStorage->iElements[i] );
+ }
+ aStorage->iElements.Reset();
+ }
+
+// End of file