From 7b57cba06d0de4a89a639b42341d1bd7710500da Mon Sep 17 00:00:00 2001
From: Marco De Marco <demarco@oats.inaf.it>
Date: Thu, 14 Nov 2013 16:50:32 +0100
Subject: [PATCH] Fill response method added

---
 src/DBManager.cpp       | 12 ++++++++----
 src/DBManager.h         |  4 +++-
 src/ProtocolManager.cpp | 38 ++++++++++++++++++++++++++++++++++++--
 src/ProtocolManager.h   |  5 ++++-
 4 files changed, 51 insertions(+), 8 deletions(-)

diff --git a/src/DBManager.cpp b/src/DBManager.cpp
index 5d4ce13..1961e41 100644
--- a/src/DBManager.cpp
+++ b/src/DBManager.cpp
@@ -114,12 +114,12 @@ DBManager::InformationList DBManager::retrieveInformation(std::string schema,
 }
 
 //==============================================================================
-//      DBManager::retrieveInformation()
+//      DBManager::retrieveNewTuples()
 //==============================================================================
-soci::rowset<soci::row> DBManager::searchNewTuples(std::string schema,
+soci::rowset<soci::row> DBManager::retrieveNewTuples(std::string schema,
     std::string table, std::tm update_time) throw(soci::soci_error)
 {
-    DEBUG_STREAM << "DBManager::searchNewTuples()" << endl;
+    DEBUG_STREAM << "DBManager::retrieveNewTuples()" << endl;
 
     soci::session session(*m_connectionPool_sp);
 
@@ -127,7 +127,11 @@ soci::rowset<soci::row> DBManager::searchNewTuples(std::string schema,
         << schema << "." << table << " where update_time>=:timestamp",
         soci::use(update_time,"timestamp"));
 
-    return rows;
+    MetadataList metadataList;
+
+    std::copy(rows.begin(), rows.end(), std::back_inserter(metadataList));
+
+    return metadataList;
 }
 
 }   //namespace
diff --git a/src/DBManager.h b/src/DBManager.h
index e1a5c4a..7a4c916 100644
--- a/src/DBManager.h
+++ b/src/DBManager.h
@@ -75,7 +75,9 @@ public:
 //------------------------------------------------------------------------------
 //  [Public] Search new tuple method
 //------------------------------------------------------------------------------
-    virtual soci::rowset<soci::row> searchNewTuples(std::string, std::string,
+    typedef std::vector<soci::row> MetadataList;
+
+    virtual MetadataList retrieveNewTuples(std::string, std::string,
         std::tm) throw(soci::soci_error);
 
 protected:
diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp
index c67f345..b38be2f 100644
--- a/src/ProtocolManager.cpp
+++ b/src/ProtocolManager.cpp
@@ -187,6 +187,9 @@ ResponseSP ProtocolManager::prepareValidation(RequestSP request_sp)
             }
             catch(std::runtime_error& ex)
             {
+                WARN_STREAM << "ProtocolManager::prepareValidation() "
+                    << ex.what() << " from " << m_remoteEndpoint << endl;
+
                 validationRes->set_state(Response::Validation::REJECTED);
                 validationRes->set_status(ex.what());
             }
@@ -244,17 +247,39 @@ ResponseSP ProtocolManager::prepareMetadata(RequestSP request_sp)
                 << "schema " << schema << " table " << table << " timestamp "
                 << asctime(&timestamp) << " from " << m_remoteEndpoint << endl;
 
-            metadataRes->set_state(Response::Metadata::ACCEPTED);
-            metadataRes->set_status("Metadata ready");
+            try
+            {
+                DBManager::MetadataList metadataList =
+                    m_dBManager_sp->retrieveNewTuples(schema, table, timestamp);
+
+                fillResponse(metadataRes, metadataList);
+
+                metadataRes->set_state(Response::Metadata::ACCEPTED);
+                metadataRes->set_status("Metadata ready");
+            }
+            catch(std::runtime_error& ex)
+            {
+                WARN_STREAM << "ProtocolManager::prepareMetadata() "
+                    << ex.what() << " from " << m_remoteEndpoint << endl;
+
+                metadataRes->set_state(Response::Metadata::REJECTED);
+                metadataRes->set_status(ex.what());
+            }
         }
         else
         {
+            WARN_STREAM << "ProtocolManager::prepareMetadata() "
+                << "Not validated from " << m_remoteEndpoint << endl;
+
             metadataRes->set_state(Response::Metadata::REJECTED);
             metadataRes->set_status("Not validated");
         }
     }
     else
     {
+        WARN_STREAM << "ProtocolManager::prepareMetadata() "
+            << "Not authorised from " << m_remoteEndpoint << endl;
+
         metadataRes->set_state(Response::Metadata::REJECTED);
         metadataRes->set_status("Not authorised");
     }
@@ -324,4 +349,13 @@ void ProtocolManager::validateColumn(const Request::Validation::Column& column,
     }
 }
 
+//==============================================================================
+//      ProtocolManager::fillResponse()
+//==============================================================================
+void ProtocolManager::fillResponse(const Response::Metadata& metadataRes,
+        DBManager::MetadataList metadataList) throw(std::runtime_error)
+{
+    DEBUG_STREAM << "ProtocolManager::fillResponse()" << endl;
+}
+
 }   //namespace
diff --git a/src/ProtocolManager.h b/src/ProtocolManager.h
index 66e53fd..0c3e106 100644
--- a/src/ProtocolManager.h
+++ b/src/ProtocolManager.h
@@ -76,7 +76,10 @@ protected:
 //  [Protected] Validation related methods
 //------------------------------------------------------------------------------
     virtual void validateColumn(const Request::Validation::Column&,
-    DBManager::InformationList&) throw(std::runtime_error);
+        DBManager::InformationList&) throw(std::runtime_error);
+
+    virtual void fillResponse(const Response::Metadata&,
+        DBManager::MetadataList) throw(std::runtime_error);
 
 //------------------------------------------------------------------------------
 //  [Protected] Class variables
-- 
GitLab