Implement listPolicies() in service Logic layer 51/31051/7
authorLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Sun, 30 Nov 2014 00:48:42 +0000 (01:48 +0100)
committerLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Mon, 15 Dec 2014 14:38:18 +0000 (15:38 +0100)
Implementation lists policies from Storage and returns filled
vector of Policies. It catches also BucketNotExistsException that
is thrown when invalid bucket is passed in ListRequest.

Change-Id: I7b3777b70f654d9a7324c6203e9f25eebb029f1e

src/service/logic/Logic.cpp
src/service/logic/Logic.h

index 684eac3..679da17 100644 (file)
@@ -24,6 +24,7 @@
 #include <cinttypes>
 #include <functional>
 #include <memory>
+#include <vector>
 
 #include <log/log.h>
 #include <common.h>
@@ -42,6 +43,7 @@
 #include <request/CancelRequest.h>
 #include <request/CheckRequest.h>
 #include <request/InsertOrUpdateBucketRequest.h>
+#include <request/ListRequest.h>
 #include <request/RemoveBucketRequest.h>
 #include <request/RequestContext.h>
 #include <request/SetPoliciesRequest.h>
@@ -50,6 +52,8 @@
 #include <response/CancelResponse.h>
 #include <response/CheckResponse.h>
 #include <response/CodeResponse.h>
+#include <response/ListResponse.h>
+#include <types/Policy.h>
 
 #include <main/Cynara.h>
 #include <agent/AgentManager.h>
@@ -277,6 +281,20 @@ void Logic::execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr re
                             request->sequenceNumber()));
 }
 
+void Logic::execute(RequestContextPtr context, ListRequestPtr request) {
+    bool bucketValid = true;
+
+    std::vector<Policy> policies;
+    try {
+        policies = m_storage->listPolicies(request->bucket(), request->filter());
+    } catch (const BucketNotExistsException &ex) {
+        bucketValid = false;
+    }
+
+    context->returnResponse(context, std::make_shared<ListResponse>(policies, bucketValid,
+                            request->sequenceNumber()));
+}
+
 void Logic::execute(RequestContextPtr context, RemoveBucketRequestPtr request) {
     auto code = CodeResponse::Code::OK;
     try {
index 33c5701..d347071 100644 (file)
@@ -70,6 +70,7 @@ public:
     virtual void execute(RequestContextPtr context, CancelRequestPtr request);
     virtual void execute(RequestContextPtr context, CheckRequestPtr request);
     virtual void execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request);
+    virtual void execute(RequestContextPtr context, ListRequestPtr request);
     virtual void execute(RequestContextPtr context, RemoveBucketRequestPtr request);
     virtual void execute(RequestContextPtr context, SetPoliciesRequestPtr request);
     virtual void execute(RequestContextPtr context, SignalRequestPtr request);