smf/smfservermodule/smfserver/datastoremgr/dsm.cpp
changeset 10 1d94eb8df9c2
parent 9 b85b0c039c14
--- a/smf/smfservermodule/smfserver/datastoremgr/dsm.cpp	Fri May 21 15:40:57 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,603 +0,0 @@
-/*! \file
-    \brief File containing class description for DataStoreManager class.
-
-    Copyright (c) 2010 Sasken Communication Technologies Ltd.
-    All rights reserved.
-    This component and the accompanying materials are made available
-    under the terms of the "{License}"
-    which accompanies  this distribution, and is available
-    at the URL "{LicenseUrl}".
-
-    \author Jaspinder Singh, Sasken Communication Technologies Ltd - Initial contribution
-
-    \version 0.1
-
-*/
-
-#include <dsm.h>
-#include <QDebug>
-
-// Static data initialization
-DataStoreManager* DataStoreManager::m_dsm_instance = NULL;
-const QString DataStoreManager::db_name = "dsm.db";
-DataStoreManagerState DataStoreManager::state = CLOSED;
-
-//! \fn getDataStoreManager()
-/*!
-    \brief  To get a handle on the datastore instantiation.
-    \brief  This function returns a pointer to the existing DataStoreManager instantiation(object).
-            If no object exists, a new one is created.
-
-    \return Pointer to the current instantiation of DataStoreManager.
-*/
-DataStoreManager* DataStoreManager::getDataStoreManager(){
-    if(m_dsm_instance == NULL){
-        m_dsm_instance = new DataStoreManager(DataStoreManager::db_name);
-        if(!(m_dsm_instance->InitializeDataBase())){
-            return NULL;
-        }
-
-    }
-
-    return  m_dsm_instance;
-}
-
-//! \fn ~DataStoreManager()
-/*!
-    \brief  Destructor for DataStoreManager class.
-
-    \note   Should this be public?
-*/
-DataStoreManager::~DataStoreManager(){
-    db.close();
-    state = CLOSED;
-    delete m_dsm_instance;
-}
-
-//! \fn getState()
-/*!
-    \brief  Get the current state of the DataStoreManager object.
-    \return The state of the DSM object.
-*/
-DataStoreManagerState DataStoreManager::getState() const{
-    return state;
-}
-
-//! \fn getError()
-/*!
-    \brief  Get the last error message from the DataStoreManager object.
-    \return The last error message string of the DSM object.
-*/
-QString DataStoreManager::getError() const{
-    return m_last_msg;
-}
-
-/* Refactor this. Think Signals. */
-QList <SMFSocialProfile> DataStoreManager::getAllRelated(const SMFUserProfile& user_profile) {
-    QList <SMFSocialProfile> related_profiles;
-    int usr_id = user_profile.userID();
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return related_profiles;
-            /* Do something to signal an error. Just returning an empty list is NOT ok */
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("SELECT social_profiles.social_profile_id , social_profiles.user_id , social_profiles.sns_id , "
-                " social_profiles.profile_url , social_profiles.screen_alias"
-                " FROM social_profiles JOIN user_profiles WHERE user_profiles.user_id = social_profiles.user_id"
-                " AND social_profiles.user_id = :user_id");
-    qry.bindValue(":user_id", usr_id);
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        /* Do something to signal an error. Just returning an empty list is NOT ok */
-        return related_profiles;
-    }
-
-    while(qry.next())
-    {
-        SMFSocialProfile _profile(qry.value(2).toInt()/* sns ID*/,
-                                  qry.value(1).toInt() /* user ID */,
-                                  qry.value(3).toString()/* url */,
-                                  qry.value(4).toString()/* alias */);
-        related_profiles << _profile;
-
-    }
-/*
-    for( int i = 0; i < related_profiles.size(); i++){
-        qDebug() << related_profiles.at(i).associatedSnsID() << ", " << related_profiles.at(i).associatedUserID()
-                << related_profiles.at(i).profileURL() << related_profiles.at(i).screenAlias() ;
-    }
-*/
-    qry.finish();
-    db.close();
-
-    return related_profiles;
-
-}
-
-
-SMFSocialProfile DataStoreManager::getRelatedByService(const SMFUserProfile& user_profile, const SMFSocialNetworkingSite& sns){
-
-    SMFSocialProfile _profile;
-    int usr_id = user_profile.userID();
-    int sns_id = sns.snsID();
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return _profile;
-            /* Do something to signal an error. Just returning an empty list is NOT ok */
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("SELECT social_profiles.social_profile_id , social_profiles.user_id , social_profiles.sns_id , "
-                " social_profiles.profile_url , social_profiles.screen_alias"
-                " FROM social_profiles JOIN user_profiles WHERE user_profiles.user_id = social_profiles.user_id"
-                " AND social_profiles.user_id = :user_id AND social_profiles.sns_id = :sns_id");
-    qry.bindValue(":user_id", usr_id);
-    qry.bindValue(":sns_id", sns_id);
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        /* Do something to signal an error. Just returning an empty list is NOT ok */
-        return _profile;
-    }
-
-    if(qry.next()) {
-        _profile.setAssociatedSnsID(qry.value(2).toInt());
-        _profile.setAssociatedUserID(qry.value(1).toInt());
-        _profile.setProfileURL(qry.value(3).toString());
-        _profile.setScreenAlias(qry.value(4).toString());
-    }
-/*
-    qDebug() << _profile.associatedSnsID() << ", " << _profile.associatedUserID() << ", "
-            << _profile.profileURL() << ", "<< _profile.screenAlias() ;
-*/
-    qry.finish();
-    db.close();
-
-    return _profile;
-}
-
-/* Cannot return something like this. Make this async */
-SMFUserProfile DataStoreManager::getUserProfile(const QString& name, const QString& contact_id){    
-    SMFUserProfile _profile;
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return _profile;
-            /* Do something to signal an error. Just returning an empty list is NOT ok */
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("SELECT user_id , name , contact_id FROM user_profiles WHERE name=:name  AND contact_id=:contact_id");
-    qry.bindValue(":name", name);
-    qry.bindValue(":contact_id", contact_id);
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        /* Do something to signal an error. Just returning an empty list is NOT ok */
-        return _profile;
-    }
-
-    if(qry.next()){
-        _profile.setName(qry.value(1).toString());
-        _profile.setContactID(qry.value(2).toString());
-        _profile.setUserID(qry.value(0).toInt());
-    }
-
-    qry.finish();
-    db.close();
-
-    return _profile;
-}
-
-/*! Fetches the Social Networking site identified by \a name */
-SMFSocialNetworkingSite DataStoreManager::getSNSEntry(const QString& name){
-    SMFSocialNetworkingSite sns;
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return sns;
-            /* Do something to signal an error. Just returning an empty list is NOT ok */
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("SELECT sns_id, sns_name, sns_url FROM sns_base WHERE sns_name=:name");
-    qry.bindValue(":name", name);
-
-    if(!qry.exec()){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return sns;
-    }
-
-    if(qry.next()){
-        sns.setSnsID(qry.value(0).toInt());
-        sns.setSnsName(qry.value(1).toString());
-        sns.setSnsURL(qry.value(2).toString());
-    }
-
-    qry.finish();
-    db.close();
-
-    return sns;
-}
-
-/* Actually all these 'save' functions can be written as a template */
-void DataStoreManager::saveUserProfile(const SMFUserProfile& user_profile){
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("UPDATE user_profiles"
-                " SET name=:name , contact_id=:contact_id"
-                " WHERE user_id=:user_id");
-    qry.bindValue(":name", user_profile.name());
-    qry.bindValue(":contact_id", user_profile.contactID());
-    qry.bindValue(":user_id", user_profile.userID());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-    }
-
-    qry.finish();
-    db.close();
-}
-
-void DataStoreManager::saveSocialProfile(const SMFSocialProfile& social_profile){
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("UPDATE social_profiles"
-                " SET user_id=:user_id, sns_id=:sns_id, profile_url=:profile_url, screen_alias=:screen_alias"
-                " WHERE social_profile_id=:social_profile_id");
-    qry.bindValue(":user_id", social_profile.associatedUserID());
-    qry.bindValue(":sns_id", social_profile.associatedSnsID());
-    qry.bindValue(":profile_url", social_profile.profileURL());
-    qry.bindValue(":screen_alias", social_profile.screenAlias());
-    qry.bindValue(":social_profile_id", social_profile.profileID());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-    }
-
-    qry.finish();
-    db.close();
-}
-
-void DataStoreManager::saveSNSEntry(const SMFSocialNetworkingSite& sns){
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("UPDATE sns_base"
-                " SET sns_name=:sns_name, sns_url=:sns_url"
-                " WHERE sns_id=:sns_id");
-    qry.bindValue(":sns_name", sns.snsName());
-    qry.bindValue(":sns_url", sns.snsURL());
-    qry.bindValue(":sns_id", sns.snsID());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-    }
-
-    qry.finish();
-    db.close();
-
-}
-
-void DataStoreManager::modifyRelation(SMFSocialProfile& sns, SMFUserProfile& new_user_profile){
-    sns.setAssociatedUserID(new_user_profile.userID());
-}
-
-
-int DataStoreManager::addUserProfile(SMFUserProfile& user_profile){
-    int user_id = user_profile.userID();
-
-    /* Check Required to identify multiple Entries */
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return user_id;
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("INSERT INTO user_profiles (name, contact_id) VALUES (:name, :contact_id)");
-    qry.bindValue(":name", user_profile.name());
-    qry.bindValue(":contact_id", user_profile.contactID());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return user_id;
-    }
-
-    qry.prepare("SELECT user_id FROM user_profiles WHERE name=:name AND contact_id=:contact_id");
-    qry.bindValue(":name", user_profile.name());
-    qry.bindValue(":contact_id", user_profile.contactID());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return user_id;
-    }
-
-    if(qry.next()){
-        user_id = qry.value(0).toInt();
-        user_profile.setUserID(user_id);
-    }
-
-    qry.finish();
-    db.close();
-
-    return user_id;
-
-
-}
-
-int DataStoreManager::deleteUserProfile( SMFUserProfile& user_profile){
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return -1;
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("DELETE FROM user_profiles WHERE user_id=:user_id");
-    qry.bindValue(":user_id", user_profile.userID());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return -1;
-    }
-
-    qry.finish();
-    db.close();
-
-    return 0;
-}
-
-int DataStoreManager::addSocialProfile(SMFSocialProfile& social_profile){
-    int social_prof_id = social_profile.profileID();
-
-    /* Check Required to identify multiple entries */
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return social_prof_id;
-        }
-    }
-
-    /*  There might be a request to add a social profile with either user and/or sns profile(s)
-        not stored in the database. What to do in that case? Automatically store the other profiles too?
-    */
-    QSqlQuery qry;
-    qry.prepare("INSERT INTO social_profiles (user_id, sns_id, profile_url, screen_alias) "
-                "VALUES (:user_id, :sns_id, :profile_url, :screen_alias)");
-    qry.bindValue(":user_id", social_profile.associatedUserID());
-    qry.bindValue(":sns_id", social_profile.associatedSnsID());
-    qry.bindValue(":profile_url", social_profile.profileURL());
-    qry.bindValue(":screen_alias", social_profile.screenAlias());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return social_prof_id;
-    }
-
-    qry.prepare("SELECT social_profile_id FROM social_profiles  "
-                "WHERE user_id=:user_id AND sns_id=:sns_id AND profile_url=:profile_url AND screen_alias=:screen_alias");
-    qry.bindValue(":user_id", social_profile.associatedUserID());
-    qry.bindValue(":sns_id", social_profile.associatedSnsID());
-    qry.bindValue(":profile_url", social_profile.profileURL());
-    qry.bindValue(":screen_alias", social_profile.screenAlias());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return social_prof_id;
-    }
-
-    if(qry.next()){
-        social_prof_id = qry.value(0).toInt();
-        social_profile.setProfileID(social_prof_id);
-    }
-
-    qry.finish();
-    db.close();
-
-    return social_prof_id;
-}
-
-int DataStoreManager::deleteSocialProfile(SMFSocialProfile& social_profile){
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return -1;
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("DELETE FROM social_profiles WHERE social_profile_id=:social_profile_id");
-    qry.bindValue(":social_profile_id", social_profile.profileID());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return -1;
-    }
-
-    qry.finish();
-    db.close();
-
-    return 0;
-}
-
-int DataStoreManager::addSNSEntry( SMFSocialNetworkingSite& sns){
-    int sns_id = sns.snsID();
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return sns_id;
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("INSERT INTO sns_base (sns_name, sns_url) VALUES (:sns_name, :sns_url)");
-    qry.bindValue(":sns_name", sns.snsName());
-    qry.bindValue(":sns_url", sns.snsURL());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return sns_id;
-    }
-
-    qry.prepare("SELECT sns_id FROM sns_base WHERE sns_name=:sns_name AND sns_url=:sns_url");
-    qry.bindValue(":sns_name", sns.snsName());
-    qry.bindValue(":sns_url", sns.snsURL());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return sns_id;
-    }
-
-    if(qry.next()){
-        sns_id = qry.value(0).toInt();
-        sns.setSnsID(sns_id);
-    }
-
-    qry.finish();
-    db.close();
-
-    return sns_id;
-}
-
-int DataStoreManager::deleteSNSEntry(SMFSocialNetworkingSite& sns){
-
-    if (!(db.isOpen())){
-        if(!(db.open())){
-            state = ERROR;
-            m_last_msg = db.lastError().text();
-            return -1;
-        }
-    }
-
-    QSqlQuery qry;
-    qry.prepare("DELETE FROM sns_base WHERE sns_id=:sns_id");
-    qry.bindValue(":sns_id", sns.snsID());
-
-    if(!(qry.exec())){
-        m_last_msg = qry.lastError().text();
-        qry.finish();
-        return -1;
-    }
-
-    qry.finish();
-    db.close();
-
-    return 0;
-}
-
-int DataStoreManager::createRelation(const SMFUserProfile& user_profile, SMFSocialProfile& social_profile){
-    social_profile.setAssociatedUserID(user_profile.userID());
-    /* Save the socialProfile */
-    //saveSocialProfile(social_profile);
-    return 0;
-}
-
-int DataStoreManager::deleteRelation(const SMFUserProfile&,  SMFSocialProfile& social_profile){
-    social_profile.setAssociatedUserID(-1);
-    /* Save the profile */
-    //saveSocialProfile(social_profile);
-    return 0;
-}
-
-
-DataStoreManager::DataStoreManager(const QString& db_name, QObject* parent):QObject(parent){
-    db = QSqlDatabase::addDatabase("QSQLITE");
-    db.setDatabaseName(db_name);
-}
-
-bool DataStoreManager::InitializeDataBase(){
-
-    if(!db.open()){
-        state = ERROR;
-        m_last_msg = db.lastError().text();
-        return FALSE;
-    }
-    else
-        state = READY;
-
-    QSqlQuery create_tables[3];
-
-    create_tables[0].prepare("CREATE TABLE IF NOT EXISTS user_profiles (user_id INTEGER PRIMARY KEY AUTOINCREMENT , name TEXT, contact_id TEXT)");
-    create_tables[1].prepare("CREATE TABLE IF NOT EXISTS sns_base (sns_id INTEGER PRIMARY KEY AUTOINCREMENT , sns_name TEXT, sns_url TEXT)");
-    create_tables[2].prepare("CREATE TABLE IF NOT EXISTS social_profiles (social_profile_id INTEGER PRIMARY KEY AUTOINCREMENT , user_id INTEGER, sns_id INTEGER, profile_url TEXT, screen_alias TEXT)");
-
-
-
-    for(int i = 0; i < 3; i++){
-        if(!create_tables[i].exec()){
-            state = ERROR;
-            m_last_msg = create_tables[i].lastError().text();
-            return FALSE;
-        }
-        create_tables[i].finish();
-    }
-
-    db.close();
-    state = CLOSED;
-    return TRUE;
-}