diff -r 6205fd287e8a -r 1abc632eb502 menufw/hierarchynavigator/hnmetadatamodel/src/hnconditionfactory.cpp --- a/menufw/hierarchynavigator/hnmetadatamodel/src/hnconditionfactory.cpp Thu Mar 18 14:45:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/* -* Copyright (c) 2007-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: -* -*/ - - -#include "hnconditionfactory.h" -#include "hnsimplecondition.h" -#include "hncomplexcondition.h" -#include "hnglobals.h" - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnConditionInterface* HnConditionFactory::NewL( TXmlEngAttr aElement ) - { - CHnConditionInterface* self = HnConditionFactory::NewLC( aElement ); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnConditionInterface* HnConditionFactory::NewLC( TXmlEngAttr aElement ) - { - TPtrC8 condition = aElement.Value(); - CHnConditionInterface* self = ConstructConditionL( condition ); - CleanupStack::PushL( self ); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnConditionInterface* HnConditionFactory::NewL( TDesC8 & aElement ) - { - CHnConditionInterface* self = HnConditionFactory::NewLC( aElement ); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnConditionInterface* HnConditionFactory::NewLC( TDesC8 & aElement ) - { - CHnConditionInterface* self = HnConditionFactory::ConstructConditionL( aElement ); - CleanupStack::PushL( self ); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void HnConditionFactory::TrimConditionL( RBuf8 & aConditionString ) - { - TBool ret; - do - { - ret = EFalse; - aConditionString.TrimAll(); - TInt conditionLastIndex = aConditionString.Length()-1; - if (aConditionString[0] == EOpeningBrace - && aConditionString[conditionLastIndex] == EClosingBrace ) - { - aConditionString[0] = ESpace; - aConditionString[conditionLastIndex] = ESpace; - - ret = ETrue; - - if ( CheckBraceIntegrityL( aConditionString ) ) - { - aConditionString[0] = EOpeningBrace; - aConditionString[conditionLastIndex] = EClosingBrace; - ret = EFalse; - } - } - } - while (ret); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool HnConditionFactory::CheckBraceIntegrityL( TDesC8 & aConditionString ) - { - TInt ret(KErrNone); - TLex8 lexer( aConditionString ); - TInt lookForClosingBrace( 0 ); - while ( !lexer.Eos() ) - { - switch ( TUint( lexer.Get() ) ) - { - case EOpeningBrace : - lookForClosingBrace++; - break; - case EClosingBrace : - lookForClosingBrace--; - if (lookForClosingBrace < 0) - { - ret = KErrGeneral; - lexer.Inc( lexer.Remainder().Length() ); - } - break; - } - } - - if (lookForClosingBrace > 0) - { - ret = KErrGeneral; - } - - return ret; - } -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnConditionInterface* HnConditionFactory::ConstructConditionL( - TDesC8 & aConditionString ) - { - RBuf8 condition; - CleanupClosePushL( condition ); - condition.CreateL( aConditionString ); - HnConditionFactory::TrimConditionL( condition ); - User::LeaveIfError( HnConditionFactory::CheckBraceIntegrityL(condition) ); - - CHnConditionInterface* ret = NULL; - - if ( aConditionString.Find( HnLogicalRelations::KLogicalAnd8 ) == KErrNotFound - && aConditionString.Find( HnLogicalRelations::KLogicalOr8 ) == KErrNotFound ) - { - ret = CHnSimpleCondition::NewL( condition ); - } - else - { - ret = CHnComplexCondition::NewL( condition ); - } - - CleanupStack::PopAndDestroy( &condition ); - return ret; - } -