smf/smfservermodule/smfserver/datastoremgr/dsm.cpp
changeset 26 83d6a149c755
parent 25 a180113055cb
--- a/smf/smfservermodule/smfserver/datastoremgr/dsm.cpp	Thu Sep 23 17:43:31 2010 +0530
+++ b/smf/smfservermodule/smfserver/datastoremgr/dsm.cpp	Mon Oct 11 21:59:54 2010 +0530
@@ -16,6 +16,7 @@
 #include <dsm.h>
 #include <QDebug>
 
+
 // Static data initialization
 DataStoreManager* DataStoreManager::dsmInstance = NULL;
 const QString DataStoreManager::dbName = "dsm.db";
@@ -49,6 +50,10 @@
     db.close();
     state = CLOSED;
     delete dsmInstance;
+    if(iSmsfRelationItem)
+    	delete iSmsfRelationItem;
+    if(iDSMContactPckgItem)
+    	delete iDSMContactPckgItem;
 }
 
 //! \fn getState()
@@ -69,10 +74,12 @@
     return lastMsg;
 }
 
-SmfRelationId DataStoreManager::create(SmfProvider *aProvider, SmfContact *aContact)
+ SmfError DataStoreManager::create(SmfRelationId &aRelationId,SmfProvider *aProvider, SmfContact *aContact)
 	{
+	SmfError err = SmfNoError;
+	aRelationId.clear();
 	if(NULL == aProvider || NULL == aContact)
-		return QString::number(-1);//SmfUnknownError 
+		return SmfUnknownError;//SmfUnknownError 
 	
 	QString userId, contactUrl, localId, managerUri, presenceState, presenceText, statusText;
 	QDateTime dateTime;
@@ -117,16 +124,22 @@
 	qDebug()<<"Inside Test DSM Create: snsDesc"<<snsDesc;
 	
 	
+	int contactID;
+	err = addContactToTable(contactID,userId, contactUrl, localId, managerUri, snsName, snsDesc, snsUrl, presenceState, presenceText , statusText, timeStampInSeconds);
+	if(SmfNoError == err)
+		{
+		QString cntcId(QString::number(addRelationToTable(contactID)));
+		aRelationId.append(cntcId);
+		}
+		return err;
 	
-	const int contactID = addContactToTable(userId, contactUrl, localId, managerUri, snsName, snsDesc, snsUrl, presenceState, presenceText , statusText, timeStampInSeconds);
-	if(!(contactIfExist(contactID)))
-		return QString::number(-1);
-	return QString::number( addRelationToTable( contactID ) );
+	//return QString::number( addRelationToTable( contactID ) );
 }
 
 SmfError DataStoreManager::associate( 	SmfRelationId aPhoneId,	
 										const SmfContact* aContact, 
 										SmfProvider* aProvider){
+	SmfError err = SmfNoError;
 	if(NULL == aProvider || NULL == aContact)
 			return SmfError(-1);//SmfUnknownError
 	
@@ -165,12 +178,17 @@
 	qDebug()<<"Inside Test DSM Associate: snsUrl"<<snsUrl;
 	qDebug()<<"Inside Test DSM Associate: snsDesc"<<snsDesc;
 	
-	const int contactID = addContactToTable(userId, contactUrl, localId, managerUri, snsName, snsDesc, snsUrl, presenceState, presenceText , statusText, timeStampInSeconds);
+	int contactID;
+	err = addContactToTable(contactID,userId, contactUrl, localId, managerUri, snsName, snsDesc, snsUrl, presenceState, presenceText , statusText, timeStampInSeconds);
+	if(SmfNoError == err)
+		{
 	TInt Id = addRelationToTable( contactID,  aPhoneId.toInt()); 
 	if(Id == aPhoneId.toInt())
-		return  SmfNoError ;
+			err = SmfNoError ;
 	else
-		return SmfDbOpeningError;
+			err = SmfDbOpeningError;
+		}
+	return err;
 }
 
 /** remove contact from a relation */
@@ -667,7 +685,8 @@
 	
 }
 
-int DataStoreManager::addContactToTable(const QString &aUserId, 
+SmfError DataStoreManager::addContactToTable (int &aContactId,
+									const QString &aUserId, 
 									const QString &aContactUrl,
 									const QString &aLocalId,
 									const QString &aManagerUri,
@@ -679,7 +698,19 @@
 									const QString &aStatusText,
 									const Int64 aTimeStamp ){
 	
-	int contactId;
+	SmfError err = SmfNoError;	
+	
+	if(contactIfExist(aUserId,aSnsName))
+		return SmfContactExists;
+	
+	if(aUserId.isEmpty() || aUserId.isNull())
+		return SmfInvalidGuid;
+	
+	if(aContactUrl.isEmpty() || aContactUrl.isNull())
+		return SmfInvalidContactUrl;
+	
+	if(aLocalId.isEmpty() || aLocalId.isNull())
+			return SmfInvalidContactUrl;
 		
 	if(SmfDbOpeningError == openDB())
 		return SmfDbOpeningError;
@@ -715,12 +746,12 @@
 		return SmfDbQueryExecutonError; 
 
 	if(qry.next()){
-		contactId = qry.value(0).toInt();
+		aContactId = qry.value(0).toInt();
 	}
 
 	qry.finish();
 	db.close();
-	return contactId;	
+	return err;	
 }
 
 SmfError DataStoreManager::removeContactFromTable(const int aContactId){
@@ -742,19 +773,19 @@
 }
 
 
-
-TBool DataStoreManager::contactIfExist( const int aContactId){
+TBool DataStoreManager::contactIfExist( const QString &userId,const QString &snsName){
 	
 	TBool contactExist = EFalse;
 	if(SmfDbOpeningError == openDB())
 		return EFalse;
 
 	QSqlQuery qry;
-	TBool queryPep = qry.prepare("SELECT contactId FROM contact WHERE contactId=:contactId");
+	TBool queryPep;
+	queryPep = qry.prepare("SELECT userId FROM contact WHERE userId=:userId");
 	if(!queryPep)
 		return EFalse;
 		
-	qry.bindValue(":contactId", aContactId);
+	qry.bindValue(":userId", userId);
 
 	if(SmfDbQueryExecutonError == executeQuery(qry))
 		return EFalse; 
@@ -762,10 +793,24 @@
 	if( qry.first() )
 		contactExist = ETrue;
 		
+	if(contactExist){
+		queryPep = qry.prepare("SELECT userId FROM contact WHERE snsName=:snsName");
+		if(!queryPep)
+			return EFalse;
+			
+		qry.bindValue(":snsName", snsName);
+
+		if(SmfDbQueryExecutonError == executeQuery(qry))
+			return EFalse; 
+
+		if( qry.first() )
+			contactExist = ETrue;	
+	}
 	qry.finish();
 	db.close();
 
 	return contactExist;
+		
 }
 
 TBool DataStoreManager::relationIfExist( const int aRelationId){