From e655bbdb2e7d17660b34c7af236e7afb4ccda25a Mon Sep 17 00:00:00 2001 From: kurczews Date: Mon, 10 Jun 2019 13:07:47 +0200 Subject: Bulk queries (transactions) for PRH Issue-ID: DCAEGEN2-1608 Change-Id: I9cff39a05657120de2741a7f9a584c189d8cfe91 Signed-off-by: kurczews --- rest-services/aai-client/pom.xml | 5 ++ .../services/aai/client/service/http/Request.java | 28 +++++++++ .../aai/client/service/http/Transaction.java | 49 ++++++++++++++++ .../aai/client/service/http/Transactions.java | 52 +++++++++++++++++ .../aai/client/service/http/TransactionsTest.java | 67 ++++++++++++++++++++++ .../aai-client/src/test/resources/transaction.json | 11 ++++ 6 files changed, 212 insertions(+) create mode 100644 rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Request.java create mode 100644 rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transaction.java create mode 100644 rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transactions.java create mode 100644 rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/TransactionsTest.java create mode 100644 rest-services/aai-client/src/test/resources/transaction.json (limited to 'rest-services') diff --git a/rest-services/aai-client/pom.xml b/rest-services/aai-client/pom.xml index 7c63f4b0..3ffe928d 100644 --- a/rest-services/aai-client/pom.xml +++ b/rest-services/aai-client/pom.xml @@ -49,5 +49,10 @@ reactor-test test + + org.assertj + assertj-core + test + \ 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 index 00000000..cbe3b205 --- /dev/null +++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Request.java @@ -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 index 00000000..902282be --- /dev/null +++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transaction.java @@ -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 index 00000000..a21c5617 --- /dev/null +++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/Transactions.java @@ -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 AAI + * Bulk API + */ +@Value.Immutable +@Gson.TypeAdapters(fieldNamingStrategy = true) +public interface Transactions extends Request { + + String BULK_SINGLE_TRANSACTION = "/bulk/single-transaction"; + + @SerializedName("operations") + List 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 index 00000000..70d3653b --- /dev/null +++ b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/TransactionsTest.java @@ -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 index 00000000..5cbb5621 --- /dev/null +++ b/rest-services/aai-client/src/test/resources/transaction.json @@ -0,0 +1,11 @@ +{ + "operations": [ + { + "action": "put", + "uri": "/network/logical-links/logical-link/foo", + "body": { + "link-name": "foo" + } + } + ] +} \ No newline at end of file -- cgit 1.2.3-korg