--- /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 );
+ }
+ }
+ }