Bulk queries (transactions) for PRH 37/89637/3
authorkurczews <krzysztof.kurczewski@nokia.com>
Mon, 10 Jun 2019 11:07:47 +0000 (13:07 +0200)
committerPiotr Jaszczyk <piotr.jaszczyk@nokia.com>
Tue, 11 Jun 2019 11:16:19 +0000 (11:16 +0000)
Issue-ID: DCAEGEN2-1608
Change-Id: I9cff39a05657120de2741a7f9a584c189d8cfe91
Signed-off-by: kurczews <krzysztof.kurczewski@nokia.com>
rest-services/aai-client/pom.xml
rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Request.java [new file with mode: 0644]
rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transaction.java [new file with mode: 0644]
rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transactions.java [new file with mode: 0644]
rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/TransactionsTest.java [new file with mode: 0644]
rest-services/aai-client/src/test/resources/transaction.json [new file with mode: 0644]

index 7c63f4b..3ffe928 100644 (file)
       <artifactId>reactor-test</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>
\ No newline at end of file
diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Request.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Request.java
new file mode 100644 (file)
index 0000000..cbe3b20
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http;
+
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMethod;
+
+public interface Request {
+    HttpMethod method();
+    String uri();
+}
\ No newline at end of file
diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transaction.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transaction.java
new file mode 100644 (file)
index 0000000..902282b
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http;
+
+import com.google.gson.JsonObject;
+import com.google.gson.annotations.SerializedName;
+import org.immutables.gson.Gson;
+import org.immutables.value.Value;
+
+/**
+ * @see Transactions
+ */
+@Value.Immutable
+@Gson.TypeAdapters(fieldNamingStrategy = true)
+public interface Transaction {
+
+    enum Action {
+        @SerializedName("put") PUT,
+        @SerializedName("patch") PATCH,
+        @SerializedName("delete") DELETE
+    }
+
+    Action action();
+
+    String uri();
+
+    @Value.Default
+    default JsonObject body() {
+        return new JsonObject();
+    }
+}
\ No newline at end of file
diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transactions.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transactions.java
new file mode 100644 (file)
index 0000000..a21c561
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http;
+
+import static org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMethod.POST;
+
+import com.google.gson.annotations.SerializedName;
+import java.util.List;
+import org.immutables.gson.Gson;
+import org.immutables.value.Value;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMethod;
+
+/**
+ * @see Transaction
+ * @see <a href="https://docs.onap.org/en/casablanca/submodules/aai/aai-common.git/docs/AAI%20REST%20API%20Documentation/bulkApi.html">AAI
+ * Bulk API</a>
+ */
+@Value.Immutable
+@Gson.TypeAdapters(fieldNamingStrategy = true)
+public interface Transactions extends Request {
+
+    String BULK_SINGLE_TRANSACTION = "/bulk/single-transaction";
+
+    @SerializedName("operations")
+    List<Transaction> operations();
+
+    default HttpMethod method() {
+        return POST;
+    }
+
+    default String uri() {
+        return BULK_SINGLE_TRANSACTION;
+    }
+}
\ No newline at end of file
diff --git a/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/TransactionsTest.java b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/TransactionsTest.java
new file mode 100644 (file)
index 0000000..70d3653
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.Transaction.Action.PUT;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import org.junit.jupiter.api.Test;
+
+class TransactionsTest {
+
+    @Test
+    void shouldBuildTransactionRequest() throws IOException {
+        // given
+        JsonObject payload = new JsonObject();
+        payload.addProperty("link-name", "foo");
+
+        ImmutableTransactions transactions = ImmutableTransactions
+            .builder()
+            .addOperations(ImmutableTransaction.builder()
+                .action(PUT)
+                .uri("/network/logical-links/logical-link/foo")
+                .body(payload)
+                .build())
+            .build();
+
+        // when
+        Gson gson = new Gson().newBuilder().create();
+        String transaction = gson.toJson(transactions);
+
+        // then
+        String expectedJson = getJsonFromFile("transaction.json");
+        assertThat(transaction).isEqualToIgnoringWhitespace(expectedJson);
+    }
+
+    private String getJsonFromFile(String file) throws IOException {
+        try (BufferedReader br = new BufferedReader(new InputStreamReader(
+            Objects.requireNonNull(TransactionsTest.class.getClassLoader().getResourceAsStream(file))))) {
+            return br.lines().collect(Collectors.joining(System.lineSeparator()));
+        }
+    }
+}
\ No newline at end of file
diff --git a/rest-services/aai-client/src/test/resources/transaction.json b/rest-services/aai-client/src/test/resources/transaction.json
new file mode 100644 (file)
index 0000000..5cbb562
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "operations": [
+    {
+      "action": "put",
+      "uri": "/network/logical-links/logical-link/foo",
+      "body": {
+        "link-name": "foo"
+      }
+    }
+  ]
+}
\ No newline at end of file