messagingfw/msgsrvnstore/server/src/msvheaderfields.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/src/msvheaderfields.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,290 @@
+// Copyright (c) 2001-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: Neeraj Nayan
+//
+// Description: The class provides interface to create message header
+// store.
+
+/**
+ * HEADER FILES
+ */
+#include <msvapi.h>
+
+
+
+/**
+ * MEMBER FUNCTIONS OF CMsvHeaderStore
+ */
+
+
+/**
+ * CMsvHeaderStore()
+ * The default Constructor. 
+ *
+ * @param aMtmId: The MTM-Id of the header store to be created.
+ * @param aSession: A reference to the session object. 
+ */
+CMsvHeaderStore::CMsvHeaderStore(TUid aMtmId, CMsvSession& aSession)
+:iMtmUid(aMtmId),iSessionRef(aSession)
+	{
+	}
+
+
+
+
+/**
+ * ~CMsvHeaderStore()
+ *
+ * The default Destructor.
+ */
+CMsvHeaderStore::~CMsvHeaderStore()
+	{
+	if(iLastErrorMessage)
+		{
+		delete iLastErrorMessage;		
+		}
+
+	iFieldDetails.ResetAndDestroy();
+	iFieldDetails.Close();
+	}
+
+
+
+
+
+/**
+ * NewLC()
+ * 
+ * Allocates and constructs a new CMsvHeaderStore object.
+ *
+ * @param aMtmId: The MTM-Id of the header store to be created.
+ * @param aSession: A reference to the session object.
+ * @leave KErrNoMemory Not enough memory to create object. 
+ * 
+ @publishedAll
+ @released
+ */
+EXPORT_C CMsvHeaderStore* CMsvHeaderStore::NewLC(const TUid& aMtmId, CMsvSession& aSession)
+	{
+	//Create the DBAdapter object.
+	CMsvHeaderStore* self = new(ELeave) CMsvHeaderStore(aMtmId, aSession);
+	CleanupStack::PushL(self);
+	return self;
+	}
+	
+	
+	
+
+
+
+/**
+ * NewL()
+ * 
+ * Allocates and constructs a new CMsvHeaderStore object.
+ *
+ * @param aMtmId: The MTM-Id of the header store to be created.
+ * @param aSession: A reference to the session object.
+ * @leave KErrNoMemory Not enough memory to create object. 
+ * 
+ @publishedAll
+ @released
+ */
+EXPORT_C CMsvHeaderStore* CMsvHeaderStore::NewL(const TUid& aMtmId, CMsvSession& aSession)
+	{
+	//Create the DBAdapter object.
+	CMsvHeaderStore* self = new(ELeave) CMsvHeaderStore(aMtmId, aSession);
+	return self;
+	}
+
+
+
+
+
+/**
+ * AddFieldL()
+ *
+ * Adds a new field to the header store.
+ *
+ * @param aFieldName: Name of the header field.
+ * @param aFieldType: Data type of the field.
+ * @leave KErrNoMemory Not enough memory to create object.
+ * 
+ @publishedAll
+ @released
+ */
+EXPORT_C void CMsvHeaderStore::AddFieldL(HBufC* aFieldName, EFieldType aFieldType)
+	{
+	if(NULL == aFieldName)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	CFieldPair *fieldObject = new(ELeave) CFieldPair();
+	CleanupStack::PushL(fieldObject);
+	
+	fieldObject->iFieldType = aFieldType;
+	fieldObject->iFieldName = aFieldName;
+	
+	iFieldDetails.AppendL(fieldObject);
+	CleanupStack::Pop(fieldObject);
+	}
+	
+	
+
+
+
+/**
+ * AddFieldL()
+ *
+ * Adds a new standard field to the header store. It is recommended
+ * that user calls this version of AddField() to add standard fields 
+ * to header store. The function might leave with KErrArgument or KErrNoMemory.
+ *
+ * @param aCommonHeaderFieldName: Standard header fields, To, CC, BCC, From, Subject.
+ * @leave KErrNoMemory Not enough memory to create object. 
+ * @leave KErrArgument Invalid argument passed.
+ *
+ @publishedAll
+ @released
+ */	
+EXPORT_C void CMsvHeaderStore::AddFieldL(TCommonHeaderField aCommonHeaderFieldName)
+	{
+	CFieldPair *fieldObject = new(ELeave) CFieldPair();
+	CleanupStack::PushL(fieldObject);
+	
+	fieldObject->iFieldType = ETextField;
+	switch (aCommonHeaderFieldName)
+		{
+		case EFrom:
+			_LIT16(KFromText, "From");
+			fieldObject->iFieldName = KFromText().AllocL();			
+			break;
+		
+		case ETo:
+			_LIT16(KToText, "To");
+			fieldObject->iFieldName = KToText().AllocL();
+			break;
+		
+		case ECC:
+			_LIT16(KCCText, "CC");
+			fieldObject->iFieldName = KCCText().AllocL();
+			break;
+		
+		case EBCC:
+			_LIT16(KBCCText, "BCC");
+			fieldObject->iFieldName = KBCCText().AllocL();
+			break;
+	
+		case ESubject:
+			_LIT16(KSubjectText, "Subject");
+			fieldObject->iFieldName = KSubjectText().AllocL();
+			break;
+		
+		default:
+			User::Leave(KErrArgument);
+		}
+	
+	iFieldDetails.AppendL(fieldObject);
+	CleanupStack::Pop(fieldObject);
+	}
+
+
+
+
+
+/**
+ * CreateStoreL()
+ *
+ * The API creates the header store in the message store in the message 
+ * server current drive. The caller must call AddFieldL() APIs to specify
+ * the header structure before calling this API.
+ *
+ * A headerStore is associated with a mtm type and stores message header
+ * data. Message server creates a separate store for each MTM type. A 
+ * header-entry in the headerStore is essentially a list of UID-Data entries.
+ * For example an email header-entry can have CImHeader, MIME header and 
+ * encoded header stored as a separate UID-Data entry in the header store.
+ * By default a UID-Data entry will have a "Default" field which store the
+ * content of 'Data'. Moreover one such UID-Data pair can also specify mutiple
+ * fields such that it can store individual portion of data in such fields 
+ * separately. 
+ *
+ * @leave All system wide leave code.
+ *
+ * @capability WriteDeviceData
+ *
+ @publishedAll
+ @released
+ */
+EXPORT_C void CMsvHeaderStore::CreateStoreL()
+	{
+	iSessionRef.Session().CreateStoreL(iMtmUid, iFieldDetails);
+	}
+	
+	
+	
+
+
+
+
+/**
+ * DoesStoreExists()
+ *
+ * The function checks the existence of a header store
+ * for a given MTM Id. The function can be called to 
+ * check if the header store already exist before creating
+ * the store.
+ *
+ * @param aMtmId: The MTM UID under consideration.
+ * @param aSession: A reference to session with the server.
+ * @return TBool: ETrue, if the header store for passed MTM
+ * ID exists, otherwise returns EFalse.
+ * @leave: All system wide error code.
+ *
+ * @capability ReadDeviceData 
+ *
+ @publishedAll
+ @released
+ */
+EXPORT_C TBool CMsvHeaderStore::DoesStoreExistsL(const TUid& aMtmId, CMsvSession& aSession)
+	{
+	return aSession.Session().DoesStoreExistsL(aMtmId);
+	}
+	
+	
+	
+
+	
+/**
+ * LastErrorMessage()
+ *
+ * The function returns the detail error message 
+ * received while creating the header store.
+ *
+ * @return TPtrC: The detail error message.
+ * @leave All system wide leave code.
+ *
+ @publishedAll
+ @released
+ */
+EXPORT_C TPtrC CMsvHeaderStore::LastErrorMessageL()
+	{
+	if(iLastErrorMessage)
+		{
+		delete iLastErrorMessage;
+		iLastErrorMessage = NULL;
+		}
+	iSessionRef.Session().LastErrorMessageL(iLastErrorMessage);
+	return iLastErrorMessage->Des();
+	}
+
+
+