bookmarksengine/bookmarksserver/src/bookmarkserver.cpp
changeset 0 fa475d6462b2
child 2 016bf4557e2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bookmarksengine/bookmarksserver/src/bookmarkserver.cpp	Tue May 04 12:39:38 2010 +0300
@@ -0,0 +1,325 @@
+/*
+* 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: 
+*
+*/
+
+
+#include<bookmarkserver.h>
+#include<QSqlDatabase>
+#include<QSqlQuery>
+#include <QDir>
+#include <QFileInfo>
+#include <QList>
+#include<bookmarkscommonengine.h>
+#include<serviceipcrequest.h>
+#include<QSqlError>
+#include<QDebug>
+
+/**==============================================================
+ * Description: Constructor of BookMarkServer
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+BookMarkServer::BookMarkServer() :
+    m_sessionCount(0)
+    {
+
+    m_server = new WRT::ServiceFwIPCServer(this, this);
+    createDatabase();
+    bool ret = m_server->listen(BOOKMARKSENGINESERVER);
+    if (!ret)
+        {
+        qDebug() << " Failed to LISTEN" << '\n';
+        QTimer::singleShot(1, this, SLOT(closeServer()));
+        return;
+        }
+
+    m_server->configIpcServerLifetime(true);
+
+    }
+
+/**==============================================================
+ * Description:Destructor of BookMarkServer
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+BookMarkServer::~BookMarkServer()
+    {
+
+    if (m_server)
+        {
+        m_server->disconnect();
+        delete m_server;
+        m_server = NULL;
+        }
+    }
+
+/**==============================================================
+ * Description:closes the bookmark Server connection
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+void BookMarkServer::closeServer()
+    {
+    // before shutting down, check if any active session exists
+
+    if (m_sessionCount <= 0)
+        QCoreApplication::quit();
+    }
+
+/**==============================================================
+ * Description:Handles the client request
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+bool BookMarkServer::handleRequest(WRT::ServiceIPCRequest *aRequest)
+    {
+
+    WRT::ClientInfo* clientInfo =
+            const_cast<WRT::ClientInfo*> (aRequest->clientInfo());
+    int sessionID = clientInfo->sessionId();
+    bool val(false);
+    bool result = true;
+    int command = aRequest->getOperation().toInt(&val);
+    QString msg = aRequest->getData();
+    QStringList list = msg.split(BOOKMARKSENGINESEPARATOR);
+    switch (command)
+        {
+        case (EDeleteBookMark):
+            deleteBookMark(aRequest);
+            break;
+        case (EAddBookMark):
+            addBookMark(aRequest);
+            break;
+        case (EFetchBookmark):
+            fetchBookMarkData(aRequest);
+            break;
+        case (EFetchAllBookmarks):
+            fetchBookMarkData(aRequest);
+            break;
+        default:
+            result=false;
+            break;
+        }
+    return result;
+    }
+
+/**==============================================================
+ * Description:Adds the bookmark to the database
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+void BookMarkServer::addBookMark(WRT::ServiceIPCRequest *aRequest)
+    {
+
+    QString msg = aRequest->getData();
+    QStringList list = msg.split(BOOKMARKSENGINESEPARATOR);
+
+    QString title = list[0];
+    QString url = list[1];
+    QString adate = list[2];
+    QString tags = list[3];
+
+    QSqlDatabase db = QSqlDatabase::database(m_connectionName);
+
+    if (db.isOpen())
+        {
+
+        QSqlQuery query(db);
+        query.prepare("INSERT INTO BookMarkTable (title, url, adate, tags) "
+            "VALUES (:title, :url, :adate, :tags)");
+
+        query.bindValue(":title", QVariant(title));
+        query.bindValue(":url", QVariant(url));
+        query.bindValue(":adate", QVariant(adate));
+        query.bindValue(":tags", QVariant(tags));
+        query.exec();
+        QSqlError error = query.lastError();
+
+        }
+    QString strResponse;
+    WRT::ClientInfo* clientInfo =
+            const_cast<WRT::ClientInfo*> (aRequest->clientInfo());
+    strResponse.append(QString::number(EServerMsgBookmarkAdded));
+    strResponse.append(BOOKMARKSENGINESEPARATOR);
+    strResponse.append(title);
+    strResponse.append(BOOKMARKSENGINESEPARATOR);
+    aRequest->write(strResponse.toAscii());
+    aRequest->completeRequest();
+    m_server->broadcast(strResponse.toAscii());
+
+    }
+
+/**==============================================================
+ * Description:Deletes the bookmark from the database
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+void BookMarkServer::deleteBookMark(WRT::ServiceIPCRequest *aRequest)
+    {
+
+    QString msg = aRequest->getData();
+    QStringList list = msg.split(";");
+    QString title = list[0];
+    QSqlDatabase db = QSqlDatabase::database(m_connectionName);
+    if (db.isOpen())
+        {
+        QSqlQuery query(db);
+        query.prepare("DELETE FROM BookMarkTable WHERE title=:title");
+        query.bindValue(":title", title);
+        query.exec();
+        QSqlError error = query.lastError();
+        }
+    QString strResponse;
+    strResponse.append(QString::number(EServerMsgBookmarkDeleted));
+    strResponse.append(BOOKMARKSENGINESEPARATOR);
+    strResponse.append(title);
+    strResponse.append(BOOKMARKSENGINESEPARATOR);
+    aRequest->write(strResponse.toAscii());
+    aRequest->completeRequest();
+    }
+
+/**==============================================================
+ * Description:Fetches the bookmark data from the database
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+void BookMarkServer::fetchBookMarkData(WRT::ServiceIPCRequest *request)
+    {
+
+    QSqlDatabase db = QSqlDatabase::database(m_connectionName);
+
+    QString strResponse;
+
+    bool dbopen = db.isOpen();
+
+    if (dbopen)
+        {
+
+        QSqlQuery query(db);
+
+        query.prepare("SELECT title,url,adate,tags FROM BookMarkTable");
+        query.exec();
+        QSqlError error = query.lastError();
+
+        while (query.next())
+            {
+
+            QString title = query.value(0).toString();
+            QString url = query.value(1).toString();
+            QString date = query.value(2).toString();
+            QString tag = query.value(3).toString();
+
+            strResponse.append(title);
+            strResponse.append(BOOKMARKSENGINESEPARATOR);
+            strResponse.append(url);
+            strResponse.append(BOOKMARKSENGINESEPARATOR);
+            strResponse.append(tag);
+            strResponse.append(BOOKMARKSENGINESEPARATOR);
+            strResponse.append(date);
+            strResponse.append(BOOKMARKSENGINESEPARATOR);
+            }
+        }
+
+    WRT::ClientInfo* clientInfo =
+            const_cast<WRT::ClientInfo*> (request->clientInfo());
+    QByteArray res = strResponse.toAscii();
+
+    request->write(strResponse.toAscii());
+    request->completeRequest();
+
+    }
+
+/**==============================================================
+ * Description:Handles the client cancel request
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+void BookMarkServer::handleCancelRequest(WRT::ServiceIPCRequest *aRequest)
+    {
+    qDebug() << " Not supported Right now";
+    }
+
+/**==============================================================
+ * Description:Handles the client connection requests
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+void BookMarkServer::handleClientConnect(WRT::ClientInfo *aClient)
+    {
+
+    int sessionID = aClient->sessionId();
+    m_clients.insert(sessionID, aClient->name());
+    m_sessionCount++;
+
+    }
+
+/**==============================================================
+ * Description:Handles the client disconnect request
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+void BookMarkServer::handleClientDisconnect(WRT::ClientInfo *aClient)
+    {
+    int sessionID = aClient->sessionId();
+    QMutableHashIterator<int, QString> itr(m_clients);
+    while (itr.hasNext())
+        {
+        itr.next();
+        if (itr.key() == sessionID)
+            {
+            itr.remove();
+            break;
+            }
+        }
+
+    if (--m_sessionCount <= 0)
+        {
+        closeServer();
+        
+        }
+
+    }
+
+/**==============================================================
+ * Description:Handles the creation of bookmarks databse
+ * Author: Chandrashekar.V
+ * EmpId:  10289207
+ ================================================================*/
+int BookMarkServer::createDatabase()
+    {
+
+    m_connectionName = "bookmark_";
+
+    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", m_connectionName);
+    db.setHostName("Simulator");
+    db.setDatabaseName(dbLocation);
+
+    if (!db.open())
+        return -1;
+
+    QFileInfo dbFile(dbLocation);
+    if (dbFile.exists() && dbFile.size() == 0)
+        {
+        QSqlQuery query(db);
+        query.exec(
+                "CREATE TABLE BookMarkTable (title VARCHAR(40) NOT NULL,url VARCHAR(100),adate VARCHAR(40),tags VARCHAR(40),CONSTRAINT pk_BookMarkTable PRIMARY KEY(title))");
+
+        }
+    
+  
+    return 0;
+    }
+