javacommons/javastorage/src/client/messagedispatcher.h
branchRCL_3
changeset 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/javastorage/src/client/messagedispatcher.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2008-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:  MessageDispatcher
+*
+*/
+
+
+#ifndef MESSAGEDISPATCHER_H
+#define MESSAGEDISPATCHER_H
+
+#include <string>
+#include <memory>
+
+#include "javaosheaders.h"
+#include "javastorageentry.h"
+#include "javastorage.h"
+#include "javastoragemessage.h"
+
+namespace java
+{
+namespace comms
+{
+class CommsMessage;
+}  // end namespace comms
+namespace storage
+{
+class JavaDataAccess;
+class StatementUtils;
+
+/**
+ * MessageDispatcher takes care of message handling. It creates messages for
+ * the storage and gives them for sending and construct response object from
+ * the message response if needed.
+ */
+OS_NONSHARABLE_CLASS(MessageDispatcher)
+{
+    friend class JavaStorageImpl;
+
+public:
+    /**
+     * Destructor.
+     */
+    ~MessageDispatcher();
+
+    /**
+     * CreateAndSendMessage for short storage statements. These are
+     * transaction and connection handling requests.
+     *
+     * @param aMsgId message identifier.
+     * @param aHeaders connection headers.
+     * @param aStorageName storage name to be opened. This is used only when
+     *                     connection is opened.
+     * @return sessionID string if connection is opened, not used otherwise.
+     * @throws JavaStorageException if unknown message id or error response
+     *         received from the storage.
+     */
+    std::string createAndSendMessage(
+        JavaStorageMessage::MessageIdentifier aMsgId,
+        const std::string& aHeaders,
+        const std::string& aStorageName
+    );
+
+    /**
+     * CreateAndSendMessage for storage statements.
+     *
+     * @param aMsgId message identifier.
+     * @param aHeaders connection headers.
+     * @param aTableName table where statement is executed.
+     * @param aEntry Application entry holding statement data. It contains e.g.
+     *               entries written to storage table.
+     * @return amount of removed storage entries. This is used only when data
+     *         is removed from the storage.
+     * @throws JavaStorageException if unknown message id or error response
+     *         received from the storage.
+     */
+    int createAndSendMessage(
+        JavaStorageMessage::MessageIdentifier aMsgId,
+        const std::string& aHeaders,
+        const std::string& aTableName,
+        const java::storage::JavaStorageApplicationEntry_t& aEntry
+    );
+
+    /**
+     * Handlesearch handles search statements. It creates SQL statement
+     * out of entry, handles communication and constructs application list
+     * from response.
+     *
+     * @param aMsgId message identifier.
+     * @param aHeaders connection headers.
+     * @param aTableName table where statement is executed.
+     * @param aEntry Application entry holding statement data. It contains
+     *               search query data.
+     * @param[out] aAppList response object. Each application represents one row.
+     * @throws JavaStorageException if unknown message id, error response
+     *         received from the storage or invalid data structure detected.
+     */
+    void handleSearch(
+        JavaStorageMessage::MessageIdentifier aMsgId,
+        const std::string& aHeaders,
+        const std::string& aTableName,
+        const java::storage::JavaStorageApplicationEntry_t& aEntry,
+        JavaStorageApplicationList_t& aAppList
+    );
+
+    /**
+     * HandleUpdate hadles update statements. It creates SQL statement
+     * out of entries and send it to storage for execution.
+     *
+     * @param aMsgId message identifier.
+     * @param aHeaders connection headers.
+     * @param aTableName table where statement is executed.
+     * @param aUpdateEntry Application entry holding updated data.
+     * @param aMatchEntry Application entry holding data to match content
+     *                    to be updated.
+     * @throws JavaStorageException if unknown message id or error response
+     *         received from the storage.
+     */
+    void handleUpdate(
+        JavaStorageMessage::MessageIdentifier aMsgId,
+        const std::string& aHeaders,
+        const std::string& aTableName,
+        const JavaStorageApplicationEntry_t& aUpdateEntry,
+        const JavaStorageApplicationEntry_t& aMatchEntry);
+
+private:
+    /**
+     * Private constructor. Creates data access object that is used to
+     * communicate with the storage.
+     */
+    MessageDispatcher();
+
+    /**
+     * Populate single entry. If response contains more than one application
+     * entries they are ignored. If response contains malformed entries
+     * population is stopped and already populated valid entries are left
+     * populated for a robustness sake.
+     *
+     * @param aReceivedMessage response message from the storage as wstring
+     *                         representation.
+     * @param[out] aEntry Application entry populated with response message
+     *                    content. Entry is left empty if no entries found.
+     */
+    void populateEntry(comms::CommsMessage& aReceivedMessage,
+                       JavaStorageApplicationEntry_t& aEntry);
+
+    /**
+     * Populate application list. If response contains malformed application
+     * entries population is stopped and already populated valid entries are
+     * left populated for a robustness sake.
+     *
+     * @param aReceivedMessage response message from the storage as wstring
+     *                         representation.
+     * @param[out] aAppList Application list populated with response message
+     *                    content. List is left empty if no entries found.
+     */
+    void populateEntry(comms::CommsMessage& aReceivedMessage,
+                       JavaStorageApplicationList_t& aAppList);
+
+    /**
+     * Create message header.
+     *
+     * @param aMsgId message identifier.
+     * @param aHeaders current headers.
+     */
+    void createHeader(int aMgsId, std::string& aHeaders);
+
+    /**
+     * Read error message from received message.
+     *
+     * @param aReceivedMessage received message.
+     * @param[out] aErrMsg error message.
+     */
+    void readErrorMessage(comms::CommsMessage& aReceivedMessage,
+                          std::string& aErrMsg);
+
+private:
+    std::auto_ptr<JavaDataAccess> mDataAccess;
+    std::auto_ptr<StatementUtils> mUtils;
+
+};
+
+} // end namespace storage
+} // end namespace java
+
+#endif // MESSAGEDISPATCHER_H
+