diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index a64ca821..061e5831 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -9,33 +9,33 @@ on: - "main" jobs: - build_jdk8: + build_jdk17: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up JDK 8 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: 8 + java-version: 17 distribution: zulu - name: Build with Maven env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: mvn -B package --file pom.xml --settings ci/settings.xml -DskipTests=true - build_jdk11: + build_jdk21: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up JDK 11 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: 11 + java-version: 21 distribution: zulu - name: Build with Maven env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: mvn -B package --file pom.xml --settings ci/settings.xml -DskipTests=true - build_jdk17: + integration_test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -44,19 +44,6 @@ jobs: with: java-version: 17 distribution: zulu - - name: Build with Maven - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: mvn -B package --file pom.xml --settings ci/settings.xml -DskipTests=true - integration_test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 11 - uses: actions/setup-java@v3 - with: - java-version: 11 - distribution: zulu - name: Build with Maven env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 85946b40..631013ac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,6 +5,7 @@ on: tags: - 1.* - 2.* + - 3.* jobs: deploy: @@ -14,7 +15,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v3 with: - java-version: 8 + java-version: 17 distribution: zulu - name: Build with Maven env: diff --git a/README.adoc b/README.adoc index b06423e2..3205b906 100644 --- a/README.adoc +++ b/README.adoc @@ -16,19 +16,19 @@ As a universal data exchange platform, agrirouter fills a gap on the way to Farm image::lmis.svg[agrirouter] The LMIS AG is a recognised german IT service company, certified according to DIN EN ISO 9001:2015 and based in -Osnabrück, Berlin, Friedland and Wuppertal. Our core competence is the individual development, optimisation and support +Osnabrück, Berlin, Friedland and Wuppertal. Our core competence is the individual development, optimization and support of IT solutions. We also provide professional IT consulting services and training courses. We have been supporting the whole project during the development in the field of test management and are currently responsible for the development support of the platform. -We are active maintainers of the SDK and are using the SDK for internal testing purposes as well. Therefore we have a +We are active maintainers of the SDK and are using the SDK for internal testing as well. Therefore, we have a high interest in a stable and usable interface to connect to the agrirouter. Feel free to get in touch by visiting our https://www.lmis.de[website] or contacting us via GitHub. == The current project you're looking at -This project contains the SDK for the communication with the agrirouter. Everything you need for the onboarding process, secure communication and much more. +This project contains the SDK for the communication with the agrirouter. Everything you need for the onboarding process, secure communication, and much more. == Releases @@ -36,7 +36,7 @@ The release workflow follows the https://docs.microsoft.com/en-us/azure/devops/r === Update from 1.4.x to 2.x -The update for the new release includes some breaking changes. To have a rough overview what has to be done to have the new features from 2.x in you application, please see the following migration / update guide when updating. +The update for the new release includes some breaking changes. To have a rough overview of what has to be done to have the new features from 2.x in your application, please see the following migration / update guide when updating. ==== Update the Maven dependencies @@ -181,7 +181,7 @@ If you try to add the command, please be aware, that the containing PEM file has * There are no trailing spaces on each line. * The certificate is saved as a .p7b. -If the files does not meet those requirements, the import will not be possible. +If the files do not meet those requirements, the import will not be possible. The certificates are part of the integration guide which can be found in the external resources. == External resources diff --git a/agrirouter-sdk-java-api/pom.xml b/agrirouter-sdk-java-api/pom.xml index 52838434..08985b7d 100644 --- a/agrirouter-sdk-java-api/pom.xml +++ b/agrirouter-sdk-java-api/pom.xml @@ -6,7 +6,7 @@ com.agrirouter.api agrirouter-sdk-java - 2.3.0 + 3.0.0 AGRIROUTER SDK JAVA - API agrirouter-sdk-java-api @@ -59,7 +59,7 @@ org.jetbrains.kotlin kotlin-maven-plugin - ${kotlin.version} + 1.9.0 compile diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/CancellationToken.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/CancellationToken.java index b0234e7e..43ad3ef2 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/CancellationToken.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/CancellationToken.java @@ -1,21 +1,25 @@ package com.dke.data.agrirouter.api.cancellation; -/** Cancellation token to enable custom implementations integration within the solution. */ +/** + * Cancellation token to enable custom implementations integration within the solution. + */ public interface CancellationToken { - /** - * Signals the polling that the operation can be cancelled. - * - * @return true if the operation can be cancelled, false otherwise. - */ - boolean isNotCancelled(); + /** + * Signals the polling that the operation can be cancelled. + * + * @return true if the operation can be cancelled, false otherwise. + */ + boolean isNotCancelled(); - /** - * Will be called if one step during the whole polling mechanism is done and the next iteration - * will start afterwards. - */ - void nextStep(); + /** + * Will be called if one step during the whole polling mechanism is done and the next iteration + * will start afterwards. + */ + void nextStep(); - /** Will wait a dedicated amount of time before starting the next step. */ - void waitIfNotCancelled(); + /** + * Will wait a dedicated amount of time before starting the next step. + */ + void waitIfNotCancelled(); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/DefaultCancellationToken.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/DefaultCancellationToken.java index 73dd5da0..36054b78 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/DefaultCancellationToken.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/DefaultCancellationToken.java @@ -1,38 +1,40 @@ package com.dke.data.agrirouter.api.cancellation; -/** Default - time based - implementation of the cancellation token. */ +/** + * Default - time based - implementation of the cancellation token. + */ public class DefaultCancellationToken implements CancellationToken { - private int nrOfTries; - private final int maxTries; - private final long timeToWait; - private boolean wasInterrupted; + private int nrOfTries; + private final int maxTries; + private final long timeToWait; + private boolean wasInterrupted; - public DefaultCancellationToken(int maxTries, long timeToWait) { - this.nrOfTries = 0; - this.maxTries = maxTries; - this.timeToWait = timeToWait; - this.wasInterrupted = false; - } + public DefaultCancellationToken(int maxTries, long timeToWait) { + this.nrOfTries = 0; + this.maxTries = maxTries; + this.timeToWait = timeToWait; + this.wasInterrupted = false; + } - @Override - public boolean isNotCancelled() { - return nrOfTries < maxTries && !wasInterrupted; - } + @Override + public boolean isNotCancelled() { + return nrOfTries < maxTries && !wasInterrupted; + } - @Override - public void nextStep() { - nrOfTries++; - } + @Override + public void nextStep() { + nrOfTries++; + } - @Override - public void waitIfNotCancelled() { - if (isNotCancelled()) { - try { - Thread.sleep(timeToWait); - } catch (InterruptedException nop) { - wasInterrupted = true; - } + @Override + public void waitIfNotCancelled() { + if (isNotCancelled()) { + try { + Thread.sleep(timeToWait); + } catch (InterruptedException nop) { + wasInterrupted = true; + } + } } - } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/NonRetryCancellationToken.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/NonRetryCancellationToken.java new file mode 100644 index 00000000..752249a0 --- /dev/null +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/cancellation/NonRetryCancellationToken.java @@ -0,0 +1,26 @@ +package com.dke.data.agrirouter.api.cancellation; + +/** + * Non-retry implementation of the cancellation token. + */ +@SuppressWarnings("unused") +public class NonRetryCancellationToken implements CancellationToken { + + public NonRetryCancellationToken() { + } + + @Override + public boolean isNotCancelled() { + return true; + } + + @Override + public void nextStep() { + // Do nothing + } + + @Override + public void waitIfNotCancelled() { + // Do nothing + } +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Constants.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Constants.java index a877157d..62b19c16 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Constants.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Constants.java @@ -1,9 +1,11 @@ package com.dke.data.agrirouter.api.env; -/** Constants for the SDK. */ +/** + * Constants for the SDK. + */ public interface Constants { - String DEFAULT_PASSWORD = "changeit"; - String PROTOCOL = "TLSv1.2"; - String CERT_ALIAS = "cert-alias"; - String KEY_ALIAS = "key-alias"; + String DEFAULT_PASSWORD = "changeit"; + String PROTOCOL = "TLSv1.2"; + String CERT_ALIAS = "cert-alias"; + String KEY_ALIAS = "key-alias"; } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Environment.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Environment.java index d6f5c9d5..1c5b610f 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Environment.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Environment.java @@ -3,116 +3,124 @@ import com.dke.data.agrirouter.api.enums.SecuredOnboardingResponseType; import org.apache.commons.lang3.BooleanUtils; -/** Common Environment, holds some default methods pointing to the QA. */ +/** + * Common Environment, holds some default methods pointing to the QA. + */ public interface Environment { - /** System property to enable logging for HTTP requests. */ - String ENABLE_HTTP_REQUEST_LOGGING = "agrirouter.sdk.enable.http.request.logging"; + /** + * System property to enable logging for HTTP requests. + */ + String ENABLE_HTTP_REQUEST_LOGGING = "agrirouter.sdk.enable.http.request.logging"; - /** Template for MQTT connections. */ - String MQTT_URL_TEMPLATE = "ssl://%s:%s"; + /** + * Template for MQTT connections. + */ + String MQTT_URL_TEMPLATE = "ssl://%s:%s"; - /** Link template for the secured onboarding process. */ - String SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE = - "/application/%s/authorize?response_type=%s&state=%s&redirect_uri=%s"; + /** + * Link template for the secured onboarding process. + */ + String SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE = + "/application/%s/authorize?response_type=%s&state=%s&redirect_uri=%s"; - /** - * Checks whether the HTTP request logging is enabled or not. - * - * @return - - */ - static boolean httpRequestLoggingEnabled() { - final String httpRequestLoggingEnabled = System.getProperty(ENABLE_HTTP_REQUEST_LOGGING); - return BooleanUtils.toBoolean(httpRequestLoggingEnabled); - } + /** + * Checks whether the HTTP request logging is enabled or not. + * + * @return - + */ + static boolean httpRequestLoggingEnabled() { + final var httpRequestLoggingEnabled = System.getProperty(ENABLE_HTTP_REQUEST_LOGGING); + return BooleanUtils.toBoolean(httpRequestLoggingEnabled); + } - /** - * Returning the AR base URL without trailing '/'. - * - * @return - - */ - String getEnvironmentBaseUrl(); + /** + * Returning the AR base URL without trailing '/'. + * + * @return - + */ + String getEnvironmentBaseUrl(); - /** - * Returning the API prefix for several AR URLs, like the onboarding URL for example. - * - * @return - - */ - String getApiPrefix(); + /** + * Returning the API prefix for several AR URLs, like the onboarding URL for example. + * + * @return - + */ + String getApiPrefix(); - /** - * URL for the registration service. - * - * @return - - */ - String getRegistrationServiceUrl(); + /** + * URL for the registration service. + * + * @return - + */ + String getRegistrationServiceUrl(); - /** - * URL for the onboarding request. - * - * @return - - */ - default String getOnboardUrl() { - return getRegistrationServiceUrl() + getApiPrefix() + "/registration/onboard"; - } + /** + * URL for the onboarding request. + * + * @return - + */ + default String getOnboardUrl() { + return getRegistrationServiceUrl() + getApiPrefix() + "/registration/onboard"; + } - /** - * URL for the secured onboarding request. - * - * @return - - */ - default String getSecuredOnboardUrl() { - return getRegistrationServiceUrl() + getApiPrefix() + "/registration/onboard/request"; - } + /** + * URL for the secured onboarding request. + * + * @return - + */ + default String getSecuredOnboardUrl() { + return getRegistrationServiceUrl() + getApiPrefix() + "/registration/onboard/request"; + } - /** - * URL for verifying the secured onboarding request. - * - * @return - - */ - default String getVerifyOnboardRequestUrl() { - return getRegistrationServiceUrl() + getApiPrefix() + "/registration/onboard/verify"; - } + /** + * URL for verifying the secured onboarding request. + * + * @return - + */ + default String getVerifyOnboardRequestUrl() { + return getRegistrationServiceUrl() + getApiPrefix() + "/registration/onboard/verify"; + } - /** - * URL for revoking requests. - * - * @return - - */ - default String getRevokeUrl() { - return getRegistrationServiceUrl() + getApiPrefix() + "/registration/onboard/revoke"; - } + /** + * URL for revoking requests. + * + * @return - + */ + default String getRevokeUrl() { + return getRegistrationServiceUrl() + getApiPrefix() + "/registration/onboard/revoke"; + } - /** - * Returning the authorization URL for secured onboarding. - * - * @param responseType - - * @param state - - * @param redirectUrl - - * @return - - */ - default String getSecuredOnboardingAuthorizationUrl( - String applicationId, - SecuredOnboardingResponseType responseType, - String state, - String redirectUrl) { - return this.getEnvironmentBaseUrl() - + String.format( - SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE, - applicationId, - responseType.getKey(), - state, - redirectUrl); - } + /** + * Returning the authorization URL for secured onboarding. + * + * @param responseType - + * @param state - + * @param redirectUrl - + * @return - + */ + default String getSecuredOnboardingAuthorizationUrl( + String applicationId, + SecuredOnboardingResponseType responseType, + String state, + String redirectUrl) { + return this.getEnvironmentBaseUrl() + + String.format( + SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE, + applicationId, + responseType.getKey(), + state, + redirectUrl); + } - /** - * Returning the server URL for MQTT communication. - * - * @param host Host - * @param port Port - * @return - - */ - default String getMqttServerUrl(String host, String port) { - return String.format(MQTT_URL_TEMPLATE, host, port); - } + /** + * Returning the server URL for MQTT communication. + * + * @param host Host + * @param port Port + * @return - + */ + default String getMqttServerUrl(String host, String port) { + return String.format(MQTT_URL_TEMPLATE, host, port); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Production.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Production.java index 3501f329..16a76218 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Production.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/Production.java @@ -4,24 +4,25 @@ * Abstraction of the production environment, currently no overrides because the default is * production already. */ +@SuppressWarnings("unused") public abstract class Production implements Environment { - private static final String ENV_BASE_URL = "https://goto.my-agrirouter.com"; - private static final String API_PREFIX = "/api/v1.0"; - private static final String REGISTRATION_SERVICE_URL = "https://onboard.my-agrirouter.com"; + private static final String ENV_BASE_URL = "https://goto.my-agrirouter.com"; + private static final String API_PREFIX = "/api/v1.0"; + private static final String REGISTRATION_SERVICE_URL = "https://onboard.my-agrirouter.com"; - @Override - public String getEnvironmentBaseUrl() { - return ENV_BASE_URL; - } + @Override + public String getEnvironmentBaseUrl() { + return ENV_BASE_URL; + } - @Override - public String getApiPrefix() { - return API_PREFIX; - } + @Override + public String getApiPrefix() { + return API_PREFIX; + } - @Override - public String getRegistrationServiceUrl() { - return REGISTRATION_SERVICE_URL; - } + @Override + public String getRegistrationServiceUrl() { + return REGISTRATION_SERVICE_URL; + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/QA.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/QA.java index 7cb30cea..548a251a 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/QA.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/env/QA.java @@ -1,25 +1,27 @@ package com.dke.data.agrirouter.api.env; -/** Abstraction of the QA environment, currently no overrides because the default is QA already. */ +/** + * Abstraction of the QA environment, currently no overrides because the default is QA already. + */ public abstract class QA implements Environment { - private static final String ENV_BASE_URL = "https://agrirouter-qa.cfapps.eu10.hana.ondemand.com"; - private static final String API_PREFIX = "/api/v1.0"; - private static final String REGISTRATION_SERVICE_URL = - "https://agrirouter-registration-service-hubqa-eu10.cfapps.eu10.hana.ondemand.com"; + private static final String ENV_BASE_URL = "https://agrirouter-qa.cfapps.eu10.hana.ondemand.com"; + private static final String API_PREFIX = "/api/v1.0"; + private static final String REGISTRATION_SERVICE_URL = + "https://agrirouter-registration-service-hubqa-eu10.cfapps.eu10.hana.ondemand.com"; - @Override - public String getEnvironmentBaseUrl() { - return ENV_BASE_URL; - } + @Override + public String getEnvironmentBaseUrl() { + return ENV_BASE_URL; + } - @Override - public String getApiPrefix() { - return API_PREFIX; - } + @Override + public String getApiPrefix() { + return API_PREFIX; + } - @Override - public String getRegistrationServiceUrl() { - return REGISTRATION_SERVICE_URL; - } + @Override + public String getRegistrationServiceUrl() { + return REGISTRATION_SERVICE_URL; + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CertificationTypeNotSupportedException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CertificationTypeNotSupportedException.java index 65eb0c57..770cd751 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CertificationTypeNotSupportedException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CertificationTypeNotSupportedException.java @@ -2,17 +2,19 @@ import com.dke.data.agrirouter.api.enums.CertificationType; -/** Will be thrown if the certification type is not known. */ +/** + * Will be thrown if the certification type is not known. + */ public class CertificationTypeNotSupportedException extends RuntimeException { - private final CertificationType unknown; + private final CertificationType unknown; - public CertificationTypeNotSupportedException(CertificationType unknown) { - this.unknown = unknown; - } + public CertificationTypeNotSupportedException(CertificationType unknown) { + this.unknown = unknown; + } - @Override - public String getMessage() { - return this.unknown + " is unknown and therefore not supported."; - } + @Override + public String getMessage() { + return this.unknown + " is unknown and therefore not supported."; + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateDynamicKeyStoreException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateDynamicKeyStoreException.java index 52bd4814..ab4f431a 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateDynamicKeyStoreException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateDynamicKeyStoreException.java @@ -1,9 +1,11 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the keystore can not be created. */ +/** + * Will be thrown if the keystore can not be created. + */ public class CouldNotCreateDynamicKeyStoreException extends RuntimeException { - public CouldNotCreateDynamicKeyStoreException(Exception cause) { - super(cause); - } + public CouldNotCreateDynamicKeyStoreException(Exception cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateMqttClientException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateMqttClientException.java index 51a8e8f1..c4667e92 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateMqttClientException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateMqttClientException.java @@ -1,12 +1,14 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the service can not create a MQTT client. */ +/** + * Will be thrown if the service can not create a MQTT client. + */ public class CouldNotCreateMqttClientException extends RuntimeException { - public CouldNotCreateMqttClientException(String message, Throwable throwable) { - super(message, throwable); - } + public CouldNotCreateMqttClientException(String message, Throwable throwable) { + super(message, throwable); + } - public CouldNotCreateMqttClientException(String message) { - super(message); - } + public CouldNotCreateMqttClientException(String message) { + super(message); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateMqttOptionException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateMqttOptionException.java index cb5b8040..c6684bb7 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateMqttOptionException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateMqttOptionException.java @@ -1,13 +1,11 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the MQTT option can not be created. */ +/** + * Will be thrown if the MQTT option can not be created. + */ public class CouldNotCreateMqttOptionException extends RuntimeException { - public CouldNotCreateMqttOptionException(String message) { - super(message); - } - - public CouldNotCreateMqttOptionException(String message, Throwable cause) { - super(message, cause); - } + public CouldNotCreateMqttOptionException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreatePrivateKeyException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreatePrivateKeyException.java index d68ed0f8..7ada1a08 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreatePrivateKeyException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreatePrivateKeyException.java @@ -2,7 +2,7 @@ public class CouldNotCreatePrivateKeyException extends RuntimeException { - public CouldNotCreatePrivateKeyException(Throwable cause) { - super(cause); - } + public CouldNotCreatePrivateKeyException(Throwable cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreatePublicKeyException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreatePublicKeyException.java index b4d29fb3..ea682f16 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreatePublicKeyException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreatePublicKeyException.java @@ -2,7 +2,7 @@ public class CouldNotCreatePublicKeyException extends RuntimeException { - public CouldNotCreatePublicKeyException(Throwable cause) { - super(cause); - } + public CouldNotCreatePublicKeyException(Throwable cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateSignatureException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateSignatureException.java index d687083c..1872a189 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateSignatureException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotCreateSignatureException.java @@ -1,9 +1,11 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the keystore can not be created. */ +/** + * Will be thrown if the keystore can not be created. + */ public class CouldNotCreateSignatureException extends RuntimeException { - public CouldNotCreateSignatureException(Exception cause) { - super(cause); - } + public CouldNotCreateSignatureException(Exception cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodeHexException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodeHexException.java index d84777d0..6a3c7061 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodeHexException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodeHexException.java @@ -1,9 +1,11 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the keystore can not be created. */ +/** + * Will be thrown if the keystore can not be created. + */ public class CouldNotDecodeHexException extends RuntimeException { - public CouldNotDecodeHexException(Exception cause) { - super(cause); - } + public CouldNotDecodeHexException(Exception cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodeMessageException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodeMessageException.java index 1156e21c..b08829cf 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodeMessageException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodeMessageException.java @@ -6,7 +6,7 @@ */ public class CouldNotDecodeMessageException extends RuntimeException { - public CouldNotDecodeMessageException(Throwable cause) { - super(cause); - } + public CouldNotDecodeMessageException(Throwable cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodePushNotificationException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodePushNotificationException.java index 6e847391..8c1d3d67 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodePushNotificationException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotDecodePushNotificationException.java @@ -6,11 +6,11 @@ */ public class CouldNotDecodePushNotificationException extends RuntimeException { - public CouldNotDecodePushNotificationException(Throwable cause) { - super(cause); - } + public CouldNotDecodePushNotificationException(Throwable cause) { + super(cause); + } - public CouldNotDecodePushNotificationException(String message) { - super(message); - } + public CouldNotDecodePushNotificationException(String message) { + super(message); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotEncodeMessageException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotEncodeMessageException.java index c5001775..5c400235 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotEncodeMessageException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotEncodeMessageException.java @@ -6,7 +6,7 @@ */ public class CouldNotEncodeMessageException extends RuntimeException { - public CouldNotEncodeMessageException(Throwable cause) { - super(cause); - } + public CouldNotEncodeMessageException(Throwable cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotFetchCookiesException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotFetchCookiesException.java deleted file mode 100644 index 8d353cfa..00000000 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotFetchCookiesException.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.dke.data.agrirouter.api.exception; - -public class CouldNotFetchCookiesException extends RuntimeException { - - public CouldNotFetchCookiesException(Throwable cause) { - - super(cause); - } -} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotFindTimeZoneException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotFindTimeZoneException.java index 5bb9c44f..d8446301 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotFindTimeZoneException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotFindTimeZoneException.java @@ -1,3 +1,4 @@ package com.dke.data.agrirouter.api.exception; -public class CouldNotFindTimeZoneException extends RuntimeException {} +public class CouldNotFindTimeZoneException extends RuntimeException { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotGetRegistrationCodeException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotGetRegistrationCodeException.java deleted file mode 100644 index 437f6430..00000000 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotGetRegistrationCodeException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.dke.data.agrirouter.api.exception; - -/** Will be thrown if the registration code could not be obtained. */ -public class CouldNotGetRegistrationCodeException extends RuntimeException { - - public CouldNotGetRegistrationCodeException(Throwable cause) { - super(cause); - } - - public CouldNotGetRegistrationCodeException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotOffboardVirtualCommunicationUnitException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotOffboardVirtualCommunicationUnitException.java deleted file mode 100644 index 03e80a27..00000000 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotOffboardVirtualCommunicationUnitException.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.dke.data.agrirouter.api.exception; - -public class CouldNotOffboardVirtualCommunicationUnitException extends RuntimeException { - public CouldNotOffboardVirtualCommunicationUnitException(String message) { - super(message); - } -} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotOnboardVirtualCommunicationUnitException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotOnboardVirtualCommunicationUnitException.java index 49d74b99..111ffaee 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotOnboardVirtualCommunicationUnitException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotOnboardVirtualCommunicationUnitException.java @@ -1,7 +1,7 @@ package com.dke.data.agrirouter.api.exception; public class CouldNotOnboardVirtualCommunicationUnitException extends RuntimeException { - public CouldNotOnboardVirtualCommunicationUnitException(String message) { - super(message); - } + public CouldNotOnboardVirtualCommunicationUnitException(String message) { + super(message); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotSendMqttMessageException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotSendMqttMessageException.java index 95f14ec8..5389b795 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotSendMqttMessageException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotSendMqttMessageException.java @@ -1,9 +1,11 @@ package com.dke.data.agrirouter.api.exception; -/** Exception to rise if the MQTT message could not be send. */ +/** + * Exception to rise if the MQTT message could not be send. + */ public class CouldNotSendMqttMessageException extends RuntimeException { - public CouldNotSendMqttMessageException(Throwable cause) { - super(cause); - } + public CouldNotSendMqttMessageException(Throwable cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotVerifySecuredOnboardingRequestException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotVerifySecuredOnboardingRequestException.java index 8f3b9b4a..2e412435 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotVerifySecuredOnboardingRequestException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotVerifySecuredOnboardingRequestException.java @@ -1,9 +1,11 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the request can not be verified. */ +/** + * Will be thrown if the request can not be verified. + */ public class CouldNotVerifySecuredOnboardingRequestException extends RuntimeException { - public CouldNotVerifySecuredOnboardingRequestException(Exception cause) { - super(cause); - } + public CouldNotVerifySecuredOnboardingRequestException(Exception cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotVerifySignatureException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotVerifySignatureException.java index 8f15e437..dc501456 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotVerifySignatureException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/CouldNotVerifySignatureException.java @@ -1,9 +1,11 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the keystore can not be created. */ +/** + * Will be thrown if the keystore can not be created. + */ public class CouldNotVerifySignatureException extends RuntimeException { - public CouldNotVerifySignatureException(Exception cause) { - super(cause); - } + public CouldNotVerifySignatureException(Exception cause) { + super(cause); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/ForbiddenRequestException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/ForbiddenRequestException.java index a5a81b50..4bef8126 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/ForbiddenRequestException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/ForbiddenRequestException.java @@ -1,4 +1,7 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the HTTP status is 503. */ -public class ForbiddenRequestException extends RuntimeException {} +/** + * Will be thrown if the HTTP status is 503. + */ +public class ForbiddenRequestException extends RuntimeException { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/IllegalParameterDefinitionException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/IllegalParameterDefinitionException.java index 72ec0928..3fc903f6 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/IllegalParameterDefinitionException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/IllegalParameterDefinitionException.java @@ -1,20 +1,18 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if any kind of parameter attribute is invalid due to the given metrics. */ +/** + * Will be thrown if any kind of parameter attribute is invalid due to the given metrics. + */ public class IllegalParameterDefinitionException extends RuntimeException { - private String message; + private final String message; - public IllegalParameterDefinitionException() { - this(""); - } + public IllegalParameterDefinitionException(String message) { + this.message = message; + } - public IllegalParameterDefinitionException(String message) { - this.message = message; - } - - @Override - public String getMessage() { - return "There are validation errors. Please check your parameters.\n\n" + message; - } + @Override + public String getMessage() { + return "There are validation errors. Please check your parameters.\n\n" + message; + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidHttpStatusException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidHttpStatusException.java index 0fd3f40c..e8f23429 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidHttpStatusException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidHttpStatusException.java @@ -1,9 +1,11 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the expected status does not match the current status. */ +/** + * Will be thrown if the expected status does not match the current status. + */ public class InvalidHttpStatusException extends RuntimeException { - public InvalidHttpStatusException(int status) { - super("Did not expect HTTP status " + status + "."); - } + public InvalidHttpStatusException(int status) { + super("Did not expect HTTP status " + status + "."); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidSignatureException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidSignatureException.java index e7ed2fbf..c00034d1 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidSignatureException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidSignatureException.java @@ -1,3 +1,4 @@ package com.dke.data.agrirouter.api.exception; -public class InvalidSignatureException extends RuntimeException {} +public class InvalidSignatureException extends RuntimeException { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidUrlForRequestException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidUrlForRequestException.java index 2e7caea9..b6fea7ea 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidUrlForRequestException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/InvalidUrlForRequestException.java @@ -1,4 +1,7 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if there is an invalid URL within a request. */ -public class InvalidUrlForRequestException extends RuntimeException {} +/** + * Will be thrown if there is an invalid URL within a request. + */ +public class InvalidUrlForRequestException extends RuntimeException { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/OnboardingException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/OnboardingException.java index c879b8b4..6cd45bb7 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/OnboardingException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/OnboardingException.java @@ -1,26 +1,27 @@ package com.dke.data.agrirouter.api.exception; import com.dke.data.agrirouter.api.dto.onboard.OnboardingError; + import java.util.Optional; public class OnboardingException extends RuntimeException { - private final OnboardingError onboardingError; + private final OnboardingError onboardingError; - @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - public OnboardingException(Optional onboardingError) { - this.onboardingError = onboardingError.orElse(null); - } + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + public OnboardingException(Optional onboardingError) { + this.onboardingError = onboardingError.orElse(null); + } - public OnboardingError getOnboardingError() { - return onboardingError; - } + public OnboardingError getOnboardingError() { + return onboardingError; + } - @Override - public String getMessage() { - return null != onboardingError - ? String.format( - "There was an error '%s' during the onboarding process, details were '%s'", - onboardingError.getError().getCode(), onboardingError.getError().message) - : "There was an error during the onboarding process."; - } + @Override + public String getMessage() { + return null != onboardingError + ? String.format( + "There was an error '%s' during the onboarding process, details were '%s'", + onboardingError.getError().getCode(), onboardingError.getError().message) + : "There was an error during the onboarding process."; + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/RevokingException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/RevokingException.java index 2ea74318..453ce38a 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/RevokingException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/RevokingException.java @@ -1,26 +1,28 @@ package com.dke.data.agrirouter.api.exception; import com.dke.data.agrirouter.api.dto.revoke.RevokingError; + import java.util.Optional; public class RevokingException extends RuntimeException { - private final RevokingError revokingError; + private final RevokingError revokingError; - @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - public RevokingException(Optional lastError) { - this.revokingError = lastError.orElse(null); - } + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + public RevokingException(Optional lastError) { + this.revokingError = lastError.orElse(null); + } - public RevokingError getRevokingError() { - return revokingError; - } + @SuppressWarnings("unused") + public RevokingError getRevokingError() { + return revokingError; + } - @Override - public String getMessage() { - return null != revokingError - ? String.format( - "There was an error '%s' during the revoking, details were '%s'", - revokingError.getError().getCode(), revokingError.getError().message) - : "There was an error during the revoking process."; - } + @Override + public String getMessage() { + return null != revokingError + ? String.format( + "There was an error '%s' during the revoking, details were '%s'", + revokingError.getError().getCode(), revokingError.getError().message) + : "There was an error during the revoking process."; + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/UnauthorizedRequestException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/UnauthorizedRequestException.java index 15b800c9..c8aba288 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/UnauthorizedRequestException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/UnauthorizedRequestException.java @@ -4,4 +4,5 @@ * Will be thrown if there was an HTTP status 401 which can indicate invalid client id and secret, * missing bearer token or an invalid SSL cert. */ -public class UnauthorizedRequestException extends RuntimeException {} +public class UnauthorizedRequestException extends RuntimeException { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/UnexpectedHttpStatusException.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/UnexpectedHttpStatusException.java index bcbdc4d5..bf9b4bc1 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/UnexpectedHttpStatusException.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/exception/UnexpectedHttpStatusException.java @@ -1,13 +1,15 @@ package com.dke.data.agrirouter.api.exception; -/** Will be thrown if the expected status does not match the current status. */ +/** + * Will be thrown if the expected status does not match the current status. + */ public class UnexpectedHttpStatusException extends RuntimeException { - public UnexpectedHttpStatusException(int status, int exceptedHttpStatus) { - super( - "Did not expect this HTTP status. Status was " - + status - + ", expected status was " - + exceptedHttpStatus); - } + public UnexpectedHttpStatusException(int status, int exceptedHttpStatus) { + super( + "Did not expect this HTTP status. Status was " + + status + + ", expected status was " + + exceptedHttpStatus); + } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/HasLogger.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/HasLogger.java index 080eda99..fc57875e 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/HasLogger.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/HasLogger.java @@ -1,15 +1,16 @@ package com.dke.data.agrirouter.api.service; -import static java.lang.String.valueOf; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.Marker; import org.slf4j.MarkerFactory; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import static java.lang.String.valueOf; + /** * Interface to encapsulate logging capabilities. Logging will be done using LOG4J2, ruleset should * be: @@ -20,42 +21,44 @@ *
  • Log method result on level TRACE. *
  • Log method exit on level DEBUG. * - * + *

    * Please be aware of the rule "Log or throw" regarding exceptions. */ public interface HasLogger { - Marker METHOD_BEGIN = MarkerFactory.getMarker("METHOD_BEGIN"); - Marker METHOD_END = MarkerFactory.getMarker("METHOD_END"); + Marker METHOD_BEGIN = MarkerFactory.getMarker("METHOD_BEGIN"); + Marker METHOD_END = MarkerFactory.getMarker("METHOD_END"); - Map loggerCache = new HashMap<>(); + Map loggerCache = new HashMap<>(); + + /** + * Returns the native LOG4J2 logger for further logging. + * + * @return - + */ + default Logger getNativeLogger() { + if (null == loggerCache.get(this.getClass().getName())) { + final var logger = LoggerFactory.getLogger(this.getClass()); + loggerCache.put(this.getClass().getName(), logger); + } + return loggerCache.get(this.getClass().getName()); + } + + /** + * Log method begin. Will log all given parameters as well. + */ + default void logMethodBegin(Object... objects) { + getNativeLogger().debug(METHOD_BEGIN, "BEGIN | Start of method."); + Arrays.stream(objects).forEach(o -> getNativeLogger().trace(valueOf(o))); + } - /** - * Returns the native LOG4J2 logger for further logging. - * - * @return - - */ - default Logger getNativeLogger() { - if (null == loggerCache.get(this.getClass().getName())) { - final Logger logger = LoggerFactory.getLogger(this.getClass()); - loggerCache.put(this.getClass().getName(), logger); + /** + * Log method exit. Will log all given results as well. + * + * @param objects The results of the method. + */ + default void logMethodEnd(Object... objects) { + Arrays.stream(objects).forEach(o -> getNativeLogger().trace(valueOf(o))); + getNativeLogger().debug(METHOD_END, "END | End of method."); } - return loggerCache.get(this.getClass().getName()); - } - - /** Log method begin. Will log all given parameters as well. */ - default void logMethodBegin(Object... objects) { - getNativeLogger().debug(METHOD_BEGIN, "BEGIN | Start of method."); - Arrays.stream(objects).forEach(o -> getNativeLogger().trace(valueOf(o))); - } - - /** - * Log method exit. Will log all given results as well. - * - * @param objects The results of the method. - */ - default void logMethodEnd(Object... objects) { - Arrays.stream(objects).forEach(o -> getNativeLogger().trace(valueOf(o))); - getNativeLogger().debug(METHOD_END, "END | End of method."); - } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/ParameterValidation.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/ParameterValidation.java index 5959b4b0..7dd39827 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/ParameterValidation.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/ParameterValidation.java @@ -1,92 +1,99 @@ package com.dke.data.agrirouter.api.service; import com.dke.data.agrirouter.api.exception.IllegalParameterDefinitionException; -import java.util.Collection; import org.apache.commons.lang3.StringUtils; -/** Parameter validation using bean validation. */ +import java.util.Collection; + +/** + * Parameter validation using bean validation. + */ public interface ParameterValidation extends HasLogger { - /** - * Validation of the parameters. If there are any constraint violations, there will be a - * exception. - * - * @throws IllegalParameterDefinitionException - - */ - default void validate() { - getNativeLogger().debug("Validating parameters."); - getNativeLogger().trace("Technical validation."); - this.technicalValidation(); - getNativeLogger().trace("Business validation."); - this.businessValidation(); - } + /** + * Validation of the parameters. If there are any constraint violations, there will be a + * exception. + * + * @throws IllegalParameterDefinitionException - + */ + default void validate() { + getNativeLogger().debug("Validating parameters."); + getNativeLogger().trace("Technical validation."); + this.technicalValidation(); + getNativeLogger().trace("Business validation."); + this.businessValidation(); + } - /** Technical validation. Empty by default. */ - default void technicalValidation() { - // - } + /** + * Technical validation. Empty by default. + */ + default void technicalValidation() { + // + } - /** Business validation. Empty by default. */ - default void businessValidation() { - // - } + /** + * Business validation. Empty by default. + */ + default void businessValidation() { + // + } - /** - * Rise an exception if there has to be at least one valid parameter. - * - * @param message - - */ - default void rise(String message, String... parameterNames) { - final String joinedParametersNames = String.join(",", parameterNames); - throw new IllegalParameterDefinitionException( - String.format( - "At least one of the following parameters has to be defined [%s] was not defined correctly, please check the values. '%s'.", - joinedParametersNames, message)); - } + /** + * Rise an exception if there has to be at least one valid parameter. + * + * @param message - + */ + default void rise(String message, String... parameterNames) { + final var joinedParametersNames = String.join(",", parameterNames); + throw new IllegalParameterDefinitionException( + String.format( + "At least one of the following parameters has to be defined [%s] was not defined correctly, please check the values. '%s'.", + joinedParametersNames, message)); + } - /** - * Check for null values. - * - * @param o - - */ - default void nullCheck(String parameterName, Object o) { - if (null == o) { - this.rise( - String.format( - "The parameter '%s' should not have been null, please check your values.", - parameterName), - parameterName); + /** + * Check for null values. + * + * @param o - + */ + default void nullCheck(String parameterName, Object o) { + if (null == o) { + this.rise( + String.format( + "The parameter '%s' should not have been null, please check your values.", + parameterName), + parameterName); + } } - } - /** - * Check for null or empty values. - * - * @param s - - */ - default void isBlank(String parameterName, String s) { - if (StringUtils.isBlank(s)) { - this.rise( - String.format( - "The parameter '%s' should not have been blank, please check your values.", - parameterName), - parameterName); + /** + * Check for null or empty values. + * + * @param s - + */ + default void isBlank(String parameterName, String s) { + if (StringUtils.isBlank(s)) { + this.rise( + String.format( + "The parameter '%s' should not have been blank, please check your values.", + parameterName), + parameterName); + } } - } - /** - * Check for null or empty values. - * - * @param c - - */ - default void nullOrEmpty(String parameterName, Collection c) { - nullCheck(parameterName, c); - if (c.isEmpty()) { - this.rise( - String.format( - "The parameter '%s' should not have been empty, please check your values.", - parameterName), - parameterName); + /** + * Check for null or empty values. + * + * @param c - + */ + default void nullOrEmpty(String parameterName, Collection c) { + nullCheck(parameterName, c); + if (c.isEmpty()) { + this.rise( + String.format( + "The parameter '%s' should not have been empty, please check your values.", + parameterName), + parameterName); + } } - } } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/RevokingService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/RevokingService.java index 4c3e5d8b..d4f58ab0 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/RevokingService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/RevokingService.java @@ -3,17 +3,19 @@ import com.dke.data.agrirouter.api.dto.revoke.RevokingError; import com.dke.data.agrirouter.api.enums.RevokeResponse; import com.dke.data.agrirouter.api.service.parameters.RevokeParameters; + import java.util.Optional; public interface RevokingService { - RevokeResponse revoke(RevokeParameters revokeParameters); + @SuppressWarnings("unused") + RevokeResponse revoke(RevokeParameters revokeParameters); - /** - * The last error as RevokingError-Object, if the last revoking failed as object read from the - * JSON String - * - * @return The last error as RevokingError-Object - */ - Optional getLastRevokingError(String errorResponse); + /** + * The last error as RevokingError-Object, if the last revoking failed as object read from the + * JSON String + * + * @return The last error as RevokingError-Object + */ + Optional getLastRevokingError(String errorResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/SendMessageService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/SendMessageService.java index 51f2b717..65674af6 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/SendMessageService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/SendMessageService.java @@ -1,23 +1,26 @@ package com.dke.data.agrirouter.api.service.messaging; import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; + import java.util.concurrent.CompletableFuture; -/** Service for sending a message */ +/** + * Service for sending a message + */ public interface SendMessageService { - /** - * Sending a message - * - * @param sendMessageParameters - - */ - void send(SendMessageParameters sendMessageParameters); + /** + * Sending a message + * + * @param sendMessageParameters - + */ + void send(SendMessageParameters sendMessageParameters); - /** - * Sending a message - * - * @param sendMessageParameters - - * @return - - */ - CompletableFuture sendAsync(SendMessageParameters sendMessageParameters); + /** + * Sending a message + * + * @param sendMessageParameters - + * @return - + */ + CompletableFuture sendAsync(SendMessageParameters sendMessageParameters); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/DecodeMessageService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/DecodeMessageService.java index 7372e3e7..58af7ced 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/DecodeMessageService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/DecodeMessageService.java @@ -5,32 +5,34 @@ import com.google.protobuf.Any; import com.google.protobuf.ByteString; -/** Decoding of messages. */ +/** + * Decoding of messages. + */ public interface DecodeMessageService { - /** - * Decode a given message using the internal protobuf implementation. - * - * @param encodedResponse - - * @return - - */ - DecodeMessageResponse decode(String encodedResponse); + /** + * Decode a given message using the internal protobuf implementation. + * + * @param encodedResponse - + * @return - + */ + DecodeMessageResponse decode(String encodedResponse); - /** - * Decoding a given message using the internal protobuf implementation. - * - * @param message - - * @return - - */ - @Deprecated - MessageOuterClass.Message decode(ByteString message); + /** + * Decoding a given message using the internal protobuf implementation. + * + * @param message - + * @return - + */ + @Deprecated + MessageOuterClass.Message decode(ByteString message); - /** - * Decoding a given Any object containing the messages from the AR using the internal protobuf - * implementation. - * - * @param any - - * @return - - */ - MessageOuterClass.Messages decode(Any any); + /** + * Decoding a given Any object containing the messages from the AR using the internal protobuf + * implementation. + * + * @param any - + * @return - + */ + MessageOuterClass.Messages decode(Any any); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/DecodePushNotificationService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/DecodePushNotificationService.java index b98fa0d2..c70db2d0 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/DecodePushNotificationService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/DecodePushNotificationService.java @@ -4,11 +4,11 @@ public interface DecodePushNotificationService { - /** - * Decoding a given push notification using the intenral protobuf implementation. - * - * @param message - - * @return - - */ - PushNotificationOuterClass.PushNotification decode(String message); + /** + * Decoding a given push notification using the intenral protobuf implementation. + * + * @param message - + * @return - + */ + PushNotificationOuterClass.PushNotification decode(String message); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/EncodeMessageService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/EncodeMessageService.java index 90dcb350..a2e049fb 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/EncodeMessageService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/EncodeMessageService.java @@ -4,39 +4,42 @@ import com.dke.data.agrirouter.api.service.parameters.MessageHeaderParameters; import com.dke.data.agrirouter.api.service.parameters.MessageParameterTuple; import com.dke.data.agrirouter.api.service.parameters.PayloadParameters; + import java.util.List; -/** Encoding of messages. */ +/** + * Encoding of messages. + */ public interface EncodeMessageService { - /** - * Encode a given message using the internal protobuf encoding mechanism. - * - * @param messageHeaderParameters - - * @param payloadParameters - - * @return - - */ - String encode( - MessageHeaderParameters messageHeaderParameters, PayloadParameters payloadParameters); + /** + * Encode a given message using the internal protobuf encoding mechanism. + * + * @param messageHeaderParameters - + * @param payloadParameters - + * @return - + */ + String encode( + MessageHeaderParameters messageHeaderParameters, PayloadParameters payloadParameters); - /** - * Encode a number of messages. - * - * @param messageParameterTuples - - * @return - - */ - List encode(List messageParameterTuples); + /** + * Encode a number of messages. + * + * @param messageParameterTuples - + * @return - + */ + List encode(List messageParameterTuples); - /** - * Chunk a raw message if necessary. The chunk information and all IDs will be set by the SDK and - * are no longer in control of the application. - * - * @param messageHeaderParameters - - * @param payloadParameters - - * @return - - */ - List chunkAndBase64EncodeEachChunk( - MessageHeaderParameters messageHeaderParameters, - PayloadParameters payloadParameters, - OnboardingResponse onboardingResponse); + /** + * Chunk a raw message if necessary. The chunk information and all IDs will be set by the SDK and + * are no longer in control of the application. + * + * @param messageHeaderParameters - + * @param payloadParameters - + * @return - + */ + List chunkAndBase64EncodeEachChunk( + MessageHeaderParameters messageHeaderParameters, + PayloadParameters payloadParameters, + OnboardingResponse onboardingResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/MessageDecoder.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/MessageDecoder.java index cd25efe5..c7d33e82 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/MessageDecoder.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/encoding/MessageDecoder.java @@ -6,13 +6,13 @@ public interface MessageDecoder { - default T decode(ByteString message) { - try { - return unsafeDecode(message); - } catch (InvalidProtocolBufferException e) { - throw new CouldNotDecodeMessageException(e); + default T decode(ByteString message) { + try { + return unsafeDecode(message); + } catch (InvalidProtocolBufferException e) { + throw new CouldNotDecodeMessageException(e); + } } - } - T unsafeDecode(ByteString message) throws InvalidProtocolBufferException; + T unsafeDecode(ByteString message) throws InvalidProtocolBufferException; } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/CloudOffboardingService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/CloudOffboardingService.java index 392e7c8c..0529bdcd 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/CloudOffboardingService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/CloudOffboardingService.java @@ -2,4 +2,5 @@ import com.dke.data.agrirouter.api.service.parameters.CloudOffboardingParameters; -public interface CloudOffboardingService extends MessagingService {} +public interface CloudOffboardingService extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/CloudOnboardingService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/CloudOnboardingService.java index 829d79de..bcb581db 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/CloudOnboardingService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/CloudOnboardingService.java @@ -2,4 +2,5 @@ import com.dke.data.agrirouter.api.service.parameters.CloudOnboardingParameters; -public interface CloudOnboardingService extends MessagingService {} +public interface CloudOnboardingService extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/DeleteMessageService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/DeleteMessageService.java index 1863fa96..4021d8a2 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/DeleteMessageService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/DeleteMessageService.java @@ -4,25 +4,26 @@ import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; import com.dke.data.agrirouter.api.service.parameters.DeleteMessageParameters; +@SuppressWarnings("unused") public interface DeleteMessageService extends MessagingService { - /** - * Delete all messages in the feed. The function will delete all messages based on the time - * interval of 4 weeks (which is the maximum of time the messages are stored within the - * agrirouter). - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - String sendMessageToDeleteAll(OnboardingResponse onboardingResponse); + /** + * Delete all messages in the feed. The function will delete all messages based on the time + * interval of 4 weeks (which is the maximum of time the messages are stored within the + * agrirouter). + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String sendMessageToDeleteAll(OnboardingResponse onboardingResponse); - /** - * Delete all messages in the feed. The function will delete all messages based on the time - * interval of 4 weeks (which is the maximum of time the messages are stored within the - * agrirouter). - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - HttpAsyncMessageSendingResult sendMessageToDeleteAllAsync(OnboardingResponse onboardingResponse); + /** + * Delete all messages in the feed. The function will delete all messages based on the time + * interval of 4 weeks (which is the maximum of time the messages are stored within the + * agrirouter). + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + HttpAsyncMessageSendingResult sendMessageToDeleteAllAsync(OnboardingResponse onboardingResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/FetchMessageService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/FetchMessageService.java index 2220bea8..7e4e81f8 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/FetchMessageService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/FetchMessageService.java @@ -4,57 +4,60 @@ import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.service.parameters.FetchMessageParameters; + import java.util.List; import java.util.Optional; -/** Service for fetching messages for the given endpoint. */ +/** + * Service for fetching messages for the given endpoint. + */ public interface FetchMessageService { - /** - * Fetch messages using the given onboarding response using the number of tries and the given - * interval. - * - * @param onboardingResponse - - * @param maxTries - - * @param interval - - * @return Native response. - */ - @Deprecated - Optional> fetch( - OnboardingResponse onboardingResponse, int maxTries, long interval); - - /** - * Fetch messages using the given parameters using the number of tries and the given interval. - * - * @param parameters - - * @param maxTries - - * @param interval - - * @return Native response. - */ - @Deprecated - Optional> fetch( - FetchMessageParameters parameters, int maxTries, long interval); - - /** - * Fetch messages using the given onboarding response using the number of tries and the given - * interval. - * - * @param onboardingResponse - - * @param cancellationToken - - * @return Native response. - */ - Optional> fetch( - OnboardingResponse onboardingResponse, CancellationToken cancellationToken); - - /** - * Fetch messages using the given parameters using the number of tries and the given interval. - * - * @param parameters - - * @param cancellationToken - - * @return Native response. - */ - Optional> fetch( - FetchMessageParameters parameters, CancellationToken cancellationToken); - - FetchMessageResponse parseJson(byte[] json); + /** + * Fetch messages using the given onboarding response using the number of tries and the given + * interval. + * + * @param onboardingResponse - + * @param maxTries - + * @param interval - + * @return Native response. + */ + @Deprecated + Optional> fetch( + OnboardingResponse onboardingResponse, int maxTries, long interval); + + /** + * Fetch messages using the given parameters using the number of tries and the given interval. + * + * @param parameters - + * @param maxTries - + * @param interval - + * @return Native response. + */ + @Deprecated + Optional> fetch( + FetchMessageParameters parameters, int maxTries, long interval); + + /** + * Fetch messages using the given onboarding response using the number of tries and the given + * interval. + * + * @param onboardingResponse - + * @param cancellationToken - + * @return Native response. + */ + Optional> fetch( + OnboardingResponse onboardingResponse, CancellationToken cancellationToken); + + /** + * Fetch messages using the given parameters using the number of tries and the given interval. + * + * @param parameters - + * @param cancellationToken - + * @return Native response. + */ + Optional> fetch( + FetchMessageParameters parameters, CancellationToken cancellationToken); + + FetchMessageResponse parseJson(byte[] json); } 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 e052a4cf..749709d3 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 @@ -4,38 +4,39 @@ import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; import com.dke.data.agrirouter.api.service.parameters.ListEndpointsParameters; +@SuppressWarnings("unused") 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 sendMessageToListAllWithExistingRoute(OnboardingResponse onboardingResponse); + /** + * List all endpoints with a route to the dedicated endpoint. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String sendMessageToListAllWithExistingRoute(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 sendMessageToListAll(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 sendMessageToListAll(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 sendMessageToListAllWithExistingRouteAsync( - 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 sendMessageToListAllWithExistingRouteAsync( + 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 sendMessageToListAllAsync(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 sendMessageToListAllAsync(OnboardingResponse onboardingResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageConfirmationService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageConfirmationService.java index 88104c1a..5959c024 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageConfirmationService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageConfirmationService.java @@ -3,4 +3,5 @@ import com.dke.data.agrirouter.api.service.parameters.MessageConfirmationParameters; public interface MessageConfirmationService - extends MessagingService {} + extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageHeaderQueryService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageHeaderQueryService.java index 8fdcbee2..ed68c18f 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageHeaderQueryService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageHeaderQueryService.java @@ -6,26 +6,27 @@ import com.dke.data.agrirouter.api.service.messaging.encoding.MessageDecoder; import com.dke.data.agrirouter.api.service.parameters.MessageQueryParameters; +@SuppressWarnings("unused") public interface MessageHeaderQueryService - extends MessagingService, + extends MessagingService, MessageDecoder { - /** - * Query all message headers as default function. The query will be based on a time period since - * message ID filtering or sender filtering can be achieved using the default message sending. - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - String sendMessageToQueryAll(OnboardingResponse onboardingResponse); + /** + * Query all message headers as default function. The query will be based on a time period since + * message ID filtering or sender filtering can be achieved using the default message sending. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String sendMessageToQueryAll(OnboardingResponse onboardingResponse); - /** - * Query all message headers as async default function. The query will be based on a time period - * since message ID filtering or sender filtering can be achieved using the default message - * sending. - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - HttpAsyncMessageSendingResult sendMessageToQueryAllAsync(OnboardingResponse onboardingResponse); + /** + * Query all message headers as async default function. The query will be based on a time period + * since message ID filtering or sender filtering can be achieved using the default message + * sending. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + HttpAsyncMessageSendingResult sendMessageToQueryAllAsync(OnboardingResponse onboardingResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageQueryService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageQueryService.java index c8a133d6..00b81c25 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageQueryService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessageQueryService.java @@ -6,25 +6,26 @@ import com.dke.data.agrirouter.api.service.messaging.encoding.MessageDecoder; import com.dke.data.agrirouter.api.service.parameters.MessageQueryParameters; +@SuppressWarnings("unused") public interface MessageQueryService - extends MessagingService, + extends MessagingService, MessageDecoder { - /** - * Query all messages as default function. The query will be based on a time period since message - * ID filtering or sender filtering can be achieved using the default message sending. - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - String sendMessageToQueryAll(OnboardingResponse onboardingResponse); + /** + * Query all messages as default function. The query will be based on a time period since message + * ID filtering or sender filtering can be achieved using the default message sending. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String sendMessageToQueryAll(OnboardingResponse onboardingResponse); - /** - * Query all messages as async default function. The query will be based on a time period since - * message ID filtering or sender filtering can be achieved using the default message sending. - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - HttpAsyncMessageSendingResult sendMessageToQueryAllAsync(OnboardingResponse onboardingResponse); + /** + * Query all messages as async default function. The query will be based on a time period since + * message ID filtering or sender filtering can be achieved using the default message sending. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + HttpAsyncMessageSendingResult sendMessageToQueryAllAsync(OnboardingResponse onboardingResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessagingService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessagingService.java index 8411554d..ef6f7b37 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessagingService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/MessagingService.java @@ -9,19 +9,19 @@ */ public interface MessagingService { - /** - * Send a synchronous message. - * - * @param parameters - - * @return The ID of the message. - */ - String send(T parameters); + /** + * Send a synchronous message. + * + * @param parameters - + * @return The ID of the message. + */ + String send(T parameters); - /** - * Send an asynchronous message. - * - * @param parameters - - * @return The completable future containing the possible result. - */ - HttpAsyncMessageSendingResult sendAsync(T parameters); + /** + * Send an asynchronous message. + * + * @param parameters - + * @return The completable future containing the possible result. + */ + HttpAsyncMessageSendingResult sendAsync(T parameters); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/SetCapabilityService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/SetCapabilityService.java index a68ba1cb..d65aabc9 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/SetCapabilityService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/SetCapabilityService.java @@ -2,5 +2,8 @@ import com.dke.data.agrirouter.api.service.parameters.SetCapabilitiesParameters; -/** Service interface set capabilities. */ -public interface SetCapabilityService extends MessagingService {} +/** + * Service interface set capabilities. + */ +public interface SetCapabilityService extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/SetSubscriptionService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/SetSubscriptionService.java index c3fc1122..c6de56bd 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/SetSubscriptionService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/http/SetSubscriptionService.java @@ -2,5 +2,8 @@ import com.dke.data.agrirouter.api.service.parameters.SetSubscriptionParameters; -/** Service to set the subscriptions for an endpoint. */ -public interface SetSubscriptionService extends MessagingService {} +/** + * Service to set the subscriptions for an endpoint. + */ +public interface SetSubscriptionService extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/CloudOffboardingService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/CloudOffboardingService.java index ca816643..4a9055bf 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/CloudOffboardingService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/CloudOffboardingService.java @@ -2,4 +2,5 @@ import com.dke.data.agrirouter.api.service.parameters.CloudOffboardingParameters; -public interface CloudOffboardingService extends MessagingService {} +public interface CloudOffboardingService extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/CloudOnboardingService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/CloudOnboardingService.java index 85217000..fa60b880 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/CloudOnboardingService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/CloudOnboardingService.java @@ -2,4 +2,5 @@ import com.dke.data.agrirouter.api.service.parameters.CloudOnboardingParameters; -public interface CloudOnboardingService extends MessagingService {} +public interface CloudOnboardingService extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/DeleteMessageService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/DeleteMessageService.java index aee24433..e5a0975e 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/DeleteMessageService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/DeleteMessageService.java @@ -4,25 +4,26 @@ import com.dke.data.agrirouter.api.messaging.MqttAsyncMessageSendingResult; import com.dke.data.agrirouter.api.service.parameters.DeleteMessageParameters; +@SuppressWarnings("unused") public interface DeleteMessageService extends MessagingService { - /** - * Delete all messages in the feed. The function will delete all messages based on the time - * interval of 4 weeks (which is the maximum of time the messages are stored within the - * agrirouter). - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - String sendMessageToDeleteAll(OnboardingResponse onboardingResponse); + /** + * Delete all messages in the feed. The function will delete all messages based on the time + * interval of 4 weeks (which is the maximum of time the messages are stored within the + * agrirouter). + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String sendMessageToDeleteAll(OnboardingResponse onboardingResponse); - /** - * Delete all messages in the feed. The function will delete all messages based on the time - * interval of 4 weeks (which is the maximum of time the messages are stored within the - * agrirouter). - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - MqttAsyncMessageSendingResult sendMessageToDeleteAllAsync(OnboardingResponse onboardingResponse); + /** + * Delete all messages in the feed. The function will delete all messages based on the time + * interval of 4 weeks (which is the maximum of time the messages are stored within the + * agrirouter). + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + MqttAsyncMessageSendingResult sendMessageToDeleteAllAsync(OnboardingResponse onboardingResponse); } 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 982d100e..508e91e8 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 @@ -4,38 +4,39 @@ import com.dke.data.agrirouter.api.messaging.MqttAsyncMessageSendingResult; import com.dke.data.agrirouter.api.service.parameters.ListEndpointsParameters; +@SuppressWarnings("unused") 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 sendMessageToListAllWithExistingRoute(OnboardingResponse onboardingResponse); + /** + * List all endpoints with a route to the dedicated endpoint. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String sendMessageToListAllWithExistingRoute(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 sendMessageToListAll(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 sendMessageToListAll(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 sendMessageToListAllWithExistingRouteAsync( - 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 sendMessageToListAllWithExistingRouteAsync( + 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 sendMessageToListAllAsync(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 sendMessageToListAllAsync(OnboardingResponse onboardingResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageConfirmationService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageConfirmationService.java index 3c04238b..7e58fc55 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageConfirmationService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageConfirmationService.java @@ -3,4 +3,5 @@ import com.dke.data.agrirouter.api.service.parameters.MessageConfirmationParameters; public interface MessageConfirmationService - extends MessagingService {} + extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageHeaderQueryService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageHeaderQueryService.java index f51cf491..6fe0e8f9 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageHeaderQueryService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageHeaderQueryService.java @@ -6,26 +6,27 @@ import com.dke.data.agrirouter.api.service.messaging.encoding.MessageDecoder; import com.dke.data.agrirouter.api.service.parameters.MessageQueryParameters; +@SuppressWarnings("unused") public interface MessageHeaderQueryService - extends MessagingService, + extends MessagingService, MessageDecoder { - /** - * Query all message headers as default function. The query will be based on a time period since - * message ID filtering or sender filtering can be achieved using the default message sending. - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - String sendMessageToQueryAll(OnboardingResponse onboardingResponse); + /** + * Query all message headers as default function. The query will be based on a time period since + * message ID filtering or sender filtering can be achieved using the default message sending. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String sendMessageToQueryAll(OnboardingResponse onboardingResponse); - /** - * Query all message headers as async default function. The query will be based on a time period - * since message ID filtering or sender filtering can be achieved using the default message - * sending. - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - MqttAsyncMessageSendingResult sendMessageToQueryAllAsync(OnboardingResponse onboardingResponse); + /** + * Query all message headers as async default function. The query will be based on a time period + * since message ID filtering or sender filtering can be achieved using the default message + * sending. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + MqttAsyncMessageSendingResult sendMessageToQueryAllAsync(OnboardingResponse onboardingResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageQueryService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageQueryService.java index a721707a..86af1c92 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageQueryService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessageQueryService.java @@ -6,25 +6,26 @@ import com.dke.data.agrirouter.api.service.messaging.encoding.MessageDecoder; import com.dke.data.agrirouter.api.service.parameters.MessageQueryParameters; +@SuppressWarnings("unused") public interface MessageQueryService - extends MessagingService, + extends MessagingService, MessageDecoder { - /** - * Query all messages as default function. The query will be based on a time period since message - * ID filtering or sender filtering can be achieved using the default message sending. - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - String sendMessageToQueryAll(OnboardingResponse onboardingResponse); + /** + * Query all messages as default function. The query will be based on a time period since message + * ID filtering or sender filtering can be achieved using the default message sending. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + String sendMessageToQueryAll(OnboardingResponse onboardingResponse); - /** - * Query all messages as async default function. The query will be based on a time period since - * message ID filtering or sender filtering can be achieved using the default message sending. - * - * @param onboardingResponse The onboard response for the endpoint. - * @return The message ID. - */ - MqttAsyncMessageSendingResult sendMessageToQueryAllAsync(OnboardingResponse onboardingResponse); + /** + * Query all messages as async default function. The query will be based on a time period since + * message ID filtering or sender filtering can be achieved using the default message sending. + * + * @param onboardingResponse The onboard response for the endpoint. + * @return The message ID. + */ + MqttAsyncMessageSendingResult sendMessageToQueryAllAsync(OnboardingResponse onboardingResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessagingService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessagingService.java index 36300e66..c2ebca41 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessagingService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/MessagingService.java @@ -9,19 +9,19 @@ */ public interface MessagingService { - /** - * Send a synchronous message. - * - * @param parameters - - * @return The ID of the message. - */ - String send(T parameters); + /** + * Send a synchronous message. + * + * @param parameters - + * @return The ID of the message. + */ + String send(T parameters); - /** - * Send an asynchronous message. - * - * @param parameters - - * @return The completable future containing the possible result. - */ - MqttAsyncMessageSendingResult sendAsync(T parameters); + /** + * Send an asynchronous message. + * + * @param parameters - + * @return The completable future containing the possible result. + */ + MqttAsyncMessageSendingResult sendAsync(T parameters); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/SetCapabilityService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/SetCapabilityService.java index 2a1010c7..e189f923 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/SetCapabilityService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/SetCapabilityService.java @@ -2,5 +2,8 @@ import com.dke.data.agrirouter.api.service.parameters.SetCapabilitiesParameters; -/** Service interface set capabilities. */ -public interface SetCapabilityService extends MessagingService {} +/** + * Service interface set capabilities. + */ +public interface SetCapabilityService extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/SetSubscriptionService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/SetSubscriptionService.java index e01c5698..84559a37 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/SetSubscriptionService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/messaging/mqtt/SetSubscriptionService.java @@ -2,5 +2,8 @@ import com.dke.data.agrirouter.api.service.parameters.SetSubscriptionParameters; -/** Service to set the subscriptions for an endpoint. */ -public interface SetSubscriptionService extends MessagingService {} +/** + * Service to set the subscriptions for an endpoint. + */ +public interface SetSubscriptionService extends MessagingService { +} diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/OnboardingService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/OnboardingService.java index 4f4251c0..1647c5d3 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/OnboardingService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/OnboardingService.java @@ -4,27 +4,31 @@ import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.service.parameters.AuthorizationRequestParameters; import com.dke.data.agrirouter.api.service.parameters.OnboardingParameters; + import java.util.Optional; -/** Service for the onboarding process. */ +/** + * Service for the onboarding process. + */ +@SuppressWarnings("unused") public interface OnboardingService { - /** - * Oboarding of an endpoint. - * - * @param parameters- - * @return - - */ - OnboardingResponse onboard(OnboardingParameters parameters); + /** + * Oboarding of an endpoint. + * + * @param parameters- + * @return - + */ + OnboardingResponse onboard(OnboardingParameters parameters); - String generateAuthorizationUrl(AuthorizationRequestParameters parameters); + String generateAuthorizationUrl(AuthorizationRequestParameters parameters); - /** - * The last error as OnboardingError-Object, if the last onboarding failed as object read from the - * JSON String - * - * @param errorResponse - - * @return The last error as OnboardingError-Object - */ - Optional getLastOnboardingError(String errorResponse); + /** + * The last error as OnboardingError-Object, if the last onboarding failed as object read from the + * JSON String + * + * @param errorResponse - + * @return The last error as OnboardingError-Object + */ + Optional getLastOnboardingError(String errorResponse); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/secured/AuthorizationRequestService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/secured/AuthorizationRequestService.java index 4cb148b1..1749d805 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/secured/AuthorizationRequestService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/secured/AuthorizationRequestService.java @@ -3,20 +3,24 @@ import com.dke.data.agrirouter.api.dto.registrationrequest.secured.AuthorizationResponse; import com.dke.data.agrirouter.api.dto.registrationrequest.secured.AuthorizationResponseToken; import com.dke.data.agrirouter.api.service.parameters.AuthorizationRequestParameters; + import java.net.MalformedURLException; import java.net.URL; -/** Service for the registration request. */ +/** + * Service for the registration request. + */ +@SuppressWarnings("unused") public interface AuthorizationRequestService { - String getAuthorizationRequestURL(AuthorizationRequestParameters authorizationRequestParameters); + String getAuthorizationRequestURL(AuthorizationRequestParameters authorizationRequestParameters); - AuthorizationResponse extractAuthorizationResponseFromQuery(String query); + AuthorizationResponse extractAuthorizationResponseFromQuery(String query); - AuthorizationResponse extractAuthorizationResponse(URL redirectPageUrl); + AuthorizationResponse extractAuthorizationResponse(URL redirectPageUrl); - AuthorizationResponse extractAuthorizationResults(String redirectPageUrl) - throws MalformedURLException; + AuthorizationResponse extractAuthorizationResults(String redirectPageUrl) + throws MalformedURLException; - AuthorizationResponseToken decodeToken(String token); + AuthorizationResponseToken decodeToken(String token); } diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/secured/OnboardingService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/secured/OnboardingService.java index 5c8a7218..adf9da12 100644 --- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/secured/OnboardingService.java +++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/onboard/secured/OnboardingService.java @@ -4,40 +4,44 @@ import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.service.parameters.AuthorizationRequestParameters; import com.dke.data.agrirouter.api.service.parameters.SecuredOnboardingParameters; + import java.util.Optional; -/** Service for the onboarding process. */ +/** + * Service for the onboarding process. + */ +@SuppressWarnings("unused") public interface OnboardingService { - /** - * Oboarding of an endpoint. - * - * @param parameters- - * @return - - */ - OnboardingResponse onboard(SecuredOnboardingParameters parameters); + /** + * Oboarding of an endpoint. + * + * @param parameters- + * @return - + */ + OnboardingResponse onboard(SecuredOnboardingParameters parameters); - /** - * Verify the onboarding request to ensure correct signature and hashing. - * - * @param parameters - - */ - void verify(SecuredOnboardingParameters parameters); + /** + * Verify the onboarding request to ensure correct signature and hashing. + * + * @param parameters - + */ + void verify(SecuredOnboardingParameters parameters); - /** - * Generating the authorization URL. - * - * @param parameters - - * @return - - */ - String generateAuthorizationUrl(AuthorizationRequestParameters parameters); + /** + * Generating the authorization URL. + * + * @param parameters - + * @return - + */ + String generateAuthorizationUrl(AuthorizationRequestParameters parameters); - /** - * The last error as OnboardingError-Object, if the last onboarding failed as object read from the - * JSON String - * - * @param errorResponse - - * @return The last error as OnboardingError-Object - */ - Optional getLastOnboardingError(String errorResponse); + /** + * The last error as OnboardingError-Object, if the last onboarding failed as object read from the + * JSON String + * + * @param errorResponse - + * @return The last error as OnboardingError-Object + */ + Optional getLastOnboardingError(String errorResponse); } diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/encoding/inner/Header.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/encoding/inner/Header.kt index 5479a980..c2464275 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/encoding/inner/Header.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/encoding/inner/Header.kt @@ -1,5 +1,6 @@ package com.dke.data.agrirouter.api.dto.encoding.inner +@Suppress("unused") class Header { lateinit var applicationMessageId: String diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/encoding/inner/Message.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/encoding/inner/Message.kt index 8c6ea485..dd2dd697 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/encoding/inner/Message.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/encoding/inner/Message.kt @@ -1,5 +1,6 @@ package com.dke.data.agrirouter.api.dto.encoding.inner +@Suppress("unused") class Message { lateinit var header: Header diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/messaging/FetchMessageResponse.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/messaging/FetchMessageResponse.kt index b6c4c609..5e856ca6 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/messaging/FetchMessageResponse.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/messaging/FetchMessageResponse.kt @@ -4,9 +4,9 @@ import com.dke.data.agrirouter.api.dto.messaging.inner.Message class FetchMessageResponse { - lateinit var sensorAlternateId:String + lateinit var sensorAlternateId: String - lateinit var capabilityAlternateId:String + lateinit var capabilityAlternateId: String - lateinit var command:Message + lateinit var command: Message } \ No newline at end of file diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/messaging/MessageConfirmationRequest.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/messaging/MessageConfirmationRequest.kt deleted file mode 100644 index ea38b1d9..00000000 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/messaging/MessageConfirmationRequest.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.dke.data.agrirouter.api.dto.messaging - -class MessageConfirmationRequest { - - lateinit var messageIds : List - -} \ No newline at end of file diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/OnboardingRequest.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/OnboardingRequest.kt index 2bd77b30..51632dba 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/OnboardingRequest.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/OnboardingRequest.kt @@ -13,6 +13,7 @@ class OnboardingRequest { lateinit var gatewayId: String + @Suppress("PropertyName") lateinit var UTCTimestamp: String lateinit var timeZone: String diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/RouterDevice.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/RouterDevice.kt index 0cff43cd..591482d5 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/RouterDevice.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/RouterDevice.kt @@ -1,8 +1,8 @@ package com.dke.data.agrirouter.api.dto.onboard -class RouterDevice{ +class RouterDevice { - class Authentication{ + class Authentication { lateinit var type: String @@ -12,21 +12,22 @@ class RouterDevice{ } - class ConnectionCriteria{ + class ConnectionCriteria { - lateinit var clientId:String + lateinit var clientId: String - lateinit var gatewayId:String + lateinit var gatewayId: String - lateinit var host:String + lateinit var host: String - var port:Int = 0 + var port: Int = 0 } - var authentication: Authentication = Authentication(); + var authentication: Authentication = Authentication() - var connectionCriteria: ConnectionCriteria = ConnectionCriteria(); + var connectionCriteria: ConnectionCriteria = ConnectionCriteria() - lateinit var deviceAlternateId:String + @Suppress("unused") + lateinit var deviceAlternateId: String } \ No newline at end of file diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/inner/ConnectionCriteria.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/inner/ConnectionCriteria.kt index c8172cd3..edb4b68d 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/inner/ConnectionCriteria.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/onboard/inner/ConnectionCriteria.kt @@ -11,9 +11,9 @@ class ConnectionCriteria { lateinit var commands: String - var host : String? = null + var host: String? = null - var port : String? = null + var port: String? = null - var clientId : String? = null + var clientId: String? = null } \ No newline at end of file diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/RegistrationCodeResponse.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/RegistrationCodeResponse.kt deleted file mode 100644 index 4dd281b3..00000000 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/RegistrationCodeResponse.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.dke.data.agrirouter.api.dto.registrationrequest - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties - -@JsonIgnoreProperties(ignoreUnknown = true) -class RegistrationCodeResponse { - - lateinit var registrationCode: String - - lateinit var validTo: String - -} \ No newline at end of file diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/secured/AuthorizationResponse.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/secured/AuthorizationResponse.kt index 0b0a6727..962b5a13 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/secured/AuthorizationResponse.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/secured/AuthorizationResponse.kt @@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties @JsonIgnoreProperties(ignoreUnknown = true) class AuthorizationResponse { - lateinit var signature : String + lateinit var signature: String lateinit var state: String lateinit var token: String var error: String? = null @@ -13,7 +13,8 @@ class AuthorizationResponse { /** * Returns true, if an error accoured while generating token serverside */ - fun hasError():Boolean{ + @Suppress("unused") + fun hasError(): Boolean { return !error.isNullOrBlank() } } diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/secured/AuthorizationResponseToken.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/secured/AuthorizationResponseToken.kt index 106ac9ce..b417fd24 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/secured/AuthorizationResponseToken.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/registrationrequest/secured/AuthorizationResponseToken.kt @@ -2,6 +2,7 @@ package com.dke.data.agrirouter.api.dto.registrationrequest.secured import com.fasterxml.jackson.annotation.JsonIgnoreProperties +@Suppress("unused") @JsonIgnoreProperties(ignoreUnknown = true) class AuthorizationResponseToken { diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/revoke/RevokeRequest.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/revoke/RevokeRequest.kt index daa04fbe..47901067 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/revoke/RevokeRequest.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/dto/revoke/RevokeRequest.kt @@ -1,16 +1,13 @@ package com.dke.data.agrirouter.api.dto.revoke -import com.fasterxml.jackson.annotation.JsonIgnoreProperties -import com.fasterxml.jackson.annotation.JsonProperty -import com.google.gson.annotations.SerializedName - class RevokeRequest { lateinit var accountId: String - lateinit var endpointIds: Array; + lateinit var endpointIds: Array + @Suppress("PropertyName") lateinit var UTCTimestamp: String lateinit var timeZone: String diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/ApplicationType.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/ApplicationType.kt index 956c3529..78613fb9 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/ApplicationType.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/ApplicationType.kt @@ -10,7 +10,7 @@ enum class ApplicationType(val key: String) { companion object { fun of(key: String): Optional? { - return Arrays.stream(values()).filter { a -> a.key.contentEquals(key) }.findFirst() + return Arrays.stream(entries.toTypedArray()).filter { a -> a.key.contentEquals(key) }.findFirst() } } diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/ContentMessageType.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/ContentMessageType.kt index 24e25465..dbf45301 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/ContentMessageType.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/ContentMessageType.kt @@ -6,7 +6,11 @@ import agrirouter.technicalmessagetype.Gps * Enum containing all the content message types the AR is supporting. */ @Suppress("unused") -enum class ContentMessageType(private val key: String, private val typeUrl: String, private val needsBase64Encoding: Boolean) : TechnicalMessageType { +enum class ContentMessageType( + private val key: String, + private val typeUrl: String, + private val needsBase64Encoding: Boolean +) : TechnicalMessageType { ISO_11783_TASKDATA_ZIP("iso:11783:-10:taskdata:zip", "", true), SHP_SHAPE_ZIP("shp:shape:zip", "", true), DOC_PDF("doc:pdf", "", true), @@ -19,7 +23,11 @@ enum class ContentMessageType(private val key: String, private val typeUrl: Stri GPS_INFO("gps:info", Gps.GPSList.getDescriptor().fullName, false), //FIXME Since the spec is not public, we can only use those literals. - ISO_11783_DEVICE_DESCRIPTION("iso:11783:-10:device_description:protobuf", "types.agrirouter.com/efdi.ISO11783_TaskData", false), + ISO_11783_DEVICE_DESCRIPTION( + "iso:11783:-10:device_description:protobuf", + "types.agrirouter.com/efdi.ISO11783_TaskData", + false + ), ISO_11783_TIME_LOG("iso:11783:-10:time_log:protobuf", "types.agrirouter.com/efdi.TimeLog", false); override fun getKey(): String { diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/Gateway.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/Gateway.kt index a12ff046..a646f510 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/Gateway.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/Gateway.kt @@ -2,7 +2,6 @@ package com.dke.data.agrirouter.api.enums import java.util.* -@Suppress("unused") enum class Gateway(val key: String) { REST("3"), @@ -11,7 +10,7 @@ enum class Gateway(val key: String) { companion object { fun of(key: String): Optional? { - return Arrays.stream(values()).filter { a -> a.key.contentEquals(key) }.findFirst() + return Arrays.stream(entries.toTypedArray()).filter { a -> a.key.contentEquals(key) }.findFirst() } } diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/RevokeResponse.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/RevokeResponse.kt index c3155050..b167ae22 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/RevokeResponse.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/RevokeResponse.kt @@ -5,7 +5,7 @@ enum class RevokeResponse(val key: Int) { VALIDATION_ERROR(400), UNAUTHORIZED(401); - companion object Filter{ - fun valueOf(value: Int): RevokeResponse? = RevokeResponse.values().find { it.key == value } + companion object Filter { + fun valueOf(value: Int): RevokeResponse? = entries.find { it.key == value } } } \ No newline at end of file diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/SecuredOnboardingResponseType.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/SecuredOnboardingResponseType.kt index deda8b7f..69ad7a61 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/SecuredOnboardingResponseType.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/SecuredOnboardingResponseType.kt @@ -10,7 +10,8 @@ enum class SecuredOnboardingResponseType(val key: String) { companion object { fun of(key: String): Optional? { - return Arrays.stream(SecuredOnboardingResponseType.values()).filter { a -> a.key.contentEquals(key) }.findFirst() + return Arrays.stream(entries.toTypedArray()).filter { a -> a.key.contentEquals(key) } + .findFirst() } } diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/SystemMessageType.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/SystemMessageType.kt index a3f11ecf..4e5165e9 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/SystemMessageType.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/enums/SystemMessageType.kt @@ -9,15 +9,23 @@ import agrirouter.request.payload.endpoint.SubscriptionOuterClass /** * Enum containing all the content message types the AR is supporting. */ -@Suppress("unused") enum class SystemMessageType(private val key: String, private val typeUrl: String) : TechnicalMessageType { EMPTY("", ""), - DKE_CLOUD_ONBOARD_ENDPOINTS("dke:cloud_onboard_endpoints", CloudVirtualizedAppRegistration.OnboardingRequest.getDescriptor().fullName), - DKE_CLOUD_OFFBOARD_ENDPOINTS("dke:cloud_offboard_endpoints", CloudVirtualizedAppRegistration.OffboardingRequest.getDescriptor().fullName), + DKE_CLOUD_ONBOARD_ENDPOINTS( + "dke:cloud_onboard_endpoints", + CloudVirtualizedAppRegistration.OnboardingRequest.getDescriptor().fullName + ), + DKE_CLOUD_OFFBOARD_ENDPOINTS( + "dke:cloud_offboard_endpoints", + CloudVirtualizedAppRegistration.OffboardingRequest.getDescriptor().fullName + ), DKE_CAPABILITIES("dke:capabilities", Capabilities.CapabilitySpecification.getDescriptor().fullName), DKE_SUBSCRIPTION("dke:subscription", SubscriptionOuterClass.Subscription.getDescriptor().fullName), DKE_LIST_ENDPOINTS("dke:list_endpoints", Endpoints.ListEndpointsQuery.getDescriptor().fullName), - DKE_LIST_ENDPOINTS_UNFILTERED("dke:list_endpoints_unfiltered", Endpoints.ListEndpointsQuery.getDescriptor().fullName), + DKE_LIST_ENDPOINTS_UNFILTERED( + "dke:list_endpoints_unfiltered", + Endpoints.ListEndpointsQuery.getDescriptor().fullName + ), DKE_FEED_CONFIRM("dke:feed_confirm", FeedRequests.MessageConfirm.getDescriptor().fullName), DKE_FEED_DELETE("dke:feed_delete", FeedRequests.MessageDelete.getDescriptor().fullName), DKE_FEED_MESSAGE_QUERY("dke:feed_message_query", FeedRequests.MessageQuery.getDescriptor().fullName), diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/HttpAsyncMessageSendingResult.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/HttpAsyncMessageSendingResult.kt index 5e759f1e..769c1b56 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/HttpAsyncMessageSendingResult.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/HttpAsyncMessageSendingResult.kt @@ -2,6 +2,7 @@ package com.dke.data.agrirouter.api.messaging import java.util.concurrent.CompletableFuture +@Suppress("unused") class HttpAsyncMessageSendingResult( val response: CompletableFuture, val messageId: String diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/MessageSendingResponse.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/MessageSendingResponse.kt index 98ebb187..e074f60d 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/MessageSendingResponse.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/MessageSendingResponse.kt @@ -1,6 +1,6 @@ package com.dke.data.agrirouter.api.messaging -import javax.ws.rs.core.Response +import jakarta.ws.rs.core.Response /** * Wrapper for the response from the server. diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/MessageSendingResult.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/MessageSendingResult.kt deleted file mode 100644 index 0f08ce91..00000000 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/messaging/MessageSendingResult.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.dke.data.agrirouter.api.messaging - -class MessageSendingResult(val messageSendingResponse: MessageSendingResponse, val messageId : String) \ No newline at end of file diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/DeleteMessageParameters.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/DeleteMessageParameters.kt index a64483d1..aea4b9b5 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/DeleteMessageParameters.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/DeleteMessageParameters.kt @@ -25,7 +25,13 @@ class DeleteMessageParameters : AbstractParameterBase(), ParameterValidation { override fun businessValidation() { if (null == messageIds && null == senderIds && null == sentFromInSeconds && null == sentToInSeconds) { - rise("There has to be a filter criteria for the query.", "messageIds", "senderIds", "sentFromInSeconds & sendToInSeconds", "") + rise( + "There has to be a filter criteria for the query.", + "messageIds", + "senderIds", + "sentFromInSeconds & sendToInSeconds", + "" + ) } } diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/MessageParameterTuple.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/MessageParameterTuple.kt index e7eb0630..2ac4872d 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/MessageParameterTuple.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/MessageParameterTuple.kt @@ -3,5 +3,7 @@ package com.dke.data.agrirouter.api.service.parameters /** * Containing a tuple for message sending, i.e. used after chunking the messages. */ -class MessageParameterTuple(var messageHeaderParameters: MessageHeaderParameters, var payloadParameters: PayloadParameters) { -} \ No newline at end of file +class MessageParameterTuple( + var messageHeaderParameters: MessageHeaderParameters, + var payloadParameters: PayloadParameters +) \ No newline at end of file diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/MessageQueryParameters.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/MessageQueryParameters.kt index f3777b63..4e5d8881 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/MessageQueryParameters.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/MessageQueryParameters.kt @@ -25,7 +25,13 @@ class MessageQueryParameters : AbstractParameterBase(), ParameterValidation { override fun businessValidation() { if (null == messageIds && null == senderIds && null == sentFromInSeconds && null == sentToInSeconds) { - rise("There has to be a filter criteria for the query.", "messageIds", "senderIds", "sentFromInSeconds & sendToInSeconds", "") + rise( + "There has to be a filter criteria for the query.", + "messageIds", + "senderIds", + "sentFromInSeconds & sendToInSeconds", + "" + ) } } diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/SetCapabilitiesParameters.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/SetCapabilitiesParameters.kt index 0855def7..cedd5b4e 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/SetCapabilitiesParameters.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/SetCapabilitiesParameters.kt @@ -19,7 +19,8 @@ class SetCapabilitiesParameters : AbstractParameterBase(), ParameterValidation { var capabilitiesParameters: List? = null - var enablePushNotifications: Capabilities.CapabilitySpecification.PushNotification = Capabilities.CapabilitySpecification.PushNotification.DISABLED + var enablePushNotifications: Capabilities.CapabilitySpecification.PushNotification = + Capabilities.CapabilitySpecification.PushNotification.DISABLED class CapabilityParameters : ParameterValidation { diff --git a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/base/DynamicAttributesStorage.kt b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/base/DynamicAttributesStorage.kt index be311d7c..eb6a97e6 100644 --- a/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/base/DynamicAttributesStorage.kt +++ b/agrirouter-sdk-java-api/src/main/kotlin/com/dke/data/agrirouter/api/service/parameters/base/DynamicAttributesStorage.kt @@ -8,7 +8,7 @@ open class DynamicAttributesStorage { private var attributes: HashMap = HashMap() fun storeAttribute(key: String, value: Any) { - attributes.put(key, value) + attributes[key] = value } fun fetchAttribute(key: String): Any? { diff --git a/agrirouter-sdk-java-convenience/pom.xml b/agrirouter-sdk-java-convenience/pom.xml index d2ade9b1..e103b6ef 100644 --- a/agrirouter-sdk-java-convenience/pom.xml +++ b/agrirouter-sdk-java-convenience/pom.xml @@ -1,11 +1,12 @@ - + 4.0.0 com.agrirouter.api agrirouter-sdk-java - 2.3.0 + 3.0.0 AGRIROUTER SDK JAVA - CONVENIENCE agrirouter-sdk-java-convenience diff --git a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/decode/DecodeCloudOnboardingResponsesService.java b/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/decode/DecodeCloudOnboardingResponsesService.java index 4d5eaa94..56b2ddb6 100644 --- a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/decode/DecodeCloudOnboardingResponsesService.java +++ b/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/decode/DecodeCloudOnboardingResponsesService.java @@ -1,9 +1,7 @@ package com.dke.data.agrirouter.convenience.decode; import agrirouter.cloud.registration.CloudVirtualizedAppRegistration; -import agrirouter.commons.MessageOuterClass; import agrirouter.response.Response; -import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.exception.CouldNotOnboardVirtualCommunicationUnitException; @@ -13,73 +11,76 @@ import com.dke.data.agrirouter.impl.validation.ResponseValidator; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; + import java.util.ArrayList; import java.util.List; -/** Convenience implementation to decode multiple onboarding responses from the fetched mesage. */ +/** + * Convenience implementation to decode multiple onboarding responses from the fetched mesage. + */ public class DecodeCloudOnboardingResponsesService - implements ResponseValidator, + implements ResponseValidator, MessageDecoder { - private final DecodeMessageService decodeMessageService; - - public DecodeCloudOnboardingResponsesService() { - this.decodeMessageService = new DecodeMessageServiceImpl(); - } + private final DecodeMessageService decodeMessageService; - /** - * Decode onbarding response for cloud onboarding given the message responses. - * - * @param fetchMessageResponses - - * @param onboardingResponse - - * @return - - */ - public List decode( - List fetchMessageResponses, OnboardingResponse onboardingResponse) { - List responses = new ArrayList<>(); - DecodeMessageResponse decodedMessageQueryResponse = - this.decodeMessageService.decode(fetchMessageResponses.get(0).getCommand().getMessage()); - try { - this.assertStatusCodeIsValid( - decodedMessageQueryResponse.getResponseEnvelope().getResponseCode()); - } catch (Exception e) { - MessageOuterClass.Messages message = - this.decodeMessageService.decode( - decodedMessageQueryResponse.getResponsePayloadWrapper().getDetails()); - throw new CouldNotOnboardVirtualCommunicationUnitException( - message.getMessages(0).getMessage()); + public DecodeCloudOnboardingResponsesService() { + this.decodeMessageService = new DecodeMessageServiceImpl(); } - if (decodedMessageQueryResponse.getResponseEnvelope().getType() - == Response.ResponseEnvelope.ResponseBodyType.CLOUD_REGISTRATIONS - && this.assertStatusCodeIsCreated( - decodedMessageQueryResponse.getResponseEnvelope().getResponseCode())) { - CloudVirtualizedAppRegistration.OnboardingResponse cloudOnboardingResponse = - this.decode( - decodedMessageQueryResponse.getResponsePayloadWrapper().getDetails().getValue()); - cloudOnboardingResponse - .getOnboardedEndpointsList() - .forEach( - endpointRegistrationDetails -> { - OnboardingResponse internalOnboardingResponse = new OnboardingResponse(); - internalOnboardingResponse.setSensorAlternateId( - endpointRegistrationDetails.getSensorAlternateId()); - internalOnboardingResponse.setCapabilityAlternateId( - endpointRegistrationDetails.getCapabilityAlternateId()); - internalOnboardingResponse.setDeviceAlternateId( - endpointRegistrationDetails.getDeviceAlternateId()); - internalOnboardingResponse.setAuthentication( - onboardingResponse.getAuthentication()); - internalOnboardingResponse.setConnectionCriteria( - onboardingResponse.getConnectionCriteria()); - responses.add(internalOnboardingResponse); - }); + + /** + * Decode onbarding response for cloud onboarding given the message responses. + * + * @param fetchMessageResponses - + * @param onboardingResponse - + * @return - + */ + public List decode( + List fetchMessageResponses, OnboardingResponse onboardingResponse) { + List responses = new ArrayList<>(); + var decodedMessageQueryResponse = + this.decodeMessageService.decode(fetchMessageResponses.get(0).getCommand().getMessage()); + try { + this.assertStatusCodeIsValid( + decodedMessageQueryResponse.getResponseEnvelope().getResponseCode()); + } catch (Exception e) { + var message = + this.decodeMessageService.decode( + decodedMessageQueryResponse.getResponsePayloadWrapper().getDetails()); + throw new CouldNotOnboardVirtualCommunicationUnitException( + message.getMessages(0).getMessage()); + } + if (decodedMessageQueryResponse.getResponseEnvelope().getType() + == Response.ResponseEnvelope.ResponseBodyType.CLOUD_REGISTRATIONS + && this.assertStatusCodeIsCreated( + decodedMessageQueryResponse.getResponseEnvelope().getResponseCode())) { + var cloudOnboardingResponse = + this.decode( + decodedMessageQueryResponse.getResponsePayloadWrapper().getDetails().getValue()); + cloudOnboardingResponse + .getOnboardedEndpointsList() + .forEach( + endpointRegistrationDetails -> { + var internalOnboardingResponse = new OnboardingResponse(); + internalOnboardingResponse.setSensorAlternateId( + endpointRegistrationDetails.getSensorAlternateId()); + internalOnboardingResponse.setCapabilityAlternateId( + endpointRegistrationDetails.getCapabilityAlternateId()); + internalOnboardingResponse.setDeviceAlternateId( + endpointRegistrationDetails.getDeviceAlternateId()); + internalOnboardingResponse.setAuthentication( + onboardingResponse.getAuthentication()); + internalOnboardingResponse.setConnectionCriteria( + onboardingResponse.getConnectionCriteria()); + responses.add(internalOnboardingResponse); + }); + } + return responses; } - return responses; - } - @Override - public CloudVirtualizedAppRegistration.OnboardingResponse unsafeDecode(ByteString message) - throws InvalidProtocolBufferException { - return CloudVirtualizedAppRegistration.OnboardingResponse.parseFrom(message); - } + @Override + public CloudVirtualizedAppRegistration.OnboardingResponse unsafeDecode(ByteString message) + throws InvalidProtocolBufferException { + return CloudVirtualizedAppRegistration.OnboardingResponse.parseFrom(message); + } } diff --git a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/client/MqttClientService.java b/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/client/MqttClientService.java index 787cc9a6..7991f6fa 100644 --- a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/client/MqttClientService.java +++ b/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/client/MqttClientService.java @@ -5,65 +5,69 @@ import com.dke.data.agrirouter.api.env.Environment; import com.dke.data.agrirouter.api.exception.CouldNotCreateMqttClientException; import com.dke.data.agrirouter.impl.EnvironmentalService; -import java.util.Objects; import org.apache.commons.lang3.StringUtils; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttException; -/** Service to create a MQTT client using the given onboarding response. */ +import java.util.Objects; + +/** + * Service to create a MQTT client using the given onboarding response. + */ +@SuppressWarnings("unused") public class MqttClientService extends EnvironmentalService { - /** - * Constructor for an environmental service. - * - * @param environment - - */ - public MqttClientService(Environment environment) { - super(environment); - } + /** + * Constructor for an environmental service. + * + * @param environment - + */ + public MqttClientService(Environment environment) { + super(environment); + } - /** - * Creates a MQTT client using the given onboarding response. Communication relies on given root - * certificates in an external keystore. The keystore with the root certificates is not created - * locally. - * - * @param onboardingResponse - - * @return - - */ - public IMqttClient create(OnboardingResponse onboardingResponse) { - return this.createMqttClient( - onboardingResponse.getConnectionCriteria().getHost(), - onboardingResponse.getConnectionCriteria().getPort(), - onboardingResponse.getConnectionCriteria().getClientId()); - } + /** + * Creates a MQTT client using the given onboarding response. Communication relies on given root + * certificates in an external keystore. The keystore with the root certificates is not created + * locally. + * + * @param onboardingResponse - + * @return - + */ + public IMqttClient create(OnboardingResponse onboardingResponse) { + return this.createMqttClient( + onboardingResponse.getConnectionCriteria().getHost(), + onboardingResponse.getConnectionCriteria().getPort(), + onboardingResponse.getConnectionCriteria().getClientId()); + } - /** - * Creates a MQTT client using the given router Device. Communication relies on given root - * certificates in an external keystore. The keystore with the root certificates is not created - * locally. - * - * @param routerDevice - - * @return - - */ - public IMqttClient create(RouterDevice routerDevice) { - return this.createMqttClient( - routerDevice.getConnectionCriteria().getHost(), - String.valueOf(routerDevice.getConnectionCriteria().getPort()), - routerDevice.getDeviceAlternateId()); - } + /** + * Creates a MQTT client using the given router Device. Communication relies on given root + * certificates in an external keystore. The keystore with the root certificates is not created + * locally. + * + * @param routerDevice - + * @return - + */ + public IMqttClient create(RouterDevice routerDevice) { + return this.createMqttClient( + routerDevice.getConnectionCriteria().getHost(), + String.valueOf(routerDevice.getConnectionCriteria().getPort()), + routerDevice.getConnectionCriteria().getClientId()); + } - private IMqttClient createMqttClient(String host, String port, String clientId) { - try { - if (StringUtils.isAnyBlank(host, port, clientId)) { - throw new CouldNotCreateMqttClientException( - "Currently there are parameters missing. Did you onboard correctly - host, port or client id are missing."); - } - return new MqttClient( - this.environment.getMqttServerUrl(host, port), Objects.requireNonNull(clientId)); + private IMqttClient createMqttClient(String host, String port, String clientId) { + try { + if (StringUtils.isAnyBlank(host, port, clientId)) { + throw new CouldNotCreateMqttClientException( + "Currently there are parameters missing. Did you onboard correctly - host, port or client id are missing."); + } + return new MqttClient( + this.environment.getMqttServerUrl(host, port), Objects.requireNonNull(clientId)); - } catch (MqttException e) { - throw new CouldNotCreateMqttClientException("Could not create MQTT client.", e); + } catch (MqttException e) { + throw new CouldNotCreateMqttClientException("Could not create MQTT client.", e); + } } - } } diff --git a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/client/MqttOptionService.java b/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/client/MqttOptionService.java index 216b7376..fa7a13b8 100644 --- a/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/client/MqttOptionService.java +++ b/agrirouter-sdk-java-convenience/src/main/java/com/dke/data/agrirouter/convenience/mqtt/client/MqttOptionService.java @@ -8,112 +8,116 @@ import com.dke.data.agrirouter.api.exception.CouldNotCreateMqttOptionException; import com.dke.data.agrirouter.impl.EnvironmentalService; import com.dke.data.agrirouter.impl.common.ssl.KeyStoreCreationService; +import org.eclipse.paho.client.mqttv3.MqttConnectOptions; + +import javax.net.SocketFactory; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; -import javax.net.SocketFactory; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.SSLContext; -import org.eclipse.paho.client.mqttv3.MqttConnectOptions; -/** Creating MQTT options for the MQTT client. */ +/** + * Creating MQTT options for the MQTT client. + */ +@SuppressWarnings("unused") public class MqttOptionService extends EnvironmentalService { - private final KeyStoreCreationService keyStoreCreationService = new KeyStoreCreationService(); + private final KeyStoreCreationService keyStoreCreationService = new KeyStoreCreationService(); - /** - * Constructor for an environmental service. - * - * @param environment - - */ - public MqttOptionService(Environment environment) { - super(environment); - } + /** + * Constructor for an environmental service. + * + * @param environment - + */ + public MqttOptionService(Environment environment) { + super(environment); + } - /** - * Create default MQTT connect options using the given onboarding response. The MQTT options - * contain a socket factory which uses the personal certificate of the endpoint. - * - * @param onboardingResponse - - * @return - - */ - public MqttConnectOptions createMqttConnectOptions(OnboardingResponse onboardingResponse) { - MqttConnectOptions options = new MqttConnectOptions(); - CertificationType certificationType = - CertificationType.valueOf(onboardingResponse.getAuthentication().getType()); - options.setSocketFactory( - this.getSocketFactory( - onboardingResponse.getAuthentication().getCertificate(), - onboardingResponse.getAuthentication().getSecret(), - certificationType)); - options.setKeepAliveInterval(60); - options.setAutomaticReconnect(true); - options.setCleanSession(true); - return options; - } + /** + * Create default MQTT connect options using the given onboarding response. The MQTT options + * contain a socket factory which uses the personal certificate of the endpoint. + * + * @param onboardingResponse - + * @return - + */ + public MqttConnectOptions createMqttConnectOptions(OnboardingResponse onboardingResponse) { + var options = new MqttConnectOptions(); + var certificationType = + CertificationType.valueOf(onboardingResponse.getAuthentication().getType()); + options.setSocketFactory( + this.getSocketFactory( + onboardingResponse.getAuthentication().getCertificate(), + onboardingResponse.getAuthentication().getSecret(), + certificationType)); + options.setKeepAliveInterval(60); + options.setAutomaticReconnect(true); + options.setCleanSession(true); + return options; + } - /** - * Create default MQTT connect options using the given router device. The MQTT options contain a - * socket factory which uses the personal certificate of the endpoint. - * - * @param routerDevice - - * @return - - */ - public MqttConnectOptions createMqttConnectOptions(RouterDevice routerDevice) { - MqttConnectOptions options = new MqttConnectOptions(); - CertificationType certificationType = - CertificationType.valueOf(routerDevice.getAuthentication().getType()); - options.setSocketFactory( - this.getSocketFactory( - routerDevice.getAuthentication().getCertificate(), - routerDevice.getAuthentication().getSecret(), - certificationType)); - options.setKeepAliveInterval(60); - options.setAutomaticReconnect(true); - options.setCleanSession(true); - return options; - } + /** + * Create default MQTT connect options using the given router device. The MQTT options contain a + * socket factory which uses the personal certificate of the endpoint. + * + * @param routerDevice - + * @return - + */ + public MqttConnectOptions createMqttConnectOptions(RouterDevice routerDevice) { + var options = new MqttConnectOptions(); + var certificationType = + CertificationType.valueOf(routerDevice.getAuthentication().getType()); + options.setSocketFactory( + this.getSocketFactory( + routerDevice.getAuthentication().getCertificate(), + routerDevice.getAuthentication().getSecret(), + certificationType)); + options.setKeepAliveInterval(60); + options.setAutomaticReconnect(true); + options.setCleanSession(true); + return options; + } - /** - * Creating the socket factory for the MQTT options. - * - * @param certificate Certificate of the endpoint. - * @param password The password for the certificate. - * @param certificationType The type of certificate. - * @return - - */ - private SocketFactory getSocketFactory( - String certificate, String password, CertificationType certificationType) { - try { - KeyManagerFactory kmf = - KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); - if (certificationType == CertificationType.PEM) { - kmf.init( - this.keyStoreCreationService.createAndReturnKeystoreFromPEM(certificate, password), - Constants.DEFAULT_PASSWORD.toCharArray()); - } else { - if (certificationType == CertificationType.P12) { - kmf.init( - this.keyStoreCreationService.createAndReturnKeystoreFromP12(certificate, password), - password.toCharArray()); + /** + * Creating the socket factory for the MQTT options. + * + * @param certificate Certificate of the endpoint. + * @param password The password for the certificate. + * @param certificationType The type of certificate. + * @return - + */ + private SocketFactory getSocketFactory( + String certificate, String password, CertificationType certificationType) { + try { + var kmf = + KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + if (certificationType == CertificationType.PEM) { + kmf.init( + this.keyStoreCreationService.createAndReturnKeystoreFromPEM(certificate, password), + Constants.DEFAULT_PASSWORD.toCharArray()); + } else { + if (certificationType == CertificationType.P12) { + kmf.init( + this.keyStoreCreationService.createAndReturnKeystoreFromP12(certificate, password), + password.toCharArray()); + } + } + var context = SSLContext.getInstance(Constants.PROTOCOL); + context.init(kmf.getKeyManagers(), null, null); + return context.getSocketFactory(); + } catch (NoSuchAlgorithmException e) { + throw new CouldNotCreateMqttOptionException( + "No such algorithm, can not create MQTT options.", e); + } catch (UnrecoverableKeyException e) { + throw new CouldNotCreateMqttOptionException( + "Key in the keystore could not be restored, can not create MQTT options.", e); + } catch (KeyStoreException e) { + throw new CouldNotCreateMqttOptionException( + "Generic keystore error, can not create MQTT options.", e); + } catch (KeyManagementException e) { + throw new CouldNotCreateMqttOptionException( + "Generic key management error, can not create MQTT options.", e); } - } - SSLContext context = SSLContext.getInstance(Constants.PROTOCOL); - context.init(kmf.getKeyManagers(), null, null); - return context.getSocketFactory(); - } catch (NoSuchAlgorithmException e) { - throw new CouldNotCreateMqttOptionException( - "No such algorithm, can not create MQTT options.", e); - } catch (UnrecoverableKeyException e) { - throw new CouldNotCreateMqttOptionException( - "Key in the keystore could not be restored, can not create MQTT options.", e); - } catch (KeyStoreException e) { - throw new CouldNotCreateMqttOptionException( - "Generic keystore error, can not create MQTT options.", e); - } catch (KeyManagementException e) { - throw new CouldNotCreateMqttOptionException( - "Generic key management error, can not create MQTT options.", e); } - } } diff --git a/agrirouter-sdk-java-impl/pom.xml b/agrirouter-sdk-java-impl/pom.xml index 60e3fd1c..e5d3ea05 100644 --- a/agrirouter-sdk-java-impl/pom.xml +++ b/agrirouter-sdk-java-impl/pom.xml @@ -6,7 +6,7 @@ com.agrirouter.api agrirouter-sdk-java - 2.3.0 + 3.0.0 AGRIROUTER SDK JAVA - IMPL agrirouter-sdk-java-impl @@ -21,8 +21,8 @@ protobuf-java - javax.ws.rs - javax.ws.rs-api + jakarta.ws.rs + jakarta.ws.rs-api commons-codec @@ -48,10 +48,6 @@ org.glassfish.jersey.core jersey-client - - org.glassfish.jersey.inject - jersey-hk2 - org.eclipse.paho org.eclipse.paho.client.mqttv3 diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/ChunkContextIdService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/ChunkContextIdService.java index a8c5a907..aa6934a6 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/ChunkContextIdService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/ChunkContextIdService.java @@ -2,15 +2,17 @@ import java.util.UUID; -/** Service to provide a unique chunk context id. */ +/** + * Service to provide a unique chunk context id. + */ public class ChunkContextIdService { - /** - * Generate a unique id by using the internal UUID implementation. - * - * @return - - */ - public static String generateChunkContextId() { - return UUID.randomUUID().toString(); - } + /** + * Generate a unique id by using the internal UUID implementation. + * + * @return - + */ + public static String generateChunkContextId() { + return UUID.randomUUID().toString(); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/EnvironmentalService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/EnvironmentalService.java index 3b8734d8..2f7df6e8 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/EnvironmentalService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/EnvironmentalService.java @@ -3,13 +3,17 @@ import com.dke.data.agrirouter.api.env.Environment; import com.dke.data.agrirouter.api.service.HasLogger; -/** Internal implementation for an environmental service. */ +/** + * Internal implementation for an environmental service. + */ public abstract class EnvironmentalService implements HasLogger { - /** The current environment. */ - protected final Environment environment; + /** + * The current environment. + */ + protected final Environment environment; - protected EnvironmentalService(Environment environment) { - this.environment = environment; - } + protected EnvironmentalService(Environment environment) { + this.environment = environment; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/NonEnvironmentalService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/NonEnvironmentalService.java index a3e5b04f..f3a10ba6 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/NonEnvironmentalService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/NonEnvironmentalService.java @@ -2,5 +2,8 @@ import com.dke.data.agrirouter.api.service.HasLogger; -/** Internal implementation for an environmental service. */ -public abstract class NonEnvironmentalService implements HasLogger {} +/** + * Internal implementation for an environmental service. + */ +public abstract class NonEnvironmentalService implements HasLogger { +} diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/RequestFactory.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/RequestFactory.java index 5c0c1075..54400e98 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/RequestFactory.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/RequestFactory.java @@ -3,162 +3,160 @@ import com.dke.data.agrirouter.api.enums.CertificationType; import com.dke.data.agrirouter.api.env.Constants; import com.dke.data.agrirouter.api.env.Environment; -import com.dke.data.agrirouter.api.exception.CertificationTypeNotSupportedException; import com.dke.data.agrirouter.api.exception.CouldNotCreateDynamicKeyStoreException; import com.dke.data.agrirouter.impl.common.ssl.KeyStoreCreationService; -import java.security.KeyStore; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.Invocation; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.logging.LoggingFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -/** Factory to encapsulate the requests against the agrirouter */ -public final class RequestFactory { +import java.security.KeyStore; - private static final Logger LOGGER = LoggerFactory.getLogger(RequestFactory.class); +/** + * Factory to encapsulate the requests against the agrirouter + */ +public final class RequestFactory { - /** Hidden constructor. */ - private RequestFactory() { - // NOP - } + private static final Logger LOGGER = LoggerFactory.getLogger(RequestFactory.class); - /** - * Creating a request with SSL configuration using the PEM and KEY files from the agrirouter. - * - * @param url - - * @param certificate - - * @param password - - * @return Builder - - */ - public static Invocation.Builder securedRequest( - String url, String certificate, String password, CertificationType certificationType) { - ClientConfig clientConfig = new ClientConfig(); - KeyStore keyStore = createKeyStore(certificate, password, certificationType); - Client client = createClient(clientConfig, keyStore, password, certificationType); - if (Environment.httpRequestLoggingEnabled()) { - client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT, "INFO"); - } else { - LOGGER.debug( - "Request logging is currently disabled. If you want to enable it, please set '{}'.", - Environment.ENABLE_HTTP_REQUEST_LOGGING); + /** + * Hidden constructor. + */ + private RequestFactory() { + // NOP } - WebTarget target = client.target(url); - Invocation.Builder request = target.request(MediaType.APPLICATION_JSON_TYPE); - request.accept(MediaType.APPLICATION_JSON_TYPE); - return request; - } - private static Client createClient( - ClientConfig clientConfig, - KeyStore keyStore, - String password, - CertificationType certificationType) { - try { - switch (certificationType) { - case PEM: - return ClientBuilder.newBuilder() - .withConfig(clientConfig) - .keyStore(keyStore, Constants.DEFAULT_PASSWORD) - .build(); - case P12: - return ClientBuilder.newBuilder() - .withConfig(clientConfig) - .keyStore(keyStore, password) - .build(); - default: - throw new CertificationTypeNotSupportedException(certificationType); - } - } catch (Exception e) { - throw new CouldNotCreateDynamicKeyStoreException(e); + /** + * Creating a request with SSL configuration using the PEM and KEY files from the agrirouter. + * + * @param url - + * @param certificate - + * @param password - + * @return Builder - + */ + @SuppressWarnings("resource") + public static Invocation.Builder securedRequest( + String url, String certificate, String password, CertificationType certificationType) { + var clientConfig = new ClientConfig(); + var keyStore = createKeyStore(certificate, password, certificationType); + var client = createClient(clientConfig, keyStore, password, certificationType); + if (Environment.httpRequestLoggingEnabled()) { + client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT, "INFO"); + } else { + LOGGER.debug( + "Request logging is currently disabled. If you want to enable it, please set '{}'.", + Environment.ENABLE_HTTP_REQUEST_LOGGING); + } + var target = client.target(url); + var request = target.request(MediaType.APPLICATION_JSON_TYPE); + request.accept(MediaType.APPLICATION_JSON_TYPE); + return request; } - } - private static KeyStore createKeyStore( - String x509Certificate, String password, CertificationType certificationType) { - KeyStoreCreationService keyStoreCreationService = new KeyStoreCreationService(); - try { - switch (certificationType) { - case PEM: - return keyStoreCreationService.createAndReturnKeystoreFromPEM(x509Certificate, password); - case P12: - return keyStoreCreationService.createAndReturnKeystoreFromP12(x509Certificate, password); - default: - throw new CertificationTypeNotSupportedException(certificationType); - } - } catch (Exception e) { - throw new CouldNotCreateDynamicKeyStoreException(e); + private static Client createClient( + ClientConfig clientConfig, + KeyStore keyStore, + String password, + CertificationType certificationType) { + try { + return switch (certificationType) { + case PEM -> ClientBuilder.newBuilder() + .withConfig(clientConfig) + .keyStore(keyStore, Constants.DEFAULT_PASSWORD) + .build(); + case P12 -> ClientBuilder.newBuilder() + .withConfig(clientConfig) + .keyStore(keyStore, password) + .build(); + }; + } catch (Exception e) { + throw new CouldNotCreateDynamicKeyStoreException(e); + } } - } - /** - * Setting the 'reg_access_token' within the header. - * - * @param url - - * @param accessToken - - * @return Builder - - */ - public static Invocation.Builder bearerTokenRequest(String url, String accessToken) { - Client client = ClientBuilder.newClient(); - client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT, "INFO"); - WebTarget target = client.target(url); - Invocation.Builder request = target.request(MediaType.APPLICATION_JSON_TYPE); - request.accept(MediaType.APPLICATION_JSON_TYPE); - request.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + private static KeyStore createKeyStore( + String x509Certificate, String password, CertificationType certificationType) { + var keyStoreCreationService = new KeyStoreCreationService(); + try { + return switch (certificationType) { + case PEM -> keyStoreCreationService.createAndReturnKeystoreFromPEM(x509Certificate, password); + case P12 -> keyStoreCreationService.createAndReturnKeystoreFromP12(x509Certificate, password); + }; + } catch (Exception e) { + throw new CouldNotCreateDynamicKeyStoreException(e); + } + } - return request; - } + /** + * Setting the 'reg_access_token' within the header. + * + * @param url - + * @param accessToken - + * @return Builder - + */ + @SuppressWarnings("resource") + public static Invocation.Builder bearerTokenRequest(String url, String accessToken) { + var client = ClientBuilder.newClient(); + client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT, "INFO"); + var target = client.target(url); + var request = target.request(MediaType.APPLICATION_JSON_TYPE); + request.accept(MediaType.APPLICATION_JSON_TYPE); + request.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + return request; + } - /** - * Setting applicationID and Signature within the header. - * - * @param url - - * @param applicationId - - * @param signature - - * @return Builder - - */ - public static Invocation.Builder signedDeleteRequest( - String url, String applicationId, String signature) { - Client client = ClientBuilder.newClient(); - client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); - client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT, "INFO"); - WebTarget target = client.target(url); - Invocation.Builder request = target.request(MediaType.APPLICATION_JSON_TYPE); - request.accept(MediaType.APPLICATION_JSON_TYPE); - request.header(AgrirouterHttpHeader.APPLICATION_ID, applicationId); - request.header(AgrirouterHttpHeader.SIGNATURE, signature); + /** + * Setting applicationID and Signature within the header. + * + * @param url - + * @param applicationId - + * @param signature - + * @return Builder - + */ + @SuppressWarnings("resource") + public static Invocation.Builder signedDeleteRequest( + String url, String applicationId, String signature) { + var client = ClientBuilder.newClient(); + client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); + client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT, "INFO"); + var target = client.target(url); + var request = target.request(MediaType.APPLICATION_JSON_TYPE); + request.accept(MediaType.APPLICATION_JSON_TYPE); + request.header(AgrirouterHttpHeader.APPLICATION_ID, applicationId); + request.header(AgrirouterHttpHeader.SIGNATURE, signature); - return request; - } + return request; + } - /** - * Setting the 'reg_access_token' within the header. - * - * @param url - - * @param accessToken - - * @return Builder - - */ - public static Invocation.Builder bearerTokenRequest( - String url, String accessToken, String applicationId, String signature) { - Client client = ClientBuilder.newClient(); - client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT, "INFO"); - WebTarget target = client.target(url); - Invocation.Builder request = target.request(MediaType.APPLICATION_JSON_TYPE); - request.accept(MediaType.APPLICATION_JSON_TYPE); - request.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); - request.header(AgrirouterHttpHeader.APPLICATION_ID, applicationId); - request.header(AgrirouterHttpHeader.SIGNATURE, signature); - return request; - } + /** + * Setting the 'reg_access_token' within the header. + * + * @param url - + * @param accessToken - + * @return Builder - + */ + @SuppressWarnings("resource") + public static Invocation.Builder bearerTokenRequest( + String url, String accessToken, String applicationId, String signature) { + var client = ClientBuilder.newClient(); + client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT, "INFO"); + var target = client.target(url); + var request = target.request(MediaType.APPLICATION_JSON_TYPE); + request.accept(MediaType.APPLICATION_JSON_TYPE); + request.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + request.header(AgrirouterHttpHeader.APPLICATION_ID, applicationId); + request.header(AgrirouterHttpHeader.SIGNATURE, signature); + return request; + } - public static class AgrirouterHttpHeader { - public static final String APPLICATION_ID = "X-Agrirouter-ApplicationId"; - public static final String SIGNATURE = "X-Agrirouter-Signature"; - } + public static class AgrirouterHttpHeader { + public static final String APPLICATION_ID = "X-Agrirouter-ApplicationId"; + public static final String SIGNATURE = "X-Agrirouter-Signature"; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/SignatureService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/SignatureService.java index b931efd7..5249dc10 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/SignatureService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/SignatureService.java @@ -1,53 +1,54 @@ package com.dke.data.agrirouter.impl; -import static java.nio.charset.StandardCharsets.UTF_8; - import com.dke.data.agrirouter.api.exception.CouldNotCreateSignatureException; import com.dke.data.agrirouter.api.exception.CouldNotDecodeHexException; import com.dke.data.agrirouter.api.exception.CouldNotVerifySignatureException; import com.dke.data.agrirouter.api.exception.InvalidSignatureException; import com.dke.data.agrirouter.impl.common.signing.SecurityKeyCreationService; +import org.apache.commons.codec.DecoderException; +import org.apache.commons.codec.binary.Hex; + import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.Signature; import java.security.SignatureException; -import org.apache.commons.codec.DecoderException; -import org.apache.commons.codec.binary.Hex; + +import static java.nio.charset.StandardCharsets.UTF_8; public interface SignatureService { - String SIGNATURE_ALGORITHM = "SHA256withRSA"; + String SIGNATURE_ALGORITHM = "SHA256withRSA"; - default byte[] createSignature(String requestBody, String privateKey) { - try { - SecurityKeyCreationService securityKeyCreationService = new SecurityKeyCreationService(); - Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); - signature.initSign(securityKeyCreationService.createPrivateKey(privateKey)); - signature.update(requestBody.getBytes(UTF_8)); - return signature.sign(); - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) { - throw new CouldNotCreateSignatureException(e); + default byte[] createSignature(String requestBody, String privateKey) { + try { + var securityKeyCreationService = new SecurityKeyCreationService(); + var signature = Signature.getInstance(SIGNATURE_ALGORITHM); + signature.initSign(securityKeyCreationService.createPrivateKey(privateKey)); + signature.update(requestBody.getBytes(UTF_8)); + return signature.sign(); + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) { + throw new CouldNotCreateSignatureException(e); + } } - } - default void verifySignature(String requestBody, byte[] signedBytes, String publicKey) { - try { - SecurityKeyCreationService securityKeyCreationService = new SecurityKeyCreationService(); - Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); - signature.initVerify(securityKeyCreationService.createPublicKey(publicKey)); - signature.update(requestBody.getBytes(UTF_8)); - if (!signature.verify(signedBytes)) { - throw new InvalidSignatureException(); - } - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) { - throw new CouldNotVerifySignatureException(e); + default void verifySignature(String requestBody, byte[] signedBytes, String publicKey) { + try { + var securityKeyCreationService = new SecurityKeyCreationService(); + var signature = Signature.getInstance(SIGNATURE_ALGORITHM); + signature.initVerify(securityKeyCreationService.createPublicKey(publicKey)); + signature.update(requestBody.getBytes(UTF_8)); + if (!signature.verify(signedBytes)) { + throw new InvalidSignatureException(); + } + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) { + throw new CouldNotVerifySignatureException(e); + } } - } - default byte[] decodeHex(String encodedSignature) { - try { - return Hex.decodeHex(encodedSignature.toCharArray()); - } catch (DecoderException e) { - throw new CouldNotDecodeHexException(e); + default byte[] decodeHex(String encodedSignature) { + try { + return Hex.decodeHex(encodedSignature.toCharArray()); + } catch (DecoderException e) { + throw new CouldNotDecodeHexException(e); + } } - } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/MessageIdService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/MessageIdService.java index 067c6c22..b98c2376 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/MessageIdService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/MessageIdService.java @@ -2,15 +2,17 @@ import java.util.UUID; -/** Service to provide a unique application message id. */ +/** + * Service to provide a unique application message id. + */ public class MessageIdService { - /** - * Generate a unique message id by using the internal UUID implementation. - * - * @return - - */ - public static String generateMessageId() { - return UUID.randomUUID().toString(); - } + /** + * Generate a unique message id by using the internal UUID implementation. + * + * @return - + */ + public static String generateMessageId() { + return UUID.randomUUID().toString(); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/StateIdService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/StateIdService.java index 86304c31..0c7ba9ed 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/StateIdService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/StateIdService.java @@ -2,15 +2,17 @@ import java.util.UUID; -/** Service to provide a unique state id. */ +/** + * Service to provide a unique state id. + */ public class StateIdService { - /** - * Generate a unique state id by using the internal UUID implementation. - * - * @return - - */ - public static String generateState() { - return UUID.randomUUID().toString(); - } + /** + * Generate a unique state id by using the internal UUID implementation. + * + * @return - + */ + public static String generateState() { + return UUID.randomUUID().toString(); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/UtcTimeService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/UtcTimeService.java index 63c7225d..84e06c4f 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/UtcTimeService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/UtcTimeService.java @@ -1,66 +1,71 @@ package com.dke.data.agrirouter.impl.common; import com.dke.data.agrirouter.api.exception.CouldNotFindTimeZoneException; -import java.time.*; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; import java.util.Arrays; import java.util.Calendar; import java.util.Optional; import java.util.TimeZone; +@SuppressWarnings("unused") public class UtcTimeService { - public static final long ONE_DAY_AGO = 60 * 60 * 24; - public static final long TWO_DAYS_AGO = 60 * 60 * 24 * 2; - public static final long THREE_DAYS_AGO = 60 * 60 * 24 * 3; - public static final long FOUR_DAYS_AGO = 60 * 60 * 24 * 4; - public static final long FIVE_DAYS_AGO = 60 * 60 * 24 * 5; - public static final long SIX_DAYS_AGO = 60 * 60 * 24 * 6; + public static final long ONE_DAY_AGO = 60 * 60 * 24; + public static final long TWO_DAYS_AGO = 60 * 60 * 24 * 2; + public static final long THREE_DAYS_AGO = 60 * 60 * 24 * 3; + public static final long FOUR_DAYS_AGO = 60 * 60 * 24 * 4; + public static final long FIVE_DAYS_AGO = 60 * 60 * 24 * 5; + public static final long SIX_DAYS_AGO = 60 * 60 * 24 * 6; - public static final long ONE_WEEKS_AGO = 60 * 60 * 24 * 7; - public static final long TWO_WEEKS_AGO = 60 * 60 * 24 * 14; - public static final long THREE_WEEKS_AGO = 60 * 60 * 24 * 21; - public static final long FOUR_WEEKS_AGO = 60 * 60 * 24 * 28; + public static final long ONE_WEEKS_AGO = 60 * 60 * 24 * 7; + public static final long TWO_WEEKS_AGO = 60 * 60 * 24 * 14; + public static final long THREE_WEEKS_AGO = 60 * 60 * 24 * 21; + public static final long FOUR_WEEKS_AGO = 60 * 60 * 24 * 28; - public static OffsetDateTime inThePast(long seconds) { - return Instant.now().atOffset(ZoneOffset.UTC).minusSeconds(seconds); - } + public static OffsetDateTime inThePast(long seconds) { + return Instant.now().atOffset(ZoneOffset.UTC).minusSeconds(seconds); + } - public static OffsetDateTime inTheFuture(long seconds) { - return Instant.now().atOffset(ZoneOffset.UTC).plusSeconds(seconds); - } + public static OffsetDateTime inTheFuture(long seconds) { + return Instant.now().atOffset(ZoneOffset.UTC).plusSeconds(seconds); + } - public static OffsetDateTime now() { - return Instant.now().atOffset(ZoneOffset.UTC); - } + public static OffsetDateTime now() { + return Instant.now().atOffset(ZoneOffset.UTC); + } - public static OffsetDateTime min() { - return Instant.MIN.atOffset(ZoneOffset.UTC); - } + public static OffsetDateTime min() { + return Instant.MIN.atOffset(ZoneOffset.UTC); + } - public static OffsetDateTime max() { - return Instant.MAX.atOffset(ZoneOffset.UTC); - } + public static OffsetDateTime max() { + return Instant.MAX.atOffset(ZoneOffset.UTC); + } - public static String offset() { - Optional currentTimeZone = timeZone(); - if (currentTimeZone.isPresent()) { - ZonedDateTime zdt = Instant.now().atZone(ZoneId.of(currentTimeZone.get())); - return zdt.getOffset().getId().replaceAll("Z", "+00:00"); - } else { - throw new CouldNotFindTimeZoneException(); + public static String offset() { + var currentTimeZone = timeZone(); + if (currentTimeZone.isPresent()) { + var zdt = Instant.now().atZone(ZoneId.of(currentTimeZone.get())); + return zdt.getOffset().getId().replaceAll("Z", "+00:00"); + } else { + throw new CouldNotFindTimeZoneException(); + } } - } - private static Optional timeZone() { - Calendar calendar = Calendar.getInstance(); - long zoneOffset = calendar.get(Calendar.ZONE_OFFSET); - String[] ids = TimeZone.getAvailableIDs(); - return Arrays.stream(ids) - .filter( - (id) -> { - TimeZone tz = TimeZone.getTimeZone(id); - return tz.getRawOffset() == zoneOffset; - }) - .findFirst(); - } + private static Optional timeZone() { + var calendar = Calendar.getInstance(); + long zoneOffset = calendar.get(Calendar.ZONE_OFFSET); + var ids = TimeZone.getAvailableIDs(); + return Arrays.stream(ids) + .filter( + (id) -> { + var tz = TimeZone.getTimeZone(id); + return tz.getRawOffset() == zoneOffset; + }) + .findFirst(); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/signing/SecurityKeyCreationService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/signing/SecurityKeyCreationService.java index 9fc49723..571863fe 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/signing/SecurityKeyCreationService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/signing/SecurityKeyCreationService.java @@ -3,6 +3,7 @@ import com.dke.data.agrirouter.api.exception.CouldNotCreatePrivateKeyException; import com.dke.data.agrirouter.api.exception.CouldNotCreatePublicKeyException; import com.dke.data.agrirouter.api.service.HasLogger; + import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; @@ -14,53 +15,53 @@ public class SecurityKeyCreationService implements HasLogger { - public PrivateKey createPrivateKey(String privateKey) { - this.logMethodBegin(privateKey); + public PrivateKey createPrivateKey(String privateKey) { + this.logMethodBegin(privateKey); + + PrivateKey result; + try { + this.getNativeLogger().trace("Replacing comments within file."); + var pkcs8Pem = privateKey.replace("-----BEGIN PRIVATE KEY-----", ""); + pkcs8Pem = pkcs8Pem.replace("-----END PRIVATE KEY-----", ""); + pkcs8Pem = pkcs8Pem.replaceAll("\\s+", ""); - PrivateKey result; - try { - this.getNativeLogger().trace("Replacing comments within file."); - String pkcs8Pem = privateKey.replace("-----BEGIN PRIVATE KEY-----", ""); - pkcs8Pem = pkcs8Pem.replace("-----END PRIVATE KEY-----", ""); - pkcs8Pem = pkcs8Pem.replaceAll("\\s+", ""); + this.getNativeLogger().trace("Decode base 64 values."); + var pkcs8EncodedBytes = Base64.getDecoder().decode(pkcs8Pem); - this.getNativeLogger().trace("Decode base 64 values."); - byte[] pkcs8EncodedBytes = Base64.getDecoder().decode(pkcs8Pem); + this.getNativeLogger().trace("Generate private key."); + var keySpec = new PKCS8EncodedKeySpec(pkcs8EncodedBytes); + var keyFactory = KeyFactory.getInstance("RSA"); + result = keyFactory.generatePrivate(keySpec); + } catch (IllegalArgumentException | InvalidKeySpecException | NoSuchAlgorithmException e) { + throw new CouldNotCreatePrivateKeyException(e); + } - this.getNativeLogger().trace("Generate private key."); - PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8EncodedBytes); - KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - result = keyFactory.generatePrivate(keySpec); - } catch (IllegalArgumentException | InvalidKeySpecException | NoSuchAlgorithmException e) { - throw new CouldNotCreatePrivateKeyException(e); + this.logMethodEnd(result); + return result; } - this.logMethodEnd(result); - return result; - } + public PublicKey createPublicKey(String publicKey) { + this.logMethodBegin(publicKey); - public PublicKey createPublicKey(String publicKey) { - this.logMethodBegin(publicKey); + PublicKey result; + try { + this.getNativeLogger().trace("Replacing comments within file."); + var pkcs8Pem = publicKey.replace("-----BEGIN PUBLIC KEY-----", ""); + pkcs8Pem = pkcs8Pem.replace("-----END PUBLIC KEY-----", ""); + pkcs8Pem = pkcs8Pem.replaceAll("\\s+", ""); - PublicKey result; - try { - this.getNativeLogger().trace("Replacing comments within file."); - String pkcs8Pem = publicKey.replace("-----BEGIN PUBLIC KEY-----", ""); - pkcs8Pem = pkcs8Pem.replace("-----END PUBLIC KEY-----", ""); - pkcs8Pem = pkcs8Pem.replaceAll("\\s+", ""); + this.getNativeLogger().trace("Decode base 64 values."); + var pkcs8EncodedBytes = Base64.getDecoder().decode(pkcs8Pem); - this.getNativeLogger().trace("Decode base 64 values."); - byte[] pkcs8EncodedBytes = Base64.getDecoder().decode(pkcs8Pem); + this.getNativeLogger().trace("Generate public key."); + var keySpec = new X509EncodedKeySpec(pkcs8EncodedBytes); + var keyFactory = KeyFactory.getInstance("RSA"); + result = keyFactory.generatePublic(keySpec); + } catch (IllegalArgumentException | InvalidKeySpecException | NoSuchAlgorithmException e) { + throw new CouldNotCreatePublicKeyException(e); + } - this.getNativeLogger().trace("Generate public key."); - X509EncodedKeySpec keySpec = new X509EncodedKeySpec(pkcs8EncodedBytes); - KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - result = keyFactory.generatePublic(keySpec); - } catch (IllegalArgumentException | InvalidKeySpecException | NoSuchAlgorithmException e) { - throw new CouldNotCreatePublicKeyException(e); + this.logMethodEnd(result); + return result; } - - this.logMethodEnd(result); - return result; - } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationService.java index a9461869..81c9898f 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationService.java @@ -3,6 +3,15 @@ import com.dke.data.agrirouter.api.env.Constants; import com.dke.data.agrirouter.api.exception.CouldNotCreateDynamicKeyStoreException; import com.dke.data.agrirouter.api.service.HasLogger; + +import javax.crypto.EncryptedPrivateKeyInfo; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.net.SocketFactory; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -13,228 +22,220 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; -import java.security.spec.PKCS8EncodedKeySpec; import java.util.*; -import javax.crypto.EncryptedPrivateKeyInfo; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.PBEKeySpec; -import javax.net.SocketFactory; -import javax.net.ssl.*; public class KeyStoreCreationService implements HasLogger { - private static final String BEGIN_DELIMITER_PRIVATE_KEY = "-----BEGIN ENCRYPTED PRIVATE KEY-----"; - private static final String END_DELIMITER_PRIVATE_KEY = "-----END ENCRYPTED PRIVATE KEY-----"; + private static final String BEGIN_DELIMITER_PRIVATE_KEY = "-----BEGIN ENCRYPTED PRIVATE KEY-----"; + private static final String END_DELIMITER_PRIVATE_KEY = "-----END ENCRYPTED PRIVATE KEY-----"; + + private static final String BEGIN_DELIMITER_CERTIFICATE = "-----BEGIN CERTIFICATE-----"; + private static final String END_DELIMITER_CERTIFICATE = "-----END CERTIFICATE-----"; + + public SocketFactory getSocketFactory( + List rootCertificates, String certificate, String password) throws Exception { + this.logMethodBegin(rootCertificates, certificate, password); - private static final String BEGIN_DELIMITER_CERTIFICATE = "-----BEGIN CERTIFICATE-----"; - private static final String END_DELIMITER_CERTIFICATE = "-----END CERTIFICATE-----"; + this.getNativeLogger().trace("Create trust managers."); + var trustManagers = this.createTrustManagers(rootCertificates); - public SocketFactory getSocketFactory( - List rootCertificates, String certificate, String password) throws Exception { - this.logMethodBegin(rootCertificates, certificate, password); + this.getNativeLogger().trace("Init key manager factory."); + var kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(this.createAndReturnKeystoreFromPEM(certificate, password), getDefaultPassword()); - this.getNativeLogger().trace("Create trust managers."); - TrustManager[] trustManagers = this.createTrustManagers(rootCertificates); + this.getNativeLogger().trace("Generate SSL context."); + var context = SSLContext.getInstance("TLSv1.2"); - this.getNativeLogger().trace("Init key manager factory."); - KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); - kmf.init(this.createAndReturnKeystoreFromPEM(certificate, password), getDefaultPassword()); + this.getNativeLogger().trace("Init SSL context."); + context.init(kmf.getKeyManagers(), trustManagers, null); - this.getNativeLogger().trace("Generate SSL context."); - SSLContext context = SSLContext.getInstance("TLSv1.2"); + var socketFactory = context.getSocketFactory(); + this.logMethodEnd(socketFactory); + return socketFactory; + } - this.getNativeLogger().trace("Initi SSL context."); - context.init(kmf.getKeyManagers(), trustManagers, null); + public KeyStore createAndReturnKeystoreFromP12(String certificate, String password) { + this.logMethodBegin(certificate, password); - SSLSocketFactory socketFactory = context.getSocketFactory(); - this.logMethodEnd(socketFactory); - return socketFactory; - } + KeyStore keyStore; + try { + this.getNativeLogger().trace("Create PKCS12 instance for keystore."); + keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - public KeyStore createAndReturnKeystoreFromP12(String certificate, String password) { - this.logMethodBegin(certificate, password); + this.getNativeLogger().trace("Create input stream for certificate."); + InputStream sslInputStream = + new ByteArrayInputStream(Base64.getDecoder().decode(certificate.getBytes())); - KeyStore keyStore; - try { - this.getNativeLogger().trace("Create PKCS12 instance for keystore."); - keyStore = KeyStore.getInstance("PKCS12"); + this.getNativeLogger().trace("Load input stream into keystore."); + keyStore.load(sslInputStream, password.toCharArray()); - this.getNativeLogger().trace("Create input stream for certificate."); - InputStream sslInputStream = - new ByteArrayInputStream(Base64.getDecoder().decode(certificate.getBytes())); + } catch (Exception e) { + throw new CouldNotCreateDynamicKeyStoreException(e); + } - this.getNativeLogger().trace("Load input stream into keystore."); - keyStore.load(sslInputStream, password.toCharArray()); + this.logMethodEnd(keyStore); + return keyStore; + } - } catch (Exception e) { - throw new CouldNotCreateDynamicKeyStoreException(e); + public TrustManager[] createTrustManagers(List certificates) { + this.logMethodBegin(certificates); + + List trustManagers = new ArrayList<>(); + certificates.forEach( + certificate -> { + try { + this.getNativeLogger().trace("Create certificate for '{}'.", certificate); + var cert = + createCertificate( + extractFromOriginal( + certificate, BEGIN_DELIMITER_CERTIFICATE, END_DELIMITER_CERTIFICATE)); + + this.getNativeLogger().trace("Create default keystore type."); + var caKs = KeyStore.getInstance(KeyStore.getDefaultType()); + caKs.load(null, null); + caKs.setCertificateEntry("ca-certificate", cert); + + this.getNativeLogger().trace("Create trust manager factory."); + var tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + + this.getNativeLogger().trace("Init trust manager factory."); + tmf.init(caKs); + + this.getNativeLogger().trace("Add all trust managers from factory."); + trustManagers.addAll(Arrays.asList(tmf.getTrustManagers())); + } catch (Exception e) { + throw new CouldNotCreateDynamicKeyStoreException(e); + } + }); + + this.logMethodEnd(trustManagers); + return trustManagers.toArray(new TrustManager[0]); } - this.logMethodEnd(keyStore); - return keyStore; - } - - public TrustManager[] createTrustManagers(List certificates) { - this.logMethodBegin(certificates); - - List trustManagers = new ArrayList<>(); - certificates.forEach( - certificate -> { - try { - this.getNativeLogger().trace("Create certificate for '{}'.", certificate); - X509Certificate cert = - createCertificate( - extractFromOriginal( - certificate, BEGIN_DELIMITER_CERTIFICATE, END_DELIMITER_CERTIFICATE)); - - this.getNativeLogger().trace("Create default keystore type."); - KeyStore caKs = KeyStore.getInstance(KeyStore.getDefaultType()); - caKs.load(null, null); - caKs.setCertificateEntry("ca-certificate", cert); - - this.getNativeLogger().trace("Create trust manager factory."); - TrustManagerFactory tmf = - TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - - this.getNativeLogger().trace("Init trust manager factory."); - tmf.init(caKs); - - this.getNativeLogger().trace("Add all trust managers from factory."); - trustManagers.addAll(Arrays.asList(tmf.getTrustManagers())); - } catch (Exception e) { + public KeyStore createAndReturnKeystoreFromPEM(String certificateAndPrivateKey, String password) { + this.logMethodBegin(certificateAndPrivateKey, password); + + KeyStore keyStore; + try { + this.getNativeLogger().trace("Create certificate."); + var cert = + createCertificate( + extractFromOriginal( + certificateAndPrivateKey, + BEGIN_DELIMITER_CERTIFICATE, + END_DELIMITER_CERTIFICATE)); + + this.getNativeLogger().trace("Create private key."); + var key = + createPrivateKey( + extractFromOriginal( + certificateAndPrivateKey, BEGIN_DELIMITER_PRIVATE_KEY, END_DELIMITER_PRIVATE_KEY), + password); + + this.getNativeLogger().trace("Create key store."); + keyStore = createKeyStore(cert, key); + } catch (Exception e) { throw new CouldNotCreateDynamicKeyStoreException(e); - } - }); - - this.logMethodEnd(trustManagers); - return trustManagers.toArray(new TrustManager[0]); - } - - public KeyStore createAndReturnKeystoreFromPEM(String certificateAndPrivateKey, String password) { - this.logMethodBegin(certificateAndPrivateKey, password); - - KeyStore keyStore; - try { - this.getNativeLogger().trace("Create certificate."); - X509Certificate cert = - createCertificate( - extractFromOriginal( - certificateAndPrivateKey, - BEGIN_DELIMITER_CERTIFICATE, - END_DELIMITER_CERTIFICATE)); - - this.getNativeLogger().trace("Create private key."); - PrivateKey key = - createPrivateKey( - extractFromOriginal( - certificateAndPrivateKey, BEGIN_DELIMITER_PRIVATE_KEY, END_DELIMITER_PRIVATE_KEY), - password); - - this.getNativeLogger().trace("Create key store."); - keyStore = createKeyStore(cert, key); - } catch (Exception e) { - throw new CouldNotCreateDynamicKeyStoreException(e); - } + } - this.logMethodEnd(keyStore); - return keyStore; - } + this.logMethodEnd(keyStore); + return keyStore; + } - String createKeyStoreInClasspath(X509Certificate cert, PrivateKey key) - throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { - this.logMethodBegin(cert, key); + String createKeyStoreInClasspath(X509Certificate cert, PrivateKey key) + throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { + this.logMethodBegin(cert, key); - this.getNativeLogger().trace("Create keystore."); - KeyStore keystore = createKeyStore(cert, key); + this.getNativeLogger().trace("Create keystore."); + var keystore = createKeyStore(cert, key); - this.getNativeLogger().trace("Create random keystore name."); - String tmpKeystoreName = UUID.randomUUID().toString(); + this.getNativeLogger().trace("Create random keystore name."); + var tmpKeystoreName = UUID.randomUUID().toString(); - this.getNativeLogger().trace("Store keystore within temporary folder."); - keystore.store( - Files.newOutputStream(Paths.get("./target/test-classes/" + tmpKeystoreName + ".jks")), - Constants.DEFAULT_PASSWORD.toCharArray()); + this.getNativeLogger().trace("Store keystore within temporary folder."); + keystore.store( + Files.newOutputStream(Paths.get("./target/test-classes/" + tmpKeystoreName + ".jks")), + Constants.DEFAULT_PASSWORD.toCharArray()); - this.logMethodEnd(tmpKeystoreName); - return tmpKeystoreName; - } + this.logMethodEnd(tmpKeystoreName); + return tmpKeystoreName; + } - private String extractFromOriginal(String original, String beginDelimiter, String endDelimiter) { - this.logMethodBegin(original, beginDelimiter, endDelimiter); + private String extractFromOriginal(String original, String beginDelimiter, String endDelimiter) { + this.logMethodBegin(original, beginDelimiter, endDelimiter); - this.getNativeLogger().trace("Split by delimiter."); - String[] tokens = original.split(beginDelimiter); + this.getNativeLogger().trace("Split by delimiter."); + var tokens = original.split(beginDelimiter); - this.getNativeLogger().trace("Fetch second token as certificate from delimiter."); - tokens = tokens[1].split(endDelimiter); + this.getNativeLogger().trace("Fetch second token as certificate from delimiter."); + tokens = tokens[1].split(endDelimiter); - this.getNativeLogger().trace("Replace all line breaks."); - String certificate = tokens[0].replaceAll("\\s", ""); + this.getNativeLogger().trace("Replace all line breaks."); + var certificate = tokens[0].replaceAll("\\s", ""); - this.logMethodEnd(certificate); - return certificate; - } + this.logMethodEnd(certificate); + return certificate; + } - PrivateKey createPrivateKey(String privateKey, String password) throws Exception { - this.logMethodBegin(privateKey, password); + PrivateKey createPrivateKey(String privateKey, String password) throws Exception { + this.logMethodBegin(privateKey, password); - this.getNativeLogger().trace("Create PBE key spec."); - PBEKeySpec pbeSpec = new PBEKeySpec(password.toCharArray()); + this.getNativeLogger().trace("Create PBE key spec."); + var pbeSpec = new PBEKeySpec(password.toCharArray()); - this.getNativeLogger().trace("Create PK info using the private key."); - EncryptedPrivateKeyInfo pkinfo = - new EncryptedPrivateKeyInfo(Base64.getDecoder().decode(privateKey)); + this.getNativeLogger().trace("Create PK info using the private key."); + var pkinfo = new EncryptedPrivateKeyInfo(Base64.getDecoder().decode(privateKey)); - this.getNativeLogger().trace("Create secret factory for PK info."); - SecretKeyFactory skf = SecretKeyFactory.getInstance(pkinfo.getAlgName()); + this.getNativeLogger().trace("Create secret factory for PK info."); + var skf = SecretKeyFactory.getInstance(pkinfo.getAlgName()); - this.getNativeLogger().trace("Generate secret."); - Key secret = skf.generateSecret(pbeSpec); + this.getNativeLogger().trace("Generate secret."); + Key secret = skf.generateSecret(pbeSpec); - this.getNativeLogger().trace("Generate encoded key spec."); - PKCS8EncodedKeySpec keySpec = pkinfo.getKeySpec(secret); + this.getNativeLogger().trace("Generate encoded key spec."); + var keySpec = pkinfo.getKeySpec(secret); - this.getNativeLogger().trace("Create RSA key factory."); - KeyFactory kf = KeyFactory.getInstance("RSA"); + this.getNativeLogger().trace("Create RSA key factory."); + var kf = KeyFactory.getInstance("RSA"); - PrivateKey privateKeyWithSpec = kf.generatePrivate(keySpec); - this.logMethodEnd(privateKey); - return privateKeyWithSpec; - } + var privateKeyWithSpec = kf.generatePrivate(keySpec); + this.logMethodEnd(privateKey); + return privateKeyWithSpec; + } - X509Certificate createCertificate(String x509Certificate) throws Exception { - this.logMethodBegin(x509Certificate); + X509Certificate createCertificate(String x509Certificate) throws Exception { + this.logMethodBegin(x509Certificate); - this.getNativeLogger().trace("Decode certificate."); - byte[] certBytes = Base64.getDecoder().decode(x509Certificate); + this.getNativeLogger().trace("Decode certificate."); + var certBytes = Base64.getDecoder().decode(x509Certificate); - this.getNativeLogger().trace("Create 'X.509' certification factory."); - CertificateFactory factory = CertificateFactory.getInstance("X.509"); + this.getNativeLogger().trace("Create 'X.509' certification factory."); + var factory = CertificateFactory.getInstance("X.509"); - X509Certificate certificate = - (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(certBytes)); - this.logMethodEnd(certificate); - return certificate; - } + var certificate = + (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(certBytes)); + this.logMethodEnd(certificate); + return certificate; + } - private KeyStore createKeyStore(X509Certificate x509Certificate, PrivateKey key) - throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { - this.logMethodBegin(x509Certificate, key); + private KeyStore createKeyStore(X509Certificate x509Certificate, PrivateKey key) + throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { + this.logMethodBegin(x509Certificate, key); - this.getNativeLogger().trace("Create JKS keystore."); - KeyStore keystore = KeyStore.getInstance("JKS"); - keystore.load(null); - keystore.setCertificateEntry(Constants.CERT_ALIAS, x509Certificate); + this.getNativeLogger().trace("Create JKS keystore."); + var keystore = KeyStore.getInstance("JKS"); + keystore.load(null); + keystore.setCertificateEntry(Constants.CERT_ALIAS, x509Certificate); - this.getNativeLogger().trace("Add certificate to the key store."); - keystore.setKeyEntry( - Constants.KEY_ALIAS, key, getDefaultPassword(), new Certificate[] {x509Certificate}); + this.getNativeLogger().trace("Add certificate to the key store."); + keystore.setKeyEntry( + Constants.KEY_ALIAS, key, getDefaultPassword(), new Certificate[]{x509Certificate}); - this.logMethodEnd(keystore); - return keystore; - } + this.logMethodEnd(keystore); + return keystore; + } - private static char[] getDefaultPassword() { - return Constants.DEFAULT_PASSWORD.toCharArray(); - } + private static char[] getDefaultPassword() { + return Constants.DEFAULT_PASSWORD.toCharArray(); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/gson/MessageTypeAdapter.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/gson/MessageTypeAdapter.java index f3e4c59d..8ad187cd 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/gson/MessageTypeAdapter.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/gson/MessageTypeAdapter.java @@ -4,21 +4,22 @@ import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import java.io.IOException; import org.apache.commons.lang3.NotImplementedException; +import java.io.IOException; + public class MessageTypeAdapter extends TypeAdapter { - @Override - public void write(JsonWriter jsonWriter, Message message) throws IOException { - jsonWriter.beginArray(); - jsonWriter.value(message.getMessage()); - jsonWriter.value(Long.parseLong(message.getTimestamp())); - jsonWriter.endArray(); - } + @Override + public void write(JsonWriter jsonWriter, Message message) throws IOException { + jsonWriter.beginArray(); + jsonWriter.value(message.getMessage()); + jsonWriter.value(Long.parseLong(message.getTimestamp())); + jsonWriter.endArray(); + } - @Override - public Message read(JsonReader jsonReader) throws IOException { - throw new NotImplementedException("Not yet supported."); - } + @Override + public Message read(JsonReader jsonReader) throws IOException { + throw new NotImplementedException("Not yet supported."); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageBodyCreator.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageBodyCreator.java index 05f0d86f..858cbcaf 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageBodyCreator.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageBodyCreator.java @@ -6,36 +6,37 @@ import com.dke.data.agrirouter.impl.common.UtcTimeService; import com.dke.data.agrirouter.impl.gson.MessageTypeAdapter; import com.google.gson.GsonBuilder; + import java.util.ArrayList; import java.util.List; import java.util.Objects; public interface MessageBodyCreator { - default String createMessageBody(SendMessageParameters parameters) { - parameters.validate(); - GsonBuilder gsonBuilder = new GsonBuilder(); - gsonBuilder.registerTypeAdapter(Message.class, new MessageTypeAdapter()); - return gsonBuilder.create().toJson(this.createSendMessageRequest(parameters)); - } + default String createMessageBody(SendMessageParameters parameters) { + parameters.validate(); + var gsonBuilder = new GsonBuilder(); + gsonBuilder.registerTypeAdapter(Message.class, new MessageTypeAdapter()); + return gsonBuilder.create().toJson(this.createSendMessageRequest(parameters)); + } - default SendMessageRequest createSendMessageRequest(SendMessageParameters parameters) { - parameters.validate(); - SendMessageRequest sendMessageRequest = new SendMessageRequest(); - sendMessageRequest.setSensorAlternateId( - Objects.requireNonNull(parameters.getOnboardingResponse()).getSensorAlternateId()); - sendMessageRequest.setCapabilityAlternateId( - parameters.getOnboardingResponse().getCapabilityAlternateId()); - List messages = new ArrayList<>(); - Objects.requireNonNull(parameters.getEncodedMessages()) - .forEach( - messageToSend -> { - Message message = new Message(); - message.setMessage(messageToSend); - message.setTimestamp("" + UtcTimeService.now().toEpochSecond()); - messages.add(message); - }); - sendMessageRequest.setMessages(messages); - return sendMessageRequest; - } + default SendMessageRequest createSendMessageRequest(SendMessageParameters parameters) { + parameters.validate(); + var sendMessageRequest = new SendMessageRequest(); + sendMessageRequest.setSensorAlternateId( + Objects.requireNonNull(parameters.getOnboardingResponse()).getSensorAlternateId()); + sendMessageRequest.setCapabilityAlternateId( + parameters.getOnboardingResponse().getCapabilityAlternateId()); + List messages = new ArrayList<>(); + Objects.requireNonNull(parameters.getEncodedMessages()) + .forEach( + messageToSend -> { + var message = new Message(); + message.setMessage(messageToSend); + message.setTimestamp("" + UtcTimeService.now().toEpochSecond()); + messages.add(message); + }); + sendMessageRequest.setMessages(messages); + return sendMessageRequest; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageEncoder.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageEncoder.java index c7fad4f3..ed034713 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageEncoder.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageEncoder.java @@ -16,443 +16,444 @@ import com.dke.data.agrirouter.api.service.parameters.*; import com.dke.data.agrirouter.api.util.TimestampUtil; import com.dke.data.agrirouter.impl.common.MessageIdService; + import java.util.Objects; public interface MessageEncoder extends HasLogger { - /** - * Encode a message to delete messages. - * - * @param parameters - - * @return - - */ - default EncodedMessage encode(DeleteMessageParameters parameters) { - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - - final String applicationMessageID = - parameters.getApplicationMessageId() == null - ? MessageIdService.generateMessageId() - : parameters.getApplicationMessageId(); - messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); - - final String teamsetContextId = - parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); - messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); - - setSequenceNumber( - messageHeaderParameters, - parameters.getSequenceNumber(), - parameters.getOnboardingResponse()); - messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); - - messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_FEED_DELETE); - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - - FeedRequests.MessageDelete.Builder messageContent = FeedRequests.MessageDelete.newBuilder(); - if (parameters.getMessageIds() != null) { - messageContent.addAllMessageIds(parameters.getMessageIds()); + /** + * Encode a message to delete messages. + * + * @param parameters - + * @return - + */ + default EncodedMessage encode(DeleteMessageParameters parameters) { + var messageHeaderParameters = new MessageHeaderParameters(); + + final var applicationMessageID = + parameters.getApplicationMessageId() == null + ? MessageIdService.generateMessageId() + : parameters.getApplicationMessageId(); + messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); + + final var teamsetContextId = + parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); + messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); + + setSequenceNumber( + messageHeaderParameters, + parameters.getSequenceNumber(), + parameters.getOnboardingResponse()); + messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); + + messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_FEED_DELETE); + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + + var messageContent = FeedRequests.MessageDelete.newBuilder(); + if (parameters.getMessageIds() != null) { + messageContent.addAllMessageIds(parameters.getMessageIds()); + } + if (parameters.getSenderIds() != null) { + messageContent.addAllSenders(parameters.getSenderIds()); + } + if (null != parameters.getSentFromInSeconds() || null != parameters.getSentToInSeconds()) { + var validityPeriod = FeedRequests.ValidityPeriod.newBuilder(); + if (null != parameters.getSentFromInSeconds()) { + validityPeriod.setSentFrom(new TimestampUtil().seconds(parameters.getSentFromInSeconds())); + } + if (null != parameters.getSentToInSeconds()) { + validityPeriod.setSentTo(new TimestampUtil().seconds(parameters.getSentToInSeconds())); + } + messageContent.setValidityPeriod(validityPeriod); + } + + var payloadParameters = new PayloadParameters(); + payloadParameters.setTypeUrl(SystemMessageType.DKE_FEED_DELETE.getTypeUrl()); + payloadParameters.setValue(messageContent.build().toByteString()); + + var encodedMessage = + this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); + return new EncodedMessage(applicationMessageID, encodedMessage); + } + + /** + * Encode a message to list endpoints. + * + * @param parameters - + * @return - + */ + default EncodedMessage encode(ListEndpointsParameters parameters) { + var messageHeaderParameters = new MessageHeaderParameters(); + + final var applicationMessageID = + parameters.getApplicationMessageId() == null + ? MessageIdService.generateMessageId() + : parameters.getApplicationMessageId(); + messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); + messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); + + final var teamsetContextId = + parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); + messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); + + setSequenceNumber( + messageHeaderParameters, + parameters.getSequenceNumber(), + parameters.getOnboardingResponse()); + if (parameters.getUnfilteredList()) { + messageHeaderParameters.setTechnicalMessageType( + SystemMessageType.DKE_LIST_ENDPOINTS_UNFILTERED); + } else { + messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_LIST_ENDPOINTS); + } + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + + var messageContent = Endpoints.ListEndpointsQuery.newBuilder(); + messageContent.setDirection(Objects.requireNonNull(parameters.getDirection())); + messageContent.setTechnicalMessageType( + Objects.requireNonNull(parameters.getTechnicalMessageType()).getKey()); + + var payloadParameters = new PayloadParameters(); + payloadParameters.setTypeUrl(SystemMessageType.DKE_LIST_ENDPOINTS.getTypeUrl()); + payloadParameters.setValue(messageContent.build().toByteString()); + + var encodedMessage = + this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); + + return new EncodedMessage(applicationMessageID, encodedMessage); + } + + /** + * Encode a message to send a message confirmation. + * + * @param parameters - + * @return - + */ + default EncodedMessage encode(MessageConfirmationParameters parameters) { + var messageHeaderParameters = new MessageHeaderParameters(); + + final var applicationMessageID = + parameters.getApplicationMessageId() == null + ? MessageIdService.generateMessageId() + : parameters.getApplicationMessageId(); + + messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); + messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); + + final var teamsetContextId = + parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); + messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); + + setSequenceNumber( + messageHeaderParameters, + parameters.getSequenceNumber(), + parameters.getOnboardingResponse()); + messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_FEED_CONFIRM); + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + + var messageContent = FeedRequests.MessageConfirm.newBuilder(); + messageContent.addAllMessageIds(Objects.requireNonNull(parameters.getMessageIds())); + + var payloadParameters = new PayloadParameters(); + payloadParameters.setTypeUrl(SystemMessageType.DKE_FEED_CONFIRM.getTypeUrl()); + payloadParameters.setValue(messageContent.build().toByteString()); + + var encodedMessage = + this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); + return new EncodedMessage(applicationMessageID, encodedMessage); } - if (parameters.getSenderIds() != null) { - messageContent.addAllSenders(parameters.getSenderIds()); + + /** + * Encode a message to set capabilities. + * + * @param parameters - + * @return - + */ + default EncodedMessage encode(SetCapabilitiesParameters parameters) { + var messageHeaderParameters = new MessageHeaderParameters(); + + final var applicationMessageID = + parameters.getApplicationMessageId() == null + ? MessageIdService.generateMessageId() + : parameters.getApplicationMessageId(); + + messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); + messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); + + final var teamsetContextId = + parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); + messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); + + setSequenceNumber( + messageHeaderParameters, + parameters.getSequenceNumber(), + parameters.getOnboardingResponse()); + messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_CAPABILITIES); + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + + var builder = + Capabilities.CapabilitySpecification.newBuilder(); + builder.setAppCertificationId(Objects.requireNonNull(parameters.getApplicationId())); + builder.setAppCertificationVersionId( + Objects.requireNonNull(parameters.getCertificationVersionId())); + builder.setEnablePushNotifications(parameters.getEnablePushNotifications()); + + parameters.getCapabilitiesParameters(); + Objects.requireNonNull(parameters.getCapabilitiesParameters()) + .forEach( + p -> { + var capabilityBuilder = + Capabilities.CapabilitySpecification.Capability.newBuilder(); + capabilityBuilder.setTechnicalMessageType( + Objects.requireNonNull(p.getTechnicalMessageType()).getKey()); + capabilityBuilder.setDirection(Objects.requireNonNull(p.getDirection())); + var capability = + capabilityBuilder.build(); + builder.addCapabilities(capability); + }); + + var payloadParameters = new PayloadParameters(); + payloadParameters.setTypeUrl(SystemMessageType.DKE_CAPABILITIES.getTypeUrl()); + payloadParameters.setValue(builder.build().toByteString()); + + var encodedMessage = + this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); + return new EncodedMessage(applicationMessageID, encodedMessage); } - if (null != parameters.getSentFromInSeconds() || null != parameters.getSentToInSeconds()) { - FeedRequests.ValidityPeriod.Builder validityPeriod = FeedRequests.ValidityPeriod.newBuilder(); - if (null != parameters.getSentFromInSeconds()) { - validityPeriod.setSentFrom(new TimestampUtil().seconds(parameters.getSentFromInSeconds())); - } - if (null != parameters.getSentToInSeconds()) { - validityPeriod.setSentTo(new TimestampUtil().seconds(parameters.getSentToInSeconds())); - } - messageContent.setValidityPeriod(validityPeriod); + + static void setSequenceNumber( + MessageHeaderParameters messageHeaderParameters, + long sequenceNumber, + OnboardingResponse onboardingResponse) { + if (sequenceNumber == 0 && onboardingResponse == null) { + throw new IllegalArgumentException( + "Either sequence number or onboarding response must be set."); + } + + messageHeaderParameters.setApplicationMessageSeqNo( + sequenceNumber != 0 + ? sequenceNumber + : SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); } - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setTypeUrl(SystemMessageType.DKE_FEED_DELETE.getTypeUrl()); - payloadParameters.setValue(messageContent.build().toByteString()); - - String encodedMessage = - this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); - return new EncodedMessage(applicationMessageID, encodedMessage); - } - - /** - * Encode a message to list endpoints. - * - * @param parameters - - * @return - - */ - default EncodedMessage encode(ListEndpointsParameters parameters) { - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - - final String applicationMessageID = - parameters.getApplicationMessageId() == null - ? MessageIdService.generateMessageId() - : parameters.getApplicationMessageId(); - messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); - messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); - - final String teamsetContextId = - parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); - messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); - - setSequenceNumber( - messageHeaderParameters, - parameters.getSequenceNumber(), - parameters.getOnboardingResponse()); - if (parameters.getUnfilteredList()) { - messageHeaderParameters.setTechnicalMessageType( - SystemMessageType.DKE_LIST_ENDPOINTS_UNFILTERED); - } else { - messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_LIST_ENDPOINTS); + /** + * Encode a message to set a subscription. + * + * @param parameters - + * @return - + */ + @Deprecated + default EncodedMessage encodeMessage(SetSubscriptionParameters parameters) { + return encode(parameters); } - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - - Endpoints.ListEndpointsQuery.Builder messageContent = Endpoints.ListEndpointsQuery.newBuilder(); - messageContent.setDirection(Objects.requireNonNull(parameters.getDirection())); - messageContent.setTechnicalMessageType( - Objects.requireNonNull(parameters.getTechnicalMessageType()).getKey()); - - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setTypeUrl(SystemMessageType.DKE_LIST_ENDPOINTS.getTypeUrl()); - payloadParameters.setValue(messageContent.build().toByteString()); - - String encodedMessage = - this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); - - return new EncodedMessage(applicationMessageID, encodedMessage); - } - - /** - * Encode a message to send a message confirmation. - * - * @param parameters - - * @return - - */ - default EncodedMessage encode(MessageConfirmationParameters parameters) { - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - - final String applicationMessageID = - parameters.getApplicationMessageId() == null - ? MessageIdService.generateMessageId() - : parameters.getApplicationMessageId(); - - messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); - messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); - - final String teamsetContextId = - parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); - messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); - - setSequenceNumber( - messageHeaderParameters, - parameters.getSequenceNumber(), - parameters.getOnboardingResponse()); - messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_FEED_CONFIRM); - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - - FeedRequests.MessageConfirm.Builder messageContent = FeedRequests.MessageConfirm.newBuilder(); - messageContent.addAllMessageIds(Objects.requireNonNull(parameters.getMessageIds())); - - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setTypeUrl(SystemMessageType.DKE_FEED_CONFIRM.getTypeUrl()); - payloadParameters.setValue(messageContent.build().toByteString()); - - String encodedMessage = - this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); - return new EncodedMessage(applicationMessageID, encodedMessage); - } - - /** - * Encode a message to set capabilities. - * - * @param parameters - - * @return - - */ - default EncodedMessage encode(SetCapabilitiesParameters parameters) { - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - - final String applicationMessageID = - parameters.getApplicationMessageId() == null - ? MessageIdService.generateMessageId() - : parameters.getApplicationMessageId(); - - messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); - messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); - - final String teamsetContextId = - parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); - messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); - - setSequenceNumber( - messageHeaderParameters, - parameters.getSequenceNumber(), - parameters.getOnboardingResponse()); - messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_CAPABILITIES); - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - - Capabilities.CapabilitySpecification.Builder builder = - Capabilities.CapabilitySpecification.newBuilder(); - builder.setAppCertificationId(Objects.requireNonNull(parameters.getApplicationId())); - builder.setAppCertificationVersionId( - Objects.requireNonNull(parameters.getCertificationVersionId())); - builder.setEnablePushNotifications(parameters.getEnablePushNotifications()); - - parameters.getCapabilitiesParameters(); - Objects.requireNonNull(parameters.getCapabilitiesParameters()) - .forEach( - p -> { - Capabilities.CapabilitySpecification.Capability.Builder capabilityBuilder = - Capabilities.CapabilitySpecification.Capability.newBuilder(); - capabilityBuilder.setTechnicalMessageType( - Objects.requireNonNull(p.getTechnicalMessageType()).getKey()); - capabilityBuilder.setDirection(Objects.requireNonNull(p.getDirection())); - Capabilities.CapabilitySpecification.Capability capability = - capabilityBuilder.build(); - builder.addCapabilities(capability); - }); - - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setTypeUrl(SystemMessageType.DKE_CAPABILITIES.getTypeUrl()); - payloadParameters.setValue(builder.build().toByteString()); - - String encodedMessage = - this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); - return new EncodedMessage(applicationMessageID, encodedMessage); - } - - static void setSequenceNumber( - MessageHeaderParameters messageHeaderParameters, - long sequenceNumber, - OnboardingResponse onboardingResponse) { - if (sequenceNumber == 0 && onboardingResponse == null) { - throw new IllegalArgumentException( - "Either sequence number or onboarding response must be set."); + + /** + * Encode a message to set a subscription. + * + * @param parameters - + * @return - + */ + default EncodedMessage encode(SetSubscriptionParameters parameters) { + assert parameters.getOnboardingResponse() != null; + var messageHeaderParameters = new MessageHeaderParameters(); + + final var applicationMessageID = + parameters.getApplicationMessageId() == null + ? MessageIdService.generateMessageId() + : parameters.getApplicationMessageId(); + + messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); + messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); + + final var teamsetContextId = + parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); + messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); + + setSequenceNumber( + messageHeaderParameters, + parameters.getSequenceNumber(), + parameters.getOnboardingResponse()); + messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_SUBSCRIPTION); + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + + var messageContent = + SubscriptionOuterClass.Subscription.newBuilder(); + parameters + .getSubscriptions() + .forEach( + parameter -> { + var + technicalMessageType = + SubscriptionOuterClass.Subscription.MessageTypeSubscriptionItem.newBuilder(); + technicalMessageType.setTechnicalMessageType( + Objects.requireNonNull(parameter.getTechnicalMessageType()).getKey()); + technicalMessageType.addAllDdis(parameter.getDdis()); + technicalMessageType.setPosition(parameter.getPosition()); + messageContent.addTechnicalMessageTypes(technicalMessageType); + }); + + var payloadParameters = new PayloadParameters(); + payloadParameters.setTypeUrl(SystemMessageType.DKE_SUBSCRIPTION.getTypeUrl()); + payloadParameters.setValue(messageContent.build().toByteString()); + + var encodedMessage = + this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); + return new EncodedMessage(applicationMessageID, encodedMessage); } - messageHeaderParameters.setApplicationMessageSeqNo( - sequenceNumber != 0 - ? sequenceNumber - : SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); - } - - /** - * Encode a message to set a subscription. - * - * @param parameters - - * @return - - */ - @Deprecated - default EncodedMessage encodeMessage(SetSubscriptionParameters parameters) { - return encode(parameters); - } - - /** - * Encode a message to set a subscription. - * - * @param parameters - - * @return - - */ - default EncodedMessage encode(SetSubscriptionParameters parameters) { - assert parameters.getOnboardingResponse() != null; - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - - final String applicationMessageID = - parameters.getApplicationMessageId() == null - ? MessageIdService.generateMessageId() - : parameters.getApplicationMessageId(); - - messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); - messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); - - final String teamsetContextId = - parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); - messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); - - setSequenceNumber( - messageHeaderParameters, - parameters.getSequenceNumber(), - parameters.getOnboardingResponse()); - messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_SUBSCRIPTION); - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - - SubscriptionOuterClass.Subscription.Builder messageContent = - SubscriptionOuterClass.Subscription.newBuilder(); - parameters - .getSubscriptions() - .forEach( - parameter -> { - SubscriptionOuterClass.Subscription.MessageTypeSubscriptionItem.Builder - technicalMessageType = - SubscriptionOuterClass.Subscription.MessageTypeSubscriptionItem.newBuilder(); - technicalMessageType.setTechnicalMessageType( - Objects.requireNonNull(parameter.getTechnicalMessageType()).getKey()); - technicalMessageType.addAllDdis(parameter.getDdis()); - technicalMessageType.setPosition(parameter.getPosition()); - messageContent.addTechnicalMessageTypes(technicalMessageType); - }); - - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setTypeUrl(SystemMessageType.DKE_SUBSCRIPTION.getTypeUrl()); - payloadParameters.setValue(messageContent.build().toByteString()); - - String encodedMessage = - this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); - return new EncodedMessage(applicationMessageID, encodedMessage); - } - - /** - * Encode a message to query messages. - * - * @param parameters - - * @return - - */ - default EncodedMessage encode( - TechnicalMessageType technicalMessageType, MessageQueryParameters parameters) { - this.logMethodBegin(parameters); - this.getNativeLogger().trace("Build message header parameters."); - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - - final String applicationMessageID = - parameters.getApplicationMessageId() == null - ? MessageIdService.generateMessageId() - : parameters.getApplicationMessageId(); - - messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); - messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); - - final String teamsetContextId = - parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); - messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); - - setSequenceNumber( - messageHeaderParameters, - parameters.getSequenceNumber(), - parameters.getOnboardingResponse()); - messageHeaderParameters.setTechnicalMessageType(technicalMessageType); - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - - this.getNativeLogger().trace("Build message query parameters."); - FeedRequests.MessageQuery.Builder messageContent = FeedRequests.MessageQuery.newBuilder(); - if (parameters.getMessageIds() != null) { - messageContent.addAllMessageIds(parameters.getMessageIds()); + /** + * Encode a message to query messages. + * + * @param parameters - + * @return - + */ + default EncodedMessage encode( + TechnicalMessageType technicalMessageType, MessageQueryParameters parameters) { + this.logMethodBegin(parameters); + this.getNativeLogger().trace("Build message header parameters."); + var messageHeaderParameters = new MessageHeaderParameters(); + + final var applicationMessageID = + parameters.getApplicationMessageId() == null + ? MessageIdService.generateMessageId() + : parameters.getApplicationMessageId(); + + messageHeaderParameters.setApplicationMessageId(Objects.requireNonNull(applicationMessageID)); + messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); + + final var teamsetContextId = + parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); + messageHeaderParameters.setTeamSetContextId(Objects.requireNonNull(teamsetContextId)); + + setSequenceNumber( + messageHeaderParameters, + parameters.getSequenceNumber(), + parameters.getOnboardingResponse()); + messageHeaderParameters.setTechnicalMessageType(technicalMessageType); + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + + this.getNativeLogger().trace("Build message query parameters."); + var messageContent = FeedRequests.MessageQuery.newBuilder(); + if (parameters.getMessageIds() != null) { + messageContent.addAllMessageIds(parameters.getMessageIds()); + } + if (parameters.getSenderIds() != null) { + messageContent.addAllSenders(parameters.getSenderIds()); + } + if (null != parameters.getSentFromInSeconds() || null != parameters.getSentToInSeconds()) { + var validityPeriod = FeedRequests.ValidityPeriod.newBuilder(); + if (null != parameters.getSentFromInSeconds()) { + validityPeriod.setSentFrom(new TimestampUtil().seconds(parameters.getSentFromInSeconds())); + } + if (null != parameters.getSentToInSeconds()) { + validityPeriod.setSentTo(new TimestampUtil().seconds(parameters.getSentToInSeconds())); + } + messageContent.setValidityPeriod(validityPeriod); + } + + this.getNativeLogger().trace("Build message payload parameters."); + var payloadParameters = new PayloadParameters(); + payloadParameters.setTypeUrl(technicalMessageType.getTypeUrl()); + payloadParameters.setValue(messageContent.build().toByteString()); + + this.getNativeLogger().trace("Encode message."); + var encodedMessage = + this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); + + this.logMethodEnd(encodedMessage); + return new EncodedMessage(applicationMessageID, encodedMessage); } - if (parameters.getSenderIds() != null) { - messageContent.addAllSenders(parameters.getSenderIds()); + + /** + * Encode message for cloud onboarding of virtual CUs. + * + * @param parameters - + * @return - + */ + default EncodedMessage encode(CloudOnboardingParameters parameters) { + final var applicationMessageID = + parameters.getApplicationMessageId() == null + ? MessageIdService.generateMessageId() + : parameters.getApplicationMessageId(); + + final var teamsetContextId = + parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); + + var messageHeaderParameters = new MessageHeaderParameters(); + messageHeaderParameters.setApplicationMessageId(applicationMessageID); + messageHeaderParameters.setTeamSetContextId(teamsetContextId); + + setSequenceNumber( + messageHeaderParameters, + parameters.getSequenceNumber(), + parameters.getOnboardingResponse()); + messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); + messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_CLOUD_ONBOARD_ENDPOINTS); + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + + var messageContent = + CloudVirtualizedAppRegistration.OnboardingRequest.newBuilder(); + Objects.requireNonNull(parameters.getEndpointDetails()) + .forEach( + p -> { + var + builder = + CloudVirtualizedAppRegistration.OnboardingRequest.EndpointRegistrationDetails + .newBuilder(); + builder.setId(Objects.requireNonNull(p.getEndpointId())); + builder.setName(Objects.requireNonNull(p.getEndpointName())); + messageContent.addOnboardingRequests(builder.build()); + }); + + var payloadParameters = new PayloadParameters(); + payloadParameters.setTypeUrl(SystemMessageType.DKE_CLOUD_ONBOARD_ENDPOINTS.getTypeUrl()); + payloadParameters.setValue(messageContent.build().toByteString()); + + var encodedMessage = + this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); + return new EncodedMessage(applicationMessageID, encodedMessage); } - if (null != parameters.getSentFromInSeconds() || null != parameters.getSentToInSeconds()) { - FeedRequests.ValidityPeriod.Builder validityPeriod = FeedRequests.ValidityPeriod.newBuilder(); - if (null != parameters.getSentFromInSeconds()) { - validityPeriod.setSentFrom(new TimestampUtil().seconds(parameters.getSentFromInSeconds())); - } - if (null != parameters.getSentToInSeconds()) { - validityPeriod.setSentTo(new TimestampUtil().seconds(parameters.getSentToInSeconds())); - } - messageContent.setValidityPeriod(validityPeriod); + + /** + * Encode cloud offboarding message. + * + * @param parameters - + * @return - + */ + default EncodedMessage encode(CloudOffboardingParameters parameters) { + final var applicationMessageID = + parameters.getApplicationMessageId() == null + ? MessageIdService.generateMessageId() + : parameters.getApplicationMessageId(); + + var messageContent = + CloudVirtualizedAppRegistration.OffboardingRequest.newBuilder(); + messageContent.addAllEndpoints(Objects.requireNonNull(parameters.getEndpointIds())); + + var messageHeaderParameters = new MessageHeaderParameters(); + messageHeaderParameters.setApplicationMessageId(applicationMessageID); + messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_CLOUD_OFFBOARD_ENDPOINTS); + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); + + setSequenceNumber( + messageHeaderParameters, + parameters.getSequenceNumber(), + parameters.getOnboardingResponse()); + var payloadParameters = new PayloadParameters(); + payloadParameters.setTypeUrl(SystemMessageType.DKE_CLOUD_OFFBOARD_ENDPOINTS.getTypeUrl()); + + payloadParameters.setValue(messageContent.build().toByteString()); + + var encodedMessage = + this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); + return new EncodedMessage(applicationMessageID, encodedMessage); } - this.getNativeLogger().trace("Build message payload parameters."); - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setTypeUrl(technicalMessageType.getTypeUrl()); - payloadParameters.setValue(messageContent.build().toByteString()); - - this.getNativeLogger().trace("Encode message."); - String encodedMessage = - this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); - - this.logMethodEnd(encodedMessage); - return new EncodedMessage(applicationMessageID, encodedMessage); - } - - /** - * Encode message for cloud onboarding of virtual CUs. - * - * @param parameters - - * @return - - */ - default EncodedMessage encode(CloudOnboardingParameters parameters) { - final String applicationMessageID = - parameters.getApplicationMessageId() == null - ? MessageIdService.generateMessageId() - : parameters.getApplicationMessageId(); - - final String teamsetContextId = - parameters.getTeamsetContextId() == null ? "" : parameters.getTeamsetContextId(); - - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - messageHeaderParameters.setApplicationMessageId(applicationMessageID); - messageHeaderParameters.setTeamSetContextId(teamsetContextId); - - setSequenceNumber( - messageHeaderParameters, - parameters.getSequenceNumber(), - parameters.getOnboardingResponse()); - messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); - messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_CLOUD_ONBOARD_ENDPOINTS); - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - - CloudVirtualizedAppRegistration.OnboardingRequest.Builder messageContent = - CloudVirtualizedAppRegistration.OnboardingRequest.newBuilder(); - Objects.requireNonNull(parameters.getEndpointDetails()) - .forEach( - p -> { - CloudVirtualizedAppRegistration.OnboardingRequest.EndpointRegistrationDetails.Builder - builder = - CloudVirtualizedAppRegistration.OnboardingRequest.EndpointRegistrationDetails - .newBuilder(); - builder.setId(Objects.requireNonNull(p.getEndpointId())); - builder.setName(Objects.requireNonNull(p.getEndpointName())); - messageContent.addOnboardingRequests(builder.build()); - }); - - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setTypeUrl(SystemMessageType.DKE_CLOUD_ONBOARD_ENDPOINTS.getTypeUrl()); - payloadParameters.setValue(messageContent.build().toByteString()); - - String encodedMessage = - this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); - return new EncodedMessage(applicationMessageID, encodedMessage); - } - - /** - * Encode cloud offboarding message. - * - * @param parameters - - * @return - - */ - default EncodedMessage encode(CloudOffboardingParameters parameters) { - final String applicationMessageID = - parameters.getApplicationMessageId() == null - ? MessageIdService.generateMessageId() - : parameters.getApplicationMessageId(); - - CloudVirtualizedAppRegistration.OffboardingRequest.Builder messageContent = - CloudVirtualizedAppRegistration.OffboardingRequest.newBuilder(); - messageContent.addAllEndpoints(Objects.requireNonNull(parameters.getEndpointIds())); - - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - messageHeaderParameters.setApplicationMessageId(applicationMessageID); - messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_CLOUD_OFFBOARD_ENDPOINTS); - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - messageHeaderParameters.setMetadata(MessageOuterClass.Metadata.newBuilder().build()); - - setSequenceNumber( - messageHeaderParameters, - parameters.getSequenceNumber(), - parameters.getOnboardingResponse()); - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setTypeUrl(SystemMessageType.DKE_CLOUD_OFFBOARD_ENDPOINTS.getTypeUrl()); - - payloadParameters.setValue(messageContent.build().toByteString()); - - String encodedMessage = - this.getEncodeMessageService().encode(messageHeaderParameters, payloadParameters); - return new EncodedMessage(applicationMessageID, encodedMessage); - } - - /** - * Get the service to encode messages. - * - * @return - - */ - EncodeMessageService getEncodeMessageService(); + /** + * Get the service to encode messages. + * + * @return - + */ + EncodeMessageService getEncodeMessageService(); } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MqttService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MqttService.java index dc577b3e..1a4bb7f7 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MqttService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MqttService.java @@ -2,16 +2,18 @@ import org.eclipse.paho.client.mqttv3.IMqttClient; -/** Base class which holds the MQTT client with the connection provided by the provider. */ +/** + * Base class which holds the MQTT client with the connection provided by the provider. + */ public class MqttService { - private final IMqttClient mqttClient; + private final IMqttClient mqttClient; - public MqttService(IMqttClient mqttClient) { - this.mqttClient = mqttClient; - } + public MqttService(IMqttClient mqttClient) { + this.mqttClient = mqttClient; + } - protected IMqttClient getMqttClient() { - return mqttClient; - } + protected IMqttClient getMqttClient() { + return mqttClient; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/SequenceNumberService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/SequenceNumberService.java index cfc8f974..27919aed 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/SequenceNumberService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/SequenceNumberService.java @@ -1,6 +1,7 @@ package com.dke.data.agrirouter.impl.messaging; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; + import java.util.concurrent.ConcurrentHashMap; /** @@ -10,22 +11,22 @@ */ public class SequenceNumberService { - private static final ConcurrentHashMap sequenceNumbersForEndpoints = - new ConcurrentHashMap<>(); + private static final ConcurrentHashMap sequenceNumbersForEndpoints = + new ConcurrentHashMap<>(); - /** - * Generate the sequence number for the onboarding response. - * - * @param onboardingResponse - - * @return 1 if this was the first call, 1+n for the n-th call. - */ - public static synchronized long generateSequenceNumberForEndpoint( - OnboardingResponse onboardingResponse) { - sequenceNumbersForEndpoints.putIfAbsent(onboardingResponse.getSensorAlternateId(), 1L); - Long currentSequenceNumber = - sequenceNumbersForEndpoints.get(onboardingResponse.getSensorAlternateId()); - sequenceNumbersForEndpoints.put( - onboardingResponse.getSensorAlternateId(), currentSequenceNumber + 1); - return currentSequenceNumber; - } + /** + * Generate the sequence number for the onboarding response. + * + * @param onboardingResponse - + * @return 1 if this was the first call, 1+n for the n-th call. + */ + public static synchronized long generateSequenceNumberForEndpoint( + OnboardingResponse onboardingResponse) { + sequenceNumbersForEndpoints.putIfAbsent(onboardingResponse.getSensorAlternateId(), 1L); + var currentSequenceNumber = + sequenceNumbersForEndpoints.get(onboardingResponse.getSensorAlternateId()); + sequenceNumbersForEndpoints.put( + onboardingResponse.getSensorAlternateId(), currentSequenceNumber + 1); + return currentSequenceNumber; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodeMessageServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodeMessageServiceImpl.java index a23265f5..74e6b166 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodeMessageServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodeMessageServiceImpl.java @@ -8,71 +8,74 @@ import com.google.protobuf.Any; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; +import org.apache.commons.lang3.StringUtils; + import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Base64; -import org.apache.commons.lang3.StringUtils; -/** Internal service implementation. */ +/** + * Internal service implementation. + */ public class DecodeMessageServiceImpl extends NonEnvironmentalService - implements DecodeMessageService { + implements DecodeMessageService { - @Override - public DecodeMessageResponse decode(String encodedResponse) { - this.logMethodBegin(encodedResponse); + @Override + public DecodeMessageResponse decode(String encodedResponse) { + this.logMethodBegin(encodedResponse); - if (StringUtils.isBlank(encodedResponse)) { - throw new IllegalArgumentException("Please provide a valid encoded response."); - } - try { + if (StringUtils.isBlank(encodedResponse)) { + throw new IllegalArgumentException("Please provide a valid encoded response."); + } + try { - this.getNativeLogger().trace("Decoding byte array."); - byte[] decodedBytes = Base64.getDecoder().decode(encodedResponse); - ByteArrayInputStream inputStream = new ByteArrayInputStream(decodedBytes); + this.getNativeLogger().trace("Decoding byte array."); + var decodedBytes = Base64.getDecoder().decode(encodedResponse); + var inputStream = new ByteArrayInputStream(decodedBytes); - this.getNativeLogger().trace("Parse response envelope."); - agrirouter.response.Response.ResponseEnvelope responseEnvelope = - agrirouter.response.Response.ResponseEnvelope.parseDelimitedFrom(inputStream); + this.getNativeLogger().trace("Parse response envelope."); + var responseEnvelope = + agrirouter.response.Response.ResponseEnvelope.parseDelimitedFrom(inputStream); - this.getNativeLogger().trace("Parse response payload wrapper."); - agrirouter.response.Response.ResponsePayloadWrapper responsePayloadWrapper = - agrirouter.response.Response.ResponsePayloadWrapper.parseDelimitedFrom(inputStream); - DecodeMessageResponse decodeMessageResponse = new DecodeMessageResponse(); - decodeMessageResponse.setResponseEnvelope(responseEnvelope); - decodeMessageResponse.setResponsePayloadWrapper(responsePayloadWrapper); + this.getNativeLogger().trace("Parse response payload wrapper."); + var responsePayloadWrapper = + agrirouter.response.Response.ResponsePayloadWrapper.parseDelimitedFrom(inputStream); + var decodeMessageResponse = new DecodeMessageResponse(); + decodeMessageResponse.setResponseEnvelope(responseEnvelope); + decodeMessageResponse.setResponsePayloadWrapper(responsePayloadWrapper); - this.logMethodEnd(decodeMessageResponse); - return decodeMessageResponse; - } catch (IOException e) { - throw new CouldNotDecodeMessageException(e); + this.logMethodEnd(decodeMessageResponse); + return decodeMessageResponse; + } catch (IOException e) { + throw new CouldNotDecodeMessageException(e); + } } - } - @Override - public MessageOuterClass.Message decode(ByteString message) { - try { - this.logMethodBegin(message); + @Override + public MessageOuterClass.Message decode(ByteString message) { + try { + this.logMethodBegin(message); - this.getNativeLogger().trace("Decoding byte string."); - MessageOuterClass.Message decodedMessage = MessageOuterClass.Message.parseFrom(message); + this.getNativeLogger().trace("Decoding byte string."); + var decodedMessage = MessageOuterClass.Message.parseFrom(message); - this.logMethodEnd(decodedMessage); - return decodedMessage; - } catch (InvalidProtocolBufferException e) { - throw new CouldNotDecodeMessageException(e); + this.logMethodEnd(decodedMessage); + return decodedMessage; + } catch (InvalidProtocolBufferException e) { + throw new CouldNotDecodeMessageException(e); + } } - } - @Override - public MessageOuterClass.Messages decode(Any any) { - try { - this.logMethodBegin(any); - MessageOuterClass.Messages messages = - any.unpack(agrirouter.commons.MessageOuterClass.Messages.class); - this.logMethodEnd(); - return messages; - } catch (InvalidProtocolBufferException e) { - throw new CouldNotDecodeMessageException(e); + @Override + public MessageOuterClass.Messages decode(Any any) { + try { + this.logMethodBegin(any); + var messages = + any.unpack(agrirouter.commons.MessageOuterClass.Messages.class); + this.logMethodEnd(); + return messages; + } catch (InvalidProtocolBufferException e) { + throw new CouldNotDecodeMessageException(e); + } } - } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodePushNotificationServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodePushNotificationServiceImpl.java index 6e0b1a1c..6895d411 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodePushNotificationServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodePushNotificationServiceImpl.java @@ -2,7 +2,6 @@ import agrirouter.feed.push.notification.PushNotificationOuterClass; import agrirouter.response.Response; -import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; import com.dke.data.agrirouter.api.exception.CouldNotDecodePushNotificationException; import com.dke.data.agrirouter.api.service.messaging.encoding.DecodePushNotificationService; import com.dke.data.agrirouter.impl.NonEnvironmentalService; @@ -10,36 +9,36 @@ import org.apache.commons.lang3.StringUtils; public class DecodePushNotificationServiceImpl extends NonEnvironmentalService - implements DecodePushNotificationService { + implements DecodePushNotificationService { - private final DecodeMessageServiceImpl decodeMessageService; + private final DecodeMessageServiceImpl decodeMessageService; - public DecodePushNotificationServiceImpl() { - this.decodeMessageService = new DecodeMessageServiceImpl(); - } + public DecodePushNotificationServiceImpl() { + this.decodeMessageService = new DecodeMessageServiceImpl(); + } - @Override - public PushNotificationOuterClass.PushNotification decode(String encodedResponse) { - this.logMethodBegin(encodedResponse); + @Override + public PushNotificationOuterClass.PushNotification decode(String encodedResponse) { + this.logMethodBegin(encodedResponse); - if (StringUtils.isBlank(encodedResponse)) { - throw new IllegalArgumentException("Please provide a valid encoded response."); - } - try { - DecodeMessageResponse decodedMessagesResponse = - this.decodeMessageService.decode(encodedResponse); - if (decodedMessagesResponse.getResponseEnvelope().getType() - == Response.ResponseEnvelope.ResponseBodyType.PUSH_NOTIFICATION) { - return decodedMessagesResponse - .getResponsePayloadWrapper() - .getDetails() - .unpack(PushNotificationOuterClass.PushNotification.class); - } else { - throw new CouldNotDecodePushNotificationException( - "This was not a push notification, please use common message decoding to decode the message itself."); - } - } catch (InvalidProtocolBufferException e) { - throw new CouldNotDecodePushNotificationException(e); + if (StringUtils.isBlank(encodedResponse)) { + throw new IllegalArgumentException("Please provide a valid encoded response."); + } + try { + var decodedMessagesResponse = + this.decodeMessageService.decode(encodedResponse); + if (decodedMessagesResponse.getResponseEnvelope().getType() + == Response.ResponseEnvelope.ResponseBodyType.PUSH_NOTIFICATION) { + return decodedMessagesResponse + .getResponsePayloadWrapper() + .getDetails() + .unpack(PushNotificationOuterClass.PushNotification.class); + } else { + throw new CouldNotDecodePushNotificationException( + "This was not a push notification, please use common message decoding to decode the message itself."); + } + } catch (InvalidProtocolBufferException e) { + throw new CouldNotDecodePushNotificationException(e); + } } - } } 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 d52e18ff..7fb36229 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 @@ -1,7 +1,5 @@ package com.dke.data.agrirouter.impl.messaging.encoding; -import static com.dke.data.agrirouter.api.service.parameters.PayloadParametersKt.MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT; - import agrirouter.commons.Chunk; import agrirouter.request.Request; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; @@ -17,223 +15,228 @@ import com.dke.data.agrirouter.impl.messaging.SequenceNumberService; import com.google.protobuf.Any; import com.google.protobuf.ByteString; +import org.apache.commons.lang3.StringUtils; + import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; -import org.apache.commons.lang3.StringUtils; -/** Internal service implementation. */ +import static com.dke.data.agrirouter.api.service.parameters.PayloadParametersKt.MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT; + +/** + * Internal service implementation. + */ @SuppressWarnings("ConstantConditions") public class EncodeMessageServiceImpl extends NonEnvironmentalService - implements EncodeMessageService { - - /** - * Encode a message. In this case chunking will be done by the application and not by the SDK. - * - * @param messageHeaderParameters - - * @param payloadParameters - - * @return Single message, encoded by the SDK. - */ - public String encode( - MessageHeaderParameters messageHeaderParameters, PayloadParameters payloadParameters) { - logMethodBegin(messageHeaderParameters, payloadParameters); - - if (null == messageHeaderParameters || null == payloadParameters) { - throw new IllegalArgumentException("Parameters cannot be NULL"); + implements EncodeMessageService { + + /** + * Encode a message. In this case chunking will be done by the application and not by the SDK. + * + * @param messageHeaderParameters - + * @param payloadParameters - + * @return Single message, encoded by the SDK. + */ + public String encode( + MessageHeaderParameters messageHeaderParameters, PayloadParameters payloadParameters) { + logMethodBegin(messageHeaderParameters, payloadParameters); + + if (null == messageHeaderParameters || null == payloadParameters) { + throw new IllegalArgumentException("Parameters cannot be NULL"); + } + messageHeaderParameters.validate(); + payloadParameters.validate(); + + try (var streamedMessage = new ByteArrayOutputStream()) { + + getNativeLogger().trace("Encode header."); + header(messageHeaderParameters).writeDelimitedTo(streamedMessage); + + getNativeLogger().trace("Encode payload."); + payload(payloadParameters).writeDelimitedTo(streamedMessage); + + getNativeLogger().trace("Encoding message."); + var encodedMessage = Base64.getEncoder().encodeToString(streamedMessage.toByteArray()); + + logMethodEnd(encodedMessage); + return encodedMessage; + } catch (IOException e) { + throw new CouldNotEncodeMessageException(e); + } } - messageHeaderParameters.validate(); - payloadParameters.validate(); - - try (ByteArrayOutputStream streamedMessage = new ByteArrayOutputStream()) { - - getNativeLogger().trace("Encode header."); - header(messageHeaderParameters).writeDelimitedTo(streamedMessage); - - getNativeLogger().trace("Encode payload."); - payload(payloadParameters).writeDelimitedTo(streamedMessage); - - getNativeLogger().trace("Encoding message."); - String encodedMessage = Base64.getEncoder().encodeToString(streamedMessage.toByteArray()); - logMethodEnd(encodedMessage); - return encodedMessage; - } catch (IOException e) { - throw new CouldNotEncodeMessageException(e); + /** + * Encode a number of messages. + * + * @param messageParameterTuples - + * @return - + */ + public List encode(List messageParameterTuples) { + return messageParameterTuples.stream() + .map( + messageParameterTuple -> + encode( + messageParameterTuple.getMessageHeaderParameters(), + messageParameterTuple.getPayloadParameters())) + .collect(Collectors.toList()); } - } - - /** - * Encode a number of messages. - * - * @param messageParameterTuples - - * @return - - */ - public List encode(List messageParameterTuples) { - return messageParameterTuples.stream() - .map( - messageParameterTuple -> - encode( - messageParameterTuple.getMessageHeaderParameters(), - messageParameterTuple.getPayloadParameters())) - .collect(Collectors.toList()); - } - - /** - * Chunk and add the Base64 encoding for a message if necessary. If there is only one chunk, the - * single chunk will be returned as Base64 encoded value. The chunk information and all IDs will - * be set by the SDK and are no longer in control of the application. - * - * @param messageHeaderParameters - - * @param payloadParameters Content of the message. It shall not be Base64 encoded before. - * @return - - */ - public List chunkAndBase64EncodeEachChunk( - MessageHeaderParameters messageHeaderParameters, - PayloadParameters payloadParameters, - OnboardingResponse onboardingResponse) { - logMethodBegin(messageHeaderParameters, payloadParameters); - - if (null == messageHeaderParameters - || null == payloadParameters - || null == onboardingResponse) { - throw new IllegalArgumentException("Parameters cannot be NULL"); - } - messageHeaderParameters.validate(); - payloadParameters.validate(); - - if (messageHeaderParameters - .getTechnicalMessageType() - .needsBase64EncodingAndHasToBeChunkedIfNecessary()) { - if (payloadParameters.shouldBeChunked()) { - getNativeLogger() - .debug( - "The message should be chunked, current size of the payload ({}) is above the limitation.", - payloadParameters.getValue().toStringUtf8().length()); - byte[] wholeMessage = payloadParameters.getValue().toByteArray(); - final List messageChunks = splitIntoChunks(wholeMessage); - List tuples = new ArrayList<>(); - AtomicInteger chunkNr = new AtomicInteger(1); - final String chunkContextId = ChunkContextIdService.generateChunkContextId(); - messageChunks.forEach( - chunk -> { - final String messageIdForChunk = MessageIdService.generateMessageId(); - final long sequenceNumberForChunk = - SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse); - - final MessageHeaderParameters header = new MessageHeaderParameters(); - header.copy(messageHeaderParameters); - header.setApplicationMessageId(messageIdForChunk); - header.setApplicationMessageSeqNo(sequenceNumberForChunk); - Chunk.ChunkComponent.Builder chunkInfo = Chunk.ChunkComponent.newBuilder(); - chunkInfo.setContextId(chunkContextId); - chunkInfo.setCurrent(chunkNr.getAndIncrement()); - chunkInfo.setTotal(messageChunks.size()); - chunkInfo.setTotalSize(wholeMessage.length); - header.setChunkInfo(chunkInfo.build()); - - final PayloadParameters payload = new PayloadParameters(); - payload.copyFrom(payloadParameters); - payload.setValue(ByteString.copyFromUtf8(Base64.getEncoder().encodeToString(chunk))); - - tuples.add(new MessageParameterTuple(header, payload)); - }); - return tuples; - } else { - getNativeLogger() - .debug( - "The message is not chunked since the current size of the payload ({}) is not above the limitation and the technical message type '{}' does support chunking.", - payloadParameters.getValue().toStringUtf8().length(), - messageHeaderParameters.getTechnicalMessageType().getKey()); - getNativeLogger() - .debug("The content is encoded, since in other cases the content is encoded as well."); - final PayloadParameters payload = new PayloadParameters(); - payload.copyFrom(payloadParameters); - payload.setValue( - ByteString.copyFromUtf8( - Base64.getEncoder() - .encodeToString( - payloadParameters - .getValue() - .toStringUtf8() - .getBytes(StandardCharsets.UTF_8)))); - return Collections.singletonList( - new MessageParameterTuple(messageHeaderParameters, payload)); - } - } else { - getNativeLogger() - .debug( - "The message type does not need chunking and base 64 encoding, we are returning the tuple 'as it is'."); - return Collections.singletonList( - new MessageParameterTuple(messageHeaderParameters, payloadParameters)); - } - } - - private List splitIntoChunks(byte[] wholeMessage) { - List chunks = new ArrayList<>(); - byte[] remainingBytes = wholeMessage; - do { - final byte[] chunk = - Arrays.copyOfRange(remainingBytes, 0, MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT); - chunks.add(chunk); - remainingBytes = - Arrays.copyOfRange( - remainingBytes, MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT, remainingBytes.length); - } while (remainingBytes.length > MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT); - if (remainingBytes.length > 0) { - chunks.add(remainingBytes); - } - return chunks; - } - - private Request.RequestEnvelope header(MessageHeaderParameters parameters) { - logMethodBegin(parameters); - - getNativeLogger().trace("Create message header."); - agrirouter.request.Request.RequestEnvelope.Builder messageHeader = - Request.RequestEnvelope.newBuilder(); - messageHeader.setApplicationMessageId(parameters.getApplicationMessageId()); - messageHeader.setApplicationMessageSeqNo(parameters.getApplicationMessageSeqNo()); - messageHeader.setTechnicalMessageType(parameters.getTechnicalMessageType().getKey()); - messageHeader.setMode(parameters.getMode()); - if (null != parameters.getMetadata()) { - messageHeader.setMetadata(parameters.getMetadata()); - } - if (StringUtils.isNotBlank(parameters.getTeamSetContextId())) { - messageHeader.setTeamSetContextId(parameters.getTeamSetContextId()); - } - if (!parameters.getRecipients().isEmpty()) { - messageHeader.addAllRecipients(parameters.getRecipients()); - } - if (parameters.getChunkInfo() != null) { - messageHeader.setChunkInfo(parameters.getChunkInfo()); + + /** + * Chunk and add the Base64 encoding for a message if necessary. If there is only one chunk, the + * single chunk will be returned as Base64 encoded value. The chunk information and all IDs will + * be set by the SDK and are no longer in control of the application. + * + * @param messageHeaderParameters - + * @param payloadParameters Content of the message. It shall not be Base64 encoded before. + * @return - + */ + public List chunkAndBase64EncodeEachChunk( + MessageHeaderParameters messageHeaderParameters, + PayloadParameters payloadParameters, + OnboardingResponse onboardingResponse) { + logMethodBegin(messageHeaderParameters, payloadParameters); + + if (null == messageHeaderParameters + || null == payloadParameters + || null == onboardingResponse) { + throw new IllegalArgumentException("Parameters cannot be NULL"); + } + messageHeaderParameters.validate(); + payloadParameters.validate(); + + if (messageHeaderParameters + .getTechnicalMessageType() + .needsBase64EncodingAndHasToBeChunkedIfNecessary()) { + if (payloadParameters.shouldBeChunked()) { + getNativeLogger() + .debug( + "The message should be chunked, current size of the payload ({}) is above the limitation.", + payloadParameters.getValue().toStringUtf8().length()); + var wholeMessage = payloadParameters.getValue().toByteArray(); + final var messageChunks = splitIntoChunks(wholeMessage); + List tuples = new ArrayList<>(); + var chunkNr = new AtomicInteger(1); + final var chunkContextId = ChunkContextIdService.generateChunkContextId(); + messageChunks.forEach( + chunk -> { + final var messageIdForChunk = MessageIdService.generateMessageId(); + final var sequenceNumberForChunk = + SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse); + + final var header = new MessageHeaderParameters(); + header.copy(messageHeaderParameters); + header.setApplicationMessageId(messageIdForChunk); + header.setApplicationMessageSeqNo(sequenceNumberForChunk); + var chunkInfo = Chunk.ChunkComponent.newBuilder(); + chunkInfo.setContextId(chunkContextId); + chunkInfo.setCurrent(chunkNr.getAndIncrement()); + chunkInfo.setTotal(messageChunks.size()); + chunkInfo.setTotalSize(wholeMessage.length); + header.setChunkInfo(chunkInfo.build()); + + final var payload = new PayloadParameters(); + payload.copyFrom(payloadParameters); + payload.setValue(ByteString.copyFromUtf8(Base64.getEncoder().encodeToString(chunk))); + + tuples.add(new MessageParameterTuple(header, payload)); + }); + return tuples; + } else { + getNativeLogger() + .debug( + "The message is not chunked since the current size of the payload ({}) is not above the limitation and the technical message type '{}' does support chunking.", + payloadParameters.getValue().toStringUtf8().length(), + messageHeaderParameters.getTechnicalMessageType().getKey()); + getNativeLogger() + .debug("The content is encoded, since in other cases the content is encoded as well."); + final var payload = new PayloadParameters(); + payload.copyFrom(payloadParameters); + payload.setValue( + ByteString.copyFromUtf8( + Base64.getEncoder() + .encodeToString( + payloadParameters + .getValue() + .toStringUtf8() + .getBytes(StandardCharsets.UTF_8)))); + return Collections.singletonList( + new MessageParameterTuple(messageHeaderParameters, payload)); + } + } else { + getNativeLogger() + .debug( + "The message type does not need chunking and base 64 encoding, we are returning the tuple 'as it is'."); + return Collections.singletonList( + new MessageParameterTuple(messageHeaderParameters, payloadParameters)); + } } - messageHeader.setTimestamp(new TimestampUtil().current()); - getNativeLogger().trace("Build message envelope."); - Request.RequestEnvelope requestEnvelope = messageHeader.build(); + private List splitIntoChunks(byte[] wholeMessage) { + List chunks = new ArrayList<>(); + var remainingBytes = wholeMessage; + do { + final var chunk = + Arrays.copyOfRange(remainingBytes, 0, MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT); + chunks.add(chunk); + remainingBytes = + Arrays.copyOfRange( + remainingBytes, MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT, remainingBytes.length); + } while (remainingBytes.length > MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT); + if (remainingBytes.length > 0) { + chunks.add(remainingBytes); + } + return chunks; + } - logMethodEnd(requestEnvelope); - return requestEnvelope; - } + private Request.RequestEnvelope header(MessageHeaderParameters parameters) { + logMethodBegin(parameters); + + getNativeLogger().trace("Create message header."); + var messageHeader = + Request.RequestEnvelope.newBuilder(); + messageHeader.setApplicationMessageId(parameters.getApplicationMessageId()); + messageHeader.setApplicationMessageSeqNo(parameters.getApplicationMessageSeqNo()); + messageHeader.setTechnicalMessageType(parameters.getTechnicalMessageType().getKey()); + messageHeader.setMode(parameters.getMode()); + if (null != parameters.getMetadata()) { + messageHeader.setMetadata(parameters.getMetadata()); + } + if (StringUtils.isNotBlank(parameters.getTeamSetContextId())) { + messageHeader.setTeamSetContextId(parameters.getTeamSetContextId()); + } + if (!parameters.getRecipients().isEmpty()) { + messageHeader.addAllRecipients(parameters.getRecipients()); + } + if (parameters.getChunkInfo() != null) { + messageHeader.setChunkInfo(parameters.getChunkInfo()); + } + messageHeader.setTimestamp(new TimestampUtil().current()); + + getNativeLogger().trace("Build message envelope."); + var requestEnvelope = messageHeader.build(); + + logMethodEnd(requestEnvelope); + return requestEnvelope; + } - private Request.RequestPayloadWrapper payload(PayloadParameters parameters) { - logMethodBegin(parameters); + private Request.RequestPayloadWrapper payload(PayloadParameters parameters) { + logMethodBegin(parameters); - getNativeLogger().trace("Create message payload."); - Request.RequestPayloadWrapper.Builder messagePayload = - Request.RequestPayloadWrapper.newBuilder(); - Any.Builder builder = Any.newBuilder(); - builder.setTypeUrl(parameters.getTypeUrl()); - builder.setValue(parameters.getValue()); - messagePayload.setDetails(builder.build()); + getNativeLogger().trace("Create message payload."); + var messagePayload = + Request.RequestPayloadWrapper.newBuilder(); + var builder = Any.newBuilder(); + builder.setTypeUrl(parameters.getTypeUrl()); + builder.setValue(parameters.getValue()); + messagePayload.setDetails(builder.build()); - getNativeLogger().trace("Message message payload wrapper."); - Request.RequestPayloadWrapper requestPayloadWrapper = messagePayload.build(); + getNativeLogger().trace("Message message payload wrapper."); + var requestPayloadWrapper = messagePayload.build(); - logMethodEnd(requestPayloadWrapper); - return requestPayloadWrapper; - } + logMethodEnd(requestPayloadWrapper); + return requestPayloadWrapper; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/DeleteAllMessagesParameterCreator.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/DeleteAllMessagesParameterCreator.java index 94ff87c4..a9f9c98d 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/DeleteAllMessagesParameterCreator.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/DeleteAllMessagesParameterCreator.java @@ -3,28 +3,31 @@ import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.service.parameters.DeleteMessageParameters; import com.dke.data.agrirouter.impl.common.UtcTimeService; -import java.util.Collections; import org.jetbrains.annotations.NotNull; -/** Interface to avaoid duplicate parameter creation. */ +import java.util.Collections; + +/** + * Interface to avaoid duplicate parameter creation. + */ public interface DeleteAllMessagesParameterCreator { - /** - * Create message parameters to delete all messages. - * - * @param onboardingResponse - - * @return - - */ - @NotNull - default DeleteMessageParameters createMessageParametersToDeleteAllMessages( - OnboardingResponse onboardingResponse) { - final DeleteMessageParameters deleteMessageParameters = new DeleteMessageParameters(); - deleteMessageParameters.setOnboardingResponse(onboardingResponse); - deleteMessageParameters.setMessageIds(Collections.emptyList()); - deleteMessageParameters.setSenderIds(Collections.emptyList()); - deleteMessageParameters.setSentFromInSeconds( - UtcTimeService.inThePast(UtcTimeService.FOUR_WEEKS_AGO).toEpochSecond()); - deleteMessageParameters.setSentToInSeconds(UtcTimeService.now().toEpochSecond()); - return deleteMessageParameters; - } + /** + * Create message parameters to delete all messages. + * + * @param onboardingResponse - + * @return - + */ + @NotNull + default DeleteMessageParameters createMessageParametersToDeleteAllMessages( + OnboardingResponse onboardingResponse) { + final var deleteMessageParameters = new DeleteMessageParameters(); + deleteMessageParameters.setOnboardingResponse(onboardingResponse); + deleteMessageParameters.setMessageIds(Collections.emptyList()); + deleteMessageParameters.setSenderIds(Collections.emptyList()); + deleteMessageParameters.setSentFromInSeconds( + UtcTimeService.inThePast(UtcTimeService.FOUR_WEEKS_AGO).toEpochSecond()); + deleteMessageParameters.setSentToInSeconds(UtcTimeService.now().toEpochSecond()); + return deleteMessageParameters; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryHelperService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryHelperService.java index 9858fdf6..ebee9cae 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryHelperService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryHelperService.java @@ -1,9 +1,7 @@ package com.dke.data.agrirouter.impl.messaging.helper; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; import com.dke.data.agrirouter.api.enums.TechnicalMessageType; import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; -import com.dke.data.agrirouter.api.messaging.MessageSendingResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.parameters.MessageQueryParameters; import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; @@ -11,74 +9,74 @@ import com.dke.data.agrirouter.impl.messaging.MessageEncoder; import com.dke.data.agrirouter.impl.messaging.rest.MessageSender; import com.dke.data.agrirouter.impl.validation.ResponseValidator; + import java.util.Collections; -import java.util.concurrent.CompletableFuture; public class MessageQueryHelperService extends NonEnvironmentalService - implements MessageSender, MessageEncoder, ResponseValidator, QueryAllMessagesParameterCreator { + implements MessageSender, MessageEncoder, ResponseValidator, QueryAllMessagesParameterCreator { - private final EncodeMessageService encodeMessageService; - private final TechnicalMessageType technicalMessageType; + private final EncodeMessageService encodeMessageService; + private final TechnicalMessageType technicalMessageType; - public MessageQueryHelperService( - EncodeMessageService encodeMessageService, TechnicalMessageType technicalMessageType) { - this.logMethodBegin(); - this.encodeMessageService = encodeMessageService; - this.technicalMessageType = technicalMessageType; - this.logMethodEnd(); - } + public MessageQueryHelperService( + EncodeMessageService encodeMessageService, TechnicalMessageType technicalMessageType) { + this.logMethodBegin(); + this.encodeMessageService = encodeMessageService; + this.technicalMessageType = technicalMessageType; + this.logMethodEnd(); + } - public String send(MessageQueryParameters parameters) { - this.logMethodBegin(parameters); + public String send(MessageQueryParameters parameters) { + this.logMethodBegin(parameters); - this.getNativeLogger().trace("Validate parameters."); - parameters.validate(); + this.getNativeLogger().trace("Validate parameters."); + parameters.validate(); - this.getNativeLogger().trace("Encode message."); - EncodedMessage encodedMessageResponse = this.encode(this.technicalMessageType, parameters); + this.getNativeLogger().trace("Encode message."); + var encodedMessageResponse = this.encode(this.technicalMessageType, parameters); - this.getNativeLogger().trace("Build message parameters."); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessageResponse.getEncodedMessage())); + this.getNativeLogger().trace("Build message parameters."); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessageResponse.getEncodedMessage())); - this.getNativeLogger().trace("Send and fetch message response."); - MessageSendingResponse response = this.sendMessage(sendMessageParameters); + this.getNativeLogger().trace("Send and fetch message response."); + var response = this.sendMessage(sendMessageParameters); - this.getNativeLogger().trace("Validate message response."); - this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); + this.getNativeLogger().trace("Validate message response."); + this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); - this.logMethodEnd(); - return encodedMessageResponse.getApplicationMessageID(); - } + this.logMethodEnd(); + return encodedMessageResponse.getApplicationMessageID(); + } - public HttpAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { - this.logMethodBegin(parameters); + public HttpAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { + this.logMethodBegin(parameters); - this.getNativeLogger().trace("Validate parameters."); - parameters.validate(); + this.getNativeLogger().trace("Validate parameters."); + parameters.validate(); - this.getNativeLogger().trace("Encode message."); - EncodedMessage encodedMessageResponse = this.encode(this.technicalMessageType, parameters); + this.getNativeLogger().trace("Encode message."); + var encodedMessageResponse = this.encode(this.technicalMessageType, parameters); - this.getNativeLogger().trace("Build message parameters."); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessageResponse.getEncodedMessage())); + this.getNativeLogger().trace("Build message parameters."); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessageResponse.getEncodedMessage())); - this.getNativeLogger().trace("Send and fetch message response."); - CompletableFuture response = - this.sendMessageAsync(sendMessageParameters); + this.getNativeLogger().trace("Send and fetch message response."); + var response = + this.sendMessageAsync(sendMessageParameters); - this.logMethodEnd(); - return new HttpAsyncMessageSendingResult( - response, encodedMessageResponse.getApplicationMessageID()); - } + this.logMethodEnd(); + return new HttpAsyncMessageSendingResult( + response, encodedMessageResponse.getApplicationMessageID()); + } - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/QueryAllMessagesParameterCreator.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/QueryAllMessagesParameterCreator.java index 19aeadd0..b88e375f 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/QueryAllMessagesParameterCreator.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/QueryAllMessagesParameterCreator.java @@ -3,28 +3,31 @@ import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.service.parameters.MessageQueryParameters; import com.dke.data.agrirouter.impl.common.UtcTimeService; -import java.util.Collections; import org.jetbrains.annotations.NotNull; -/** Interface to abstract the message query creation. */ +import java.util.Collections; + +/** + * Interface to abstract the message query creation. + */ public interface QueryAllMessagesParameterCreator { - /** - * Create message parameters to query all messages. - * - * @param onboardingResponse - - * @return - - */ - @NotNull - default MessageQueryParameters createMessageParametersToQueryAll( - OnboardingResponse onboardingResponse) { - MessageQueryParameters messageQueryParameters = new MessageQueryParameters(); - messageQueryParameters.setOnboardingResponse(onboardingResponse); - messageQueryParameters.setMessageIds(Collections.emptyList()); - messageQueryParameters.setSenderIds(Collections.emptyList()); - messageQueryParameters.setSentFromInSeconds( - UtcTimeService.inThePast(UtcTimeService.FOUR_WEEKS_AGO).toEpochSecond()); - messageQueryParameters.setSentToInSeconds(UtcTimeService.now().toEpochSecond()); - return messageQueryParameters; - } + /** + * Create message parameters to query all messages. + * + * @param onboardingResponse - + * @return - + */ + @NotNull + default MessageQueryParameters createMessageParametersToQueryAll( + OnboardingResponse onboardingResponse) { + var messageQueryParameters = new MessageQueryParameters(); + messageQueryParameters.setOnboardingResponse(onboardingResponse); + messageQueryParameters.setMessageIds(Collections.emptyList()); + messageQueryParameters.setSenderIds(Collections.emptyList()); + messageQueryParameters.setSentFromInSeconds( + UtcTimeService.inThePast(UtcTimeService.FOUR_WEEKS_AGO).toEpochSecond()); + messageQueryParameters.setSentToInSeconds(UtcTimeService.now().toEpochSecond()); + return messageQueryParameters; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/mqtt/MessageQueryHelperService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/mqtt/MessageQueryHelperService.java index b9004a60..fef5faaf 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/mqtt/MessageQueryHelperService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/mqtt/MessageQueryHelperService.java @@ -1,6 +1,5 @@ package com.dke.data.agrirouter.impl.messaging.helper.mqtt; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; import com.dke.data.agrirouter.api.enums.TechnicalMessageType; import com.dke.data.agrirouter.api.exception.CouldNotSendMqttMessageException; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; @@ -10,61 +9,62 @@ import com.dke.data.agrirouter.impl.messaging.MqttService; import com.dke.data.agrirouter.impl.messaging.helper.QueryAllMessagesParameterCreator; import com.dke.data.agrirouter.impl.messaging.rest.MessageSender; -import java.util.Collections; -import java.util.Objects; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; +import java.util.Collections; +import java.util.Objects; + public class MessageQueryHelperService extends MqttService - implements MessageSender, MessageEncoder, QueryAllMessagesParameterCreator { + implements MessageSender, MessageEncoder, QueryAllMessagesParameterCreator { - private final EncodeMessageService encodeMessageService; - private final TechnicalMessageType technicalMessageType; + private final EncodeMessageService encodeMessageService; + private final TechnicalMessageType technicalMessageType; - public MessageQueryHelperService( - IMqttClient mqttClient, - EncodeMessageService encodeMessageService, - TechnicalMessageType technicalMessageType) { - super(mqttClient); - this.logMethodBegin(); - this.encodeMessageService = encodeMessageService; - this.technicalMessageType = technicalMessageType; - this.logMethodEnd(); - } + public MessageQueryHelperService( + IMqttClient mqttClient, + EncodeMessageService encodeMessageService, + TechnicalMessageType technicalMessageType) { + super(mqttClient); + this.logMethodBegin(); + this.encodeMessageService = encodeMessageService; + this.technicalMessageType = technicalMessageType; + this.logMethodEnd(); + } - public String send(MessageQueryParameters parameters) { - this.logMethodBegin(parameters); + public String send(MessageQueryParameters parameters) { + this.logMethodBegin(parameters); - this.getNativeLogger().trace("Validate parameters."); - parameters.validate(); - try { - this.getNativeLogger().trace("Encode message."); - EncodedMessage encodedMessage = this.encode(this.technicalMessageType, parameters); + this.getNativeLogger().trace("Validate parameters."); + parameters.validate(); + try { + this.getNativeLogger().trace("Encode message."); + var encodedMessage = this.encode(this.technicalMessageType, parameters); - this.getNativeLogger().trace("Build message parameters."); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); + this.getNativeLogger().trace("Build message parameters."); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); - this.getNativeLogger().trace("Send and fetch message response."); - String messageAsJson = this.createMessageBody(sendMessageParameters); - byte[] payload = messageAsJson.getBytes(); - this.getMqttClient() - .publish( - Objects.requireNonNull(parameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - new MqttMessage(payload)); - return encodedMessage.getApplicationMessageID(); - } catch (MqttException e) { - throw new CouldNotSendMqttMessageException(e); + this.getNativeLogger().trace("Send and fetch message response."); + var messageAsJson = this.createMessageBody(sendMessageParameters); + var payload = messageAsJson.getBytes(); + this.getMqttClient() + .publish( + Objects.requireNonNull(parameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + new MqttMessage(payload)); + return encodedMessage.getApplicationMessageID(); + } catch (MqttException e) { + throw new CouldNotSendMqttMessageException(e); + } } - } - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/CloudOffboardingServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/CloudOffboardingServiceImpl.java index 7f500258..a3c8ca19 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/CloudOffboardingServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/CloudOffboardingServiceImpl.java @@ -1,6 +1,5 @@ package com.dke.data.agrirouter.impl.messaging.mqtt; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; 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; @@ -11,60 +10,64 @@ import com.dke.data.agrirouter.impl.messaging.MessageEncoder; import com.dke.data.agrirouter.impl.messaging.MqttService; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; -import java.util.Collections; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; -/** Service implementation. */ +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + +/** + * Service implementation. + */ +@SuppressWarnings("unused") public class CloudOffboardingServiceImpl extends MqttService - implements CloudOffboardingService, MessageBodyCreator, MessageEncoder { + implements CloudOffboardingService, MessageBodyCreator, MessageEncoder { - private final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + private final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - public CloudOffboardingServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - } + public CloudOffboardingServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + } - /** - * Offboarding a virtual CU. Will deliver no result if the action was successful, if there's any - * error an exception will be thrown. - * - * @param parameters Parameters for offboarding. - */ - @Override - public String send(CloudOffboardingParameters parameters) { - parameters.validate(); - try { - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - String messageAsJson = this.createMessageBody(sendMessageParameters); - byte[] payload = messageAsJson.getBytes(); - this.getMqttClient() - .publish( - Objects.requireNonNull(parameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - new MqttMessage(payload)); - return encodedMessage.getApplicationMessageID(); - } catch (MqttException e) { - throw new CouldNotSendMqttMessageException(e); + /** + * Offboarding a virtual CU. Will deliver no result if the action was successful, if there's any + * error an exception will be thrown. + * + * @param parameters Parameters for offboarding. + */ + @Override + public String send(CloudOffboardingParameters parameters) { + parameters.validate(); + try { + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var messageAsJson = this.createMessageBody(sendMessageParameters); + var payload = messageAsJson.getBytes(); + this.getMqttClient() + .publish( + Objects.requireNonNull(parameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + new MqttMessage(payload)); + return encodedMessage.getApplicationMessageID(); + } catch (MqttException e) { + throw new CouldNotSendMqttMessageException(e); + } } - } - @Override - public MqttAsyncMessageSendingResult sendAsync(CloudOffboardingParameters parameters) { - return new MqttAsyncMessageSendingResult( - CompletableFuture.supplyAsync(() -> this.send(parameters))); - } + @Override + public MqttAsyncMessageSendingResult sendAsync(CloudOffboardingParameters parameters) { + return new MqttAsyncMessageSendingResult( + CompletableFuture.supplyAsync(() -> this.send(parameters))); + } - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/CloudOnboardingServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/CloudOnboardingServiceImpl.java index 5fc93219..96d2b897 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/CloudOnboardingServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/CloudOnboardingServiceImpl.java @@ -1,6 +1,5 @@ package com.dke.data.agrirouter.impl.messaging.mqtt; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; 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; @@ -11,59 +10,61 @@ import com.dke.data.agrirouter.impl.messaging.MessageEncoder; import com.dke.data.agrirouter.impl.messaging.MqttService; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; -import java.util.Collections; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("unused") public class CloudOnboardingServiceImpl extends MqttService - implements CloudOnboardingService, MessageBodyCreator, MessageEncoder { + implements CloudOnboardingService, MessageBodyCreator, MessageEncoder { - private final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + private final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - public CloudOnboardingServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - } + public CloudOnboardingServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + } - /** - * Onboarding a virtual CU for an existing cloud application (incl. several checks). - * - * @param parameters Parameters for the onboarding. - * @return - - */ - @Override - public String send(CloudOnboardingParameters parameters) { - parameters.validate(); - try { - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - String messageAsJson = this.createMessageBody(sendMessageParameters); - byte[] payload = messageAsJson.getBytes(); - this.getMqttClient() - .publish( - Objects.requireNonNull(parameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - new MqttMessage(payload)); - return encodedMessage.getApplicationMessageID(); - } catch (MqttException e) { - throw new CouldNotSendMqttMessageException(e); + /** + * Onboarding a virtual CU for an existing cloud application (incl. several checks). + * + * @param parameters Parameters for the onboarding. + * @return - + */ + @Override + public String send(CloudOnboardingParameters parameters) { + parameters.validate(); + try { + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var messageAsJson = this.createMessageBody(sendMessageParameters); + var payload = messageAsJson.getBytes(); + this.getMqttClient() + .publish( + Objects.requireNonNull(parameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + new MqttMessage(payload)); + return encodedMessage.getApplicationMessageID(); + } catch (MqttException e) { + throw new CouldNotSendMqttMessageException(e); + } } - } - @Override - public MqttAsyncMessageSendingResult sendAsync(CloudOnboardingParameters parameters) { - return new MqttAsyncMessageSendingResult( - CompletableFuture.supplyAsync(() -> this.send(parameters))); - } + @Override + public MqttAsyncMessageSendingResult sendAsync(CloudOnboardingParameters parameters) { + return new MqttAsyncMessageSendingResult( + CompletableFuture.supplyAsync(() -> this.send(parameters))); + } - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/DeleteMessageServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/DeleteMessageServiceImpl.java index b39a4fa5..eee3006c 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/DeleteMessageServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/DeleteMessageServiceImpl.java @@ -1,6 +1,5 @@ package com.dke.data.agrirouter.impl.messaging.mqtt; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.exception.CouldNotSendMqttMessageException; import com.dke.data.agrirouter.api.messaging.MqttAsyncMessageSendingResult; @@ -13,70 +12,72 @@ import com.dke.data.agrirouter.impl.messaging.MqttService; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.messaging.helper.DeleteAllMessagesParameterCreator; -import java.util.Collections; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("unused") public class DeleteMessageServiceImpl extends MqttService - implements DeleteMessageService, + implements DeleteMessageService, MessageBodyCreator, MessageEncoder, DeleteAllMessagesParameterCreator { - private final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + private final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - public DeleteMessageServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - } + public DeleteMessageServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + } - @Override - public String send(DeleteMessageParameters parameters) { - parameters.validate(); - try { - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - String messageAsJson = this.createMessageBody(sendMessageParameters); - byte[] payload = messageAsJson.getBytes(); - this.getMqttClient() - .publish( - Objects.requireNonNull(parameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - new MqttMessage(payload)); - return encodedMessage.getApplicationMessageID(); - } catch (MqttException e) { - throw new CouldNotSendMqttMessageException(e); + @Override + public String send(DeleteMessageParameters parameters) { + parameters.validate(); + try { + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var messageAsJson = this.createMessageBody(sendMessageParameters); + var payload = messageAsJson.getBytes(); + this.getMqttClient() + .publish( + Objects.requireNonNull(parameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + new MqttMessage(payload)); + return encodedMessage.getApplicationMessageID(); + } catch (MqttException e) { + throw new CouldNotSendMqttMessageException(e); + } } - } - @Override - public MqttAsyncMessageSendingResult sendAsync(DeleteMessageParameters parameters) { - return new MqttAsyncMessageSendingResult( - CompletableFuture.supplyAsync(() -> this.send(parameters))); - } + @Override + public MqttAsyncMessageSendingResult sendAsync(DeleteMessageParameters parameters) { + return new MqttAsyncMessageSendingResult( + CompletableFuture.supplyAsync(() -> this.send(parameters))); + } - public EncodeMessageService getEncodeMessageService() { - return encodeMessageService; - } + public EncodeMessageService getEncodeMessageService() { + return encodeMessageService; + } - @Override - public String sendMessageToDeleteAll(OnboardingResponse onboardingResponse) { - final DeleteMessageParameters deleteMessageParameters = - createMessageParametersToDeleteAllMessages(onboardingResponse); - return send(deleteMessageParameters); - } + @Override + public String sendMessageToDeleteAll(OnboardingResponse onboardingResponse) { + final var deleteMessageParameters = + createMessageParametersToDeleteAllMessages(onboardingResponse); + return send(deleteMessageParameters); + } - @Override - public MqttAsyncMessageSendingResult sendMessageToDeleteAllAsync( - OnboardingResponse onboardingResponse) { - final DeleteMessageParameters deleteMessageParameters = - createMessageParametersToDeleteAllMessages(onboardingResponse); - return sendAsync(deleteMessageParameters); - } + @Override + public MqttAsyncMessageSendingResult sendMessageToDeleteAllAsync( + OnboardingResponse onboardingResponse) { + final var deleteMessageParameters = + createMessageParametersToDeleteAllMessages(onboardingResponse); + return sendAsync(deleteMessageParameters); + } } 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 5e737629..7172236b 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,7 +1,6 @@ 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; @@ -17,105 +16,107 @@ import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; -import java.util.Collections; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("unused") public class ListEndpointsServiceImpl extends MqttService - implements ListEndpointsService, + implements ListEndpointsService, MessageBodyCreator, MessageEncoder, MessageDecoder { - private final EncodeMessageService encodeMessageService; + private final EncodeMessageService encodeMessageService; - public ListEndpointsServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - this.encodeMessageService = new EncodeMessageServiceImpl(); - } + public ListEndpointsServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + this.encodeMessageService = new EncodeMessageServiceImpl(); + } - @Override - public String send(ListEndpointsParameters parameters) { - parameters.validate(); - try { - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - String messageAsJson = this.createMessageBody(sendMessageParameters); - byte[] payload = messageAsJson.getBytes(); - this.getMqttClient() - .publish( - Objects.requireNonNull(parameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - new MqttMessage(payload)); - return encodedMessage.getApplicationMessageID(); - } catch (MqttException e) { - throw new CouldNotSendMqttMessageException(e); + @Override + public String send(ListEndpointsParameters parameters) { + parameters.validate(); + try { + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var messageAsJson = this.createMessageBody(sendMessageParameters); + var payload = messageAsJson.getBytes(); + this.getMqttClient() + .publish( + Objects.requireNonNull(parameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + new MqttMessage(payload)); + return encodedMessage.getApplicationMessageID(); + } catch (MqttException e) { + throw new CouldNotSendMqttMessageException(e); + } } - } - @Override - public MqttAsyncMessageSendingResult sendAsync(ListEndpointsParameters parameters) { - return new MqttAsyncMessageSendingResult( - CompletableFuture.supplyAsync(() -> this.send(parameters))); - } + @Override + public MqttAsyncMessageSendingResult sendAsync(ListEndpointsParameters parameters) { + return new MqttAsyncMessageSendingResult( + CompletableFuture.supplyAsync(() -> this.send(parameters))); + } - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } - @Override - public String sendMessageToListAllWithExistingRoute(OnboardingResponse onboardingResponse) { - ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); - listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); - listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); - listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); - return send(listEndpointsParameters); - } + @Override + public String sendMessageToListAllWithExistingRoute(OnboardingResponse onboardingResponse) { + var listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(false); + return send(listEndpointsParameters); + } - @Override - public String sendMessageToListAll(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 sendMessageToListAll(OnboardingResponse onboardingResponse) { + var 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 sendMessageToListAllWithExistingRouteAsync( - OnboardingResponse onboardingResponse) { - ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); - listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); - listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); - listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); - return sendAsync(listEndpointsParameters); - } + @Override + public MqttAsyncMessageSendingResult sendMessageToListAllWithExistingRouteAsync( + OnboardingResponse onboardingResponse) { + var listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(false); + return sendAsync(listEndpointsParameters); + } - @Override - public MqttAsyncMessageSendingResult sendMessageToListAllAsync( - 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 sendMessageToListAllAsync( + OnboardingResponse onboardingResponse) { + var 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 agrirouter.response.payload.account.Endpoints.ListEndpointsResponse unsafeDecode( - ByteString message) throws InvalidProtocolBufferException { - return agrirouter.response.payload.account.Endpoints.ListEndpointsResponse.parseFrom(message); - } + @Override + public agrirouter.response.payload.account.Endpoints.ListEndpointsResponse unsafeDecode( + ByteString message) throws InvalidProtocolBufferException { + return agrirouter.response.payload.account.Endpoints.ListEndpointsResponse.parseFrom(message); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageConfirmationServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageConfirmationServiceImpl.java index bbaff0dd..0dfda664 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageConfirmationServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageConfirmationServiceImpl.java @@ -1,6 +1,5 @@ package com.dke.data.agrirouter.impl.messaging.mqtt; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; 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; @@ -11,54 +10,56 @@ import com.dke.data.agrirouter.impl.messaging.MqttService; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.messaging.rest.MessageSender; -import java.util.Collections; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("unused") public class MessageConfirmationServiceImpl extends MqttService - implements MessageConfirmationService, MessageSender, MessageEncoder { + implements MessageConfirmationService, MessageSender, MessageEncoder { - private final EncodeMessageService encodeMessageService; + private final EncodeMessageService encodeMessageService; - public MessageConfirmationServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - this.encodeMessageService = new EncodeMessageServiceImpl(); - } + public MessageConfirmationServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + this.encodeMessageService = new EncodeMessageServiceImpl(); + } - @Override - public String send(MessageConfirmationParameters parameters) { - parameters.validate(); - try { - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - String messageAsJson = this.createMessageBody(sendMessageParameters); - byte[] payload = messageAsJson.getBytes(); - this.getMqttClient() - .publish( - Objects.requireNonNull(parameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - new MqttMessage(payload)); - return encodedMessage.getApplicationMessageID(); - } catch (MqttException e) { - throw new CouldNotSendMqttMessageException(e); + @Override + public String send(MessageConfirmationParameters parameters) { + parameters.validate(); + try { + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var messageAsJson = this.createMessageBody(sendMessageParameters); + var payload = messageAsJson.getBytes(); + this.getMqttClient() + .publish( + Objects.requireNonNull(parameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + new MqttMessage(payload)); + return encodedMessage.getApplicationMessageID(); + } catch (MqttException e) { + throw new CouldNotSendMqttMessageException(e); + } } - } - @Override - public MqttAsyncMessageSendingResult sendAsync(MessageConfirmationParameters parameters) { - return new MqttAsyncMessageSendingResult( - CompletableFuture.supplyAsync(() -> this.send(parameters))); - } + @Override + public MqttAsyncMessageSendingResult sendAsync(MessageConfirmationParameters parameters) { + return new MqttAsyncMessageSendingResult( + CompletableFuture.supplyAsync(() -> this.send(parameters))); + } - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageHeaderQueryServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageHeaderQueryServiceImpl.java index 6fc6c9c1..94d20b3e 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageHeaderQueryServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageHeaderQueryServiceImpl.java @@ -12,47 +12,49 @@ import com.dke.data.agrirouter.impl.messaging.rest.MessageSender; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("unused") public class MessageHeaderQueryServiceImpl extends MqttService - implements MessageHeaderQueryService, MessageSender { - - private final MessageQueryHelperService messageQueryHelperService; - - public MessageHeaderQueryServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - messageQueryHelperService = - new MessageQueryHelperService( - mqttClient, new EncodeMessageServiceImpl(), SystemMessageType.DKE_FEED_HEADER_QUERY); - } - - @Override - public String send(MessageQueryParameters parameters) { - return this.messageQueryHelperService.send(parameters); - } - - @Override - public MqttAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { - return new MqttAsyncMessageSendingResult( - CompletableFuture.supplyAsync(() -> this.send(parameters))); - } - - @Override - public FeedResponse.HeaderQueryResponse unsafeDecode(ByteString message) - throws InvalidProtocolBufferException { - return FeedResponse.HeaderQueryResponse.parseFrom(message); - } - - @Override - public String sendMessageToQueryAll(OnboardingResponse onboardingResponse) { - return send(messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse)); - } - - @Override - public MqttAsyncMessageSendingResult sendMessageToQueryAllAsync( - OnboardingResponse onboardingResponse) { - return sendAsync( - messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse)); - } + implements MessageHeaderQueryService, MessageSender { + + private final MessageQueryHelperService messageQueryHelperService; + + public MessageHeaderQueryServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + messageQueryHelperService = + new MessageQueryHelperService( + mqttClient, new EncodeMessageServiceImpl(), SystemMessageType.DKE_FEED_HEADER_QUERY); + } + + @Override + public String send(MessageQueryParameters parameters) { + return this.messageQueryHelperService.send(parameters); + } + + @Override + public MqttAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { + return new MqttAsyncMessageSendingResult( + CompletableFuture.supplyAsync(() -> this.send(parameters))); + } + + @Override + public FeedResponse.HeaderQueryResponse unsafeDecode(ByteString message) + throws InvalidProtocolBufferException { + return FeedResponse.HeaderQueryResponse.parseFrom(message); + } + + @Override + public String sendMessageToQueryAll(OnboardingResponse onboardingResponse) { + return send(messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse)); + } + + @Override + public MqttAsyncMessageSendingResult sendMessageToQueryAllAsync( + OnboardingResponse onboardingResponse) { + return sendAsync( + messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse)); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageQueryServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageQueryServiceImpl.java index 13adfbcf..dcea98b8 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageQueryServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/MessageQueryServiceImpl.java @@ -13,52 +13,54 @@ import com.dke.data.agrirouter.impl.messaging.rest.MessageSender; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("unused") public class MessageQueryServiceImpl extends MqttService - implements MessageQueryService, + implements MessageQueryService, MessageSender, MessageDecoder { - private final MessageQueryHelperService messageQueryHelperService; + private final MessageQueryHelperService messageQueryHelperService; - public MessageQueryServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - this.messageQueryHelperService = - new MessageQueryHelperService( - mqttClient, new EncodeMessageServiceImpl(), SystemMessageType.DKE_FEED_MESSAGE_QUERY); - } + public MessageQueryServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + this.messageQueryHelperService = + new MessageQueryHelperService( + mqttClient, new EncodeMessageServiceImpl(), SystemMessageType.DKE_FEED_MESSAGE_QUERY); + } - @Override - public String send(MessageQueryParameters parameters) { - return this.messageQueryHelperService.send(parameters); - } + @Override + public String send(MessageQueryParameters parameters) { + return this.messageQueryHelperService.send(parameters); + } - @Override - public MqttAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { - return new MqttAsyncMessageSendingResult( - CompletableFuture.supplyAsync(() -> this.send(parameters))); - } + @Override + public MqttAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { + return new MqttAsyncMessageSendingResult( + CompletableFuture.supplyAsync(() -> this.send(parameters))); + } - @Override - public FeedResponse.MessageQueryResponse unsafeDecode(ByteString message) - throws InvalidProtocolBufferException { - return FeedResponse.MessageQueryResponse.parseFrom(message); - } + @Override + public FeedResponse.MessageQueryResponse unsafeDecode(ByteString message) + throws InvalidProtocolBufferException { + return FeedResponse.MessageQueryResponse.parseFrom(message); + } - @Override - public String sendMessageToQueryAll(OnboardingResponse onboardingResponse) { - MessageQueryParameters messageQueryParameters = - messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); - return send(messageQueryParameters); - } + @Override + public String sendMessageToQueryAll(OnboardingResponse onboardingResponse) { + var messageQueryParameters = + messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); + return send(messageQueryParameters); + } - @Override - public MqttAsyncMessageSendingResult sendMessageToQueryAllAsync( - OnboardingResponse onboardingResponse) { - MessageQueryParameters messageQueryParameters = - messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); - return sendAsync(messageQueryParameters); - } + @Override + public MqttAsyncMessageSendingResult sendMessageToQueryAllAsync( + OnboardingResponse onboardingResponse) { + var messageQueryParameters = + messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); + return sendAsync(messageQueryParameters); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SendMessageServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SendMessageServiceImpl.java index c5db783a..9999085a 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SendMessageServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SendMessageServiceImpl.java @@ -5,46 +5,48 @@ import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; import com.dke.data.agrirouter.impl.messaging.MessageBodyCreator; import com.dke.data.agrirouter.impl.messaging.MqttService; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + /** * Sending messages via MQTT using the given MQTT client. The service itself can not access the * queue because connection handling should not be part of the API. */ +@SuppressWarnings("unused") public class SendMessageServiceImpl extends MqttService - implements SendMessageService, MessageBodyCreator { + implements SendMessageService, MessageBodyCreator { - public SendMessageServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - } + public SendMessageServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + } - /** - * Send message synchronous. - * - * @param sendMessageParameters Parameters to send the message. - */ - public void send(SendMessageParameters sendMessageParameters) { - sendMessageParameters.validate(); - try { - String messageAsJson = this.createMessageBody(sendMessageParameters); - byte[] payload = messageAsJson.getBytes(); - this.getMqttClient() - .publish( - Objects.requireNonNull(sendMessageParameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - new MqttMessage(payload)); - } catch (MqttException e) { - throw new CouldNotSendMqttMessageException(e); + /** + * Send message synchronous. + * + * @param sendMessageParameters Parameters to send the message. + */ + public void send(SendMessageParameters sendMessageParameters) { + sendMessageParameters.validate(); + try { + var messageAsJson = this.createMessageBody(sendMessageParameters); + var payload = messageAsJson.getBytes(); + this.getMqttClient() + .publish( + Objects.requireNonNull(sendMessageParameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + new MqttMessage(payload)); + } catch (MqttException e) { + throw new CouldNotSendMqttMessageException(e); + } } - } - @Override - public CompletableFuture sendAsync(SendMessageParameters sendMessageParameters) { - return CompletableFuture.runAsync(() -> this.send(sendMessageParameters)); - } + @Override + public CompletableFuture sendAsync(SendMessageParameters sendMessageParameters) { + return CompletableFuture.runAsync(() -> this.send(sendMessageParameters)); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SetCapabilityServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SetCapabilityServiceImpl.java index 0c438038..ec381a5e 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SetCapabilityServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SetCapabilityServiceImpl.java @@ -1,6 +1,5 @@ package com.dke.data.agrirouter.impl.messaging.mqtt; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; 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; @@ -12,54 +11,56 @@ import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.messaging.rest.MessageSender; import com.dke.data.agrirouter.impl.validation.ResponseValidator; -import java.util.Collections; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("unused") public class SetCapabilityServiceImpl extends MqttService - implements SetCapabilityService, MessageSender, MessageEncoder, ResponseValidator { + implements SetCapabilityService, MessageSender, MessageEncoder, ResponseValidator { - private final EncodeMessageService encodeMessageService; + private final EncodeMessageService encodeMessageService; - public SetCapabilityServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - this.encodeMessageService = new EncodeMessageServiceImpl(); - } + public SetCapabilityServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + this.encodeMessageService = new EncodeMessageServiceImpl(); + } - @Override - public String send(SetCapabilitiesParameters parameters) { - parameters.validate(); - try { - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - String messageAsJson = this.createMessageBody(sendMessageParameters); - byte[] payload = messageAsJson.getBytes(); - this.getMqttClient() - .publish( - Objects.requireNonNull(parameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - new MqttMessage(payload)); - return encodedMessage.getApplicationMessageID(); - } catch (MqttException e) { - throw new CouldNotSendMqttMessageException(e); + @Override + public String send(SetCapabilitiesParameters parameters) { + parameters.validate(); + try { + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var messageAsJson = this.createMessageBody(sendMessageParameters); + var payload = messageAsJson.getBytes(); + this.getMqttClient() + .publish( + Objects.requireNonNull(parameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + new MqttMessage(payload)); + return encodedMessage.getApplicationMessageID(); + } catch (MqttException e) { + throw new CouldNotSendMqttMessageException(e); + } } - } - @Override - public MqttAsyncMessageSendingResult sendAsync(SetCapabilitiesParameters parameters) { - return new MqttAsyncMessageSendingResult( - CompletableFuture.supplyAsync(() -> this.send(parameters))); - } + @Override + public MqttAsyncMessageSendingResult sendAsync(SetCapabilitiesParameters parameters) { + return new MqttAsyncMessageSendingResult( + CompletableFuture.supplyAsync(() -> this.send(parameters))); + } - @Override - public EncodeMessageService getEncodeMessageService() { - return encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SetSubscriptionServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SetSubscriptionServiceImpl.java index 7cffa395..6e882790 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SetSubscriptionServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/mqtt/SetSubscriptionServiceImpl.java @@ -1,6 +1,5 @@ package com.dke.data.agrirouter.impl.messaging.mqtt; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; 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; @@ -12,53 +11,55 @@ import com.dke.data.agrirouter.impl.messaging.MqttService; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.validation.ResponseValidator; -import java.util.Collections; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("unused") public class SetSubscriptionServiceImpl extends MqttService - implements SetSubscriptionService, MessageBodyCreator, MessageEncoder, ResponseValidator { - private final EncodeMessageService encodeMessageService; + implements SetSubscriptionService, MessageBodyCreator, MessageEncoder, ResponseValidator { + private final EncodeMessageService encodeMessageService; - public SetSubscriptionServiceImpl(IMqttClient mqttClient) { - super(mqttClient); - this.encodeMessageService = new EncodeMessageServiceImpl(); - } + public SetSubscriptionServiceImpl(IMqttClient mqttClient) { + super(mqttClient); + this.encodeMessageService = new EncodeMessageServiceImpl(); + } - @Override - public String send(SetSubscriptionParameters parameters) { - parameters.validate(); - try { - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - String messageAsJson = this.createMessageBody(sendMessageParameters); - byte[] payload = messageAsJson.getBytes(); - this.getMqttClient() - .publish( - Objects.requireNonNull(parameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - new MqttMessage(payload)); - return encodedMessage.getApplicationMessageID(); - } catch (MqttException e) { - throw new CouldNotSendMqttMessageException(e); + @Override + public String send(SetSubscriptionParameters parameters) { + parameters.validate(); + try { + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var messageAsJson = this.createMessageBody(sendMessageParameters); + var payload = messageAsJson.getBytes(); + this.getMqttClient() + .publish( + Objects.requireNonNull(parameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + new MqttMessage(payload)); + return encodedMessage.getApplicationMessageID(); + } catch (MqttException e) { + throw new CouldNotSendMqttMessageException(e); + } } - } - @Override - public MqttAsyncMessageSendingResult sendAsync(SetSubscriptionParameters parameters) { - return new MqttAsyncMessageSendingResult( - CompletableFuture.supplyAsync(() -> this.send(parameters))); - } + @Override + public MqttAsyncMessageSendingResult sendAsync(SetSubscriptionParameters parameters) { + return new MqttAsyncMessageSendingResult( + CompletableFuture.supplyAsync(() -> this.send(parameters))); + } - @Override - public EncodeMessageService getEncodeMessageService() { - return encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/CloudOffboardingServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/CloudOffboardingServiceImpl.java index 73fa594f..770a9d0e 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/CloudOffboardingServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/CloudOffboardingServiceImpl.java @@ -1,8 +1,6 @@ package com.dke.data.agrirouter.impl.messaging.rest; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; -import com.dke.data.agrirouter.api.messaging.MessageSendingResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.messaging.http.CloudOffboardingService; import com.dke.data.agrirouter.api.service.parameters.CloudOffboardingParameters; @@ -10,47 +8,49 @@ import com.dke.data.agrirouter.impl.messaging.MessageEncoder; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.validation.ResponseValidator; + import java.util.Collections; -import java.util.concurrent.CompletableFuture; -/** Service implementation. */ +/** + * Service implementation. + */ public class CloudOffboardingServiceImpl - implements CloudOffboardingService, MessageSender, ResponseValidator, MessageEncoder { - - private final EncodeMessageService encodeMessageService; - - public CloudOffboardingServiceImpl() { - this.encodeMessageService = new EncodeMessageServiceImpl(); - } - - @Override - public String send(CloudOffboardingParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - MessageSendingResponse response = this.sendMessage(sendMessageParameters); - this.assertStatusCodeIsValid(response.getNativeResponse().getStatus()); - return encodedMessage.getApplicationMessageID(); - } - - @Override - public HttpAsyncMessageSendingResult sendAsync(CloudOffboardingParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - CompletableFuture response = - this.sendMessageAsync(sendMessageParameters); - return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); - } - - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + implements CloudOffboardingService, MessageSender, ResponseValidator, MessageEncoder { + + private final EncodeMessageService encodeMessageService; + + public CloudOffboardingServiceImpl() { + this.encodeMessageService = new EncodeMessageServiceImpl(); + } + + @Override + public String send(CloudOffboardingParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = this.sendMessage(sendMessageParameters); + this.assertStatusCodeIsValid(response.getNativeResponse().getStatus()); + return encodedMessage.getApplicationMessageID(); + } + + @Override + public HttpAsyncMessageSendingResult sendAsync(CloudOffboardingParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = + this.sendMessageAsync(sendMessageParameters); + return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); + } + + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/CloudOnboardingServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/CloudOnboardingServiceImpl.java index 7fe38a2a..87936465 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/CloudOnboardingServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/CloudOnboardingServiceImpl.java @@ -1,8 +1,6 @@ package com.dke.data.agrirouter.impl.messaging.rest; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; -import com.dke.data.agrirouter.api.messaging.MessageSendingResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.messaging.http.CloudOnboardingService; import com.dke.data.agrirouter.api.service.parameters.CloudOnboardingParameters; @@ -10,46 +8,46 @@ import com.dke.data.agrirouter.impl.messaging.MessageEncoder; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.validation.ResponseValidator; + import java.util.Collections; -import java.util.concurrent.CompletableFuture; public class CloudOnboardingServiceImpl - implements CloudOnboardingService, MessageSender, ResponseValidator, MessageEncoder { - - private final EncodeMessageService encodeMessageService; - - public CloudOnboardingServiceImpl() { - this.encodeMessageService = new EncodeMessageServiceImpl(); - } - - @Override - public String send(CloudOnboardingParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - MessageSendingResponse response = this.sendMessage(sendMessageParameters); - this.assertStatusCodeIsValid(response.getNativeResponse().getStatus()); - return encodedMessage.getApplicationMessageID(); - } - - @Override - public HttpAsyncMessageSendingResult sendAsync(CloudOnboardingParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - CompletableFuture response = - this.sendMessageAsync(sendMessageParameters); - return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); - } - - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + implements CloudOnboardingService, MessageSender, ResponseValidator, MessageEncoder { + + private final EncodeMessageService encodeMessageService; + + public CloudOnboardingServiceImpl() { + this.encodeMessageService = new EncodeMessageServiceImpl(); + } + + @Override + public String send(CloudOnboardingParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = this.sendMessage(sendMessageParameters); + this.assertStatusCodeIsValid(response.getNativeResponse().getStatus()); + return encodedMessage.getApplicationMessageID(); + } + + @Override + public HttpAsyncMessageSendingResult sendAsync(CloudOnboardingParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = + this.sendMessageAsync(sendMessageParameters); + return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); + } + + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java index afed7ca6..0b9f9ba0 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java @@ -1,9 +1,7 @@ package com.dke.data.agrirouter.impl.messaging.rest; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; -import com.dke.data.agrirouter.api.messaging.MessageSendingResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.messaging.http.DeleteMessageService; import com.dke.data.agrirouter.api.service.parameters.DeleteMessageParameters; @@ -12,65 +10,65 @@ import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.messaging.helper.DeleteAllMessagesParameterCreator; import com.dke.data.agrirouter.impl.validation.ResponseValidator; + import java.util.Collections; -import java.util.concurrent.CompletableFuture; public class DeleteMessageServiceImpl - implements DeleteMessageService, + implements DeleteMessageService, MessageSender, ResponseValidator, MessageEncoder, DeleteAllMessagesParameterCreator { - private final EncodeMessageService encodeMessageService; + private final EncodeMessageService encodeMessageService; - public DeleteMessageServiceImpl() { - this.encodeMessageService = new EncodeMessageServiceImpl(); - } + public DeleteMessageServiceImpl() { + this.encodeMessageService = new EncodeMessageServiceImpl(); + } - @Override - public String send(DeleteMessageParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - MessageSendingResponse response = this.sendMessage(sendMessageParameters); - this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); - return encodedMessage.getApplicationMessageID(); - } + @Override + public String send(DeleteMessageParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = this.sendMessage(sendMessageParameters); + this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); + return encodedMessage.getApplicationMessageID(); + } - @Override - public HttpAsyncMessageSendingResult sendAsync(DeleteMessageParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - CompletableFuture response = - this.sendMessageAsync(sendMessageParameters); - return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); - } + @Override + public HttpAsyncMessageSendingResult sendAsync(DeleteMessageParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = + this.sendMessageAsync(sendMessageParameters); + return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); + } - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } - @Override - public String sendMessageToDeleteAll(OnboardingResponse onboardingResponse) { - final DeleteMessageParameters deleteMessageParameters = - createMessageParametersToDeleteAllMessages(onboardingResponse); - return send(deleteMessageParameters); - } + @Override + public String sendMessageToDeleteAll(OnboardingResponse onboardingResponse) { + final var deleteMessageParameters = + createMessageParametersToDeleteAllMessages(onboardingResponse); + return send(deleteMessageParameters); + } - @Override - public HttpAsyncMessageSendingResult sendMessageToDeleteAllAsync( - OnboardingResponse onboardingResponse) { - final DeleteMessageParameters deleteMessageParameters = - createMessageParametersToDeleteAllMessages(onboardingResponse); - return sendAsync(deleteMessageParameters); - } + @Override + public HttpAsyncMessageSendingResult sendMessageToDeleteAllAsync( + OnboardingResponse onboardingResponse) { + final var deleteMessageParameters = + createMessageParametersToDeleteAllMessages(onboardingResponse); + return sendAsync(deleteMessageParameters); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/FetchMessageServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/FetchMessageServiceImpl.java index 52779670..e0f180ee 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/FetchMessageServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/FetchMessageServiceImpl.java @@ -8,53 +8,55 @@ import com.dke.data.agrirouter.api.service.parameters.FetchMessageParameters; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import java.lang.reflect.Type; + import java.util.List; import java.util.Optional; public class FetchMessageServiceImpl implements FetchMessageService, MessageFetcher { - @Override - public Optional> fetch( - OnboardingResponse onboardingResponse, int maxTries, long interval) { - FetchMessageParameters fetchMessageParameters = new FetchMessageParameters(); - fetchMessageParameters.setOnboardingResponse(onboardingResponse); - return fetch(fetchMessageParameters, maxTries, interval); - } - - @Override - public Optional> fetch( - FetchMessageParameters fetchMessageParameters, int maxTries, long interval) { - fetchMessageParameters.validate(); - Optional response = - poll(fetchMessageParameters, new DefaultCancellationToken(maxTries, interval)); - return response.map(this::parseJson); - } - - @Override - public Optional> fetch( - OnboardingResponse onboardingResponse, CancellationToken cancellationToken) { - FetchMessageParameters fetchMessageParameters = new FetchMessageParameters(); - fetchMessageParameters.setOnboardingResponse(onboardingResponse); - return fetch(fetchMessageParameters, cancellationToken); - } - - @Override - public Optional> fetch( - FetchMessageParameters fetchMessageParameters, CancellationToken cancellationToken) { - fetchMessageParameters.validate(); - Optional response = poll(fetchMessageParameters, cancellationToken); - return response.map(this::parseJson); - } - - private List parseJson(String json) { - Type type = new TypeToken>() {}.getType(); - return new Gson().fromJson(json, type); - } - - @Override - public FetchMessageResponse parseJson(byte[] json) { - Type type = new TypeToken() {}.getType(); - return new Gson().fromJson(new String(json), type); - } + @Override + public Optional> fetch( + OnboardingResponse onboardingResponse, int maxTries, long interval) { + var fetchMessageParameters = new FetchMessageParameters(); + fetchMessageParameters.setOnboardingResponse(onboardingResponse); + return fetch(fetchMessageParameters, maxTries, interval); + } + + @Override + public Optional> fetch( + FetchMessageParameters fetchMessageParameters, int maxTries, long interval) { + fetchMessageParameters.validate(); + var response = + poll(fetchMessageParameters, new DefaultCancellationToken(maxTries, interval)); + return response.map(this::parseJson); + } + + @Override + public Optional> fetch( + OnboardingResponse onboardingResponse, CancellationToken cancellationToken) { + var fetchMessageParameters = new FetchMessageParameters(); + fetchMessageParameters.setOnboardingResponse(onboardingResponse); + return fetch(fetchMessageParameters, cancellationToken); + } + + @Override + public Optional> fetch( + FetchMessageParameters fetchMessageParameters, CancellationToken cancellationToken) { + fetchMessageParameters.validate(); + var response = poll(fetchMessageParameters, cancellationToken); + return response.map(this::parseJson); + } + + private List parseJson(String json) { + var type = new TypeToken>() { + }.getType(); + return new Gson().fromJson(json, type); + } + + @Override + public FetchMessageResponse parseJson(byte[] json) { + var type = new TypeToken() { + }.getType(); + return new Gson().fromJson(new String(json), type); + } } 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 96055f28..3692ed89 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,12 +1,10 @@ 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; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.messaging.encoding.MessageDecoder; import com.dke.data.agrirouter.api.service.messaging.http.ListEndpointsService; @@ -18,98 +16,99 @@ import com.dke.data.agrirouter.impl.validation.ResponseValidator; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; + import java.util.Collections; -import java.util.concurrent.CompletableFuture; +@SuppressWarnings("unused") public class ListEndpointsServiceImpl extends EnvironmentalService - implements ListEndpointsService, + implements ListEndpointsService, MessageSender, MessageEncoder, ResponseValidator, MessageDecoder { - private final EncodeMessageService encodeMessageService; + private final EncodeMessageService encodeMessageService; - public ListEndpointsServiceImpl(Environment environment) { - super(environment); - this.encodeMessageService = new EncodeMessageServiceImpl(); - } + public ListEndpointsServiceImpl(Environment environment) { + super(environment); + this.encodeMessageService = new EncodeMessageServiceImpl(); + } - @Override - public String send(ListEndpointsParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - this.sendMessage(sendMessageParameters); - return encodedMessage.getApplicationMessageID(); - } + @Override + public String send(ListEndpointsParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + this.sendMessage(sendMessageParameters); + return encodedMessage.getApplicationMessageID(); + } - @Override - public HttpAsyncMessageSendingResult sendAsync(ListEndpointsParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - final CompletableFuture response = - this.sendMessageAsync(sendMessageParameters); - return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); - } + @Override + public HttpAsyncMessageSendingResult sendAsync(ListEndpointsParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + final var response = + this.sendMessageAsync(sendMessageParameters); + return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); + } - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } - @Override - public String sendMessageToListAllWithExistingRoute(OnboardingResponse onboardingResponse) { - ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); - listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); - listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); - listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); - return send(listEndpointsParameters); - } + @Override + public String sendMessageToListAllWithExistingRoute(OnboardingResponse onboardingResponse) { + var listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(false); + return send(listEndpointsParameters); + } - @Override - public String sendMessageToListAll(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 sendMessageToListAll(OnboardingResponse onboardingResponse) { + var 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 sendMessageToListAllWithExistingRouteAsync( - OnboardingResponse onboardingResponse) { - ListEndpointsParameters listEndpointsParameters = new ListEndpointsParameters(); - listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); - listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); - listEndpointsParameters.setOnboardingResponse(onboardingResponse); - listEndpointsParameters.setUnfilteredList(false); - return sendAsync(listEndpointsParameters); - } + @Override + public HttpAsyncMessageSendingResult sendMessageToListAllWithExistingRouteAsync( + OnboardingResponse onboardingResponse) { + var listEndpointsParameters = new ListEndpointsParameters(); + listEndpointsParameters.setDirection(Endpoints.ListEndpointsQuery.Direction.SEND_RECEIVE); + listEndpointsParameters.setTechnicalMessageType(SystemMessageType.EMPTY); + listEndpointsParameters.setOnboardingResponse(onboardingResponse); + listEndpointsParameters.setUnfilteredList(false); + return sendAsync(listEndpointsParameters); + } - @Override - public HttpAsyncMessageSendingResult sendMessageToListAllAsync( - 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 sendMessageToListAllAsync( + OnboardingResponse onboardingResponse) { + var 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 agrirouter.response.payload.account.Endpoints.ListEndpointsResponse unsafeDecode( - ByteString message) throws InvalidProtocolBufferException { - return agrirouter.response.payload.account.Endpoints.ListEndpointsResponse.parseFrom(message); - } + @Override + public agrirouter.response.payload.account.Endpoints.ListEndpointsResponse unsafeDecode( + ByteString message) throws InvalidProtocolBufferException { + return agrirouter.response.payload.account.Endpoints.ListEndpointsResponse.parseFrom(message); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java index 4f0a4112..a7814e2d 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java @@ -1,9 +1,7 @@ package com.dke.data.agrirouter.impl.messaging.rest; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; import com.dke.data.agrirouter.api.env.Environment; import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; -import com.dke.data.agrirouter.api.messaging.MessageSendingResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.messaging.http.MessageConfirmationService; import com.dke.data.agrirouter.api.service.parameters.MessageConfirmationParameters; @@ -12,47 +10,47 @@ import com.dke.data.agrirouter.impl.messaging.MessageEncoder; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.validation.ResponseValidator; + import java.util.Collections; -import java.util.concurrent.CompletableFuture; public class MessageConfirmationServiceImpl extends EnvironmentalService - implements MessageConfirmationService, MessageSender, MessageEncoder, ResponseValidator { - - private final EncodeMessageService encodeMessageService; - - public MessageConfirmationServiceImpl(Environment environment) { - super(environment); - this.encodeMessageService = new EncodeMessageServiceImpl(); - } - - @Override - public String send(MessageConfirmationParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - MessageSendingResponse response = this.sendMessage(sendMessageParameters); - this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); - return encodedMessage.getApplicationMessageID(); - } - - @Override - public HttpAsyncMessageSendingResult sendAsync(MessageConfirmationParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - CompletableFuture response = - this.sendMessageAsync(sendMessageParameters); - return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); - } - - @Override - public EncodeMessageService getEncodeMessageService() { - return this.encodeMessageService; - } + implements MessageConfirmationService, MessageSender, MessageEncoder, ResponseValidator { + + private final EncodeMessageService encodeMessageService; + + public MessageConfirmationServiceImpl(Environment environment) { + super(environment); + this.encodeMessageService = new EncodeMessageServiceImpl(); + } + + @Override + public String send(MessageConfirmationParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = this.sendMessage(sendMessageParameters); + this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); + return encodedMessage.getApplicationMessageID(); + } + + @Override + public HttpAsyncMessageSendingResult sendAsync(MessageConfirmationParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = + this.sendMessageAsync(sendMessageParameters); + return new HttpAsyncMessageSendingResult(response, encodedMessage.getApplicationMessageID()); + } + + @Override + public EncodeMessageService getEncodeMessageService() { + return this.encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java index 11512e3d..ca87c5ee 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java @@ -6,56 +6,58 @@ import com.dke.data.agrirouter.api.service.parameters.FetchMessageParameters; import com.dke.data.agrirouter.impl.RequestFactory; import com.dke.data.agrirouter.impl.validation.ResponseValidator; +import org.apache.commons.lang3.StringUtils; + import java.util.Objects; import java.util.Optional; -import javax.ws.rs.core.Response; -import org.apache.commons.lang3.StringUtils; -/** Interface to fetch messages for the HTTP implementation by polling the outbox. */ +/** + * Interface to fetch messages for the HTTP implementation by polling the outbox. + */ public interface MessageFetcher extends ResponseValidator, HasLogger { - int MAX_TRIES_BEFORE_FAILURE = 10; - long DEFAULT_INTERVAL = 500; + int MAX_TRIES_BEFORE_FAILURE = 10; + long DEFAULT_INTERVAL = 500; - String EMPTY_CONTENT = "[]"; + String EMPTY_CONTENT = "[]"; - /** - * Poll for new messages using the given parameters. - * - * @param fetchMessageParameters - - * @param cancellationToken Token to manage the whole polling process. - * @return Response from the outbox, if existing. - */ - default Optional poll( - FetchMessageParameters fetchMessageParameters, CancellationToken cancellationToken) { - fetchMessageParameters.validate(); - int nrOfTries = 1; - while (cancellationToken.isNotCancelled()) { - getNativeLogger() - .debug( - "The cancellation token is not cancelled, we have another try. This is try number {}.", - nrOfTries); - Response response = - RequestFactory.securedRequest( - Objects.requireNonNull(fetchMessageParameters.getOnboardingResponse()) - .getConnectionCriteria() - .getCommands(), - fetchMessageParameters - .getOnboardingResponse() - .getAuthentication() - .getCertificate(), - fetchMessageParameters.getOnboardingResponse().getAuthentication().getSecret(), - CertificationType.valueOf( - fetchMessageParameters.getOnboardingResponse().getAuthentication().getType())) - .get(); - this.assertStatusCodeIsOk(response.getStatus()); - String entityContent = response.readEntity(String.class); - if (!StringUtils.equalsIgnoreCase(entityContent, EMPTY_CONTENT)) { - return Optional.of(entityContent); - } - cancellationToken.nextStep(); - cancellationToken.waitIfNotCancelled(); + /** + * Poll for new messages using the given parameters. + * + * @param fetchMessageParameters - + * @param cancellationToken Token to manage the whole polling process. + * @return Response from the outbox, if existing. + */ + default Optional poll( + FetchMessageParameters fetchMessageParameters, CancellationToken cancellationToken) { + fetchMessageParameters.validate(); + var nrOfTries = 1; + while (cancellationToken.isNotCancelled()) { + getNativeLogger() + .debug( + "The cancellation token is not cancelled, we have another try. This is try number {}.", + nrOfTries); + var response = + RequestFactory.securedRequest( + Objects.requireNonNull(fetchMessageParameters.getOnboardingResponse()) + .getConnectionCriteria() + .getCommands(), + fetchMessageParameters + .getOnboardingResponse() + .getAuthentication() + .getCertificate(), + fetchMessageParameters.getOnboardingResponse().getAuthentication().getSecret(), + CertificationType.valueOf( + fetchMessageParameters.getOnboardingResponse().getAuthentication().getType())) + .get(); + this.assertStatusCodeIsOk(response.getStatus()); + var entityContent = response.readEntity(String.class); + if (!StringUtils.equalsIgnoreCase(entityContent, EMPTY_CONTENT)) { + return Optional.of(entityContent); + } + cancellationToken.nextStep(); + cancellationToken.waitIfNotCancelled(); + } + return Optional.empty(); } - return Optional.empty(); - } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageHeaderQueryServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageHeaderQueryServiceImpl.java index 7d532872..d45c22e7 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageHeaderQueryServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageHeaderQueryServiceImpl.java @@ -14,45 +14,45 @@ import com.google.protobuf.InvalidProtocolBufferException; public class MessageHeaderQueryServiceImpl extends EnvironmentalService - implements MessageHeaderQueryService, MessageSender { - - private final MessageQueryHelperService messageQueryHelperService; - - public MessageHeaderQueryServiceImpl(Environment environment) { - super(environment); - messageQueryHelperService = - new MessageQueryHelperService( - new EncodeMessageServiceImpl(), SystemMessageType.DKE_FEED_HEADER_QUERY); - } - - @Override - public String send(MessageQueryParameters parameters) { - return this.messageQueryHelperService.send(parameters); - } - - @Override - public HttpAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { - return messageQueryHelperService.sendAsync(parameters); - } - - @Override - public FeedResponse.HeaderQueryResponse unsafeDecode(ByteString message) - throws InvalidProtocolBufferException { - return FeedResponse.HeaderQueryResponse.parseFrom(message); - } - - @Override - public String sendMessageToQueryAll(OnboardingResponse onboardingResponse) { - MessageQueryParameters messageQueryParameters = - messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); - return send(messageQueryParameters); - } - - @Override - public HttpAsyncMessageSendingResult sendMessageToQueryAllAsync( - OnboardingResponse onboardingResponse) { - MessageQueryParameters messageQueryParameters = - messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); - return sendAsync(messageQueryParameters); - } + implements MessageHeaderQueryService, MessageSender { + + private final MessageQueryHelperService messageQueryHelperService; + + public MessageHeaderQueryServiceImpl(Environment environment) { + super(environment); + messageQueryHelperService = + new MessageQueryHelperService( + new EncodeMessageServiceImpl(), SystemMessageType.DKE_FEED_HEADER_QUERY); + } + + @Override + public String send(MessageQueryParameters parameters) { + return this.messageQueryHelperService.send(parameters); + } + + @Override + public HttpAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { + return messageQueryHelperService.sendAsync(parameters); + } + + @Override + public FeedResponse.HeaderQueryResponse unsafeDecode(ByteString message) + throws InvalidProtocolBufferException { + return FeedResponse.HeaderQueryResponse.parseFrom(message); + } + + @Override + public String sendMessageToQueryAll(OnboardingResponse onboardingResponse) { + var messageQueryParameters = + messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); + return send(messageQueryParameters); + } + + @Override + public HttpAsyncMessageSendingResult sendMessageToQueryAllAsync( + OnboardingResponse onboardingResponse) { + var messageQueryParameters = + messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); + return sendAsync(messageQueryParameters); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageQueryServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageQueryServiceImpl.java index c86ff3bf..dcad60bb 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageQueryServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageQueryServiceImpl.java @@ -15,47 +15,47 @@ import com.google.protobuf.InvalidProtocolBufferException; public class MessageQueryServiceImpl extends EnvironmentalService - implements MessageQueryService, + implements MessageQueryService, MessageSender, MessageDecoder { - private final MessageQueryHelperService messageQueryHelperService; - - public MessageQueryServiceImpl(Environment environment) { - super(environment); - messageQueryHelperService = - new MessageQueryHelperService( - new EncodeMessageServiceImpl(), SystemMessageType.DKE_FEED_MESSAGE_QUERY); - } - - @Override - public String send(MessageQueryParameters parameters) { - return messageQueryHelperService.send(parameters); - } - - @Override - public HttpAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { - return messageQueryHelperService.sendAsync(parameters); - } - - @Override - public FeedResponse.MessageQueryResponse unsafeDecode(ByteString message) - throws InvalidProtocolBufferException { - return FeedResponse.MessageQueryResponse.parseFrom(message); - } - - @Override - public String sendMessageToQueryAll(OnboardingResponse onboardingResponse) { - MessageQueryParameters messageQueryParameters = - messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); - return send(messageQueryParameters); - } - - @Override - public HttpAsyncMessageSendingResult sendMessageToQueryAllAsync( - OnboardingResponse onboardingResponse) { - MessageQueryParameters messageQueryParameters = - messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); - return sendAsync(messageQueryParameters); - } + private final MessageQueryHelperService messageQueryHelperService; + + public MessageQueryServiceImpl(Environment environment) { + super(environment); + messageQueryHelperService = + new MessageQueryHelperService( + new EncodeMessageServiceImpl(), SystemMessageType.DKE_FEED_MESSAGE_QUERY); + } + + @Override + public String send(MessageQueryParameters parameters) { + return messageQueryHelperService.send(parameters); + } + + @Override + public HttpAsyncMessageSendingResult sendAsync(MessageQueryParameters parameters) { + return messageQueryHelperService.sendAsync(parameters); + } + + @Override + public FeedResponse.MessageQueryResponse unsafeDecode(ByteString message) + throws InvalidProtocolBufferException { + return FeedResponse.MessageQueryResponse.parseFrom(message); + } + + @Override + public String sendMessageToQueryAll(OnboardingResponse onboardingResponse) { + var messageQueryParameters = + messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); + return send(messageQueryParameters); + } + + @Override + public HttpAsyncMessageSendingResult sendMessageToQueryAllAsync( + OnboardingResponse onboardingResponse) { + var messageQueryParameters = + messageQueryHelperService.createMessageParametersToQueryAll(onboardingResponse); + return sendAsync(messageQueryParameters); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageSender.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageSender.java index 3b340f02..e06ec91b 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageSender.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageSender.java @@ -5,10 +5,10 @@ import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; import com.dke.data.agrirouter.impl.RequestFactory; import com.dke.data.agrirouter.impl.messaging.MessageBodyCreator; +import jakarta.ws.rs.client.Entity; + import java.util.Objects; import java.util.concurrent.CompletableFuture; -import javax.ws.rs.client.Entity; -import javax.ws.rs.core.Response; /** * Default message sending interface. Used by all REST implementations to send messages to the AR. @@ -16,35 +16,35 @@ */ public interface MessageSender extends MessageBodyCreator { - /** - * Synchronous messages sending. - * - * @param parameters Parameters to send messages. - * @return The actual HTTP response from the AR for this request. This is not the ACK that can be - * fetched afterwards. - */ - default MessageSendingResponse sendMessage(SendMessageParameters parameters) { - Response response = - RequestFactory.securedRequest( - Objects.requireNonNull(parameters.getOnboardingResponse()) - .getConnectionCriteria() - .getMeasures(), - parameters.getOnboardingResponse().getAuthentication().getCertificate(), - parameters.getOnboardingResponse().getAuthentication().getSecret(), - CertificationType.valueOf( - parameters.getOnboardingResponse().getAuthentication().getType())) - .post(Entity.json(this.createSendMessageRequest(parameters))); - return new MessageSendingResponse(response); - } + /** + * Synchronous messages sending. + * + * @param parameters Parameters to send messages. + * @return The actual HTTP response from the AR for this request. This is not the ACK that can be + * fetched afterwards. + */ + default MessageSendingResponse sendMessage(SendMessageParameters parameters) { + var response = + RequestFactory.securedRequest( + Objects.requireNonNull(parameters.getOnboardingResponse()) + .getConnectionCriteria() + .getMeasures(), + parameters.getOnboardingResponse().getAuthentication().getCertificate(), + parameters.getOnboardingResponse().getAuthentication().getSecret(), + CertificationType.valueOf( + parameters.getOnboardingResponse().getAuthentication().getType())) + .post(Entity.json(this.createSendMessageRequest(parameters))); + return new MessageSendingResponse(response); + } - /** - * Asynchronous messages sending. - * - * @param parameters Parameters to send messages. - * @return Response of the server, wrapped within a completable future. - */ - default CompletableFuture sendMessageAsync( - SendMessageParameters parameters) { - return CompletableFuture.supplyAsync(() -> this.sendMessage(parameters)); - } + /** + * Asynchronous messages sending. + * + * @param parameters Parameters to send messages. + * @return Response of the server, wrapped within a completable future. + */ + default CompletableFuture sendMessageAsync( + SendMessageParameters parameters) { + return CompletableFuture.supplyAsync(() -> this.sendMessage(parameters)); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java index f96a5a05..871a2982 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java @@ -4,23 +4,26 @@ import com.dke.data.agrirouter.api.service.messaging.SendMessageService; import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; import com.dke.data.agrirouter.impl.validation.ResponseValidator; + import java.util.concurrent.CompletableFuture; -/** Base class to send messages. */ +/** + * Base class to send messages. + */ public class SendMessageServiceImpl - implements SendMessageService, ResponseValidator, MessageSender { + implements SendMessageService, ResponseValidator, MessageSender { - @Override - public void send(SendMessageParameters sendMessageParameters) { - sendMessageParameters.validate(); - MessageSendingResponse response = this.sendMessage(sendMessageParameters); - this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); - } + @Override + public void send(SendMessageParameters sendMessageParameters) { + sendMessageParameters.validate(); + var response = this.sendMessage(sendMessageParameters); + this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); + } - @Override - public CompletableFuture sendAsync( - SendMessageParameters sendMessageParameters) { - sendMessageParameters.validate(); - return this.sendMessageAsync(sendMessageParameters); - } + @Override + public CompletableFuture sendAsync( + SendMessageParameters sendMessageParameters) { + sendMessageParameters.validate(); + return this.sendMessageAsync(sendMessageParameters); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java index 0f0124c9..3deab657 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java @@ -1,9 +1,7 @@ package com.dke.data.agrirouter.impl.messaging.rest; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; import com.dke.data.agrirouter.api.env.Environment; import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; -import com.dke.data.agrirouter.api.messaging.MessageSendingResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.messaging.http.SetCapabilityService; import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; @@ -12,45 +10,46 @@ import com.dke.data.agrirouter.impl.messaging.MessageEncoder; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.validation.ResponseValidator; + import java.util.Collections; public class SetCapabilityServiceImpl extends EnvironmentalService - implements SetCapabilityService, MessageSender, MessageEncoder, ResponseValidator { - - private final EncodeMessageService encodeMessageService; - - public SetCapabilityServiceImpl(Environment environment) { - super(environment); - this.encodeMessageService = new EncodeMessageServiceImpl(); - } - - @Override - public String send(SetCapabilitiesParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - MessageSendingResponse response = this.sendMessage(sendMessageParameters); - this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); - return encodedMessage.getApplicationMessageID(); - } - - @Override - public HttpAsyncMessageSendingResult sendAsync(SetCapabilitiesParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - return new HttpAsyncMessageSendingResult( - this.sendMessageAsync(sendMessageParameters), encodedMessage.getApplicationMessageID()); - } - - @Override - public EncodeMessageService getEncodeMessageService() { - return encodeMessageService; - } + implements SetCapabilityService, MessageSender, MessageEncoder, ResponseValidator { + + private final EncodeMessageService encodeMessageService; + + public SetCapabilityServiceImpl(Environment environment) { + super(environment); + this.encodeMessageService = new EncodeMessageServiceImpl(); + } + + @Override + public String send(SetCapabilitiesParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = this.sendMessage(sendMessageParameters); + this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); + return encodedMessage.getApplicationMessageID(); + } + + @Override + public HttpAsyncMessageSendingResult sendAsync(SetCapabilitiesParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + return new HttpAsyncMessageSendingResult( + this.sendMessageAsync(sendMessageParameters), encodedMessage.getApplicationMessageID()); + } + + @Override + public EncodeMessageService getEncodeMessageService() { + return encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetSubscriptionServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetSubscriptionServiceImpl.java index 3aae0fb1..2ef532e3 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetSubscriptionServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetSubscriptionServiceImpl.java @@ -1,9 +1,7 @@ package com.dke.data.agrirouter.impl.messaging.rest; -import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage; import com.dke.data.agrirouter.api.env.Environment; import com.dke.data.agrirouter.api.messaging.HttpAsyncMessageSendingResult; -import com.dke.data.agrirouter.api.messaging.MessageSendingResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.messaging.http.SetSubscriptionService; import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; @@ -12,45 +10,46 @@ import com.dke.data.agrirouter.impl.messaging.MessageEncoder; import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl; import com.dke.data.agrirouter.impl.validation.ResponseValidator; + import java.util.Collections; public class SetSubscriptionServiceImpl extends EnvironmentalService - implements SetSubscriptionService, MessageSender, ResponseValidator, MessageEncoder { - - private final EncodeMessageService encodeMessageService; - - public SetSubscriptionServiceImpl(Environment environment) { - super(environment); - this.encodeMessageService = new EncodeMessageServiceImpl(); - } - - @Override - public String send(SetSubscriptionParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - MessageSendingResponse response = this.sendMessage(sendMessageParameters); - this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); - return encodedMessage.getApplicationMessageID(); - } - - @Override - public HttpAsyncMessageSendingResult sendAsync(SetSubscriptionParameters parameters) { - parameters.validate(); - EncodedMessage encodedMessage = this.encode(parameters); - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); - sendMessageParameters.setEncodedMessages( - Collections.singletonList(encodedMessage.getEncodedMessage())); - return new HttpAsyncMessageSendingResult( - this.sendMessageAsync(sendMessageParameters), encodedMessage.getApplicationMessageID()); - } - - @Override - public EncodeMessageService getEncodeMessageService() { - return encodeMessageService; - } + implements SetSubscriptionService, MessageSender, ResponseValidator, MessageEncoder { + + private final EncodeMessageService encodeMessageService; + + public SetSubscriptionServiceImpl(Environment environment) { + super(environment); + this.encodeMessageService = new EncodeMessageServiceImpl(); + } + + @Override + public String send(SetSubscriptionParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + var response = this.sendMessage(sendMessageParameters); + this.assertStatusCodeIsOk(response.getNativeResponse().getStatus()); + return encodedMessage.getApplicationMessageID(); + } + + @Override + public HttpAsyncMessageSendingResult sendAsync(SetSubscriptionParameters parameters) { + parameters.validate(); + var encodedMessage = this.encode(parameters); + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setOnboardingResponse(parameters.getOnboardingResponse()); + sendMessageParameters.setEncodedMessages( + Collections.singletonList(encodedMessage.getEncodedMessage())); + return new HttpAsyncMessageSendingResult( + this.sendMessageAsync(sendMessageParameters), encodedMessage.getApplicationMessageID()); + } + + @Override + public EncodeMessageService getEncodeMessageService() { + return encodeMessageService; + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/AbstractOnboardingService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/AbstractOnboardingService.java index 9c57fbe6..97231a65 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/AbstractOnboardingService.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/AbstractOnboardingService.java @@ -8,75 +8,76 @@ import com.dke.data.agrirouter.impl.EnvironmentalService; import com.dke.data.agrirouter.impl.common.UtcTimeService; import com.google.gson.Gson; -import java.util.Optional; import org.apache.commons.lang3.StringUtils; +import java.util.Optional; + public abstract class AbstractOnboardingService extends EnvironmentalService { - protected AbstractOnboardingService(Environment environment) { - super(environment); - } + protected AbstractOnboardingService(Environment environment) { + super(environment); + } - protected OnboardingRequest getOnboardRequest( - String uuid, - String applicationId, - String certificationVersionId, - String gatewayId, - CertificationType certificationType) { - this.getNativeLogger().info("BEGIN | Creating onboard request."); + protected OnboardingRequest getOnboardRequest( + String uuid, + String applicationId, + String certificationVersionId, + String gatewayId, + CertificationType certificationType) { + this.getNativeLogger().info("BEGIN | Creating onboard request."); - OnboardingRequest onboardingRequest = new OnboardingRequest(); - onboardingRequest.setId(uuid); - onboardingRequest.setApplicationId(applicationId); - onboardingRequest.setCertificationVersionId(certificationVersionId); - onboardingRequest.setGatewayId(gatewayId); - onboardingRequest.setCertificateType(certificationType.getKey()); - onboardingRequest.setUTCTimestamp(UtcTimeService.inThePast(10).toString()); - onboardingRequest.setTimeZone(UtcTimeService.offset()); + var onboardingRequest = new OnboardingRequest(); + onboardingRequest.setId(uuid); + onboardingRequest.setApplicationId(applicationId); + onboardingRequest.setCertificationVersionId(certificationVersionId); + onboardingRequest.setGatewayId(gatewayId); + onboardingRequest.setCertificateType(certificationType.getKey()); + onboardingRequest.setUTCTimestamp(UtcTimeService.inThePast(10).toString()); + onboardingRequest.setTimeZone(UtcTimeService.offset()); - this.getNativeLogger().info("END | Creating onboard request."); - return onboardingRequest; - } + this.getNativeLogger().info("END | Creating onboard request."); + return onboardingRequest; + } - /** - * Generate authorization URL for secured onboarding. - * - * @param parameters - - * @return - - */ - public String generateAuthorizationUrl(AuthorizationRequestParameters parameters) { - this.getNativeLogger().info("BEGIN | Generating authorization URL. | '{}'.", parameters); - String securedOnboardingAuthorizationUrl = - this.environment.getSecuredOnboardingAuthorizationUrl( - parameters.getApplicationId(), - parameters.getResponseType(), - parameters.getState(), - parameters.getRedirectUri()); - this.getNativeLogger().info("END | Generating authorization URL. | '{}'.", parameters); - return securedOnboardingAuthorizationUrl; - } + /** + * Generate authorization URL for secured onboarding. + * + * @param parameters - + * @return - + */ + public String generateAuthorizationUrl(AuthorizationRequestParameters parameters) { + this.getNativeLogger().info("BEGIN | Generating authorization URL. | '{}'.", parameters); + var securedOnboardingAuthorizationUrl = + this.environment.getSecuredOnboardingAuthorizationUrl( + parameters.getApplicationId(), + parameters.getResponseType(), + parameters.getState(), + parameters.getRedirectUri()); + this.getNativeLogger().info("END | Generating authorization URL. | '{}'.", parameters); + return securedOnboardingAuthorizationUrl; + } - /** - * Decored onboarding error and return dedicated error object for further analysis. - * - * @param error - - * @return - - */ - public Optional getOnboardingError(String error) { - this.getNativeLogger().info("BEGIN | Decoding error response. | '{}'.", error); - Optional result = - StringUtils.isBlank(error) ? Optional.empty() : Optional.of(failSafeGsonParsing(error)); - this.getNativeLogger().info("BEGIN | Decoding error response. | '{}'.", error); - return result; - } + /** + * Decored onboarding error and return dedicated error object for further analysis. + * + * @param error - + * @return - + */ + public Optional getOnboardingError(String error) { + this.getNativeLogger().info("BEGIN | Decoding error response. | '{}'.", error); + Optional result = + StringUtils.isBlank(error) ? Optional.empty() : Optional.of(failSafeGsonParsing(error)); + this.getNativeLogger().info("BEGIN | Decoding error response. | '{}'.", error); + return result; + } - private OnboardingError failSafeGsonParsing(String error) { - Gson gson = new Gson(); - try { - return gson.fromJson(error, OnboardingError.class); - } catch (Exception e) { - this.getNativeLogger().error("Error parsing error response. | '{}'.", error); - return OnboardingError.unknownError(error); + private OnboardingError failSafeGsonParsing(String error) { + var gson = new Gson(); + try { + return gson.fromJson(error, OnboardingError.class); + } catch (Exception e) { + this.getNativeLogger().error("Error parsing error response. | '{}'.", error); + return OnboardingError.unknownError(error); + } } - } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/OnboardingServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/OnboardingServiceImpl.java index d04e2cf6..8865ef83 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/OnboardingServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/OnboardingServiceImpl.java @@ -9,69 +9,71 @@ import com.dke.data.agrirouter.api.service.parameters.OnboardingParameters; import com.dke.data.agrirouter.impl.RequestFactory; import com.dke.data.agrirouter.impl.validation.ResponseValidator; +import jakarta.ws.rs.client.Entity; + import java.util.Objects; import java.util.Optional; -import javax.ws.rs.client.Entity; -import javax.ws.rs.core.Response; -/** Internal service implementation. */ +/** + * Internal service implementation. + */ public class OnboardingServiceImpl extends AbstractOnboardingService - implements OnboardingService, ResponseValidator { + implements OnboardingService, ResponseValidator { - public OnboardingServiceImpl(Environment environment) { - super(environment); - } + public OnboardingServiceImpl(Environment environment) { + super(environment); + } - @Override - public OnboardingResponse onboard(OnboardingParameters parameters) { - this.getNativeLogger().info("BEGIN | Onboarding process. | '{}'.", parameters); - parameters.validate(); + @Override + public OnboardingResponse onboard(OnboardingParameters parameters) { + this.getNativeLogger().info("BEGIN | Onboarding process. | '{}'.", parameters); + parameters.validate(); - this.getNativeLogger().debug("Onboard device."); - OnboardingResponse onboardingResponse = - this.onboard( - parameters.getRegistrationCode(), this.createOnboardingRequestBody(parameters)); + this.getNativeLogger().debug("Onboard device."); + var onboardingResponse = + this.onboard( + parameters.getRegistrationCode(), this.createOnboardingRequestBody(parameters)); - this.getNativeLogger().info("END | Onboarding process. | '{}'.", parameters); - return onboardingResponse; - } + this.getNativeLogger().info("END | Onboarding process. | '{}'.", parameters); + return onboardingResponse; + } - @Override - public Optional getLastOnboardingError(String errorResponse) { - return getOnboardingError(errorResponse); - } + @Override + public Optional getLastOnboardingError(String errorResponse) { + return getOnboardingError(errorResponse); + } - private OnboardingRequest createOnboardingRequestBody(OnboardingParameters parameters) { - this.getNativeLogger().info("BEGIN | Create onboarding request. | '{}'.", parameters); - OnboardingRequest onboardRequest = - this.getOnboardRequest( - parameters.getUuid(), - parameters.getApplicationId(), - parameters.getCertificationVersionId(), - parameters.getGatewayId(), - Objects.requireNonNull(parameters.getCertificationType())); - this.getNativeLogger().info("END | Create onboarding request. | '{}'.", parameters); - return onboardRequest; - } + private OnboardingRequest createOnboardingRequestBody(OnboardingParameters parameters) { + this.getNativeLogger().info("BEGIN | Create onboarding request. | '{}'.", parameters); + var onboardRequest = + this.getOnboardRequest( + parameters.getUuid(), + parameters.getApplicationId(), + parameters.getCertificationVersionId(), + parameters.getGatewayId(), + Objects.requireNonNull(parameters.getCertificationType())); + this.getNativeLogger().info("END | Create onboarding request. | '{}'.", parameters); + return onboardRequest; + } - private OnboardingResponse onboard(String registrationCode, OnboardingRequest onboardingRequest) { - this.getNativeLogger() - .info("BEGIN | Onboarding process. | '{}', '{}'.", registrationCode, onboardingRequest); - Response response = - RequestFactory.bearerTokenRequest(this.environment.getOnboardUrl(), registrationCode) - .post(Entity.json(onboardingRequest)); - try { - response.bufferEntity(); - this.assertStatusCodeIsCreated(response.getStatus()); - OnboardingResponse onboardingResponse = response.readEntity(OnboardingResponse.class); + private OnboardingResponse onboard(String registrationCode, OnboardingRequest onboardingRequest) { + this.getNativeLogger() + .info("BEGIN | Onboarding process. | '{}', '{}'.", registrationCode, onboardingRequest); + var response = + RequestFactory.bearerTokenRequest(this.environment.getOnboardUrl(), registrationCode) + .post(Entity.json(onboardingRequest)); + try { + response.bufferEntity(); + this.assertStatusCodeIsCreated(response.getStatus()); + var onboardingResponse = response.readEntity(OnboardingResponse.class); - this.getNativeLogger() - .info("END | Onboarding process. | '{}', '{}'.", registrationCode, onboardingRequest); - return onboardingResponse; - } catch (Exception e) { - throw new OnboardingException(getOnboardingError(response.readEntity(String.class))); - } finally { - response.close(); + this.getNativeLogger() + .info("END | Onboarding process. | '{}', '{}'.", registrationCode, onboardingRequest); + return onboardingResponse; + } catch (Exception e) { + throw new OnboardingException(getOnboardingError(response.readEntity(String.class))); + } finally { + response.close(); + } } - } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/AuthorizationRequestServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/AuthorizationRequestServiceImpl.java index 8faad8f9..09f22a2d 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/AuthorizationRequestServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/AuthorizationRequestServiceImpl.java @@ -11,98 +11,98 @@ import com.dke.data.agrirouter.impl.onboard.OnboardingServiceImpl; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import com.google.gson.Gson; -import java.io.UnsupportedEncodingException; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; + import java.net.MalformedURLException; +import java.net.URI; import java.net.URL; import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Base64; import java.util.HashMap; import java.util.Map; -import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; -/** Internal service implementation. */ +/** + * Internal service implementation. + */ public class AuthorizationRequestServiceImpl extends EnvironmentalService - implements AuthorizationRequestService, ResponseValidator { - - private static final String SIGNATURE_KEY = "signature"; - private static final String STATE_KEY = "state"; - private static final String TOKEN_KEY = "token"; - private static final String ERROR_KEY = "error"; + implements AuthorizationRequestService, ResponseValidator { - private final OnboardingService onboardingService; + private static final String SIGNATURE_KEY = "signature"; + private static final String STATE_KEY = "state"; + private static final String TOKEN_KEY = "token"; + private static final String ERROR_KEY = "error"; - public AuthorizationRequestServiceImpl(Environment environment) { - super(environment); - this.onboardingService = new OnboardingServiceImpl(environment); - } + private final OnboardingService onboardingService; - /** - * This function returns a full URL to send to a browser as Redirect or Link to forward a user to - * the Authorization process - * - * @param authorizationRequestParameters Parameters to build URL from - * @return The RegistrationURL - */ - public String getAuthorizationRequestURL( - AuthorizationRequestParameters authorizationRequestParameters) { - authorizationRequestParameters.validate(); - if (StringUtils.isBlank(authorizationRequestParameters.getState())) { - authorizationRequestParameters.setState(StateIdService.generateState()); + public AuthorizationRequestServiceImpl(Environment environment) { + super(environment); + this.onboardingService = new OnboardingServiceImpl(environment); } - authorizationRequestParameters.setState(authorizationRequestParameters.getState()); - return this.onboardingService.generateAuthorizationUrl(authorizationRequestParameters); - } + /** + * This function returns a full URL to send to a browser as Redirect or Link to forward a user to + * the Authorization process + * + * @param authorizationRequestParameters Parameters to build URL from + * @return The RegistrationURL + */ + public String getAuthorizationRequestURL( + AuthorizationRequestParameters authorizationRequestParameters) { + authorizationRequestParameters.validate(); + if (StringUtils.isBlank(authorizationRequestParameters.getState())) { + authorizationRequestParameters.setState(StateIdService.generateState()); + } + authorizationRequestParameters.setState(authorizationRequestParameters.getState()); - /** - * Decode the Base64-encoded Token and Create a TokenObject with RegCode and AccountId - * - * @param token - - * @return - - */ - @Override - public AuthorizationResponseToken decodeToken(String token) { - byte[] decodedBytes = Base64.getDecoder().decode(token); - String decodedToken = new String(decodedBytes); - return new Gson().fromJson(decodedToken, AuthorizationResponseToken.class); - } + return this.onboardingService.generateAuthorizationUrl(authorizationRequestParameters); + } - @NotNull - public AuthorizationResponse extractAuthorizationResponseFromQuery(String query) { - String[] queryParams = query.split("&"); - Map authorizationResults = new HashMap<>(); - Arrays.stream(queryParams) - .forEach( - s -> { - String[] keyValuePair = s.split("="); - try { - authorizationResults.put( - keyValuePair[0], URLDecoder.decode(keyValuePair[1], "UTF-8")); - } catch (UnsupportedEncodingException e) { - // NOP - } - }); - AuthorizationResponse authorizationResponse = new AuthorizationResponse(); - if (authorizationResults.containsKey(SIGNATURE_KEY)) { - authorizationResponse.setSignature(authorizationResults.get(SIGNATURE_KEY)); + /** + * Decode the Base64-encoded Token and Create a TokenObject with RegCode and AccountId + * + * @param token - + * @return - + */ + @Override + public AuthorizationResponseToken decodeToken(String token) { + var decodedBytes = Base64.getDecoder().decode(token); + var decodedToken = new String(decodedBytes); + return new Gson().fromJson(decodedToken, AuthorizationResponseToken.class); } - authorizationResponse.setState(authorizationResults.get(STATE_KEY)); - authorizationResponse.setToken(authorizationResults.get(TOKEN_KEY)); - authorizationResponse.setError(authorizationResults.get(ERROR_KEY)); - return authorizationResponse; - } - @NotNull - public AuthorizationResponse extractAuthorizationResponse(URL redirectPageUrl) { - return extractAuthorizationResponseFromQuery(redirectPageUrl.getQuery()); - } + @NotNull + public AuthorizationResponse extractAuthorizationResponseFromQuery(String query) { + var queryParams = query.split("&"); + Map authorizationResults = new HashMap<>(); + Arrays.stream(queryParams) + .forEach( + s -> { + var keyValuePair = s.split("="); + authorizationResults.put( + keyValuePair[0], URLDecoder.decode(keyValuePair[1], StandardCharsets.UTF_8)); + }); + var authorizationResponse = new AuthorizationResponse(); + if (authorizationResults.containsKey(SIGNATURE_KEY)) { + authorizationResponse.setSignature(authorizationResults.get(SIGNATURE_KEY)); + } + authorizationResponse.setState(authorizationResults.get(STATE_KEY)); + authorizationResponse.setToken(authorizationResults.get(TOKEN_KEY)); + authorizationResponse.setError(authorizationResults.get(ERROR_KEY)); + return authorizationResponse; + } - public AuthorizationResponse extractAuthorizationResults(String redirectPageUrl) - throws MalformedURLException { - URL url = new URL(redirectPageUrl); + @NotNull + public AuthorizationResponse extractAuthorizationResponse(URL redirectPageUrl) { + return extractAuthorizationResponseFromQuery(redirectPageUrl.getQuery()); + } - return extractAuthorizationResponse(url); - } + public AuthorizationResponse extractAuthorizationResults(String redirectPageUrl) + throws MalformedURLException { + var url = URI.create(redirectPageUrl).toURL(); + + return extractAuthorizationResponse(url); + } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java index b9d916ce..4c5a71b3 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java @@ -1,7 +1,5 @@ package com.dke.data.agrirouter.impl.onboard.secured; -import static java.nio.charset.StandardCharsets.UTF_8; - import com.dke.data.agrirouter.api.dto.onboard.OnboardingError; import com.dke.data.agrirouter.api.dto.onboard.OnboardingRequest; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; @@ -17,145 +15,150 @@ import com.dke.data.agrirouter.impl.onboard.AbstractOnboardingService; import com.dke.data.agrirouter.impl.validation.ResponseValidator; import com.google.gson.Gson; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.MediaType; +import org.apache.commons.codec.DecoderException; +import org.apache.commons.codec.binary.Hex; + import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.Signature; import java.security.SignatureException; import java.util.Objects; import java.util.Optional; -import javax.ws.rs.client.Entity; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import org.apache.commons.codec.DecoderException; -import org.apache.commons.codec.binary.Hex; -/** Internal service implementation. */ +import static java.nio.charset.StandardCharsets.UTF_8; + +/** + * Internal service implementation. + */ public class OnboardingServiceImpl extends AbstractOnboardingService - implements OnboardingService, ResponseValidator { - - private static final String SIGNATURE_ALGORITHM = "SHA256withRSA"; - - public OnboardingServiceImpl(Environment environment) { - super(environment); - } - - @Override - public OnboardingResponse onboard(SecuredOnboardingParameters securedOnboardingParameters) { - securedOnboardingParameters.validate(); - return this.onboard( - securedOnboardingParameters, this.createOnboardingRequestBody(securedOnboardingParameters)); - } - - @Override - public void verify(SecuredOnboardingParameters securedOnboardingParameters) { - securedOnboardingParameters.validate(); - this.verify( - securedOnboardingParameters, this.createOnboardingRequestBody(securedOnboardingParameters)); - } - - @Override - public Optional getLastOnboardingError(String error) { - return getOnboardingError(error); - } - - private OnboardingRequest createOnboardingRequestBody(SecuredOnboardingParameters parameters) { - return this.getOnboardRequest( - parameters.getUuid(), - parameters.getApplicationId(), - parameters.getCertificationVersionId(), - parameters.getGatewayId(), - Objects.requireNonNull(parameters.getCertificationType())); - } - - private OnboardingResponse onboard( - SecuredOnboardingParameters securedOnboardingParameters, - OnboardingRequest onboardingRequest) { - String jsonBody = new Gson().toJson(onboardingRequest).replace("\n", ""); - String encodedSignature = this.createSignature(securedOnboardingParameters, jsonBody); - this.verifySignature( - jsonBody, decodeHex(encodedSignature), securedOnboardingParameters.getPublicKey()); - Response response = - RequestFactory.bearerTokenRequest( - this.environment.getSecuredOnboardUrl(), - securedOnboardingParameters.getRegistrationCode(), - securedOnboardingParameters.getApplicationId(), - encodedSignature) - .post(Entity.entity(jsonBody, MediaType.APPLICATION_JSON_TYPE)); - try { - response.bufferEntity(); - this.assertStatusCodeIsCreated(response.getStatus()); - return response.readEntity(OnboardingResponse.class); - } catch (Exception e) { - throw new OnboardingException(getOnboardingError(response.readEntity(String.class))); - } finally { - response.close(); + implements OnboardingService, ResponseValidator { + + private static final String SIGNATURE_ALGORITHM = "SHA256withRSA"; + + public OnboardingServiceImpl(Environment environment) { + super(environment); + } + + @Override + public OnboardingResponse onboard(SecuredOnboardingParameters securedOnboardingParameters) { + securedOnboardingParameters.validate(); + return this.onboard( + securedOnboardingParameters, this.createOnboardingRequestBody(securedOnboardingParameters)); } - } - - private void verify( - SecuredOnboardingParameters securedOnboardingParameters, - OnboardingRequest onboardingRequest) { - String jsonBody = new Gson().toJson(onboardingRequest).replace("\n", ""); - String encodedSignature = this.createSignature(securedOnboardingParameters, jsonBody); - this.verifySignature( - jsonBody, decodeHex(encodedSignature), securedOnboardingParameters.getPublicKey()); - System.out.println( - "Validation of '" + jsonBody + "' against '" + encodedSignature + "' was successful."); - Response response = - RequestFactory.bearerTokenRequest( - this.environment.getVerifyOnboardRequestUrl(), - securedOnboardingParameters.getRegistrationCode(), - securedOnboardingParameters.getApplicationId(), - encodedSignature) - .post(Entity.entity(jsonBody, MediaType.APPLICATION_JSON_TYPE)); - try { - this.assertStatusCodeIsOk(response.getStatus()); - } catch (UnexpectedHttpStatusException e) { - throw new CouldNotVerifySecuredOnboardingRequestException(e); + + @Override + public void verify(SecuredOnboardingParameters securedOnboardingParameters) { + securedOnboardingParameters.validate(); + this.verify( + securedOnboardingParameters, this.createOnboardingRequestBody(securedOnboardingParameters)); + } + + @Override + public Optional getLastOnboardingError(String error) { + return getOnboardingError(error); } - } - private byte[] decodeHex(String encodedSignature) { - try { - return Hex.decodeHex(encodedSignature.toCharArray()); - } catch (DecoderException e) { - throw new RuntimeException(e); + private OnboardingRequest createOnboardingRequestBody(SecuredOnboardingParameters parameters) { + return this.getOnboardRequest( + parameters.getUuid(), + parameters.getApplicationId(), + parameters.getCertificationVersionId(), + parameters.getGatewayId(), + Objects.requireNonNull(parameters.getCertificationType())); } - } - - private String createSignature( - SecuredOnboardingParameters securedOnboardingParameters, String jsonBody) { - byte[] signature = this.createSignature(jsonBody, securedOnboardingParameters.getPrivateKey()); - this.verifySignature(jsonBody, signature, securedOnboardingParameters.getPublicKey()); - String encodedSignature = Hex.encodeHexString(signature); - this.verifySignature( - jsonBody, decodeHex(encodedSignature), securedOnboardingParameters.getPublicKey()); - return encodedSignature; - } - - byte[] createSignature(String requestBody, String privateKey) { - try { - SecurityKeyCreationService securityKeyCreationService = new SecurityKeyCreationService(); - Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); - signature.initSign(securityKeyCreationService.createPrivateKey(privateKey)); - signature.update(requestBody.getBytes(UTF_8)); - return signature.sign(); - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) { - throw new RuntimeException(e); + + private OnboardingResponse onboard( + SecuredOnboardingParameters securedOnboardingParameters, + OnboardingRequest onboardingRequest) { + var jsonBody = new Gson().toJson(onboardingRequest).replace("\n", ""); + var encodedSignature = this.createSignature(securedOnboardingParameters, jsonBody); + this.verifySignature( + jsonBody, decodeHex(encodedSignature), securedOnboardingParameters.getPublicKey()); + var response = + RequestFactory.bearerTokenRequest( + this.environment.getSecuredOnboardUrl(), + securedOnboardingParameters.getRegistrationCode(), + securedOnboardingParameters.getApplicationId(), + encodedSignature) + .post(Entity.entity(jsonBody, MediaType.APPLICATION_JSON_TYPE)); + try { + response.bufferEntity(); + this.assertStatusCodeIsCreated(response.getStatus()); + return response.readEntity(OnboardingResponse.class); + } catch (Exception e) { + throw new OnboardingException(getOnboardingError(response.readEntity(String.class))); + } finally { + response.close(); + } } - } - - void verifySignature(String requestBody, byte[] signedBytes, String publicKey) { - try { - SecurityKeyCreationService securityKeyCreationService = new SecurityKeyCreationService(); - Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); - signature.initVerify(securityKeyCreationService.createPublicKey(publicKey)); - signature.update(requestBody.getBytes(UTF_8)); - if (!signature.verify(signedBytes)) { - throw new InvalidSignatureException(); - } - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) { - throw new RuntimeException(e); + + @SuppressWarnings("resource") + private void verify( + SecuredOnboardingParameters securedOnboardingParameters, + OnboardingRequest onboardingRequest) { + var jsonBody = new Gson().toJson(onboardingRequest).replace("\n", ""); + var encodedSignature = this.createSignature(securedOnboardingParameters, jsonBody); + this.verifySignature( + jsonBody, decodeHex(encodedSignature), securedOnboardingParameters.getPublicKey()); + System.out.println( + "Validation of '" + jsonBody + "' against '" + encodedSignature + "' was successful."); + var response = + RequestFactory.bearerTokenRequest( + this.environment.getVerifyOnboardRequestUrl(), + securedOnboardingParameters.getRegistrationCode(), + securedOnboardingParameters.getApplicationId(), + encodedSignature) + .post(Entity.entity(jsonBody, MediaType.APPLICATION_JSON_TYPE)); + try { + this.assertStatusCodeIsOk(response.getStatus()); + } catch (UnexpectedHttpStatusException e) { + throw new CouldNotVerifySecuredOnboardingRequestException(e); + } + } + + private byte[] decodeHex(String encodedSignature) { + try { + return Hex.decodeHex(encodedSignature.toCharArray()); + } catch (DecoderException e) { + throw new RuntimeException(e); + } + } + + private String createSignature( + SecuredOnboardingParameters securedOnboardingParameters, String jsonBody) { + var signature = this.createSignature(jsonBody, securedOnboardingParameters.getPrivateKey()); + this.verifySignature(jsonBody, signature, securedOnboardingParameters.getPublicKey()); + var encodedSignature = Hex.encodeHexString(signature); + this.verifySignature( + jsonBody, decodeHex(encodedSignature), securedOnboardingParameters.getPublicKey()); + return encodedSignature; + } + + byte[] createSignature(String requestBody, String privateKey) { + try { + var securityKeyCreationService = new SecurityKeyCreationService(); + var signature = Signature.getInstance(SIGNATURE_ALGORITHM); + signature.initSign(securityKeyCreationService.createPrivateKey(privateKey)); + signature.update(requestBody.getBytes(UTF_8)); + return signature.sign(); + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) { + throw new RuntimeException(e); + } + } + + void verifySignature(String requestBody, byte[] signedBytes, String publicKey) { + try { + var securityKeyCreationService = new SecurityKeyCreationService(); + var signature = Signature.getInstance(SIGNATURE_ALGORITHM); + signature.initVerify(securityKeyCreationService.createPublicKey(publicKey)); + signature.update(requestBody.getBytes(UTF_8)); + if (!signature.verify(signedBytes)) { + throw new InvalidSignatureException(); + } + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) { + throw new RuntimeException(e); + } } - } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/revoke/RevokingServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/revoke/RevokingServiceImpl.java index ad0b9b8b..24e18935 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/revoke/RevokingServiceImpl.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/revoke/RevokingServiceImpl.java @@ -12,83 +12,84 @@ import com.dke.data.agrirouter.impl.SignatureService; import com.dke.data.agrirouter.impl.common.UtcTimeService; import com.google.gson.Gson; -import java.util.Objects; -import java.util.Optional; -import javax.ws.rs.client.Entity; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang3.StringUtils; +import java.util.Objects; +import java.util.Optional; + +@SuppressWarnings("unused") public class RevokingServiceImpl extends EnvironmentalService - implements RevokingService, SignatureService { + implements RevokingService, SignatureService { - public RevokingServiceImpl(Environment environment) { - super(environment); - } + public RevokingServiceImpl(Environment environment) { + super(environment); + } - @Override - public RevokeResponse revoke(RevokeParameters revokeParameters) { - revokeParameters.validate(); - Response response = null; - RevokeRequest revokeRequest = createRevokeRequestBody(revokeParameters); - Gson gson = new Gson(); - String jsonBody = gson.toJson(revokeRequest).replace("\n", ""); - String encodedSignature = this.createSignature(revokeParameters, jsonBody); - this.verifySignature(jsonBody, decodeHex(encodedSignature), revokeParameters.getPublicKey()); + @Override + public RevokeResponse revoke(RevokeParameters revokeParameters) { + revokeParameters.validate(); + Response response = null; + var revokeRequest = createRevokeRequestBody(revokeParameters); + var gson = new Gson(); + var jsonBody = gson.toJson(revokeRequest).replace("\n", ""); + var encodedSignature = this.createSignature(revokeParameters, jsonBody); + this.verifySignature(jsonBody, decodeHex(encodedSignature), revokeParameters.getPublicKey()); - try { - response = - RequestFactory.signedDeleteRequest( - environment.getRevokeUrl(), revokeParameters.getApplicationId(), encodedSignature) - .build("DELETE", Entity.entity(jsonBody, MediaType.APPLICATION_JSON_TYPE)) - .invoke(); + try { + response = + RequestFactory.signedDeleteRequest( + environment.getRevokeUrl(), revokeParameters.getApplicationId(), encodedSignature) + .build("DELETE", Entity.entity(jsonBody, MediaType.APPLICATION_JSON_TYPE)) + .invoke(); - response.bufferEntity(); - RevokeResponse result = RevokeResponse.Filter.valueOf(response.getStatus()); - if (Objects.requireNonNull(result).getKey() == RevokeResponse.SUCCESS.getKey()) { - return result; - } else { - throw new RevokingException(getLastRevokingError(response.readEntity(String.class))); - } - } finally { - if (response != null) { - response.close(); - } + response.bufferEntity(); + var result = RevokeResponse.Filter.valueOf(response.getStatus()); + if (Objects.requireNonNull(result).getKey() == RevokeResponse.SUCCESS.getKey()) { + return result; + } else { + throw new RevokingException(getLastRevokingError(response.readEntity(String.class))); + } + } finally { + if (response != null) { + response.close(); + } + } } - } - private String createSignature(RevokeParameters revokeParameters, String jsonBody) { - byte[] signature = this.createSignature(jsonBody, revokeParameters.getPrivateKey()); - return Hex.encodeHexString(signature); - } + private String createSignature(RevokeParameters revokeParameters, String jsonBody) { + var signature = this.createSignature(jsonBody, revokeParameters.getPrivateKey()); + return Hex.encodeHexString(signature); + } - private RevokeRequest createRevokeRequestBody(RevokeParameters parameters) { - this.getNativeLogger().info("BEGIN | Create revoking request. | '{}'.", parameters); - RevokeRequest revokeRequest = new RevokeRequest(); - revokeRequest.setAccountId(Objects.requireNonNull(parameters.getAccountId())); - revokeRequest.setEndpointIds( - Objects.requireNonNull(parameters.getEndpointIds()).toArray(new String[] {})); - revokeRequest.setUTCTimestamp(UtcTimeService.inThePast(10).toString()); - revokeRequest.setTimeZone(UtcTimeService.offset()); - this.getNativeLogger().info("END | Create revoking request. | '{}'.", parameters); - return revokeRequest; - } + private RevokeRequest createRevokeRequestBody(RevokeParameters parameters) { + this.getNativeLogger().info("BEGIN | Create revoking request. | '{}'.", parameters); + var revokeRequest = new RevokeRequest(); + revokeRequest.setAccountId(Objects.requireNonNull(parameters.getAccountId())); + revokeRequest.setEndpointIds( + Objects.requireNonNull(parameters.getEndpointIds()).toArray(new String[]{})); + revokeRequest.setUTCTimestamp(UtcTimeService.inThePast(10).toString()); + revokeRequest.setTimeZone(UtcTimeService.offset()); + this.getNativeLogger().info("END | Create revoking request. | '{}'.", parameters); + return revokeRequest; + } - public Optional getLastRevokingError(String errorResponse) { - Gson gson = new Gson(); - return StringUtils.isBlank(errorResponse) - ? Optional.empty() - : Optional.of(failSafeGsonParsing(errorResponse)); - } + public Optional getLastRevokingError(String errorResponse) { + return StringUtils.isBlank(errorResponse) + ? Optional.empty() + : Optional.of(failSafeGsonParsing(errorResponse)); + } - private RevokingError failSafeGsonParsing(String error) { - Gson gson = new Gson(); - try { - return gson.fromJson(error, RevokingError.class); - } catch (Exception e) { - this.getNativeLogger().error("Error parsing error response. | '{}'.", error); - return RevokingError.unknownError(error); + private RevokingError failSafeGsonParsing(String error) { + var gson = new Gson(); + try { + return gson.fromJson(error, RevokingError.class); + } catch (Exception e) { + this.getNativeLogger().error("Error parsing error response. | '{}'.", error); + return RevokingError.unknownError(error); + } } - } } diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseValidator.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseValidator.java index 83c8b537..8efcb10e 100644 --- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseValidator.java +++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseValidator.java @@ -7,94 +7,98 @@ import com.dke.data.agrirouter.api.service.HasLogger; import org.apache.http.HttpStatus; -/** Validation of the response, encapsulated using an interface. */ +/** + * Validation of the response, encapsulated using an interface. + */ public interface ResponseValidator extends HasLogger { - /** - * Asserting that the status code is valid. A valid status is in between 200 and 207 (defined by - * HTTP). - * - * @param statusCode The current status code. - */ - default boolean assertStatusCodeIsValid(int statusCode) { - getNativeLogger().debug("Validating status code."); - getNativeLogger().trace("Status code was '{}'", statusCode); - this.checkIfStatusCodeIsError(statusCode); - if (statusCode != HttpStatus.SC_OK - && statusCode != HttpStatus.SC_CREATED - && statusCode != HttpStatus.SC_ACCEPTED - && statusCode != HttpStatus.SC_NON_AUTHORITATIVE_INFORMATION - && statusCode != HttpStatus.SC_NO_CONTENT - && statusCode != HttpStatus.SC_RESET_CONTENT - && statusCode != HttpStatus.SC_PARTIAL_CONTENT - && statusCode != HttpStatus.SC_MULTI_STATUS) { - throw new InvalidHttpStatusException(statusCode); + /** + * Asserting that the status code is valid. A valid status is in between 200 and 207 (defined by + * HTTP). + * + * @param statusCode The current status code. + */ + @SuppressWarnings("UnusedReturnValue") + default boolean assertStatusCodeIsValid(int statusCode) { + getNativeLogger().debug("Validating status code."); + getNativeLogger().trace("Status code was '{}'", statusCode); + this.checkIfStatusCodeIsError(statusCode); + if (statusCode != HttpStatus.SC_OK + && statusCode != HttpStatus.SC_CREATED + && statusCode != HttpStatus.SC_ACCEPTED + && statusCode != HttpStatus.SC_NON_AUTHORITATIVE_INFORMATION + && statusCode != HttpStatus.SC_NO_CONTENT + && statusCode != HttpStatus.SC_RESET_CONTENT + && statusCode != HttpStatus.SC_PARTIAL_CONTENT + && statusCode != HttpStatus.SC_MULTI_STATUS) { + throw new InvalidHttpStatusException(statusCode); + } + return true; } - return true; - } - /** - * Asserting that the status code is HTTP OK. - * - * @param statusCode The current status code. - */ - @SuppressWarnings("UnusedReturnValue") - default boolean assertStatusCodeIsOk(int statusCode) { - getNativeLogger().debug("Validating status code."); - getNativeLogger().trace("Status code was '{}'", statusCode); - this.checkIfStatusCodeIsError(statusCode); - if (statusCode != HttpStatus.SC_OK) { - throw new InvalidHttpStatusException(statusCode); + /** + * Asserting that the status code is HTTP OK. + * + * @param statusCode The current status code. + */ + @SuppressWarnings("UnusedReturnValue") + default boolean assertStatusCodeIsOk(int statusCode) { + getNativeLogger().debug("Validating status code."); + getNativeLogger().trace("Status code was '{}'", statusCode); + this.checkIfStatusCodeIsError(statusCode); + if (statusCode != HttpStatus.SC_OK) { + throw new InvalidHttpStatusException(statusCode); + } + return true; } - return true; - } - /** - * Asserting that the status code is HTTP CREATED. - * - * @param statusCode The current status code. - */ - default boolean assertStatusCodeIsCreated(int statusCode) { - getNativeLogger().debug("Validating status code."); - getNativeLogger().trace("Status code was '{}'", statusCode); - this.checkIfStatusCodeIsError(statusCode); - if (statusCode != HttpStatus.SC_CREATED) { - throw new InvalidHttpStatusException(statusCode); + /** + * Asserting that the status code is HTTP CREATED. + * + * @param statusCode The current status code. + */ + default boolean assertStatusCodeIsCreated(int statusCode) { + getNativeLogger().debug("Validating status code."); + getNativeLogger().trace("Status code was '{}'", statusCode); + this.checkIfStatusCodeIsError(statusCode); + if (statusCode != HttpStatus.SC_CREATED) { + throw new InvalidHttpStatusException(statusCode); + } + return true; } - return true; - } - /** - * Asserting that the status code is HTTP BAD REQUEST. - * - * @param statusCode The current status code. - */ - default boolean assertStatusCodeIsBadRequest(int statusCode) { - getNativeLogger().debug("Validating status code."); - getNativeLogger().trace("Status code was '{}'", statusCode); - this.checkIfStatusCodeIsError(statusCode); - if (statusCode != HttpStatus.SC_BAD_REQUEST) { - throw new InvalidHttpStatusException(statusCode); + /** + * Asserting that the status code is HTTP BAD REQUEST. + * + * @param statusCode The current status code. + */ + @SuppressWarnings("unused") + default boolean assertStatusCodeIsBadRequest(int statusCode) { + getNativeLogger().debug("Validating status code."); + getNativeLogger().trace("Status code was '{}'", statusCode); + this.checkIfStatusCodeIsError(statusCode); + if (statusCode != HttpStatus.SC_BAD_REQUEST) { + throw new InvalidHttpStatusException(statusCode); + } + return true; } - return true; - } - /** - * Will check if the status code is an error. If there will an error a business exception will - * rise. - * - * @param statusCode The current response. - */ - default void checkIfStatusCodeIsError(int statusCode) { - getNativeLogger().debug("Checking if the response is an error."); - if (statusCode == HttpStatus.SC_NOT_FOUND) { - throw new InvalidUrlForRequestException(); + /** + * Will check if the status code is an error. If there will an error a business exception will + * rise. + * + * @param statusCode The current response. + */ + default void checkIfStatusCodeIsError(int statusCode) { + getNativeLogger().debug("Checking if the response is an error."); + if (statusCode == HttpStatus.SC_NOT_FOUND) { + throw new InvalidUrlForRequestException(); + } + if (statusCode == HttpStatus.SC_UNAUTHORIZED) { + throw new UnauthorizedRequestException(); + } + if (statusCode == HttpStatus.SC_FORBIDDEN) { + throw new ForbiddenRequestException(); + } } - if (statusCode == HttpStatus.SC_UNAUTHORIZED) { - throw new UnauthorizedRequestException(); - } - if (statusCode == HttpStatus.SC_FORBIDDEN) { - throw new ForbiddenRequestException(); - } - } } diff --git a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/common/signing/PrivateKeyCreationServiceTest.java b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/common/signing/PrivateKeyCreationServiceTest.java index a4f29939..a1110fab 100644 --- a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/common/signing/PrivateKeyCreationServiceTest.java +++ b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/common/signing/PrivateKeyCreationServiceTest.java @@ -9,54 +9,56 @@ class PrivateKeyCreationServiceTest { - @Test - void givenValidPrivateKeyCreatePrivateKeyShouldReturnValidResults() { - String privateKey = - "-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDYngadA9rWUDCoNQ/orXTId1W3QRrQ7ufLB8CDDY3g7w5hzBDhgPpavZlNrLaGqCzjDzYmSq5Km2KjAvAoGUwYeIhv7E1mK5LUL96PWujMag/FwHhUC3yXfjcyNLrM/zUPPL8dzITyRbdA7zANU2jYOrY13vlEpkP/AImoKDz9iRB6lJhT/JvdUo8TMH7JHNDW6LE4kuWV5VrUzu3fbpg20FjxK23fvA6lA0P+h+7xhL29/D54PfSnlK7jSu7c55L2EwxmtqMLn+ZEuV2bGsO5t7wmo3A9kB40atZJj/3+gFO2kuu/gXEgMQV2tRLU5pu0VhWz9HaJCGd23aGcZeYNAgMBAAECggEALLf24oxMraixWtBVf/HrJYVpRyMkH5TqekIX7pYqP5DqdasUoxEm3fu9PclVhxgJ6DgYNDB/qbxJUSDGpmiOipC7jeuJEPoW3kIhnpOkcqrEpcz1qlgSuQ2f5Hf5Rl+7OvGN/N9fZMqaqceXMnEROG5qdlWZPSBb8jVQtcvUx3wWaFsOOkHqZ4py0bTRLsZiUA3fmbdmNs2dE5CRutCkhZtnHRPZMvb2bxdxQlPm+NlpndCT63mThnry4ohC2bWNOqaaOkeQTwKYTzvu+rej5cGMni/6z/WxnhjID8eisB5ucPwKvWc2IOXBTjlKYB95jQkkQTeCmT/jLn4ZpmP3kQKBgQD6HD/cWB9Fl9ULbvtTBTtJxbFHZNO/j32Qlhw4fPd2b2eEleqMTb22xAeF20vq4xgVcsAr4tvG+boVAy+uZNs5mRVztEtP9WCdOryF/gEVfCG9J77RrkFXSA+puB40nY0IKfQ0ey4g9pY2ZMko9vNTsxKU/J9UONJjromemcETeQKBgQDdt95oCqiZcapjtVHZSLp2V3p1jozic7zfk16bGGFT73fNQt+oGXNH4SzH6j1Oad2GhiJMAnd5hnzsNpNSN80/JL1l0ac/ZcbOKk+Gkc1F4V9X52P7FAOs+epXbKg5iCKA3ztpN110W4WraaGAnf0WvggS74PpaT6bQwUiYe5ONQKBgQCKTbTCk7g3M46LlANGFU6DrN4rLIYrF53HpjpUwkXVKCWGG6BnlVWjCyNd0bZZXNqkgZ/ipMADd3R+yhRDy2GuqAhEwx4iSP3z89bsAVl4F/xQLPpH2KQpL5/5qeaKEdU6/ngbzUHk2HaX/YN/M4+6aPuNh2RTnlg45vsSyNMLgQKBgQDOgSK05LiDskpw88B4EDUbY/663zp48DNKSYgkDGEaPD/o/hAyEQI+QIvk51aSYifh06y9/s4ocgqIN4yfVznjReThoJOViMXR37aSL9pw66hRx0Jn6AxEX8DUDG/ipdj9Du3W4ao5ZcTqEkhJ8tx3Aiei+1JxY4TcN1/g1jWOwQKBgQCSqsUdmttSgb+9Jvp2ciyi+HwPEmuHGRyNSWHXZ6G4zwPDlDJ3s6Tbed5ChqBdFuB+jL9tezfxtJzvfaPmsouZi0h3epXWlG0FxB0D9CLQNO5IAvmJTZft4tF7AD1fXNIvPACqrV23rISFpIhmlQFBB/hpvp02eUuDwkdQcGSKag==-----END PRIVATE KEY-----"; - SecurityKeyCreationService privateKeyCreationService = new SecurityKeyCreationService(); - Assertions.assertNotNull(privateKeyCreationService.createPrivateKey(privateKey)); - } - - @Test - void givenInvalidPrivateKeyCreatePrivateKeyShouldThrowException() { - String invalidPrivateKey = - "-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxxxxoD54PfSnlK7jSu7c55L2EwxmtqMLn+ZEuV2bGsO5t7wmo3A9kB40atZJj/3+gFO2kuu/gXEgMQV2tRLU5pu0VhWz9HaJCGd23aGcZeYNAgMBAAECggEALLf24oxMraixWtBVf/HrJYVpRyMkH5TqekIX7pYqP5DqdasUoxEm3fu9PclVhxgJ6DgYNDB/qbxJUSDGpmiOipC7jeuJEPoW3kIhnpOkcqrEpcz1qlgSuQ2f5Hf5Rl+7OvGN/N9fZMqaqceXMnEROG5qdlWZPSBb8jVQtcvUx3wWaFsOOkHqZ4py0bTRLsZiUA3fmbdmNs2dE5CRutCkhZtnHRPZMvb2bxdxQlPm+NlpndCT63mThnry4ohC2bWNOqaaOkeQTwKYTzvu+rej5cGMni/6z/WxnhjID8eisB5ucPwKvWc2IOXBTjlKYB95jQkkQTeCmT/jLn4ZpmP3kQKBgQD6HD/cWB9Fl9ULbvtTBTtJxbFHZNO/j32Qlhw4fPd2b2eEleqMTb22xAeF20vq4xgVcsAr4tvG+boVAy+uZNs5mRVztEtP9WCdOryF/gEVfCG9J77RrkFXSA+puB40nY0IKfQ0ey4g9pY2ZMko9vNTsxKU/J9UONJjromemcETeQKBgQDdt95oCqiZcapjtVHZSLp2V3p1jozic7zfk16bGGFT73fNQt+oGXNH4SzH6j1Oad2GhiJMAnd5hnzsNpNSN80/JL1l0ac/ZcbOKk+Gkc1F4V9X52P7FAOs+epXbKg5iCKA3ztpN110W4WraaGAnf0WvggS74PpaT6bQwUiYe5ONQKBgQCKTbTCk7g3M46LlANGFU6DrN4rLIYrF53HpjpUwkXVKCWGG6BnlVWjCyNd0bZZXNqkgZ/ipMADd3R+yhRDy2GuqAhEwx4iSP3z89bsAVl4F/xQLPpH2KQpL5/5qeaKEdU6/ngbzUHk2HaX/YN/M4+6aPuNh2RTnlg45vsSyNMLgQKBgQDOgSK05LiDskpw88B4EDUbY/663zp48DNKSYgkDGEaPD/o/hAyEQI+QIvk51aSYifh06y9/s4ocgqIN4yfVznjReThoJOViMXR37aSL9pw66hRx0Jn6AxEX8DUDG/ipdj9Du3W4ao5ZcTqEkhJ8tx3Aiei+1JxY4TcN1/g1jWOwQKBgQCSqsUdmttSgb+9Jvp2ciyi+HwPEmuHGRyNSWHXZ6G4zwPDlDJ3s6Tbed5ChqBdFuB+jL9tezfxtJzvfaPmsouZi0h3epXWlG0FxB0D9CLQNO5IAvmJTZft4tF7AD1fXNIvPACqrV23rISFpIhmlQFBB/hpvp02eUuDwkdQcGSKag==-----END PRIVATE KEY-----"; - SecurityKeyCreationService privateKeyCreationService = new SecurityKeyCreationService(); - Assertions.assertThrows( - CouldNotCreatePrivateKeyException.class, - () -> privateKeyCreationService.createPrivateKey(invalidPrivateKey)); - } - - @Test - void checkSignatureCanBeVerified() { - String privateKey = - "-----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDMIkcJfcjTUm1wLwbXBcGoEn8vhOA6ew5fsJ+CNgo21BeNTgvOXzhZrwMZYuiAXFpmV4kukWjyLchFE5jKk6yPkmsPQXVnOWqYMQO6d/sutHBMtjQ55vOCwqDTR4rm2dHrs/Qg/PTBoH3Dcr6WKQNNUYMZNXzED2AC/CRkXjME0oMq7YzgkVxdwhftIrgmUUUCRgHngM2PPyNsmZckvXngkqWOr9eUCsbg2NzTet3shHE8eW5yEBXVeAvT3On1WoQvISOe1ULWFOZ6qZ1NDbwwEmZWwUr5Q33fGplaZCnohvPf+5IfEi+M4/pjnOVFC4oSSZCFF5Q7++bHKxsx18LXAgMBAAECggEADdLMaLIh5V2Rl6U3m1wCbzVBc6BV5t/qa0R0qMasDmZyadk9J25/TGNznEZ8ZCTc4k1PNt4V80BybWsUT7OMXfSWV2QhZSoYM9It5HS3h8QkTq2P/9PJ7bLsXSJdH6DkfEelYo5+rJYHrjKZAWYpmRTKAe0DU+uOnuUgOcO/RLY1mp5S15lJuCy2jwQml8g043/A4Hcjql5co2jT2Pxv+t9o6Y2wVbRUNGXgz63wGcny08AUmiGuH3fhB4RDHrOC/TKnJVovxF6nmcoxduC37VLywFRIt5Kgy4sweN9ezHrlRRnxekG6XcRfTzfhbXet0mE1i9nU5FlFZ4bm2Kpa8QKBgQD8dEXFKsZnUCaJNaLzFZpXihr+fmgIPAk558Qm+1dxDqKolfY204ZkuZduHrkSH2MWOD69+Ej1UoygQH6Dzn1MCMxEUQadpY/F8wCkq+30tMVvzsOH647tBSVLGdIpae6GaNOksyLKnzipCX7GCHIh9ej9iXGoph/G1bDPiVTRJQKBgQDPAEOOm5jP0g2dCbcNopupiPl/w4s1JPJdPtYsViUG5gvrYVQcdfOaS5dtO1jwnoThyGqpbRI3Zzs5xZgpTDTqlP1J5ys4e0DyW3x7gm0HZIXVsXa4y0qjL1S2p/LQZR3sBgarEurb5rRepJOHVeqNBmXipAE/j/d7JxsYk1R5SwKBgQC2jt5lViljTHKRhlfvsQ+LfjNHFeHlEoUZeqA+EEOLXioB/2+s9gmZjRwUZeMvV8Mvrjyw43re7HME756NciTpdvM/89f06GSvoKo2ap4I9zBPShXblFwmyjHNvT5c9F2olOV3lJL0M2+lzVf/nNvr8wgpT9sBOiCAiMbzTTwogQKBgGsFTOg/A9t2Uzl8m1p+VpJpUe0/UQqR5ohVA2/6vbv6VfFE6bKpPN/p8wkzZMFKg5MkBhlAXemtAo7U3N2FG9qoWufJj6vs9WAX8pz8ipgG3bbkwGe8GwORZe/llwEtNjIfz3TFHA3DEj/YQLn4roJo62Yoush9C0ttpXGoQkVPAoGBAN3EGJSmnb6vm3Vt6PyL8FfcBWM4m5YiUJxPIH+sVVNfNr3TSGqX3oOIoLTVShMq+guqtnTnLO8Cnmz9h8EkVMTNeHXJyY2WxHysnYaTbJu+pZSJQhuXs9ILFLFXsJnOZWFkrhTmytikNYFfBcBgybYoeGp12DaLiZkKOaKrxCMy-----END PRIVATE KEY-----"; - String publicKey = - "-----BEGIN PUBLIC KEY-----\n" - + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzCJHCX3I01JtcC8G1wXB\n" - + "qBJ/L4TgOnsOX7CfgjYKNtQXjU4Lzl84Wa8DGWLogFxaZleJLpFo8i3IRROYypOs\n" - + "j5JrD0F1ZzlqmDEDunf7LrRwTLY0OebzgsKg00eK5tnR67P0IPz0waB9w3K+likD\n" - + "TVGDGTV8xA9gAvwkZF4zBNKDKu2M4JFcXcIX7SK4JlFFAkYB54DNjz8jbJmXJL15\n" - + "4JKljq/XlArG4Njc03rd7IRxPHluchAV1XgL09zp9VqELyEjntVC1hTmeqmdTQ28\n" - + "MBJmVsFK+UN93xqZWmQp6Ibz3/uSHxIvjOP6Y5zlRQuKEkmQhReUO/vmxysbMdfC\n" - + "1wIDAQAB\n" - + "-----END PUBLIC KEY-----"; - - RevokeRequest revokeRequest = new RevokeRequest(); - revokeRequest.setAccountId("dflakjfafd"); - revokeRequest.setEndpointIds(new String[] {"adkfjlaf", "afdlakfdlakdfl"}); - revokeRequest.setTimeZone("UTC+5"); - revokeRequest.setUTCTimestamp("2019-05-18T23:03:21"); - - Gson gson = new Gson(); - String input = gson.toJson(revokeRequest); - - class SignatureTester implements SignatureService {} - - SignatureTester signatureTester = new SignatureTester(); - - byte[] signature = signatureTester.createSignature(input, privateKey); - - signatureTester.verifySignature(input, signature, publicKey); - } + @Test + void givenValidPrivateKeyCreatePrivateKeyShouldReturnValidResults() { + var privateKey = + "-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDYngadA9rWUDCoNQ/orXTId1W3QRrQ7ufLB8CDDY3g7w5hzBDhgPpavZlNrLaGqCzjDzYmSq5Km2KjAvAoGUwYeIhv7E1mK5LUL96PWujMag/FwHhUC3yXfjcyNLrM/zUPPL8dzITyRbdA7zANU2jYOrY13vlEpkP/AImoKDz9iRB6lJhT/JvdUo8TMH7JHNDW6LE4kuWV5VrUzu3fbpg20FjxK23fvA6lA0P+h+7xhL29/D54PfSnlK7jSu7c55L2EwxmtqMLn+ZEuV2bGsO5t7wmo3A9kB40atZJj/3+gFO2kuu/gXEgMQV2tRLU5pu0VhWz9HaJCGd23aGcZeYNAgMBAAECggEALLf24oxMraixWtBVf/HrJYVpRyMkH5TqekIX7pYqP5DqdasUoxEm3fu9PclVhxgJ6DgYNDB/qbxJUSDGpmiOipC7jeuJEPoW3kIhnpOkcqrEpcz1qlgSuQ2f5Hf5Rl+7OvGN/N9fZMqaqceXMnEROG5qdlWZPSBb8jVQtcvUx3wWaFsOOkHqZ4py0bTRLsZiUA3fmbdmNs2dE5CRutCkhZtnHRPZMvb2bxdxQlPm+NlpndCT63mThnry4ohC2bWNOqaaOkeQTwKYTzvu+rej5cGMni/6z/WxnhjID8eisB5ucPwKvWc2IOXBTjlKYB95jQkkQTeCmT/jLn4ZpmP3kQKBgQD6HD/cWB9Fl9ULbvtTBTtJxbFHZNO/j32Qlhw4fPd2b2eEleqMTb22xAeF20vq4xgVcsAr4tvG+boVAy+uZNs5mRVztEtP9WCdOryF/gEVfCG9J77RrkFXSA+puB40nY0IKfQ0ey4g9pY2ZMko9vNTsxKU/J9UONJjromemcETeQKBgQDdt95oCqiZcapjtVHZSLp2V3p1jozic7zfk16bGGFT73fNQt+oGXNH4SzH6j1Oad2GhiJMAnd5hnzsNpNSN80/JL1l0ac/ZcbOKk+Gkc1F4V9X52P7FAOs+epXbKg5iCKA3ztpN110W4WraaGAnf0WvggS74PpaT6bQwUiYe5ONQKBgQCKTbTCk7g3M46LlANGFU6DrN4rLIYrF53HpjpUwkXVKCWGG6BnlVWjCyNd0bZZXNqkgZ/ipMADd3R+yhRDy2GuqAhEwx4iSP3z89bsAVl4F/xQLPpH2KQpL5/5qeaKEdU6/ngbzUHk2HaX/YN/M4+6aPuNh2RTnlg45vsSyNMLgQKBgQDOgSK05LiDskpw88B4EDUbY/663zp48DNKSYgkDGEaPD/o/hAyEQI+QIvk51aSYifh06y9/s4ocgqIN4yfVznjReThoJOViMXR37aSL9pw66hRx0Jn6AxEX8DUDG/ipdj9Du3W4ao5ZcTqEkhJ8tx3Aiei+1JxY4TcN1/g1jWOwQKBgQCSqsUdmttSgb+9Jvp2ciyi+HwPEmuHGRyNSWHXZ6G4zwPDlDJ3s6Tbed5ChqBdFuB+jL9tezfxtJzvfaPmsouZi0h3epXWlG0FxB0D9CLQNO5IAvmJTZft4tF7AD1fXNIvPACqrV23rISFpIhmlQFBB/hpvp02eUuDwkdQcGSKag==-----END PRIVATE KEY-----"; + var privateKeyCreationService = new SecurityKeyCreationService(); + Assertions.assertNotNull(privateKeyCreationService.createPrivateKey(privateKey)); + } + + @Test + void givenInvalidPrivateKeyCreatePrivateKeyShouldThrowException() { + var invalidPrivateKey = + "-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxxxxoD54PfSnlK7jSu7c55L2EwxmtqMLn+ZEuV2bGsO5t7wmo3A9kB40atZJj/3+gFO2kuu/gXEgMQV2tRLU5pu0VhWz9HaJCGd23aGcZeYNAgMBAAECggEALLf24oxMraixWtBVf/HrJYVpRyMkH5TqekIX7pYqP5DqdasUoxEm3fu9PclVhxgJ6DgYNDB/qbxJUSDGpmiOipC7jeuJEPoW3kIhnpOkcqrEpcz1qlgSuQ2f5Hf5Rl+7OvGN/N9fZMqaqceXMnEROG5qdlWZPSBb8jVQtcvUx3wWaFsOOkHqZ4py0bTRLsZiUA3fmbdmNs2dE5CRutCkhZtnHRPZMvb2bxdxQlPm+NlpndCT63mThnry4ohC2bWNOqaaOkeQTwKYTzvu+rej5cGMni/6z/WxnhjID8eisB5ucPwKvWc2IOXBTjlKYB95jQkkQTeCmT/jLn4ZpmP3kQKBgQD6HD/cWB9Fl9ULbvtTBTtJxbFHZNO/j32Qlhw4fPd2b2eEleqMTb22xAeF20vq4xgVcsAr4tvG+boVAy+uZNs5mRVztEtP9WCdOryF/gEVfCG9J77RrkFXSA+puB40nY0IKfQ0ey4g9pY2ZMko9vNTsxKU/J9UONJjromemcETeQKBgQDdt95oCqiZcapjtVHZSLp2V3p1jozic7zfk16bGGFT73fNQt+oGXNH4SzH6j1Oad2GhiJMAnd5hnzsNpNSN80/JL1l0ac/ZcbOKk+Gkc1F4V9X52P7FAOs+epXbKg5iCKA3ztpN110W4WraaGAnf0WvggS74PpaT6bQwUiYe5ONQKBgQCKTbTCk7g3M46LlANGFU6DrN4rLIYrF53HpjpUwkXVKCWGG6BnlVWjCyNd0bZZXNqkgZ/ipMADd3R+yhRDy2GuqAhEwx4iSP3z89bsAVl4F/xQLPpH2KQpL5/5qeaKEdU6/ngbzUHk2HaX/YN/M4+6aPuNh2RTnlg45vsSyNMLgQKBgQDOgSK05LiDskpw88B4EDUbY/663zp48DNKSYgkDGEaPD/o/hAyEQI+QIvk51aSYifh06y9/s4ocgqIN4yfVznjReThoJOViMXR37aSL9pw66hRx0Jn6AxEX8DUDG/ipdj9Du3W4ao5ZcTqEkhJ8tx3Aiei+1JxY4TcN1/g1jWOwQKBgQCSqsUdmttSgb+9Jvp2ciyi+HwPEmuHGRyNSWHXZ6G4zwPDlDJ3s6Tbed5ChqBdFuB+jL9tezfxtJzvfaPmsouZi0h3epXWlG0FxB0D9CLQNO5IAvmJTZft4tF7AD1fXNIvPACqrV23rISFpIhmlQFBB/hpvp02eUuDwkdQcGSKag==-----END PRIVATE KEY-----"; + var privateKeyCreationService = new SecurityKeyCreationService(); + Assertions.assertThrows( + CouldNotCreatePrivateKeyException.class, + () -> privateKeyCreationService.createPrivateKey(invalidPrivateKey)); + } + + @Test + void checkSignatureCanBeVerified() { + var privateKey = + "-----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDMIkcJfcjTUm1wLwbXBcGoEn8vhOA6ew5fsJ+CNgo21BeNTgvOXzhZrwMZYuiAXFpmV4kukWjyLchFE5jKk6yPkmsPQXVnOWqYMQO6d/sutHBMtjQ55vOCwqDTR4rm2dHrs/Qg/PTBoH3Dcr6WKQNNUYMZNXzED2AC/CRkXjME0oMq7YzgkVxdwhftIrgmUUUCRgHngM2PPyNsmZckvXngkqWOr9eUCsbg2NzTet3shHE8eW5yEBXVeAvT3On1WoQvISOe1ULWFOZ6qZ1NDbwwEmZWwUr5Q33fGplaZCnohvPf+5IfEi+M4/pjnOVFC4oSSZCFF5Q7++bHKxsx18LXAgMBAAECggEADdLMaLIh5V2Rl6U3m1wCbzVBc6BV5t/qa0R0qMasDmZyadk9J25/TGNznEZ8ZCTc4k1PNt4V80BybWsUT7OMXfSWV2QhZSoYM9It5HS3h8QkTq2P/9PJ7bLsXSJdH6DkfEelYo5+rJYHrjKZAWYpmRTKAe0DU+uOnuUgOcO/RLY1mp5S15lJuCy2jwQml8g043/A4Hcjql5co2jT2Pxv+t9o6Y2wVbRUNGXgz63wGcny08AUmiGuH3fhB4RDHrOC/TKnJVovxF6nmcoxduC37VLywFRIt5Kgy4sweN9ezHrlRRnxekG6XcRfTzfhbXet0mE1i9nU5FlFZ4bm2Kpa8QKBgQD8dEXFKsZnUCaJNaLzFZpXihr+fmgIPAk558Qm+1dxDqKolfY204ZkuZduHrkSH2MWOD69+Ej1UoygQH6Dzn1MCMxEUQadpY/F8wCkq+30tMVvzsOH647tBSVLGdIpae6GaNOksyLKnzipCX7GCHIh9ej9iXGoph/G1bDPiVTRJQKBgQDPAEOOm5jP0g2dCbcNopupiPl/w4s1JPJdPtYsViUG5gvrYVQcdfOaS5dtO1jwnoThyGqpbRI3Zzs5xZgpTDTqlP1J5ys4e0DyW3x7gm0HZIXVsXa4y0qjL1S2p/LQZR3sBgarEurb5rRepJOHVeqNBmXipAE/j/d7JxsYk1R5SwKBgQC2jt5lViljTHKRhlfvsQ+LfjNHFeHlEoUZeqA+EEOLXioB/2+s9gmZjRwUZeMvV8Mvrjyw43re7HME756NciTpdvM/89f06GSvoKo2ap4I9zBPShXblFwmyjHNvT5c9F2olOV3lJL0M2+lzVf/nNvr8wgpT9sBOiCAiMbzTTwogQKBgGsFTOg/A9t2Uzl8m1p+VpJpUe0/UQqR5ohVA2/6vbv6VfFE6bKpPN/p8wkzZMFKg5MkBhlAXemtAo7U3N2FG9qoWufJj6vs9WAX8pz8ipgG3bbkwGe8GwORZe/llwEtNjIfz3TFHA3DEj/YQLn4roJo62Yoush9C0ttpXGoQkVPAoGBAN3EGJSmnb6vm3Vt6PyL8FfcBWM4m5YiUJxPIH+sVVNfNr3TSGqX3oOIoLTVShMq+guqtnTnLO8Cnmz9h8EkVMTNeHXJyY2WxHysnYaTbJu+pZSJQhuXs9ILFLFXsJnOZWFkrhTmytikNYFfBcBgybYoeGp12DaLiZkKOaKrxCMy-----END PRIVATE KEY-----"; + var publicKey = + """ + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzCJHCX3I01JtcC8G1wXB + qBJ/L4TgOnsOX7CfgjYKNtQXjU4Lzl84Wa8DGWLogFxaZleJLpFo8i3IRROYypOs + j5JrD0F1ZzlqmDEDunf7LrRwTLY0OebzgsKg00eK5tnR67P0IPz0waB9w3K+likD + TVGDGTV8xA9gAvwkZF4zBNKDKu2M4JFcXcIX7SK4JlFFAkYB54DNjz8jbJmXJL15 + 4JKljq/XlArG4Njc03rd7IRxPHluchAV1XgL09zp9VqELyEjntVC1hTmeqmdTQ28 + MBJmVsFK+UN93xqZWmQp6Ibz3/uSHxIvjOP6Y5zlRQuKEkmQhReUO/vmxysbMdfC + 1wIDAQAB + -----END PUBLIC KEY-----"""; + + var revokeRequest = new RevokeRequest(); + revokeRequest.setAccountId("dflakjfafd"); + revokeRequest.setEndpointIds(new String[]{"adkfjlaf", "afdlakfdlakdfl"}); + revokeRequest.setTimeZone("UTC+5"); + revokeRequest.setUTCTimestamp("2019-05-18T23:03:21"); + + var gson = new Gson(); + var input = gson.toJson(revokeRequest); + + class SignatureTester implements SignatureService { + } + + var signatureTester = new SignatureTester(); + + var signature = signatureTester.createSignature(input, privateKey); + + signatureTester.verifySignature(input, signature, publicKey); + } } diff --git a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationServiceTest.java b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationServiceTest.java index 3a938958..b14954a1 100644 --- a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationServiceTest.java +++ b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationServiceTest.java @@ -1,104 +1,101 @@ package com.dke.data.agrirouter.impl.common.ssl; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; - import com.dke.data.agrirouter.api.exception.CouldNotCreateDynamicKeyStoreException; -import java.security.KeyStore; -import java.security.PrivateKey; -import java.security.cert.X509Certificate; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + class KeyStoreCreationServiceTest { - @Test - void givenValidPEMCreateAndReturnKeystoreFromPEMShouldReturnKeyStore() { - String secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; - String certificate = - "-----BEGIN ENCRYPTED PRIVATE KEY-----\nMIIE6zAdBgoqhkiG9w0BDAEDMA8ECKjNsB97Jcn1AgMCAAAEggTIskb9BXQ3w6u3\np9cxwMnDVm6QJWeQw+kjOnGn3qhZr+1vYdiCeDJHeKBX80PzAqBa+iX2P3Xo1Ajy\nYvrIuU0nVGtI9ZH3buyjNfN41XSLj7sffp1NHPJMeHLMa62EVgpjcrRFrLmlumqI\nKy03YMlaYiCF7VU6miJEo6TDORLIPc3dPnbNTT8EeQVIP3co5J5H9akwVfLIOmek\nzP2oFx5dQ7uny/Nm9Od57/V+abkWB2PNbQtKA16/4Fz7plqAyoFw4HOFK+FKJ50s\nGAIAmDBnV4Y6d1dwVRUNjQoZ41LbFQAILtn/W0IceA5B9PrXzSmVIcXeBE39EGZO\nHJPt/YREtTRZkBdK5+V91+yi/zqtWF6rjHOMxUQtiEiur3U0fs/LN8rwTOMrgCOY\njAIuAla06k11HoBc3jpIPBxaJTNuN+W2XWqJgB02ZS6iGkRHYlWr+qtK473Q2Ymh\nbKQqSfMM5TJUMzsUS8QMuKrnUc0eIINNdWIuFrF5T7Owm9viF9UdqPg8DYP03fZg\nhtY8dvVzieQtjpWMCEOHrgI42Zp/hV9Er7LeE86DUvgVRHqgJtROA6OtP5p/mtXl\ndImm7EXjor217/AADbTPokyzVNfFa8W0beCx77Fub13oaATLQAxouGG/GWLqSY6v\nRS48nnnbPdka6Z++FUSUrIdzAJ2ssQvluBsZS9PdWMFuu5tlOGdlEjhCcXPcSrzf\n2HPepqR/sDwxqSt3L6HcjsQCTcj24ebDBdsJyhfLaraW77P9a8Uc+VmyUzGF+r3G\nLtqo8W3UZozw6/xLlUROuTfrWewOEfMxFQFkQFEJADN5UdGvGsY1aiUgBxtNG5i4\ne9gRIDpbaJcE4am/tDqTD8ofTCYCP9UX4xWEwDvDQlBkshr0yDxgt+mVEyaJv7hA\n6o2tEW/d/pQ0uqFOcirUcMmoQmye+FJi7YMUTxmIw3Q+Y19MRmVyvwePU1dKIr87\neypeEU5HFd1DUlPDHMQMw9uYkwTaJ8C8LPvxKi3VD5SLqFKDYl5JLBf7FU5LEjzO\noph/1rkUKktsfye0RF6AOooD1SwfnsfWDprdwibIDbNBumE9nONESrbqlKJp5/OC\n3gwL7v8x9Xp+r3J1k01flSojRYQO+2XC5ABjChc7mbD1ROrb8SWTcmyUanJGzNxF\nz+AgX0B0RxLPZPBafNjtktjT9IeK0UrfmlhpIrBTSd65Vzb+dg1DsmRWq2L/+L1o\nUM1lo9KBya+p9wv1Qtu5vO7oP4jJJUfr+RW0jAOsxF6H5mrSCq5ww0vWdiDiu6+m\npQ15Wp3vxiAXtnej1T5B/j97uzD2Wpn13AGemJuzR9NBZ7E/oa10CTf00nG+D0Mj\nenS0iJYvd2VQmm8QUOg5uDBjEqgGlCMxEUBdENyG73kbO8zqU9vCfqRnwuzBzuG4\n2nKci9UgqnDJ9cwOLIheD/YO8lMeZoR0aoeJOMoMMF3YM0NmS5FLLb4NP8Fc03My\nms0Lawg8os3nDtLG/xREu7AEiuk5n8N1Qu/UMrllSC1W5FpNkyNLTK4FuOKdN/aS\nJ5/f9MH0gI4zWtNgKoQH93fU1v9Xrr/fFpDTBOfuoe9dQvRLpa5Mw55ftHAvweEu\nbupO8m9l0y/JJWbMu7Ql\n-----END ENCRYPTED PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\nMIIEPzCCAyegAwIBAgIOAJeZtIjQZANnEAEC/JwwDQYJKoZIhvcNAQELBQAwVjEL\nMAkGA1UEBhMCREUxIzAhBgNVBAoTGlNBUCBJb1QgVHJ1c3QgQ29tbXVuaXR5IElJ\nMSIwIAYDVQQDExlTQVAgSW50ZXJuZXQgb2YgVGhpbmdzIENBMB4XDTE4MDEwNTIx\nNTEwMVoXDTE5MDEwNTIxNTEwMVowgY0xCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNT\nQVAgVHJ1c3QgQ29tbXVuaXR5MRUwEwYDVQQLEwxJb1QgU2VydmljZXMxSTBHBgNV\nBAMUQGNsaWVudGlkOjFlMWNkYTUwLTM3Y2UtNDMzZS1hNjU2LTFhOThmM2RkMDU2\nNnxpbnN0YW5jZWlkOmRrZS1kZXYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\nAoIBAQC6Jmw4dFIhbtZavc8YYwAyfrlZUS6+GVtluN4OTLwOC2ROARwXExUgzau9\nCP+B48EWSDxyU+CZeVKDOVhp/KlDIP2wgELs2pzMjPr8M3Rz8wg/BGnrJmTY5UGh\n1BhClHKj7Pv4VLcWW7BXqsFQh/orTRZDhsedOTv4+4oXXe/ORJx6r+A1BBcRRYOx\nZkoHrI16DPgcLIku1aFGnWXwu3kfbbXSg/NPa0Z9fTPJhqeNLU5ple4pHqm5crUh\nIGo7d9Xr/aoyP6SJtfXyTBxeoZS1vf5RIQKw/s3bKKWPn34LHIKzLP+6zgUQAk7p\n2V69WtrUSFs1jFTQUTEi0VPiqZ2NAgMBAAGjgdIwgc8wSAYDVR0fBEEwPzA9oDug\nOYY3aHR0cHM6Ly90Y3MubXlzYXAuY29tL2NybC9UcnVzdENvbW11bml0eUlJL1NB\nUElvVENBLmNybDAMBgNVHRMBAf8EAjAAMCUGA1UdEgQeMByGGmh0dHA6Ly9zZXJ2\naWNlLnNhcC5jb20vVENTMA4GA1UdDwEB/wQEAwIGwDAdBgNVHQ4EFgQU3IYJevvw\nQMxj3qxT8km6ogbQB2cwHwYDVR0jBBgwFoAUlbez9Vje1bSzWEbg8qbJeE69LXUw\nDQYJKoZIhvcNAQELBQADggEBADnGIY81ngPJOuF3qL9wRHAYiXLlHMT5J54qfRGu\ncTAdDEC8DCjlXUAg+c6HNvBJbMV4oPfziN0f53Z3f0WpumTk/J6lQy0dByGtt+Dv\nki4+WjrooMdG7bPsHt1aZLIAa/TWY8B62G0r7zILAne5xgvuy+K1MH0dENR7KOdl\nwovrXg8fePWX/ejRhk4iXyf7mDS0t+0zRNTlOIYpPrU+h8bc03Afn7xJ/F5khxzF\nlPLIxyS1wrFj2V3FSrJqU0XR686u6E7Zjyh8Jjzvh5xazQcbuhC5ZVUL08xkZYJI\nF/ocLSZ++H2dacM9GTSB/5+ShM6aNxMeWWMrN4AYA9tmA50=\n-----END CERTIFICATE-----\n"; - KeyStore keyStore = - new KeyStoreCreationService().createAndReturnKeystoreFromPEM(certificate, secret); - assertNotNull(keyStore); - } + @Test + void givenValidPEMCreateAndReturnKeystoreFromPEMShouldReturnKeyStore() { + var secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; + var certificate = + "-----BEGIN ENCRYPTED PRIVATE KEY-----\nMIIE6zAdBgoqhkiG9w0BDAEDMA8ECKjNsB97Jcn1AgMCAAAEggTIskb9BXQ3w6u3\np9cxwMnDVm6QJWeQw+kjOnGn3qhZr+1vYdiCeDJHeKBX80PzAqBa+iX2P3Xo1Ajy\nYvrIuU0nVGtI9ZH3buyjNfN41XSLj7sffp1NHPJMeHLMa62EVgpjcrRFrLmlumqI\nKy03YMlaYiCF7VU6miJEo6TDORLIPc3dPnbNTT8EeQVIP3co5J5H9akwVfLIOmek\nzP2oFx5dQ7uny/Nm9Od57/V+abkWB2PNbQtKA16/4Fz7plqAyoFw4HOFK+FKJ50s\nGAIAmDBnV4Y6d1dwVRUNjQoZ41LbFQAILtn/W0IceA5B9PrXzSmVIcXeBE39EGZO\nHJPt/YREtTRZkBdK5+V91+yi/zqtWF6rjHOMxUQtiEiur3U0fs/LN8rwTOMrgCOY\njAIuAla06k11HoBc3jpIPBxaJTNuN+W2XWqJgB02ZS6iGkRHYlWr+qtK473Q2Ymh\nbKQqSfMM5TJUMzsUS8QMuKrnUc0eIINNdWIuFrF5T7Owm9viF9UdqPg8DYP03fZg\nhtY8dvVzieQtjpWMCEOHrgI42Zp/hV9Er7LeE86DUvgVRHqgJtROA6OtP5p/mtXl\ndImm7EXjor217/AADbTPokyzVNfFa8W0beCx77Fub13oaATLQAxouGG/GWLqSY6v\nRS48nnnbPdka6Z++FUSUrIdzAJ2ssQvluBsZS9PdWMFuu5tlOGdlEjhCcXPcSrzf\n2HPepqR/sDwxqSt3L6HcjsQCTcj24ebDBdsJyhfLaraW77P9a8Uc+VmyUzGF+r3G\nLtqo8W3UZozw6/xLlUROuTfrWewOEfMxFQFkQFEJADN5UdGvGsY1aiUgBxtNG5i4\ne9gRIDpbaJcE4am/tDqTD8ofTCYCP9UX4xWEwDvDQlBkshr0yDxgt+mVEyaJv7hA\n6o2tEW/d/pQ0uqFOcirUcMmoQmye+FJi7YMUTxmIw3Q+Y19MRmVyvwePU1dKIr87\neypeEU5HFd1DUlPDHMQMw9uYkwTaJ8C8LPvxKi3VD5SLqFKDYl5JLBf7FU5LEjzO\noph/1rkUKktsfye0RF6AOooD1SwfnsfWDprdwibIDbNBumE9nONESrbqlKJp5/OC\n3gwL7v8x9Xp+r3J1k01flSojRYQO+2XC5ABjChc7mbD1ROrb8SWTcmyUanJGzNxF\nz+AgX0B0RxLPZPBafNjtktjT9IeK0UrfmlhpIrBTSd65Vzb+dg1DsmRWq2L/+L1o\nUM1lo9KBya+p9wv1Qtu5vO7oP4jJJUfr+RW0jAOsxF6H5mrSCq5ww0vWdiDiu6+m\npQ15Wp3vxiAXtnej1T5B/j97uzD2Wpn13AGemJuzR9NBZ7E/oa10CTf00nG+D0Mj\nenS0iJYvd2VQmm8QUOg5uDBjEqgGlCMxEUBdENyG73kbO8zqU9vCfqRnwuzBzuG4\n2nKci9UgqnDJ9cwOLIheD/YO8lMeZoR0aoeJOMoMMF3YM0NmS5FLLb4NP8Fc03My\nms0Lawg8os3nDtLG/xREu7AEiuk5n8N1Qu/UMrllSC1W5FpNkyNLTK4FuOKdN/aS\nJ5/f9MH0gI4zWtNgKoQH93fU1v9Xrr/fFpDTBOfuoe9dQvRLpa5Mw55ftHAvweEu\nbupO8m9l0y/JJWbMu7Ql\n-----END ENCRYPTED PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\nMIIEPzCCAyegAwIBAgIOAJeZtIjQZANnEAEC/JwwDQYJKoZIhvcNAQELBQAwVjEL\nMAkGA1UEBhMCREUxIzAhBgNVBAoTGlNBUCBJb1QgVHJ1c3QgQ29tbXVuaXR5IElJ\nMSIwIAYDVQQDExlTQVAgSW50ZXJuZXQgb2YgVGhpbmdzIENBMB4XDTE4MDEwNTIx\nNTEwMVoXDTE5MDEwNTIxNTEwMVowgY0xCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNT\nQVAgVHJ1c3QgQ29tbXVuaXR5MRUwEwYDVQQLEwxJb1QgU2VydmljZXMxSTBHBgNV\nBAMUQGNsaWVudGlkOjFlMWNkYTUwLTM3Y2UtNDMzZS1hNjU2LTFhOThmM2RkMDU2\nNnxpbnN0YW5jZWlkOmRrZS1kZXYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\nAoIBAQC6Jmw4dFIhbtZavc8YYwAyfrlZUS6+GVtluN4OTLwOC2ROARwXExUgzau9\nCP+B48EWSDxyU+CZeVKDOVhp/KlDIP2wgELs2pzMjPr8M3Rz8wg/BGnrJmTY5UGh\n1BhClHKj7Pv4VLcWW7BXqsFQh/orTRZDhsedOTv4+4oXXe/ORJx6r+A1BBcRRYOx\nZkoHrI16DPgcLIku1aFGnWXwu3kfbbXSg/NPa0Z9fTPJhqeNLU5ple4pHqm5crUh\nIGo7d9Xr/aoyP6SJtfXyTBxeoZS1vf5RIQKw/s3bKKWPn34LHIKzLP+6zgUQAk7p\n2V69WtrUSFs1jFTQUTEi0VPiqZ2NAgMBAAGjgdIwgc8wSAYDVR0fBEEwPzA9oDug\nOYY3aHR0cHM6Ly90Y3MubXlzYXAuY29tL2NybC9UcnVzdENvbW11bml0eUlJL1NB\nUElvVENBLmNybDAMBgNVHRMBAf8EAjAAMCUGA1UdEgQeMByGGmh0dHA6Ly9zZXJ2\naWNlLnNhcC5jb20vVENTMA4GA1UdDwEB/wQEAwIGwDAdBgNVHQ4EFgQU3IYJevvw\nQMxj3qxT8km6ogbQB2cwHwYDVR0jBBgwFoAUlbez9Vje1bSzWEbg8qbJeE69LXUw\nDQYJKoZIhvcNAQELBQADggEBADnGIY81ngPJOuF3qL9wRHAYiXLlHMT5J54qfRGu\ncTAdDEC8DCjlXUAg+c6HNvBJbMV4oPfziN0f53Z3f0WpumTk/J6lQy0dByGtt+Dv\nki4+WjrooMdG7bPsHt1aZLIAa/TWY8B62G0r7zILAne5xgvuy+K1MH0dENR7KOdl\nwovrXg8fePWX/ejRhk4iXyf7mDS0t+0zRNTlOIYpPrU+h8bc03Afn7xJ/F5khxzF\nlPLIxyS1wrFj2V3FSrJqU0XR686u6E7Zjyh8Jjzvh5xazQcbuhC5ZVUL08xkZYJI\nF/ocLSZ++H2dacM9GTSB/5+ShM6aNxMeWWMrN4AYA9tmA50=\n-----END CERTIFICATE-----\n"; + var keyStore = + new KeyStoreCreationService().createAndReturnKeystoreFromPEM(certificate, secret); + assertNotNull(keyStore); + } - @Test - void givenInvalidPEMCreateAndReturnKeystoreFromPEMShouldFail() { - String secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; - String certificate = "TOFUWURST"; - assertThrows( - CouldNotCreateDynamicKeyStoreException.class, - () -> new KeyStoreCreationService().createAndReturnKeystoreFromPEM(certificate, secret)); - } + @Test + void givenInvalidPEMCreateAndReturnKeystoreFromPEMShouldFail() { + var secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; + var certificate = "TOFUWURST"; + assertThrows( + CouldNotCreateDynamicKeyStoreException.class, + () -> new KeyStoreCreationService().createAndReturnKeystoreFromPEM(certificate, secret)); + } - @Test - void givenValidP12CreateAndReturnKeystoreFromP12ShouldReturnKeyStore() { - String secret = "iI8rR5lL6fF0wW1yY6zZ1lL"; - String certificate = - "MIIKuwIBAzCCCnUGCSqGSIb3DQEHAaCCCmYEggpiMIIKXjCCBVMGCSqGSIb3DQEHAaCCBUQEggVAMIIFPDCCBTgGCyqGSIb3DQEMCgECoIIE7zCCBOswHQYKKoZIhvcNAQwBAzAPBAjxu58B9xEeVQIDAgAABIIEyFBNhrdpoAXZsll57Lai8Wd7tGQAE4JQ3I6W/E/WqsKP5BSrSPkfu0KYMM8POMdPzVbX2jLoAfyOizru9Ts0rJluZNVB1peYBLZOOOVyxhw67JI7aXW0BPnIoBJeONbIIa2ZG9XeaCniXOpGKgS9nygDJnDy+gahheo6zqf5+DOGcH7yryJwhX3RFQ5j4vdRL2abBAugQ44TrGUtLm8keKUbccJKG7DK5EuT6jveGfw7/9Yq45+QIS1T/CiL8jPpmNGicLm94JFzJfrp5ilwFBGCnGlwFvGVlODQgW1la5D4hdFO7OpEFsOZPw/HEDZJQB3C/teigE9aqz3J1IzzTSuPHTUbYZZpeaW80H04M8Jih+zNJ+mDoGUL8CiaAiPj/uC1xijpcJENuOXHuNiBnozuSj3P4Q1k6gJ3iOKHKmnxgDXfguu+eFaHv1vpGz/PLWQ1ApRX2Woncq8E5BB1+XQzufwaoclY6rD6FqB2bMdfncXew+jQXaWgrDbU6P2vBe7vffwbVO3W8sVwOAjHLlvjb00DsveTbjgyreT5id6FwPU7zmOmYpKWhHMrpIGW7e6CjkODXSAYwfzrFNMMlbNVEDEPg+/6+U9/3X6iJLDfQ/6GzeIZXh8pQXHTYw99rKBTzN8weGFyG37ZNaAt7gpABwvfyN7+6ni9ZIcOUi+OUbG8pcTIgE4+woWMsfRBO5nyQjUDPy4biT0YlLSE30hU+zfiIIEq8p5ddtv/1hT+KskcIcf5+XwzFdtKum2dK59Z8/FdzamC77Fm0cvlCDBAFkFLsZkOlvDNnrz7Q5laYf5HsfwQMkOFGbXHjtAT7OzHgI0oMGkE34ahzJFLEixDe5W2y0Z9SSiGwB0AsuseYnSHxT9Jf2MwYY42fCuj7AOUhTweLJ1IUz8ZiYheuUVG5rDa02TS+L3jVFb8YHwYNUlhW0GpR6pFP0adZMQy1T2RiuBs80JXtI623O4Ls7YuImk4NySq7PUrB9GP21RMai9C9IMDIC9XSBJqaAYjLnJSDGLR1y6EYjI+N6hunp+zQHxvvkeiAAUrl3Z5o75TFR3hRTNrSgkFFkg2M0icmHNk7X2GlAnYY63/u8fv0vBNZE+gh75co1qm0rjl36XiL9BeGJIhOdvRwV0i2nQcmT9JWt+DVeAyvXkZj1frZBUuloEpW2FcIJxOVf35yTSE5MyPevTg0YHx9pSgezvN5nEfNnS1mFa4iI27m2ieBFTXVQLi6/P2BFXKYLfvecEbu1PE7NbPtdNCumQsIAHWWqVhuqk/N++VyVeFqnzMJkjxwfU6xtH24EG7nspGVUlsJbxkvPAnoPG6eOeOJoSywa4OeuYxV9xGUn1/dm9aWApFqz9MC2t3Bm5uv+3GxRwJAwI93J5T1lMovAxeQ6pZMIkw6TKQLHcLHcJGsctrZYVTP3wk4MtUMR2+Zadf4OEWTlgPhfVImgaZ3SYPIfIzXFaFSetvZUsNlLpu9/jWucEE8T8jRxDBjgja3Gzm6O/kFcms9Q0uIoPSeHYlUvUTV5gLyYw5qT4EeDezqSyuXYPLNRTsEZRv+nvYMKnVSa0ziy6iCAJbWmY53JxZmidsaAPhWaqge9h/6Nq3qgoKBqkOYs5S40sq8zE2MBEGCSqGSIb3DQEJFDEEHgIAMTAhBgkqhkiG9w0BCRUxFAQSVGltZSAxNTE1MTk2NjYxOTAxMIIFAwYJKoZIhvcNAQcGoIIE9DCCBPACAQAwggTpBgkqhkiG9w0BBwEwKAYKKoZIhvcNAQwBBjAaBBQkUNeYJOHMh228vuEXjAzKuZ4A3AICBACAggSwnW085+gra4TmzRNQ6sehEAageejRuTu6mIsb/xjw8LkzMKX+wFnIMxW27luvdf1WO5+Do7VEkjlx+SSnYlw5QV5B/igGd4f+6s1zYs6uqTl1Es1/6icoDVQGVjQ9S6D1API1SWDDG1zXY4jQaBruzqI2FZGD5PCERD7xTUxtNacBurRpRMCrzGghpcwGDoNYxKpknIQUsfmXecq/DDocUO+YvnaOOFpg6AcRfKam9WIVbbZCj8fzUNAc0hmqAGdH6sXOlJ2W/e23W06mhM7/3iX+KWOdERWYBQI7OFVWkziUbdVfr8vZASpaprf2GVQfh0A3jsDJ8z+DlRMsnkwbyl7xlmotXwx2CPv48CJEZOigxiV6EoSfl5HFTCFL5Iswmweas3HatepO4jdhIA71URuff8f4kF0lGxI6kQ2rlIfnnRRuvj/aXdJPUyVEVcC8mknOrpmCttXii23g+GyC5K3FYzNTFSgMXz9Ofku1+B1lXD6bmA7o5butxthoSK0C26a/tRxLaur9pOTGyJ1XYtHWGKSzrI/LnmHOpJLicDRN3o8hvdiCPXpJpQGa19ISviEQHuk1GktzPe2iwv2k7EeuPSaM65aZqDfigR9bdlWPhioFo0rAte/XIu/v4nC3vBz0W0b6VWF9aYRCgVMSceKjnrmk2vfepatIHqdjlFZVy06wPBZ0aV/9OhpKj9Zgz/+lJ9yrra0f//2RcwJ4b8lykmr4AEQMBxgNeVAOPmS9cTB2rzcFmraAFPJnqhqjhl+N5ArhSqfjxBidV9GjEjJl2nLL50n4xOeZyeCYXYII54N3oDebxhvOj+M4A0tjPcbwN1EWItCvfyF496GAUkxJ9559HSWP4W9uKF5VGRGoDNrBh7UVAiT3XMr109jgVt7s/hJ3ZK1qHFWIyseVZr67J4EIJyxLiPhg1l+iWJOME65zlcDdHTWx/jjK7U7K/m69selYpsIunZMh4nmiM7kbJ1uYeXjS+utC9CruBgu6IauHIMPXhbxSYn8eNm0OeWKiuS7/e7thrVdNXc7n3HoWOjSooXCDz+IgIIoGCWngzgp2P+L0wmfZUkf6fllLw1J5sigNOn2FB9dI5IfHtzz4Em9sX6OhsqQwkRiGDUs9eFWtKGqNayK2p72qHRJCsLpME7qdANrlm6O6rxRtO4iTkltH7JkkzlRnSPFoaDuqswQ3jIBamo/n2lNDKKdhiDg6sEmfDi6GExPIlmhjF9MHShE5oU2KIplx6Z/COFPwCVdW2odmgv42C1sO1DVV7tjAbokTsW8xe4ip2PqqeGcvE2pZyrTVS89Gm/HL9FxDJvxlmWOr22cKjC660wcpVB5jCsv+f99Zs2X1qSwAYmz9+dqJ6NKU/B4HPSSTTFBBv12wT8177HfY+8gOGEuSSkxDNjC4MYqnDD1FV99ZCPqncLer16t4iZ+17B7Ha3ci3RHeEX8liZ6/EFAxyx792VmbYENkCF6tQ6PCNV7gShNUz0h0gBhAxw0FQQekvz/Pugx642UKphs94Jkc+JFIma4vylPFY5TQXyI3BdakZ75iE7V2h/Ez+oVPjLyrSrG7TXy7Bf3yOcuKwT9d+KRMMD0wITAJBgUrDgMCGgUABBQraxyI9BUwHXgSwXmWjdEnGtSLbgQUbrG79D7Jvs6K9Ubd1J33uQBq3UcCAgQA"; - KeyStore keyStore = - new KeyStoreCreationService().createAndReturnKeystoreFromP12(certificate, secret); - assertNotNull(keyStore); - } + @Test + void givenValidP12CreateAndReturnKeystoreFromP12ShouldReturnKeyStore() { + var secret = "iI8rR5lL6fF0wW1yY6zZ1lL"; + var certificate = + "MIIKuwIBAzCCCnUGCSqGSIb3DQEHAaCCCmYEggpiMIIKXjCCBVMGCSqGSIb3DQEHAaCCBUQEggVAMIIFPDCCBTgGCyqGSIb3DQEMCgECoIIE7zCCBOswHQYKKoZIhvcNAQwBAzAPBAjxu58B9xEeVQIDAgAABIIEyFBNhrdpoAXZsll57Lai8Wd7tGQAE4JQ3I6W/E/WqsKP5BSrSPkfu0KYMM8POMdPzVbX2jLoAfyOizru9Ts0rJluZNVB1peYBLZOOOVyxhw67JI7aXW0BPnIoBJeONbIIa2ZG9XeaCniXOpGKgS9nygDJnDy+gahheo6zqf5+DOGcH7yryJwhX3RFQ5j4vdRL2abBAugQ44TrGUtLm8keKUbccJKG7DK5EuT6jveGfw7/9Yq45+QIS1T/CiL8jPpmNGicLm94JFzJfrp5ilwFBGCnGlwFvGVlODQgW1la5D4hdFO7OpEFsOZPw/HEDZJQB3C/teigE9aqz3J1IzzTSuPHTUbYZZpeaW80H04M8Jih+zNJ+mDoGUL8CiaAiPj/uC1xijpcJENuOXHuNiBnozuSj3P4Q1k6gJ3iOKHKmnxgDXfguu+eFaHv1vpGz/PLWQ1ApRX2Woncq8E5BB1+XQzufwaoclY6rD6FqB2bMdfncXew+jQXaWgrDbU6P2vBe7vffwbVO3W8sVwOAjHLlvjb00DsveTbjgyreT5id6FwPU7zmOmYpKWhHMrpIGW7e6CjkODXSAYwfzrFNMMlbNVEDEPg+/6+U9/3X6iJLDfQ/6GzeIZXh8pQXHTYw99rKBTzN8weGFyG37ZNaAt7gpABwvfyN7+6ni9ZIcOUi+OUbG8pcTIgE4+woWMsfRBO5nyQjUDPy4biT0YlLSE30hU+zfiIIEq8p5ddtv/1hT+KskcIcf5+XwzFdtKum2dK59Z8/FdzamC77Fm0cvlCDBAFkFLsZkOlvDNnrz7Q5laYf5HsfwQMkOFGbXHjtAT7OzHgI0oMGkE34ahzJFLEixDe5W2y0Z9SSiGwB0AsuseYnSHxT9Jf2MwYY42fCuj7AOUhTweLJ1IUz8ZiYheuUVG5rDa02TS+L3jVFb8YHwYNUlhW0GpR6pFP0adZMQy1T2RiuBs80JXtI623O4Ls7YuImk4NySq7PUrB9GP21RMai9C9IMDIC9XSBJqaAYjLnJSDGLR1y6EYjI+N6hunp+zQHxvvkeiAAUrl3Z5o75TFR3hRTNrSgkFFkg2M0icmHNk7X2GlAnYY63/u8fv0vBNZE+gh75co1qm0rjl36XiL9BeGJIhOdvRwV0i2nQcmT9JWt+DVeAyvXkZj1frZBUuloEpW2FcIJxOVf35yTSE5MyPevTg0YHx9pSgezvN5nEfNnS1mFa4iI27m2ieBFTXVQLi6/P2BFXKYLfvecEbu1PE7NbPtdNCumQsIAHWWqVhuqk/N++VyVeFqnzMJkjxwfU6xtH24EG7nspGVUlsJbxkvPAnoPG6eOeOJoSywa4OeuYxV9xGUn1/dm9aWApFqz9MC2t3Bm5uv+3GxRwJAwI93J5T1lMovAxeQ6pZMIkw6TKQLHcLHcJGsctrZYVTP3wk4MtUMR2+Zadf4OEWTlgPhfVImgaZ3SYPIfIzXFaFSetvZUsNlLpu9/jWucEE8T8jRxDBjgja3Gzm6O/kFcms9Q0uIoPSeHYlUvUTV5gLyYw5qT4EeDezqSyuXYPLNRTsEZRv+nvYMKnVSa0ziy6iCAJbWmY53JxZmidsaAPhWaqge9h/6Nq3qgoKBqkOYs5S40sq8zE2MBEGCSqGSIb3DQEJFDEEHgIAMTAhBgkqhkiG9w0BCRUxFAQSVGltZSAxNTE1MTk2NjYxOTAxMIIFAwYJKoZIhvcNAQcGoIIE9DCCBPACAQAwggTpBgkqhkiG9w0BBwEwKAYKKoZIhvcNAQwBBjAaBBQkUNeYJOHMh228vuEXjAzKuZ4A3AICBACAggSwnW085+gra4TmzRNQ6sehEAageejRuTu6mIsb/xjw8LkzMKX+wFnIMxW27luvdf1WO5+Do7VEkjlx+SSnYlw5QV5B/igGd4f+6s1zYs6uqTl1Es1/6icoDVQGVjQ9S6D1API1SWDDG1zXY4jQaBruzqI2FZGD5PCERD7xTUxtNacBurRpRMCrzGghpcwGDoNYxKpknIQUsfmXecq/DDocUO+YvnaOOFpg6AcRfKam9WIVbbZCj8fzUNAc0hmqAGdH6sXOlJ2W/e23W06mhM7/3iX+KWOdERWYBQI7OFVWkziUbdVfr8vZASpaprf2GVQfh0A3jsDJ8z+DlRMsnkwbyl7xlmotXwx2CPv48CJEZOigxiV6EoSfl5HFTCFL5Iswmweas3HatepO4jdhIA71URuff8f4kF0lGxI6kQ2rlIfnnRRuvj/aXdJPUyVEVcC8mknOrpmCttXii23g+GyC5K3FYzNTFSgMXz9Ofku1+B1lXD6bmA7o5butxthoSK0C26a/tRxLaur9pOTGyJ1XYtHWGKSzrI/LnmHOpJLicDRN3o8hvdiCPXpJpQGa19ISviEQHuk1GktzPe2iwv2k7EeuPSaM65aZqDfigR9bdlWPhioFo0rAte/XIu/v4nC3vBz0W0b6VWF9aYRCgVMSceKjnrmk2vfepatIHqdjlFZVy06wPBZ0aV/9OhpKj9Zgz/+lJ9yrra0f//2RcwJ4b8lykmr4AEQMBxgNeVAOPmS9cTB2rzcFmraAFPJnqhqjhl+N5ArhSqfjxBidV9GjEjJl2nLL50n4xOeZyeCYXYII54N3oDebxhvOj+M4A0tjPcbwN1EWItCvfyF496GAUkxJ9559HSWP4W9uKF5VGRGoDNrBh7UVAiT3XMr109jgVt7s/hJ3ZK1qHFWIyseVZr67J4EIJyxLiPhg1l+iWJOME65zlcDdHTWx/jjK7U7K/m69selYpsIunZMh4nmiM7kbJ1uYeXjS+utC9CruBgu6IauHIMPXhbxSYn8eNm0OeWKiuS7/e7thrVdNXc7n3HoWOjSooXCDz+IgIIoGCWngzgp2P+L0wmfZUkf6fllLw1J5sigNOn2FB9dI5IfHtzz4Em9sX6OhsqQwkRiGDUs9eFWtKGqNayK2p72qHRJCsLpME7qdANrlm6O6rxRtO4iTkltH7JkkzlRnSPFoaDuqswQ3jIBamo/n2lNDKKdhiDg6sEmfDi6GExPIlmhjF9MHShE5oU2KIplx6Z/COFPwCVdW2odmgv42C1sO1DVV7tjAbokTsW8xe4ip2PqqeGcvE2pZyrTVS89Gm/HL9FxDJvxlmWOr22cKjC660wcpVB5jCsv+f99Zs2X1qSwAYmz9+dqJ6NKU/B4HPSSTTFBBv12wT8177HfY+8gOGEuSSkxDNjC4MYqnDD1FV99ZCPqncLer16t4iZ+17B7Ha3ci3RHeEX8liZ6/EFAxyx792VmbYENkCF6tQ6PCNV7gShNUz0h0gBhAxw0FQQekvz/Pugx642UKphs94Jkc+JFIma4vylPFY5TQXyI3BdakZ75iE7V2h/Ez+oVPjLyrSrG7TXy7Bf3yOcuKwT9d+KRMMD0wITAJBgUrDgMCGgUABBQraxyI9BUwHXgSwXmWjdEnGtSLbgQUbrG79D7Jvs6K9Ubd1J33uQBq3UcCAgQA"; + var keyStore = + new KeyStoreCreationService().createAndReturnKeystoreFromP12(certificate, secret); + assertNotNull(keyStore); + } - @Test - void givenInvalidP12CreateAndReturnKeystoreFromP12ShouldFail() { - String secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; - String certificate = "TOFUWURST"; - assertThrows( - CouldNotCreateDynamicKeyStoreException.class, - () -> new KeyStoreCreationService().createAndReturnKeystoreFromP12(certificate, secret)); - } + @Test + void givenInvalidP12CreateAndReturnKeystoreFromP12ShouldFail() { + var secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; + var certificate = "TOFUWURST"; + assertThrows( + CouldNotCreateDynamicKeyStoreException.class, + () -> new KeyStoreCreationService().createAndReturnKeystoreFromP12(certificate, secret)); + } - @Test - void givenValidCertificateAndPrivateKeyCreateKeyStoreInClasspathShouldReturnTmpKeystoreName() - throws Throwable { - X509Certificate certificate = - new KeyStoreCreationService() - .createCertificate( - "MIIEPzCCAyegAwIBAgIOAJeZtIjQZANnEAEC/JwwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCREUxIzAhBgNVBAoTGlNBUCBJb1QgVHJ1c3QgQ29tbXVuaXR5IElJMSIwIAYDVQQDExlTQVAgSW50ZXJuZXQgb2YgVGhpbmdzIENBMB4XDTE4MDEwNTIxNTEwMVoXDTE5MDEwNTIxNTEwMVowgY0xCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNTQVAgVHJ1c3QgQ29tbXVuaXR5MRUwEwYDVQQLEwxJb1QgU2VydmljZXMxSTBHBgNVBAMUQGNsaWVudGlkOjFlMWNkYTUwLTM3Y2UtNDMzZS1hNjU2LTFhOThmM2RkMDU2NnxpbnN0YW5jZWlkOmRrZS1kZXYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6Jmw4dFIhbtZavc8YYwAyfrlZUS6+GVtluN4OTLwOC2ROARwXExUgzau9CP+B48EWSDxyU+CZeVKDOVhp/KlDIP2wgELs2pzMjPr8M3Rz8wg/BGnrJmTY5UGh1BhClHKj7Pv4VLcWW7BXqsFQh/orTRZDhsedOTv4+4oXXe/ORJx6r+A1BBcRRYOxZkoHrI16DPgcLIku1aFGnWXwu3kfbbXSg/NPa0Z9fTPJhqeNLU5ple4pHqm5crUhIGo7d9Xr/aoyP6SJtfXyTBxeoZS1vf5RIQKw/s3bKKWPn34LHIKzLP+6zgUQAk7p2V69WtrUSFs1jFTQUTEi0VPiqZ2NAgMBAAGjgdIwgc8wSAYDVR0fBEEwPzA9oDugOYY3aHR0cHM6Ly90Y3MubXlzYXAuY29tL2NybC9UcnVzdENvbW11bml0eUlJL1NBUElvVENBLmNybDAMBgNVHRMBAf8EAjAAMCUGA1UdEgQeMByGGmh0dHA6Ly9zZXJ2aWNlLnNhcC5jb20vVENTMA4GA1UdDwEB/wQEAwIGwDAdBgNVHQ4EFgQU3IYJevvwQMxj3qxT8km6ogbQB2cwHwYDVR0jBBgwFoAUlbez9Vje1bSzWEbg8qbJeE69LXUwDQYJKoZIhvcNAQELBQADggEBADnGIY81ngPJOuF3qL9wRHAYiXLlHMT5J54qfRGucTAdDEC8DCjlXUAg+c6HNvBJbMV4oPfziN0f53Z3f0WpumTk/J6lQy0dByGtt+Dvki4+WjrooMdG7bPsHt1aZLIAa/TWY8B62G0r7zILAne5xgvuy+K1MH0dENR7KOdlwovrXg8fePWX/ejRhk4iXyf7mDS0t+0zRNTlOIYpPrU+h8bc03Afn7xJ/F5khxzFlPLIxyS1wrFj2V3FSrJqU0XR686u6E7Zjyh8Jjzvh5xazQcbuhC5ZVUL08xkZYJIF/ocLSZ++H2dacM9GTSB/5+ShM6aNxMeWWMrN4AYA9tmA50="); - PrivateKey privateKey = - new KeyStoreCreationService() - .createPrivateKey( - "MIIE6zAdBgoqhkiG9w0BDAEDMA8ECKjNsB97Jcn1AgMCAAAEggTIskb9BXQ3w6u3p9cxwMnDVm6QJWeQw+kjOnGn3qhZr+1vYdiCeDJHeKBX80PzAqBa+iX2P3Xo1AjyYvrIuU0nVGtI9ZH3buyjNfN41XSLj7sffp1NHPJMeHLMa62EVgpjcrRFrLmlumqIKy03YMlaYiCF7VU6miJEo6TDORLIPc3dPnbNTT8EeQVIP3co5J5H9akwVfLIOmekzP2oFx5dQ7uny/Nm9Od57/V+abkWB2PNbQtKA16/4Fz7plqAyoFw4HOFK+FKJ50sGAIAmDBnV4Y6d1dwVRUNjQoZ41LbFQAILtn/W0IceA5B9PrXzSmVIcXeBE39EGZOHJPt/YREtTRZkBdK5+V91+yi/zqtWF6rjHOMxUQtiEiur3U0fs/LN8rwTOMrgCOYjAIuAla06k11HoBc3jpIPBxaJTNuN+W2XWqJgB02ZS6iGkRHYlWr+qtK473Q2YmhbKQqSfMM5TJUMzsUS8QMuKrnUc0eIINNdWIuFrF5T7Owm9viF9UdqPg8DYP03fZghtY8dvVzieQtjpWMCEOHrgI42Zp/hV9Er7LeE86DUvgVRHqgJtROA6OtP5p/mtXldImm7EXjor217/AADbTPokyzVNfFa8W0beCx77Fub13oaATLQAxouGG/GWLqSY6vRS48nnnbPdka6Z++FUSUrIdzAJ2ssQvluBsZS9PdWMFuu5tlOGdlEjhCcXPcSrzf2HPepqR/sDwxqSt3L6HcjsQCTcj24ebDBdsJyhfLaraW77P9a8Uc+VmyUzGF+r3GLtqo8W3UZozw6/xLlUROuTfrWewOEfMxFQFkQFEJADN5UdGvGsY1aiUgBxtNG5i4e9gRIDpbaJcE4am/tDqTD8ofTCYCP9UX4xWEwDvDQlBkshr0yDxgt+mVEyaJv7hA6o2tEW/d/pQ0uqFOcirUcMmoQmye+FJi7YMUTxmIw3Q+Y19MRmVyvwePU1dKIr87eypeEU5HFd1DUlPDHMQMw9uYkwTaJ8C8LPvxKi3VD5SLqFKDYl5JLBf7FU5LEjzOoph/1rkUKktsfye0RF6AOooD1SwfnsfWDprdwibIDbNBumE9nONESrbqlKJp5/OC3gwL7v8x9Xp+r3J1k01flSojRYQO+2XC5ABjChc7mbD1ROrb8SWTcmyUanJGzNxFz+AgX0B0RxLPZPBafNjtktjT9IeK0UrfmlhpIrBTSd65Vzb+dg1DsmRWq2L/+L1oUM1lo9KBya+p9wv1Qtu5vO7oP4jJJUfr+RW0jAOsxF6H5mrSCq5ww0vWdiDiu6+mpQ15Wp3vxiAXtnej1T5B/j97uzD2Wpn13AGemJuzR9NBZ7E/oa10CTf00nG+D0MjenS0iJYvd2VQmm8QUOg5uDBjEqgGlCMxEUBdENyG73kbO8zqU9vCfqRnwuzBzuG42nKci9UgqnDJ9cwOLIheD/YO8lMeZoR0aoeJOMoMMF3YM0NmS5FLLb4NP8Fc03Myms0Lawg8os3nDtLG/xREu7AEiuk5n8N1Qu/UMrllSC1W5FpNkyNLTK4FuOKdN/aSJ5/f9MH0gI4zWtNgKoQH93fU1v9Xrr/fFpDTBOfuoe9dQvRLpa5Mw55ftHAvweEubupO8m9l0y/JJWbMu7Ql", - "lL7qQ8lL4iI3zZ7qQ4xX1hH"); - String tmpKeystoreName = - new KeyStoreCreationService().createKeyStoreInClasspath(certificate, privateKey); - assertNotNull(tmpKeystoreName); - } + @Test + void givenValidCertificateAndPrivateKeyCreateKeyStoreInClasspathShouldReturnTmpKeystoreName() + throws Throwable { + var certificate = + new KeyStoreCreationService() + .createCertificate( + "MIIEPzCCAyegAwIBAgIOAJeZtIjQZANnEAEC/JwwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCREUxIzAhBgNVBAoTGlNBUCBJb1QgVHJ1c3QgQ29tbXVuaXR5IElJMSIwIAYDVQQDExlTQVAgSW50ZXJuZXQgb2YgVGhpbmdzIENBMB4XDTE4MDEwNTIxNTEwMVoXDTE5MDEwNTIxNTEwMVowgY0xCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNTQVAgVHJ1c3QgQ29tbXVuaXR5MRUwEwYDVQQLEwxJb1QgU2VydmljZXMxSTBHBgNVBAMUQGNsaWVudGlkOjFlMWNkYTUwLTM3Y2UtNDMzZS1hNjU2LTFhOThmM2RkMDU2NnxpbnN0YW5jZWlkOmRrZS1kZXYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6Jmw4dFIhbtZavc8YYwAyfrlZUS6+GVtluN4OTLwOC2ROARwXExUgzau9CP+B48EWSDxyU+CZeVKDOVhp/KlDIP2wgELs2pzMjPr8M3Rz8wg/BGnrJmTY5UGh1BhClHKj7Pv4VLcWW7BXqsFQh/orTRZDhsedOTv4+4oXXe/ORJx6r+A1BBcRRYOxZkoHrI16DPgcLIku1aFGnWXwu3kfbbXSg/NPa0Z9fTPJhqeNLU5ple4pHqm5crUhIGo7d9Xr/aoyP6SJtfXyTBxeoZS1vf5RIQKw/s3bKKWPn34LHIKzLP+6zgUQAk7p2V69WtrUSFs1jFTQUTEi0VPiqZ2NAgMBAAGjgdIwgc8wSAYDVR0fBEEwPzA9oDugOYY3aHR0cHM6Ly90Y3MubXlzYXAuY29tL2NybC9UcnVzdENvbW11bml0eUlJL1NBUElvVENBLmNybDAMBgNVHRMBAf8EAjAAMCUGA1UdEgQeMByGGmh0dHA6Ly9zZXJ2aWNlLnNhcC5jb20vVENTMA4GA1UdDwEB/wQEAwIGwDAdBgNVHQ4EFgQU3IYJevvwQMxj3qxT8km6ogbQB2cwHwYDVR0jBBgwFoAUlbez9Vje1bSzWEbg8qbJeE69LXUwDQYJKoZIhvcNAQELBQADggEBADnGIY81ngPJOuF3qL9wRHAYiXLlHMT5J54qfRGucTAdDEC8DCjlXUAg+c6HNvBJbMV4oPfziN0f53Z3f0WpumTk/J6lQy0dByGtt+Dvki4+WjrooMdG7bPsHt1aZLIAa/TWY8B62G0r7zILAne5xgvuy+K1MH0dENR7KOdlwovrXg8fePWX/ejRhk4iXyf7mDS0t+0zRNTlOIYpPrU+h8bc03Afn7xJ/F5khxzFlPLIxyS1wrFj2V3FSrJqU0XR686u6E7Zjyh8Jjzvh5xazQcbuhC5ZVUL08xkZYJIF/ocLSZ++H2dacM9GTSB/5+ShM6aNxMeWWMrN4AYA9tmA50="); + var privateKey = + new KeyStoreCreationService() + .createPrivateKey( + "MIIE6zAdBgoqhkiG9w0BDAEDMA8ECKjNsB97Jcn1AgMCAAAEggTIskb9BXQ3w6u3p9cxwMnDVm6QJWeQw+kjOnGn3qhZr+1vYdiCeDJHeKBX80PzAqBa+iX2P3Xo1AjyYvrIuU0nVGtI9ZH3buyjNfN41XSLj7sffp1NHPJMeHLMa62EVgpjcrRFrLmlumqIKy03YMlaYiCF7VU6miJEo6TDORLIPc3dPnbNTT8EeQVIP3co5J5H9akwVfLIOmekzP2oFx5dQ7uny/Nm9Od57/V+abkWB2PNbQtKA16/4Fz7plqAyoFw4HOFK+FKJ50sGAIAmDBnV4Y6d1dwVRUNjQoZ41LbFQAILtn/W0IceA5B9PrXzSmVIcXeBE39EGZOHJPt/YREtTRZkBdK5+V91+yi/zqtWF6rjHOMxUQtiEiur3U0fs/LN8rwTOMrgCOYjAIuAla06k11HoBc3jpIPBxaJTNuN+W2XWqJgB02ZS6iGkRHYlWr+qtK473Q2YmhbKQqSfMM5TJUMzsUS8QMuKrnUc0eIINNdWIuFrF5T7Owm9viF9UdqPg8DYP03fZghtY8dvVzieQtjpWMCEOHrgI42Zp/hV9Er7LeE86DUvgVRHqgJtROA6OtP5p/mtXldImm7EXjor217/AADbTPokyzVNfFa8W0beCx77Fub13oaATLQAxouGG/GWLqSY6vRS48nnnbPdka6Z++FUSUrIdzAJ2ssQvluBsZS9PdWMFuu5tlOGdlEjhCcXPcSrzf2HPepqR/sDwxqSt3L6HcjsQCTcj24ebDBdsJyhfLaraW77P9a8Uc+VmyUzGF+r3GLtqo8W3UZozw6/xLlUROuTfrWewOEfMxFQFkQFEJADN5UdGvGsY1aiUgBxtNG5i4e9gRIDpbaJcE4am/tDqTD8ofTCYCP9UX4xWEwDvDQlBkshr0yDxgt+mVEyaJv7hA6o2tEW/d/pQ0uqFOcirUcMmoQmye+FJi7YMUTxmIw3Q+Y19MRmVyvwePU1dKIr87eypeEU5HFd1DUlPDHMQMw9uYkwTaJ8C8LPvxKi3VD5SLqFKDYl5JLBf7FU5LEjzOoph/1rkUKktsfye0RF6AOooD1SwfnsfWDprdwibIDbNBumE9nONESrbqlKJp5/OC3gwL7v8x9Xp+r3J1k01flSojRYQO+2XC5ABjChc7mbD1ROrb8SWTcmyUanJGzNxFz+AgX0B0RxLPZPBafNjtktjT9IeK0UrfmlhpIrBTSd65Vzb+dg1DsmRWq2L/+L1oUM1lo9KBya+p9wv1Qtu5vO7oP4jJJUfr+RW0jAOsxF6H5mrSCq5ww0vWdiDiu6+mpQ15Wp3vxiAXtnej1T5B/j97uzD2Wpn13AGemJuzR9NBZ7E/oa10CTf00nG+D0MjenS0iJYvd2VQmm8QUOg5uDBjEqgGlCMxEUBdENyG73kbO8zqU9vCfqRnwuzBzuG42nKci9UgqnDJ9cwOLIheD/YO8lMeZoR0aoeJOMoMMF3YM0NmS5FLLb4NP8Fc03Myms0Lawg8os3nDtLG/xREu7AEiuk5n8N1Qu/UMrllSC1W5FpNkyNLTK4FuOKdN/aSJ5/f9MH0gI4zWtNgKoQH93fU1v9Xrr/fFpDTBOfuoe9dQvRLpa5Mw55ftHAvweEubupO8m9l0y/JJWbMu7Ql", + "lL7qQ8lL4iI3zZ7qQ4xX1hH"); + var tmpKeystoreName = + new KeyStoreCreationService().createKeyStoreInClasspath(certificate, privateKey); + assertNotNull(tmpKeystoreName); + } - @Test - void givenValidEncryptedPrivateKeyCreatePrivateKeyShouldReturnPrivateKey() throws Throwable { - String secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; - String encryptedPrivateKey = - "MIIE6zAdBgoqhkiG9w0BDAEDMA8ECKjNsB97Jcn1AgMCAAAEggTIskb9BXQ3w6u3p9cxwMnDVm6QJWeQw+kjOnGn3qhZr+1vYdiCeDJHeKBX80PzAqBa+iX2P3Xo1AjyYvrIuU0nVGtI9ZH3buyjNfN41XSLj7sffp1NHPJMeHLMa62EVgpjcrRFrLmlumqIKy03YMlaYiCF7VU6miJEo6TDORLIPc3dPnbNTT8EeQVIP3co5J5H9akwVfLIOmekzP2oFx5dQ7uny/Nm9Od57/V+abkWB2PNbQtKA16/4Fz7plqAyoFw4HOFK+FKJ50sGAIAmDBnV4Y6d1dwVRUNjQoZ41LbFQAILtn/W0IceA5B9PrXzSmVIcXeBE39EGZOHJPt/YREtTRZkBdK5+V91+yi/zqtWF6rjHOMxUQtiEiur3U0fs/LN8rwTOMrgCOYjAIuAla06k11HoBc3jpIPBxaJTNuN+W2XWqJgB02ZS6iGkRHYlWr+qtK473Q2YmhbKQqSfMM5TJUMzsUS8QMuKrnUc0eIINNdWIuFrF5T7Owm9viF9UdqPg8DYP03fZghtY8dvVzieQtjpWMCEOHrgI42Zp/hV9Er7LeE86DUvgVRHqgJtROA6OtP5p/mtXldImm7EXjor217/AADbTPokyzVNfFa8W0beCx77Fub13oaATLQAxouGG/GWLqSY6vRS48nnnbPdka6Z++FUSUrIdzAJ2ssQvluBsZS9PdWMFuu5tlOGdlEjhCcXPcSrzf2HPepqR/sDwxqSt3L6HcjsQCTcj24ebDBdsJyhfLaraW77P9a8Uc+VmyUzGF+r3GLtqo8W3UZozw6/xLlUROuTfrWewOEfMxFQFkQFEJADN5UdGvGsY1aiUgBxtNG5i4e9gRIDpbaJcE4am/tDqTD8ofTCYCP9UX4xWEwDvDQlBkshr0yDxgt+mVEyaJv7hA6o2tEW/d/pQ0uqFOcirUcMmoQmye+FJi7YMUTxmIw3Q+Y19MRmVyvwePU1dKIr87eypeEU5HFd1DUlPDHMQMw9uYkwTaJ8C8LPvxKi3VD5SLqFKDYl5JLBf7FU5LEjzOoph/1rkUKktsfye0RF6AOooD1SwfnsfWDprdwibIDbNBumE9nONESrbqlKJp5/OC3gwL7v8x9Xp+r3J1k01flSojRYQO+2XC5ABjChc7mbD1ROrb8SWTcmyUanJGzNxFz+AgX0B0RxLPZPBafNjtktjT9IeK0UrfmlhpIrBTSd65Vzb+dg1DsmRWq2L/+L1oUM1lo9KBya+p9wv1Qtu5vO7oP4jJJUfr+RW0jAOsxF6H5mrSCq5ww0vWdiDiu6+mpQ15Wp3vxiAXtnej1T5B/j97uzD2Wpn13AGemJuzR9NBZ7E/oa10CTf00nG+D0MjenS0iJYvd2VQmm8QUOg5uDBjEqgGlCMxEUBdENyG73kbO8zqU9vCfqRnwuzBzuG42nKci9UgqnDJ9cwOLIheD/YO8lMeZoR0aoeJOMoMMF3YM0NmS5FLLb4NP8Fc03Myms0Lawg8os3nDtLG/xREu7AEiuk5n8N1Qu/UMrllSC1W5FpNkyNLTK4FuOKdN/aSJ5/f9MH0gI4zWtNgKoQH93fU1v9Xrr/fFpDTBOfuoe9dQvRLpa5Mw55ftHAvweEubupO8m9l0y/JJWbMu7Ql"; - PrivateKey privateKey = - new KeyStoreCreationService().createPrivateKey(encryptedPrivateKey, secret); - assertNotNull(privateKey); - } + @Test + void givenValidEncryptedPrivateKeyCreatePrivateKeyShouldReturnPrivateKey() throws Throwable { + var secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; + var encryptedPrivateKey = + "MIIE6zAdBgoqhkiG9w0BDAEDMA8ECKjNsB97Jcn1AgMCAAAEggTIskb9BXQ3w6u3p9cxwMnDVm6QJWeQw+kjOnGn3qhZr+1vYdiCeDJHeKBX80PzAqBa+iX2P3Xo1AjyYvrIuU0nVGtI9ZH3buyjNfN41XSLj7sffp1NHPJMeHLMa62EVgpjcrRFrLmlumqIKy03YMlaYiCF7VU6miJEo6TDORLIPc3dPnbNTT8EeQVIP3co5J5H9akwVfLIOmekzP2oFx5dQ7uny/Nm9Od57/V+abkWB2PNbQtKA16/4Fz7plqAyoFw4HOFK+FKJ50sGAIAmDBnV4Y6d1dwVRUNjQoZ41LbFQAILtn/W0IceA5B9PrXzSmVIcXeBE39EGZOHJPt/YREtTRZkBdK5+V91+yi/zqtWF6rjHOMxUQtiEiur3U0fs/LN8rwTOMrgCOYjAIuAla06k11HoBc3jpIPBxaJTNuN+W2XWqJgB02ZS6iGkRHYlWr+qtK473Q2YmhbKQqSfMM5TJUMzsUS8QMuKrnUc0eIINNdWIuFrF5T7Owm9viF9UdqPg8DYP03fZghtY8dvVzieQtjpWMCEOHrgI42Zp/hV9Er7LeE86DUvgVRHqgJtROA6OtP5p/mtXldImm7EXjor217/AADbTPokyzVNfFa8W0beCx77Fub13oaATLQAxouGG/GWLqSY6vRS48nnnbPdka6Z++FUSUrIdzAJ2ssQvluBsZS9PdWMFuu5tlOGdlEjhCcXPcSrzf2HPepqR/sDwxqSt3L6HcjsQCTcj24ebDBdsJyhfLaraW77P9a8Uc+VmyUzGF+r3GLtqo8W3UZozw6/xLlUROuTfrWewOEfMxFQFkQFEJADN5UdGvGsY1aiUgBxtNG5i4e9gRIDpbaJcE4am/tDqTD8ofTCYCP9UX4xWEwDvDQlBkshr0yDxgt+mVEyaJv7hA6o2tEW/d/pQ0uqFOcirUcMmoQmye+FJi7YMUTxmIw3Q+Y19MRmVyvwePU1dKIr87eypeEU5HFd1DUlPDHMQMw9uYkwTaJ8C8LPvxKi3VD5SLqFKDYl5JLBf7FU5LEjzOoph/1rkUKktsfye0RF6AOooD1SwfnsfWDprdwibIDbNBumE9nONESrbqlKJp5/OC3gwL7v8x9Xp+r3J1k01flSojRYQO+2XC5ABjChc7mbD1ROrb8SWTcmyUanJGzNxFz+AgX0B0RxLPZPBafNjtktjT9IeK0UrfmlhpIrBTSd65Vzb+dg1DsmRWq2L/+L1oUM1lo9KBya+p9wv1Qtu5vO7oP4jJJUfr+RW0jAOsxF6H5mrSCq5ww0vWdiDiu6+mpQ15Wp3vxiAXtnej1T5B/j97uzD2Wpn13AGemJuzR9NBZ7E/oa10CTf00nG+D0MjenS0iJYvd2VQmm8QUOg5uDBjEqgGlCMxEUBdENyG73kbO8zqU9vCfqRnwuzBzuG42nKci9UgqnDJ9cwOLIheD/YO8lMeZoR0aoeJOMoMMF3YM0NmS5FLLb4NP8Fc03Myms0Lawg8os3nDtLG/xREu7AEiuk5n8N1Qu/UMrllSC1W5FpNkyNLTK4FuOKdN/aSJ5/f9MH0gI4zWtNgKoQH93fU1v9Xrr/fFpDTBOfuoe9dQvRLpa5Mw55ftHAvweEubupO8m9l0y/JJWbMu7Ql"; + var privateKey = + new KeyStoreCreationService().createPrivateKey(encryptedPrivateKey, secret); + assertNotNull(privateKey); + } - @Test - void givenInvalidEncryptedPrivateKeyCreatePrivateKeyShouldFail() { - String secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; - String encryptedPrivateKey = "TOFUWURST"; - assertThrows( - IllegalArgumentException.class, - () -> new KeyStoreCreationService().createPrivateKey(encryptedPrivateKey, secret)); - } + @Test + void givenInvalidEncryptedPrivateKeyCreatePrivateKeyShouldFail() { + var secret = "lL7qQ8lL4iI3zZ7qQ4xX1hH"; + var encryptedPrivateKey = "TOFUWURST"; + assertThrows( + IllegalArgumentException.class, + () -> new KeyStoreCreationService().createPrivateKey(encryptedPrivateKey, secret)); + } - @Test - void givenValidEncryptedCertificateCreateCertificateShouldReturnCertificate() throws Throwable { - String encryptedCertificate = - "MIIEQDCCAyigAwIBAgIPAMGPhggNbxUUEAECACO7MA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNVBAYTAkRFMSMwIQYDVQQKExpTQVAgSW9UIFRydXN0IENvbW11bml0eSBJSTEiMCAGA1UEAxMZU0FQIEludGVybmV0IG9mIFRoaW5ncyBDQTAeFw0xODAyMTQwNzI2MzJaFw0xOTAyMTQwNzI2MzJaMIGNMQswCQYDVQQGEwJERTEcMBoGA1UEChMTU0FQIFRydXN0IENvbW11bml0eTEVMBMGA1UECxMMSW9UIFNlcnZpY2VzMUkwRwYDVQQDFEBjbGllbnRpZDo0MjIzN2NkZC0wYjFkLTQyNzItODNlYS04MWVmNDgyYjI3ODd8aW5zdGFuY2VpZDpka2UtZGV2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnbzz3hdS8sMNyZt/uGzMJeKgY+o9d7RekimomsrF5ve4IPa4RPSz9I6V0BexXbrUrPwZcZT9OAJyW8Ig3U0dy/1bcLrhtI+auLRXg6xS0I23+PCsNxKDGkf3F6IlPd+qG6XriverOQ1XFFiN1rTHmU6fL6bSkDNp/hJCBU9NwieUqoXl1UptAf5qSHyUFlaiWtAuJvCxw0V1kgJthljVhw8kRvdsNpD8lkNqw11/F5LzpJy0klSgGjGvCEDkh4FSGqSwtXK5UqQXy8d9IzYowEC3Kpl2Og64A/h6x+So5sJIVLKLXa1wIKV1KtzRnWZ6YFpuIosbVL2ahJko8O+nUQIDAQABo4HSMIHPMEgGA1UdHwRBMD8wPaA7oDmGN2h0dHBzOi8vdGNzLm15c2FwLmNvbS9jcmwvVHJ1c3RDb21tdW5pdHlJSS9TQVBJb1RDQS5jcmwwDAYDVR0TAQH/BAIwADAlBgNVHRIEHjAchhpodHRwOi8vc2VydmljZS5zYXAuY29tL1RDUzAOBgNVHQ8BAf8EBAMCBsAwHQYDVR0OBBYEFFc7w7CmcPbfin0wwL7jd8Sf2nMfMB8GA1UdIwQYMBaAFJW3s/VY3tW0s1hG4PKmyXhOvS11MA0GCSqGSIb3DQEBCwUAA4IBAQDuqP+HMbENyjsmj7Bbw/TIezUrUylG9SbsknxNhEyBDRRweM4vpRpjYXYQEhzg+uuPCT94pXxAJgCRs6WHsYWYnRiXjtUZ8XRKbbOIH+5ptghMspvi52LEwZDQtjkuhH0t/IzrCIz4+24xcgJbRiAqUjx021PWxlB/gkXOOTaDkc/AZmfabWZCr+K6iec4ITxf0+PwS36fK1fV+bz0CoEt3VhE+cv/X0FdansB9qCDccgCtMLKDBjGkF/wS/zCgv3PFVhxB4WUhYlE831aLUbTTLhaC7l7WX79bAAY6Fy+8d7cnaol32UnnxVMREE+2XN9m5TGCX5n6VPPYgyNMlOt"; - X509Certificate certificate = - new KeyStoreCreationService().createCertificate(encryptedCertificate); - assertNotNull(certificate); - } + @Test + void givenValidEncryptedCertificateCreateCertificateShouldReturnCertificate() throws Throwable { + var encryptedCertificate = + "MIIEQDCCAyigAwIBAgIPAMGPhggNbxUUEAECACO7MA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNVBAYTAkRFMSMwIQYDVQQKExpTQVAgSW9UIFRydXN0IENvbW11bml0eSBJSTEiMCAGA1UEAxMZU0FQIEludGVybmV0IG9mIFRoaW5ncyBDQTAeFw0xODAyMTQwNzI2MzJaFw0xOTAyMTQwNzI2MzJaMIGNMQswCQYDVQQGEwJERTEcMBoGA1UEChMTU0FQIFRydXN0IENvbW11bml0eTEVMBMGA1UECxMMSW9UIFNlcnZpY2VzMUkwRwYDVQQDFEBjbGllbnRpZDo0MjIzN2NkZC0wYjFkLTQyNzItODNlYS04MWVmNDgyYjI3ODd8aW5zdGFuY2VpZDpka2UtZGV2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnbzz3hdS8sMNyZt/uGzMJeKgY+o9d7RekimomsrF5ve4IPa4RPSz9I6V0BexXbrUrPwZcZT9OAJyW8Ig3U0dy/1bcLrhtI+auLRXg6xS0I23+PCsNxKDGkf3F6IlPd+qG6XriverOQ1XFFiN1rTHmU6fL6bSkDNp/hJCBU9NwieUqoXl1UptAf5qSHyUFlaiWtAuJvCxw0V1kgJthljVhw8kRvdsNpD8lkNqw11/F5LzpJy0klSgGjGvCEDkh4FSGqSwtXK5UqQXy8d9IzYowEC3Kpl2Og64A/h6x+So5sJIVLKLXa1wIKV1KtzRnWZ6YFpuIosbVL2ahJko8O+nUQIDAQABo4HSMIHPMEgGA1UdHwRBMD8wPaA7oDmGN2h0dHBzOi8vdGNzLm15c2FwLmNvbS9jcmwvVHJ1c3RDb21tdW5pdHlJSS9TQVBJb1RDQS5jcmwwDAYDVR0TAQH/BAIwADAlBgNVHRIEHjAchhpodHRwOi8vc2VydmljZS5zYXAuY29tL1RDUzAOBgNVHQ8BAf8EBAMCBsAwHQYDVR0OBBYEFFc7w7CmcPbfin0wwL7jd8Sf2nMfMB8GA1UdIwQYMBaAFJW3s/VY3tW0s1hG4PKmyXhOvS11MA0GCSqGSIb3DQEBCwUAA4IBAQDuqP+HMbENyjsmj7Bbw/TIezUrUylG9SbsknxNhEyBDRRweM4vpRpjYXYQEhzg+uuPCT94pXxAJgCRs6WHsYWYnRiXjtUZ8XRKbbOIH+5ptghMspvi52LEwZDQtjkuhH0t/IzrCIz4+24xcgJbRiAqUjx021PWxlB/gkXOOTaDkc/AZmfabWZCr+K6iec4ITxf0+PwS36fK1fV+bz0CoEt3VhE+cv/X0FdansB9qCDccgCtMLKDBjGkF/wS/zCgv3PFVhxB4WUhYlE831aLUbTTLhaC7l7WX79bAAY6Fy+8d7cnaol32UnnxVMREE+2XN9m5TGCX5n6VPPYgyNMlOt"; + var certificate = + new KeyStoreCreationService().createCertificate(encryptedCertificate); + assertNotNull(certificate); + } - @Test - void givenInvalidEncryptedCertificateCreateCertificateShouldFail() { - String encryptedCertificate = "TOFUWURST"; - assertThrows( - IllegalArgumentException.class, - () -> new KeyStoreCreationService().createCertificate(encryptedCertificate)); - } + @Test + void givenInvalidEncryptedCertificateCreateCertificateShouldFail() { + var encryptedCertificate = "TOFUWURST"; + assertThrows( + IllegalArgumentException.class, + () -> new KeyStoreCreationService().createCertificate(encryptedCertificate)); + } } diff --git a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/SequenceNumberServiceTest.java b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/SequenceNumberServiceTest.java index f755ebea..2272e00c 100644 --- a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/SequenceNumberServiceTest.java +++ b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/SequenceNumberServiceTest.java @@ -6,62 +6,62 @@ class SequenceNumberServiceTest { - @Test - void givenOnboardingResponseWhenGeneratingSequenceNumberForTheFirstTimeThenTheResultShouldBe1() { - OnboardingResponse onboardingResponse = new OnboardingResponse(); - onboardingResponse.setSensorAlternateId("this-is-my-id"); - Assertions.assertEquals( - 1, SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); - } + @Test + void givenOnboardingResponseWhenGeneratingSequenceNumberForTheFirstTimeThenTheResultShouldBe1() { + var onboardingResponse = new OnboardingResponse(); + onboardingResponse.setSensorAlternateId("this-is-my-id"); + Assertions.assertEquals( + 1, SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); + } - @Test - void - givenOnboardingResponseWhenGeneratingSequenceNumberForTwoTimesInARowThenTheResultShouldBe1And2() { - OnboardingResponse onboardingResponse = new OnboardingResponse(); - onboardingResponse.setSensorAlternateId("this-is-another-id"); - Assertions.assertEquals( - 1, SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); - Assertions.assertEquals( - 2, SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); - } + @Test + void + givenOnboardingResponseWhenGeneratingSequenceNumberForTwoTimesInARowThenTheResultShouldBe1And2() { + var onboardingResponse = new OnboardingResponse(); + onboardingResponse.setSensorAlternateId("this-is-another-id"); + Assertions.assertEquals( + 1, SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); + Assertions.assertEquals( + 2, SequenceNumberService.generateSequenceNumberForEndpoint(onboardingResponse)); + } - @Test - void - givenTwoOnboardingResponsesWhenGeneratingSequenceNumberForTheFirstTimeThenTheResultShouldBe1ForBoth() { - OnboardingResponse firstOnboardingResponse = new OnboardingResponse(); - firstOnboardingResponse.setSensorAlternateId("this-is-the-first-id"); - OnboardingResponse secondOnboardingResponse = new OnboardingResponse(); - secondOnboardingResponse.setSensorAlternateId("this-is-the-second-id"); - Assertions.assertEquals( - 1, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); - Assertions.assertEquals( - 1, SequenceNumberService.generateSequenceNumberForEndpoint(secondOnboardingResponse)); - } + @Test + void + givenTwoOnboardingResponsesWhenGeneratingSequenceNumberForTheFirstTimeThenTheResultShouldBe1ForBoth() { + var firstOnboardingResponse = new OnboardingResponse(); + firstOnboardingResponse.setSensorAlternateId("this-is-the-first-id"); + var secondOnboardingResponse = new OnboardingResponse(); + secondOnboardingResponse.setSensorAlternateId("this-is-the-second-id"); + Assertions.assertEquals( + 1, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); + Assertions.assertEquals( + 1, SequenceNumberService.generateSequenceNumberForEndpoint(secondOnboardingResponse)); + } - @Test - void - givenTwoOnboardingResponsesWhenGeneratingSequenceNumberForMultipleTimesThenTheResultShouldBeMatchingTheTimesTheMethodWasCalled() { - OnboardingResponse firstOnboardingResponse = new OnboardingResponse(); - firstOnboardingResponse.setSensorAlternateId("this-is-the-first-id-for-multiple-calls"); - OnboardingResponse secondOnboardingResponse = new OnboardingResponse(); - secondOnboardingResponse.setSensorAlternateId("this-is-the-second-id-multiple-calls"); - Assertions.assertEquals( - 1, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); - Assertions.assertEquals( - 2, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); - Assertions.assertEquals( - 3, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); - Assertions.assertEquals( - 4, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); + @Test + void + givenTwoOnboardingResponsesWhenGeneratingSequenceNumberForMultipleTimesThenTheResultShouldBeMatchingTheTimesTheMethodWasCalled() { + var firstOnboardingResponse = new OnboardingResponse(); + firstOnboardingResponse.setSensorAlternateId("this-is-the-first-id-for-multiple-calls"); + var secondOnboardingResponse = new OnboardingResponse(); + secondOnboardingResponse.setSensorAlternateId("this-is-the-second-id-multiple-calls"); + Assertions.assertEquals( + 1, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); + Assertions.assertEquals( + 2, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); + Assertions.assertEquals( + 3, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); + Assertions.assertEquals( + 4, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); - Assertions.assertEquals( - 1, SequenceNumberService.generateSequenceNumberForEndpoint(secondOnboardingResponse)); - Assertions.assertEquals( - 2, SequenceNumberService.generateSequenceNumberForEndpoint(secondOnboardingResponse)); - Assertions.assertEquals( - 3, SequenceNumberService.generateSequenceNumberForEndpoint(secondOnboardingResponse)); + Assertions.assertEquals( + 1, SequenceNumberService.generateSequenceNumberForEndpoint(secondOnboardingResponse)); + Assertions.assertEquals( + 2, SequenceNumberService.generateSequenceNumberForEndpoint(secondOnboardingResponse)); + Assertions.assertEquals( + 3, SequenceNumberService.generateSequenceNumberForEndpoint(secondOnboardingResponse)); - Assertions.assertEquals( - 5, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); - } + Assertions.assertEquals( + 5, SequenceNumberService.generateSequenceNumberForEndpoint(firstOnboardingResponse)); + } } diff --git a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodeMessageServiceImplTest.java b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodeMessageServiceImplTest.java index 2b76e57d..bc79111f 100644 --- a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodeMessageServiceImplTest.java +++ b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodeMessageServiceImplTest.java @@ -1,66 +1,65 @@ package com.dke.data.agrirouter.impl.messaging.encoding; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.DecodeMessageService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertThrows; + class DecodeMessageServiceImplTest { - private static final String ENCODED_MESSAGE = - "IwoBMRABGhBka2U6Y2FwYWJpbGl0aWVzQgoIsdGL1AUQwIQ9TgpMCjt" - + "hZ3Jpcm91dGVyLnJlcXVlc3QucGF5bG9hZC5lbmRwb2ludC5DYXBhYmlsaXR5U3BlY2lm" - + "aWNhdGlvbhINc2VjcmV0TWVzc2FnZQ=="; + private static final String ENCODED_MESSAGE = + "IwoBMRABGhBka2U6Y2FwYWJpbGl0aWVzQgoIsdGL1AUQwIQ9TgpMCjt" + + "hZ3Jpcm91dGVyLnJlcXVlc3QucGF5bG9hZC5lbmRwb2ludC5DYXBhYmlsaXR5U3BlY2lm" + + "aWNhdGlvbhINc2VjcmV0TWVzc2FnZQ=="; - @Test - @SuppressWarnings("ConstantConditions") - void givenNullDecodeShouldNotFail() { - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - String message = null; - Assertions.assertThrows( - IllegalArgumentException.class, () -> decodeMessageService.decode(message)); - } + @Test + @SuppressWarnings("ConstantConditions") + void givenNullDecodeShouldNotFail() { + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + String message = null; + Assertions.assertThrows( + IllegalArgumentException.class, () -> decodeMessageService.decode(message)); + } - @Test - void givenEmptyMessageDecodeShouldNotFail() { - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - Assertions.assertThrows(IllegalArgumentException.class, () -> decodeMessageService.decode("")); - } + @Test + void givenEmptyMessageDecodeShouldNotFail() { + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + Assertions.assertThrows(IllegalArgumentException.class, () -> decodeMessageService.decode("")); + } - @Test - void givenWhitespaceMessageDecodeShouldNotFail() { - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - Assertions.assertThrows( - IllegalArgumentException.class, () -> decodeMessageService.decode(" ")); - } + @Test + void givenWhitespaceMessageDecodeShouldNotFail() { + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + Assertions.assertThrows( + IllegalArgumentException.class, () -> decodeMessageService.decode(" ")); + } - @Test - void givenValidEncodedPasswordDecodeShouldNotFail() { - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodedMessage = - decodeMessageService.decode(DecodeMessageServiceImplTest.ENCODED_MESSAGE); - Assertions.assertEquals( - decodedMessage.getResponsePayloadWrapper().getDetails().getValue().toStringUtf8(), - "secretMessage"); - } + @Test + void givenValidEncodedPasswordDecodeShouldNotFail() { + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodedMessage = + decodeMessageService.decode(DecodeMessageServiceImplTest.ENCODED_MESSAGE); + Assertions.assertEquals( + decodedMessage.getResponsePayloadWrapper().getDetails().getValue().toStringUtf8(), + "secretMessage"); + } - @Test - void givenWrongEncodedPasswordDecodeShouldThrowException() { - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - String wrongEncodedMessage = "Wrong Message"; - assertThrows( - IllegalArgumentException.class, () -> decodeMessageService.decode(wrongEncodedMessage)); - } + @Test + void givenWrongEncodedPasswordDecodeShouldThrowException() { + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var wrongEncodedMessage = "Wrong Message"; + assertThrows( + IllegalArgumentException.class, () -> decodeMessageService.decode(wrongEncodedMessage)); + } - @Test - void givenNullEnvironmentDecodeShouldNotFail() { - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodedMessage = - decodeMessageService.decode(DecodeMessageServiceImplTest.ENCODED_MESSAGE); - Assertions.assertEquals( - decodedMessage.getResponsePayloadWrapper().getDetails().getValue().toStringUtf8(), - "secretMessage"); - } + @Test + void givenNullEnvironmentDecodeShouldNotFail() { + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodedMessage = + decodeMessageService.decode(DecodeMessageServiceImplTest.ENCODED_MESSAGE); + Assertions.assertEquals( + decodedMessage.getResponsePayloadWrapper().getDetails().getValue().toStringUtf8(), + "secretMessage"); + } } diff --git a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodePushNotificationServiceImplTest.java b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodePushNotificationServiceImplTest.java index f316c7d3..d96a01ec 100644 --- a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodePushNotificationServiceImplTest.java +++ b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/DecodePushNotificationServiceImplTest.java @@ -1,79 +1,78 @@ package com.dke.data.agrirouter.impl.messaging.encoding; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import agrirouter.feed.push.notification.PushNotificationOuterClass; import com.dke.data.agrirouter.api.service.messaging.encoding.DecodePushNotificationService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + class DecodePushNotificationServiceImplTest { - private static final String ENCODED_MESSAGE = - "OAgAEAwiJGY5MzVmZGRkLThkOTItNGZjMi1hMzZmLTBjNzJjZWY3NTE4NyoMCKuxwe" - + "UFEIDrrr0DlgMKkwMKR3R5cGVzLmFncmlyb3V0ZXIuY29tL2Fncmlyb3V0ZXIuZmVlZC5wdXNoLm5vdGlmaWNhdGlvbi5QdXNoTm90aW" - + "ZpY2F0aW9uEscCCsQCCp4BCiRiMzhlNWRiYy1iZGJmLTQ5ZGEtOGRjOS1jOGRiMDJhM2VjZjYSCWRrZTpvdGhlchoAKJ0BMgoIrrHB5Q" - + "UQwIQ9OAFCJGRmOTdhYzgwLTA0ZWYtNDUzYS05OTE4LTk1OTMzNjUyOTI2MEoMCKuxweUFEID0qL4DUiQyNDhhOWJjZi0yYjIyLTQ0Nz" - + "YtYTIwMi0wMDgyMTgxNWU5M2YSoAESnQFbcnE1Ml9naXZlblNpbmdsZVB1c2hOb3RpZmljYXRpb25SZWNlaXZlcl9QdXNoTm90aWZpY2" - + "F0aW9uX1Nob3VsZEJlRGVsaXZlcmVkVG9UaGVPdXRib3hdIE1FU1NBR0UgQ09OVEVOVCBGT1IgVEVTVElORywgR0VORVJBVEVEIEFUIF" - + "syMDE5LTA0LTEyVDA5OjIxOjUwLjY0OVpd"; + private static final String ENCODED_MESSAGE = + "OAgAEAwiJGY5MzVmZGRkLThkOTItNGZjMi1hMzZmLTBjNzJjZWY3NTE4NyoMCKuxwe" + + "UFEIDrrr0DlgMKkwMKR3R5cGVzLmFncmlyb3V0ZXIuY29tL2Fncmlyb3V0ZXIuZmVlZC5wdXNoLm5vdGlmaWNhdGlvbi5QdXNoTm90aW" + + "ZpY2F0aW9uEscCCsQCCp4BCiRiMzhlNWRiYy1iZGJmLTQ5ZGEtOGRjOS1jOGRiMDJhM2VjZjYSCWRrZTpvdGhlchoAKJ0BMgoIrrHB5Q" + + "UQwIQ9OAFCJGRmOTdhYzgwLTA0ZWYtNDUzYS05OTE4LTk1OTMzNjUyOTI2MEoMCKuxweUFEID0qL4DUiQyNDhhOWJjZi0yYjIyLTQ0Nz" + + "YtYTIwMi0wMDgyMTgxNWU5M2YSoAESnQFbcnE1Ml9naXZlblNpbmdsZVB1c2hOb3RpZmljYXRpb25SZWNlaXZlcl9QdXNoTm90aWZpY2" + + "F0aW9uX1Nob3VsZEJlRGVsaXZlcmVkVG9UaGVPdXRib3hdIE1FU1NBR0UgQ09OVEVOVCBGT1IgVEVTVElORywgR0VORVJBVEVEIEFUIF" + + "syMDE5LTA0LTEyVDA5OjIxOjUwLjY0OVpd"; - @Test - @SuppressWarnings("ConstantConditions") - void givenNullDecodeShouldNotFail() { - DecodePushNotificationService decodePushNotificationService = - new DecodePushNotificationServiceImpl(); - String message = null; - Assertions.assertThrows( - IllegalArgumentException.class, () -> decodePushNotificationService.decode(message)); - } + @Test + @SuppressWarnings("ConstantConditions") + void givenNullDecodeShouldNotFail() { + DecodePushNotificationService decodePushNotificationService = + new DecodePushNotificationServiceImpl(); + String message = null; + Assertions.assertThrows( + IllegalArgumentException.class, () -> decodePushNotificationService.decode(message)); + } - @Test - void givenEmptyMessageDecodeShouldNotFail() { - DecodePushNotificationService decodePushNotificationService = - new DecodePushNotificationServiceImpl(); - Assertions.assertThrows( - IllegalArgumentException.class, () -> decodePushNotificationService.decode("")); - } + @Test + void givenEmptyMessageDecodeShouldNotFail() { + DecodePushNotificationService decodePushNotificationService = + new DecodePushNotificationServiceImpl(); + Assertions.assertThrows( + IllegalArgumentException.class, () -> decodePushNotificationService.decode("")); + } - @Test - void givenWhitespaceMessageDecodeShouldNotFail() { - DecodePushNotificationService decodePushNotificationService = - new DecodePushNotificationServiceImpl(); - Assertions.assertThrows( - IllegalArgumentException.class, () -> decodePushNotificationService.decode(" ")); - } + @Test + void givenWhitespaceMessageDecodeShouldNotFail() { + DecodePushNotificationService decodePushNotificationService = + new DecodePushNotificationServiceImpl(); + Assertions.assertThrows( + IllegalArgumentException.class, () -> decodePushNotificationService.decode(" ")); + } - @Test - void givenValidEncodedPasswordDecodeShouldNotFail() { - DecodePushNotificationService decodePushNotificationService = - new DecodePushNotificationServiceImpl(); - PushNotificationOuterClass.PushNotification pushNotification = - decodePushNotificationService.decode(DecodePushNotificationServiceImplTest.ENCODED_MESSAGE); - assertEquals( - "[rq52_givenSinglePushNotificationReceiver_PushNotification_ShouldBeDeliveredToTheOutbox] MESSAGE CONTENT FOR TESTING, GENERATED AT [2019-04-12T09:21:50.649Z]", - pushNotification.getMessages(0).getContent().getValue().toStringUtf8()); - } + @Test + void givenValidEncodedPasswordDecodeShouldNotFail() { + DecodePushNotificationService decodePushNotificationService = + new DecodePushNotificationServiceImpl(); + var pushNotification = + decodePushNotificationService.decode(DecodePushNotificationServiceImplTest.ENCODED_MESSAGE); + assertEquals( + "[rq52_givenSinglePushNotificationReceiver_PushNotification_ShouldBeDeliveredToTheOutbox] MESSAGE CONTENT FOR TESTING, GENERATED AT [2019-04-12T09:21:50.649Z]", + pushNotification.getMessages(0).getContent().getValue().toStringUtf8()); + } - @Test - void givenWrongEncodedPasswordDecodeShouldThrowException() { - DecodePushNotificationService decodePushNotificationService = - new DecodePushNotificationServiceImpl(); - String wrongEncodedMessage = "Wrong Message"; - assertThrows( - IllegalArgumentException.class, - () -> decodePushNotificationService.decode(wrongEncodedMessage)); - } + @Test + void givenWrongEncodedPasswordDecodeShouldThrowException() { + DecodePushNotificationService decodePushNotificationService = + new DecodePushNotificationServiceImpl(); + var wrongEncodedMessage = "Wrong Message"; + assertThrows( + IllegalArgumentException.class, + () -> decodePushNotificationService.decode(wrongEncodedMessage)); + } - @Test - void givenNullEnvironmentDecodeShouldNotFail() { - DecodePushNotificationService decodePushNotificationService = - new DecodePushNotificationServiceImpl(); - PushNotificationOuterClass.PushNotification pushNotification = - decodePushNotificationService.decode(DecodePushNotificationServiceImplTest.ENCODED_MESSAGE); - assertEquals( - "[rq52_givenSinglePushNotificationReceiver_PushNotification_ShouldBeDeliveredToTheOutbox] MESSAGE CONTENT FOR TESTING, GENERATED AT [2019-04-12T09:21:50.649Z]", - pushNotification.getMessages(0).getContent().getValue().toStringUtf8()); - } + @Test + void givenNullEnvironmentDecodeShouldNotFail() { + DecodePushNotificationService decodePushNotificationService = + new DecodePushNotificationServiceImpl(); + var pushNotification = + decodePushNotificationService.decode(DecodePushNotificationServiceImplTest.ENCODED_MESSAGE); + assertEquals( + "[rq52_givenSinglePushNotificationReceiver_PushNotification_ShouldBeDeliveredToTheOutbox] MESSAGE CONTENT FOR TESTING, GENERATED AT [2019-04-12T09:21:50.649Z]", + pushNotification.getMessages(0).getContent().getValue().toStringUtf8()); + } } diff --git a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImplTest.java b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImplTest.java index c5c680ad..650f909c 100644 --- a/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImplTest.java +++ b/agrirouter-sdk-java-impl/src/test/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImplTest.java @@ -1,179 +1,176 @@ package com.dke.data.agrirouter.impl.messaging.encoding; -import static org.junit.jupiter.api.Assertions.assertThrows; - import agrirouter.request.Request; import agrirouter.request.payload.endpoint.Capabilities; -import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.enums.ContentMessageType; import com.dke.data.agrirouter.api.enums.SystemMessageType; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.parameters.MessageHeaderParameters; -import com.dke.data.agrirouter.api.service.parameters.MessageParameterTuple; import com.dke.data.agrirouter.api.service.parameters.PayloadParameters; import com.dke.data.agrirouter.api.service.parameters.PayloadParametersKt; import com.google.protobuf.ByteString; -import java.util.List; import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertThrows; + class AEncodeEncodeMessageServiceImplTest { - @Test - void givenEmptyMessageWhenChunkingThenTheImplementationShouldReturnTheRightNumberOfChunks() { - EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - - ByteString toSendMessage = ByteString.copyFromUtf8(""); - MessageHeaderParameters messageHeaderParameters = getMessageHeaderParameters(); - messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); - PayloadParameters payloadParameters = getPayloadParameters(toSendMessage); - - final List chunks = - encodeMessageService.chunkAndBase64EncodeEachChunk( - messageHeaderParameters, payloadParameters, fakeOnboardingResponse()); - Assertions.assertEquals(1, chunks.size()); - } - - @Test - void - givenSingleChunkMessageWhenChunkingThenTheImplementationShouldReturnTheRightNumberOfChunks() { - EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - - ByteString toSendMessage = ByteString.copyFromUtf8("secretMessage"); - MessageHeaderParameters messageHeaderParameters = getMessageHeaderParameters(); - messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); - PayloadParameters payloadParameters = getPayloadParameters(toSendMessage); - - final List chunks = - encodeMessageService.chunkAndBase64EncodeEachChunk( - messageHeaderParameters, payloadParameters, fakeOnboardingResponse()); - Assertions.assertEquals(1, chunks.size()); - } - - @Test - void - givenSingleChunkMessageWithMaxSizeWhenChunkingThenTheImplementationShouldReturnTheRightNumberOfChunks() { - EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - - ByteString toSendMessage = - ByteString.copyFromUtf8( - RandomStringUtils.randomAlphabetic( - PayloadParametersKt.MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT)); - MessageHeaderParameters messageHeaderParameters = getMessageHeaderParameters(); - messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); - PayloadParameters payloadParameters = getPayloadParameters(toSendMessage); - - final List chunks = - encodeMessageService.chunkAndBase64EncodeEachChunk( - messageHeaderParameters, payloadParameters, fakeOnboardingResponse()); - Assertions.assertEquals(1, chunks.size()); - } - - @Test - @SuppressWarnings("ConstantConditions") - void - givenMultipleChunkMessageWithMaxSizeWhenChunkingThenTheImplementationShouldReturnTheRightNumberOfChunks() { - EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - - ByteString toSendMessage = ByteString.copyFromUtf8(RandomStringUtils.randomAlphabetic(1024001)); - MessageHeaderParameters messageHeaderParameters = getMessageHeaderParameters(); - messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); - PayloadParameters payloadParameters = getPayloadParameters(toSendMessage); - - final List chunks = - encodeMessageService.chunkAndBase64EncodeEachChunk( - messageHeaderParameters, payloadParameters, fakeOnboardingResponse()); - Assertions.assertEquals(2, chunks.size()); - - Assertions.assertEquals( - 2, chunks.get(0).getMessageHeaderParameters().getChunkInfo().getTotal()); - Assertions.assertEquals( - 2, chunks.get(1).getMessageHeaderParameters().getChunkInfo().getTotal()); - - Assertions.assertEquals( - 1, chunks.get(0).getMessageHeaderParameters().getChunkInfo().getCurrent()); - Assertions.assertEquals( - 2, chunks.get(1).getMessageHeaderParameters().getChunkInfo().getCurrent()); - - Assertions.assertEquals( - chunks.get(0).getMessageHeaderParameters().getChunkInfo().getContextId(), - chunks.get(1).getMessageHeaderParameters().getChunkInfo().getContextId()); - } - - @Test - void givenValidParametersEncodeAndDecodeBackShouldNotFail() { - EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - - ByteString toSendMessage = ByteString.copyFromUtf8("secretMessage"); - MessageHeaderParameters messageHeaderParameters = getMessageHeaderParameters(); - PayloadParameters payloadParameters = getPayloadParameters(toSendMessage); - - String encodedMessage = encodeMessageService.encode(messageHeaderParameters, payloadParameters); - DecodeMessageServiceImpl decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse response = decodeMessageService.decode(encodedMessage); - Assertions.assertEquals( - "secretMessage", - response.getResponsePayloadWrapper().getDetails().getValue().toStringUtf8()); - } - - @Test - void givenWrongPayloadEncodeAndDecodeBackShouldFail() { - EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - - ByteString toSendMessage = ByteString.copyFromUtf8("wrong Message"); - MessageHeaderParameters messageHeaderParameters = getMessageHeaderParameters(); - PayloadParameters payloadParameters = getPayloadParameters(toSendMessage); - - String encodedMessage = encodeMessageService.encode(messageHeaderParameters, payloadParameters); - DecodeMessageServiceImpl decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse response = decodeMessageService.decode(encodedMessage); - Assertions.assertNotEquals( - "secretMessage", - response.getResponsePayloadWrapper().getDetails().getValue().toStringUtf8()); - } - - @Test - void givenNullPayLoadParametersEncodeShouldThrowException() { - EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - - MessageHeaderParameters messageHeaderParameters = getMessageHeaderParameters(); - assertThrows( - IllegalArgumentException.class, - () -> encodeMessageService.encode(messageHeaderParameters, null)); - } - - @Test - void givenNullMessageHeaderEncodeShouldThrowException() { - EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - - PayloadParameters payloadParameters = - getPayloadParameters(ByteString.copyFromUtf8("secretMessage")); - assertThrows( - IllegalArgumentException.class, () -> encodeMessageService.encode(null, payloadParameters)); - } - - private MessageHeaderParameters getMessageHeaderParameters() { - MessageHeaderParameters messageHeaderParameters = new MessageHeaderParameters(); - messageHeaderParameters.setApplicationMessageId("1"); - messageHeaderParameters.setApplicationMessageSeqNo(1); - messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_CAPABILITIES); - messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); - return messageHeaderParameters; - } - - private PayloadParameters getPayloadParameters(ByteString toSendMessage) { - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setTypeUrl( - Capabilities.CapabilitySpecification.getDescriptor().getFullName()); - payloadParameters.setValue(toSendMessage); - return payloadParameters; - } - - private OnboardingResponse fakeOnboardingResponse() { - OnboardingResponse onboardingResponse = new OnboardingResponse(); - onboardingResponse.setSensorAlternateId("THIS_IS_FAKE"); - return onboardingResponse; - } + @Test + void givenEmptyMessageWhenChunkingThenTheImplementationShouldReturnTheRightNumberOfChunks() { + EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + + var toSendMessage = ByteString.copyFromUtf8(""); + var messageHeaderParameters = getMessageHeaderParameters(); + messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); + var payloadParameters = getPayloadParameters(toSendMessage); + + final var chunks = + encodeMessageService.chunkAndBase64EncodeEachChunk( + messageHeaderParameters, payloadParameters, fakeOnboardingResponse()); + Assertions.assertEquals(1, chunks.size()); + } + + @Test + void + givenSingleChunkMessageWhenChunkingThenTheImplementationShouldReturnTheRightNumberOfChunks() { + EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + + var toSendMessage = ByteString.copyFromUtf8("secretMessage"); + var messageHeaderParameters = getMessageHeaderParameters(); + messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); + var payloadParameters = getPayloadParameters(toSendMessage); + + final var chunks = + encodeMessageService.chunkAndBase64EncodeEachChunk( + messageHeaderParameters, payloadParameters, fakeOnboardingResponse()); + Assertions.assertEquals(1, chunks.size()); + } + + @Test + void + givenSingleChunkMessageWithMaxSizeWhenChunkingThenTheImplementationShouldReturnTheRightNumberOfChunks() { + EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + + var toSendMessage = + ByteString.copyFromUtf8( + RandomStringUtils.randomAlphabetic( + PayloadParametersKt.MAX_LENGTH_FOR_RAW_MESSAGE_CONTENT)); + var messageHeaderParameters = getMessageHeaderParameters(); + messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); + var payloadParameters = getPayloadParameters(toSendMessage); + + final var chunks = + encodeMessageService.chunkAndBase64EncodeEachChunk( + messageHeaderParameters, payloadParameters, fakeOnboardingResponse()); + Assertions.assertEquals(1, chunks.size()); + } + + @Test + @SuppressWarnings("ConstantConditions") + void + givenMultipleChunkMessageWithMaxSizeWhenChunkingThenTheImplementationShouldReturnTheRightNumberOfChunks() { + EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + + var toSendMessage = ByteString.copyFromUtf8(RandomStringUtils.randomAlphabetic(1024001)); + var messageHeaderParameters = getMessageHeaderParameters(); + messageHeaderParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); + var payloadParameters = getPayloadParameters(toSendMessage); + + final var chunks = + encodeMessageService.chunkAndBase64EncodeEachChunk( + messageHeaderParameters, payloadParameters, fakeOnboardingResponse()); + Assertions.assertEquals(2, chunks.size()); + + Assertions.assertEquals( + 2, chunks.get(0).getMessageHeaderParameters().getChunkInfo().getTotal()); + Assertions.assertEquals( + 2, chunks.get(1).getMessageHeaderParameters().getChunkInfo().getTotal()); + + Assertions.assertEquals( + 1, chunks.get(0).getMessageHeaderParameters().getChunkInfo().getCurrent()); + Assertions.assertEquals( + 2, chunks.get(1).getMessageHeaderParameters().getChunkInfo().getCurrent()); + + Assertions.assertEquals( + chunks.get(0).getMessageHeaderParameters().getChunkInfo().getContextId(), + chunks.get(1).getMessageHeaderParameters().getChunkInfo().getContextId()); + } + + @Test + void givenValidParametersEncodeAndDecodeBackShouldNotFail() { + EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + + var toSendMessage = ByteString.copyFromUtf8("secretMessage"); + var messageHeaderParameters = getMessageHeaderParameters(); + var payloadParameters = getPayloadParameters(toSendMessage); + + var encodedMessage = encodeMessageService.encode(messageHeaderParameters, payloadParameters); + var decodeMessageService = new DecodeMessageServiceImpl(); + var response = decodeMessageService.decode(encodedMessage); + Assertions.assertEquals( + "secretMessage", + response.getResponsePayloadWrapper().getDetails().getValue().toStringUtf8()); + } + + @Test + void givenWrongPayloadEncodeAndDecodeBackShouldFail() { + EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + + var toSendMessage = ByteString.copyFromUtf8("wrong Message"); + var messageHeaderParameters = getMessageHeaderParameters(); + var payloadParameters = getPayloadParameters(toSendMessage); + + var encodedMessage = encodeMessageService.encode(messageHeaderParameters, payloadParameters); + var decodeMessageService = new DecodeMessageServiceImpl(); + var response = decodeMessageService.decode(encodedMessage); + Assertions.assertNotEquals( + "secretMessage", + response.getResponsePayloadWrapper().getDetails().getValue().toStringUtf8()); + } + + @Test + void givenNullPayLoadParametersEncodeShouldThrowException() { + EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + + var messageHeaderParameters = getMessageHeaderParameters(); + assertThrows( + IllegalArgumentException.class, + () -> encodeMessageService.encode(messageHeaderParameters, null)); + } + + @Test + void givenNullMessageHeaderEncodeShouldThrowException() { + EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + + var payloadParameters = + getPayloadParameters(ByteString.copyFromUtf8("secretMessage")); + assertThrows( + IllegalArgumentException.class, () -> encodeMessageService.encode(null, payloadParameters)); + } + + private MessageHeaderParameters getMessageHeaderParameters() { + var messageHeaderParameters = new MessageHeaderParameters(); + messageHeaderParameters.setApplicationMessageId("1"); + messageHeaderParameters.setApplicationMessageSeqNo(1); + messageHeaderParameters.setTechnicalMessageType(SystemMessageType.DKE_CAPABILITIES); + messageHeaderParameters.setMode(Request.RequestEnvelope.Mode.DIRECT); + return messageHeaderParameters; + } + + private PayloadParameters getPayloadParameters(ByteString toSendMessage) { + var payloadParameters = new PayloadParameters(); + payloadParameters.setTypeUrl( + Capabilities.CapabilitySpecification.getDescriptor().getFullName()); + payloadParameters.setValue(toSendMessage); + return payloadParameters; + } + + private OnboardingResponse fakeOnboardingResponse() { + var onboardingResponse = new OnboardingResponse(); + onboardingResponse.setSensorAlternateId("THIS_IS_FAKE"); + return onboardingResponse; + } } diff --git a/agrirouter-sdk-java-tests/onboarding-responses/communication-unit.json b/agrirouter-sdk-java-tests/onboarding-responses/communication-unit.json index d3634f5e..0f244781 100644 --- a/agrirouter-sdk-java-tests/onboarding-responses/communication-unit.json +++ b/agrirouter-sdk-java-tests/onboarding-responses/communication-unit.json @@ -1 +1 @@ -{"deviceAlternateId":"ba9c08c9-e18a-4394-a913-579058f15064","capabilityAlternateId":"3035ec70-dca1-4d71-a000-e79eb5891f81","sensorAlternateId":"19747ef0-66f8-49d6-aceb-6c10105821c2","connectionCriteria":{"gatewayId":"3","measures":"https://dke-qa.eu10.cp.iot.sap/iot/gateway/rest/measures/ba9c08c9-e18a-4394-a913-579058f15064","commands":"https://dke-qa.eu10.cp.iot.sap/iot/gateway/rest/commands/ba9c08c9-e18a-4394-a913-579058f15064"},"authentication":{"type":"P12","secret":"nOq#RPxeFaOG6QSj1LLQj7w#i?VJQxR0?nz!","certificate":"MIACAQMwgAYJKoZIhvcNAQcBoIAkgASCBAAwgDCABgkqhkiG9w0BBwGggCSABIIEADCCBRowggUWBgsqhkiG9w0BDAoBAqCCBO4wggTqMBwGCiqGSIb3DQEMAQMwDgQIQjR0iz6awo4CAgfQBIIEyLqx3hYdCsJgGdwLLN2nscoLjr54EOO3beTD5MHZdVql1A0MBxIhFi8iDicNgRHkYLwxA1dHiSNx4kaPnmbtLwZ3xbTqNMLjXi1nGpz0yqdK8zE5Ia5c0Sq9WhvjezZj+TLWk5YebEsJObWLEHqX5D1Q0ukS5Y47bqldUbutTNXkVXLpZgzqqPR2ztJSrSZ6Cb0t8zzMZT9pEk4QOxpITZ4X389ZVNqziB4KnO3dw22hyqJGPCyobzV96F42SJLH7WPW8cTo2e9HTqic9FBZqR8ljomOy1ZhsgmzjY+aMZfk0ljvkC2eMIxOppxEDtHwHpCZIZLsCze3egymJ0kRt3Rsl9d0w95BSvOwU2MWb4XGYNjBN9Zx17yDyYnQ3I2iVUGnRHZJ/IznUg+Ull1IDWd0ZhV4bmUHH1GWJT2HCp1H3BiBvRtikrumAmhGpsyd/1kd7hAEM1mTW0BtLZxkI+3E0eGLM4rHYf5PW5zkbRi4hya0ZxDO4Lt1PAFGnwSMjxwo0RI/9CTDnRkTG88lGsHsT5+YuHUhp/Ld6yv/C1aV83+36pRlXoRs4TUu1jkZ/Oo6mNqlHV83Z6ZQJQVOyDHnnTHEmzBpVfJvREr+KTjykuh0K3kzf0fgcs1bRPGMkI37uG0WhiOCT0nPUO6kvu2PGTxTf0H3w5TB+7nHeaRkQt0mYQEA/nrFCnYUrPgNfuQxc94MJgbLLYe/tVULCxUvcvhkJZqd4pBFx5j5ThQYFgFaXS1RzW04Yst376+izC+JFfaCEu1UUEwPcla4CAkacnOlOyL5c6nvIRff66JiTryDx+qBbUD8lnVzhxeXa+Mnjg6ONSeeX/xo7T10KSHsjzuYyJC0mSm0eMpp38QxMEM2fhe7fMSfENUkTJ8NKmMMUKaJQdO/2xqT/An6Su8iRrDOk7ut0EWR5bmVkacKQwVLo/DUGZHRkBJQA+2v8Ahb8cfk76r/7koJQ6N/0Dc2Mbvv8zqon9qahQVC15/VEU+t6XRnXLIbCypR7QfjCPLe//UF1ntk/q79ObFL6A3Q/ZlxfoWEOJL9AqdvnWjoVhKyQws4v/2oFL3ti07zeS2wOyq2YXXaQiICYLL17riO/F5YGBSz7L52jNi9UOpneIIrx9K6k5+Kt8a5E0hzr8Ojw3ifoCNQl9cZ8j7iqwPy4ZcD1JJA/5qoIe9pmvot78ytPWZuyR6b9z7cD44CR1cO3MXjrpz349nnDGeEpZjyVJaLkWPPU2eXBIIEAB7LgwPElSSNzugB6j6epV+X+egiK8KQBIIBHjfDAL4ETS46drA7fMmSA5Uhc2ViSXeiAywHkXR7su8uKepKTNo9v3pDDv0jroe7zcPLKb8MmQtUqfUd+hq3VGsbFAN+e3YACI4jvZubuC9UYpKbiQz2T7sBfvNgM/5PUS6dtPgtdr1rkEGprcHjQKr0I6gWHmjMKfdCDK+ipu2aBjdrzKuzXuoGVYXGG3JWRVkVxRzyYqZWKH65maZVR0MG/I1TZ1SQflmBxodw/5vjZww/TMnO/aUVN0cGwsYa8J9WsTf+R402z99IFfKb3LUiFwlSAwdhVyxD+1BPlETkBXbE80uihoKzp0wi+O8zVt5gFEWojIvAn9Vc+C3ZMuYmNRBI7oklMRUwEwYJKoZIhvcNAQkVMQYEBAEAAAAAAAAAAAAwgAYJKoZIhvcNAQcGoIAwgAIBADCABgkqhkiG9w0BBwEwHAYKKoZIhvcNAQwBBjAOBAhqiRcK2WKOHQICB9CggASCBcih5nKKAygQjmXP+GKLzWFyfswP3mw42m+TkpbY+ogs/mcklGsaEgsW44YIF+dYBKBANKEXC2m3MignLWVqa/Kpo7RPL+M0P3WDLNqpMCpjwnZYdyrST8laRLUatQvPvk3y7oCtXPjBEZFg1Fiu4TbZpbZcPmgZ9ogZMGFgoxB54FJcyGn7teMuaBkfWLcZ6cLNp88YjCHKAG6w6f8wgBQeeJs8uhq5WlvIyXkQ/Iev9WIMgUpCVRdKe8RA2Ljk0PELfey/CUJ8HA8APrQv8+x7fp0lIhMkYKXwQFmACpF4oN7dP4yNmUBQfDnfHrDYJm/0ZD24OyN9Y3UsJRLC5qMVwQ77d8jBXApY98iPauASt1C6OuX4jpj4q80dTtZBqRZEVoiSSsg+s5C9evzABlMdpN985FKeNXpIweMRbXsFmab6JVsJg8Vaq9oQuqqrK/wDu2TEhzQyCfJHvHt0LkW97QLPnkdsVQdXAK/6mooKYjE0IPiWmlZoEk40Os+JwU7aWJoPFhak9e7AnzAPfob3dXZ7aXB9iTplsNjwyJ/yRU/yYhKpeQGdu4U9lYIjRzC1IJaQQm2g7KtAsJQxPvSpDbLRbBuVnNND3+QpEEzFbqK9/pveuJY1emv5si/AICK6AXF9JTsbOj7WtU6y+GFCHhy3Mj4xUHrWQipqgdm0SoYvvOmFTLLiVYarjxDo5lpZNm6onYD3HzIos0gshqMsNjp/7Vow2jK7z4CnQ2or/C+3HjgMxXnCWflY4amzVqv9yKjk2a2TSWsdBgmYNgPS9DnsD4Ue5Pb6PjOBYFR1KPZgSFKIMFwpbud0jbDveyz+ZV0nkL0iGU01s8QEggNYFP/cAcQHUg7o/SRBRSYCzmB/3p7FeqD44IMtm9g4jwiPtA+N18/MCneh6VAqA87Zvbo6dtld4ltYP6T9+t7mTj6GYIZe5t5YXtzJ5aFH0twFHFCdleoN9xSaN7YYvPil5H7nOt4lmdsvb7fcSPydEvgDzV/I9ynhnsGlRsHot3OmRNLqToCIWtwlcXG59iskDlTKnLwhY6Rr8PxZjfNIYWC1xC66PDJPDJMVf7qDdYp+xfkF9aamrxrbhli3+1O7YYjIThBTNVLt01d5ESuNyo3h9StSbxLUX7FMy5QAv2cdN6BisOdcq03gdKRmNDjgqZ0JkEehmpdTztJCgyu0FqAzBpmBCPjIPLJ2KOFlKRJPGs7K6rW1QmjBYzdwPKoWv375p6Iw2pObM4nxNyMhL5YyxzAGnzGTYcLh/5go1ogucDWtGaMXM+vrnVZ3F4Y8y1zrpLuYJMvTp2/Jkc+K8alD6LpGFfmYHuIgmt0d4jwfCwE5625LCRGOnatgBR7ehsFsUqNanrfBgAkHNGob3KMdFjSLEdIEhqoTQjTbsEvdOx6pXsrGm1Fp7HmxNjCpt36oUqPNQIrk0DbD2WzThKUV2tfle0De0ki+tyskGp41nrMPhPA6YSQ5ByG3H7kzWBKGN6QNEGlzdOHizaSCBc3uOubWvhEKB5ab261rEQnshJFU70Erh3+cOTqYoRktFAxHwSlE5616OPPfkiwNHc/cYqO/Y7psKYmaohBlZ0yAn+/QOvOwYwLFz2bXzmRxHjjKnUeZz0pEO+oYUKlvrUIm8GjmQIwS6y78JBR6oit/7Hd3QkPQdB4Re4ss6WCWh+Edvjc88omG8lXWhKqW6E26PxmkBUzaQ5Szp/DrBvQS2bQOfvOez+gFNtcE7sleQryzpQCzlnV78th3uHZRerQ/n7p1E9YxkSaeYs4TVxxFx82BmZSuWsOoCob+dI3euKhY6FIHp01lhuaQaFkVTmX2jQ6tfn8pVWJIxfD3dYxCYlqWVtvk/64Em6zS5QXcQ6eZdvTI5RtSVRBXYYgcIK3uqK5qFITa230loeUvmG43KlooRxRXRyS0u3jF8SWWVaUK+XgZHaMns0355K5rkr7hYilZRFaY6opsewAAAAAAAAAAAAAAAAAAAAAAADAxMCEwCQYFKw4DAhoFAAQUSXS6j13RZidL+zMQTQX1DO6m6NkECPhqS/9UEIgKAgIH0AAA"}} \ No newline at end of file +{"deviceAlternateId":"cdee8e0c-05b8-4252-9da3-977239e54adc","capabilityAlternateId":"3035ec70-dca1-4d71-a000-e79eb5891f81","sensorAlternateId":"f658fa1a-fef3-43bc-87e7-4499858ac609","connectionCriteria":{"gatewayId":"3","measures":"https://dke-qa.eu10.cp.iot.sap/iot/gateway/rest/measures/cdee8e0c-05b8-4252-9da3-977239e54adc","commands":"https://dke-qa.eu10.cp.iot.sap/iot/gateway/rest/commands/cdee8e0c-05b8-4252-9da3-977239e54adc"},"authentication":{"type":"P12","secret":"FNG3X?X4gJwZlut!ebZ3rigVfQCyOrOqhCj7","certificate":"MIACAQMwgAYJKoZIhvcNAQcBoIAkgASCBAAwgDCABgkqhkiG9w0BBwGggCSABIIEADCCBRowggUWBgsqhkiG9w0BDAoBAqCCBO4wggTqMBwGCiqGSIb3DQEMAQMwDgQI5/bn3aK74qcCAgfQBIIEyKlLZWlLkNBwPfT1j43J/uq1b/YrPNaA/eh60KWjPWx9lliS/zbJoarogWz36W58YgR//iJ4vnzTcgfpWa76UtJmyaXbOmCGeBz6dlNldoXyhlAqm2gFI66VmSQEdsthcTkywAvGZvo9Z72EvSzCkHarAzz1CL7dAumHwx9dCyU07tupDoevNUsSRu5nbFf8fDO4IxpJN3gNjBl7o9peQEaVnFpbi9JY3+ycoFweFg3SaUD+Sdfu0fXo3M/7a5Nehc7iNWvVMQSe9aK6q0Vh/1O3h9GZ0VSb0OkY6R+9/yqQs8cIYexoeCuIsF30SseQGTlLFH7htYRUnHsOUBY9x6tDFcrT1tVbiZogT8QKXj75g+ta0qfY1b/SEWmbuD3Wj7s06Ego8jdlXqfvyMlu41AZkjIqi3DaOtlJfmMok+f4X/VKCu51Vcf0GAJTc/BLROwZ83RrfUcXjaF1ARwmcOKpTWC5x7uPsGDKXw6RHQi+lkJon17/l5YEEbZ7w4CV5lK06jLJOyWcy+9OY3ptS4/DXXKFkQT9z2ZPtcOE7Kn71UoKrjbfmD5WXNriJGeZxogZfH4NiDZz0EhMZ2KRSOFxHneeetGsBZ9hWMNHyOge5NNb8G07EINNC7gY5mYKn7+IqJYg3Ul4dAaHrTyqhCqIXwvEurQfrmTMSpK5FWZhVUQRV+JyU6q69LtcJiN5cea3yh1f5nvPebvI6jgzBh+RDn71fPBfh+Sw6LCzuxxO1u5BzPExNjZsEXYhzGrbtMYuK7BkX6J9s10EQe63SHWQxiA21rNKrQTzNC4MzEdx1sgOJLOcf5eKgOC4aGrA7/39BbKVxVODBCLHhmWiE2R6PJgUPVlT7VvbP/m8qfV9FHtWMXPGBpQe8T+wYUSFnIxjlae8Jdn9iKzQ3eg09WcUpYpERXWTf2V5yWtaSkep7sZimSVwRD+ew3nKZVxobIr01eozzsr1Bx0zS/WRNqConEY0GhrIAB3QyNYSbGSr86Y2AyvmIthGqgNJgNnvVvdreL4V+eu45KTEGQDFbreyh/710tmoX+qxn+PuSDjwkC9BjU1bExisD8Ld8Lp5dnARd+et5ERsWiWEEjSgWhV7u/dWRTe6Vg2VNCos/cLFpWXIL/nWgORhfWfMjgn8nojD6BzJJJiVX/iaWNOGCo/GituEQaZrxI7bt6t4m3AwiKYyeterQjun8M1xBIHGvBSy4HityY+a5BGgwubOXvdxv9PH0SxSEAqkBIIEAKXnEFjvz1fQ0SMhcV7tJx1WHhZKVX9qBIIBHta2ev8v++j6Quqj2ZxkRia91ZKdC7m2I3ojLMcse1g4zkn7uTWwHZ58e/z1KwuDKVRVL5ldXmli7GrNx7pOZKXWnb4j8RCalMvoClWEQGDiSBhHO8WwaJfvhBFiGwSnb4dFaTwILqQ8Ugpft7O+YeybsTxDmY6PHDbu5btYtnVjnek1snKGmTC/2U9BihAMCSYweuNQcNG0w05VFB9vQpjJuDMOsFbFiTXGBDNqau/oRnODjjHpCz+9SZQ6kwUSDwxdp6RC7xDjAy9HBB8lkalJx7JOP4e8u6ebPH/CryT49xGJY3+/DQsDtzKysZOctvYVr8xEZUQ2byij7wcF/26GAjzcL34wMRUwEwYJKoZIhvcNAQkVMQYEBAEAAAAAAAAAAAAwgAYJKoZIhvcNAQcGoIAwgAIBADCABgkqhkiG9w0BBwEwHAYKKoZIhvcNAQwBBjAOBAgxx5iLgJAyBAICB9CggASCBcjDzcr69sC2Fy7B4Ky9FUh7qSV9sillIJoGd3rkAU9GkIqZa+19PVZOxrQZKLZJRaK/TpV7661nIbmHPPlV0Uj+qvj6usiqdYrfmdJ52bZE891rD7/8T07C2r38YKA8xA9vwdn8Wvye/JwKoseMQ+RAS2ju1d9Muh+JzT9XIw0J2jveHMogW5D/dI2gI/xPNy8GNXK3V4Ko3rw/mDtvNnWcUTvh5GFCaKVmoxIChn9TdbiqzJ/6vkMrn/OGRQNrhv5g/zzJZUoh9HYSZayEDdB8uYzzqAx7OpZj/1WdW6XsWTcSC83CaJUxFYTjI4ROr4hjWGce9zcxXLv5/MUT8w0cDjjCkur062AISTjq84Mh1ZOkaFUuk+aI1kUzeCld/tXON8JwBIfoteA9ayf29bBjUuWOL+MdVvzFZNJqdcTga7cnDGVAbjE2AMWB3OT5KQuBwwz3btVlFB8hNbcdS3qPQWk3hD6xu1R+GU0Ann4IqJvdxb5gkdMPWGCLGjqGOYDdp5GENeho3bNBANk14NZp3tf1W8CBvhHD6eofLa/EX82hVBGBE2swokfq7+YPbUDZM7Q5yLL46sFLZhaCD9yYHB24TMlo6q0XIVa1gaX+skAYrE0s7RzP919vjWZNRZ0/PMv2UxmqeHF6BuEJTRSPmayQ/+rYYW7cDjsEeM4/Dm+FoMz213DBXbkIEP4Yn5/wdPFRvBwThjethE98a2vnAt2Pw4Khg+CZstcG5HmryChoAEEIrpGiLqGcFCNorbGGd3K/oifsyp5g0/c65UErMJ1qu3+F8xmhTLwDlRLF1nHAgdVzQRWbbjzY4Sf/s0xhNneVv0o0j/e8eTsEggNYk8p+yfU4DG7isX/9YIBA5t+km3A92evLwyuCJ6rBXhtAm+YDUJq5eMuaemtuDZ4NaYPCYoJezbbXLO0rMDAM3OQf0kWfWbtei4ldSDnmeFPfWV2nXgOa21RN9tAFWBqT7IdeMS6wNbmrtwxLHmupBt1IbLj0IoNKXYSGPA6Pwarab4TY+J+XODURLwZMraWM4TUxxTDW3/vBX9uaePcM4UWA0UBlfTu/OlUoZ52uuivoxclFRk2f1uJwv+dBk5ENooTBGtkrrj5GNLe6NIqiQgG9W9WxcTI5NqJW19VSUNpB+ErrnSRR0L/vqRuFR8C4rqD5+N+HWWZ56ZYcv+HLi3dRDZvcqe2/ugzfJaAGDIjT6iTuvvaDH6ihh3rO/YNQxsvqJ6DiFp+B0lVIytrO50YADjs2KemQQXgdPOKc3M6vcxwWjw80hLcKmioY69MoZ45ZLms9BG6eR7vG2HxvPUF9ZCvrEwxMS9zoil/WB7ra6dslVyJkihuPJlxu6AVC+gXiUCE5LBcVmrCjLdcLovcOA334F80K/3kilT5lonTpU/RaU2A2mNewRSy9iD5Lyt5sZDxwaZnFZ/bc/XcEgxF+ZThrEsONLM+oBiOy8OC7Fd2tkAXKcvzdOEV7xGN1CZhuVS4mRKEPnIYxmOH/dGLpDj3NJqEsSo9itz+s2CczakXhe6SEj5NUKV3KSvk0PJs8PXaB5Feyw6XN9rLobNBE/Rb58fXU9qoNpgFfjwHawghcpIDZ9BMGxGALhCA932g0ETk2gd62tzopjvDSgddJmjkccxzN5IoiOCpfdVS4ot5NZElahR9fmTuwJWUQA3yIMbMi25UwiS24g5IozOtbIn0ctRFDFTXEH49wiqlfcfrNFmmq9cwdItnwviEYjGCd4CipU9AJ6ABIDOhsKQ4B81g9nrodsRVnXNcUqSywmdlhaVCoKE8aOaV0LERxQ4/ZV0n1jQurjnuvJR341p1BGa2mGcZ/uCd1ZIi1bQSc7WKQpmMigtbS5RaUCz5Ff9AIpTnLhyEw4uZy0P39Lc7P490FSA11edT09hEHCo3S2HhJ3PSwtNKYJ21TH1CktYzATqoGZuxELDuuY+97gEU9ZaKPcnRUSfFRHgAAAAAAAAAAAAAAAAAAAAAAADAxMCEwCQYFKw4DAhoFAAQU4HIzO4K0G2JETlax4nm23MmKH0UECFLun0BpI/44AgIH0AAA"}} \ No newline at end of file diff --git a/agrirouter-sdk-java-tests/pom.xml b/agrirouter-sdk-java-tests/pom.xml index 6f34fdac..5fb721fc 100644 --- a/agrirouter-sdk-java-tests/pom.xml +++ b/agrirouter-sdk-java-tests/pom.xml @@ -5,7 +5,7 @@ agrirouter-sdk-java com.agrirouter.api - 2.3.0 + 3.0.0 4.0.0 AGRIROUTER SDK JAVA - TESTS @@ -40,10 +40,6 @@ org.junit.jupiter junit-jupiter-params - - org.glassfish.jersey.inject - jersey-hk2 - \ No newline at end of file diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/AbstractIntegrationTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/AbstractIntegrationTest.java index d59df475..04f00bd5 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/AbstractIntegrationTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/AbstractIntegrationTest.java @@ -1,206 +1,225 @@ package com.dke.data.agrirouter.test; -import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.NotImplementedException; -/** Abstract implementation for all integration tests. */ -public abstract class AbstractIntegrationTest { - - /** - * Since there are multiple problems with the stability of the QA env we define dedicated - * constants for message fetching. - */ - protected int MAX_TRIES_BEFORE_FAILURE = 10; - - protected long DEFAULT_INTERVAL = 5000; - - /** - * Wait for the AR to process the messages. Since the QA has some stability problems, we will wait - * up to 30 seconds until the AR has processed the messages. - * - * @throws InterruptedException - - */ - protected void waitForTheAgrirouterToProcessSingleMessage() throws InterruptedException { - Thread.sleep(TimeUnit.SECONDS.toMillis(30)); - } - - /** - * Wait for the AR to process the messages. Since the QA has some stability problems, we will wait - * up to one minute until the AR has processed the messages. - * - * @throws InterruptedException - - */ - protected void waitForTheAgrirouterToProcessMultipleMessages() throws InterruptedException { - Thread.sleep(TimeUnit.SECONDS.toMillis(60)); - } - - /** Communication unit for integration testing. */ - protected Application communicationUnit = - new Application() { - @Override - public String getApplicationId() { - return "434989e2-b4be-4cfd-8e40-f5b89d83458d"; - } - - @Override - public String getCertificationVersionId() { - return "f491d487-f913-4732-8be4-c2eacff21816"; - } - }; - - /** Farming software for integration testing. */ - protected Application farmingSoftware = - new Application() { - - @Override - public String getApplicationId() { - return "905152eb-c526-47a3-b871-aa46d065bb4c"; - } - - @Override - public String getCertificationVersionId() { - return "c8ee0fc3-056c-4d81-8eba-fb4f8208c827"; - } - - @Override - public String getPrivateKey() { - return "-----BEGIN PRIVATE KEY-----\n" - + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCiSNJmpAbrqF5\n" - + "wOe4kPtavH50OxfjevZjgFhoG/lO+nkJz366655pjKqkwmlxF3GhoXMppAR2K+Dh\n" - + "x3g46dJGA/dG5Ju5TpLnPn3AskHJMcagGE+0Lb29pXUX7ZAdO0MrqIVSh9UZ3j2v\n" - + "+MlF4GOwUkOLPu8IgtKK13vlTu3qYKmFzSss9M3r/t7hZemGyGUq/GVZ8wvYWFTc\n" - + "SdBhOZBzGDpQmRKiL5wcF1HyZfmT8mwbPITzf9Pd+9cDvQT74Ohmu920wwQavS+n\n" - + "hPaOFEW9io9gIsKY3y81Qt4OR+xQ20BdmsRscWwWaSoQpjol0+f3OnTFmLMGvjuw\n" - + "y8keLp+zAgMBAAECggEAGm87MdHEelaBD8PkWQKufTZ28oFjLiCz4XJ70O3YM2C6\n" - + "2NfuzyScWphoSco3PMxkPwPq28IzbwFoZhXOYuF3FteMHwCKnqQsNysZOHmgkd/n\n" - + "LzMOhZvfmCknH7DC8A3xAzo7n6rgjMrT1Bk49HtY4IlVL1NGdQAd7wr4BYFzt/Dc\n" - + "8qXnqXWqWcvgktDQBKEPXc8XAQom6fWFcnx+CALUIx3c4QXaCgdG/EuWeaqqM14j\n" - + "2tM1PwVh3rxiDiwMJSDEQVSxkJtM9M+EEC6oCvBPE4txjaHBjQqsxZJ9po5Va00+\n" - + "Wm6DuPEfkKTxX1J0a/le8SA0JZ+Tlz/VXOySaeMKYQKBgQDpUoPOfpx/FfOIr4Tk\n" - + "311zqcPfY+XiCwq56CTfVYERF8QSDQAMuuW3K53SFLTwjgUEq7BwFshhhcTdRxsh\n" - + "QtKAHg4NpownmGnmQCG681eFTB4IiiGNMlEt6hXh3MQK4QfjDFL/0Y1tXStsM7xB\n" - + "ouwPOZweWmlv7u7kVEDx4kHEUwKBgQDVcYp2pI/SjXtsFF/LRy/0xW/dgRQMortV\n" - + "IPYkYvSO/w2dMV2wX1Ly78wFs4uj4ODDfyeVG2xDjn6svQR67FtHPLyBS+SwNTbY\n" - + "jfzRV1EydHweZgdw9/1yA9zvSPVMvieSgeiR++2YmEEtJYSEoxuBkVSnLAXKFy3/\n" - + "4RCHrhBLIQKBgB6im/XX//pbyn8u9JcMkPun1bUWK8/zPTRNu9GrK2gwI6lvFYuW\n" - + "WqUjT/SOjXdsXlJPrLn689KCOugG9xP17yetSpEWRh7Iz1bRItymKN6ysNrUMDWW\n" - + "3rvVmYvvbboz89InAxrdy+EJM7NgU56WosIZAVum6WMuDyXhvilEWPhLAoGALwnd\n" - + "tPXhSEqr147J6befhvb4Bz3KGFrIpCMme7BfKyBkdK8LcbIgSq+0K9F8xbnqbssY\n" - + "AxFPE7hUjGb/lMN//jwRYwFBvd+MXb8050GyAEeRjvV3UFsmvLjDOOzAOpBxkiUV\n" - + "Bw8ZNpbfTj7FbKGxjyVjHZBjGj1vgsOr6+rdZmECgYEA5gBLtqvsebobo86J4LL7\n" - + "6VaXtgbgShm8GYMfTDPxkmAv4a89Lpec2UQ6EaVt7xHSdk4hMidfZHGambOtd+Zh\n" - + "DTWnVSzxt91ZSEcDc3gTxK3hBltTga+9Y63S+/6vVykWKRtAvqkiEEgLNnNXOFNX\n" - + "lE8ylEsO1whZyzKceV8uaqA=\n" - + "-----END PRIVATE KEY-----\n"; - } - - @Override - public String getPublicKey() { - return "-----BEGIN PUBLIC KEY-----\n" - + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwokjSZqQG66hecDnuJD7\n" - + "Wrx+dDsX43r2Y4BYaBv5Tvp5Cc9+uuueaYyqpMJpcRdxoaFzKaQEdivg4cd4OOnS\n" - + "RgP3RuSbuU6S5z59wLJByTHGoBhPtC29vaV1F+2QHTtDK6iFUofVGd49r/jJReBj\n" - + "sFJDiz7vCILSitd75U7t6mCphc0rLPTN6/7e4WXphshlKvxlWfML2FhU3EnQYTmQ\n" - + "cxg6UJkSoi+cHBdR8mX5k/JsGzyE83/T3fvXA70E++DoZrvdtMMEGr0vp4T2jhRF\n" - + "vYqPYCLCmN8vNULeDkfsUNtAXZrEbHFsFmkqEKY6JdPn9zp0xZizBr47sMvJHi6f\n" - + "swIDAQAB\n" - + "-----END PUBLIC KEY-----\n"; - } - }; - - /** Farming software for integration testing. */ - protected Application telemetryPlatform = - new Application() { - - @Override - public String getApplicationId() { - return "3c3559c9-7062-4628-a4f7-c9f5aa07265f"; - } - - @Override - public String getCertificationVersionId() { - return "5e488554-d6bb-400c-9632-b3b4b35b07ca"; - } +import java.util.concurrent.TimeUnit; - @Override - public String getPrivateKey() { - return "-----BEGIN PRIVATE KEY-----\n" - + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCkAWrcN0FmbWZ+\n" - + "24qE6maNlf46EjH/BOI5f79wFRJAeG6RXrl8KwWdlfeZOlEYRyq+o4AVuP7Mce6R\n" - + "x5PR/AEtn1K4Twr5h1+uG+O5/D2jJ0O/+nFnNcX/WgJfEbriDK9ewV8mEnFgG3n5\n" - + "y6P9RCcu0zMFV9PrKTop419krg2Ij0/to5LLU0DaQXmgvSC7Crx0k9dIhDeZ4jc3\n" - + "rv4SWzOcZT5vPFtA/5G66ZeeTVX+3iJbasWOdatMc7/cGYxUlnzeNSoCAqmyuHzO\n" - + "PKHWcjyVwPXWG64TSzkb+QypynUIZaAy+P8uawD0BivsmFSf0k4pGl8wSHhE2pN8\n" - + "OIIyud/lAgMBAAECgf93UZCtJoYuPumS4aaljOOPntCW7yXwo1zy+D4PDUV6IiRP\n" - + "HttTuvka7UB1+jeFskEm8Uz+gNjfZQRsiwbAftdcmc1Uyizx3ct+oEvNw/YT/T0N\n" - + "LufSbwzd+l4/TGbqjtAH4CeZS1Gw2kyjr8RfPnZDWuSDvqIvNI9cak+8r+SotHEL\n" - + "i1yAZTDvZAqLhbDLbW9Ephxd5QkKfwegybSwxJJcOw+KLPsq0Ibb2YGbkPTL1P6o\n" - + "Ul3/tiyzEMRc2ufyDJgYCAUmvVBjkbHT7hQNkTL8EPAEXfL+vhte8A98aFPnWMhS\n" - + "yiJo3T643fjZ8fzPcv8GWmT+z6IxtlXguC/OmQECgYEAzUbQF5YqJ61n6sQiJ0VQ\n" - + "ZMDDVHzf/oNUCPee4tCVS0ShQ2JURUIbss+lUWbKDfFTXW9mte4VRk+WUh2gQqm6\n" - + "49IdIpRGx6m6/ye2g6EmXRzeSN9GJu/wltS2uQ+8fmOkWiBUFg8bkLWTTxAY1w0n\n" - + "31AYcE8wwLb2FXt6Q2u4OQECgYEAzIfrUejd7GS/eaUx2GFKsXaI3B3CmLQ8TQFu\n" - + "JOh3i2NgcDK5Uwhy5TWozEn4BpwX8UOMciZIGjMr0i5TzpSVca1sv1wyIyWr7+AU\n" - + "2dmxPTXbkQQpEy7GDE1iCMvsi1lC6F+EUwdCKw6H5oa0oU1XMr/JWJSGh8iFRH5v\n" - + "H3ic4uUCgYEAycZYV0boqtWddrtRou5UBqUfmxWgC4nFeYcE64gBp9mO9jBaCzXf\n" - + "ChVnN6tk4u2adxZAjIW47cLfTFoIpF438SYgM1QyeqIQyCueEKa/kfkFWfX1++IP\n" - + "yALQlPmt20JQU7LBVGmHO+fvI2D8Oa6ZybzuOL7ueg+dtiIIXOsuSwECgYEAjqaZ\n" - + "1PYymmamOWSjQESTQPTofYVwLOtAR4Eg3jMY9anpIDfwk94HrJ/hTCKnD40dEdPI\n" - + "B/F1Rni8LorLPwDYvoFzoH/gJC1pHxPN1yeC+6stqZYaQ9vSm8/4+SOppoMqLEI6\n" - + "W2JrnvYyiPEY2IvFroqfFt34eom7kUsRnASWf5UCgYEAxEMOQ0/+hz1APqCGVo3t\n" - + "uePUIdsokCusRpWsxUdwHBGqfDjULqVmDXIJuJekV4YUxzyzktRzVms0pgFbr47L\n" - + "f8IeyJnYFhPn1hgthGlgV7JvFq2TU+EgZYVpVGL6jrw8t78Y4IresceIkz4q/bGV\n" - + "j35jwp22eLOc0FdPo0KgO4s=\n" - + "-----END PRIVATE KEY-----\n"; - } +/** + * Abstract implementation for all integration tests. + */ +public abstract class AbstractIntegrationTest { - @Override - public String getPublicKey() { - return "-----BEGIN PUBLIC KEY-----\n" - + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApAFq3DdBZm1mftuKhOpm\n" - + "jZX+OhIx/wTiOX+/cBUSQHhukV65fCsFnZX3mTpRGEcqvqOAFbj+zHHukceT0fwB\n" - + "LZ9SuE8K+Ydfrhvjufw9oydDv/pxZzXF/1oCXxG64gyvXsFfJhJxYBt5+cuj/UQn\n" - + "LtMzBVfT6yk6KeNfZK4NiI9P7aOSy1NA2kF5oL0guwq8dJPXSIQ3meI3N67+Elsz\n" - + "nGU+bzxbQP+RuumXnk1V/t4iW2rFjnWrTHO/3BmMVJZ83jUqAgKpsrh8zjyh1nI8\n" - + "lcD11huuE0s5G/kMqcp1CGWgMvj/LmsA9AYr7JhUn9JOKRpfMEh4RNqTfDiCMrnf\n" - + "5QIDAQAB\n" - + "-----END PUBLIC KEY-----\n"; - } - }; + /** + * Since there are multiple problems with the stability of the QA env we define dedicated + * constants for message fetching. + */ + protected final int MAX_TRIES_BEFORE_FAILURE = 10; - /** Representation of an application. */ - public abstract static class Application { + protected final long DEFAULT_INTERVAL = 5000; /** - * Application for all the test cases. + * Wait for the AR to process the messages. Since the QA has some stability problems, we will wait + * up to 30 seconds until the AR has processed the messages. * - * @return - + * @throws InterruptedException - */ - public abstract String getApplicationId(); + protected void waitForTheAgrirouterToProcessSingleMessage() throws InterruptedException { + Thread.sleep(TimeUnit.SECONDS.toMillis(30)); + } /** - * Version for all the test cases. + * Wait for the AR to process the messages. Since the QA has some stability problems, we will wait + * up to one minute until the AR has processed the messages. * - * @return - + * @throws InterruptedException - */ - public abstract String getCertificationVersionId(); + protected void waitForTheAgrirouterToProcessMultipleMessages() throws InterruptedException { + Thread.sleep(TimeUnit.SECONDS.toMillis(60)); + } /** - * Private key for the application. - * - * @return - + * Communication unit for integration testing. */ - public String getPrivateKey() { - throw new NotImplementedException("This application does not support private keys."); - } + protected final Application communicationUnit = + new Application() { + @Override + public String getApplicationId() { + return "434989e2-b4be-4cfd-8e40-f5b89d83458d"; + } + + @Override + public String getCertificationVersionId() { + return "f491d487-f913-4732-8be4-c2eacff21816"; + } + }; /** - * Public key for the application. - * - * @return - + * Farming software for integration testing. */ - public String getPublicKey() { - throw new NotImplementedException("This application does not support private keys."); + protected final Application farmingSoftware = + new Application() { + + @Override + public String getApplicationId() { + return "905152eb-c526-47a3-b871-aa46d065bb4c"; + } + + @Override + public String getCertificationVersionId() { + return "c8ee0fc3-056c-4d81-8eba-fb4f8208c827"; + } + + @Override + public String getPrivateKey() { + return """ + -----BEGIN PRIVATE KEY----- + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCiSNJmpAbrqF5 + wOe4kPtavH50OxfjevZjgFhoG/lO+nkJz366655pjKqkwmlxF3GhoXMppAR2K+Dh + x3g46dJGA/dG5Ju5TpLnPn3AskHJMcagGE+0Lb29pXUX7ZAdO0MrqIVSh9UZ3j2v + +MlF4GOwUkOLPu8IgtKK13vlTu3qYKmFzSss9M3r/t7hZemGyGUq/GVZ8wvYWFTc + SdBhOZBzGDpQmRKiL5wcF1HyZfmT8mwbPITzf9Pd+9cDvQT74Ohmu920wwQavS+n + hPaOFEW9io9gIsKY3y81Qt4OR+xQ20BdmsRscWwWaSoQpjol0+f3OnTFmLMGvjuw + y8keLp+zAgMBAAECggEAGm87MdHEelaBD8PkWQKufTZ28oFjLiCz4XJ70O3YM2C6 + 2NfuzyScWphoSco3PMxkPwPq28IzbwFoZhXOYuF3FteMHwCKnqQsNysZOHmgkd/n + LzMOhZvfmCknH7DC8A3xAzo7n6rgjMrT1Bk49HtY4IlVL1NGdQAd7wr4BYFzt/Dc + 8qXnqXWqWcvgktDQBKEPXc8XAQom6fWFcnx+CALUIx3c4QXaCgdG/EuWeaqqM14j + 2tM1PwVh3rxiDiwMJSDEQVSxkJtM9M+EEC6oCvBPE4txjaHBjQqsxZJ9po5Va00+ + Wm6DuPEfkKTxX1J0a/le8SA0JZ+Tlz/VXOySaeMKYQKBgQDpUoPOfpx/FfOIr4Tk + 311zqcPfY+XiCwq56CTfVYERF8QSDQAMuuW3K53SFLTwjgUEq7BwFshhhcTdRxsh + QtKAHg4NpownmGnmQCG681eFTB4IiiGNMlEt6hXh3MQK4QfjDFL/0Y1tXStsM7xB + ouwPOZweWmlv7u7kVEDx4kHEUwKBgQDVcYp2pI/SjXtsFF/LRy/0xW/dgRQMortV + IPYkYvSO/w2dMV2wX1Ly78wFs4uj4ODDfyeVG2xDjn6svQR67FtHPLyBS+SwNTbY + jfzRV1EydHweZgdw9/1yA9zvSPVMvieSgeiR++2YmEEtJYSEoxuBkVSnLAXKFy3/ + 4RCHrhBLIQKBgB6im/XX//pbyn8u9JcMkPun1bUWK8/zPTRNu9GrK2gwI6lvFYuW + WqUjT/SOjXdsXlJPrLn689KCOugG9xP17yetSpEWRh7Iz1bRItymKN6ysNrUMDWW + 3rvVmYvvbboz89InAxrdy+EJM7NgU56WosIZAVum6WMuDyXhvilEWPhLAoGALwnd + tPXhSEqr147J6befhvb4Bz3KGFrIpCMme7BfKyBkdK8LcbIgSq+0K9F8xbnqbssY + AxFPE7hUjGb/lMN//jwRYwFBvd+MXb8050GyAEeRjvV3UFsmvLjDOOzAOpBxkiUV + Bw8ZNpbfTj7FbKGxjyVjHZBjGj1vgsOr6+rdZmECgYEA5gBLtqvsebobo86J4LL7 + 6VaXtgbgShm8GYMfTDPxkmAv4a89Lpec2UQ6EaVt7xHSdk4hMidfZHGambOtd+Zh + DTWnVSzxt91ZSEcDc3gTxK3hBltTga+9Y63S+/6vVykWKRtAvqkiEEgLNnNXOFNX + lE8ylEsO1whZyzKceV8uaqA= + -----END PRIVATE KEY----- + """; + } + + @Override + public String getPublicKey() { + return """ + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwokjSZqQG66hecDnuJD7 + Wrx+dDsX43r2Y4BYaBv5Tvp5Cc9+uuueaYyqpMJpcRdxoaFzKaQEdivg4cd4OOnS + RgP3RuSbuU6S5z59wLJByTHGoBhPtC29vaV1F+2QHTtDK6iFUofVGd49r/jJReBj + sFJDiz7vCILSitd75U7t6mCphc0rLPTN6/7e4WXphshlKvxlWfML2FhU3EnQYTmQ + cxg6UJkSoi+cHBdR8mX5k/JsGzyE83/T3fvXA70E++DoZrvdtMMEGr0vp4T2jhRF + vYqPYCLCmN8vNULeDkfsUNtAXZrEbHFsFmkqEKY6JdPn9zp0xZizBr47sMvJHi6f + swIDAQAB + -----END PUBLIC KEY----- + """; + } + }; + + /** + * Farming software for integration testing. + */ + protected final Application telemetryPlatform = + new Application() { + + @Override + public String getApplicationId() { + return "3c3559c9-7062-4628-a4f7-c9f5aa07265f"; + } + + @Override + public String getCertificationVersionId() { + return "5e488554-d6bb-400c-9632-b3b4b35b07ca"; + } + + @Override + public String getPrivateKey() { + return """ + -----BEGIN PRIVATE KEY----- + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCkAWrcN0FmbWZ+ + 24qE6maNlf46EjH/BOI5f79wFRJAeG6RXrl8KwWdlfeZOlEYRyq+o4AVuP7Mce6R + x5PR/AEtn1K4Twr5h1+uG+O5/D2jJ0O/+nFnNcX/WgJfEbriDK9ewV8mEnFgG3n5 + y6P9RCcu0zMFV9PrKTop419krg2Ij0/to5LLU0DaQXmgvSC7Crx0k9dIhDeZ4jc3 + rv4SWzOcZT5vPFtA/5G66ZeeTVX+3iJbasWOdatMc7/cGYxUlnzeNSoCAqmyuHzO + PKHWcjyVwPXWG64TSzkb+QypynUIZaAy+P8uawD0BivsmFSf0k4pGl8wSHhE2pN8 + OIIyud/lAgMBAAECgf93UZCtJoYuPumS4aaljOOPntCW7yXwo1zy+D4PDUV6IiRP + HttTuvka7UB1+jeFskEm8Uz+gNjfZQRsiwbAftdcmc1Uyizx3ct+oEvNw/YT/T0N + LufSbwzd+l4/TGbqjtAH4CeZS1Gw2kyjr8RfPnZDWuSDvqIvNI9cak+8r+SotHEL + i1yAZTDvZAqLhbDLbW9Ephxd5QkKfwegybSwxJJcOw+KLPsq0Ibb2YGbkPTL1P6o + Ul3/tiyzEMRc2ufyDJgYCAUmvVBjkbHT7hQNkTL8EPAEXfL+vhte8A98aFPnWMhS + yiJo3T643fjZ8fzPcv8GWmT+z6IxtlXguC/OmQECgYEAzUbQF5YqJ61n6sQiJ0VQ + ZMDDVHzf/oNUCPee4tCVS0ShQ2JURUIbss+lUWbKDfFTXW9mte4VRk+WUh2gQqm6 + 49IdIpRGx6m6/ye2g6EmXRzeSN9GJu/wltS2uQ+8fmOkWiBUFg8bkLWTTxAY1w0n + 31AYcE8wwLb2FXt6Q2u4OQECgYEAzIfrUejd7GS/eaUx2GFKsXaI3B3CmLQ8TQFu + JOh3i2NgcDK5Uwhy5TWozEn4BpwX8UOMciZIGjMr0i5TzpSVca1sv1wyIyWr7+AU + 2dmxPTXbkQQpEy7GDE1iCMvsi1lC6F+EUwdCKw6H5oa0oU1XMr/JWJSGh8iFRH5v + H3ic4uUCgYEAycZYV0boqtWddrtRou5UBqUfmxWgC4nFeYcE64gBp9mO9jBaCzXf + ChVnN6tk4u2adxZAjIW47cLfTFoIpF438SYgM1QyeqIQyCueEKa/kfkFWfX1++IP + yALQlPmt20JQU7LBVGmHO+fvI2D8Oa6ZybzuOL7ueg+dtiIIXOsuSwECgYEAjqaZ + 1PYymmamOWSjQESTQPTofYVwLOtAR4Eg3jMY9anpIDfwk94HrJ/hTCKnD40dEdPI + B/F1Rni8LorLPwDYvoFzoH/gJC1pHxPN1yeC+6stqZYaQ9vSm8/4+SOppoMqLEI6 + W2JrnvYyiPEY2IvFroqfFt34eom7kUsRnASWf5UCgYEAxEMOQ0/+hz1APqCGVo3t + uePUIdsokCusRpWsxUdwHBGqfDjULqVmDXIJuJekV4YUxzyzktRzVms0pgFbr47L + f8IeyJnYFhPn1hgthGlgV7JvFq2TU+EgZYVpVGL6jrw8t78Y4IresceIkz4q/bGV + j35jwp22eLOc0FdPo0KgO4s= + -----END PRIVATE KEY----- + """; + } + + @Override + public String getPublicKey() { + return """ + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApAFq3DdBZm1mftuKhOpm + jZX+OhIx/wTiOX+/cBUSQHhukV65fCsFnZX3mTpRGEcqvqOAFbj+zHHukceT0fwB + LZ9SuE8K+Ydfrhvjufw9oydDv/pxZzXF/1oCXxG64gyvXsFfJhJxYBt5+cuj/UQn + LtMzBVfT6yk6KeNfZK4NiI9P7aOSy1NA2kF5oL0guwq8dJPXSIQ3meI3N67+Elsz + nGU+bzxbQP+RuumXnk1V/t4iW2rFjnWrTHO/3BmMVJZ83jUqAgKpsrh8zjyh1nI8 + lcD11huuE0s5G/kMqcp1CGWgMvj/LmsA9AYr7JhUn9JOKRpfMEh4RNqTfDiCMrnf + 5QIDAQAB + -----END PUBLIC KEY----- + """; + } + }; + + /** + * Representation of an application. + */ + public abstract static class Application { + + /** + * Application for all the test cases. + * + * @return - + */ + public abstract String getApplicationId(); + + /** + * Version for all the test cases. + * + * @return - + */ + public abstract String getCertificationVersionId(); + + /** + * Private key for the application. + * + * @return - + */ + public String getPrivateKey() { + throw new NotImplementedException("This application does not support private keys."); + } + + /** + * Public key for the application. + * + * @return - + */ + public String getPublicKey() { + throw new NotImplementedException("This application does not support private keys."); + } } - } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/Assertions.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/Assertions.java index fce0b752..a59ebf10 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/Assertions.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/Assertions.java @@ -3,27 +3,29 @@ import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -/** Custom assertion adapter. */ +/** + * Custom assertion adapter. + */ public class Assertions extends org.junit.jupiter.api.Assertions { - /** - * Assert that the actual value matches any from the given expected values. - * - * @param expectedValues - - * @param actual - - * @param - - */ - public static void assertMatchesAny(List expectedValues, T actual) { - AtomicBoolean matches = new AtomicBoolean(false); - assertNotNull(expectedValues); - assertNotNull(actual); - expectedValues.forEach( - (expected) -> { - assertNotNull(expected); - if (expected.equals(actual)) { - matches.set(true); - } - }); - assertTrue(matches.get(), "There should be at least a single match in the expected values."); - } + /** + * Assert that the actual value matches any from the given expected values. + * + * @param expectedValues - + * @param actual - + * @param - + */ + public static void assertMatchesAny(List expectedValues, T actual) { + var matches = new AtomicBoolean(false); + assertNotNull(expectedValues); + assertNotNull(actual); + expectedValues.forEach( + (expected) -> { + assertNotNull(expected); + if (expected.equals(actual)) { + matches.set(true); + } + }); + assertTrue(matches.get(), "There should be at least a single match in the expected values."); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/OnboardingResponseRepository.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/OnboardingResponseRepository.java index 7a12d3db..d6c92be1 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/OnboardingResponseRepository.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/OnboardingResponseRepository.java @@ -2,63 +2,67 @@ import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.google.gson.Gson; + import java.io.IOException; import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; -/** Provider for onboarding responses. */ +/** + * Provider for onboarding responses. + */ public class OnboardingResponseRepository { - private static final String FOLDER = "./onboarding-responses/"; - private static final String FILE_SUFFIX = ".json"; + private static final String FOLDER = "./onboarding-responses/"; + private static final String FILE_SUFFIX = ".json"; - /** - * Read the onboarding response from the file system. - * - * @param identifier - - * @return - - * @throws IOException - - */ - public static OnboardingResponse read(Identifier identifier) throws IOException { - Path path = Paths.get(FOLDER.concat(identifier.getFileName()).concat(FILE_SUFFIX)); - final StringBuilder fileContent = new StringBuilder(); - Files.readAllLines(path).forEach(fileContent::append); - return new Gson().fromJson(fileContent.toString(), OnboardingResponse.class); - } + /** + * Read the onboarding response from the file system. + * + * @param identifier - + * @return - + * @throws IOException - + */ + public static OnboardingResponse read(Identifier identifier) throws IOException { + var path = Paths.get(FOLDER.concat(identifier.getFileName()).concat(FILE_SUFFIX)); + final var fileContent = new StringBuilder(); + Files.readAllLines(path).forEach(fileContent::append); + return new Gson().fromJson(fileContent.toString(), OnboardingResponse.class); + } - /** - * Save the onboarding response to the file system. - * - * @param identifier - - * @param onboardingResponse - - * @throws IOException - - */ - public static void save(Identifier identifier, OnboardingResponse onboardingResponse) - throws IOException { - String fileContent = new Gson().toJson(onboardingResponse); - Path path = Paths.get(FOLDER.concat(identifier.getFileName()).concat(FILE_SUFFIX)); - Files.write(path, fileContent.getBytes()); - } + /** + * Save the onboarding response to the file system. + * + * @param identifier - + * @param onboardingResponse - + * @throws IOException - + */ + public static void save(Identifier identifier, OnboardingResponse onboardingResponse) + throws IOException { + var fileContent = new Gson().toJson(onboardingResponse); + var path = Paths.get(FOLDER.concat(identifier.getFileName()).concat(FILE_SUFFIX)); + Files.write(path, fileContent.getBytes()); + } - /** Identifier for the onboarding responses. */ - public enum Identifier { - FARMING_SOFTWARE("farming-software"), - FARMING_SOFTWARE_REMOVED("farming-software-removed"), - FARMING_SOFTWARE_DEACTIVATED("farming-software-deactivated"), - TELEMETRY_PLATFORM("telemetry-platform"), - TELEMETRY_PLATFORM_REMOVED("telemetry-platform-removed"), - TELEMETRY_PLATFORM_DEACTIVATED("telemetry-platform-deactivated"), - COMMUNICATION_UNIT("communication-unit"); + /** + * Identifier for the onboarding responses. + */ + public enum Identifier { + FARMING_SOFTWARE("farming-software"), + FARMING_SOFTWARE_REMOVED("farming-software-removed"), + FARMING_SOFTWARE_DEACTIVATED("farming-software-deactivated"), + TELEMETRY_PLATFORM("telemetry-platform"), + TELEMETRY_PLATFORM_REMOVED("telemetry-platform-removed"), + TELEMETRY_PLATFORM_DEACTIVATED("telemetry-platform-deactivated"), + COMMUNICATION_UNIT("communication-unit"); - private final String fileName; + private final String fileName; - Identifier(String fileName) { - this.fileName = fileName; - } + Identifier(String fileName) { + this.fileName = fileName; + } - public String getFileName() { - return fileName; + public String getFileName() { + return fileName; + } } - } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/CommunicationUnitFixture.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/CommunicationUnitFixture.java index 6312d346..e9b2264d 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/CommunicationUnitFixture.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/CommunicationUnitFixture.java @@ -1,7 +1,5 @@ package com.dke.data.agrirouter.test.fixture; -import static org.junit.jupiter.api.Assertions.assertNotNull; - import agrirouter.request.payload.endpoint.Capabilities; import com.dke.data.agrirouter.api.cancellation.DefaultCancellationToken; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; @@ -18,62 +16,69 @@ import com.dke.data.agrirouter.impl.onboard.OnboardingServiceImpl; import com.dke.data.agrirouter.test.AbstractIntegrationTest; import com.dke.data.agrirouter.test.OnboardingResponseRepository; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + import java.io.IOException; import java.util.Collections; import java.util.UUID; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -/** Class to onboard endpoints for different reasons. */ +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * Class to onboard endpoints for different reasons. + */ @SuppressWarnings("ALL") class CommunicationUnitFixture extends AbstractIntegrationTest { - /** - * Create a new registration token by using the agrirouter UI and select the integration test - * application for CUs. - */ - @Test - @Disabled("Please replace the placeholder for the registration code to run the test case.") - void onboardCommunicationUnitAndSaveToFile() throws IOException { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - OnboardingParameters onboardingParameters = new OnboardingParameters(); - onboardingParameters.setRegistrationCode("06535d66c2"); - onboardingParameters.setApplicationId(communicationUnit.getApplicationId()); - onboardingParameters.setCertificationVersionId(communicationUnit.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setApplicationType(ApplicationType.APPLICATION); - onboardingParameters.setUuid(UUID.randomUUID().toString()); - final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); - assertNotNull(onboardingResponse); - assertNotNull(onboardingResponse.getCapabilityAlternateId()); - assertNotNull(onboardingResponse.getDeviceAlternateId()); - assertNotNull(onboardingResponse.getSensorAlternateId()); - assertNotNull(onboardingResponse.getAuthentication()); - assertNotNull(onboardingResponse.getAuthentication().getCertificate()); - assertNotNull(onboardingResponse.getAuthentication().getSecret()); - assertNotNull(onboardingResponse.getAuthentication().getType()); - assertNotNull(onboardingResponse.getConnectionCriteria()); - assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); - assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); - OnboardingResponseRepository.save( - OnboardingResponseRepository.Identifier.COMMUNICATION_UNIT, onboardingResponse); - final SetCapabilityServiceImpl setCapabilityService = new SetCapabilityServiceImpl(new QA() {}); - final SetCapabilitiesParameters setCapabilitiesParameters = new SetCapabilitiesParameters(); - setCapabilitiesParameters.setApplicationId(communicationUnit.getApplicationId()); - setCapabilitiesParameters.setCertificationVersionId( - communicationUnit.getCertificationVersionId()); - setCapabilitiesParameters.setOnboardingResponse(onboardingResponse); - final SetCapabilitiesParameters.CapabilityParameters capabilityParameters = - new SetCapabilitiesParameters.CapabilityParameters(); - capabilityParameters.setDirection(Capabilities.CapabilitySpecification.Direction.SEND_RECEIVE); - capabilityParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); - setCapabilitiesParameters.setCapabilitiesParameters( - Collections.singletonList(capabilityParameters)); - setCapabilityService.send(setCapabilitiesParameters); - final FetchMessageServiceImpl fetchMessageService = new FetchMessageServiceImpl(); - fetchMessageService.fetch( - onboardingResponse, - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - } + /** + * Create a new registration token by using the agrirouter UI and select the integration test + * application for CUs. + */ + @Test + @Disabled("Please replace the placeholder for the registration code to run the test case.") + void onboardCommunicationUnitAndSaveToFile() throws IOException { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + OnboardingParameters onboardingParameters = new OnboardingParameters(); + onboardingParameters.setRegistrationCode("f50319dc13"); + onboardingParameters.setApplicationId(communicationUnit.getApplicationId()); + onboardingParameters.setCertificationVersionId(communicationUnit.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setApplicationType(ApplicationType.APPLICATION); + onboardingParameters.setUuid(UUID.randomUUID().toString()); + final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); + assertNotNull(onboardingResponse); + assertNotNull(onboardingResponse.getCapabilityAlternateId()); + assertNotNull(onboardingResponse.getDeviceAlternateId()); + assertNotNull(onboardingResponse.getSensorAlternateId()); + assertNotNull(onboardingResponse.getAuthentication()); + assertNotNull(onboardingResponse.getAuthentication().getCertificate()); + assertNotNull(onboardingResponse.getAuthentication().getSecret()); + assertNotNull(onboardingResponse.getAuthentication().getType()); + assertNotNull(onboardingResponse.getConnectionCriteria()); + assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); + assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); + OnboardingResponseRepository.save( + OnboardingResponseRepository.Identifier.COMMUNICATION_UNIT, onboardingResponse); + final SetCapabilityServiceImpl setCapabilityService = new SetCapabilityServiceImpl(new QA() { + }); + final SetCapabilitiesParameters setCapabilitiesParameters = new SetCapabilitiesParameters(); + setCapabilitiesParameters.setApplicationId(communicationUnit.getApplicationId()); + setCapabilitiesParameters.setCertificationVersionId( + communicationUnit.getCertificationVersionId()); + setCapabilitiesParameters.setOnboardingResponse(onboardingResponse); + final SetCapabilitiesParameters.CapabilityParameters capabilityParameters = + new SetCapabilitiesParameters.CapabilityParameters(); + capabilityParameters.setDirection(Capabilities.CapabilitySpecification.Direction.SEND_RECEIVE); + capabilityParameters.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); + setCapabilitiesParameters.setCapabilitiesParameters( + Collections.singletonList(capabilityParameters)); + setCapabilityService.send(setCapabilitiesParameters); + final FetchMessageServiceImpl fetchMessageService = new FetchMessageServiceImpl(); + fetchMessageService.fetch( + onboardingResponse, + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/FarmingSoftwareFixture.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/FarmingSoftwareFixture.java index 481cce56..4fbec28c 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/FarmingSoftwareFixture.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/FarmingSoftwareFixture.java @@ -1,7 +1,5 @@ package com.dke.data.agrirouter.test.fixture; -import static org.junit.jupiter.api.Assertions.assertNotNull; - import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.enums.CertificationType; import com.dke.data.agrirouter.api.enums.Gateway; @@ -11,118 +9,126 @@ import com.dke.data.agrirouter.impl.onboard.secured.OnboardingServiceImpl; import com.dke.data.agrirouter.test.AbstractIntegrationTest; import com.dke.data.agrirouter.test.OnboardingResponseRepository; -import java.io.IOException; -import java.util.UUID; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -/** Class to onboard endpoints for different reasons. */ +import java.io.IOException; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * Class to onboard endpoints for different reasons. + */ @SuppressWarnings("ALL") class FarmingSoftwareFixture extends AbstractIntegrationTest { - public static final String FARMING_SOFTWARE_ENDPOINT_ID = "e306d63b-8b57-4956-bde7-43600e78dae4"; - public static final String FARMING_SOFTWARE_DEACTIVATED_ENDPOINT_ID = - "50e0b616-a084-4402-8bf4-cb64f1e59a98"; + public static final String FARMING_SOFTWARE_ENDPOINT_ID = "e306d63b-8b57-4956-bde7-43600e78dae4"; + public static final String FARMING_SOFTWARE_DEACTIVATED_ENDPOINT_ID = + "50e0b616-a084-4402-8bf4-cb64f1e59a98"; - /** - * Create a new registration token by using the following link: - * - *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/905152eb-c526-47a3-b871-aa46d065bb4c/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= - */ - @Test - @Disabled("Please replace the placeholder for the registration code to run the test case.") - void onboardFarmingSoftwareAndSaveToFile() throws IOException { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); - onboardingParameters.setRegistrationCode("cf3a08a02f"); - onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); - onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(FARMING_SOFTWARE_ENDPOINT_ID); - onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); - onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); - final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); - assertNotNull(onboardingResponse); - assertNotNull(onboardingResponse.getCapabilityAlternateId()); - assertNotNull(onboardingResponse.getDeviceAlternateId()); - assertNotNull(onboardingResponse.getSensorAlternateId()); - assertNotNull(onboardingResponse.getAuthentication()); - assertNotNull(onboardingResponse.getAuthentication().getCertificate()); - assertNotNull(onboardingResponse.getAuthentication().getSecret()); - assertNotNull(onboardingResponse.getAuthentication().getType()); - assertNotNull(onboardingResponse.getConnectionCriteria()); - assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); - assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); - OnboardingResponseRepository.save( - OnboardingResponseRepository.Identifier.FARMING_SOFTWARE, onboardingResponse); - } + /** + * Create a new registration token by using the following link: + * + *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/905152eb-c526-47a3-b871-aa46d065bb4c/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= + */ + @Test + @Disabled("Please replace the placeholder for the registration code to run the test case.") + void onboardFarmingSoftwareAndSaveToFile() throws IOException { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); + onboardingParameters.setRegistrationCode("cf3a08a02f"); + onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); + onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(FARMING_SOFTWARE_ENDPOINT_ID); + onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); + onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); + final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); + assertNotNull(onboardingResponse); + assertNotNull(onboardingResponse.getCapabilityAlternateId()); + assertNotNull(onboardingResponse.getDeviceAlternateId()); + assertNotNull(onboardingResponse.getSensorAlternateId()); + assertNotNull(onboardingResponse.getAuthentication()); + assertNotNull(onboardingResponse.getAuthentication().getCertificate()); + assertNotNull(onboardingResponse.getAuthentication().getSecret()); + assertNotNull(onboardingResponse.getAuthentication().getType()); + assertNotNull(onboardingResponse.getConnectionCriteria()); + assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); + assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); + OnboardingResponseRepository.save( + OnboardingResponseRepository.Identifier.FARMING_SOFTWARE, onboardingResponse); + } - /** - * Create a new registration token by using the following link: - * - *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/905152eb-c526-47a3-b871-aa46d065bb4c/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= - */ - @Test - @Disabled("Please replace the placeholder for the registration code to run the test case.") - void onboardAndDeactivateFarmingSoftwareAndSaveToFile() throws IOException { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); - onboardingParameters.setRegistrationCode("528bdeab8a"); - onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); - onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(FARMING_SOFTWARE_DEACTIVATED_ENDPOINT_ID); - onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); - onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); - final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); - assertNotNull(onboardingResponse); - assertNotNull(onboardingResponse.getCapabilityAlternateId()); - assertNotNull(onboardingResponse.getDeviceAlternateId()); - assertNotNull(onboardingResponse.getSensorAlternateId()); - assertNotNull(onboardingResponse.getAuthentication()); - assertNotNull(onboardingResponse.getAuthentication().getCertificate()); - assertNotNull(onboardingResponse.getAuthentication().getSecret()); - assertNotNull(onboardingResponse.getAuthentication().getType()); - assertNotNull(onboardingResponse.getConnectionCriteria()); - assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); - assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); - OnboardingResponseRepository.save( - OnboardingResponseRepository.Identifier.FARMING_SOFTWARE_DEACTIVATED, onboardingResponse); - } + /** + * Create a new registration token by using the following link: + * + *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/905152eb-c526-47a3-b871-aa46d065bb4c/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= + */ + @Test + @Disabled("Please replace the placeholder for the registration code to run the test case.") + void onboardAndDeactivateFarmingSoftwareAndSaveToFile() throws IOException { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); + onboardingParameters.setRegistrationCode("528bdeab8a"); + onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); + onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(FARMING_SOFTWARE_DEACTIVATED_ENDPOINT_ID); + onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); + onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); + final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); + assertNotNull(onboardingResponse); + assertNotNull(onboardingResponse.getCapabilityAlternateId()); + assertNotNull(onboardingResponse.getDeviceAlternateId()); + assertNotNull(onboardingResponse.getSensorAlternateId()); + assertNotNull(onboardingResponse.getAuthentication()); + assertNotNull(onboardingResponse.getAuthentication().getCertificate()); + assertNotNull(onboardingResponse.getAuthentication().getSecret()); + assertNotNull(onboardingResponse.getAuthentication().getType()); + assertNotNull(onboardingResponse.getConnectionCriteria()); + assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); + assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); + OnboardingResponseRepository.save( + OnboardingResponseRepository.Identifier.FARMING_SOFTWARE_DEACTIVATED, onboardingResponse); + } - /** - * Create a new registration token by using the following link: - * - *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/905152eb-c526-47a3-b871-aa46d065bb4c/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= - */ - @Test - @Disabled("Please replace the placeholder for the registration code to run the test case.") - void onboardAndRemoveFarmingSoftwareAndSaveToFile() throws IOException { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); - onboardingParameters.setRegistrationCode("bc4eba6065"); - onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); - onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(UUID.randomUUID().toString()); - onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); - onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); - final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); - assertNotNull(onboardingResponse); - assertNotNull(onboardingResponse.getCapabilityAlternateId()); - assertNotNull(onboardingResponse.getDeviceAlternateId()); - assertNotNull(onboardingResponse.getSensorAlternateId()); - assertNotNull(onboardingResponse.getAuthentication()); - assertNotNull(onboardingResponse.getAuthentication().getCertificate()); - assertNotNull(onboardingResponse.getAuthentication().getSecret()); - assertNotNull(onboardingResponse.getAuthentication().getType()); - assertNotNull(onboardingResponse.getConnectionCriteria()); - assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); - assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); - OnboardingResponseRepository.save( - OnboardingResponseRepository.Identifier.FARMING_SOFTWARE_REMOVED, onboardingResponse); - } + /** + * Create a new registration token by using the following link: + * + *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/905152eb-c526-47a3-b871-aa46d065bb4c/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= + */ + @Test + @Disabled("Please replace the placeholder for the registration code to run the test case.") + void onboardAndRemoveFarmingSoftwareAndSaveToFile() throws IOException { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); + onboardingParameters.setRegistrationCode("bc4eba6065"); + onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); + onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(UUID.randomUUID().toString()); + onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); + onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); + final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); + assertNotNull(onboardingResponse); + assertNotNull(onboardingResponse.getCapabilityAlternateId()); + assertNotNull(onboardingResponse.getDeviceAlternateId()); + assertNotNull(onboardingResponse.getSensorAlternateId()); + assertNotNull(onboardingResponse.getAuthentication()); + assertNotNull(onboardingResponse.getAuthentication().getCertificate()); + assertNotNull(onboardingResponse.getAuthentication().getSecret()); + assertNotNull(onboardingResponse.getAuthentication().getType()); + assertNotNull(onboardingResponse.getConnectionCriteria()); + assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); + assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); + OnboardingResponseRepository.save( + OnboardingResponseRepository.Identifier.FARMING_SOFTWARE_REMOVED, onboardingResponse); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/TelemetryPlatformFixture.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/TelemetryPlatformFixture.java index 406715b6..bb3b46b0 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/TelemetryPlatformFixture.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/fixture/TelemetryPlatformFixture.java @@ -1,7 +1,5 @@ package com.dke.data.agrirouter.test.fixture; -import static org.junit.jupiter.api.Assertions.assertNotNull; - import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.enums.CertificationType; import com.dke.data.agrirouter.api.enums.Gateway; @@ -11,114 +9,122 @@ import com.dke.data.agrirouter.impl.onboard.secured.OnboardingServiceImpl; import com.dke.data.agrirouter.test.AbstractIntegrationTest; import com.dke.data.agrirouter.test.OnboardingResponseRepository; -import java.io.IOException; -import java.util.UUID; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -/** Class to onboard endpoints for different reasons. */ +import java.io.IOException; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * Class to onboard endpoints for different reasons. + */ @SuppressWarnings("ALL") class TelemetryPlatformFixture extends AbstractIntegrationTest { - /** - * Create a new registration token by using the following link: - * - *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/3c3559c9-7062-4628-a4f7-c9f5aa07265f/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= - */ - @Test - @Disabled("Please replace the placeholder for the registration code to run the test case.") - void onboardTelemetryPlatformAndSaveToFile() throws IOException { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); - onboardingParameters.setRegistrationCode("3e22929d3f"); - onboardingParameters.setApplicationId(telemetryPlatform.getApplicationId()); - onboardingParameters.setCertificationVersionId(telemetryPlatform.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(UUID.randomUUID().toString()); - onboardingParameters.setPrivateKey(telemetryPlatform.getPrivateKey()); - onboardingParameters.setPublicKey(telemetryPlatform.getPublicKey()); - final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); - assertNotNull(onboardingResponse); - assertNotNull(onboardingResponse.getCapabilityAlternateId()); - assertNotNull(onboardingResponse.getDeviceAlternateId()); - assertNotNull(onboardingResponse.getSensorAlternateId()); - assertNotNull(onboardingResponse.getAuthentication()); - assertNotNull(onboardingResponse.getAuthentication().getCertificate()); - assertNotNull(onboardingResponse.getAuthentication().getSecret()); - assertNotNull(onboardingResponse.getAuthentication().getType()); - assertNotNull(onboardingResponse.getConnectionCriteria()); - assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); - assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); - OnboardingResponseRepository.save( - OnboardingResponseRepository.Identifier.TELEMETRY_PLATFORM, onboardingResponse); - } + /** + * Create a new registration token by using the following link: + * + *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/3c3559c9-7062-4628-a4f7-c9f5aa07265f/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= + */ + @Test + @Disabled("Please replace the placeholder for the registration code to run the test case.") + void onboardTelemetryPlatformAndSaveToFile() throws IOException { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); + onboardingParameters.setRegistrationCode("3e22929d3f"); + onboardingParameters.setApplicationId(telemetryPlatform.getApplicationId()); + onboardingParameters.setCertificationVersionId(telemetryPlatform.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(UUID.randomUUID().toString()); + onboardingParameters.setPrivateKey(telemetryPlatform.getPrivateKey()); + onboardingParameters.setPublicKey(telemetryPlatform.getPublicKey()); + final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); + assertNotNull(onboardingResponse); + assertNotNull(onboardingResponse.getCapabilityAlternateId()); + assertNotNull(onboardingResponse.getDeviceAlternateId()); + assertNotNull(onboardingResponse.getSensorAlternateId()); + assertNotNull(onboardingResponse.getAuthentication()); + assertNotNull(onboardingResponse.getAuthentication().getCertificate()); + assertNotNull(onboardingResponse.getAuthentication().getSecret()); + assertNotNull(onboardingResponse.getAuthentication().getType()); + assertNotNull(onboardingResponse.getConnectionCriteria()); + assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); + assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); + OnboardingResponseRepository.save( + OnboardingResponseRepository.Identifier.TELEMETRY_PLATFORM, onboardingResponse); + } - /** - * Create a new registration token by using the following link: - * - *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/3c3559c9-7062-4628-a4f7-c9f5aa07265f/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= - */ - @Test - @Disabled("Please replace the placeholder for the registration code to run the test case.") - void onboardAndDeactivateTelemetryPlatformAndSaveToFile() throws IOException { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); - onboardingParameters.setRegistrationCode("b8dbca89d8"); - onboardingParameters.setApplicationId(telemetryPlatform.getApplicationId()); - onboardingParameters.setCertificationVersionId(telemetryPlatform.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(UUID.randomUUID().toString()); - onboardingParameters.setPrivateKey(telemetryPlatform.getPrivateKey()); - onboardingParameters.setPublicKey(telemetryPlatform.getPublicKey()); - final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); - assertNotNull(onboardingResponse); - assertNotNull(onboardingResponse.getCapabilityAlternateId()); - assertNotNull(onboardingResponse.getDeviceAlternateId()); - assertNotNull(onboardingResponse.getSensorAlternateId()); - assertNotNull(onboardingResponse.getAuthentication()); - assertNotNull(onboardingResponse.getAuthentication().getCertificate()); - assertNotNull(onboardingResponse.getAuthentication().getSecret()); - assertNotNull(onboardingResponse.getAuthentication().getType()); - assertNotNull(onboardingResponse.getConnectionCriteria()); - assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); - assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); - OnboardingResponseRepository.save( - OnboardingResponseRepository.Identifier.TELEMETRY_PLATFORM_DEACTIVATED, onboardingResponse); - } + /** + * Create a new registration token by using the following link: + * + *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/3c3559c9-7062-4628-a4f7-c9f5aa07265f/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= + */ + @Test + @Disabled("Please replace the placeholder for the registration code to run the test case.") + void onboardAndDeactivateTelemetryPlatformAndSaveToFile() throws IOException { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); + onboardingParameters.setRegistrationCode("b8dbca89d8"); + onboardingParameters.setApplicationId(telemetryPlatform.getApplicationId()); + onboardingParameters.setCertificationVersionId(telemetryPlatform.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(UUID.randomUUID().toString()); + onboardingParameters.setPrivateKey(telemetryPlatform.getPrivateKey()); + onboardingParameters.setPublicKey(telemetryPlatform.getPublicKey()); + final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); + assertNotNull(onboardingResponse); + assertNotNull(onboardingResponse.getCapabilityAlternateId()); + assertNotNull(onboardingResponse.getDeviceAlternateId()); + assertNotNull(onboardingResponse.getSensorAlternateId()); + assertNotNull(onboardingResponse.getAuthentication()); + assertNotNull(onboardingResponse.getAuthentication().getCertificate()); + assertNotNull(onboardingResponse.getAuthentication().getSecret()); + assertNotNull(onboardingResponse.getAuthentication().getType()); + assertNotNull(onboardingResponse.getConnectionCriteria()); + assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); + assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); + OnboardingResponseRepository.save( + OnboardingResponseRepository.Identifier.TELEMETRY_PLATFORM_DEACTIVATED, onboardingResponse); + } - /** - * Create a new registration token by using the following link: - * - *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/3c3559c9-7062-4628-a4f7-c9f5aa07265f/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= - */ - @Test - @Disabled("Please replace the placeholder for the registration code to run the test case.") - void onboardAndRemoveTelemetryPlatformAndSaveToFile() throws IOException { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); - onboardingParameters.setRegistrationCode("bea75dff01"); - onboardingParameters.setApplicationId(telemetryPlatform.getApplicationId()); - onboardingParameters.setCertificationVersionId(telemetryPlatform.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(UUID.randomUUID().toString()); - onboardingParameters.setPrivateKey(telemetryPlatform.getPrivateKey()); - onboardingParameters.setPublicKey(telemetryPlatform.getPublicKey()); - final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); - assertNotNull(onboardingResponse); - assertNotNull(onboardingResponse.getCapabilityAlternateId()); - assertNotNull(onboardingResponse.getDeviceAlternateId()); - assertNotNull(onboardingResponse.getSensorAlternateId()); - assertNotNull(onboardingResponse.getAuthentication()); - assertNotNull(onboardingResponse.getAuthentication().getCertificate()); - assertNotNull(onboardingResponse.getAuthentication().getSecret()); - assertNotNull(onboardingResponse.getAuthentication().getType()); - assertNotNull(onboardingResponse.getConnectionCriteria()); - assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); - assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); - OnboardingResponseRepository.save( - OnboardingResponseRepository.Identifier.TELEMETRY_PLATFORM_REMOVED, onboardingResponse); - } + /** + * Create a new registration token by using the following link: + * + *

    https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/3c3559c9-7062-4628-a4f7-c9f5aa07265f/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri= + */ + @Test + @Disabled("Please replace the placeholder for the registration code to run the test case.") + void onboardAndRemoveTelemetryPlatformAndSaveToFile() throws IOException { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); + onboardingParameters.setRegistrationCode("bea75dff01"); + onboardingParameters.setApplicationId(telemetryPlatform.getApplicationId()); + onboardingParameters.setCertificationVersionId(telemetryPlatform.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(UUID.randomUUID().toString()); + onboardingParameters.setPrivateKey(telemetryPlatform.getPrivateKey()); + onboardingParameters.setPublicKey(telemetryPlatform.getPublicKey()); + final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); + assertNotNull(onboardingResponse); + assertNotNull(onboardingResponse.getCapabilityAlternateId()); + assertNotNull(onboardingResponse.getDeviceAlternateId()); + assertNotNull(onboardingResponse.getSensorAlternateId()); + assertNotNull(onboardingResponse.getAuthentication()); + assertNotNull(onboardingResponse.getAuthentication().getCertificate()); + assertNotNull(onboardingResponse.getAuthentication().getSecret()); + assertNotNull(onboardingResponse.getAuthentication().getType()); + assertNotNull(onboardingResponse.getConnectionCriteria()); + assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); + assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); + OnboardingResponseRepository.save( + OnboardingResponseRepository.Identifier.TELEMETRY_PLATFORM_REMOVED, onboardingResponse); + } } 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 7feb0459..252fffb4 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 @@ -1,38 +1,32 @@ package com.dke.data.agrirouter.test.helper; import java.nio.file.Files; -import java.nio.file.Path; 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 static byte[] readRawData(Identifier identifier) throws Throwable { - Path path = Paths.get(FOLDER.concat(identifier.getFileName())); - return Files.readAllBytes(path); - } + public static byte[] readRawData(Identifier identifier) throws Throwable { + var path = Paths.get(FOLDER.concat(identifier.getFileName())); + return Files.readAllBytes(path); + } - public enum Identifier { - BIG_TASK_DATA("big_taskdata.zip"), - SMALL_TASK_DATA("small_taskdata.zip"); + public enum Identifier { + BIG_TASK_DATA("big_taskdata.zip"), + SMALL_TASK_DATA("small_taskdata.zip"); - private final String fileName; + private final String fileName; - Identifier(String fileName) { - this.fileName = fileName; - } + Identifier(String fileName) { + this.fileName = fileName; + } - public String getFileName() { - return fileName; + public String getFileName() { + return fileName; + } } - } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CancellationTokenPollingTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CancellationTokenPollingTest.java index 9029826f..3e23b43b 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CancellationTokenPollingTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CancellationTokenPollingTest.java @@ -2,95 +2,95 @@ import com.dke.data.agrirouter.api.cancellation.CancellationToken; import com.dke.data.agrirouter.api.cancellation.DefaultCancellationToken; -import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; import com.dke.data.agrirouter.api.service.messaging.http.FetchMessageService; import com.dke.data.agrirouter.impl.messaging.rest.FetchMessageServiceImpl; import com.dke.data.agrirouter.impl.messaging.rest.MessageFetcher; import com.dke.data.agrirouter.test.AbstractIntegrationTest; import com.dke.data.agrirouter.test.OnboardingResponseRepository; -import java.io.IOException; -import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; -/** Testing the behavior of the cancellation token. */ +import java.io.IOException; + +/** + * Testing the behavior of the cancellation token. + */ class CancellationTokenPollingTest extends AbstractIntegrationTest { - @Test - @Timeout(15) - @SuppressWarnings("deprecation") - void - givenExistingImplementationOfTheCancellationTokenWhenPollingMessagesThenTheDefaultParametersShouldStillInfluenceTheBehavior() - throws IOException { - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - final Optional> fetchMessageResponses = - fetchMessageService.fetch( - OnboardingResponseRepository.read( - OnboardingResponseRepository.Identifier.FARMING_SOFTWARE), - MessageFetcher.MAX_TRIES_BEFORE_FAILURE, - MessageFetcher.DEFAULT_INTERVAL); - Assertions.assertFalse(fetchMessageResponses.isPresent()); - } + @Test + @Timeout(15) + @SuppressWarnings("deprecation") + void + givenExistingImplementationOfTheCancellationTokenWhenPollingMessagesThenTheDefaultParametersShouldStillInfluenceTheBehavior() + throws IOException { + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + final var fetchMessageResponses = + fetchMessageService.fetch( + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.FARMING_SOFTWARE), + MessageFetcher.MAX_TRIES_BEFORE_FAILURE, + MessageFetcher.DEFAULT_INTERVAL); + Assertions.assertFalse(fetchMessageResponses.isPresent()); + } - @Test - @Timeout(1) - @SuppressWarnings("deprecation") - void - givenExistingImplementationOfTheCancellationTokenWhenPollingMessagesThenTheCustomParametersShouldStillInfluenceTheBehavior() - throws IOException { - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - final Optional> fetchMessageResponses = - fetchMessageService.fetch( - OnboardingResponseRepository.read( - OnboardingResponseRepository.Identifier.FARMING_SOFTWARE), - 0, - 0); - Assertions.assertFalse(fetchMessageResponses.isPresent()); - } + @Test + @Timeout(1) + @SuppressWarnings("deprecation") + void + givenExistingImplementationOfTheCancellationTokenWhenPollingMessagesThenTheCustomParametersShouldStillInfluenceTheBehavior() + throws IOException { + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + final var fetchMessageResponses = + fetchMessageService.fetch( + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.FARMING_SOFTWARE), + 0, + 0); + Assertions.assertFalse(fetchMessageResponses.isPresent()); + } - @Test - @Timeout(60) - void - givenDefaultImplementationOfTheCancellationTokenWhenPollingMessagesThenTheCancellationTokenShouldInfluenceTheBehavior() - throws IOException { - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - final Optional> fetchMessageResponses = - fetchMessageService.fetch( - OnboardingResponseRepository.read( - OnboardingResponseRepository.Identifier.FARMING_SOFTWARE), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - Assertions.assertFalse(fetchMessageResponses.isPresent()); - } + @Test + @Timeout(60) + void + givenDefaultImplementationOfTheCancellationTokenWhenPollingMessagesThenTheCancellationTokenShouldInfluenceTheBehavior() + throws IOException { + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + final var fetchMessageResponses = + fetchMessageService.fetch( + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.FARMING_SOFTWARE), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + Assertions.assertFalse(fetchMessageResponses.isPresent()); + } - @Test - @Timeout(1) - void - givenCustomImplementationOfTheCancellationTokenWhenPollingMessagesThenTheCancellationTokenShouldInfluenceTheBehavior() - throws IOException { - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - final Optional> fetchMessageResponses = - fetchMessageService.fetch( - OnboardingResponseRepository.read( - OnboardingResponseRepository.Identifier.FARMING_SOFTWARE), - new CancellationToken() { + @Test + @Timeout(1) + void + givenCustomImplementationOfTheCancellationTokenWhenPollingMessagesThenTheCancellationTokenShouldInfluenceTheBehavior() + throws IOException { + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + final var fetchMessageResponses = + fetchMessageService.fetch( + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.FARMING_SOFTWARE), + new CancellationToken() { - @Override - public boolean isNotCancelled() { - return false; - } + @Override + public boolean isNotCancelled() { + return false; + } - @Override - public void nextStep() { - // NOP - } + @Override + public void nextStep() { + // NOP + } - @Override - public void waitIfNotCancelled() { - // NOP - } - }); - Assertions.assertFalse(fetchMessageResponses.isPresent()); - } + @Override + public void waitIfNotCancelled() { + // NOP + } + }); + Assertions.assertFalse(fetchMessageResponses.isPresent()); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CloudOffboardingServiceTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CloudOffboardingServiceTest.java index e8bd978a..5ca362f5 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CloudOffboardingServiceTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CloudOffboardingServiceTest.java @@ -1,12 +1,6 @@ package com.dke.data.agrirouter.test.messaging.rest; -import static com.dke.data.agrirouter.test.OnboardingResponseRepository.Identifier; -import static com.dke.data.agrirouter.test.OnboardingResponseRepository.read; - import com.dke.data.agrirouter.api.cancellation.DefaultCancellationToken; -import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; -import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; -import com.dke.data.agrirouter.api.dto.messaging.inner.Message; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.DecodeMessageService; import com.dke.data.agrirouter.api.service.messaging.http.CloudOffboardingService; @@ -21,132 +15,134 @@ import com.dke.data.agrirouter.impl.messaging.rest.FetchMessageServiceImpl; import com.dke.data.agrirouter.test.AbstractIntegrationTest; import com.dke.data.agrirouter.test.Assertions; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Optional; import org.apache.http.HttpStatus; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import java.util.Arrays; +import java.util.Collections; + +import static com.dke.data.agrirouter.test.OnboardingResponseRepository.Identifier; +import static com.dke.data.agrirouter.test.OnboardingResponseRepository.read; + class CloudOffboardingServiceTest extends AbstractIntegrationTest { - public static final String EXTERNAL_ID = "8c31e156-3c29-4b46-863c-5e49b405b344"; - public static final String ENDPOINT_NAME = "CLOUD-OFFBOARDING-SERVICE-TEST"; - - /** - * The endpoint ID for a former test run. If the endpoint is still available, then there could be - * a chance to remove it. This has to be set manually. - */ - public static final String VCU_ENDPOINT_ID_FOR_FORMER_TEST_RUN = - "bbfdcaed-9228-42a9-ab51-9e226cb314d1"; - - private OnboardingResponse virtualCommunicationUnit; - - @BeforeEach - void onboardVirtualCu() throws Throwable { - offboardExistingVirtualCUFromFormerTestRun(); - - CloudOnboardingService cloudOnboardingService = new CloudOnboardingServiceImpl(); - CloudOnboardingParameters parameters = new CloudOnboardingParameters(); - CloudOnboardingParameters.EndpointDetailsParameters endpointDetails = - new CloudOnboardingParameters.EndpointDetailsParameters(); - endpointDetails.setEndpointId(EXTERNAL_ID); - endpointDetails.setEndpointName(ENDPOINT_NAME); - parameters.setEndpointDetails(Collections.singletonList(endpointDetails)); - parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); - cloudOnboardingService.send(parameters); - - waitForTheAgrirouterToProcessSingleMessage(); - - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.TELEMETRY_PLATFORM), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - - Message command = fetchMessageResponses.get().get(0).getCommand(); - String message = command.getMessage(); - - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodeMessageResponse = decodeMessageService.decode(message); - - Assertions.assertMatchesAny( - Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), - decodeMessageResponse.getResponseEnvelope().getResponseCode()); - - DecodeCloudOnboardingResponsesService decodeCloudOnboardingResponsesService = - new DecodeCloudOnboardingResponsesService(); - List onboardingResponses = - decodeCloudOnboardingResponsesService.decode( - fetchMessageResponses.get(), read(Identifier.TELEMETRY_PLATFORM)); - - Assertions.assertEquals(1, onboardingResponses.size()); - - virtualCommunicationUnit = onboardingResponses.get(0); - - Assertions.assertNotNull(virtualCommunicationUnit); - Assertions.assertNotNull(virtualCommunicationUnit.getCapabilityAlternateId()); - Assertions.assertNotNull(virtualCommunicationUnit.getDeviceAlternateId()); - Assertions.assertNotNull(virtualCommunicationUnit.getSensorAlternateId()); - Assertions.assertNotNull(virtualCommunicationUnit.getAuthentication()); - Assertions.assertNotNull(virtualCommunicationUnit.getConnectionCriteria()); - } - - private void offboardExistingVirtualCUFromFormerTestRun() throws Throwable { - CloudOffboardingService cloudOffboardingService = new CloudOffboardingServiceImpl(); - CloudOffboardingParameters parameters = new CloudOffboardingParameters(); - parameters.setEndpointIds(Collections.singletonList(VCU_ENDPOINT_ID_FOR_FORMER_TEST_RUN)); - parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); - cloudOffboardingService.send(parameters); - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.TELEMETRY_PLATFORM), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - waitForTheAgrirouterToProcessSingleMessage(); - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - } - - @Test - @Disabled( - "Since there are multiple problems with the environment, the test is currently disabled.") - void givenValidSensorIdWhenOffboardingVirtualCuThenTheOffbardingShouldBeSuccessful() - throws Throwable { - CloudOffboardingService cloudOffboardingService = new CloudOffboardingServiceImpl(); - CloudOffboardingParameters parameters = new CloudOffboardingParameters(); - parameters.setEndpointIds( - Collections.singletonList(virtualCommunicationUnit.getSensorAlternateId())); - parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); - cloudOffboardingService.send(parameters); - - waitForTheAgrirouterToProcessSingleMessage(); - - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.TELEMETRY_PLATFORM), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - - Message command = fetchMessageResponses.get().get(0).getCommand(); - String message = command.getMessage(); - - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodeMessageResponse = decodeMessageService.decode(message); - - Assertions.assertMatchesAny( - Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), - decodeMessageResponse.getResponseEnvelope().getResponseCode()); - } + public static final String EXTERNAL_ID = "8c31e156-3c29-4b46-863c-5e49b405b344"; + public static final String ENDPOINT_NAME = "CLOUD-OFFBOARDING-SERVICE-TEST"; + + /** + * The endpoint ID for a former test run. If the endpoint is still available, then there could be + * a chance to remove it. This has to be set manually. + */ + public static final String VCU_ENDPOINT_ID_FOR_FORMER_TEST_RUN = + "bbfdcaed-9228-42a9-ab51-9e226cb314d1"; + + private OnboardingResponse virtualCommunicationUnit; + + @BeforeEach + void onboardVirtualCu() throws Throwable { + offboardExistingVirtualCUFromFormerTestRun(); + + CloudOnboardingService cloudOnboardingService = new CloudOnboardingServiceImpl(); + var parameters = new CloudOnboardingParameters(); + var endpointDetails = + new CloudOnboardingParameters.EndpointDetailsParameters(); + endpointDetails.setEndpointId(EXTERNAL_ID); + endpointDetails.setEndpointName(ENDPOINT_NAME); + parameters.setEndpointDetails(Collections.singletonList(endpointDetails)); + parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); + cloudOnboardingService.send(parameters); + + waitForTheAgrirouterToProcessSingleMessage(); + + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.TELEMETRY_PLATFORM), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + + var command = fetchMessageResponses.get().get(0).getCommand(); + var message = command.getMessage(); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodeMessageResponse = decodeMessageService.decode(message); + + Assertions.assertMatchesAny( + Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), + decodeMessageResponse.getResponseEnvelope().getResponseCode()); + + var decodeCloudOnboardingResponsesService = + new DecodeCloudOnboardingResponsesService(); + var onboardingResponses = + decodeCloudOnboardingResponsesService.decode( + fetchMessageResponses.get(), read(Identifier.TELEMETRY_PLATFORM)); + + Assertions.assertEquals(1, onboardingResponses.size()); + + virtualCommunicationUnit = onboardingResponses.get(0); + + Assertions.assertNotNull(virtualCommunicationUnit); + Assertions.assertNotNull(virtualCommunicationUnit.getCapabilityAlternateId()); + Assertions.assertNotNull(virtualCommunicationUnit.getDeviceAlternateId()); + Assertions.assertNotNull(virtualCommunicationUnit.getSensorAlternateId()); + Assertions.assertNotNull(virtualCommunicationUnit.getAuthentication()); + Assertions.assertNotNull(virtualCommunicationUnit.getConnectionCriteria()); + } + + private void offboardExistingVirtualCUFromFormerTestRun() throws Throwable { + CloudOffboardingService cloudOffboardingService = new CloudOffboardingServiceImpl(); + var parameters = new CloudOffboardingParameters(); + parameters.setEndpointIds(Collections.singletonList(VCU_ENDPOINT_ID_FOR_FORMER_TEST_RUN)); + parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); + cloudOffboardingService.send(parameters); + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.TELEMETRY_PLATFORM), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + waitForTheAgrirouterToProcessSingleMessage(); + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + } + + @Test + @Disabled( + "Since there are multiple problems with the environment, the test is currently disabled.") + void givenValidSensorIdWhenOffboardingVirtualCuThenTheOffbardingShouldBeSuccessful() + throws Throwable { + CloudOffboardingService cloudOffboardingService = new CloudOffboardingServiceImpl(); + var parameters = new CloudOffboardingParameters(); + parameters.setEndpointIds( + Collections.singletonList(virtualCommunicationUnit.getSensorAlternateId())); + parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); + cloudOffboardingService.send(parameters); + + waitForTheAgrirouterToProcessSingleMessage(); + + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.TELEMETRY_PLATFORM), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + + var command = fetchMessageResponses.get().get(0).getCommand(); + var message = command.getMessage(); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodeMessageResponse = decodeMessageService.decode(message); + + Assertions.assertMatchesAny( + Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), + decodeMessageResponse.getResponseEnvelope().getResponseCode()); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CloudOnboardingServiceTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CloudOnboardingServiceTest.java index fafe984f..d557f8ef 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CloudOnboardingServiceTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/CloudOnboardingServiceTest.java @@ -1,12 +1,6 @@ package com.dke.data.agrirouter.test.messaging.rest; -import static com.dke.data.agrirouter.test.OnboardingResponseRepository.Identifier; -import static com.dke.data.agrirouter.test.OnboardingResponseRepository.read; - import com.dke.data.agrirouter.api.cancellation.DefaultCancellationToken; -import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; -import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; -import com.dke.data.agrirouter.api.dto.messaging.inner.Message; import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.service.messaging.encoding.DecodeMessageService; import com.dke.data.agrirouter.api.service.messaging.http.CloudOffboardingService; @@ -21,132 +15,134 @@ import com.dke.data.agrirouter.impl.messaging.rest.FetchMessageServiceImpl; import com.dke.data.agrirouter.test.AbstractIntegrationTest; import com.dke.data.agrirouter.test.Assertions; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Optional; import org.apache.http.HttpStatus; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import java.util.Arrays; +import java.util.Collections; + +import static com.dke.data.agrirouter.test.OnboardingResponseRepository.Identifier; +import static com.dke.data.agrirouter.test.OnboardingResponseRepository.read; + class CloudOnboardingServiceTest extends AbstractIntegrationTest { - public static final String EXTERNAL_ID = "8c31e156-3c29-4b46-863c-5e49b405b343"; - public static final String ENDPOINT_NAME = "CLOUD-ONBOARDING-SERVICE-TEST"; - - /** - * The endpoint ID for a former test run. If the endpoint is still available, then there could be - * a chance to remove it. This has to be set manually. - */ - public static final String VCU_ENDPOINT_ID_FOR_FORMER_TEST_RUN = - "4e3af0ec-efb1-4109-8d3d-1910094c09d9"; - - private OnboardingResponse virtualCommunicationUnit; - - @AfterEach - void offboardVirtualCu() throws Throwable { - offboardExistingVirtualCUFromFormerTestRun(); - - CloudOffboardingService cloudOffboardingService = new CloudOffboardingServiceImpl(); - CloudOffboardingParameters parameters = new CloudOffboardingParameters(); - parameters.setEndpointIds( - Collections.singletonList(virtualCommunicationUnit.getSensorAlternateId())); - parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); - cloudOffboardingService.send(parameters); - - waitForTheAgrirouterToProcessSingleMessage(); - - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.TELEMETRY_PLATFORM), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - - Message command = fetchMessageResponses.get().get(0).getCommand(); - String message = command.getMessage(); - - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodeMessageResponse = decodeMessageService.decode(message); - - Assertions.assertMatchesAny( - Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), - decodeMessageResponse.getResponseEnvelope().getResponseCode()); - } - - private void offboardExistingVirtualCUFromFormerTestRun() throws Throwable { - CloudOffboardingService cloudOffboardingService = new CloudOffboardingServiceImpl(); - CloudOffboardingParameters parameters = new CloudOffboardingParameters(); - parameters.setEndpointIds(Collections.singletonList(VCU_ENDPOINT_ID_FOR_FORMER_TEST_RUN)); - parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); - cloudOffboardingService.send(parameters); - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.TELEMETRY_PLATFORM), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - waitForTheAgrirouterToProcessSingleMessage(); - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - } - - @Test - @Disabled( - "Since there are multiple problems with the environment, the test is currently disabled.") - void givenValidIdAndNameWhenOnboardingVirtualCuThenTheOnbardingShouldBePossible() - throws Throwable { - CloudOnboardingService cloudOnboardingService = new CloudOnboardingServiceImpl(); - CloudOnboardingParameters parameters = new CloudOnboardingParameters(); - CloudOnboardingParameters.EndpointDetailsParameters endpointDetails = - new CloudOnboardingParameters.EndpointDetailsParameters(); - endpointDetails.setEndpointId(EXTERNAL_ID); - endpointDetails.setEndpointName(ENDPOINT_NAME); - parameters.setEndpointDetails(Collections.singletonList(endpointDetails)); - parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); - cloudOnboardingService.send(parameters); - - waitForTheAgrirouterToProcessSingleMessage(); - - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.TELEMETRY_PLATFORM), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - - Message command = fetchMessageResponses.get().get(0).getCommand(); - String message = command.getMessage(); - - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodeMessageResponse = decodeMessageService.decode(message); - - Assertions.assertMatchesAny( - Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), - decodeMessageResponse.getResponseEnvelope().getResponseCode()); - - DecodeCloudOnboardingResponsesService decodeCloudOnboardingResponsesService = - new DecodeCloudOnboardingResponsesService(); - List onboardingResponses = - decodeCloudOnboardingResponsesService.decode( - fetchMessageResponses.get(), read(Identifier.TELEMETRY_PLATFORM)); - - Assertions.assertEquals(1, onboardingResponses.size()); - - virtualCommunicationUnit = onboardingResponses.get(0); - - Assertions.assertNotNull(virtualCommunicationUnit); - Assertions.assertNotNull(virtualCommunicationUnit.getCapabilityAlternateId()); - Assertions.assertNotNull(virtualCommunicationUnit.getDeviceAlternateId()); - Assertions.assertNotNull(virtualCommunicationUnit.getSensorAlternateId()); - Assertions.assertNotNull(virtualCommunicationUnit.getAuthentication()); - Assertions.assertNotNull(virtualCommunicationUnit.getConnectionCriteria()); - } + public static final String EXTERNAL_ID = "8c31e156-3c29-4b46-863c-5e49b405b343"; + public static final String ENDPOINT_NAME = "CLOUD-ONBOARDING-SERVICE-TEST"; + + /** + * The endpoint ID for a former test run. If the endpoint is still available, then there could be + * a chance to remove it. This has to be set manually. + */ + public static final String VCU_ENDPOINT_ID_FOR_FORMER_TEST_RUN = + "4e3af0ec-efb1-4109-8d3d-1910094c09d9"; + + private OnboardingResponse virtualCommunicationUnit; + + @AfterEach + void offboardVirtualCu() throws Throwable { + offboardExistingVirtualCUFromFormerTestRun(); + + CloudOffboardingService cloudOffboardingService = new CloudOffboardingServiceImpl(); + var parameters = new CloudOffboardingParameters(); + parameters.setEndpointIds( + Collections.singletonList(virtualCommunicationUnit.getSensorAlternateId())); + parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); + cloudOffboardingService.send(parameters); + + waitForTheAgrirouterToProcessSingleMessage(); + + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.TELEMETRY_PLATFORM), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + + var command = fetchMessageResponses.get().get(0).getCommand(); + var message = command.getMessage(); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodeMessageResponse = decodeMessageService.decode(message); + + Assertions.assertMatchesAny( + Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), + decodeMessageResponse.getResponseEnvelope().getResponseCode()); + } + + private void offboardExistingVirtualCUFromFormerTestRun() throws Throwable { + CloudOffboardingService cloudOffboardingService = new CloudOffboardingServiceImpl(); + var parameters = new CloudOffboardingParameters(); + parameters.setEndpointIds(Collections.singletonList(VCU_ENDPOINT_ID_FOR_FORMER_TEST_RUN)); + parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); + cloudOffboardingService.send(parameters); + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.TELEMETRY_PLATFORM), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + waitForTheAgrirouterToProcessSingleMessage(); + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + } + + @Test + @Disabled( + "Since there are multiple problems with the environment, the test is currently disabled.") + void givenValidIdAndNameWhenOnboardingVirtualCuThenTheOnbardingShouldBePossible() + throws Throwable { + CloudOnboardingService cloudOnboardingService = new CloudOnboardingServiceImpl(); + var parameters = new CloudOnboardingParameters(); + var endpointDetails = + new CloudOnboardingParameters.EndpointDetailsParameters(); + endpointDetails.setEndpointId(EXTERNAL_ID); + endpointDetails.setEndpointName(ENDPOINT_NAME); + parameters.setEndpointDetails(Collections.singletonList(endpointDetails)); + parameters.setOnboardingResponse(read(Identifier.TELEMETRY_PLATFORM)); + cloudOnboardingService.send(parameters); + + waitForTheAgrirouterToProcessSingleMessage(); + + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.TELEMETRY_PLATFORM), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + + var command = fetchMessageResponses.get().get(0).getCommand(); + var message = command.getMessage(); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodeMessageResponse = decodeMessageService.decode(message); + + Assertions.assertMatchesAny( + Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), + decodeMessageResponse.getResponseEnvelope().getResponseCode()); + + var decodeCloudOnboardingResponsesService = + new DecodeCloudOnboardingResponsesService(); + var onboardingResponses = + decodeCloudOnboardingResponsesService.decode( + fetchMessageResponses.get(), read(Identifier.TELEMETRY_PLATFORM)); + + Assertions.assertEquals(1, onboardingResponses.size()); + + virtualCommunicationUnit = onboardingResponses.get(0); + + Assertions.assertNotNull(virtualCommunicationUnit); + Assertions.assertNotNull(virtualCommunicationUnit.getCapabilityAlternateId()); + Assertions.assertNotNull(virtualCommunicationUnit.getDeviceAlternateId()); + Assertions.assertNotNull(virtualCommunicationUnit.getSensorAlternateId()); + Assertions.assertNotNull(virtualCommunicationUnit.getAuthentication()); + Assertions.assertNotNull(virtualCommunicationUnit.getConnectionCriteria()); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/HealthCheckForEndpointsByPollingTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/HealthCheckForEndpointsByPollingTest.java index 1dad42fb..53e4196a 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/HealthCheckForEndpointsByPollingTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/HealthCheckForEndpointsByPollingTest.java @@ -1,67 +1,66 @@ package com.dke.data.agrirouter.test.messaging.rest; import com.dke.data.agrirouter.api.cancellation.DefaultCancellationToken; -import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; -import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.exception.UnauthorizedRequestException; import com.dke.data.agrirouter.api.service.messaging.http.FetchMessageService; import com.dke.data.agrirouter.impl.messaging.rest.FetchMessageServiceImpl; import com.dke.data.agrirouter.impl.messaging.rest.MessageFetcher; import com.dke.data.agrirouter.test.AbstractIntegrationTest; import com.dke.data.agrirouter.test.OnboardingResponseRepository; -import java.io.IOException; -import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -/** Class to show how health checking via polling can be implemented. */ +import java.io.IOException; + +/** + * Class to show how health checking via polling can be implemented. + */ class HealthCheckForEndpointsByPollingTest extends AbstractIntegrationTest { - @Test - void - givenExistingAndActivatedEndpointWhenPollingTheOutboxThenTheAgrirouterShouldReturnAnEmptyResult() - throws IOException { - final OnboardingResponse onboardingResponse = - OnboardingResponseRepository.read(OnboardingResponseRepository.Identifier.FARMING_SOFTWARE); - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - final Optional> optionalMessageResponses = - fetchMessageService.fetch( - onboardingResponse, - new DefaultCancellationToken( - MessageFetcher.MAX_TRIES_BEFORE_FAILURE, MessageFetcher.DEFAULT_INTERVAL)); - Assertions.assertFalse(optionalMessageResponses.isPresent()); - } + @Test + void + givenExistingAndActivatedEndpointWhenPollingTheOutboxThenTheAgrirouterShouldReturnAnEmptyResult() + throws IOException { + final var onboardingResponse = + OnboardingResponseRepository.read(OnboardingResponseRepository.Identifier.FARMING_SOFTWARE); + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + final var optionalMessageResponses = + fetchMessageService.fetch( + onboardingResponse, + new DefaultCancellationToken( + MessageFetcher.MAX_TRIES_BEFORE_FAILURE, MessageFetcher.DEFAULT_INTERVAL)); + Assertions.assertFalse(optionalMessageResponses.isPresent()); + } - @Test - void - givenExistingAndDeactivatedEndpointWhenPollingTheOutboxThenTheAgrirouterShouldReturnAnEmptyResult() - throws IOException { - final OnboardingResponse onboardingResponse = - OnboardingResponseRepository.read( - OnboardingResponseRepository.Identifier.FARMING_SOFTWARE_DEACTIVATED); - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - final Optional> optionalMessageResponses = - fetchMessageService.fetch( - onboardingResponse, - new DefaultCancellationToken( - MessageFetcher.MAX_TRIES_BEFORE_FAILURE, MessageFetcher.DEFAULT_INTERVAL)); - Assertions.assertFalse(optionalMessageResponses.isPresent()); - } + @Test + void + givenExistingAndDeactivatedEndpointWhenPollingTheOutboxThenTheAgrirouterShouldReturnAnEmptyResult() + throws IOException { + final var onboardingResponse = + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.FARMING_SOFTWARE_DEACTIVATED); + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + final var optionalMessageResponses = + fetchMessageService.fetch( + onboardingResponse, + new DefaultCancellationToken( + MessageFetcher.MAX_TRIES_BEFORE_FAILURE, MessageFetcher.DEFAULT_INTERVAL)); + Assertions.assertFalse(optionalMessageResponses.isPresent()); + } - @Test - void givenRemovedEndpointWhenPollingTheOutboxThenTheAgrirouterShouldDenyAccessToTheApi() - throws IOException { - final OnboardingResponse onboardingResponse = - OnboardingResponseRepository.read( - OnboardingResponseRepository.Identifier.FARMING_SOFTWARE_REMOVED); - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Assertions.assertThrows( - UnauthorizedRequestException.class, - () -> - fetchMessageService.fetch( - onboardingResponse, - new DefaultCancellationToken( - MessageFetcher.MAX_TRIES_BEFORE_FAILURE, MessageFetcher.DEFAULT_INTERVAL))); - } + @Test + void givenRemovedEndpointWhenPollingTheOutboxThenTheAgrirouterShouldDenyAccessToTheApi() + throws IOException { + final var onboardingResponse = + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.FARMING_SOFTWARE_REMOVED); + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + Assertions.assertThrows( + UnauthorizedRequestException.class, + () -> + fetchMessageService.fetch( + onboardingResponse, + new DefaultCancellationToken( + MessageFetcher.MAX_TRIES_BEFORE_FAILURE, MessageFetcher.DEFAULT_INTERVAL))); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SendChunkedMessageTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SendChunkedMessageTest.java index 0619109a..012c9b16 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SendChunkedMessageTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SendChunkedMessageTest.java @@ -4,13 +4,14 @@ import com.dke.data.agrirouter.api.cancellation.DefaultCancellationToken; import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; -import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.enums.ContentMessageType; import com.dke.data.agrirouter.api.enums.SystemMessageType; import com.dke.data.agrirouter.api.service.messaging.encoding.DecodeMessageService; import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService; import com.dke.data.agrirouter.api.service.messaging.http.FetchMessageService; -import com.dke.data.agrirouter.api.service.parameters.*; +import com.dke.data.agrirouter.api.service.parameters.MessageHeaderParameters; +import com.dke.data.agrirouter.api.service.parameters.PayloadParameters; +import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters; import com.dke.data.agrirouter.impl.common.MessageIdService; import com.dke.data.agrirouter.impl.messaging.SequenceNumberService; import com.dke.data.agrirouter.impl.messaging.encoding.DecodeMessageServiceImpl; @@ -22,84 +23,89 @@ import com.dke.data.agrirouter.test.OnboardingResponseRepository; import com.dke.data.agrirouter.test.helper.ContentReader; import com.google.protobuf.ByteString; -import java.util.*; -import java.util.concurrent.atomic.AtomicReference; import org.apache.http.HttpStatus; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -/** Test case to show the behavior for chunked message sending. */ +import java.util.Arrays; +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicReference; + +/** + * Test case to show the behavior for chunked message sending. + */ class SendChunkedMessageTest extends AbstractIntegrationTest { - private static final int MAX_CHUNK_SIZE = 1024000; - - @Disabled("Currently there is a mismatch between the chunks and the messages.") - @Test - void - givenLargeContentMessageWhenSendingTheMessageToTheAgrirouterTheSdkShouldHelpToSendTheFileInMultipleChunks() - throws Throwable { - - final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); - final SendMessageServiceImpl sendMessageService = new SendMessageServiceImpl(); - final OnboardingResponse onboardingResponse = - OnboardingResponseRepository.read(OnboardingResponseRepository.Identifier.FARMING_SOFTWARE); - - 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("797b7f4b-79ec-4247-9fba-e726a55c4c7f")); - - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setValue( - ByteString.copyFrom(ContentReader.readRawData(ContentReader.Identifier.BIG_TASK_DATA))); - payloadParameters.setTypeUrl(SystemMessageType.EMPTY.getKey()); - - List tuples = - encodeMessageService.chunkAndBase64EncodeEachChunk( - messageHeaderParameters, payloadParameters, onboardingResponse); - - tuples.forEach( - messageParameterTuple -> - Assertions.assertTrue( - Objects.requireNonNull(messageParameterTuple.getPayloadParameters().getValue()) - .toStringUtf8() - .length() - <= MAX_CHUNK_SIZE)); - - List encodedMessages = encodeMessageService.encode(tuples); - - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setEncodedMessages(encodedMessages); - sendMessageParameters.setOnboardingResponse(onboardingResponse); - sendMessageService.send(sendMessageParameters); - - waitForTheAgrirouterToProcessMultipleMessages(); - - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - onboardingResponse, - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(3, 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()); - }); - } + private static final int MAX_CHUNK_SIZE = 1024000; + + @Disabled("Currently there is a mismatch between the chunks and the messages.") + @Test + void + givenLargeContentMessageWhenSendingTheMessageToTheAgrirouterTheSdkShouldHelpToSendTheFileInMultipleChunks() + throws Throwable { + + final EncodeMessageService encodeMessageService = new EncodeMessageServiceImpl(); + final var sendMessageService = new SendMessageServiceImpl(); + final var onboardingResponse = + OnboardingResponseRepository.read(OnboardingResponseRepository.Identifier.FARMING_SOFTWARE); + + var 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("797b7f4b-79ec-4247-9fba-e726a55c4c7f")); + + var payloadParameters = new PayloadParameters(); + payloadParameters.setValue( + ByteString.copyFrom(ContentReader.readRawData(ContentReader.Identifier.BIG_TASK_DATA))); + payloadParameters.setTypeUrl(SystemMessageType.EMPTY.getKey()); + + var tuples = + encodeMessageService.chunkAndBase64EncodeEachChunk( + messageHeaderParameters, payloadParameters, onboardingResponse); + + tuples.forEach( + messageParameterTuple -> + Assertions.assertTrue( + Objects.requireNonNull(messageParameterTuple.getPayloadParameters().getValue()) + .toStringUtf8() + .length() + <= MAX_CHUNK_SIZE)); + + var encodedMessages = encodeMessageService.encode(tuples); + + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setEncodedMessages(encodedMessages); + sendMessageParameters.setOnboardingResponse(onboardingResponse); + sendMessageService.send(sendMessageParameters); + + waitForTheAgrirouterToProcessMultipleMessages(); + + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + onboardingResponse, + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(3, fetchMessageResponses.get().size()); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var 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()); + }); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SetCapabilityServiceTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SetCapabilityServiceTest.java index befabfee..8f5820f5 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SetCapabilityServiceTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SetCapabilityServiceTest.java @@ -1,14 +1,7 @@ package com.dke.data.agrirouter.test.messaging.rest; -import static com.dke.data.agrirouter.test.OnboardingResponseRepository.Identifier; -import static com.dke.data.agrirouter.test.OnboardingResponseRepository.read; - -import agrirouter.commons.MessageOuterClass; import agrirouter.request.payload.endpoint.Capabilities; import com.dke.data.agrirouter.api.cancellation.DefaultCancellationToken; -import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; -import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; -import com.dke.data.agrirouter.api.dto.messaging.inner.Message; import com.dke.data.agrirouter.api.enums.ContentMessageType; import com.dke.data.agrirouter.api.enums.SystemMessageType; import com.dke.data.agrirouter.api.env.QA; @@ -21,105 +14,112 @@ import com.dke.data.agrirouter.impl.messaging.rest.SetCapabilityServiceImpl; import com.dke.data.agrirouter.test.AbstractIntegrationTest; import com.dke.data.agrirouter.test.Assertions; +import org.apache.http.HttpStatus; +import org.junit.jupiter.api.Test; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Optional; -import org.apache.http.HttpStatus; -import org.junit.jupiter.api.Test; -/** Demonstration how to use the service class. */ +import static com.dke.data.agrirouter.test.OnboardingResponseRepository.Identifier; +import static com.dke.data.agrirouter.test.OnboardingResponseRepository.read; + +/** + * Demonstration how to use the service class. + */ class SetCapabilityServiceTest extends AbstractIntegrationTest { - @Test - void givenValidEndpointWhenSendingCapabilitiesTheCapabilityMessageShouldBeAccepted() - throws Throwable { - SetCapabilityService setCapabilityService = new SetCapabilityServiceImpl(new QA() {}); - - SetCapabilitiesParameters parameters = new SetCapabilitiesParameters(); - parameters.setApplicationId(farmingSoftware.getApplicationId()); - parameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); - parameters.setEnablePushNotifications( - Capabilities.CapabilitySpecification.PushNotification.DISABLED); - parameters.setOnboardingResponse(read(Identifier.FARMING_SOFTWARE)); - List capabilities = new ArrayList<>(); - SetCapabilitiesParameters.CapabilityParameters capability = - new SetCapabilitiesParameters.CapabilityParameters(); - capability.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); - capability.setDirection(Capabilities.CapabilitySpecification.Direction.SEND_RECEIVE); - capabilities.add(capability); - parameters.setCapabilitiesParameters(capabilities); - setCapabilityService.send(parameters); - - waitForTheAgrirouterToProcessSingleMessage(); - - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.FARMING_SOFTWARE), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - - Message command = fetchMessageResponses.get().get(0).getCommand(); - String message = command.getMessage(); - - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodeMessageResponse = decodeMessageService.decode(message); - - Assertions.assertMatchesAny( - Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), - decodeMessageResponse.getResponseEnvelope().getResponseCode()); - } - - @Test - void givenValidEndpointWhenSendingInvalidCapabilitiesTheCapabilityMessageShouldNotBeAccepted() - throws Throwable { - SetCapabilityService setCapabilityService = new SetCapabilityServiceImpl(new QA() {}); - - SetCapabilitiesParameters parameters = new SetCapabilitiesParameters(); - parameters.setApplicationId(farmingSoftware.getApplicationId()); - parameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); - parameters.setEnablePushNotifications( - Capabilities.CapabilitySpecification.PushNotification.DISABLED); - parameters.setOnboardingResponse(read(Identifier.FARMING_SOFTWARE)); - List capabilities = new ArrayList<>(); - SetCapabilitiesParameters.CapabilityParameters capability = - new SetCapabilitiesParameters.CapabilityParameters(); - capability.setTechnicalMessageType(SystemMessageType.DKE_FEED_DELETE); - capability.setDirection(Capabilities.CapabilitySpecification.Direction.SEND_RECEIVE); - capabilities.add(capability); - parameters.setCapabilitiesParameters(capabilities); - setCapabilityService.send(parameters); - - waitForTheAgrirouterToProcessSingleMessage(); - - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.FARMING_SOFTWARE), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - - Message command = fetchMessageResponses.get().get(0).getCommand(); - String encodedMessage = command.getMessage(); - - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodeMessageResponse = decodeMessageService.decode(encodedMessage); - - Assertions.assertEquals( - HttpStatus.SC_BAD_REQUEST, decodeMessageResponse.getResponseEnvelope().getResponseCode()); - - MessageOuterClass.Messages messages = - decodeMessageService.decode(decodeMessageResponse.getResponsePayloadWrapper().getDetails()); - Assertions.assertEquals(1, messages.getMessagesCount()); - - MessageOuterClass.Message message = messages.getMessages(0); - Assertions.assertEquals("VAL_000007", message.getMessageCode()); - } + @Test + void givenValidEndpointWhenSendingCapabilitiesTheCapabilityMessageShouldBeAccepted() + throws Throwable { + SetCapabilityService setCapabilityService = new SetCapabilityServiceImpl(new QA() { + }); + + var parameters = new SetCapabilitiesParameters(); + parameters.setApplicationId(farmingSoftware.getApplicationId()); + parameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); + parameters.setEnablePushNotifications( + Capabilities.CapabilitySpecification.PushNotification.DISABLED); + parameters.setOnboardingResponse(read(Identifier.FARMING_SOFTWARE)); + List capabilities = new ArrayList<>(); + var capability = + new SetCapabilitiesParameters.CapabilityParameters(); + capability.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); + capability.setDirection(Capabilities.CapabilitySpecification.Direction.SEND_RECEIVE); + capabilities.add(capability); + parameters.setCapabilitiesParameters(capabilities); + setCapabilityService.send(parameters); + + waitForTheAgrirouterToProcessSingleMessage(); + + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.FARMING_SOFTWARE), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + + var command = fetchMessageResponses.get().get(0).getCommand(); + var message = command.getMessage(); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodeMessageResponse = decodeMessageService.decode(message); + + Assertions.assertMatchesAny( + Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), + decodeMessageResponse.getResponseEnvelope().getResponseCode()); + } + + @Test + void givenValidEndpointWhenSendingInvalidCapabilitiesTheCapabilityMessageShouldNotBeAccepted() + throws Throwable { + SetCapabilityService setCapabilityService = new SetCapabilityServiceImpl(new QA() { + }); + + var parameters = new SetCapabilitiesParameters(); + parameters.setApplicationId(farmingSoftware.getApplicationId()); + parameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); + parameters.setEnablePushNotifications( + Capabilities.CapabilitySpecification.PushNotification.DISABLED); + parameters.setOnboardingResponse(read(Identifier.FARMING_SOFTWARE)); + List capabilities = new ArrayList<>(); + var capability = + new SetCapabilitiesParameters.CapabilityParameters(); + capability.setTechnicalMessageType(SystemMessageType.DKE_FEED_DELETE); + capability.setDirection(Capabilities.CapabilitySpecification.Direction.SEND_RECEIVE); + capabilities.add(capability); + parameters.setCapabilitiesParameters(capabilities); + setCapabilityService.send(parameters); + + waitForTheAgrirouterToProcessSingleMessage(); + + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.FARMING_SOFTWARE), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + + var command = fetchMessageResponses.get().get(0).getCommand(); + var encodedMessage = command.getMessage(); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodeMessageResponse = decodeMessageService.decode(encodedMessage); + + Assertions.assertEquals( + HttpStatus.SC_BAD_REQUEST, decodeMessageResponse.getResponseEnvelope().getResponseCode()); + + var messages = + decodeMessageService.decode(decodeMessageResponse.getResponsePayloadWrapper().getDetails()); + Assertions.assertEquals(1, messages.getMessagesCount()); + + var message = messages.getMessages(0); + Assertions.assertEquals("VAL_000007", message.getMessageCode()); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SetSubscriptionServiceTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SetSubscriptionServiceTest.java index bba8e7d0..00f5b493 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SetSubscriptionServiceTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/messaging/rest/SetSubscriptionServiceTest.java @@ -1,13 +1,6 @@ package com.dke.data.agrirouter.test.messaging.rest; -import static com.dke.data.agrirouter.test.OnboardingResponseRepository.Identifier; -import static com.dke.data.agrirouter.test.OnboardingResponseRepository.read; - -import agrirouter.commons.MessageOuterClass; import com.dke.data.agrirouter.api.cancellation.DefaultCancellationToken; -import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; -import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; -import com.dke.data.agrirouter.api.dto.messaging.inner.Message; import com.dke.data.agrirouter.api.enums.ContentMessageType; import com.dke.data.agrirouter.api.enums.SystemMessageType; import com.dke.data.agrirouter.api.env.QA; @@ -20,95 +13,102 @@ import com.dke.data.agrirouter.impl.messaging.rest.SetSubscriptionServiceImpl; import com.dke.data.agrirouter.test.AbstractIntegrationTest; import com.dke.data.agrirouter.test.Assertions; +import org.apache.http.HttpStatus; +import org.junit.jupiter.api.Test; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Optional; -import org.apache.http.HttpStatus; -import org.junit.jupiter.api.Test; -/** Demonstration how to use the service class. */ +import static com.dke.data.agrirouter.test.OnboardingResponseRepository.Identifier; +import static com.dke.data.agrirouter.test.OnboardingResponseRepository.read; + +/** + * Demonstration how to use the service class. + */ class SetSubscriptionServiceTest extends AbstractIntegrationTest { - @Test - void givenValidEndpointWhenSendingSubscriptionsTheSubscriptionMessageShouldBeAccepted() - throws Throwable { - SetSubscriptionService setSubscriptionService = new SetSubscriptionServiceImpl(new QA() {}); - - SetSubscriptionParameters parameters = new SetSubscriptionParameters(); - parameters.setOnboardingResponse(read(Identifier.FARMING_SOFTWARE)); - List subscriptions = new ArrayList<>(); - SetSubscriptionParameters.Subscription subscription = - new SetSubscriptionParameters.Subscription(); - subscription.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); - subscriptions.add(subscription); - parameters.setSubscriptions(subscriptions); - setSubscriptionService.send(parameters); - - waitForTheAgrirouterToProcessSingleMessage(); - - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.FARMING_SOFTWARE), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - - Message command = fetchMessageResponses.get().get(0).getCommand(); - String message = command.getMessage(); - - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodeMessageResponse = decodeMessageService.decode(message); - - Assertions.assertMatchesAny( - Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), - decodeMessageResponse.getResponseEnvelope().getResponseCode()); - } - - @Test - void givenValidEndpointWhenSendingInvalidSubscriptionsTheSubscriptionMessageShouldNotBeAccepted() - throws Throwable { - SetSubscriptionService setSubscriptionService = new SetSubscriptionServiceImpl(new QA() {}); - - SetSubscriptionParameters parameters = new SetSubscriptionParameters(); - parameters.setOnboardingResponse(read(Identifier.FARMING_SOFTWARE)); - List subscriptions = new ArrayList<>(); - SetSubscriptionParameters.Subscription subscription = - new SetSubscriptionParameters.Subscription(); - subscription.setTechnicalMessageType(SystemMessageType.DKE_FEED_DELETE); - subscriptions.add(subscription); - parameters.setSubscriptions(subscriptions); - setSubscriptionService.send(parameters); - - waitForTheAgrirouterToProcessSingleMessage(); - - FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); - Optional> fetchMessageResponses = - fetchMessageService.fetch( - read(Identifier.FARMING_SOFTWARE), - new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(1, fetchMessageResponses.get().size()); - Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); - - Message command = fetchMessageResponses.get().get(0).getCommand(); - String encodedMessage = command.getMessage(); - - DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); - DecodeMessageResponse decodeMessageResponse = decodeMessageService.decode(encodedMessage); - - Assertions.assertEquals( - HttpStatus.SC_BAD_REQUEST, decodeMessageResponse.getResponseEnvelope().getResponseCode()); - - MessageOuterClass.Messages messages = - decodeMessageService.decode(decodeMessageResponse.getResponsePayloadWrapper().getDetails()); - Assertions.assertEquals(1, messages.getMessagesCount()); - - MessageOuterClass.Message message = messages.getMessages(0); - Assertions.assertEquals("VAL_000006", message.getMessageCode()); - } + @Test + void givenValidEndpointWhenSendingSubscriptionsTheSubscriptionMessageShouldBeAccepted() + throws Throwable { + SetSubscriptionService setSubscriptionService = new SetSubscriptionServiceImpl(new QA() { + }); + + var parameters = new SetSubscriptionParameters(); + parameters.setOnboardingResponse(read(Identifier.FARMING_SOFTWARE)); + List subscriptions = new ArrayList<>(); + var subscription = + new SetSubscriptionParameters.Subscription(); + subscription.setTechnicalMessageType(ContentMessageType.ISO_11783_TASKDATA_ZIP); + subscriptions.add(subscription); + parameters.setSubscriptions(subscriptions); + setSubscriptionService.send(parameters); + + waitForTheAgrirouterToProcessSingleMessage(); + + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.FARMING_SOFTWARE), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + + var command = fetchMessageResponses.get().get(0).getCommand(); + var message = command.getMessage(); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodeMessageResponse = decodeMessageService.decode(message); + + Assertions.assertMatchesAny( + Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), + decodeMessageResponse.getResponseEnvelope().getResponseCode()); + } + + @Test + void givenValidEndpointWhenSendingInvalidSubscriptionsTheSubscriptionMessageShouldNotBeAccepted() + throws Throwable { + SetSubscriptionService setSubscriptionService = new SetSubscriptionServiceImpl(new QA() { + }); + + var parameters = new SetSubscriptionParameters(); + parameters.setOnboardingResponse(read(Identifier.FARMING_SOFTWARE)); + List subscriptions = new ArrayList<>(); + var subscription = + new SetSubscriptionParameters.Subscription(); + subscription.setTechnicalMessageType(SystemMessageType.DKE_FEED_DELETE); + subscriptions.add(subscription); + parameters.setSubscriptions(subscriptions); + setSubscriptionService.send(parameters); + + waitForTheAgrirouterToProcessSingleMessage(); + + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + read(Identifier.FARMING_SOFTWARE), + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(1, fetchMessageResponses.get().size()); + Assertions.assertNotNull(fetchMessageResponses.get().get(0).getCommand()); + + var command = fetchMessageResponses.get().get(0).getCommand(); + var encodedMessage = command.getMessage(); + + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodeMessageResponse = decodeMessageService.decode(encodedMessage); + + Assertions.assertEquals( + HttpStatus.SC_BAD_REQUEST, decodeMessageResponse.getResponseEnvelope().getResponseCode()); + + var messages = + decodeMessageService.decode(decodeMessageResponse.getResponsePayloadWrapper().getDetails()); + Assertions.assertEquals(1, messages.getMessagesCount()); + + var message = messages.getMessages(0); + Assertions.assertEquals("VAL_000006", message.getMessageCode()); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/AuthorizationRequestServiceTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/AuthorizationRequestServiceTest.java index 9b208685..acb32f43 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/AuthorizationRequestServiceTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/AuthorizationRequestServiceTest.java @@ -1,7 +1,5 @@ package com.dke.data.agrirouter.test.onboarding; -import static org.junit.jupiter.api.Assertions.*; - import com.dke.data.agrirouter.api.enums.SecuredOnboardingResponseType; import com.dke.data.agrirouter.api.env.QA; import com.dke.data.agrirouter.api.exception.IllegalParameterDefinitionException; @@ -13,55 +11,62 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -/** Demonstration how to use the authorization request service. */ +import static org.junit.jupiter.api.Assertions.*; + +/** + * Demonstration how to use the authorization request service. + */ public class AuthorizationRequestServiceTest extends AbstractIntegrationTest { - @Test - void givenValidParameterWhenCreatingTheUrlThenTheUrlShouldBeGeneratedForFarmingSoftware() { - AuthorizationRequestService authorizationRequestService = - new AuthorizationRequestServiceImpl(new QA() {}); - AuthorizationRequestParameters authorizationRequestParameters = - new AuthorizationRequestParameters(); - authorizationRequestParameters.setApplicationId(farmingSoftware.getApplicationId()); - authorizationRequestParameters.setResponseType(SecuredOnboardingResponseType.ONBOARD); - authorizationRequestParameters.setState("my-custom-state-to-identify-the-request"); - final String authorizationRequestURL = - authorizationRequestService.getAuthorizationRequestURL(authorizationRequestParameters); - assertNotNull(authorizationRequestURL); - assertTrue(StringUtils.isNotBlank(authorizationRequestURL)); - assertEquals( - "https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/905152eb-c526-47a3-b871-aa46d065bb4c/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri=", - authorizationRequestURL); - } + @Test + void givenValidParameterWhenCreatingTheUrlThenTheUrlShouldBeGeneratedForFarmingSoftware() { + AuthorizationRequestService authorizationRequestService = + new AuthorizationRequestServiceImpl(new QA() { + }); + var authorizationRequestParameters = + new AuthorizationRequestParameters(); + authorizationRequestParameters.setApplicationId(farmingSoftware.getApplicationId()); + authorizationRequestParameters.setResponseType(SecuredOnboardingResponseType.ONBOARD); + authorizationRequestParameters.setState("my-custom-state-to-identify-the-request"); + final var authorizationRequestURL = + authorizationRequestService.getAuthorizationRequestURL(authorizationRequestParameters); + assertNotNull(authorizationRequestURL); + assertTrue(StringUtils.isNotBlank(authorizationRequestURL)); + assertEquals( + "https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/905152eb-c526-47a3-b871-aa46d065bb4c/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri=", + authorizationRequestURL); + } - @Test - void givenValidParameterWhenCreatingTheUrlThenTheUrlShouldBeGeneratedForTelemetryPlatform() { - AuthorizationRequestService authorizationRequestService = - new AuthorizationRequestServiceImpl(new QA() {}); - AuthorizationRequestParameters authorizationRequestParameters = - new AuthorizationRequestParameters(); - authorizationRequestParameters.setApplicationId(telemetryPlatform.getApplicationId()); - authorizationRequestParameters.setResponseType(SecuredOnboardingResponseType.ONBOARD); - authorizationRequestParameters.setState("my-custom-state-to-identify-the-request"); - final String authorizationRequestURL = - authorizationRequestService.getAuthorizationRequestURL(authorizationRequestParameters); - assertNotNull(authorizationRequestURL); - assertTrue(StringUtils.isNotBlank(authorizationRequestURL)); - assertEquals( - "https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/3c3559c9-7062-4628-a4f7-c9f5aa07265f/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri=", - authorizationRequestURL); - } + @Test + void givenValidParameterWhenCreatingTheUrlThenTheUrlShouldBeGeneratedForTelemetryPlatform() { + AuthorizationRequestService authorizationRequestService = + new AuthorizationRequestServiceImpl(new QA() { + }); + var authorizationRequestParameters = + new AuthorizationRequestParameters(); + authorizationRequestParameters.setApplicationId(telemetryPlatform.getApplicationId()); + authorizationRequestParameters.setResponseType(SecuredOnboardingResponseType.ONBOARD); + authorizationRequestParameters.setState("my-custom-state-to-identify-the-request"); + final var authorizationRequestURL = + authorizationRequestService.getAuthorizationRequestURL(authorizationRequestParameters); + assertNotNull(authorizationRequestURL); + assertTrue(StringUtils.isNotBlank(authorizationRequestURL)); + assertEquals( + "https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/3c3559c9-7062-4628-a4f7-c9f5aa07265f/authorize?response_type=onboard&state=my-custom-state-to-identify-the-request&redirect_uri=", + authorizationRequestURL); + } - @Test - void givenInvalidParameterWhenCreatingTheUrlThenTheUrlShouldBeGenerated() { - AuthorizationRequestService authorizationRequestService = - new AuthorizationRequestServiceImpl(new QA() {}); - AuthorizationRequestParameters authorizationRequestParameters = - new AuthorizationRequestParameters(); - authorizationRequestParameters.setResponseType(SecuredOnboardingResponseType.ONBOARD); - Assertions.assertThrows( - IllegalParameterDefinitionException.class, - () -> - authorizationRequestService.getAuthorizationRequestURL(authorizationRequestParameters)); - } + @Test + void givenInvalidParameterWhenCreatingTheUrlThenTheUrlShouldBeGenerated() { + AuthorizationRequestService authorizationRequestService = + new AuthorizationRequestServiceImpl(new QA() { + }); + var authorizationRequestParameters = + new AuthorizationRequestParameters(); + authorizationRequestParameters.setResponseType(SecuredOnboardingResponseType.ONBOARD); + Assertions.assertThrows( + IllegalParameterDefinitionException.class, + () -> + authorizationRequestService.getAuthorizationRequestURL(authorizationRequestParameters)); + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/OnboardingWithErrorMessageTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/OnboardingWithErrorMessageTest.java index 9aee1f91..85b6ee95 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/OnboardingWithErrorMessageTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/OnboardingWithErrorMessageTest.java @@ -11,36 +11,38 @@ import com.dke.data.agrirouter.impl.common.MessageIdService; import com.dke.data.agrirouter.impl.onboard.OnboardingServiceImpl; import com.dke.data.agrirouter.test.AbstractIntegrationTest; -import java.util.UUID; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.UUID; + class OnboardingWithErrorMessageTest extends AbstractIntegrationTest { - @Test - void - givenInvalidRegistrationCodeWhenSendingTheOnboardingRequestThenThereShouldBeAnOnboardingExceptionWithFilledErrorMessage() { - OnboardingService onboardingService = new OnboardingServiceImpl(getEnv()); - OnboardingParameters onboardingParameters = new OnboardingParameters(); - onboardingParameters.setApplicationMessageId(MessageIdService.generateMessageId()); - onboardingParameters.setApplicationType(ApplicationType.APPLICATION); - onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(UUID.randomUUID().toString()); - onboardingParameters.setRegistrationCode("INVALID_REGISTRATION_TOKEN"); - OnboardingException onboardingException = - Assertions.assertThrows( - OnboardingException.class, () -> onboardingService.onboard(onboardingParameters)); - Assertions.assertNotNull(onboardingException.getOnboardingError()); - Assertions.assertNotNull(onboardingException.getOnboardingError().getError()); - Assertions.assertEquals("0401", onboardingException.getOnboardingError().getError().getCode()); - Assertions.assertEquals( - "Bearer not found.", onboardingException.getOnboardingError().getError().getMessage()); - } + @Test + void + givenInvalidRegistrationCodeWhenSendingTheOnboardingRequestThenThereShouldBeAnOnboardingExceptionWithFilledErrorMessage() { + OnboardingService onboardingService = new OnboardingServiceImpl(getEnv()); + var onboardingParameters = new OnboardingParameters(); + onboardingParameters.setApplicationMessageId(MessageIdService.generateMessageId()); + onboardingParameters.setApplicationType(ApplicationType.APPLICATION); + onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(UUID.randomUUID().toString()); + onboardingParameters.setRegistrationCode("INVALID_REGISTRATION_TOKEN"); + var onboardingException = + Assertions.assertThrows( + OnboardingException.class, () -> onboardingService.onboard(onboardingParameters)); + Assertions.assertNotNull(onboardingException.getOnboardingError()); + Assertions.assertNotNull(onboardingException.getOnboardingError().getError()); + Assertions.assertEquals("0401", onboardingException.getOnboardingError().getError().getCode()); + Assertions.assertEquals( + "Bearer not found.", onboardingException.getOnboardingError().getError().getMessage()); + } - private Environment getEnv() { - return new QA() {}; - } + private Environment getEnv() { + return new QA() { + }; + } } diff --git a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/SecuredOnboardingServiceTest.java b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/SecuredOnboardingServiceTest.java index cc3055a8..39f47a6d 100644 --- a/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/SecuredOnboardingServiceTest.java +++ b/agrirouter-sdk-java-tests/src/test/java/com/dke/data/agrirouter/test/onboarding/SecuredOnboardingServiceTest.java @@ -1,9 +1,5 @@ package com.dke.data.agrirouter.test.onboarding; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.enums.CertificationType; import com.dke.data.agrirouter.api.enums.Gateway; import com.dke.data.agrirouter.api.env.QA; @@ -12,82 +8,91 @@ import com.dke.data.agrirouter.api.service.parameters.SecuredOnboardingParameters; import com.dke.data.agrirouter.impl.onboard.secured.OnboardingServiceImpl; import com.dke.data.agrirouter.test.AbstractIntegrationTest; -import java.util.UUID; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -/** Demonstration how to use the service for onboarding. */ +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +/** + * Demonstration how to use the service for onboarding. + */ class SecuredOnboardingServiceTest extends AbstractIntegrationTest { - @Test - void - givenInvalidRegistrationCodeThereShouldBeAnOnboardingExceptionWhenSendingAnOnboardingRequest() { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); - onboardingParameters.setRegistrationCode("SOME_INVALID_REGISTRATION_CODE"); - onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); - onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(UUID.randomUUID().toString()); - onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); - onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); - assertThrows(OnboardingException.class, () -> onboardingService.onboard(onboardingParameters)); - } + @Test + void + givenInvalidRegistrationCodeThereShouldBeAnOnboardingExceptionWhenSendingAnOnboardingRequest() { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + var onboardingParameters = new SecuredOnboardingParameters(); + onboardingParameters.setRegistrationCode("SOME_INVALID_REGISTRATION_CODE"); + onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); + onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(UUID.randomUUID().toString()); + onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); + onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); + assertThrows(OnboardingException.class, () -> onboardingService.onboard(onboardingParameters)); + } - @Test - @Disabled("Please replace the placeholder for the registration code to run the test case.") - void - givenValidRegistrationCodeThereShouldBeAnOnboardingResponseWhenSendingAnOnboardingRequestForFarmingSoftware() { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); - onboardingParameters.setRegistrationCode("PLEASE_REPLACE_ME"); - onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); - onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(UUID.randomUUID().toString()); - onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); - onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); - final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); - assertNotNull(onboardingResponse); - assertNotNull(onboardingResponse.getCapabilityAlternateId()); - assertNotNull(onboardingResponse.getDeviceAlternateId()); - assertNotNull(onboardingResponse.getSensorAlternateId()); - assertNotNull(onboardingResponse.getAuthentication()); - assertNotNull(onboardingResponse.getAuthentication().getCertificate()); - assertNotNull(onboardingResponse.getAuthentication().getSecret()); - assertNotNull(onboardingResponse.getAuthentication().getType()); - assertNotNull(onboardingResponse.getConnectionCriteria()); - assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); - assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); - } + @Test + @Disabled("Please replace the placeholder for the registration code to run the test case.") + void + givenValidRegistrationCodeThereShouldBeAnOnboardingResponseWhenSendingAnOnboardingRequestForFarmingSoftware() { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + var onboardingParameters = new SecuredOnboardingParameters(); + onboardingParameters.setRegistrationCode("PLEASE_REPLACE_ME"); + onboardingParameters.setApplicationId(farmingSoftware.getApplicationId()); + onboardingParameters.setCertificationVersionId(farmingSoftware.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(UUID.randomUUID().toString()); + onboardingParameters.setPrivateKey(farmingSoftware.getPrivateKey()); + onboardingParameters.setPublicKey(farmingSoftware.getPublicKey()); + final var onboardingResponse = onboardingService.onboard(onboardingParameters); + assertNotNull(onboardingResponse); + assertNotNull(onboardingResponse.getCapabilityAlternateId()); + assertNotNull(onboardingResponse.getDeviceAlternateId()); + assertNotNull(onboardingResponse.getSensorAlternateId()); + assertNotNull(onboardingResponse.getAuthentication()); + assertNotNull(onboardingResponse.getAuthentication().getCertificate()); + assertNotNull(onboardingResponse.getAuthentication().getSecret()); + assertNotNull(onboardingResponse.getAuthentication().getType()); + assertNotNull(onboardingResponse.getConnectionCriteria()); + assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); + assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); + } - @Test - @Disabled("Please replace the placeholder for the registration code to run the test case.") - void - givenValidRegistrationCodeThereShouldBeAnOnboardingResponseWhenSendingAnOnboardingRequestForTelemetryPlatform() { - OnboardingService onboardingService = new OnboardingServiceImpl(new QA() {}); - SecuredOnboardingParameters onboardingParameters = new SecuredOnboardingParameters(); - onboardingParameters.setRegistrationCode("PLEASE_REPLACE_ME"); - onboardingParameters.setApplicationId(telemetryPlatform.getApplicationId()); - onboardingParameters.setCertificationVersionId(telemetryPlatform.getCertificationVersionId()); - onboardingParameters.setCertificationType(CertificationType.P12); - onboardingParameters.setGatewayId(Gateway.REST.getKey()); - onboardingParameters.setUuid(UUID.randomUUID().toString()); - onboardingParameters.setPrivateKey(telemetryPlatform.getPrivateKey()); - onboardingParameters.setPublicKey(telemetryPlatform.getPublicKey()); - final OnboardingResponse onboardingResponse = onboardingService.onboard(onboardingParameters); - assertNotNull(onboardingResponse); - assertNotNull(onboardingResponse.getCapabilityAlternateId()); - assertNotNull(onboardingResponse.getDeviceAlternateId()); - assertNotNull(onboardingResponse.getSensorAlternateId()); - assertNotNull(onboardingResponse.getAuthentication()); - assertNotNull(onboardingResponse.getAuthentication().getCertificate()); - assertNotNull(onboardingResponse.getAuthentication().getSecret()); - assertNotNull(onboardingResponse.getAuthentication().getType()); - assertNotNull(onboardingResponse.getConnectionCriteria()); - assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); - assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); - } + @Test + @Disabled("Please replace the placeholder for the registration code to run the test case.") + void + givenValidRegistrationCodeThereShouldBeAnOnboardingResponseWhenSendingAnOnboardingRequestForTelemetryPlatform() { + OnboardingService onboardingService = new OnboardingServiceImpl(new QA() { + }); + var onboardingParameters = new SecuredOnboardingParameters(); + onboardingParameters.setRegistrationCode("PLEASE_REPLACE_ME"); + onboardingParameters.setApplicationId(telemetryPlatform.getApplicationId()); + onboardingParameters.setCertificationVersionId(telemetryPlatform.getCertificationVersionId()); + onboardingParameters.setCertificationType(CertificationType.P12); + onboardingParameters.setGatewayId(Gateway.REST.getKey()); + onboardingParameters.setUuid(UUID.randomUUID().toString()); + onboardingParameters.setPrivateKey(telemetryPlatform.getPrivateKey()); + onboardingParameters.setPublicKey(telemetryPlatform.getPublicKey()); + final var onboardingResponse = onboardingService.onboard(onboardingParameters); + assertNotNull(onboardingResponse); + assertNotNull(onboardingResponse.getCapabilityAlternateId()); + assertNotNull(onboardingResponse.getDeviceAlternateId()); + assertNotNull(onboardingResponse.getSensorAlternateId()); + assertNotNull(onboardingResponse.getAuthentication()); + assertNotNull(onboardingResponse.getAuthentication().getCertificate()); + assertNotNull(onboardingResponse.getAuthentication().getSecret()); + assertNotNull(onboardingResponse.getAuthentication().getType()); + assertNotNull(onboardingResponse.getConnectionCriteria()); + assertNotNull(onboardingResponse.getConnectionCriteria().getMeasures()); + assertNotNull(onboardingResponse.getConnectionCriteria().getCommands()); + } } 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 7c1ae7e7..ba8a19a1 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 @@ -6,7 +6,6 @@ import com.dke.data.agrirouter.api.cancellation.DefaultCancellationToken; import com.dke.data.agrirouter.api.dto.encoding.DecodeMessageResponse; import com.dke.data.agrirouter.api.dto.messaging.FetchMessageResponse; -import com.dke.data.agrirouter.api.dto.onboard.OnboardingResponse; import com.dke.data.agrirouter.api.enums.ContentMessageType; import com.dke.data.agrirouter.api.enums.SystemMessageType; import com.dke.data.agrirouter.api.env.QA; @@ -25,11 +24,6 @@ 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.jetbrains.annotations.NotNull; import org.junit.jupiter.api.AfterEach; @@ -39,275 +33,288 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -/** Test case to show the behavior for chunked message sending. */ -class SendAndReceiveChunkedMessagesTest extends AbstractIntegrationTest { +import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; +import java.util.stream.Stream; - private static final int MAX_CHUNK_SIZE = 1024000; +/** + * Test case to show the behavior for chunked message sending. + */ +class SendAndReceiveChunkedMessagesTest extends AbstractIntegrationTest { - @Disabled("Takes to much during a normal run.") - @ParameterizedTest - @MethodSource - void givenRealMessageContentWhenSendingMessagesTheContentShouldMatchAfterReceivingAndMergingIt( - ByteString messageContent, int expectedNrOfChunks) throws Throwable { - actionsForSender(messageContent, expectedNrOfChunks); - actionsForTheRecipient(messageContent, expectedNrOfChunks); - } + private static final int MAX_CHUNK_SIZE = 1024000; - /** - * 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); + @Disabled("Takes to much during a normal run.") + @ParameterizedTest + @MethodSource + void givenRealMessageContentWhenSendingMessagesTheContentShouldMatchAfterReceivingAndMergingIt( + ByteString messageContent, int expectedNrOfChunks) throws Throwable { + actionsForSender(messageContent, expectedNrOfChunks); + actionsForTheRecipient(expectedNrOfChunks); + } - // [2] Wait for the agrirouter to process the message. - waitForTheAgrirouterToProcessSingleMessage(); + /** + * 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 expectedNrOfChunks - + */ + private void actionsForTheRecipient(int expectedNrOfChunks) + throws Throwable { + // [1] Fetch all the messages within the feed. The number of headers should match the number of + // chunks sent. + final var messageQueryService = new MessageQueryServiceImpl(new QA() { + }); + final var messageQueryParameters = new MessageQueryParameters(); + final var 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); - // [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()); + // [2] Wait for the agrirouter to process the message. + waitForTheAgrirouterToProcessSingleMessage(); - // [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())); + // [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(); + var fetchMessageResponses = + fetchMessageService.fetch( + recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + Assertions.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(expectedNrOfChunks, fetchMessageResponses.get().size()); - // [5] Map the results from the query to 'real' messages within the feed and perform some - // assertions. - final List feedMessages = + // [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())) - .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."); + .map( + fetchMessageResponse -> + decodeMessageService.decode(fetchMessageResponse.getCommand().getMessage())) + .forEach( + decodeMessageResponse -> + Assertions.assertEquals( + Response.ResponseEnvelope.ResponseBodyType.ACK_FOR_FEED_MESSAGE, + decodeMessageResponse.getResponseEnvelope().getType())); - // [6] 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); + // [5] Map the results from the query to 'real' messages within the feed and perform some + // assertions. + final var feedMessages = + fetchMessageResponses.get().stream() + .map( + fetchMessageResponse -> + decodeMessageService.decode(fetchMessageResponse.getCommand().getMessage())) + .map( + decodeMessageResponse -> + messageQueryService.decode( + decodeMessageResponse.getResponsePayloadWrapper().getDetails().getValue())) + .map(messageQueryResponse -> messageQueryResponse.getMessages(0)) + .toList(); + Assertions.assertEquals(expectedNrOfChunks, feedMessages.size()); + feedMessages.forEach( + feedMessage -> Assertions.assertNotNull(feedMessage.getHeader().getChunkContext())); + Assertions.assertEquals( + feedMessages.get(0).getHeader().getChunkContext().getTotal(), expectedNrOfChunks); + final var 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."); - // [7] 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."); - } + // [6] Confirm the chunks to remove them from the feed. + final var messageIdsToConfirm = + feedMessages.stream() + .map(feedMessage -> feedMessage.getHeader().getMessageId()) + .collect(Collectors.toList()); + final var messageConfirmationService = + new MessageConfirmationServiceImpl(new QA() { + }); + final var messageConfirmationParameters = + new MessageConfirmationParameters(); + messageConfirmationParameters.setOnboardingResponse(recipient); + messageConfirmationParameters.setMessageIds(messageIdsToConfirm); + messageConfirmationService.send(messageConfirmationParameters); - /** - * 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); + // [7] 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."); + } - // [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())); + /** + * 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 var sendMessageService = new SendMessageServiceImpl(); + final var onboardingResponse = + OnboardingResponseRepository.read(OnboardingResponseRepository.Identifier.FARMING_SOFTWARE); - PayloadParameters payloadParameters = new PayloadParameters(); - payloadParameters.setValue(messageContent); - payloadParameters.setTypeUrl(SystemMessageType.EMPTY.getKey()); + // [1] Define the raw message, in this case this is the Base64 encoded message content, no + // chunking needed. + var 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())); - // [2] Chunk the message content using the SDK specific methods ('chunkAndEncode'). - List tuples = - encodeMessageService.chunkAndBase64EncodeEachChunk( - messageHeaderParameters, payloadParameters, onboardingResponse); + var payloadParameters = new PayloadParameters(); + payloadParameters.setValue(messageContent); + payloadParameters.setTypeUrl(SystemMessageType.EMPTY.getKey()); - tuples.forEach( - messageParameterTuple -> - Assertions.assertTrue( - Objects.requireNonNull(messageParameterTuple.getPayloadParameters().getValue()) - .toStringUtf8() - .length() - <= MAX_CHUNK_SIZE)); + // [2] Chunk the message content using the SDK specific methods ('chunkAndEncode'). + var tuples = + encodeMessageService.chunkAndBase64EncodeEachChunk( + messageHeaderParameters, payloadParameters, onboardingResponse); - List encodedMessages = encodeMessageService.encode(tuples); + tuples.forEach( + messageParameterTuple -> + Assertions.assertTrue( + Objects.requireNonNull(messageParameterTuple.getPayloadParameters().getValue()) + .toStringUtf8() + .length() + <= MAX_CHUNK_SIZE)); - // [3] Send the chunks to the agrirouter. - SendMessageParameters sendMessageParameters = new SendMessageParameters(); - sendMessageParameters.setEncodedMessages(encodedMessages); - sendMessageParameters.setOnboardingResponse(onboardingResponse); - sendMessageService.send(sendMessageParameters); + var encodedMessages = encodeMessageService.encode(tuples); - // [4] Wait for the AR to process the chunks. - waitForTheAgrirouterToProcessMultipleMessages(); + // [3] Send the chunks to the agrirouter. + var sendMessageParameters = new SendMessageParameters(); + sendMessageParameters.setEncodedMessages(encodedMessages); + sendMessageParameters.setOnboardingResponse(onboardingResponse); + sendMessageService.send(sendMessageParameters); - // [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)); + // [4] Wait for the AR to process the chunks. + waitForTheAgrirouterToProcessMultipleMessages(); - Assertions.assertTrue(fetchMessageResponses.isPresent()); - Assertions.assertEquals(expectedNrOfChunks, fetchMessageResponses.get().size()); + // [5] Check if the chunks were processed successfully. + FetchMessageService fetchMessageService = new FetchMessageServiceImpl(); + var fetchMessageResponses = + fetchMessageService.fetch( + onboardingResponse, + new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - 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.assertTrue(fetchMessageResponses.isPresent()); + Assertions.assertEquals(expectedNrOfChunks, fetchMessageResponses.get().size()); - Assertions.assertMatchesAny( - Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), - decodeMessageResponse.get().getResponseEnvelope().getResponseCode()); - }); - } + DecodeMessageService decodeMessageService = new DecodeMessageServiceImpl(); + var decodeMessageResponse = new AtomicReference(); + fetchMessageResponses.get().stream() + .map(FetchMessageResponse::getCommand) + .forEach( + message -> { + Assertions.assertNotNull(message); + decodeMessageResponse.set(decodeMessageService.decode(message.getMessage())); - /** - * Delivers fake message content for multiple test cases. - * - * @return - - */ - @SuppressWarnings("unused") - private static @NotNull Stream - givenRealMessageContentWhenSendingMessagesTheContentShouldMatchAfterReceivingAndMergingIt() - throws Throwable { - return Stream.of( - Arguments.of( - ByteString.copyFrom(ContentReader.readRawData(ContentReader.Identifier.BIG_TASK_DATA)), - 3)); - } + Assertions.assertMatchesAny( + Arrays.asList(HttpStatus.SC_OK, HttpStatus.SC_CREATED, HttpStatus.SC_NO_CONTENT), + decodeMessageResponse.get().getResponseEnvelope().getResponseCode()); + }); + } - /** - * 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() {}); + /** + * Delivers fake message content for multiple test cases. + * + * @return - + */ + @SuppressWarnings("unused") + private static @NotNull Stream + givenRealMessageContentWhenSendingMessagesTheContentShouldMatchAfterReceivingAndMergingIt() + throws Throwable { + return Stream.of( + Arguments.of( + ByteString.copyFrom(ContentReader.readRawData(ContentReader.Identifier.BIG_TASK_DATA)), + 3)); + } - // [1] Clean the outbox of the endpoint. - fetchMessageService.fetch( - recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + /** + * 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 var recipient = + OnboardingResponseRepository.read( + OnboardingResponseRepository.Identifier.COMMUNICATION_UNIT); + final var messageHeaderQueryService = + new MessageHeaderQueryServiceImpl(new QA() { + }); - // [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 = + // [1] Clean the outbox of the endpoint. 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()); + recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); - // [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)); - } + // [2] Fetch all message headers for the last 4 weeks (maximum retention time within the + // agrirouter). + final var 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(); + var 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 var decodeMessageResponse = + decodeMessageService.decode(fetchMessageResponses.get().get(0).getCommand().getMessage()); + Assertions.assertEquals( + Response.ResponseEnvelope.ResponseBodyType.ACK_FOR_FEED_HEADER_LIST, + decodeMessageResponse.getResponseEnvelope().getType()); + final var 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 var deleteMessageService = new DeleteMessageServiceImpl(); + final var deleteMessageParameters = new DeleteMessageParameters(); + deleteMessageParameters.setOnboardingResponse(recipient); + final var 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)); - } + // [4] Clean the outbox of the endpoint. + fetchMessageService.fetch( + recipient, new DefaultCancellationToken(MAX_TRIES_BEFORE_FAILURE, DEFAULT_INTERVAL)); + } } diff --git a/assets/images/agrirouter.svg b/assets/images/agrirouter.svg index c3d214b6..34f2a095 100755 --- a/assets/images/agrirouter.svg +++ b/assets/images/agrirouter.svg @@ -1,7 +1,7 @@ - +