Merge "Added STD sim 2.0.0 tests"
[nonrtric.git] / policy-agent / src / main / java / org / oransc / policyagent / clients / StdA1ClientVersion1.java
index 8c1ed38..4ebc25c 100644 (file)
@@ -24,23 +24,74 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.oransc.policyagent.configuration.RicConfig;
+import org.oransc.policyagent.configuration.WebClientConfig;
 import org.oransc.policyagent.repository.Policy;
-import org.springframework.web.util.UriComponentsBuilder;
 
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
+/**
+ * Client for accessing standard A1 REST API version 1.1
+ */
 public class StdA1ClientVersion1 implements A1Client {
+
+    public static class UriBuilder implements A1UriBuilder {
+
+        private final RicConfig ricConfig;
+
+        public UriBuilder(RicConfig ricConfig) {
+            this.ricConfig = ricConfig;
+        }
+
+        /**
+         * /A1-P/v1/policies/{policyId}
+         */
+        @Override
+        public String createPutPolicyUri(String type, String policyId) {
+            return policiesBaseUri() + policyId;
+        }
+
+        /**
+         * /A1-P/v1/policies
+         */
+        public String createGetPolicyIdsUri() {
+            return baseUri() + "/policies";
+        }
+
+        /**
+         * /A1-P/v1/policies/{policyId}
+         */
+        @Override
+        public String createDeleteUri(String type, String policyId) {
+            return policiesBaseUri() + policyId;
+        }
+
+        /**
+         * /A1-P/v1/policies/{policyId}/status
+         */
+        public String createGetPolicyStatusUri(String type, String policyId) {
+            return policiesBaseUri() + policyId + "/status";
+        }
+
+        private String baseUri() {
+            return ricConfig.baseUrl() + "/A1-P/v1";
+        }
+
+        private String policiesBaseUri() {
+            return createGetPolicyIdsUri() + "/";
+        }
+    }
+
     private final AsyncRestClient restClient;
+    private final UriBuilder uri;
 
-    public StdA1ClientVersion1(RicConfig ricConfig) {
-        final String urlPrefix = "/A1-P/v1";
-        String baseUrl = ricConfig.baseUrl() + urlPrefix;
-        this.restClient = new AsyncRestClient(baseUrl);
+    public StdA1ClientVersion1(RicConfig ricConfig, WebClientConfig webClientConfig) {
+        this(new AsyncRestClient("", webClientConfig), ricConfig);
     }
 
-    public StdA1ClientVersion1(AsyncRestClient restClient) {
+    public StdA1ClientVersion1(AsyncRestClient restClient, RicConfig ricConfig) {
         this.restClient = restClient;
+        this.uri = new UriBuilder(ricConfig);
     }
 
     @Override
@@ -51,10 +102,7 @@ public class StdA1ClientVersion1 implements A1Client {
 
     @Override
     public Mono<String> putPolicy(Policy policy) {
-        final UriComponentsBuilder policyUri = UriComponentsBuilder.fromPath("/policies/{policy-id}");
-        final String uri = policyUri.buildAndExpand(policy.id()).toUriString();
-        return restClient.put(uri, policy.json()) //
-            .flatMap(JsonHelper::validateJson);
+        return restClient.put(uri.createPutPolicyUri(policy.type().name(), policy.id()), policy.json());
     }
 
     @Override
@@ -86,20 +134,15 @@ public class StdA1ClientVersion1 implements A1Client {
 
     @Override
     public Mono<String> getPolicyStatus(Policy policy) {
-        final UriComponentsBuilder builder = UriComponentsBuilder.fromPath("/policies/{policy-id}/status");
-        String uri = builder.buildAndExpand(policy.id()).toUriString();
-        return restClient.get(uri);
+        return restClient.get(uri.createGetPolicyStatusUri(policy.type().name(), policy.id()));
     }
 
     private Flux<String> getPolicyIds() {
-        final String uri = "/policies";
-        return restClient.get(uri) //
-            .flatMapMany(JsonHelper::parseJsonArrayOfString);
+        return restClient.get(uri.createGetPolicyIdsUri()) //
+            .flatMapMany(SdncJsonHelper::parseJsonArrayOfString);
     }
 
     private Mono<String> deletePolicyById(String policyId) {
-        final UriComponentsBuilder builder = UriComponentsBuilder.fromPath("/policies/{policy-id}");
-        String uri = builder.buildAndExpand(policyId).toUriString();
-        return restClient.delete(uri);
+        return restClient.delete(uri.createDeleteUri("", policyId));
     }
 }