diff Core/RestApi/RestApi.h @ 304:4eea080e6e7a

refactoring
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 19 Dec 2012 14:57:18 +0100
parents 4031f73fe0e4
children 78a8eaa5f30b
line wrap: on
line diff
--- a/Core/RestApi/RestApi.h	Tue Dec 18 19:01:01 2012 +0100
+++ b/Core/RestApi/RestApi.h	Wed Dec 19 14:57:18 2012 +0100
@@ -55,6 +55,10 @@
       const UriComponents* trailing_;
       const UriComponents* fullUri_;
 
+    protected:
+      static bool ParseJsonRequestInternal(Json::Value& result,
+                                           const char* request);
+
     public:
       RestApiOutput& GetOutput()
       {
@@ -87,6 +91,8 @@
       {
         return HttpHandler::GetArgument(*httpHeaders_, name, defaultValue);
       }
+
+      virtual bool ParseJsonRequest(Json::Value& result) const = 0;
     };
 
  
@@ -109,6 +115,8 @@
       {
         return getArguments_->find(name) != getArguments_->end();
       }
+
+      virtual bool ParseJsonRequest(Json::Value& result) const;
     };
 
     class PutCall : public SharedCall
@@ -119,10 +127,15 @@
       const std::string* data_;
 
     public:
-      const std::string& GetPutBody()
+      const std::string& GetPutBody() const
       {
         return *data_;
       }
+
+      virtual bool ParseJsonRequest(Json::Value& result) const
+      {
+        return ParseJsonRequestInternal(result, GetPutBody().c_str());
+      }      
     };
 
     class PostCall : public SharedCall
@@ -133,14 +146,25 @@
       const std::string* data_;
 
     public:
-      const std::string& GetPostBody()
+      const std::string& GetPostBody() const
       {
         return *data_;
       }
+
+      virtual bool ParseJsonRequest(Json::Value& result) const
+      {
+        return ParseJsonRequestInternal(result, GetPostBody().c_str());
+      }      
     };
 
     class DeleteCall : public SharedCall
     {
+    public:
+      virtual bool ParseJsonRequest(Json::Value& result) const
+      {
+        result.clear();
+        return true;
+      }
     };
 
     typedef void (*GetHandler) (GetCall& call);