diff -r 000000000000 -r 094583676ce7 PECengine/AttributeLibrary2/Src/CPEngAttrConstructorCon.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/AttributeLibrary2/Src/CPEngAttrConstructorCon.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,229 @@ +/* +* Copyright (c) 2004 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: Presence attribute constructor container. +* +*/ + +// INCLUDE FILES +#include "CPEngAttrConstructorCon.h" +#include "CPEngSessionSlotObject.h" +#include "CPEngPresenceAttrConstructor.h" +#include "MPEngPresenceAttrConstructorTypeImp.h" + +#include + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPEngAttrConstructorCon* CPEngAttrConstructorCon::NewL( CPEngSessionSlotObject& aOwner ) + { + CPEngAttrConstructorCon* self = new( ELeave ) CPEngAttrConstructorCon( aOwner ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::CPEngAttrConstructorCon +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CPEngAttrConstructorCon::CPEngAttrConstructorCon( CPEngSessionSlotObject& aOwner ) + : iOwner( aOwner ) + { + } + + +// Destructor +CPEngAttrConstructorCon::~CPEngAttrConstructorCon() + { + iConstructors.ResetAndDestroy(); + } + + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::AddConstructorL() +// ----------------------------------------------------------------------------- +// +void CPEngAttrConstructorCon::AddConstructorL( + MPEngPresenceAttrConstructorTypeImp* aTypeConstructor, + TUint32 aType, + TPEngAttributeOriginator aOrigin ) + { + CPEngPresenceAttrConstructor* constructor = NULL; + + TRAPD( err, + constructor = CPEngPresenceAttrConstructor::NewL( *this, + *aTypeConstructor, + aType, + aOrigin ) ); + if ( err != KErrNone ) + { + delete aTypeConstructor; + User::Leave( err ); + } + + + CleanupStack::PushL( constructor ); + __AssertConstructorValidL( *constructor ); + iConstructors.AppendL( constructor ); + + CleanupStack::Pop( constructor ); + } + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::FindByType() +// ----------------------------------------------------------------------------- +// +CPEngPresenceAttrConstructor* CPEngAttrConstructorCon::FindByType( TUint32 aType ) + { + const TInt count = iConstructors.Count(); + for ( TInt ii( 0 ); ii < count ; ii++ ) + { + CPEngPresenceAttrConstructor* constructor = iConstructors[ ii ]; + if ( constructor->iType == aType ) + { + return constructor; + } + } + + return NULL; + } + + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::FindByTypeL() +// ----------------------------------------------------------------------------- +// +CPEngPresenceAttrConstructor& CPEngAttrConstructorCon::FindByTypeL( TUint32 aType ) + { + CPEngPresenceAttrConstructor* constructor = FindByType( aType ); + if ( !constructor ) + { + User::Leave( KErrUnknown ); + } + + return *constructor; + } + + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::TypeArray() +// ----------------------------------------------------------------------------- +// +TArray CPEngAttrConstructorCon::TypeArray() const + { + return TArray( GetTypeCount, GetTypePtr, ( const CBase* ) this ); + } + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::OpenRef() +// ----------------------------------------------------------------------------- +// +void CPEngAttrConstructorCon::OpenRef() + { + //Simply forward the open and close requests to owner + + iOwner.Open(); // CSI: 15,65 # + } + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::CloseRef() +// ----------------------------------------------------------------------------- +// +void CPEngAttrConstructorCon::CloseRef() + { + //Simply forward the open and close requests to owner + + iOwner.Close(); + } + + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::__AssertConstructorValidL() +// ----------------------------------------------------------------------------- +// +void CPEngAttrConstructorCon::__AssertConstructorValidL( + const CPEngPresenceAttrConstructor& aConstructor ) + { + //Check that each model type ID is unique + __ASSERT_ALWAYS( !FindByType( aConstructor.iType ), + aConstructor.__DbgPanicL( EPEngAttributeTypeIDNotUnique, + KErrAlreadyExists ) ); + + + //Check attribute XML properties + TPtrC8 name( NULL, 0 ); + TPtrC8 nameSpace( NULL, 0 ); + TInt err = aConstructor.GetCurrentXmlNames( name, nameSpace ); + + if ( aConstructor.Originator() == EPEngLocalAttribute ) + { + __ASSERT_ALWAYS( ( name.Length() == 0 ) && ( nameSpace.Length() == 0 ), + aConstructor.__DbgPanicL( EPEngLocalAttributeTypeProperties, + KErrGeneral ) ); + __ASSERT_ALWAYS( ( err == KErrArgument ), + aConstructor.__DbgPanicL( EPEngLocalAttributeTypeProperties, + KErrGeneral ) ); + + } + else + { + User::LeaveIfError( err ); + + __ASSERT_ALWAYS( ( name.Length() > 0 ) && ( nameSpace.Length() > 0 ), + aConstructor.__DbgPanicL( EPEngNetworAttributeTypeProperties, + KErrGeneral ) ); + } + } + + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::GetTypeCount() +// ----------------------------------------------------------------------------- +// +TInt CPEngAttrConstructorCon::GetTypeCount( const CBase* aPtr ) + { + const CPEngAttrConstructorCon* self = static_cast( aPtr ); + return self->iConstructors.Count(); + } + + + +// ----------------------------------------------------------------------------- +// CPEngAttrConstructorCon::GetTypePtr() +// ----------------------------------------------------------------------------- +// +const TAny* CPEngAttrConstructorCon::GetTypePtr( const CBase* aPtr, TInt aIndex ) + { + const CPEngAttrConstructorCon* self = static_cast( aPtr ); + return &( ( self->iConstructors )[ aIndex ]->iType ); + } + + + +// End of File