metadataengine/server/src/mdsitemdef.cpp
changeset 0 c53acadfccc6
child 40 910a23996aa0
--- /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 );
+			}
+		}
+	}