diff -r 000000000000 -r c53acadfccc6 metadataengine/client/src/mdenamespacedef.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/metadataengine/client/src/mdenamespacedef.cpp Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,252 @@ +/* +* Copyright (c) 2009 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: ?Description +* +*/ + + +#include "mdenamespacedef.h" + +#include "mdcdef.h" +#include "mdeobjectdef.h" +#include "mderelationdef.h" +#include "mdeeventdef.h" +#include "mdcserializationbuffer.h" + + +CMdENamespaceDef::CMdENamespaceDef( const CMdESession& aMdeSession, + const TMdCNamespaceDef& aNamespaceDef ) + : iMdeSession( aMdeSession ), iNamespaceDef( aNamespaceDef ) + { + } + +CMdENamespaceDef* CMdENamespaceDef::NewL( const CMdESession& aMdeSession, + const TMdCNamespaceDef& aNamespaceDef, + CMdCSerializationBuffer& aSchemaBuffer ) + { + CMdENamespaceDef* def = CMdENamespaceDef::NewLC( aMdeSession, + aNamespaceDef, aSchemaBuffer ); + CleanupStack::Pop( def ); + return def; + } + +CMdENamespaceDef* CMdENamespaceDef::NewLC( const CMdESession& aMdeSession, + const TMdCNamespaceDef& aNamespaceDef, + CMdCSerializationBuffer& aSchemaBuffer ) + { + CMdENamespaceDef* def = new( ELeave ) CMdENamespaceDef( aMdeSession, + aNamespaceDef ); + CleanupStack::PushL( def ); + def->ConstructL( aSchemaBuffer ); + return def; + } + +void CMdENamespaceDef::ConstructL(CMdCSerializationBuffer& aSchemaBuffer) + { + aSchemaBuffer.PositionL( iNamespaceDef.iName.iPtr.iOffset ); + iName.Set( aSchemaBuffer.ReceivePtr16L() ); + + TUint32 count = iNamespaceDef.iObjectDefs.iPtr.iCount; + TMdCOffset offset = iNamespaceDef.iObjectDefs.iPtr.iOffset; + iObjectDefs.ReserveL( count ); + for ( TUint32 i = 0; i < count; ++i ) + { + aSchemaBuffer.PositionL( offset + i * sizeof(TMdCObjectDef) ); + const TMdCObjectDef& objectDef = TMdCObjectDef::GetFromBufferL(aSchemaBuffer); + iObjectDefs.AppendL( CMdEObjectDef::NewL( objectDef, aSchemaBuffer, *this ) ); + } + + count = iNamespaceDef.iEventDefs.iPtr.iCount; + offset = iNamespaceDef.iEventDefs.iPtr.iOffset; + iEventDefs.ReserveL( count ); + for ( TUint32 i = 0; i < count; ++i ) + { + aSchemaBuffer.PositionL( offset + i * sizeof(TMdCEventDef) ); + const TMdCEventDef& eventDef = TMdCEventDef::GetFromBufferL(aSchemaBuffer); + iEventDefs.AppendL( CMdEEventDef::NewL( eventDef, aSchemaBuffer, *this ) ); + } + + count = iNamespaceDef.iRelationDefs.iPtr.iCount; + offset = iNamespaceDef.iRelationDefs.iPtr.iOffset; + iRelationDefs.ReserveL( count ); + for ( TUint32 i = 0; i < count; ++i ) + { + aSchemaBuffer.PositionL( offset + i * sizeof(TMdCRelationDef) ); + const TMdCRelationDef& relationDef = TMdCRelationDef::GetFromBufferL(aSchemaBuffer); + iRelationDefs.AppendL( CMdERelationDef::NewL( relationDef, aSchemaBuffer, *this ) ); + } + } + +CMdENamespaceDef::~CMdENamespaceDef() + { + + iObjectDefs.ResetAndDestroy(); + iObjectDefs.Close(); + + iEventDefs.ResetAndDestroy(); + iEventDefs.Close(); + + iRelationDefs.ResetAndDestroy(); + iRelationDefs.Close(); + } + +TDefId CMdENamespaceDef::Id() const + { + return iNamespaceDef.iDefId; + } + +EXPORT_C TBool CMdENamespaceDef::ReadOnly() const + { + return iNamespaceDef.iReadOnly; + } + +EXPORT_C const TDesC& CMdENamespaceDef::Name() const + { + return iName; + } + +EXPORT_C TInt CMdENamespaceDef::Compare( const CMdENamespaceDef& aNamespaceDef ) const + { + return iNamespaceDef.iDefId - aNamespaceDef.Id(); + } + +EXPORT_C TInt CMdENamespaceDef::ObjectDefCount() const + { + return iObjectDefs.Count(); + } + +EXPORT_C CMdEObjectDef& CMdENamespaceDef::ObjectDefL(TInt aIndex) + { + return *iObjectDefs[aIndex]; + } + +EXPORT_C CMdEObjectDef& CMdENamespaceDef::GetObjectDefL(const TDesC& aName) + { + const TInt objectDefsCount = iObjectDefs.Count(); + for ( TInt i = 0; i < objectDefsCount; ++i ) + { + if ( !aName.Compare( iObjectDefs[i]->Name() ) ) + { + return ObjectDefL( i ); + } + } + + User::Leave( KErrNotFound ); + + // to stop compile warnings + CMdEObjectDef* objectDef = NULL; + return *objectDef; + } + +CMdEObjectDef* CMdENamespaceDef::GetObjectDefL(TDefId aId) + { + const TInt objectDefsCount = iObjectDefs.Count(); + for ( TInt i = 0; i < objectDefsCount; ++i ) + { + if ( aId == iObjectDefs[i]->Id() ) + { + return &ObjectDefL( i ); + } + } + + return NULL; + } + +EXPORT_C TInt CMdENamespaceDef::RelationDefCount() const + { + return iRelationDefs.Count(); + } + +EXPORT_C CMdERelationDef& CMdENamespaceDef::RelationDefL(TInt aIndex) + { + return *iRelationDefs[aIndex]; + } + +EXPORT_C CMdERelationDef& CMdENamespaceDef::GetRelationDefL(const TDesC& aName) + { + const TInt relationDefCount = iRelationDefs.Count(); + for ( TInt i = 0; i < relationDefCount; ++i ) + { + if( !aName.Compare( iRelationDefs[i]->Name() ) ) + { + return RelationDefL( i ); + } + } + + User::Leave( KErrNotFound ); + + // to stop compile warnings + CMdERelationDef* relationDef = NULL; + return *relationDef; + } + +CMdERelationDef* CMdENamespaceDef::GetRelationDefL(TDefId aId) + { + const TInt relationDefCount = iRelationDefs.Count(); + for ( TInt i = 0; i < relationDefCount; ++i ) + { + if( iRelationDefs[i]->Id() == aId ) + { + return &RelationDefL( i ); + } + } + + return NULL; + } + +EXPORT_C TInt CMdENamespaceDef::EventDefCount() const + { + return iEventDefs.Count(); + } + +EXPORT_C CMdEEventDef& CMdENamespaceDef::EventDefL(TInt aIndex) + { + return *iEventDefs[aIndex]; + } + +EXPORT_C CMdEEventDef& CMdENamespaceDef::GetEventDefL(const TDesC& aName) + { + const TInt eventDefCount = iEventDefs.Count(); + for ( TInt i = 0; i < eventDefCount; ++i ) + { + if( !aName.Compare( iEventDefs[i]->Name() ) ) + { + return EventDefL( i ); + } + } + + User::Leave( KErrNotFound ); + + // to stop compile warnings + CMdEEventDef* eventDef = NULL; + return *eventDef; + } + +CMdEEventDef* CMdENamespaceDef::GetEventDefL(TDefId aId) + { + const TInt eventDefCount = iEventDefs.Count(); + for ( TInt i = 0; i < eventDefCount; ++i ) + { + if( iEventDefs[i]->Id() == aId ) + { + return &EventDefL( i ); + } + } + return NULL; + } + +const CMdESession& CMdENamespaceDef::Session() const + { + return iMdeSession; + }