From 593cb869f5616f0797baf059f98c7dc02492f600 Mon Sep 17 00:00:00 2001 From: Sascha Doemer Date: Fri, 11 Feb 2022 14:39:38 +0100 Subject: [PATCH 1/6] Add functions to list all endpoints to the default implementation. Remove convenience functionality. Format. --- .../messaging/mqtt/ListEndpointsService.java | 38 +++++++++++++- .../ListEndpointsFunctionsService.java | 51 ------------------- .../ListEndpointsFunctionsService.java | 51 ------------------- .../mqtt/ListEndpointsServiceImpl.java | 44 ++++++++++++++++ 4 files changed, 81 insertions(+), 103 deletions(-) delete mode 100644 agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/service/messaging/ListEndpointsFunctionsService.java delete mode 100644 agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/rest/service/messaging/ListEndpointsFunctionsService.java diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/ListEndpointsService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/ListEndpointsService.java index bfdf5cf6..2280e662 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/ListEndpointsService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/ListEndpointsService.java @@ -1,5 +1,41 @@ package com.dke.data.agrirouter.api.service.messaging.mqtt; +import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; +import com.dke.data.agrirouter.api.messaging.MqttAsyncMessageSendingResult; import com.dke.data.agrirouter.api.service.parameters.ListEndpointsParameters; -public interface ListEndpointsService extends MessagingService {} +public interface ListEndpointsService extends MessagingService { + + /** + * List all endpoints with a route to the dedicated endpoint. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String listAllWithExistingRoute(OnboardingResponse onboardingResponse); + + /** + * List all endpoints for the account, even those that do not have a route. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String listAll(OnboardingResponse onboardingResponse); + + /** + * List all endpoints with a route to the dedicated endpoint. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + MqttAsyncMessageSendingResult listAllWithExistingRouteAsync( + OnboardingResponse onboardingResponse); + + /** + * List all endpoints for the account, even those that do not have a route. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + MqttAsyncMessageSendingResult listAllAsync(OnboardingResponse onboardingResponse); +} diff --git a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/service/messaging/ListEndpointsFunctionsService.java b/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/service/messaging/ListEndpointsFunctionsService.java deleted file mode 100644 index 084a2e17..00000000 --- a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/service/messaging/ListEndpointsFunctionsService.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.dke.data.agrirouter.convenience.mqtt.service.messaging; - -import agrirouter.request.payload.account.Endpoints; -import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; -import com.dke.data.agrirouter.api.enums.SystemMessageType; -import com.dke.data.agrirouter.api.service.messaging.mqtt.ListEndpointsService; -import com.dke.data.agrirouter.api.service.parameters.ListEndpointsParameters; -import com.dke.data.agrirouter.impl.messaging.mqtt.ListEndpointsServiceImpl; -import org.eclipse.paho.client.mqttv3.IMqttClient; - -/** Additional functions to list endpoints. */ -public class ListEndpointsFunctionsService { - - private final ListEndpointsService listEndpointsService; - - public ListEndpointsFunctionsService(IMqttClient iMqttClient) { - this.listEndpointsService = new ListEndpointsServiceImpl(iMqttClient); - } - - /** - * List all endpoints filtered by application routing. - * - * @param onboardingResponse - - * @return - - */ - public String requestFullListFilteredByAppliedRoutings(OnboardingResponse onboardingResponse) { - ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); - listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); - listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); - listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); - - return this.listEndpointsService.send(listEndpointsParameters); - } - - /** - * List all endpoints. - * - * @param onboardingResponse - - * @return - - */ - public String requestFullList(OnboardingResponse onboardingResponse) { - ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); - listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); - listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); - listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); - - return this.listEndpointsService.send(listEndpointsParameters); - } -} diff --git a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/rest/service/messaging/ListEndpointsFunctionsService.java b/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/rest/service/messaging/ListEndpointsFunctionsService.java deleted file mode 100644 index 790218d5..00000000 --- a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/rest/service/messaging/ListEndpointsFunctionsService.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.dke.data.agrirouter.convenience.rest.service.messaging; - -import agrirouter.request.payload.account.Endpoints; -import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; -import com.dke.data.agrirouter.api.enums.SystemMessageType; -import com.dke.data.agrirouter.api.env.Environment; -import com.dke.data.agrirouter.api.service.messaging.http.ListEndpointsService; -import com.dke.data.agrirouter.api.service.parameters.ListEndpointsParameters; -import com.dke.data.agrirouter.impl.messaging.rest.ListEndpointsServiceImpl; - -/** Additional functions to list endpoints. */ -public class ListEndpointsFunctionsService { - - private final ListEndpointsService listEndpointsService; - - public ListEndpointsFunctionsService(Environment environment) { - this.listEndpointsService = new ListEndpointsServiceImpl(environment); - } - - /** - * List all endpoints filtered by application routing. - * - * @param onboardingResponse - - * @return - - */ - public String requestFullListFilteredByAppliedRoutings(OnboardingResponse onboardingResponse) { - ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); - listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); - listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); - listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); - - return this.listEndpointsService.send(listEndpointsParameters); - } - - /** - * List all endpoints. - * - * @param onboardingResponse - - * @return - - */ - public String requestFullList(OnboardingResponse onboardingResponse) { - ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); - listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); - listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); - listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); - - return this.listEndpointsService.send(listEndpointsParameters); - } -} diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java index 427ce628..5103fdf0 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java @@ -1,6 +1,9 @@ package com.dke.data.agrirouter.impl.messaging.mqtt; +import agrirouter.request.payload.account.Endpoints; import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; +import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; +import com.dke.data.agrirouter.api.enums.SystemMessageType; import com.dke.data.agrirouter.api.exception.CouldNotSendMqttMessageException; import com.dke.data.agrirouter.api.messaging.MqttAsyncMessageSendingResult; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; @@ -61,4 +64,45 @@ public MqttAsyncMessageSendingResult sendAsync(ListEndpointsParameters parameter public EncodeMessageService getEncodeMessageService() { return this.encodeMessageService; } + + @Override + public String listAllWithExistingRoute(OnboardingResponse onboardingResponse) { + ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(true); + return send(listEndpointsParameters); + } + + @Override + public String listAll(OnboardingResponse onboardingResponse) { + ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(true); + return send(listEndpointsParameters); + } + + @Override + public MqttAsyncMessageSendingResult listAllWithExistingRouteAsync( + OnboardingResponse onboardingResponse) { + ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(true); + return sendAsync(listEndpointsParameters); + } + + @Override + public MqttAsyncMessageSendingResult listAllAsync(OnboardingResponse onboardingResponse) { + ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(true); + return sendAsync(listEndpointsParameters); + } } From 10a2dd87ecf77a3c5b83a06badacf1effa6a8321 Mon Sep 17 00:00:00 2001 From: Sascha Doemer Date: Fri, 11 Feb 2022 14:39:53 +0100 Subject: [PATCH 2/6] Add functions to list all endpoints to the default implementation. Remove convenience functionality. Format. --- .../encoding/EncodeMessageServiceImpl.java | 4 +- .../agrirouter/test/helper/ContentReader.java | 37 +- .../SendAndReceiveChunkedMessagesTest.java | 522 ++++++++++-------- 3 files changed, 303 insertions(+), 260 deletions(-) diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImpl.java index 27142c7e..14d50b9e 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImpl.java @@ -106,7 +106,9 @@ public List chunkAndEncode( messageHeaderParameters.validate(); payloadParameters.validate(); - if (messageHeaderParameters.getTechnicalMessageType().needsBase64EncodingAndHasToBeChunkedIfNecessary()) { + if (messageHeaderParameters + .getTechnicalMessageType() + .needsBase64EncodingAndHasToBeChunkedIfNecessary()) { if (payloadParameters.shouldBeChunked()) { getNativeLogger() .debug( diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/helper/ContentReader.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/helper/ContentReader.java index 1a45554b..fa77daae 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/helper/ContentReader.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/helper/ContentReader.java @@ -5,32 +5,29 @@ import java.nio.file.Paths; import java.util.Base64; -/** - * Generic content reader for the testcases. - */ +/** Generic content reader for the testcases. */ public class ContentReader { - private static final String FOLDER = "./message-content/"; + private static final String FOLDER = "./message-content/"; - public static String readBase64EncodedMessageContent(Identifier identifier) throws Throwable { - Path path = Paths.get(FOLDER.concat(identifier.getFileName())); - final byte[] rawData = Files.readAllBytes(path); - return new String(Base64.getEncoder().encode(rawData)); - } - - public enum Identifier { - BIG_TASK_DATA("big_taskdata.zip"), - SMALL_TASK_DATA("small_taskdata.zip"); + public static String readBase64EncodedMessageContent(Identifier identifier) throws Throwable { + Path path = Paths.get(FOLDER.concat(identifier.getFileName())); + final byte[] rawData = Files.readAllBytes(path); + return new String(Base64.getEncoder().encode(rawData)); + } - private final String fileName; + public enum Identifier { + BIG_TASK_DATA("big_taskdata.zip"), + SMALL_TASK_DATA("small_taskdata.zip"); - Identifier(String fileName) { - this.fileName = fileName; - } + private final String fileName; - public String getFileName() { - return fileName; - } + Identifier(String fileName) { + this.fileName = fileName; } + public String getFileName() { + return fileName; + } + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/usecase/SendAndReceiveChunkedMessagesTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/usecase/SendAndReceiveChunkedMessagesTest.java index 517b2cea..4443a31d 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/usecase/SendAndReceiveChunkedMessagesTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/usecase/SendAndReceiveChunkedMessagesTest.java @@ -25,6 +25,11 @@ import com.dke.data.agrirouter.test.OnboardingResponseRepository; import com.dke.data.agrirouter.test.helper.ContentReader; import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.http.HttpStatus; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -32,248 +37,287 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.io.IOException; -import java.util.*; -import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * Test case to show the behavior for chunked message sending. - */ +/** Test case to show the behavior for chunked message sending. */ class SendAndReceiveChunkedMessagesTest extends AbstractIntegrationTest { - private static final int MAX_CHUNK_SIZE = 1024000; - - @ParameterizedTest - @MethodSource("getTestArguments") - void givenRealMessageContentWhenSendingMessagesTheContentShouldMatchAfterReceivingAndMergingIt( - ByteString messageContent, int expectedNrOfChunks) - throws Throwable { - actionsForSender(messageContent, expectedNrOfChunks); - actionsForTheRecipient(messageContent, expectedNrOfChunks); - } - - /** - * These are the actions for the recipient. The recipient is already set up and declared the capabilities. The actions for the recipient are documented inline. - * - * @param messageContent - - * @param expectedNrOfChunks - - */ - private void actionsForTheRecipient(ByteString messageContent, int expectedNrOfChunks) throws Throwable { - // [1] Fetch all the messages within the feed. The number of headers should match the number of chunks sent. - final MessageQueryServiceImpl messageQueryService = new MessageQueryServiceImpl(new QA() { - }); - final MessageQueryParameters messageQueryParameters = new MessageQueryParameters(); - final OnboardingResponse recipient = OnboardingResponseRepository.read(OnboardingResponseRepository.Identifier.COMMUNICATION_UNIT); - messageQueryParameters.setOnboardingResponse(recipient); - messageQueryParameters.setSentToInSeconds(UtcTimeService.inTheFuture(5).toEpochSecond()); - messageQueryParameters.setSentFromInSeconds(UtcTimeService.inThePast(UtcTimeService.FOUR_WEEKS_AGO).toEpochSecond()); - messageQueryService.send(messageQueryParameters); - - // [2] Wait for the agrirouter to process the message. - waitForTheAgrirouterToProcessSingleMessage(); - - // [3] Fetch the chunks from the outbox. Since we have the same restrictions while receiving, this has to be the same number of messages as it is chunks. - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch(recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(expectedNrOfChunks, fetchMessageResponses.get().size()); - - // [4] Check if the response from the AR only contains valid results. - final DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - fetchMessageResponses.get() - .stream() - .map(fetchMessageResponse -> decodeMessageService.decode(fetchMessageResponse.getCommand().getMessage())) - .forEach(decodeMessageResponse -> Assertions.assertEquals(Response.ResponseEnvelope.ResponseBodyType.ACK_FOR_FEED_MESSAGE, decodeMessageResponse.getResponseEnvelope().getType())); - - // [5] Map the results from the query to 'real' messages within the feed and perform some assertions. - final List feedMessages = fetchMessageResponses.get() - .stream() - .map(fetchMessageResponse -> decodeMessageService.decode(fetchMessageResponse.getCommand().getMessage())) - .map(decodeMessageResponse -> messageQueryService.decode(decodeMessageResponse.getResponsePayloadWrapper().getDetails().getValue())) - .map(messageQueryResponse -> messageQueryResponse.getMessages(0)) - .collect(Collectors.toList()); - Assertions.assertEquals(expectedNrOfChunks, feedMessages.size()); - feedMessages.forEach(feedMessage -> Assertions.assertNotNull(feedMessage.getHeader().getChunkContext())); - Assertions.assertEquals(feedMessages.get(0).getHeader().getChunkContext().getTotal(), expectedNrOfChunks); - final Set chunkContextIds = feedMessages.stream().map(feedMessage -> feedMessage.getHeader().getChunkContext().getContextId()).collect(Collectors.toSet()); - Assertions.assertEquals(1, chunkContextIds.size(), "There should be only one chunk context ID."); - - // [6] Combine the chunks in order of their numbers and check if the result is fine. - feedMessages.sort(Comparator.comparingLong(o -> o.getHeader().getChunkContext().getCurrent())); - final String base64EncodedMessageContent = feedMessages - .stream() - // Fetch the message content for each chunk. - .map(feedMessage -> feedMessage.getContent().getValue().toStringUtf8()) - // Decode each of the chunks to get concat the original value. - .map(base64EncodedContent -> new String(Base64.getDecoder().decode(base64EncodedContent))) - // Concat the chunks. - .collect(Collectors.joining("")); - Assertions.assertEquals(messageContent.toStringUtf8(), base64EncodedMessageContent); - - // [7] Confirm the chunks to remove them from the feed. - final List messageIdsToConfirm = feedMessages - .stream() - .map(feedMessage -> feedMessage.getHeader().getMessageId()) - .collect(Collectors.toList()); - final MessageConfirmationServiceImpl messageConfirmationService = new MessageConfirmationServiceImpl(new QA() { - }); - final MessageConfirmationParameters messageConfirmationParameters = new MessageConfirmationParameters(); - messageConfirmationParameters.setOnboardingResponse(recipient); - messageConfirmationParameters.setMessageIds(messageIdsToConfirm); - messageConfirmationService.send(messageConfirmationParameters); - - // [8] Fetch the response from the agrirouter after confirming the messages. - waitForTheAgrirouterToProcessSingleMessage(); - fetchMessageResponses = - fetchMessageService.fetch(recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size(), "This should be a single response."); - } - - /** - * These are the actions for the sender. The sender is already set up and declared the capabilities. The actions for the sender are documented inline. - * - * @param messageContent - - * @param expectedNrOfChunks - - * @throws IOException - - * @throws InterruptedException - - */ - private void actionsForSender(ByteString messageContent, int expectedNrOfChunks) throws IOException, InterruptedException { - final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - final SendMessageServiceImpl sendMessageService = new SendMessageServiceImpl(); - final OnboardingResponse onboardingResponse = - OnboardingResponseRepository.read(OnboardingResponseRepository.Identifier.FARMING_SOFTWARE); - - // [1] Define the raw message, in this case this is the Base64 encoded message content, no chunking needed. - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); - messageHeaderParameters.setApplicationMessageId(MessageIdService.generateMessageId()); - messageHeaderParameters.setApplicationMessageSeqNo( - SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - messageHeaderParameters.setRecipients( - Collections.singletonList( - OnboardingResponseRepository.read( - OnboardingResponseRepository.Identifier.COMMUNICATION_UNIT) - .getSensorAlternateId())); - - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setValue(messageContent); - payloadParameters.setTypeUrl(SystemMessageType.EMPTY.getKey()); - - // [2] Chunk the message content using the SDK specific methods ('chunkAndEncode'). - List tuples = - encodeMessageService.chunkAndEncode( - messageHeaderParameters, payloadParameters, onboardingResponse); - - tuples.forEach( - messageParameterTuple -> - Assertions.assertTrue( - Objects.requireNonNull(messageParameterTuple.getPayloadParameters().getValue()) - .toStringUtf8() - .length() - <= MAX_CHUNK_SIZE)); - - List encodedMessages = encodeMessageService.encode(tuples); - - // [3] Send the chunks to the agrirouter. - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setEncodedMessages(encodedMessages); - sendMessageParameters.setOnboardingResponse(onboardingResponse); - sendMessageService.send(sendMessageParameters); - - // [4] Wait for the AR to process the chunks. - waitForTheAgrirouterToProcessMultipleMessages(); - - // [5] Check if the chunks were processed successfully. - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - onboardingResponse, - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(expectedNrOfChunks, fetchMessageResponses.get().size()); - - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - AtomicReference decodeMessageResponse = new AtomicReference<>(); + private static final int MAX_CHUNK_SIZE = 1024000; + + @ParameterizedTest + @MethodSource("getTestArguments") + void givenRealMessageContentWhenSendingMessagesTheContentShouldMatchAfterReceivingAndMergingIt( + ByteString messageContent, int expectedNrOfChunks) throws Throwable { + actionsForSender(messageContent, expectedNrOfChunks); + actionsForTheRecipient(messageContent, expectedNrOfChunks); + } + + /** + * These are the actions for the recipient. The recipient is already set up and declared the + * capabilities. The actions for the recipient are documented inline. + * + * @param messageContent - + * @param expectedNrOfChunks - + */ + private void actionsForTheRecipient(ByteString messageContent, int expectedNrOfChunks) + throws Throwable { + // [1] Fetch all the messages within the feed. The number of headers should match the number of + // chunks sent. + final MessageQueryServiceImpl messageQueryService = new MessageQueryServiceImpl(new QA() {}); + final MessageQueryParameters messageQueryParameters = new MessageQueryParameters(); + final OnboardingResponse recipient = + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.COMMUNICATION_UNIT); + messageQueryParameters.setOnboardingResponse(recipient); + messageQueryParameters.setSentToInSeconds(UtcTimeService.inTheFuture(5).toEpochSecond()); + messageQueryParameters.setSentFromInSeconds( + UtcTimeService.inThePast(UtcTimeService.FOUR_WEEKS_AGO).toEpochSecond()); + messageQueryService.send(messageQueryParameters); + + // [2] Wait for the agrirouter to process the message. + waitForTheAgrirouterToProcessSingleMessage(); + + // [3] Fetch the chunks from the outbox. Since we have the same restrictions while receiving, + // this has to be the same number of messages as it is chunks. + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + Optional> fetchMessageResponses = + fetchMessageService.fetch( + recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(expectedNrOfChunks, fetchMessageResponses.get().size()); + + // [4] Check if the response from the AR only contains valid results. + final DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + fetchMessageResponses.get().stream() + .map( + fetchMessageResponse -> + decodeMessageService.decode(fetchMessageResponse.getCommand().getMessage())) + .forEach( + decodeMessageResponse -> + Assertions.assertEquals( + Response.ResponseEnvelope.ResponseBodyType.ACK_FOR_FEED_MESSAGE, + decodeMessageResponse.getResponseEnvelope().getType())); + + // [5] Map the results from the query to 'real' messages within the feed and perform some + // assertions. + final List feedMessages = fetchMessageResponses.get().stream() - .map(FetchMessageResponse::getCommand) - .forEach( - message -> { - Assertions.assertNotNull(message); - decodeMessageResponse.set(decodeMessageService.decode(message.getMessage())); - - Assertions.assertMatchesAny( - Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), - decodeMessageResponse.get().getResponseEnvelope().getResponseCode()); - }); - } - - /** - * Delivers fake message content for multiple test cases. - * - * @return - - */ - private static Stream getTestArguments() throws Throwable { - return Stream.of( - Arguments.of( - ByteString.copyFromUtf8(ContentReader.readBase64EncodedMessageContent(ContentReader.Identifier.BIG_TASK_DATA)), - 4)); - } - - /** - * Cleanup before and after each test case. These actions are necessary because it could be the case, that there are dangling messages from former tests. - */ - @BeforeEach - @AfterEach - public void prepareTestEnvironment() throws Throwable { - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - final OnboardingResponse recipient = OnboardingResponseRepository.read(OnboardingResponseRepository.Identifier.COMMUNICATION_UNIT); - final MessageHeaderQueryServiceImpl messageHeaderQueryService = new MessageHeaderQueryServiceImpl(new QA() { - }); - - // [1] Clean the outbox of the endpoint. - fetchMessageService.fetch(recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - // [2] Fetch all message headers for the last 4 weeks (maximum retention time within the agrirouter). - final MessageQueryParameters messageQueryParameters = new MessageQueryParameters(); - messageQueryParameters.setOnboardingResponse(recipient); - messageQueryParameters.setSentToInSeconds(UtcTimeService.inTheFuture(5).toEpochSecond()); - messageQueryParameters.setSentFromInSeconds(UtcTimeService.inThePast(UtcTimeService.FOUR_WEEKS_AGO).toEpochSecond()); - messageHeaderQueryService.send(messageQueryParameters); - waitForTheAgrirouterToProcessSingleMessage(); - Optional> fetchMessageResponses = - fetchMessageService.fetch(recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size(), "This should be a single response."); - final DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - final DecodeMessageResponse decodeMessageResponse = decodeMessageService.decode(fetchMessageResponses.get().get(0).getCommand().getMessage()); - Assertions.assertEquals(Response.ResponseEnvelope.ResponseBodyType.ACK_FOR_FEED_HEADER_LIST, decodeMessageResponse.getResponseEnvelope().getType()); - final FeedResponse.HeaderQueryResponse headerQueryResponse = messageHeaderQueryService.decode(decodeMessageResponse.getResponsePayloadWrapper().getDetails().getValue()); - - // [3] Delete the dangling messages from the feed of the endpoint if necessary. - if (headerQueryResponse.getQueryMetrics().getTotalMessagesInQuery() > 0) { - final DeleteMessageServiceImpl deleteMessageService = new DeleteMessageServiceImpl(); - final DeleteMessageParameters deleteMessageParameters = new DeleteMessageParameters(); - deleteMessageParameters.setOnboardingResponse(recipient); - final List messageIds = headerQueryResponse.getFeedList() - .stream() - .map(FeedResponse.HeaderQueryResponse.Feed::getHeadersList) - .flatMap(Collection::stream) - .map(FeedResponse.HeaderQueryResponse.Header::getMessageId) - .collect(Collectors.toList()); - deleteMessageParameters.setMessageIds(messageIds); - deleteMessageService.send(deleteMessageParameters); - waitForTheAgrirouterToProcessSingleMessage(); - fetchMessageService.fetch(recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - } - - // [4] Clean the outbox of the endpoint. - fetchMessageService.fetch(recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + .map( + fetchMessageResponse -> + decodeMessageService.decode(fetchMessageResponse.getCommand().getMessage())) + .map( + decodeMessageResponse -> + messageQueryService.decode( + decodeMessageResponse.getResponsePayloadWrapper().getDetails().getValue())) + .map(messageQueryResponse -> messageQueryResponse.getMessages(0)) + .collect(Collectors.toList()); + Assertions.assertEquals(expectedNrOfChunks, feedMessages.size()); + feedMessages.forEach( + feedMessage -> Assertions.assertNotNull(feedMessage.getHeader().getChunkContext())); + Assertions.assertEquals( + feedMessages.get(0).getHeader().getChunkContext().getTotal(), expectedNrOfChunks); + final Set chunkContextIds = + feedMessages.stream() + .map(feedMessage -> feedMessage.getHeader().getChunkContext().getContextId()) + .collect(Collectors.toSet()); + Assertions.assertEquals( + 1, chunkContextIds.size(), "There should be only one chunk context ID."); + + // [6] Combine the chunks in order of their numbers and check if the result is fine. + feedMessages.sort(Comparator.comparingLong(o -> o.getHeader().getChunkContext().getCurrent())); + final String base64EncodedMessageContent = + feedMessages.stream() + // Fetch the message content for each chunk. + .map(feedMessage -> feedMessage.getContent().getValue().toStringUtf8()) + // Decode each of the chunks to get concat the original value. + .map( + base64EncodedContent -> + new String(Base64.getDecoder().decode(base64EncodedContent))) + // Concat the chunks. + .collect(Collectors.joining("")); + Assertions.assertEquals(messageContent.toStringUtf8(), base64EncodedMessageContent); + + // [7] Confirm the chunks to remove them from the feed. + final List messageIdsToConfirm = + feedMessages.stream() + .map(feedMessage -> feedMessage.getHeader().getMessageId()) + .collect(Collectors.toList()); + final MessageConfirmationServiceImpl messageConfirmationService = + new MessageConfirmationServiceImpl(new QA() {}); + final MessageConfirmationParameters messageConfirmationParameters = + new MessageConfirmationParameters(); + messageConfirmationParameters.setOnboardingResponse(recipient); + messageConfirmationParameters.setMessageIds(messageIdsToConfirm); + messageConfirmationService.send(messageConfirmationParameters); + + // [8] Fetch the response from the agrirouter after confirming the messages. + waitForTheAgrirouterToProcessSingleMessage(); + fetchMessageResponses = + fetchMessageService.fetch( + recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals( + 1, fetchMessageResponses.get().size(), "This should be a single response."); + } + + /** + * These are the actions for the sender. The sender is already set up and declared the + * capabilities. The actions for the sender are documented inline. + * + * @param messageContent - + * @param expectedNrOfChunks - + * @throws IOException - + * @throws InterruptedException - + */ + private void actionsForSender(ByteString messageContent, int expectedNrOfChunks) + throws IOException, InterruptedException { + final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + final SendMessageServiceImpl sendMessageService = new SendMessageServiceImpl(); + final OnboardingResponse onboardingResponse = + OnboardingResponseRepository.read(OnboardingResponseRepository.Identifier.FARMING_SOFTWARE); + + // [1] Define the raw message, in this case this is the Base64 encoded message content, no + // chunking needed. + MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); + messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); + messageHeaderParameters.setApplicationMessageId(MessageIdService.generateMessageId()); + messageHeaderParameters.setApplicationMessageSeqNo( + SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + messageHeaderParameters.setRecipients( + Collections.singletonList( + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.COMMUNICATION_UNIT) + .getSensorAlternateId())); + + PayloadParameters payloadParameters = new PayloadParameters(); + payloadParameters.setValue(messageContent); + payloadParameters.setTypeUrl(SystemMessageType.EMPTY.getKey()); + + // [2] Chunk the message content using the SDK specific methods ('chunkAndEncode'). + List tuples = + encodeMessageService.chunkAndEncode( + messageHeaderParameters, payloadParameters, onboardingResponse); + + tuples.forEach( + messageParameterTuple -> + Assertions.assertTrue( + Objects.requireNonNull(messageParameterTuple.getPayloadParameters().getValue()) + .toStringUtf8() + .length() + <= MAX_CHUNK_SIZE)); + + List encodedMessages = encodeMessageService.encode(tuples); + + // [3] Send the chunks to the agrirouter. + SendMessageParameters sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setEncodedMessages(encodedMessages); + sendMessageParameters.setOnboardingResponse(onboardingResponse); + sendMessageService.send(sendMessageParameters); + + // [4] Wait for the AR to process the chunks. + waitForTheAgrirouterToProcessMultipleMessages(); + + // [5] Check if the chunks were processed successfully. + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + Optional> fetchMessageResponses = + fetchMessageService.fetch( + onboardingResponse, + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(expectedNrOfChunks, fetchMessageResponses.get().size()); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + AtomicReference decodeMessageResponse = new AtomicReference<>(); + fetchMessageResponses.get().stream() + .map(FetchMessageResponse::getCommand) + .forEach( + message -> { + Assertions.assertNotNull(message); + decodeMessageResponse.set(decodeMessageService.decode(message.getMessage())); + + Assertions.assertMatchesAny( + Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), + decodeMessageResponse.get().getResponseEnvelope().getResponseCode()); + }); + } + + /** + * Delivers fake message content for multiple test cases. + * + * @return - + */ + private static Stream getTestArguments() throws Throwable { + return Stream.of( + Arguments.of( + ByteString.copyFromUtf8( + ContentReader.readBase64EncodedMessageContent( + ContentReader.Identifier.BIG_TASK_DATA)), + 4)); + } + + /** + * Cleanup before and after each test case. These actions are necessary because it could be the + * case, that there are dangling messages from former tests. + */ + @BeforeEach + @AfterEach + public void prepareTestEnvironment() throws Throwable { + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + final OnboardingResponse recipient = + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.COMMUNICATION_UNIT); + final MessageHeaderQueryServiceImpl messageHeaderQueryService = + new MessageHeaderQueryServiceImpl(new QA() {}); + + // [1] Clean the outbox of the endpoint. + fetchMessageService.fetch( + recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + // [2] Fetch all message headers for the last 4 weeks (maximum retention time within the + // agrirouter). + final MessageQueryParameters messageQueryParameters = new MessageQueryParameters(); + messageQueryParameters.setOnboardingResponse(recipient); + messageQueryParameters.setSentToInSeconds(UtcTimeService.inTheFuture(5).toEpochSecond()); + messageQueryParameters.setSentFromInSeconds( + UtcTimeService.inThePast(UtcTimeService.FOUR_WEEKS_AGO).toEpochSecond()); + messageHeaderQueryService.send(messageQueryParameters); + waitForTheAgrirouterToProcessSingleMessage(); + Optional> fetchMessageResponses = + fetchMessageService.fetch( + recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals( + 1, fetchMessageResponses.get().size(), "This should be a single response."); + final DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + final DecodeMessageResponse decodeMessageResponse = + decodeMessageService.decode(fetchMessageResponses.get().get(0).getCommand().getMessage()); + Assertions.assertEquals( + Response.ResponseEnvelope.ResponseBodyType.ACK_FOR_FEED_HEADER_LIST, + decodeMessageResponse.getResponseEnvelope().getType()); + final FeedResponse.HeaderQueryResponse headerQueryResponse = + messageHeaderQueryService.decode( + decodeMessageResponse.getResponsePayloadWrapper().getDetails().getValue()); + + // [3] Delete the dangling messages from the feed of the endpoint if necessary. + if (headerQueryResponse.getQueryMetrics().getTotalMessagesInQuery() > 0) { + final DeleteMessageServiceImpl deleteMessageService = new DeleteMessageServiceImpl(); + final DeleteMessageParameters deleteMessageParameters = new DeleteMessageParameters(); + deleteMessageParameters.setOnboardingResponse(recipient); + final List messageIds = + headerQueryResponse.getFeedList().stream() + .map(FeedResponse.HeaderQueryResponse.Feed::getHeadersList) + .flatMap(Collection::stream) + .map(FeedResponse.HeaderQueryResponse.Header::getMessageId) + .collect(Collectors.toList()); + deleteMessageParameters.setMessageIds(messageIds); + deleteMessageService.send(deleteMessageParameters); + waitForTheAgrirouterToProcessSingleMessage(); + fetchMessageService.fetch( + recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); } + // [4] Clean the outbox of the endpoint. + fetchMessageService.fetch( + recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + } } From 7cf5ad09294a004d06001edbf818c016639ac2a2 Mon Sep 17 00:00:00 2001 From: Sascha Doemer Date: Fri, 11 Feb 2022 15:18:59 +0100 Subject: [PATCH 3/6] Add functions to fetch all messages from the feed. Add functions to fetch all message headers from the feed. Format --- .../messaging/http/ListEndpointsService.java | 38 +++++++++++++++- .../rest/ListEndpointsServiceImpl.java | 44 +++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/ListEndpointsService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/ListEndpointsService.java index 845baebf..2d92dd7e 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/ListEndpointsService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/ListEndpointsService.java @@ -1,5 +1,41 @@ package com.dke.data.agrirouter.api.service.messaging.http; +import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; +import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; import com.dke.data.agrirouter.api.service.parameters.ListEndpointsParameters; -public interface ListEndpointsService extends MessagingService {} +public interface ListEndpointsService extends MessagingService { + + /** + * List all endpoints with a route to the dedicated endpoint. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String listAllWithExistingRoute(OnboardingResponse onboardingResponse); + + /** + * List all endpoints for the account, even those that do not have a route. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String listAll(OnboardingResponse onboardingResponse); + + /** + * List all endpoints with a route to the dedicated endpoint. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + HttpAsyncMessageSendingResult listAllWithExistingRouteAsync( + OnboardingResponse onboardingResponse); + + /** + * List all endpoints for the account, even those that do not have a route. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + HttpAsyncMessageSendingResult listAllAsync(OnboardingResponse onboardingResponse); +} diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java index fd42659c..2adb807c 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java @@ -1,6 +1,9 @@ package com.dke.data.agrirouter.impl.messaging.rest; +import agrirouter.request.payload.account.Endpoints; import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; +import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; +import com.dke.data.agrirouter.api.enums.SystemMessageType; import com.dke.data.agrirouter.api.env.Environment; import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; import com.dke.data.agrirouter.api.messaging.MessageSendingResponse; @@ -54,4 +57,45 @@ public HttpAsyncMessageSendingResult sendAsync(ListEndpointsParameters parameter public EncodeMessageService getEncodeMessageService() { return this.encodeMessageService; } + + @Override + public String listAllWithExistingRoute(OnboardingResponse onboardingResponse) { + ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(true); + return send(listEndpointsParameters); + } + + @Override + public String listAll(OnboardingResponse onboardingResponse) { + ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(true); + return send(listEndpointsParameters); + } + + @Override + public HttpAsyncMessageSendingResult listAllWithExistingRouteAsync( + OnboardingResponse onboardingResponse) { + ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(true); + return sendAsync(listEndpointsParameters); + } + + @Override + public HttpAsyncMessageSendingResult listAllAsync(OnboardingResponse onboardingResponse) { + ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(true); + return sendAsync(listEndpointsParameters); + } } From 1072989ed4f3d219c9515d9c2cd407abd4c7830c Mon Sep 17 00:00:00 2001 From: Sascha Doemer Date: Wed, 16 Feb 2022 15:19:20 +0100 Subject: [PATCH 4/6] Adapt implementation. --- .../impl/messaging/mqtt/ListEndpointsServiceImpl.java | 2 +- .../impl/messaging/rest/ListEndpointsServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java index 5103fdf0..11140b5f 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java @@ -81,7 +81,7 @@ public String listAll(OnboardingResponse onboardingResponse) { listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); + listEndpointsParameters.setUnfilteredList(false); return send(listEndpointsParameters); } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java index 2adb807c..20ecc9c3 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java @@ -74,7 +74,7 @@ public String listAll(OnboardingResponse onboardingResponse) { listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); + listEndpointsParameters.setUnfilteredList(false); return send(listEndpointsParameters); } From f8540798a24ade1f576b43ff03294b3764d98366 Mon Sep 17 00:00:00 2001 From: Sascha Doemer Date: Wed, 16 Feb 2022 15:27:23 +0100 Subject: [PATCH 5/6] Adapt implementation. --- .../impl/messaging/mqtt/ListEndpointsServiceImpl.java | 2 +- .../impl/messaging/rest/ListEndpointsServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java index 11140b5f..e8141a60 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java @@ -102,7 +102,7 @@ public MqttAsyncMessageSendingResult listAllAsync(OnboardingResponse onboardingR listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); + listEndpointsParameters.setUnfilteredList(false); return sendAsync(listEndpointsParameters); } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java index 20ecc9c3..e0bfdfb8 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java @@ -95,7 +95,7 @@ public HttpAsyncMessageSendingResult listAllAsync(OnboardingResponse onboardingR listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); + listEndpointsParameters.setUnfilteredList(false); return sendAsync(listEndpointsParameters); } } From 546e98b96ffedd8b9209c6455ebc15e80d692a99 Mon Sep 17 00:00:00 2001 From: Sascha Doemer Date: Wed, 16 Feb 2022 15:28:34 +0100 Subject: [PATCH 6/6] Adapt implementation. --- .../impl/messaging/mqtt/ListEndpointsServiceImpl.java | 8 ++++---- .../impl/messaging/rest/ListEndpointsServiceImpl.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java index e8141a60..91202daa 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/ListEndpointsServiceImpl.java @@ -71,7 +71,7 @@ public String listAllWithExistingRoute(OnboardingResponse onboardingResponse) { listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); + listEndpointsParameters.setUnfilteredList(false); return send(listEndpointsParameters); } @@ -81,7 +81,7 @@ public String listAll(OnboardingResponse onboardingResponse) { listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); + listEndpointsParameters.setUnfilteredList(true); return send(listEndpointsParameters); } @@ -92,7 +92,7 @@ public MqttAsyncMessageSendingResult listAllWithExistingRouteAsync( listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); + listEndpointsParameters.setUnfilteredList(false); return sendAsync(listEndpointsParameters); } @@ -102,7 +102,7 @@ public MqttAsyncMessageSendingResult listAllAsync(OnboardingResponse onboardingR listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); + listEndpointsParameters.setUnfilteredList(true); return sendAsync(listEndpointsParameters); } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java index e0bfdfb8..1adf2013 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/ListEndpointsServiceImpl.java @@ -64,7 +64,7 @@ public String listAllWithExistingRoute(OnboardingResponse onboardingResponse) { listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); + listEndpointsParameters.setUnfilteredList(false); return send(listEndpointsParameters); } @@ -74,7 +74,7 @@ public String listAll(OnboardingResponse onboardingResponse) { listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); + listEndpointsParameters.setUnfilteredList(true); return send(listEndpointsParameters); } @@ -85,7 +85,7 @@ public HttpAsyncMessageSendingResult listAllWithExistingRouteAsync( listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(true); + listEndpointsParameters.setUnfilteredList(false); return sendAsync(listEndpointsParameters); } @@ -95,7 +95,7 @@ public HttpAsyncMessageSendingResult listAllAsync(OnboardingResponse onboardingR listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); + listEndpointsParameters.setUnfilteredList(true); return sendAsync(listEndpointsParameters); } }