diff -r 000000000000 -r c53acadfccc6 metadataengine/server/src/mdsitemdef.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/metadataengine/server/src/mdsitemdef.cpp Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,129 @@ +/* +* 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: Class to hold description about one item definition +* +*/ + +#include "mdsitemdef.h" +#include "mdcserializationbuffer.h" + +// reserved words for schema definitions +#define MDS_SCHEMA_DEFINITION_RESERVED_WORD(ReservedWord) \ + _LIT( K##ReservedWord##Name, " #ReservedWord " ); + +MDS_SCHEMA_DEFINITION_RESERVED_WORD(NamespaceDef) +MDS_SCHEMA_DEFINITION_RESERVED_WORD(ObjectDef) +MDS_SCHEMA_DEFINITION_RESERVED_WORD(PropertyDef) +MDS_SCHEMA_DEFINITION_RESERVED_WORD(RelationDef) +MDS_SCHEMA_DEFINITION_RESERVED_WORD(EventDef) +MDS_SCHEMA_DEFINITION_RESERVED_WORD(Relations) +MDS_SCHEMA_DEFINITION_RESERVED_WORD(Event) +MDS_SCHEMA_DEFINITION_RESERVED_WORD(TextSearch) +MDS_SCHEMA_DEFINITION_RESERVED_WORD(TextSearchDictionary) + +#undef MDS_SCHEMA_DEFINITION_RESERVED_WORD + +/** + * ConstructL + */ +void CMdsItemDef::ConstructL( const TDesC& aName ) + { + // check name of schema definition against reserved words + CheckReservedWordsL( aName ); + + iName = aName.AllocL(); + iStoredFlags = EStoredFlagsNone; + } + +/** + * Destructor + */ +CMdsItemDef::~CMdsItemDef() + { + delete iName; + } + +TUint32 CMdsItemDef::RequiredBufferSize() + { + // itemDefId, name + return CMdCSerializationBuffer::RequiredSize( *iName ); + } + +TMdCOffset CMdsItemDef::SerializeL(CMdCSerializationBuffer& aBuffer) + { + return aBuffer.InsertL( *iName ); + } + +void CMdsItemDef::CheckAllowerCharatersL( const TDesC& aName, TBool aAllowNumbers ) + { + const TInt count = aName.Length(); + + // name can't be empty + if( count <= 0 ) + { + User::Leave( KErrBadDescriptor ); + } + + if( aAllowNumbers ) + { + // first character can't be number + TUint16 c = aName[0]; + CheckAlphabetL( c ); + + for( TInt i = 1; i < count; i++ ) + { + c = aName[i]; + CheckAlphabetOrNumberL( c ); + } + } + else + { + for( TInt i = 0; i < count; i++ ) + { + TUint16 c = aName[i]; + CheckAlphabetL( c ); + } + } + } + +void CMdsItemDef::CheckReservedWordsL( const TDesC& aName ) + { +#define MDS_DEFINE_RESERVED_WORD(ReservedWord) \ + &K##ReservedWord##Name, + + const TDesC* reservedWords[] = + { + MDS_DEFINE_RESERVED_WORD(NamespaceDef) + MDS_DEFINE_RESERVED_WORD(ObjectDef) + MDS_DEFINE_RESERVED_WORD(PropertyDef) + MDS_DEFINE_RESERVED_WORD(RelationDef) + MDS_DEFINE_RESERVED_WORD(EventDef) + MDS_DEFINE_RESERVED_WORD(Relations) + MDS_DEFINE_RESERVED_WORD(Event) + MDS_DEFINE_RESERVED_WORD(TextSearch) + MDS_DEFINE_RESERVED_WORD(TextSearchDictionary) + }; + +#undef MDS_SCHEMA_DEFINITION_RESERVED_WORD + + const TInt count = sizeof ( reservedWords ) / sizeof( TDesC* ); + + for ( TInt i = 0; i < count; ++i ) + { + if ( *reservedWords[ i ] == aName ) + { + User::Leave( KErrGeneral ); + } + } + }