bookmarksengine/bookmarksserver/src/bookmarkserver.cpp
changeset 0 fa475d6462b2
child 2 016bf4557e2f
equal deleted inserted replaced
-1:000000000000 0:fa475d6462b2
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include<bookmarkserver.h>
       
    20 #include<QSqlDatabase>
       
    21 #include<QSqlQuery>
       
    22 #include <QDir>
       
    23 #include <QFileInfo>
       
    24 #include <QList>
       
    25 #include<bookmarkscommonengine.h>
       
    26 #include<serviceipcrequest.h>
       
    27 #include<QSqlError>
       
    28 #include<QDebug>
       
    29 
       
    30 /**==============================================================
       
    31  * Description: Constructor of BookMarkServer
       
    32  * Author: Chandrashekar.V
       
    33  * EmpId:  10289207
       
    34  ================================================================*/
       
    35 BookMarkServer::BookMarkServer() :
       
    36     m_sessionCount(0)
       
    37     {
       
    38 
       
    39     m_server = new WRT::ServiceFwIPCServer(this, this);
       
    40     createDatabase();
       
    41     bool ret = m_server->listen(BOOKMARKSENGINESERVER);
       
    42     if (!ret)
       
    43         {
       
    44         qDebug() << " Failed to LISTEN" << '\n';
       
    45         QTimer::singleShot(1, this, SLOT(closeServer()));
       
    46         return;
       
    47         }
       
    48 
       
    49     m_server->configIpcServerLifetime(true);
       
    50 
       
    51     }
       
    52 
       
    53 /**==============================================================
       
    54  * Description:Destructor of BookMarkServer
       
    55  * Author: Chandrashekar.V
       
    56  * EmpId:  10289207
       
    57  ================================================================*/
       
    58 BookMarkServer::~BookMarkServer()
       
    59     {
       
    60 
       
    61     if (m_server)
       
    62         {
       
    63         m_server->disconnect();
       
    64         delete m_server;
       
    65         m_server = NULL;
       
    66         }
       
    67     }
       
    68 
       
    69 /**==============================================================
       
    70  * Description:closes the bookmark Server connection
       
    71  * Author: Chandrashekar.V
       
    72  * EmpId:  10289207
       
    73  ================================================================*/
       
    74 void BookMarkServer::closeServer()
       
    75     {
       
    76     // before shutting down, check if any active session exists
       
    77 
       
    78     if (m_sessionCount <= 0)
       
    79         QCoreApplication::quit();
       
    80     }
       
    81 
       
    82 /**==============================================================
       
    83  * Description:Handles the client request
       
    84  * Author: Chandrashekar.V
       
    85  * EmpId:  10289207
       
    86  ================================================================*/
       
    87 bool BookMarkServer::handleRequest(WRT::ServiceIPCRequest *aRequest)
       
    88     {
       
    89 
       
    90     WRT::ClientInfo* clientInfo =
       
    91             const_cast<WRT::ClientInfo*> (aRequest->clientInfo());
       
    92     int sessionID = clientInfo->sessionId();
       
    93     bool val(false);
       
    94     bool result = true;
       
    95     int command = aRequest->getOperation().toInt(&val);
       
    96     QString msg = aRequest->getData();
       
    97     QStringList list = msg.split(BOOKMARKSENGINESEPARATOR);
       
    98     switch (command)
       
    99         {
       
   100         case (EDeleteBookMark):
       
   101             deleteBookMark(aRequest);
       
   102             break;
       
   103         case (EAddBookMark):
       
   104             addBookMark(aRequest);
       
   105             break;
       
   106         case (EFetchBookmark):
       
   107             fetchBookMarkData(aRequest);
       
   108             break;
       
   109         case (EFetchAllBookmarks):
       
   110             fetchBookMarkData(aRequest);
       
   111             break;
       
   112         default:
       
   113             result=false;
       
   114             break;
       
   115         }
       
   116     return result;
       
   117     }
       
   118 
       
   119 /**==============================================================
       
   120  * Description:Adds the bookmark to the database
       
   121  * Author: Chandrashekar.V
       
   122  * EmpId:  10289207
       
   123  ================================================================*/
       
   124 void BookMarkServer::addBookMark(WRT::ServiceIPCRequest *aRequest)
       
   125     {
       
   126 
       
   127     QString msg = aRequest->getData();
       
   128     QStringList list = msg.split(BOOKMARKSENGINESEPARATOR);
       
   129 
       
   130     QString title = list[0];
       
   131     QString url = list[1];
       
   132     QString adate = list[2];
       
   133     QString tags = list[3];
       
   134 
       
   135     QSqlDatabase db = QSqlDatabase::database(m_connectionName);
       
   136 
       
   137     if (db.isOpen())
       
   138         {
       
   139 
       
   140         QSqlQuery query(db);
       
   141         query.prepare("INSERT INTO BookMarkTable (title, url, adate, tags) "
       
   142             "VALUES (:title, :url, :adate, :tags)");
       
   143 
       
   144         query.bindValue(":title", QVariant(title));
       
   145         query.bindValue(":url", QVariant(url));
       
   146         query.bindValue(":adate", QVariant(adate));
       
   147         query.bindValue(":tags", QVariant(tags));
       
   148         query.exec();
       
   149         QSqlError error = query.lastError();
       
   150 
       
   151         }
       
   152     QString strResponse;
       
   153     WRT::ClientInfo* clientInfo =
       
   154             const_cast<WRT::ClientInfo*> (aRequest->clientInfo());
       
   155     strResponse.append(QString::number(EServerMsgBookmarkAdded));
       
   156     strResponse.append(BOOKMARKSENGINESEPARATOR);
       
   157     strResponse.append(title);
       
   158     strResponse.append(BOOKMARKSENGINESEPARATOR);
       
   159     aRequest->write(strResponse.toAscii());
       
   160     aRequest->completeRequest();
       
   161     m_server->broadcast(strResponse.toAscii());
       
   162 
       
   163     }
       
   164 
       
   165 /**==============================================================
       
   166  * Description:Deletes the bookmark from the database
       
   167  * Author: Chandrashekar.V
       
   168  * EmpId:  10289207
       
   169  ================================================================*/
       
   170 void BookMarkServer::deleteBookMark(WRT::ServiceIPCRequest *aRequest)
       
   171     {
       
   172 
       
   173     QString msg = aRequest->getData();
       
   174     QStringList list = msg.split(";");
       
   175     QString title = list[0];
       
   176     QSqlDatabase db = QSqlDatabase::database(m_connectionName);
       
   177     if (db.isOpen())
       
   178         {
       
   179         QSqlQuery query(db);
       
   180         query.prepare("DELETE FROM BookMarkTable WHERE title=:title");
       
   181         query.bindValue(":title", title);
       
   182         query.exec();
       
   183         QSqlError error = query.lastError();
       
   184         }
       
   185     QString strResponse;
       
   186     strResponse.append(QString::number(EServerMsgBookmarkDeleted));
       
   187     strResponse.append(BOOKMARKSENGINESEPARATOR);
       
   188     strResponse.append(title);
       
   189     strResponse.append(BOOKMARKSENGINESEPARATOR);
       
   190     aRequest->write(strResponse.toAscii());
       
   191     aRequest->completeRequest();
       
   192     }
       
   193 
       
   194 /**==============================================================
       
   195  * Description:Fetches the bookmark data from the database
       
   196  * Author: Chandrashekar.V
       
   197  * EmpId:  10289207
       
   198  ================================================================*/
       
   199 void BookMarkServer::fetchBookMarkData(WRT::ServiceIPCRequest *request)
       
   200     {
       
   201 
       
   202     QSqlDatabase db = QSqlDatabase::database(m_connectionName);
       
   203 
       
   204     QString strResponse;
       
   205 
       
   206     bool dbopen = db.isOpen();
       
   207 
       
   208     if (dbopen)
       
   209         {
       
   210 
       
   211         QSqlQuery query(db);
       
   212 
       
   213         query.prepare("SELECT title,url,adate,tags FROM BookMarkTable");
       
   214         query.exec();
       
   215         QSqlError error = query.lastError();
       
   216 
       
   217         while (query.next())
       
   218             {
       
   219 
       
   220             QString title = query.value(0).toString();
       
   221             QString url = query.value(1).toString();
       
   222             QString date = query.value(2).toString();
       
   223             QString tag = query.value(3).toString();
       
   224 
       
   225             strResponse.append(title);
       
   226             strResponse.append(BOOKMARKSENGINESEPARATOR);
       
   227             strResponse.append(url);
       
   228             strResponse.append(BOOKMARKSENGINESEPARATOR);
       
   229             strResponse.append(tag);
       
   230             strResponse.append(BOOKMARKSENGINESEPARATOR);
       
   231             strResponse.append(date);
       
   232             strResponse.append(BOOKMARKSENGINESEPARATOR);
       
   233             }
       
   234         }
       
   235 
       
   236     WRT::ClientInfo* clientInfo =
       
   237             const_cast<WRT::ClientInfo*> (request->clientInfo());
       
   238     QByteArray res = strResponse.toAscii();
       
   239 
       
   240     request->write(strResponse.toAscii());
       
   241     request->completeRequest();
       
   242 
       
   243     }
       
   244 
       
   245 /**==============================================================
       
   246  * Description:Handles the client cancel request
       
   247  * Author: Chandrashekar.V
       
   248  * EmpId:  10289207
       
   249  ================================================================*/
       
   250 void BookMarkServer::handleCancelRequest(WRT::ServiceIPCRequest *aRequest)
       
   251     {
       
   252     qDebug() << " Not supported Right now";
       
   253     }
       
   254 
       
   255 /**==============================================================
       
   256  * Description:Handles the client connection requests
       
   257  * Author: Chandrashekar.V
       
   258  * EmpId:  10289207
       
   259  ================================================================*/
       
   260 void BookMarkServer::handleClientConnect(WRT::ClientInfo *aClient)
       
   261     {
       
   262 
       
   263     int sessionID = aClient->sessionId();
       
   264     m_clients.insert(sessionID, aClient->name());
       
   265     m_sessionCount++;
       
   266 
       
   267     }
       
   268 
       
   269 /**==============================================================
       
   270  * Description:Handles the client disconnect request
       
   271  * Author: Chandrashekar.V
       
   272  * EmpId:  10289207
       
   273  ================================================================*/
       
   274 void BookMarkServer::handleClientDisconnect(WRT::ClientInfo *aClient)
       
   275     {
       
   276     int sessionID = aClient->sessionId();
       
   277     QMutableHashIterator<int, QString> itr(m_clients);
       
   278     while (itr.hasNext())
       
   279         {
       
   280         itr.next();
       
   281         if (itr.key() == sessionID)
       
   282             {
       
   283             itr.remove();
       
   284             break;
       
   285             }
       
   286         }
       
   287 
       
   288     if (--m_sessionCount <= 0)
       
   289         {
       
   290         closeServer();
       
   291         
       
   292         }
       
   293 
       
   294     }
       
   295 
       
   296 /**==============================================================
       
   297  * Description:Handles the creation of bookmarks databse
       
   298  * Author: Chandrashekar.V
       
   299  * EmpId:  10289207
       
   300  ================================================================*/
       
   301 int BookMarkServer::createDatabase()
       
   302     {
       
   303 
       
   304     m_connectionName = "bookmark_";
       
   305 
       
   306     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", m_connectionName);
       
   307     db.setHostName("Simulator");
       
   308     db.setDatabaseName(dbLocation);
       
   309 
       
   310     if (!db.open())
       
   311         return -1;
       
   312 
       
   313     QFileInfo dbFile(dbLocation);
       
   314     if (dbFile.exists() && dbFile.size() == 0)
       
   315         {
       
   316         QSqlQuery query(db);
       
   317         query.exec(
       
   318                 "CREATE TABLE BookMarkTable (title VARCHAR(40) NOT NULL,url VARCHAR(100),adate VARCHAR(40),tags VARCHAR(40),CONSTRAINT pk_BookMarkTable PRIMARY KEY(title))");
       
   319 
       
   320         }
       
   321     
       
   322   
       
   323     return 0;
       
   324     }
       
   325